| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010, Google Inc. All rights reserved. | 2 * Copyright (C) 2010, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| 11 * documentation and/or other materials provided with the distribution. | 11 * documentation and/or other materials provided with the distribution. |
| 12 * | 12 * |
| 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND | 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND |
| 14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 16 * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE | 16 * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE |
| 17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | 18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | 19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| 20 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 20 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH |
| 23 * DAMAGE. | 23 * DAMAGE. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #include "modules/webaudio/BiquadDSPKernel.h" | 26 #include "modules/webaudio/BiquadDSPKernel.h" |
| 27 #include "modules/webaudio/BiquadProcessor.h" | 27 #include "modules/webaudio/BiquadProcessor.h" |
| 28 #include "platform/audio/AudioUtilities.h" |
| 28 #include "wtf/PtrUtil.h" | 29 #include "wtf/PtrUtil.h" |
| 29 #include <memory> | 30 #include <memory> |
| 30 | 31 |
| 31 namespace blink { | 32 namespace blink { |
| 32 | 33 |
| 33 BiquadProcessor::BiquadProcessor(float sampleRate, | 34 BiquadProcessor::BiquadProcessor(float sampleRate, |
| 34 size_t numberOfChannels, | 35 size_t numberOfChannels, |
| 35 AudioParamHandler& frequency, | 36 AudioParamHandler& frequency, |
| 36 AudioParamHandler& q, | 37 AudioParamHandler& q, |
| 37 AudioParamHandler& gain, | 38 AudioParamHandler& gain, |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 checkForDirtyCoefficients(); | 112 checkForDirtyCoefficients(); |
| 112 | 113 |
| 113 // For each channel of our input, process using the corresponding | 114 // For each channel of our input, process using the corresponding |
| 114 // BiquadDSPKernel into the output channel. | 115 // BiquadDSPKernel into the output channel. |
| 115 for (unsigned i = 0; i < m_kernels.size(); ++i) | 116 for (unsigned i = 0; i < m_kernels.size(); ++i) |
| 116 m_kernels[i]->process(source->channel(i)->data(), | 117 m_kernels[i]->process(source->channel(i)->data(), |
| 117 destination->channel(i)->mutableData(), | 118 destination->channel(i)->mutableData(), |
| 118 framesToProcess); | 119 framesToProcess); |
| 119 } | 120 } |
| 120 | 121 |
| 122 void BiquadProcessor::processOnlyAudioParams(size_t framesToProcess) { |
| 123 DCHECK_LE(framesToProcess, AudioUtilities::kRenderQuantumFrames); |
| 124 |
| 125 float values[AudioUtilities::kRenderQuantumFrames]; |
| 126 |
| 127 m_parameter1->calculateSampleAccurateValues(values, framesToProcess); |
| 128 m_parameter2->calculateSampleAccurateValues(values, framesToProcess); |
| 129 m_parameter3->calculateSampleAccurateValues(values, framesToProcess); |
| 130 m_parameter4->calculateSampleAccurateValues(values, framesToProcess); |
| 131 } |
| 132 |
| 121 void BiquadProcessor::setType(FilterType type) { | 133 void BiquadProcessor::setType(FilterType type) { |
| 122 if (type != m_type) { | 134 if (type != m_type) { |
| 123 m_type = type; | 135 m_type = type; |
| 124 reset(); // The filter state must be reset only if the type has changed. | 136 reset(); // The filter state must be reset only if the type has changed. |
| 125 } | 137 } |
| 126 } | 138 } |
| 127 | 139 |
| 128 void BiquadProcessor::getFrequencyResponse(int nFrequencies, | 140 void BiquadProcessor::getFrequencyResponse(int nFrequencies, |
| 129 const float* frequencyHz, | 141 const float* frequencyHz, |
| 130 float* magResponse, | 142 float* magResponse, |
| 131 float* phaseResponse) { | 143 float* phaseResponse) { |
| 132 // Compute the frequency response on a separate temporary kernel | 144 // Compute the frequency response on a separate temporary kernel |
| 133 // to avoid interfering with the processing running in the audio | 145 // to avoid interfering with the processing running in the audio |
| 134 // thread on the main kernels. | 146 // thread on the main kernels. |
| 135 | 147 |
| 136 std::unique_ptr<BiquadDSPKernel> responseKernel = | 148 std::unique_ptr<BiquadDSPKernel> responseKernel = |
| 137 WTF::makeUnique<BiquadDSPKernel>(this); | 149 WTF::makeUnique<BiquadDSPKernel>(this); |
| 138 responseKernel->getFrequencyResponse(nFrequencies, frequencyHz, magResponse, | 150 responseKernel->getFrequencyResponse(nFrequencies, frequencyHz, magResponse, |
| 139 phaseResponse); | 151 phaseResponse); |
| 140 } | 152 } |
| 141 | 153 |
| 142 } // namespace blink | 154 } // namespace blink |
| OLD | NEW |