bool CInstrumentFDS::LoadFile(CInstrumentFile *pFile, int iVersion, CFamiTrackerDoc *pDoc) { // Read wave for (int i = 0; i < WAVE_SIZE; ++i) { SetSample(i, pFile->ReadChar()); } // Read modulation table for (int i = 0; i < MOD_SIZE; ++i) { SetModulation(i, pFile->ReadChar()); } // Modulation parameters SetModulationSpeed(pFile->ReadInt()); SetModulationDepth(pFile->ReadInt()); SetModulationDelay(pFile->ReadInt()); // Sequences LoadInstSequence(pFile, m_pVolume); LoadInstSequence(pFile, m_pArpeggio); LoadInstSequence(pFile, m_pPitch); if (iVersion <= 22) { for (unsigned int i = 0; i < m_pVolume->GetItemCount(); ++i) m_pVolume->SetItem(i, m_pVolume->GetItem(i) * 2); } return true; }
bool CInstrumentFDS::Load(CDocumentFile *pDocFile) { for (int i = 0; i < WAVE_SIZE; ++i) { SetSample(i, pDocFile->GetBlockChar()); } for (int i = 0; i < MOD_SIZE; ++i) { SetModulation(i, pDocFile->GetBlockChar()); } SetModulationSpeed(pDocFile->GetBlockInt()); SetModulationDepth(pDocFile->GetBlockInt()); SetModulationDelay(pDocFile->GetBlockInt()); // hack to fix earlier saved files (remove this eventually) /* if (pDocFile->GetBlockVersion() > 2) { LoadSequence(pDocFile, m_pVolume); LoadSequence(pDocFile, m_pArpeggio); if (pDocFile->GetBlockVersion() > 2) LoadSequence(pDocFile, m_pPitch); } else { */ unsigned int a = pDocFile->GetBlockInt(); unsigned int b = pDocFile->GetBlockInt(); pDocFile->RollbackPointer(8); if (a < 256 && (b & 0xFF) != 0x00) { } else { LoadSequence(pDocFile, m_pVolume); LoadSequence(pDocFile, m_pArpeggio); // // Note: Remove this line when files are unable to load // (if a file contains FDS instruments but FDS is disabled) // this was a problem in an earlier version. // if (pDocFile->GetBlockVersion() > 2) LoadSequence(pDocFile, m_pPitch); } // } // Older files was 0-15, new is 0-31 if (pDocFile->GetBlockVersion() <= 3) { for (unsigned int i = 0; i < m_pVolume->GetItemCount(); ++i) m_pVolume->SetItem(i, m_pVolume->GetItem(i) * 2); } return true; }
bool CInstrumentFDS::LoadFile(CFile *pFile, int iVersion, CFamiTrackerDoc *pDoc) { // Read wave for (int i = 0; i < WAVE_SIZE; ++i) { char sample; pFile->Read(&sample, 1); SetSample(i, sample); } // Read modulation table for (int i = 0; i < MOD_SIZE; ++i) { char mod; pFile->Read(&mod, 1); SetModulation(i, mod); } // Modulation parameters int data; pFile->Read(&data, sizeof(int)); SetModulationSpeed(data); pFile->Read(&data, sizeof(int)); SetModulationDepth(data); pFile->Read(&data, sizeof(int)); SetModulationDelay(data); // Sequences LoadInstSequence(pFile, m_pVolume); LoadInstSequence(pFile, m_pArpeggio); LoadInstSequence(pFile, m_pPitch); if (iVersion <= 22) { for (unsigned int i = 0; i < m_pVolume->GetItemCount(); ++i) m_pVolume->SetItem(i, m_pVolume->GetItem(i) * 2); } return true; }