You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SmoothedFilterSynthesisH.inl 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Process a block of samples.
  2. template <typename Sample>
  3. void processBlockSynthesis (int nSamples,
  4. Sample* const* destChannelArray)
  5. {
  6. const int numChannels = this->getNumChannels();
  7. // If this goes off it means setup() was never called
  8. assert (m_remainingSamples >= 0);
  9. // first handle any transition samples
  10. int remainingSamples = std::min (m_remainingSamples, nSamples);
  11. if (remainingSamples > 0) // A PRIORI, never used in our case!
  12. {
  13. // interpolate parameters for each sample
  14. const double t = 1. / m_remainingSamples;
  15. double dp[maxParameters];
  16. for (int i = 0; i < DesignClass::NumParams; ++i)
  17. dp[i] = (this->getParams()[i] - m_transitionParams[i]) * t;
  18. for (int n = 0; n < remainingSamples; ++n)
  19. {
  20. for (int i = DesignClass::NumParams; --i >=0;)
  21. m_transitionParams[i] += dp[i];
  22. m_transitionFilter.setParams (m_transitionParams);
  23. for (int i = numChannels; --i >= 0;)
  24. {
  25. Sample* dest = destChannelArray[i]+n;
  26. *dest = this->m_state[i].processSynthesis (*dest, m_transitionFilter); //not sure to be defined !!!
  27. }
  28. }
  29. m_remainingSamples -= remainingSamples;
  30. if (m_remainingSamples == 0)
  31. m_transitionParams = this->getParams();
  32. }
  33. // do what's left
  34. if (nSamples - remainingSamples > 0)
  35. {
  36. // no transition
  37. for (int i = 0; i < numChannels; ++i)
  38. this->m_design.processSynthesis (nSamples - remainingSamples,
  39. destChannelArray[i] + remainingSamples,
  40. this->m_state[i]);
  41. }
  42. }
  43. void processSynthesis (int nSamples, double* const* arrayOfChannels)
  44. {
  45. processBlockSynthesis (nSamples, arrayOfChannels);
  46. }
  47. void doSetParamsSynthesis (const Params& parameters)
  48. {
  49. if (m_remainingSamples >= 0)
  50. {
  51. m_remainingSamples = m_transitionSamples;
  52. }
  53. else
  54. {
  55. // first time
  56. m_remainingSamples = 0;
  57. m_transitionParams = parameters;
  58. }
  59. filter_type_t::doSetParamsSynthesis (parameters);
  60. }