bool CInstrumentN163::CanRelease() const { if (GetSeqEnable(0) != 0) { int index = GetSeqIndex(SEQ_VOLUME); return CFamiTrackerDoc::GetDoc()->GetSequence(SNDCHIP_N163, index, SEQ_VOLUME)->GetReleasePoint() != -1; } return false; }
void CInstrumentS5B::Store(CDocumentFile *pDocFile) { pDocFile->WriteBlockInt(SEQUENCE_COUNT); for (int i = 0; i < SEQUENCE_COUNT; i++) { pDocFile->WriteBlockChar(GetSeqEnable(i)); pDocFile->WriteBlockChar(GetSeqIndex(i)); } }
CInstrument *CInstrumentS5B::Clone() const { CInstrumentS5B *pNew = new CInstrumentS5B(); for (int i = 0; i < SEQUENCE_COUNT; i++) { pNew->SetSeqEnable(i, GetSeqEnable(i)); pNew->SetSeqIndex(i, GetSeqIndex(i)); } pNew->SetName(GetName()); return pNew; }
int CInstrumentManager::GetFreeSequenceIndex(inst_type_t InstType, int Type, CSeqInstrument *pInst) const { // moved from CFamiTrackerDoc std::vector<bool> Used(CSequenceCollection::MAX_SEQUENCES, false); for (int i = 0; i < MAX_INSTRUMENTS; i++) if (GetInstrumentType(i) == InstType) { // // // auto pInstrument = std::static_pointer_cast<CSeqInstrument>(GetInstrument(i)); if (pInstrument->GetSeqEnable(Type) && (pInst && pInst->GetSequence(Type)->GetItemCount() || pInst != pInstrument.get())) Used[pInstrument->GetSeqIndex(Type)] = true; } for (int i = 0; i < CSequenceCollection::MAX_SEQUENCES; ++i) if (!Used[i]) { const CSequence *pSeq = GetSequence(InstType, Type, i); if (!pSeq || !pSeq->GetItemCount()) return i; } return -1; }
void CInstrument2A03::Store(CDocumentFile *pDocFile) { pDocFile->WriteBlockInt(SEQUENCE_COUNT); for (int i = 0; i < SEQUENCE_COUNT; ++i) { pDocFile->WriteBlockChar(GetSeqEnable(i)); pDocFile->WriteBlockChar(GetSeqIndex(i)); } for (int i = 0; i < OCTAVE_RANGE; ++i) { for (int j = 0; j < 12; ++j) { pDocFile->WriteBlockChar(GetSample(i, j)); pDocFile->WriteBlockChar(GetSamplePitch(i, j)); } } }
void CInstrumentN163::SaveFile(CFile *pFile, CFamiTrackerDoc *pDoc) { // Sequences unsigned char SeqCount = SEQUENCE_COUNT; pFile->Write(&SeqCount, sizeof(char)); for (int i = 0; i < SEQUENCE_COUNT; ++i) { int Sequence = GetSeqIndex(i); if (GetSeqEnable(i)) { CSequence *pSeq = pDoc->GetSequence(SNDCHIP_N163, Sequence, i); char Enabled = 1; int ItemCount = pSeq->GetItemCount(); int LoopPoint = pSeq->GetLoopPoint(); int ReleasePoint = pSeq->GetReleasePoint(); int Setting = pSeq->GetSetting(); pFile->Write(&Enabled, sizeof(char)); pFile->Write(&ItemCount, sizeof(int)); pFile->Write(&LoopPoint, sizeof(int)); pFile->Write(&ReleasePoint, sizeof(int)); pFile->Write(&Setting, sizeof(int)); for (unsigned int j = 0; j < pSeq->GetItemCount(); j++) { int Value = pSeq->GetItem(j); pFile->Write(&Value, sizeof(char)); } } else { char Enabled = 0; pFile->Write(&Enabled, sizeof(char)); } } // Write wave config int WaveSize = GetWaveSize(); pFile->Write(&WaveSize, sizeof(int)); int WavePos = GetWavePos(); pFile->Write(&WavePos, sizeof(int)); int WaveCount = GetWaveCount(); pFile->Write(&WaveCount, sizeof(int)); for (int i = 0; i < WaveCount; ++i) { for (int j = 0; j < WaveSize; ++j) { char w = GetSample(i, j); pFile->Write(&w, sizeof(char)); } } }
CInstrument *CInstrument2A03::Clone() const { CInstrument2A03 *pNew = new CInstrument2A03(); for (int i = 0; i < SEQUENCE_COUNT; ++i) { pNew->SetSeqEnable(i, GetSeqEnable(i)); pNew->SetSeqIndex(i, GetSeqIndex(i)); } for (int i = 0; i < OCTAVE_RANGE; ++i) { for (int j = 0; j < 12; ++j) { pNew->SetSample(i, j, GetSample(i, j)); pNew->SetSamplePitch(i, j, GetSamplePitch(i, j)); } } pNew->SetName(GetName()); return pNew; }
void CInstrumentN163::Store(CDocumentFile *pDocFile) { // Store sequences pDocFile->WriteBlockInt(SEQUENCE_COUNT); for (int i = 0; i < SEQUENCE_COUNT; ++i) { pDocFile->WriteBlockChar(GetSeqEnable(i)); pDocFile->WriteBlockChar(GetSeqIndex(i)); } // Store wave pDocFile->WriteBlockInt(m_iWaveSize); pDocFile->WriteBlockInt(m_iWavePos); //pDocFile->WriteBlockInt(m_bAutoWavePos ? 1 : 0); pDocFile->WriteBlockInt(m_iWaveCount); for (int i = 0; i < m_iWaveCount; ++i) { for (int j = 0; j < m_iWaveSize; ++j) { pDocFile->WriteBlockChar(m_iSamples[i][j]); } } }
CInstrument *CInstrumentN163::Clone() const { CInstrumentN163 *pNew = new CInstrumentN163(); for (int i = 0; i < SEQUENCE_COUNT; ++i) { pNew->SetSeqEnable(i, GetSeqEnable(i)); pNew->SetSeqIndex(i, GetSeqIndex(i)); } pNew->SetWaveSize(GetWaveSize()); pNew->SetWavePos(GetWavePos()); // pNew->SetAutoWavePos(GetAutoWavePos()); pNew->SetWaveCount(GetWaveCount()); for (int i = 0; i < MAX_WAVE_COUNT; ++i) { for (int j = 0; j < MAX_WAVE_SIZE; ++j) { pNew->SetSample(i, j, GetSample(i, j)); } } pNew->SetName(GetName()); return pNew; }
void CInstrument2A03::SaveFile(CFile *pFile, CFamiTrackerDoc *pDoc) { // Saves an 2A03 instrument // Current version 2.2 // Sequences unsigned char SeqCount = SEQUENCE_COUNT; pFile->Write(&SeqCount, sizeof(char)); for (int i = 0; i < SEQUENCE_COUNT; ++i) { int Sequence = GetSeqIndex(i); if (GetSeqEnable(i)) { CSequence *pSeq = pDoc->GetSequence(Sequence, i); char Enabled = 1; int ItemCount = pSeq->GetItemCount(); int LoopPoint = pSeq->GetLoopPoint(); int ReleasePoint = pSeq->GetReleasePoint(); int Setting = pSeq->GetSetting(); pFile->Write(&Enabled, sizeof(char)); pFile->Write(&ItemCount, sizeof(int)); pFile->Write(&LoopPoint, sizeof(int)); pFile->Write(&ReleasePoint, sizeof(int)); pFile->Write(&Setting, sizeof(int)); for (unsigned int j = 0; j < pSeq->GetItemCount(); j++) { int Value = pSeq->GetItem(j); pFile->Write(&Value, sizeof(char)); } } else { char Enabled = 0; pFile->Write(&Enabled, sizeof(char)); } } unsigned int Count = 0; // Count assigned keys for (int i = 0; i < 6; i++) { // octaves for (int j = 0; j < 12; j++) { // notes if (GetSample(i, j) > 0) Count++; } } pFile->Write(&Count, sizeof(int)); bool UsedSamples[MAX_DSAMPLES]; memset(UsedSamples, 0, sizeof(bool) * MAX_DSAMPLES); // DPCM for (int i = 0; i < 6; ++i) { // octaves for (int j = 0; j < 12; ++j) { // notes if (GetSample(i, j) > 0) { unsigned char Index = i * 12 + j, Sample, Pitch; pFile->Write(&Index, sizeof(char)); Sample = GetSample(i, j); Pitch = GetSamplePitch(i, j); pFile->Write(&Sample, sizeof(char)); pFile->Write(&Pitch, sizeof(char)); UsedSamples[GetSample(i, j) - 1] = true; } } } int SampleCount = 0; // Count samples for (int i = 0; i < MAX_DSAMPLES; ++i) { if (pDoc->GetSampleSize(i) > 0 && UsedSamples[i]) SampleCount++; } // Write the number pFile->Write(&SampleCount, sizeof(int)); // List of sample names, the samples itself won't be stored for (int i = 0; i < MAX_DSAMPLES; ++i) { if (pDoc->GetSampleSize(i) > 0 && UsedSamples[i]) { CDSample *pSample = pDoc->GetDSample(i); int Len = (int)strlen(pSample->Name); pFile->Write(&i, sizeof(int)); pFile->Write(&Len, sizeof(int)); pFile->Write(pSample->Name, Len); pFile->Write(&pSample->SampleSize, sizeof(int)); pFile->Write(pSample->SampleData, pSample->SampleSize); } } }