void CInstrumentFDS::SaveFile(CFile *pFile, CFamiTrackerDoc *pDoc) { // Write wave for (int i = 0; i < WAVE_SIZE; ++i) { char sample = GetSample(i); pFile->Write(&sample, 1); } // Write modulation table for (int i = 0; i < MOD_SIZE; ++i) { char mod = GetModulation(i); pFile->Write(&mod, 1); } // Modulation parameters int data; data = GetModulationSpeed(); pFile->Write(&data, sizeof(int)); data = GetModulationDepth(); pFile->Write(&data, sizeof(int)); data = GetModulationDelay(); pFile->Write(&data, sizeof(int)); // Sequences StoreInstSequence(pFile, m_pVolume); StoreInstSequence(pFile, m_pArpeggio); StoreInstSequence(pFile, m_pPitch); }
int CInstrumentFDS::Compile(CFamiTrackerDoc *pDoc, CChunk *pChunk, int Index) { CStringA str; // Store wave // int Table = pCompiler->AddWavetable(m_iSamples); // int Table = 0; // pChunk->StoreByte(Table); // Store modulation table, two entries/byte for (int i = 0; i < 16; ++i) { char Data = GetModulation(i << 1) | (GetModulation((i << 1) + 1) << 3); pChunk->StoreByte(Data); } pChunk->StoreByte(GetModulationDelay()); pChunk->StoreByte(GetModulationDepth()); pChunk->StoreWord(GetModulationSpeed()); // Store sequences char Switch = (m_pVolume->GetItemCount() > 0 ? 1 : 0) | (m_pArpeggio->GetItemCount() > 0 ? 2 : 0) | (m_pPitch->GetItemCount() > 0 ? 4 : 0); pChunk->StoreByte(Switch); // Volume if (Switch & 1) { str.Format(CCompiler::LABEL_SEQ_FDS, Index * 5 + 0); pChunk->StoreReference(str); } // Arpeggio if (Switch & 2) { str.Format(CCompiler::LABEL_SEQ_FDS, Index * 5 + 1); pChunk->StoreReference(str); } // Pitch if (Switch & 4) { str.Format(CCompiler::LABEL_SEQ_FDS, Index * 5 + 2); pChunk->StoreReference(str); } int size = FIXED_FDS_INST_SIZE; size += (m_pVolume->GetItemCount() > 0 ? 2 : 0); size += (m_pArpeggio->GetItemCount() > 0 ? 2 : 0); size += (m_pPitch->GetItemCount() > 0 ? 2 : 0); return size; }
void CInstrumentFDS::SaveFile(CInstrumentFile *pFile, const CFamiTrackerDoc *pDoc) { // Write wave for (int i = 0; i < WAVE_SIZE; ++i) { pFile->WriteChar(GetSample(i)); } // Write modulation table for (int i = 0; i < MOD_SIZE; ++i) { pFile->WriteChar(GetModulation(i)); } // Modulation parameters pFile->WriteInt(GetModulationSpeed()); pFile->WriteInt(GetModulationDepth()); pFile->WriteInt(GetModulationDelay()); // Sequences StoreInstSequence(pFile, m_pVolume); StoreInstSequence(pFile, m_pArpeggio); StoreInstSequence(pFile, m_pPitch); }
void CInstrumentFDS::Store(CDocumentFile *pDocFile) { // Write wave for (int i = 0; i < WAVE_SIZE; ++i) { pDocFile->WriteBlockChar(GetSample(i)); } // Write modulation table for (int i = 0; i < MOD_SIZE; ++i) { pDocFile->WriteBlockChar(GetModulation(i)); } // Modulation parameters pDocFile->WriteBlockInt(GetModulationSpeed()); pDocFile->WriteBlockInt(GetModulationDepth()); pDocFile->WriteBlockInt(GetModulationDelay()); // Sequences StoreSequence(pDocFile, m_pVolume); StoreSequence(pDocFile, m_pArpeggio); StoreSequence(pDocFile, m_pPitch); }