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 |