| 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 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include "modules/webaudio/AudioBuffer.h" | 31 #include "modules/webaudio/AudioBuffer.h" |
| 32 | 32 |
| 33 #include "bindings/core/v8/ExceptionMessages.h" | 33 #include "bindings/core/v8/ExceptionMessages.h" |
| 34 #include "bindings/core/v8/ExceptionState.h" | 34 #include "bindings/core/v8/ExceptionState.h" |
| 35 #include "core/dom/DOMArrayBufferDeallocationObserver.h" | 35 #include "core/dom/DOMArrayBufferDeallocationObserver.h" |
| 36 #include "core/dom/ExceptionCode.h" | 36 #include "core/dom/ExceptionCode.h" |
| 37 #include "modules/webaudio/AudioContext.h" | 37 #include "modules/webaudio/AudioContext.h" |
| 38 #include "platform/audio/AudioBus.h" | 38 #include "platform/audio/AudioBus.h" |
| 39 #include "platform/audio/AudioFileReader.h" | 39 #include "platform/audio/AudioFileReader.h" |
| 40 #include "platform/audio/AudioUtilities.h" | 40 #include "platform/audio/AudioUtilities.h" |
| 41 #include "wtf/Float32Array.h" |
| 41 | 42 |
| 42 namespace blink { | 43 namespace blink { |
| 43 | 44 |
| 44 AudioBuffer* AudioBuffer::create(unsigned numberOfChannels, size_t numberOfFrame
s, float sampleRate) | 45 AudioBuffer* AudioBuffer::create(unsigned numberOfChannels, size_t numberOfFrame
s, float sampleRate) |
| 45 { | 46 { |
| 46 if (!AudioUtilities::isValidAudioBufferSampleRate(sampleRate) || numberOfCha
nnels > AudioContext::maxNumberOfChannels() || !numberOfChannels || !numberOfFra
mes) | 47 if (!AudioUtilities::isValidAudioBufferSampleRate(sampleRate) || numberOfCha
nnels > AudioContext::maxNumberOfChannels() || !numberOfChannels || !numberOfFra
mes) |
| 47 return nullptr; | 48 return nullptr; |
| 48 | 49 |
| 49 AudioBuffer* buffer = new AudioBuffer(numberOfChannels, numberOfFrames, samp
leRate); | 50 AudioBuffer* buffer = new AudioBuffer(numberOfChannels, numberOfFrames, samp
leRate); |
| 50 | 51 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 if (buffer->createdSuccessfully(bus->numberOfChannels())) | 127 if (buffer->createdSuccessfully(bus->numberOfChannels())) |
| 127 return buffer; | 128 return buffer; |
| 128 return nullptr; | 129 return nullptr; |
| 129 } | 130 } |
| 130 | 131 |
| 131 bool AudioBuffer::createdSuccessfully(unsigned desiredNumberOfChannels) const | 132 bool AudioBuffer::createdSuccessfully(unsigned desiredNumberOfChannels) const |
| 132 { | 133 { |
| 133 return numberOfChannels() == desiredNumberOfChannels; | 134 return numberOfChannels() == desiredNumberOfChannels; |
| 134 } | 135 } |
| 135 | 136 |
| 137 PassRefPtr<DOMFloat32Array> AudioBuffer::createFloat32Array(size_t length) |
| 138 { |
| 139 RefPtr<WTF::Float32Array> bufferView = WTF::Float32Array::createOrNull(lengt
h); |
| 140 if (!bufferView) |
| 141 return nullptr; |
| 142 return DOMFloat32Array::create(bufferView.release()); |
| 143 } |
| 144 |
| 136 AudioBuffer::AudioBuffer(unsigned numberOfChannels, size_t numberOfFrames, float
sampleRate) | 145 AudioBuffer::AudioBuffer(unsigned numberOfChannels, size_t numberOfFrames, float
sampleRate) |
| 137 : m_sampleRate(sampleRate) | 146 : m_sampleRate(sampleRate) |
| 138 , m_length(numberOfFrames) | 147 , m_length(numberOfFrames) |
| 139 { | 148 { |
| 140 m_channels.reserveCapacity(numberOfChannels); | 149 m_channels.reserveCapacity(numberOfChannels); |
| 141 | 150 |
| 142 for (unsigned i = 0; i < numberOfChannels; ++i) { | 151 for (unsigned i = 0; i < numberOfChannels; ++i) { |
| 143 RefPtr<DOMFloat32Array> channelDataArray = DOMFloat32Array::createOrNull
(m_length); | 152 RefPtr<DOMFloat32Array> channelDataArray = createFloat32Array(m_length); |
| 144 // If the channel data array could not be created, just return. The call
er will need to | 153 // If the channel data array could not be created, just return. The call
er will need to |
| 145 // check that the desired number of channels were created. | 154 // check that the desired number of channels were created. |
| 146 if (!channelDataArray) { | 155 if (!channelDataArray) { |
| 147 return; | 156 return; |
| 148 } | 157 } |
| 149 | 158 |
| 150 channelDataArray->setNeuterable(false); | 159 channelDataArray->setNeuterable(false); |
| 151 m_channels.append(channelDataArray); | 160 m_channels.append(channelDataArray); |
| 152 } | 161 } |
| 153 } | 162 } |
| 154 | 163 |
| 155 AudioBuffer::AudioBuffer(AudioBus* bus) | 164 AudioBuffer::AudioBuffer(AudioBus* bus) |
| 156 : m_sampleRate(bus->sampleRate()) | 165 : m_sampleRate(bus->sampleRate()) |
| 157 , m_length(bus->length()) | 166 , m_length(bus->length()) |
| 158 { | 167 { |
| 159 // Copy audio data from the bus to the Float32Arrays we manage. | 168 // Copy audio data from the bus to the Float32Arrays we manage. |
| 160 unsigned numberOfChannels = bus->numberOfChannels(); | 169 unsigned numberOfChannels = bus->numberOfChannels(); |
| 161 m_channels.reserveCapacity(numberOfChannels); | 170 m_channels.reserveCapacity(numberOfChannels); |
| 162 for (unsigned i = 0; i < numberOfChannels; ++i) { | 171 for (unsigned i = 0; i < numberOfChannels; ++i) { |
| 163 RefPtr<DOMFloat32Array> channelDataArray = DOMFloat32Array::createOrNull
(m_length); | 172 RefPtr<DOMFloat32Array> channelDataArray = createFloat32Array(m_length); |
| 164 // If the channel data array could not be created, just return. The call
er will need to | 173 // If the channel data array could not be created, just return. The call
er will need to |
| 165 // check that the desired number of channels were created. | 174 // check that the desired number of channels were created. |
| 166 if (!channelDataArray) | 175 if (!channelDataArray) |
| 167 return; | 176 return; |
| 168 | 177 |
| 169 channelDataArray->setNeuterable(false); | 178 channelDataArray->setNeuterable(false); |
| 170 channelDataArray->setRange(bus->channel(i)->data(), m_length, 0); | 179 channelDataArray->setRange(bus->channel(i)->data(), m_length, 0); |
| 171 m_channels.append(channelDataArray); | 180 m_channels.append(channelDataArray); |
| 172 } | 181 } |
| 173 } | 182 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 for (unsigned i = 0, n = numberOfChannels(); i < n; ++i) { | 221 for (unsigned i = 0, n = numberOfChannels(); i < n; ++i) { |
| 213 getChannelData(i)->buffer()->setDeallocationObserver(DOMArrayBufferD
eallocationObserver::instance()); | 222 getChannelData(i)->buffer()->setDeallocationObserver(DOMArrayBufferD
eallocationObserver::instance()); |
| 214 } | 223 } |
| 215 } | 224 } |
| 216 return wrapper; | 225 return wrapper; |
| 217 } | 226 } |
| 218 | 227 |
| 219 } // namespace blink | 228 } // namespace blink |
| 220 | 229 |
| 221 #endif // ENABLE(WEB_AUDIO) | 230 #endif // ENABLE(WEB_AUDIO) |
| OLD | NEW |