From: <sag...@us...> - 2012-01-14 14:58:58
|
Revision: 1164 http://modplug.svn.sourceforge.net/modplug/?rev=1164&view=rev Author: saga-games Date: 2012-01-14 14:58:51 +0000 (Sat, 14 Jan 2012) Log Message: ----------- [Ref] Added some GetEnvelope() functions to instrument and channel structs to retrieve a specified envelope. [Fix] Offset effect: Fractional offset wasn't reset (this could produce a very tiny but audible difference when having a portamento effect next to an offset effect in IT files). Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2012-01-09 23:08:13 UTC (rev 1163) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2012-01-14 14:58:51 UTC (rev 1164) @@ -1053,12 +1053,12 @@ p->nPattern = m_pSndFile->m_nPattern; if (m_dwNotifyType & MPTNOTIFY_SAMPLE) { - UINT nSmp = m_dwNotifyType & 0xFFFF; - for (UINT k=0; k<MAX_CHANNELS; k++) + SAMPLEINDEX nSmp = m_dwNotifyType & 0xFFFF; + for (CHANNELINDEX k = 0; k < MAX_CHANNELS; k++) { MODCHANNEL *pChn = &m_pSndFile->Chn[k]; p->dwPos[k] = 0; - if ((nSmp) && (nSmp <= m_pSndFile->m_nSamples) && (pChn->nLength) + if ((nSmp) && (nSmp <= m_pSndFile->GetNumSamples()) && (pChn->nLength) && (pChn->pSample) && (pChn->pSample == m_pSndFile->GetSample(nSmp).pSample) && ((!(pChn->dwFlags & CHN_NOTEFADE)) || (pChn->nFadeOutVol))) { @@ -1069,7 +1069,7 @@ if (m_dwNotifyType & (MPTNOTIFY_VOLENV|MPTNOTIFY_PANENV|MPTNOTIFY_PITCHENV)) { UINT nIns = m_dwNotifyType & 0xFFFF; - for (UINT k=0; k<MAX_CHANNELS; k++) + for (CHANNELINDEX k = 0; k < MAX_CHANNELS; k++) { MODCHANNEL *pChn = &m_pSndFile->Chn[k]; p->dwPos[k] = 0; @@ -1077,18 +1077,17 @@ && (pChn->pModInstrument) && (pChn->pModInstrument == m_pSndFile->Instruments[nIns]) && ((!(pChn->dwFlags & CHN_NOTEFADE)) || (pChn->nFadeOutVol))) { - MODCHANNEL_ENVINFO *env = &pChn->VolEnv; + enmEnvelopeTypes notifyEnv = ENV_VOLUME; if (m_dwNotifyType & MPTNOTIFY_PITCHENV) - { - env = &pChn->PitchEnv; - } else if (m_dwNotifyType & MPTNOTIFY_PANENV) - { - env = &pChn->PanEnv; - } + notifyEnv = ENV_PITCH; + else if (m_dwNotifyType & MPTNOTIFY_PANENV) + notifyEnv = ENV_PANNING; - if (env->flags & ENV_ENABLED) + const MODCHANNEL_ENVINFO &chnEnv = pChn->GetEnvelope(notifyEnv); + + if (chnEnv.flags & ENV_ENABLED) { - DWORD pos = env->nEnvPosition; + DWORD pos = chnEnv.nEnvPosition; if(m_pSndFile->IsCompatibleMode(TRK_IMPULSETRACKER) && pos > 0) { // Impulse Tracker envelope handling (see SndMix.cpp for details) @@ -1607,7 +1606,7 @@ m[63*4].note = NOTE_KEYOFF; m[63*4+1].note = NOTE_KEYOFF; } - if ((nInstrument) && (nInstrument <= pSong->m_nInstruments)) + if ((nInstrument) && (nInstrument <= pSong->GetNumInstruments())) { m_WaveFile.ReadInstrumentFromSong(1, pSong, nInstrument); } else Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2012-01-09 23:08:13 UTC (rev 1163) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2012-01-14 14:58:51 UTC (rev 1164) @@ -1245,38 +1245,25 @@ pIns = m_SndFile.Instruments[nIns]; if(pIns == nullptr) return false; - INSTRUMENTENVELOPE *pEnv = nullptr; + const INSTRUMENTENVELOPE &env = pIns->GetEnvelope(nEnv); - switch(nEnv) - { - case ENV_PANNING: - pEnv = &pIns->PanEnv; - break; - case ENV_PITCH: - pEnv = &pIns->PitchEnv; - break; - default: - pEnv = &pIns->VolEnv; - break; - } - // We don't want to copy empty envelopes - if(pEnv->nNodes == 0) + if(env.nNodes == 0) { return false; } strcpy(s, pszEnvHdr); - wsprintf(s + strlen(s), pszEnvFmt, pEnv->nNodes, pEnv->nSustainStart, pEnv->nSustainEnd, pEnv->nLoopStart, pEnv->nLoopEnd, (pEnv->dwFlags & ENV_SUSTAIN) ? 1 : 0, (pEnv->dwFlags & ENV_LOOP) ? 1 : 0, (pEnv->dwFlags & ENV_CARRY) ? 1 : 0); - for (UINT i = 0; i < pEnv->nNodes; i++) + wsprintf(s + strlen(s), pszEnvFmt, env.nNodes, env.nSustainStart, env.nSustainEnd, env.nLoopStart, env.nLoopEnd, (env.dwFlags & ENV_SUSTAIN) ? 1 : 0, (env.dwFlags & ENV_LOOP) ? 1 : 0, (env.dwFlags & ENV_CARRY) ? 1 : 0); + for (UINT i = 0; i < env.nNodes; i++) { if (strlen(s) >= sizeof(s)-32) break; - wsprintf(s+strlen(s), "%d,%d\r\n", pEnv->Ticks[i], pEnv->Values[i]); + wsprintf(s+strlen(s), "%d,%d\r\n", env.Ticks[i], env.Values[i]); } //Writing release node if(strlen(s) < sizeof(s) - 32) - wsprintf(s+strlen(s), "%u\r\n", pEnv->nReleaseNode); + wsprintf(s+strlen(s), "%u\r\n", env.nReleaseNode); dwMemSize = strlen(s)+1; if ((pMainFrm->OpenClipboard()) && ((hCpy = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, dwMemSize))!=NULL)) @@ -1310,7 +1297,6 @@ if ((hCpy) && ((p = (LPSTR)GlobalLock(hCpy)) != NULL)) { MODINSTRUMENT *pIns = m_SndFile.Instruments[nIns]; - INSTRUMENTENVELOPE *pEnv = nullptr; UINT susBegin = 0, susEnd = 0, loopBegin = 0, loopEnd = 0, bSus = 0, bLoop = 0, bCarry = 0, nPoints = 0, releaseNode = ENV_RELEASE_NODE_UNSET; DWORD dwMemSize = GlobalSize(hCpy), dwPos = strlen(pszEnvHdr); @@ -1325,26 +1311,16 @@ if (loopEnd >= nPoints) loopEnd = 0; if (loopBegin > loopEnd) loopBegin = loopEnd; - switch(nEnv) - { - case ENV_PANNING: - pEnv = &pIns->PanEnv; - break; - case ENV_PITCH: - pEnv = &pIns->PitchEnv; - break; - default: - pEnv = &pIns->VolEnv; - break; - } - pEnv->nNodes = nPoints; - pEnv->nSustainStart = susBegin; - pEnv->nSustainEnd = susEnd; - pEnv->nLoopStart = loopBegin; - pEnv->nLoopEnd = loopEnd; - pEnv->nReleaseNode = releaseNode; - pEnv->dwFlags = (pEnv->dwFlags & ~(ENV_LOOP|ENV_SUSTAIN|ENV_CARRY)) | (bLoop ? ENV_LOOP : 0) | (bSus ? ENV_SUSTAIN : 0) | (bCarry ? ENV_CARRY: 0) | (nPoints > 0 ? ENV_ENABLED : 0); + INSTRUMENTENVELOPE &env = pIns->GetEnvelope(nEnv); + env.nNodes = nPoints; + env.nSustainStart = susBegin; + env.nSustainEnd = susEnd; + env.nLoopStart = loopBegin; + env.nLoopEnd = loopEnd; + env.nReleaseNode = releaseNode; + env.dwFlags = (env.dwFlags & ~(ENV_LOOP|ENV_SUSTAIN|ENV_CARRY)) | (bLoop ? ENV_LOOP : 0) | (bSus ? ENV_SUSTAIN : 0) | (bCarry ? ENV_CARRY: 0) | (nPoints > 0 ? ENV_ENABLED : 0); + int oldn = 0; for (UINT i=0; i<nPoints; i++) { @@ -1356,8 +1332,8 @@ if (dwPos >= dwMemSize) break; int n2 = atoi(p+dwPos); if ((n1 < oldn) || (n1 > ENVELOPE_MAX_LENGTH)) n1 = oldn + 1; - pEnv->Ticks[i] = (WORD)n1; - pEnv->Values[i] = (BYTE)n2; + env.Ticks[i] = (WORD)n1; + env.Values[i] = (BYTE)n2; oldn = n1; while ((dwPos < dwMemSize) && (p[dwPos] != '\r') && (p[dwPos] != '\n')) dwPos++; if (dwPos >= dwMemSize) break; @@ -1369,7 +1345,7 @@ BYTE r = static_cast<BYTE>(atoi(p + dwPos)); if(r == 0 || r >= nPoints || !m_SndFile.GetModSpecifications().hasReleaseNode) r = ENV_RELEASE_NODE_UNSET; - pEnv->nReleaseNode = r; + env.nReleaseNode = r; } } GlobalUnlock(hCpy); Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2012-01-09 23:08:13 UTC (rev 1163) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2012-01-14 14:58:51 UTC (rev 1164) @@ -548,38 +548,24 @@ return false; } - INSTRUMENTENVELOPE *env; + INSTRUMENTENVELOPE &env = pIns->GetEnvelope(envelope); - switch(envelope) - { - case ENV_VOLUME: - default: - env = &pIns->VolEnv; - break; - case ENV_PANNING: - env = &pIns->PanEnv; - break; - case ENV_PITCH: - env = &pIns->PitchEnv; - break; - } - const DWORD flags = (ENV_ENABLED | extraFlags); if (enable) { - env->dwFlags |= flags; - if(!env->nNodes) + env.dwFlags |= flags; + if(!env.nNodes) { - env->Values[0] = env->Values[1] = defaultValue; - env->Ticks[0] = 0; - env->Ticks[1] = 10; - env->nNodes = 2; + env.Values[0] = env.Values[1] = defaultValue; + env.Ticks[0] = 0; + env.Ticks[1] = 10; + env.nNodes = 2; InvalidateRect(NULL, FALSE); } } else { - env->dwFlags &= ~flags; + env.dwFlags &= ~flags; } CriticalSection cs; @@ -589,28 +575,14 @@ { if(pSndFile->Chn[nChn].pModInstrument == pIns) { - MODCHANNEL_ENVINFO *envInfo; + MODCHANNEL_ENVINFO &chnEnv = pSndFile->Chn[nChn].GetEnvelope(envelope); - switch(envelope) - { - case ENV_VOLUME: - default: - envInfo = &pSndFile->Chn[nChn].VolEnv; - break; - case ENV_PANNING: - envInfo = &pSndFile->Chn[nChn].PanEnv; - break; - case ENV_PITCH: - envInfo = &pSndFile->Chn[nChn].PitchEnv; - break; - } - if(enable) { - envInfo->flags |= flags; + chnEnv.flags |= flags; } else { - envInfo->flags &= ~flags; + chnEnv.flags &= ~flags; } } } @@ -1181,7 +1153,7 @@ } if (pnotify->dwType & MPTNOTIFY_STOP) { - for (UINT i=0; i<MAX_CHANNELS; i++) + for (CHANNELINDEX i = 0; i < MAX_CHANNELS; i++) { if (m_dwNotifyPos[i]) { @@ -1196,7 +1168,7 @@ if ((pnotify->dwType & dwType) && ((pnotify->dwType & 0xFFFF) == m_nInstrument)) { BOOL bUpdate = FALSE; - for (UINT i=0; i<MAX_CHANNELS; i++) + for (CHANNELINDEX i = 0; i < MAX_CHANNELS; i++) { //DWORD newpos = (pSndFile->m_dwSongFlags & SONG_PAUSED) ? pnotify->dwPos[i] : 0; DWORD newpos = pnotify->dwPos[i]; @@ -1210,7 +1182,7 @@ { HDC hdc = ::GetDC(m_hWnd); DrawPositionMarks(hdc); - for (UINT j=0; j<MAX_CHANNELS; j++) + for (CHANNELINDEX j = 0; j < MAX_CHANNELS; j++) { //DWORD newpos = (pSndFile->m_dwSongFlags & SONG_PAUSED) ? pnotify->dwPos[j] : 0; DWORD newpos = pnotify->dwPos[j]; @@ -2552,23 +2524,7 @@ MODINSTRUMENT *pIns = GetInstrumentPtr(); if(pIns == nullptr) return nullptr; - // Now for the real thing. - INSTRUMENTENVELOPE *envelope = nullptr; - - switch(m_nEnv) - { - case ENV_VOLUME: - envelope = &pIns->VolEnv; - break; - case ENV_PANNING: - envelope = &pIns->PanEnv; - break; - case ENV_PITCH: - envelope = &pIns->PitchEnv; - break; - } - - return envelope; + return &pIns->GetEnvelope(m_nEnv); } Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2012-01-09 23:08:13 UTC (rev 1163) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2012-01-14 14:58:51 UTC (rev 1164) @@ -1889,19 +1889,19 @@ // Portamento Up case CMD_PORTAMENTOUP: - if ((!param) && (m_nType & MOD_TYPE_MOD)) break; + if ((!param) && (GetType() & MOD_TYPE_MOD)) break; PortamentoUp(nChn, param); break; // Portamento Down case CMD_PORTAMENTODOWN: - if ((!param) && (m_nType & MOD_TYPE_MOD)) break; + if ((!param) && (GetType() & MOD_TYPE_MOD)) break; PortamentoDown(nChn, param); break; // Volume Slide case CMD_VOLUMESLIDE: - if ((param) || (m_nType != MOD_TYPE_MOD)) VolumeSlide(pChn, param); + if ((param) || (GetType() != MOD_TYPE_MOD)) VolumeSlide(pChn, param); break; // Tone-Portamento @@ -1911,7 +1911,7 @@ // Tone-Portamento + Volume Slide case CMD_TONEPORTAVOL: - if ((param) || (m_nType != MOD_TYPE_MOD)) VolumeSlide(pChn, param); + if ((param) || (GetType() != MOD_TYPE_MOD)) VolumeSlide(pChn, param); TonePortamento(pChn, 0); break; @@ -1922,7 +1922,7 @@ // Vibrato + Volume Slide case CMD_VIBRATOVOL: - if ((param) || (m_nType != MOD_TYPE_MOD)) VolumeSlide(pChn, param); + if ((param) || (GetType() != MOD_TYPE_MOD)) VolumeSlide(pChn, param); Vibrato(pChn, 0); break; @@ -1936,10 +1936,10 @@ case CMD_TEMPO: // -> CODE#0010 // -> DESC="add extended parameter mechanism to pattern effects" - m = NULL; + m = nullptr; if (m_nRow < Patterns[m_nPattern].GetNumRows()-1) { - m = Patterns[m_nPattern] + (m_nRow+1) * m_nChannels + nChn; + m = Patterns[m_nPattern].GetpModCommand(m_nRow + 1, nChn); } if (m && m->command == CMD_XPARAM) { @@ -1950,7 +1950,7 @@ param = (param << 8) + m->param; } // -! NEW_FEATURE#0010 - if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) + if (GetType() & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) { if (param) pChn->nOldTempo = param; else param = pChn->nOldTempo; } @@ -3603,15 +3603,15 @@ MODCOMMAND *m; m = NULL; - if(m_nRow < Patterns[m_nPattern].GetNumRows()-1) m = Patterns[m_nPattern] + (m_nRow+1) * m_nChannels + nChn; + if(m_nRow < Patterns[m_nPattern].GetNumRows() - 1) m = Patterns[m_nPattern].GetpModCommand(m_nRow + 1, nChn); if(m && m->command == CMD_XPARAM) { UINT tmp = m->param; m = NULL; - if(m_nRow < Patterns[m_nPattern].GetNumRows()-2) m = Patterns[m_nPattern] + (m_nRow+2) * m_nChannels + nChn; + if(m_nRow < Patterns[m_nPattern].GetNumRows() - 2) m = Patterns[m_nPattern].GetpModCommand(m_nRow + 2, nChn); - if(m && m->command == CMD_XPARAM) param = (param<<16) + (tmp<<8) + m->param; + if(m && m->command == CMD_XPARAM) param = (param << 16) + (tmp << 8) + m->param; else param = (param<<8) + tmp; } else @@ -3625,11 +3625,12 @@ if ((pChn->rowCommand.note >= NOTE_MIN) && (pChn->rowCommand.note <= NOTE_MAX)) { pChn->nPos = param; + pChn->nPosLo = 0; if (pChn->nPos >= pChn->nLength) { // Offset beyond sample size - if (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) + if (!(GetType() & (MOD_TYPE_XM|MOD_TYPE_MT2))) { // IT Compatibility: Offset if(IsCompatibleMode(TRK_IMPULSETRACKER)) @@ -3659,6 +3660,7 @@ { // XXX what's this? pChn->nPos = param; + pChn->nPosLo = 0; } return; @@ -3936,7 +3938,7 @@ if (pIns->VolEnv.nReleaseNode != ENV_RELEASE_NODE_UNSET) { - pChn->VolEnv.nEnvValueAtReleaseJump = GetVolEnvValueFromPosition(pChn->VolEnv.nEnvPosition, pIns); + pChn->VolEnv.nEnvValueAtReleaseJump = GetVolEnvValueFromPosition(pChn->VolEnv.nEnvPosition, pIns->VolEnv); pChn->VolEnv.nEnvPosition = pIns->VolEnv.Ticks[pIns->VolEnv.nReleaseNode]; } Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2012-01-09 23:08:13 UTC (rev 1163) +++ trunk/OpenMPT/soundlib/Sndfile.h 2012-01-14 14:58:51 UTC (rev 1164) @@ -232,6 +232,20 @@ bool HasValidMIDIChannel() const { return (nMidiChannel >= 1 && nMidiChannel <= 17); } + INSTRUMENTENVELOPE &GetEnvelope(enmEnvelopeTypes envType) + { + switch(envType) + { + case ENV_VOLUME: + default: + return VolEnv; + case ENV_PANNING: + return PanEnv; + case ENV_PITCH: + return PitchEnv; + } + } + }; //MODINSTRUMENT; @@ -340,6 +354,20 @@ void ClearRowCmd() { rowCommand = MODCOMMAND::Empty(); } + MODCHANNEL_ENVINFO &GetEnvelope(enmEnvelopeTypes envType) + { + switch(envType) + { + case ENV_VOLUME: + default: + return VolEnv; + case ENV_PANNING: + return PanEnv; + case ENV_PITCH: + return PitchEnv; + } + } + typedef UINT VOLUME; VOLUME GetVSTVolume() {return (pModInstrument) ? pModInstrument->nGlobalVol * 4 : nVolume;} @@ -1193,7 +1221,7 @@ bool ReadFixedLineLengthMessage(const BYTE *data, const size_t length, const size_t lineLength, const size_t lineEndingLength, void (*pTextConverter)(char &) = nullptr); public: - int GetVolEnvValueFromPosition(int position, const MODINSTRUMENT* pIns) const; + int GetVolEnvValueFromPosition(int position, const INSTRUMENTENVELOPE &env) const; void ResetChannelEnvelopes(MODCHANNEL *pChn) const; void ResetChannelEnvelope(MODCHANNEL_ENVINFO &env) const; Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2012-01-09 23:08:13 UTC (rev 1163) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2012-01-14 14:58:51 UTC (rev 1164) @@ -1075,7 +1075,7 @@ return; } const int envpos = pChn->VolEnv.nEnvPosition - (IsCompatibleMode(TRK_IMPULSETRACKER) ? 1 : 0); - int envvol = GetVolEnvValueFromPosition(envpos, pIns); + int envvol = GetVolEnvValueFromPosition(envpos, pIns->VolEnv); // if we are in the release portion of the envelope, // rescale envelope factor so that it is proportional to the release point @@ -2405,8 +2405,7 @@ if(pChn->rowCommand.command == CMD_MIDI || pChn->rowCommand.command == CMD_SMOOTHMIDI) { - // Only smooth MIDI macros are processed on every tick - //if((pChn->nRowCommand == CMD_MIDI) && !(m_dwSongFlags & SONG_FIRSTTICK)) return; + // Also non-smooth MIDI Macros are processed on every row to update macros with volume or panning variables. if(pChn->rowCommand.param < 0x80) ProcessMIDIMacro(nChn, (pChn->rowCommand.command == CMD_SMOOTHMIDI), m_MidiCfg.szMidiSFXExt[pChn->nActiveMacro], pChn->rowCommand.param); else @@ -2505,12 +2504,12 @@ { case PLUGIN_VOLUMEHANDLING_DRYWET: if(hasVolCommand) pPlugin->SetDryRatio(2*vol); - else pPlugin->SetDryRatio(2*defaultVolume); + else pPlugin->SetDryRatio(2 * defaultVolume); break; case PLUGIN_VOLUMEHANDLING_MIDI: - if(hasVolCommand) pPlugin->MidiCC(GetBestMidiChannel(nChn), MIDICC_Volume_Coarse, min(127, 2*vol), nChn); - else pPlugin->MidiCC(GetBestMidiChannel(nChn), MIDICC_Volume_Coarse, min(127, 2*defaultVolume), nChn); + if(hasVolCommand) pPlugin->MidiCC(GetBestMidiChannel(nChn), MIDICC_Volume_Coarse, min(127, 2 * vol), nChn); + else pPlugin->MidiCC(GetBestMidiChannel(nChn), MIDICC_Volume_Coarse, min(127, 2 * defaultVolume), nChn); break; } @@ -2518,35 +2517,33 @@ } -int CSoundFile::GetVolEnvValueFromPosition(int position, const MODINSTRUMENT* pIns) const -//--------------------------------------------------------------------------------------- +int CSoundFile::GetVolEnvValueFromPosition(int position, const INSTRUMENTENVELOPE &env) const +//------------------------------------------------------------------------------------------- { - UINT pt = pIns->VolEnv.nNodes - 1; + UINT pt = env.nNodes - 1; - //Checking where current 'tick' is relative to the - //envelope points. - for (UINT i=0; i<(UINT)(pIns->VolEnv.nNodes-1); i++) + // Checking where current 'tick' is relative to the + // envelope points. + for (UINT i = 0; i < (UINT)(env.nNodes-1); i++) { - if (position <= pIns->VolEnv.Ticks[i]) + if (position <= env.Ticks[i]) { pt = i; break; } } - int x2 = pIns->VolEnv.Ticks[pt]; + int x2 = env.Ticks[pt]; int x1, envvol; - if (position >= x2) //Case: current 'tick' is on a envelope point. + if (position >= x2) // Case: current 'tick' is on a envelope point. { - envvol = pIns->VolEnv.Values[pt] << 2; - x1 = x2; - } - else //Case: current 'tick' is between two envelope points. + envvol = env.Values[pt] * 4; + } else // Case: current 'tick' is between two envelope points. { if (pt) { - envvol = pIns->VolEnv.Values[pt-1] << 2; - x1 = pIns->VolEnv.Ticks[pt-1]; + envvol = env.Values[pt - 1] * 4; + x1 = env.Ticks[pt - 1]; } else { envvol = 0; @@ -2555,9 +2552,9 @@ if(x2 > x1 && position > x1) { - //Linear approximation between the points; - //f(x+d) ~ f(x) + f'(x)*d, where f'(x) = (y2-y1)/(x2-x1) - envvol += ((position - x1) * (((int)pIns->VolEnv.Values[pt]<<2) - envvol)) / (x2 - x1); + // Linear approximation between the points; + // f(x+d) ~ f(x) + f'(x)*d, where f'(x) = (y2-y1)/(x2-x1) + envvol += ((position - x1) * (((int)env.Values[pt] * 4) - envvol)) / (x2 - x1); } } return envvol; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |