static void ReadTuningMap(std::istream& iStrm, CSoundFile& csf, const size_t = 0) //------------------------------------------------------------------------------- { typedef std::map<WORD, std::string> MAP; typedef MAP::iterator MAP_ITER; MAP shortToTNameMap; ReadTuningMapTemplate<uint16, uint8>(iStrm, shortToTNameMap); //Read & set tunings for instruments std::list<std::string> notFoundTunings; for(UINT i = 1; i<=csf.GetNumInstruments(); i++) { uint16 ui; iStrm.read(reinterpret_cast<char*>(&ui), sizeof(ui)); MAP_ITER iter = shortToTNameMap.find(ui); if(csf.Instruments[i] && iter != shortToTNameMap.end()) { const std::string str = iter->second; if(str == std::string("->MPT_ORIGINAL_IT<-")) { csf.Instruments[i]->pTuning = nullptr; continue; } csf.Instruments[i]->pTuning = csf.GetTuneSpecificTunings().GetTuning(str); if(csf.Instruments[i]->pTuning) continue; #ifdef MODPLUG_TRACKER csf.Instruments[i]->pTuning = csf.GetLocalTunings().GetTuning(str); if(csf.Instruments[i]->pTuning) continue; #endif csf.Instruments[i]->pTuning = csf.GetBuiltInTunings().GetTuning(str); if(csf.Instruments[i]->pTuning) continue; if(str == "TET12" && csf.GetBuiltInTunings().GetNumTunings() > 0) csf.Instruments[i]->pTuning = &csf.GetBuiltInTunings().GetTuning(0); if(csf.Instruments[i]->pTuning) continue; //Checking if not found tuning already noticed. std::list<std::string>::iterator iter; iter = find(notFoundTunings.begin(), notFoundTunings.end(), str); if(iter == notFoundTunings.end()) { notFoundTunings.push_back(str); std::string erm = std::string("Tuning ") + str + std::string(" used by the module was not found."); csf.AddToLog(erm); #ifdef MODPLUG_TRACKER if(csf.GetpModDoc() != nullptr) { csf.GetpModDoc()->SetModified(); //The tuning is changed so the modified flag is set. } #endif // MODPLUG_TRACKER } csf.Instruments[i]->pTuning = csf.GetDefaultTuning(); } else //This 'else' happens probably only in case of corrupted file. { if(csf.Instruments[i]) csf.Instruments[i]->pTuning = csf.GetDefaultTuning(); } } //End read&set instrument tunings }