# HG changeset patch # User lbajardsilogic # Date 1190359792 0 # Node ID b8969a96b678f6303d83432f893a2e9f7e63720e # Parent 1ae07a8c28a04313e3a8e6392d850042b9c70bc6 bug in DIT filter integration found !!!! diff -r 1ae07a8c28a0 -r b8969a96b678 sv/filter/DSP.cpp --- a/sv/filter/DSP.cpp Thu Sep 20 09:16:41 2007 +0000 +++ b/sv/filter/DSP.cpp Fri Sep 21 07:29:52 2007 +0000 @@ -220,7 +220,7 @@ //c_synthphase[i]=p_synthphase[i]+((phase_diff*diffhop)*interpfactor); //if (currentposition 1) - val = (hopfactor-1)/(m_tmaxfactor-1)*100.0; - else if (hopfactor < 1) - val = (1/hopfactor - 1)*(1-m_tmaxfactor)*100.0; - else if (hopfactor == 1) - val = 0; - } - - if (name == "Pitch") { - if (min) *min = -100; - if (max) *max = 100; - if (deflt) *deflt = 0; - if (m_interpfactor > 1) - val = (m_interpfactor-1)/(m_pmaxfactor-1)*100.0; - else if (m_interpfactor < 1) - val = (1/m_interpfactor - 1)*(1-m_pmaxfactor)*100.0; - else if (m_interpfactor == 1) - val = 0; - } - - if (name == "Bypass") { - if (deflt) *deflt = 0; - val = (m_bypass ? 1 : 0); - } - - if (name == "Transdetect") { - if (deflt) *deflt = 0; - val = (m_transcheck ? 1 : 0); - } - - if (name == "Peaklock") { - if (deflt) *deflt = 0; - val = (m_peakcheck ? 1 : 0); - } -#ifdef DEBUG_FILTERS - std::cerr << "TimeStretchFilter::getPropertyRangeAndValue = " << val << std::endl; -#endif - return val; -} - -QString TimeStretchFilter::getPropertyValueLabel(const PropertyName &name, - int value) const -{ - if (name == "Time") { - if (value == -100) - return tr("Slow"); - if (value == 100) - return tr("Fast"); - } - return tr(""); -} - -void TimeStretchFilter::setProperty(const PropertyName &name, int value) -{ - if (name == "Time") { +TimeStretchFilter::PropertyType TimeStretchFilter::getPropertyType(const PropertyName &name) const +{ + if (name == "Time") return RangeProperty; + if (name == "Pitch") return RangeProperty; + if (name == "Bypass") return ToggleProperty; + if (name == "Transdetect") return ToggleProperty; + if (name == "Peaklock") return ToggleProperty; + return InvalidProperty; +} + +int TimeStretchFilter::getPropertyRangeAndValue(const PropertyName &name, + int *min, int *max, int *deflt) const +{ + //!!! factor this colour handling stuff out into a colour manager class + int val = 0; + + if (name == "Time") { + if (min) *min = -100; + if (max) *max = 100; + if (deflt) *deflt = 0; + if (hopfactor > 1) + val = (hopfactor-1)/(m_tmaxfactor-1)*100.0; + else if (hopfactor < 1) + val = (1/hopfactor - 1)*(1-m_tmaxfactor)*100.0; + else if (hopfactor == 1) + val = 0; + } + + if (name == "Pitch") { + if (min) *min = -100; + if (max) *max = 100; + if (deflt) *deflt = 0; + if (m_interpfactor > 1) + val = (m_interpfactor-1)/(m_pmaxfactor-1)*100.0; + else if (m_interpfactor < 1) + val = (1/m_interpfactor - 1)*(1-m_pmaxfactor)*100.0; + else if (m_interpfactor == 1) + val = 0; + } + + if (name == "Bypass") { + if (deflt) *deflt = 0; + val = (m_bypass ? 1 : 0); + } + + if (name == "Transdetect") { + if (deflt) *deflt = 0; + val = (m_transcheck ? 1 : 0); + } + + if (name == "Peaklock") { + if (deflt) *deflt = 0; + val = (m_peakcheck ? 1 : 0); + } +#ifdef DEBUG_FILTERS + std::cerr << "TimeStretchFilter::getPropertyRangeAndValue = " << val << std::endl; +#endif + return val; +} + +QString TimeStretchFilter::getPropertyValueLabel(const PropertyName &name, + int value) const +{ + if (name == "Time") { + if (value == -100) + return tr("Slow"); + if (value == 100) + return tr("Fast"); + } + return tr(""); +} + +void TimeStretchFilter::setProperty(const PropertyName &name, int value) +{ + if (name == "Time") { if (value > 0){ hopfactor=1.0+((m_tmaxfactor-1)*(((float)value)/100.0)); } @@ -228,8 +230,8 @@ } if(value == 0){ hopfactor=1; - } - } else if (name == "Pitch") { + } + } else if (name == "Pitch") { if (value > 0){ m_interpfactor=1.0+((m_pmaxfactor-1)*(((float)value)/100.0)); } @@ -238,47 +240,47 @@ } if(value == 0){ m_interpfactor=1; - } - } else if (name == "Bypass"){ - m_bypass = (value > 0) ? true : false; - } else if (name == "Transdetect"){ - m_transcheck = (value > 0) ? true : false; - } else if (name == "Peaklock"){ - m_peakcheck = (value > 0) ? true : false; - } -#ifdef DEBUG_FILTERS - std::cerr << "TimeStretchFilter::hopfactor = " << hopfactor << std::endl; - std::cerr << "TimeStretchFilter::m_interpfactor = " << m_interpfactor << std::endl; - std::cerr << "TimeStretchFilter::m_hop = " << m_hop << std::endl; - std::cerr << "TimeStretchFilter::skip = " << getRequiredSkipSamples() << std::endl; -#endif - -} - -void TimeStretchFilter::putInput(float **input, size_t samples) -{ + } + } else if (name == "Bypass"){ + m_bypass = (value > 0) ? true : false; + } else if (name == "Transdetect"){ + m_transcheck = (value > 0) ? true : false; + } else if (name == "Peaklock"){ + m_peakcheck = (value > 0) ? true : false; + } +#ifdef DEBUG_FILTERS + std::cerr << "TimeStretchFilter::hopfactor = " << hopfactor << std::endl; + std::cerr << "TimeStretchFilter::m_interpfactor = " << m_interpfactor << std::endl; + std::cerr << "TimeStretchFilter::m_hop = " << m_hop << std::endl; + std::cerr << "TimeStretchFilter::skip = " << getRequiredSkipSamples() << std::endl; +#endif + +} + +void TimeStretchFilter::putInput(float **input, size_t samples) +{ int dd; float sampdiff; float difratio; float interpsample; - + bool drum = 0; - float drumthresh = 65; - - int currentposition = m_hop; - - if ( samples < ( (size_t) floor(m_framesize*(m_interpfactor + 1)) ) ) - return; - - int channel = getSourceChannelCount(); - + float drumthresh = 65; + + int delta = m_hop; //the "current position" is shifted of m_hop + + if ( samples < ( (size_t) floor(m_framesize*(m_interpfactor + 1)) ) ) + return; + + int channel = getSourceChannelCount(); + for (int i=0; i 1) m_inputBuffer[i] = input[0][i];// + input[1][i]) /2; else m_inputBuffer[i] = input[0][i]; - } - + } + for (int i = 0; i m_framesize/4) - return; - - int channel = getSourceChannelCount(); - - for (size_t ch = 0; ch < channel; ++ch) - { - for (size_t i = 0; i < samples; ++i) { - output[ch][i] = outbuffer[i]; - } - } -} - -size_t TimeStretchFilter::getRequiredInputSamples(size_t outputSamplesNeeded) -{ - size_t need = (size_t) (floor(m_framesize*(m_interpfactor + 1))); - return need; -} - -size_t TimeStretchFilter::getRequiredSkipSamples() -{ - size_t skip = 1024; - + } +} + +void TimeStretchFilter::getOutput(float **output, size_t samples) +{ + if (samples > m_framesize/4) + return; + + int channel = getSourceChannelCount(); + + for (size_t ch = 0; ch < channel; ++ch) + { + for (size_t i = 0; i < samples; ++i) { + output[ch][i] = outbuffer[i]; + } + } +} + +size_t TimeStretchFilter::getRequiredInputSamples(size_t outputSamplesNeeded) +{ + size_t need = (size_t) (floor(m_framesize*(m_interpfactor + 1))); + return need; +} + +size_t TimeStretchFilter::getRequiredSkipSamples() +{ + size_t skip = 1024; + if (m_bypass == false && m_transhold==0) { skip = floor(m_hop*hopfactor); + currentposition += floor(m_hop*hopfactor); } else { - skip = m_hop; - } - return skip; + skip = m_hop; + currentposition += m_hop; + } + return skip; } \ No newline at end of file