diff --git OpenMPT/soundlib/Load_mod.cpp OpenMPT/soundlib/Load_mod.cpp index 33c791a..0d2a93e 100644 --- OpenMPT/soundlib/Load_mod.cpp +++ OpenMPT/soundlib/Load_mod.cpp @@ -489,12 +489,12 @@ bool CSoundFile::ReadMod(FileReader &file, ModLoadingFlags loadFlags) // Check MOD Magic if(IsMagic(magic, "M.K.") // ProTracker and compatible || IsMagic(magic, "M!K!") // ProTracker (64+ patterns) - || IsMagic(magic, "FEST") // jobbig.mod by Mahoney || IsMagic(magic, "NSMS") // kingdomofpleasure.mod by bee hunter || IsMagic(magic, "LARD")) // judgement_day_gvine.mod by 4-mat { m_nChannels = 4; } else if(IsMagic(magic, "M&K!") + || IsMagic(magic, "FEST") // "His Master's Noise" musicdisk || IsMagic(magic, "N.T.")) { m_nChannels = 4; @@ -550,6 +550,8 @@ bool CSoundFile::ReadMod(FileReader &file, ModLoadingFlags loadFlags) const bool isFLT8 = IsMagic(magic, "FLT8") || IsMagic(magic, "EXO8"); // Only apply VBlank tests to M.K. (ProTracker) modules. const bool isMdKd = IsMagic(magic, "M.K."); + // Adjust finetune values for modules saved with "His Master's Noisetracker" + const bool isHMNT = IsMagic(magic, "M&K!") || IsMagic(magic, "FEST"); // Reading song title file.Seek(0); @@ -563,6 +565,11 @@ bool CSoundFile::ReadMod(FileReader &file, ModLoadingFlags loadFlags) MODSampleHeader sampleHeader; ReadSample(file, sampleHeader, Samples[smp], m_szNames[smp]); + if (isHMNT) + { + Samples[smp].nFineTune = (int)(-(signed char)((sampleHeader.finetune)<<3)); + } + totalSampleLen += Samples[smp].nLength; } @@ -641,7 +648,7 @@ bool CSoundFile::ReadMod(FileReader &file, ModLoadingFlags loadFlags) // In this case, the parameter of Dxx commands needs to be ignored. // - Use the same code to find notes that would be out-of-range on Amiga. // - Detect 7-bit panning. - bool isNoiseTracker = IsMagic(magic, "M&K!") || IsMagic(magic, "N.T."); + bool isNoiseTracker = IsMagic(magic, "M&K!") || IsMagic(magic, "N.T.") || IsMagic(magic, "FEST"); bool onlyAmigaNotes = true; bool fix7BitPanning = false; uint8 maxPanning = 0; // For detecting 8xx-as-sync