From: <sag...@us...> - 2015-05-23 17:07:42
|
Revision: 5148 http://sourceforge.net/p/modplug/code/5148 Author: saga-games Date: 2015-05-23 17:07:35 +0000 (Sat, 23 May 2015) Log Message: ----------- [New] Plugins: Apply volume swing to instrument plugins. Involves rearranging some code which hopefully won't break anything... [Mod] OpenMPT: Version is now 1.25.00.07 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2015-05-23 15:48:39 UTC (rev 5147) +++ trunk/OpenMPT/common/versionNumber.h 2015-05-23 17:07:35 UTC (rev 5148) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 25 #define VER_MINOR 00 -#define VER_MINORMINOR 06 +#define VER_MINORMINOR 07 //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/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-23 15:48:39 UTC (rev 5147) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2015-05-23 17:07:35 UTC (rev 5148) @@ -1458,6 +1458,52 @@ // Test case: PanReset.it if(IsCompatibleMode(TRK_IMPULSETRACKER)) ApplyInstrumentPanning(pChn, pIns, pSmp); + if(bResetEnv) + { + pChn->nVolSwing = pChn->nPanSwing = 0; + pChn->nResSwing = pChn->nCutSwing = 0; + if(pIns) + { + // IT Compatiblity: NNA is reset on every note change, not every instrument change (fixes spx-farspacedance.it). + if(IsCompatibleMode(TRK_IMPULSETRACKER)) pChn->nNNA = pIns->nNNA; + + if(!pIns->VolEnv.dwFlags[ENV_CARRY]) pChn->VolEnv.Reset(); + if(!pIns->PanEnv.dwFlags[ENV_CARRY]) pChn->PanEnv.Reset(); + if(!pIns->PitchEnv.dwFlags[ENV_CARRY]) pChn->PitchEnv.Reset(); + + // Volume Swing + if(pIns->nVolSwing) + { + const double delta = 2 * (((double) rand()) / RAND_MAX) - 1; + pChn->nVolSwing = static_cast<int32>(std::floor(delta * (IsCompatibleMode(TRK_IMPULSETRACKER) ? pChn->nInsVol : ((pChn->nVolume + 1) / 2)) * pIns->nVolSwing / 100.0)); + } + // Pan Swing + if(pIns->nPanSwing) + { + const double delta = 2 * (((double) rand()) / RAND_MAX) - 1; + pChn->nPanSwing = static_cast<int32>(std::floor(delta * (IsCompatibleMode(TRK_IMPULSETRACKER) ? 4 : 1) * pIns->nPanSwing)); + if(!IsCompatibleMode(TRK_IMPULSETRACKER)) + { + pChn->nRestorePanOnNewNote = pChn->nPan + 1; + } + } + // Cutoff Swing + if(pIns->nCutSwing) + { + int32 d = ((int32)pIns->nCutSwing * (int32)((rand() & 0xFF) - 0x7F)) / 128; + pChn->nCutSwing = (int16)((d * pChn->nCutOff + 1) / 128); + pChn->nRestoreCutoffOnNewNote = pChn->nCutOff + 1; + } + // Resonance Swing + if(pIns->nResSwing) + { + int32 d = ((int32)pIns->nResSwing * (int32)((rand() & 0xFF) - 0x7F)) / 128; + pChn->nResSwing = (int16)((d * pChn->nResonance + 1) / 128); + pChn->nRestoreResonanceOnNewNote = pChn->nResonance + 1; + } + } + } + if(!pSmp) return; if(period) { @@ -1591,48 +1637,6 @@ if(bResetEnv) { - pChn->nVolSwing = pChn->nPanSwing = 0; - pChn->nResSwing = pChn->nCutSwing = 0; - if(pIns) - { - // IT Compatiblity: NNA is reset on every note change, not every instrument change (fixes spx-farspacedance.it). - if(IsCompatibleMode(TRK_IMPULSETRACKER)) pChn->nNNA = pIns->nNNA; - - if(!pIns->VolEnv.dwFlags[ENV_CARRY]) pChn->VolEnv.Reset(); - if(!pIns->PanEnv.dwFlags[ENV_CARRY]) pChn->PanEnv.Reset(); - if(!pIns->PitchEnv.dwFlags[ENV_CARRY]) pChn->PitchEnv.Reset(); - - // Volume Swing - if(pIns->nVolSwing) - { - const double delta = 2 * (((double) rand()) / RAND_MAX) - 1; - pChn->nVolSwing = static_cast<int32>(std::floor(delta * (IsCompatibleMode(TRK_IMPULSETRACKER) ? pChn->nInsVol : ((pChn->nVolume + 1) / 2)) * pIns->nVolSwing / 100.0)); - } - // Pan Swing - if(pIns->nPanSwing) - { - const double delta = 2 * (((double) rand()) / RAND_MAX) - 1; - pChn->nPanSwing = static_cast<int32>(std::floor(delta * (IsCompatibleMode(TRK_IMPULSETRACKER) ? 4 : 1) * pIns->nPanSwing)); - if(!IsCompatibleMode(TRK_IMPULSETRACKER)) - { - pChn->nRestorePanOnNewNote = pChn->nPan + 1; - } - } - // Cutoff Swing - if(pIns->nCutSwing) - { - int32 d = ((int32)pIns->nCutSwing * (int32)((rand() & 0xFF) - 0x7F)) / 128; - pChn->nCutSwing = (int16)((d * pChn->nCutOff + 1) / 128); - pChn->nRestoreCutoffOnNewNote = pChn->nCutOff + 1; - } - // Resonance Swing - if(pIns->nResSwing) - { - int32 d = ((int32)pIns->nResSwing * (int32)((rand() & 0xFF) - 0x7F)) / 128; - pChn->nResSwing = (int16)((d * pChn->nResonance + 1) / 128); - pChn->nRestoreResonanceOnNewNote = pChn->nResonance + 1; - } - } pChn->nAutoVibDepth = 0; pChn->nAutoVibPos = 0; // IT Compatibility: Vibrato reset Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2015-05-23 15:48:39 UTC (rev 5147) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2015-05-23 17:07:35 UTC (rev 5148) @@ -2261,20 +2261,25 @@ //If new note, determine notevelocity to use. if(note != NOTE_NONE) { - uint16 velocity = static_cast<uint16>(4 * defaultVolume); + int32 velocity = static_cast<int32>(4 * defaultVolume); switch(pIns->nPluginVelocityHandling) { case PLUGIN_VELOCITYHANDLING_CHANNEL: - velocity = static_cast<uint16>(chn.nVolume); + velocity = chn.nVolume; break; } + int32 swing = chn.nVolSwing; + if(IsCompatibleMode(TRK_IMPULSETRACKER)) swing *= 4; + velocity += swing; + Limit(velocity, 0, 256); + ModCommand::NOTE realNote = note; if(ModCommand::IsNote(note)) realNote = pIns->NoteMap[note - NOTE_MIN]; // Experimental VST panning //ProcessMIDIMacro(nChn, false, m_MidiCfg.szMidiGlb[MIDIOUT_PAN], 0, nPlugin); - pPlugin->MidiCommand(GetBestMidiChannel(nChn), pIns->nMidiProgram, pIns->wMidiBank, realNote, velocity, nChn); + pPlugin->MidiCommand(GetBestMidiChannel(nChn), pIns->nMidiProgram, pIns->wMidiBank, realNote, static_cast<uint16>(velocity), nChn); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |