From: <sag...@us...> - 2011-10-03 14:26:20
|
Revision: 1077 http://modplug.svn.sourceforge.net/modplug/?rev=1077&view=rev Author: saga-games Date: 2011-10-03 14:26:14 +0000 (Mon, 03 Oct 2011) Log Message: ----------- [Imp] Instrument Tab: Cutoff frequency display reflects filter enable behaviour in IT compatible mode now. [Fix] Filter enable behaviour is always the same in IT compatible mode, even with extended filter rnage. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/soundlib/Snd_flt.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2011-10-02 16:40:50 UTC (rev 1076) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2011-10-03 14:26:14 UTC (rev 1077) @@ -1376,9 +1376,14 @@ MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; if (pIns) { - CHAR s[64]; - if (pIns->nIFC&0x80 && pIns->nIFC<0xFF) { - wsprintf(s, "%d Hz", pSndFile->CutOffToFrequency(pIns->nIFC & 0x7F)); + CHAR s[32]; + // In IT Compatible mode, it is enough to just have resonance enabled to turn on the filter. + const bool resEnabled = ((pIns->nIFR & 0x80) && (pIns->nIFR & 0x7F) && pSndFile->IsCompatibleMode(TRK_IMPULSETRACKER)); + + if (((pIns->nIFC & 0x80) && pIns->nIFC < 0xFF) || resEnabled) + { + const BYTE cutoff = (resEnabled && !(pIns->nIFC & 0x80)) ? 0x7F : (pIns->nIFC & 0x7F); + wsprintf(s, "%d Hz", pSndFile->CutOffToFrequency(cutoff)); } else { wsprintf(s, "Off"); } @@ -2272,6 +2277,7 @@ } } } + UpdateFilterText(); SetInstrumentModified(true); SwitchToView(); } @@ -2350,7 +2356,7 @@ // -> CODE#0027 // -> DESC="per-instrument volume ramping setup (refered as attack)" // Volume ramping (attack) - if (pSlider==&m_SliderAttack) + if (pSlider == &m_SliderAttack) { n = m_SliderAttack.GetPos(); int newRamp = n; //? MAX_ATTACK_LENGTH - n : 0; @@ -2363,7 +2369,7 @@ // -! NEW_FEATURE#0027 } // Volume Swing - else if (pSlider==&m_SliderVolSwing) + else if (pSlider == &m_SliderVolSwing) { n = m_SliderVolSwing.GetPos(); if ((n >= 0) && (n <= 100) && (n != (int)pIns->nVolSwing)) @@ -2373,7 +2379,7 @@ } } // Pan Swing - else if (pSlider==&m_SliderPanSwing) + else if (pSlider == &m_SliderPanSwing) { n = m_SliderPanSwing.GetPos(); if ((n >= 0) && (n <= 64) && (n != (int)pIns->nPanSwing)) @@ -2383,7 +2389,7 @@ } } //Cutoff swing - else if (pSlider==&m_SliderCutSwing) + else if (pSlider == &m_SliderCutSwing) { n = m_SliderCutSwing.GetPos(); if ((n >= 0) && (n <= 64) && (n != (int)pIns->nCutSwing)) @@ -2393,7 +2399,7 @@ } } //Resonance swing - else if (pSlider==&m_SliderResSwing) + else if (pSlider == &m_SliderResSwing) { n = m_SliderResSwing.GetPos(); if ((n >= 0) && (n <= 64) && (n != (int)pIns->nResSwing)) @@ -2403,7 +2409,7 @@ } } // Filter CutOff - else if (pSlider==&m_SliderCutOff) + else if (pSlider == &m_SliderCutOff) { n = m_SliderCutOff.GetPos(); if ((n >= 0) && (n < 0x80) && (n != (int)(pIns->nIFC & 0x7F))) @@ -2415,7 +2421,7 @@ filterChanger = true; } } - else if (pSlider==&m_SliderResonance) + else if (pSlider == &m_SliderResonance) { // Filter Resonance n = m_SliderResonance.GetPos(); @@ -2424,12 +2430,13 @@ pIns->nIFR &= 0x80; pIns->nIFR |= (BYTE)n; SetInstrumentModified(true); + UpdateFilterText(); filterChanger = true; } } // Update channels - if (filterChanger==true) + if (filterChanger == true) { for (UINT i=0; i<MAX_CHANNELS; i++) { Modified: trunk/OpenMPT/soundlib/Snd_flt.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_flt.cpp 2011-10-02 16:40:50 UTC (rev 1076) +++ trunk/OpenMPT/soundlib/Snd_flt.cpp 2011-10-03 14:26:14 UTC (rev 1077) @@ -65,7 +65,7 @@ cutoff = cutoff * (flt_modifier + 256) / 256; // Filtering is only ever done if either cutoff is not full or if resonance is set. - if (cutoff < 254 || resonance != 0) + if(cutoff < 254 || resonance != 0) { pChn->dwFlags |= CHN_FILTER; } else @@ -85,6 +85,12 @@ } else { + // We might end up here even if IT compatible playback mode is enabled and if extended filter range flag is set. + // We'd still want compatible behaviour then, but at the same time use MPT's cutoff / resonance settings + if(IsCompatibleMode(TRK_IMPULSETRACKER) && resonance == 0 && cutoff * (flt_modifier + 256) >= 254 * 256) + { + return; + } pChn->dwFlags |= CHN_FILTER; float fc = (float)CutOffToFrequency(cutoff, flt_modifier); Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-10-02 16:40:50 UTC (rev 1076) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-10-03 14:26:14 UTC (rev 1077) @@ -1013,7 +1013,10 @@ pChn->nCutSwing = pChn->nResSwing = 0; } #ifndef NO_FILTER - if ((pChn->nCutOff < 0x7F || UseITFilterMode()) && (bFlt)) SetupChannelFilter(pChn, true); + if ((pChn->nCutOff < 0x7F || IsCompatibleMode(TRK_IMPULSETRACKER)) && (bFlt)) + { + SetupChannelFilter(pChn, true); + } #endif // NO_FILTER } // Special case for MPT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |