From: <sag...@us...> - 2013-06-30 17:39:14
|
Revision: 2449 http://sourceforge.net/p/modplug/code/2449 Author: saga-games Date: 2013-06-30 17:39:01 +0000 (Sun, 30 Jun 2013) Log Message: ----------- [New] Added FT2-compatible extra smooth ramping option in song properties. Set SmoothFT2Ramping=1 in the [Misc] section of mptrack.ini to automatically detect if an XM file was made with FT2 to enable this settings automatically. [Mod] OpenMPT: Version is now 1.22.03.08 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/ModConvert.cpp trunk/OpenMPT/mptrack/ModConvert.h trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/dlg_misc.cpp trunk/OpenMPT/mptrack/dlg_misc.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/common/versionNumber.h 2013-06-30 17:39:01 UTC (rev 2449) @@ -17,7 +17,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 22 #define VER_MINOR 03 -#define VER_MINORMINOR 07 +#define VER_MINORMINOR 08 //Version string. For example "1.17.02.28" #define MPT_VERSION_STR VER_STRINGIZE(VER_MAJORMAJOR)"."VER_STRINGIZE(VER_MAJOR)"."VER_STRINGIZE(VER_MINOR)"."VER_STRINGIZE(VER_MINORMINOR) Modified: trunk/OpenMPT/mptrack/ModConvert.cpp =================================================================== --- trunk/OpenMPT/mptrack/ModConvert.cpp 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/mptrack/ModConvert.cpp 2013-06-30 17:39:01 UTC (rev 2449) @@ -475,6 +475,11 @@ CHANGEMODTYPE_WARNING(wEditHistory); } + if((nOldType & MOD_TYPE_XM) && m_SndFile.GetModFlag(MSF_VOLRAMP)) + { + CHANGEMODTYPE_WARNING(wVolRamp); + } + CriticalSection cs; m_SndFile.ChangeModTypeTo(nNewType); @@ -566,6 +571,7 @@ CHANGEMODTYPE_CHECK(wLinearSlides, "Linear Frequency Slides not supported by the new format."); CHANGEMODTYPE_CHECK(wEditHistory, "Edit history will not be saved in the new format."); CHANGEMODTYPE_CHECK(wMixmode, "Consider setting the mix levels to \"Compatible\" in the song properties when working with legacy formats."); + CHANGEMODTYPE_CHECK(wVolRamp, "Fasttracker 2 compatible super soft volume ramping gets lost when converting XM files to another type."); CHANGEMODTYPE_CHECK(wCompatibilityMode, "Consider enabling the \"compatible playback\" option in the song properties to increase compatiblity with other players."); CHANGEMODTYPE_CHECK(wGlobalVolumeNotSupported, "Default global volume is not supported by the new format."); Modified: trunk/OpenMPT/mptrack/ModConvert.h =================================================================== --- trunk/OpenMPT/mptrack/ModConvert.h 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/mptrack/ModConvert.h 2013-06-30 17:39:01 UTC (rev 2449) @@ -33,6 +33,7 @@ wReleaseNode, wEditHistory, wMixmode, + wVolRamp, wCompatibilityMode, wPitchToTempoLock, wGlobalVolumeNotSupported, Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-06-30 17:39:01 UTC (rev 2449) @@ -460,6 +460,7 @@ gbShowHackControls = (0 != CMainFrame::GetPrivateProfileDWord("Misc", "ShowHackControls", gbShowHackControls ? 1 : 0, iniFile)); DefaultPlugVolumeHandling = static_cast<uint8>(GetPrivateProfileInt("Misc", "DefaultPlugVolumeHandling", DefaultPlugVolumeHandling, iniFile)); if(DefaultPlugVolumeHandling >= PLUGIN_VOLUMEHANDLING_MAX) DefaultPlugVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; + autoApplySmoothFT2Ramping = (0 != CMainFrame::GetPrivateProfileDWord("Misc", "SmoothFT2Ramping", false, iniFile)); m_nSampleUndoMaxBuffer = CMainFrame::GetPrivateProfileLong("Sample Editor" , "UndoBufferSize", m_nSampleUndoMaxBuffer >> 20, iniFile); m_nSampleUndoMaxBuffer = MAX(1, m_nSampleUndoMaxBuffer) << 20; Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2013-06-30 17:39:01 UTC (rev 2449) @@ -246,6 +246,8 @@ int gnPlugWindowHeight; int32 gnPlugWindowLast; // Last selected plugin ID + bool autoApplySmoothFT2Ramping; + public: TrackerSettings(); Modified: trunk/OpenMPT/mptrack/dlg_misc.cpp =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.cpp 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/mptrack/dlg_misc.cpp 2013-06-30 17:39:01 UTC (rev 2449) @@ -137,6 +137,7 @@ CheckDlgButton(IDC_CHK_MIDICCBUG, sndFile.GetModFlag(MSF_MIDICC_BUGEMULATION)); CheckDlgButton(IDC_CHK_OLDRANDOM, sndFile.GetModFlag(MSF_OLDVOLSWING)); CheckDlgButton(IDC_CHK_OLDPITCH, sndFile.GetModFlag(MSF_OLD_MIDI_PITCHBENDS)); + CheckDlgButton(IDC_CHK_FT2VOLRAMP, sndFile.GetModFlag(MSF_VOLRAMP)); // Time signature information @@ -230,6 +231,7 @@ const bool XMorITorMPT = (type & (MOD_TYPE_XM | MOD_TYPE_IT | MOD_TYPE_MPT)) != 0; const bool ITorMPT = (type & (MOD_TYPE_IT | MOD_TYPE_MPT)) != 0; + const bool XM = (type & (MOD_TYPE_XM)) != 0; // Misc Flags if(ITorMPT) @@ -242,8 +244,9 @@ GetDlgItem(IDC_CHK_COMPATPLAY)->ShowWindow(XMorITorMPT); GetDlgItem(IDC_CHK_MIDICCBUG)->ShowWindow(XMorITorMPT); - GetDlgItem(IDC_CHK_OLDRANDOM)->ShowWindow(XMorITorMPT); + GetDlgItem(IDC_CHK_OLDRANDOM)->ShowWindow(ITorMPT); GetDlgItem(IDC_CHK_OLDPITCH)->ShowWindow(XMorITorMPT); + GetDlgItem(IDC_CHK_FT2VOLRAMP)->ShowWindow(XM); // Deprecated flags are greyed out if they are not being used. GetDlgItem(IDC_CHK_MIDICCBUG)->EnableWindow(sndFile.GetModFlag(MSF_MIDICC_BUGEMULATION) ? TRUE : FALSE); @@ -373,6 +376,7 @@ if(IsDlgButtonChecked(IDC_CHK_MIDICCBUG)) sndFile.SetModFlag(MSF_MIDICC_BUGEMULATION, true); if(IsDlgButtonChecked(IDC_CHK_OLDRANDOM)) sndFile.SetModFlag(MSF_OLDVOLSWING, true); if(IsDlgButtonChecked(IDC_CHK_OLDPITCH)) sndFile.SetModFlag(MSF_OLD_MIDI_PITCHBENDS, true); + if(IsDlgButtonChecked(IDC_CHK_FT2VOLRAMP)) sndFile.SetModFlag(MSF_VOLRAMP, true); } sndFile.m_nDefaultRowsPerBeat = GetDlgItemInt(IDC_ROWSPERBEAT); @@ -440,6 +444,9 @@ case IDC_CHK_OLDPITCH: strTipText = "Use old (imprecise) portamento logic for instrument plugins (not recommended)"; break; + case IDC_CHK_FT2VOLRAMP: + strTipText = "Use Fasttracker 2 style super soft volume ramping (recommended for true compatible playback)"; + break; } if(pNMHDR->code == TTN_NEEDTEXTA) Modified: trunk/OpenMPT/mptrack/dlg_misc.h =================================================================== --- trunk/OpenMPT/mptrack/dlg_misc.h 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/mptrack/dlg_misc.h 2013-06-30 17:39:01 UTC (rev 2449) @@ -20,7 +20,7 @@ { public: CComboBox m_TypeBox, m_ChannelsBox, m_TempoModeBox, m_PlugMixBox; - CButton m_CheckBox1, m_CheckBox2, m_CheckBox3, m_CheckBox4, m_CheckBox5, m_CheckBoxPT1x; + CButton m_CheckBox1, m_CheckBox2, m_CheckBox3, m_CheckBox4, m_CheckBox5, m_CheckBoxPT1x, m_CheckBoxFt2VolRamp; CSoundFile &sndFile; CHANNELINDEX m_nChannels; MODTYPE m_nType; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/mptrack/mptrack.rc 2013-06-30 17:39:01 UTC (rev 2449) @@ -869,39 +869,41 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,204,6,50,14 PUSHBUTTON "Cancel",IDCANCEL,204,24,50,14 + GROUPBOX "Type",IDC_FRAME_MODTYPE,6,6,192,48 COMBOBOX IDC_COMBO1,12,18,108,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO2,126,18,66,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "&Embed Instrument Parameters in ITP",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,36,174,8 + GROUPBOX "Playback",IDC_FRAME_MODFLAGS,6,60,246,54 CONTROL "&Linear Frequency Slides",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,72,91,10 CONTROL "&Old Effects (IT)",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,72,66,10 CONTROL "Fast &Volume Slides (S3M)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,84,96,10 CONTROL "Compatible &Gxx (IT)",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,84,84,10 CONTROL "Extended &filter range",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,96,81,10 CONTROL "&ProTracker 1.x Mode (MOD)",IDC_CHECK_PT1X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,96,108,10 + GROUPBOX "Extended Playback Options (OpenMPT only)",IDC_FRAME_MPTEXT,6,120,246,84 LTEXT "Mix Levels:",IDC_TEXT_MIXMODE,18,134,42,8 COMBOBOX IDC_COMBO_MIXLEVELS,60,132,84,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "More &compatible playback",IDC_CHK_COMPATPLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,150,222,12 - CONTROL "Plugin volume command &bug emulation",IDC_CHK_MIDICCBUG, + CONTROL "Use &smooth Fasttracker 2 volume ramping",IDC_CHK_FT2VOLRAMP, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,162,222,12 CONTROL "Old &random variation behaviour for instruments",IDC_CHK_OLDRANDOM, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,162,222,12 + CONTROL "Old P&itch Wheel behaviour for instrument plugins",IDC_CHK_OLDPITCH, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,174,222,12 - CONTROL "Old P&itch Wheel behaviour for instrument plugins",IDC_CHK_OLDPITCH, + CONTROL "Plugin volume command &bug emulation",IDC_CHK_MIDICCBUG, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,186,222,12 + GROUPBOX "Tempo",IDC_FRAME_TEMPOMODE,6,210,246,48 LTEXT "Mode:",IDC_TEXT_TEMPOMODE,12,222,21,8 COMBOBOX IDC_COMBO_TEMPOMODE,12,234,108,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Rows per beat",IDC_TEXT_ROWSPERBEAT,162,224,84,8 EDITTEXT IDC_ROWSPERBEAT,132,222,24,12,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "Rows per beat",IDC_TEXT_ROWSPERBEAT,162,224,84,8 + LTEXT "Rows per measure",IDC_TEXT_ROWSPERMEASURE,162,242,84,8 EDITTEXT IDC_ROWSPERMEASURE,132,240,24,12,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "Rows per measure",IDC_TEXT_ROWSPERMEASURE,162,242,84,8 + GROUPBOX "OpenMPT Version Info",IDC_FRAME_MPTVERSION,6,263,246,48 RTEXT "IDC_TEXT_CREATEDWITH",IDC_TEXT_CREATEDWITH,18,279,54,8 EDITTEXT IDC_EDIT_CREATEDWITH,78,277,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE RTEXT "IDC_TEXT_SAVEDWITH",IDC_TEXT_SAVEDWITH,18,295,54,8 EDITTEXT IDC_EDIT_SAVEDWITH,78,295,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE - GROUPBOX "Type",IDC_FRAME_MODTYPE,6,6,192,48 - GROUPBOX "Playback",IDC_FRAME_MODFLAGS,6,60,246,54 - GROUPBOX "Extended Playback Options (OpenMPT only)",IDC_FRAME_MPTEXT,6,120,246,84 - GROUPBOX "Tempo",IDC_FRAME_TEMPOMODE,6,210,246,48 - GROUPBOX "OpenMPT Version Info",IDC_FRAME_MPTVERSION,6,263,246,48 END IDD_SHOWLOG DIALOGEX 0, 0, 300, 149 Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/mptrack/resource.h 2013-06-30 17:39:01 UTC (rev 2449) @@ -820,6 +820,7 @@ #define IDC_CHECKCAPTURE 2324 #define IDC_CHK_OLDPITCH 2324 #define IDC_SPINMOVEMAPPING 2325 +#define IDC_CHK_FT2VOLRAMP 2325 #define IDC_BUTTON_HALF 2326 #define IDC_BUTTON_DOUBLE 2327 #define IDC_GROUPBOX_PITCH_TIME 2328 Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2013-06-30 17:39:01 UTC (rev 2449) @@ -16,6 +16,9 @@ #include "../common/misc_util.h" #include "XMTools.h" #include <algorithm> +#ifdef MODPLUG_TRACKER +#include "../mptrack/TrackerSettings.h" // For super smooth ramping option +#endif // MODPLUG_TRACKER // Allocate samples for an instrument @@ -279,7 +282,7 @@ if(!memcmp(fileHeader.trackerName, "FastTracker ", 12)) { - if(fileHeader.size && !memcmp(fileHeader.trackerName + 12, "v2.00 ", 8)) + if(fileHeader.size == 276 && !memcmp(fileHeader.trackerName + 12, "v2.00 ", 8)) { if(fileHeader.version < 0x0104) madeWith = verFT2Generic | verConfirmed; @@ -382,7 +385,7 @@ madeWith.set(verConfirmed); else if(instrHeader.size != 29 && madeWith[verDigiTracker]) madeWith.reset(verDigiTracker); - else if(madeWith[verFT2Clone |verFT2Generic] && instrHeader.size != 33) + else if(madeWith[verFT2Clone | verFT2Generic] && instrHeader.size != 33) { // Sure isn't FT2. // Note: FT2 NORMALLY writes shdr=40 for all samples, but sometimes it @@ -579,6 +582,16 @@ SetModFlag(MSF_COMPATIBLE_PLAY, false); } + if(madeWith[verFT2Generic] +#ifdef MODPLUG_TRACKER + && TrackerSettings::Instance().autoApplySmoothFT2Ramping +#endif // MODPLUG_TRACKER + ) + { + // apply FT2-style super-soft volume ramping + SetModFlag(MSF_VOLRAMP, true); + } + if(madeWithTracker.empty()) { if(madeWith[verDigiTracker] && sampleReserved == 0 && (instrType ? instrType : -1) == -1) Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/soundlib/Sndfile.h 2013-06-30 17:39:01 UTC (rev 2449) @@ -176,6 +176,7 @@ MSF_OLDVOLSWING = 2, //IT/MPT MSF_MIDICC_BUGEMULATION = 4, //IT/MPT/XM MSF_OLD_MIDI_PITCHBENDS = 8, //IT/MPT/XM + MSF_VOLRAMP = 16, //XM(FT2) }; DECLARE_FLAGSET(ModSpecificFlag) Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-06-30 16:11:29 UTC (rev 2448) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-06-30 17:39:01 UTC (rev 2449) @@ -1605,6 +1605,12 @@ int32 rampLength, globalRampLength, instrRampLength = 0; rampLength = globalRampLength = (rampUp ? m_MixerSettings.glVolumeRampUpSamples : m_MixerSettings.glVolumeRampDownSamples); //XXXih: add real support for bidi ramping here + + if(GetModFlag(MSF_VOLRAMP) && (GetType() & MOD_TYPE_XM)) + { + // apply FT2-style super-soft volume ramping (5ms), overriding openmpt settings + rampLength = globalRampLength = Util::muldivr(5, m_MixerSettings.gdwMixingFreq, 1000); + } if(pChn->pModInstrument != nullptr && rampUp) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |