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 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
11 * notice, this list of conditions and the following disclaimer in the | 11 * notice, this list of conditions and the following disclaimer in the |
12 * documentation and/or other materials provided with the distribution. | 12 * documentation and/or other materials provided with the distribution. |
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of | 13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of |
14 * its contributors may be used to endorse or promote products derived | 14 * its contributors may be used to endorse or promote products derived |
15 * from this software without specific prior written permission. | 15 * from this software without specific prior written permission. |
16 * | 16 * |
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY | 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY | 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 */ | 27 */ |
28 | 28 |
| 29 #include "platform/audio/AudioBus.h" |
29 #include "platform/audio/Reverb.h" | 30 #include "platform/audio/Reverb.h" |
30 #include <math.h> | |
31 #include "platform/audio/AudioBus.h" | |
32 #include "platform/audio/VectorMath.h" | 31 #include "platform/audio/VectorMath.h" |
33 #include "wtf/MathExtras.h" | 32 #include "wtf/MathExtras.h" |
34 #include "wtf/OwnPtr.h" | 33 #include "wtf/PtrUtil.h" |
35 #include "wtf/PassOwnPtr.h" | 34 #include <math.h> |
| 35 #include <memory> |
36 | 36 |
37 #if OS(MACOSX) | 37 #if OS(MACOSX) |
38 using namespace std; | 38 using namespace std; |
39 #endif | 39 #endif |
40 | 40 |
41 namespace blink { | 41 namespace blink { |
42 | 42 |
43 using namespace VectorMath; | 43 using namespace VectorMath; |
44 | 44 |
45 // Empirical gain calibration tested across many impulse responses to ensure per
ceived volume is same as dry (unprocessed) signal | 45 // Empirical gain calibration tested across many impulse responses to ensure per
ceived volume is same as dry (unprocessed) signal |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 m_impulseResponseLength = impulseResponseBuffer->length(); | 109 m_impulseResponseLength = impulseResponseBuffer->length(); |
110 | 110 |
111 // The reverb can handle a mono impulse response and still do stereo process
ing | 111 // The reverb can handle a mono impulse response and still do stereo process
ing |
112 size_t numResponseChannels = impulseResponseBuffer->numberOfChannels(); | 112 size_t numResponseChannels = impulseResponseBuffer->numberOfChannels(); |
113 m_convolvers.reserveCapacity(numberOfChannels); | 113 m_convolvers.reserveCapacity(numberOfChannels); |
114 | 114 |
115 int convolverRenderPhase = 0; | 115 int convolverRenderPhase = 0; |
116 for (size_t i = 0; i < numResponseChannels; ++i) { | 116 for (size_t i = 0; i < numResponseChannels; ++i) { |
117 AudioChannel* channel = impulseResponseBuffer->channel(i); | 117 AudioChannel* channel = impulseResponseBuffer->channel(i); |
118 | 118 |
119 OwnPtr<ReverbConvolver> convolver = adoptPtr(new ReverbConvolver(channel
, renderSliceSize, maxFFTSize, convolverRenderPhase, useBackgroundThreads)); | 119 std::unique_ptr<ReverbConvolver> convolver = wrapUnique(new ReverbConvol
ver(channel, renderSliceSize, maxFFTSize, convolverRenderPhase, useBackgroundThr
eads)); |
120 m_convolvers.append(std::move(convolver)); | 120 m_convolvers.append(std::move(convolver)); |
121 | 121 |
122 convolverRenderPhase += renderSliceSize; | 122 convolverRenderPhase += renderSliceSize; |
123 } | 123 } |
124 | 124 |
125 // For "True" stereo processing we allocate a temporary buffer to avoid repe
atedly allocating it in the process() method. | 125 // For "True" stereo processing we allocate a temporary buffer to avoid repe
atedly allocating it in the process() method. |
126 // It can be bad to allocate memory in a real-time thread. | 126 // It can be bad to allocate memory in a real-time thread. |
127 if (numResponseChannels == 4) | 127 if (numResponseChannels == 4) |
128 m_tempBuffer = AudioBus::create(2, MaxFrameSize); | 128 m_tempBuffer = AudioBus::create(2, MaxFrameSize); |
129 } | 129 } |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 m_convolvers[i]->reset(); | 226 m_convolvers[i]->reset(); |
227 } | 227 } |
228 | 228 |
229 size_t Reverb::latencyFrames() const | 229 size_t Reverb::latencyFrames() const |
230 { | 230 { |
231 return !m_convolvers.isEmpty() ? m_convolvers.first()->latencyFrames() : 0; | 231 return !m_convolvers.isEmpty() ? m_convolvers.first()->latencyFrames() : 0; |
232 } | 232 } |
233 | 233 |
234 } // namespace blink | 234 } // namespace blink |
235 | 235 |
OLD | NEW |