From: <sag...@us...> - 2011-09-19 23:31:36
|
Revision: 1046 http://modplug.svn.sourceforge.net/modplug/?rev=1046&view=rev Author: saga-games Date: 2011-09-19 23:31:30 +0000 (Mon, 19 Sep 2011) Log Message: ----------- [Fix] Volume / Panning Swing should range from 0 to 100, not 0 to 64. [Fix] IT Compatibility: Volume / Panning Swing algorithms were wrong. [Mod] OpenMPT: Version is now 1.20.00.25 Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/version.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2011-09-19 16:14:07 UTC (rev 1045) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2011-09-19 23:31:30 UTC (rev 1046) @@ -957,8 +957,8 @@ m_CbnPluginVolumeHandling.AddString("None"); // Vol/Pan Swing - m_SliderVolSwing.SetRange(0, 64); - m_SliderPanSwing.SetRange(0, 64); + m_SliderVolSwing.SetRange(0, 100); + m_SliderPanSwing.SetRange(0, 100); m_SliderCutSwing.SetRange(0, 64); m_SliderResSwing.SetRange(0, 64); // Filter @@ -2365,7 +2365,7 @@ else if (pSlider==&m_SliderVolSwing) { n = m_SliderVolSwing.GetPos(); - if ((n >= 0) && (n <= 64) && (n != (int)pIns->nVolSwing)) + if ((n >= 0) && (n <= 100) && (n != (int)pIns->nVolSwing)) { pIns->nVolSwing = (BYTE)n; SetInstrumentModified(true); @@ -2375,7 +2375,7 @@ else if (pSlider==&m_SliderPanSwing) { n = m_SliderPanSwing.GetPos(); - if ((n >= 0) && (n <= 64) && (n != (int)pIns->nPanSwing)) + if ((n >= 0) && (n <= 100) && (n != (int)pIns->nPanSwing)) { pIns->nPanSwing = (BYTE)n; SetInstrumentModified(true); Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2011-09-19 16:14:07 UTC (rev 1045) +++ trunk/OpenMPT/mptrack/version.h 2011-09-19 23:31:30 UTC (rev 1046) @@ -15,7 +15,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 20 #define VER_MINOR 00 -#define VER_MINORMINOR 24 +#define VER_MINORMINOR 25 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2011-09-19 16:14:07 UTC (rev 1045) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2011-09-19 23:31:30 UTC (rev 1046) @@ -456,8 +456,8 @@ pIns->nPPC = pis->ppc; pIns->nIFC = pis->ifc; pIns->nIFR = pis->ifr; - pIns->nVolSwing = pis->rv; - pIns->nPanSwing = pis->rp; + pIns->nVolSwing = min(pis->rv, 100); + pIns->nPanSwing = min(pis->rp, 100); pIns->nPan = (pis->dfp & 0x7F) << 2; if (pIns->nPan > 256) pIns->nPan = 128; if (pis->dfp < 0x80) pIns->dwFlags |= INS_SETPANNING; @@ -1621,8 +1621,8 @@ iti.gbv = (BYTE)(pIns->nGlobalVol << 1); iti.dfp = (BYTE)(pIns->nPan >> 2); if (!(pIns->dwFlags & INS_SETPANNING)) iti.dfp |= 0x80; - iti.rv = pIns->nVolSwing; - iti.rp = pIns->nPanSwing; + iti.rv = min(pIns->nVolSwing, 100); + iti.rp = min(pIns->nPanSwing, 100); iti.ifc = pIns->nIFC; iti.ifr = pIns->nIFR; iti.nos = 0; Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-09-19 16:14:07 UTC (rev 1045) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-09-19 23:31:30 UTC (rev 1046) @@ -962,8 +962,8 @@ // IT compatibility: MPT has a weird vol swing algorithm.... if(IsCompatibleMode(TRK_IMPULSETRACKER)) { - double d = 2 * (((double) rand()) / RAND_MAX) - 1; - pChn->nVolSwing = d * pIns->nVolSwing / 100.0 * pChn->nVolume; + double d = 128 * (((double) rand()) / RAND_MAX) - 64; + pChn->nVolSwing = d * pIns->nVolSwing / 100.0; } else { int d = ((LONG)pIns->nVolSwing * (LONG)((rand() & 0xFF) - 0x7F)) / 128; Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2011-09-19 16:14:07 UTC (rev 1045) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2011-09-19 23:31:30 UTC (rev 1046) @@ -918,9 +918,14 @@ { if(pChn->nVolSwing) { - if(GetModFlag(MSF_OLDVOLSWING)) + if(IsCompatibleMode(TRK_IMPULSETRACKER)) { vol += pChn->nVolSwing; + Limit(vol, 0, 64); + } else if(GetModFlag(MSF_OLDVOLSWING)) + { + vol += pChn->nVolSwing; + Limit(vol, 0, 256); } else { @@ -928,28 +933,16 @@ pChn->nVolume = CLAMP(pChn->nVolume, 0, 256); vol = pChn->nVolume; pChn->nVolSwing = 0; + Limit(vol, 0, 256); } } - - vol = CLAMP(vol, 0, 256); } void CSoundFile::ProcessPanningSwing(MODCHANNEL *pChn) //---------------------------------------------------- { - if(GetModFlag(MSF_OLDVOLSWING)) - { - pChn->nRealPan = pChn->nPan + pChn->nPanSwing; - } - else - { - pChn->nPan += pChn->nPanSwing; - pChn->nPan = CLAMP(pChn->nPan, 0, 256); - pChn->nPanSwing = 0; - pChn->nRealPan = pChn->nPan; - } - + pChn->nRealPan = pChn->nPan + pChn->nPanSwing; pChn->nRealPan = CLAMP(pChn->nRealPan, 0, 256); } @@ -2020,7 +2013,10 @@ { int vol = pChn->nVolume; - ProcessVolumeSwing(pChn, vol); + if(!IsCompatibleMode(TRK_IMPULSETRACKER)) + { + ProcessVolumeSwing(pChn, vol); + } ProcessPanningSwing(pChn); ProcessTremolo(pChn, vol); ProcessTremor(pChn, vol); @@ -2047,6 +2043,12 @@ // vol is 14-bits if (vol) { + int insVol = pChn->nInsVol; // This is the "SV" value in ITTECH.TXT + if(IsCompatibleMode(TRK_IMPULSETRACKER)) + { + ProcessVolumeSwing(pChn, insVol); + } + // IMPORTANT: pChn->nRealVolume is 14 bits !!! // -> _muldiv( 14+8, 6+6, 18); => RealVolume: 14-bit result (22+12-20) @@ -2057,10 +2059,10 @@ pChn->nRealVolume = 0; } else if (m_pConfig->getGlobalVolumeAppliesToMaster()) { - pChn->nRealVolume = _muldiv(vol * MAX_GLOBAL_VOLUME, pChn->nGlobalVol * pChn->nInsVol, 1 << 20); + pChn->nRealVolume = _muldiv(vol * MAX_GLOBAL_VOLUME, pChn->nGlobalVol * insVol, 1 << 20); } else { - pChn->nRealVolume = _muldiv(vol * m_nGlobalVolume, pChn->nGlobalVol * pChn->nInsVol, 1 << 20); + pChn->nRealVolume = _muldiv(vol * m_nGlobalVolume, pChn->nGlobalVol * insVol, 1 << 20); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |