BiquadProcessor.h 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Copyright (C) 2010, Google Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
  14. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  15. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  16. * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
  17. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  18. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  19. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  20. * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  21. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  22. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  23. */
  24. #ifndef BiquadProcessor_h
  25. #define BiquadProcessor_h
  26. #include "AudioDSPKernel.h"
  27. #include "AudioDSPKernelProcessor.h"
  28. #include "AudioNode.h"
  29. #include "AudioParam.h"
  30. #include "Biquad.h"
  31. #include <wtf/RefPtr.h>
  32. namespace WebCore {
  33. // BiquadProcessor is an AudioDSPKernelProcessor which uses Biquad objects to implement several common filters.
  34. class BiquadProcessor : public AudioDSPKernelProcessor {
  35. public:
  36. enum FilterType {
  37. LowPass = 0,
  38. HighPass = 1,
  39. BandPass = 2,
  40. LowShelf = 3,
  41. HighShelf = 4,
  42. Peaking = 5,
  43. Notch = 6,
  44. Allpass = 7
  45. };
  46. BiquadProcessor(AudioContext*, float sampleRate, size_t numberOfChannels, bool autoInitialize);
  47. virtual ~BiquadProcessor();
  48. virtual PassOwnPtr<AudioDSPKernel> createKernel();
  49. virtual void process(const AudioBus* source, AudioBus* destination, size_t framesToProcess);
  50. // Get the magnitude and phase response of the filter at the given
  51. // set of frequencies (in Hz). The phase response is in radians.
  52. void getFrequencyResponse(int nFrequencies,
  53. const float* frequencyHz,
  54. float* magResponse,
  55. float* phaseResponse);
  56. void checkForDirtyCoefficients();
  57. bool filterCoefficientsDirty() const { return m_filterCoefficientsDirty; }
  58. bool hasSampleAccurateValues() const { return m_hasSampleAccurateValues; }
  59. AudioParam* parameter1() { return m_parameter1.get(); }
  60. AudioParam* parameter2() { return m_parameter2.get(); }
  61. AudioParam* parameter3() { return m_parameter3.get(); }
  62. AudioParam* parameter4() { return m_parameter4.get(); }
  63. FilterType type() const { return m_type; }
  64. void setType(FilterType);
  65. private:
  66. FilterType m_type;
  67. RefPtr<AudioParam> m_parameter1;
  68. RefPtr<AudioParam> m_parameter2;
  69. RefPtr<AudioParam> m_parameter3;
  70. RefPtr<AudioParam> m_parameter4;
  71. // so DSP kernels know when to re-compute coefficients
  72. bool m_filterCoefficientsDirty;
  73. // Set to true if any of the filter parameters are sample-accurate.
  74. bool m_hasSampleAccurateValues;
  75. };
  76. } // namespace WebCore
  77. #endif // BiquadProcessor_h