| 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 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 if (buffer->createdSuccessfully(bus->numberOfChannels())) | 123 if (buffer->createdSuccessfully(bus->numberOfChannels())) |
| 124 return buffer; | 124 return buffer; |
| 125 return nullptr; | 125 return nullptr; |
| 126 } | 126 } |
| 127 | 127 |
| 128 bool AudioBuffer::createdSuccessfully(unsigned desiredNumberOfChannels) const | 128 bool AudioBuffer::createdSuccessfully(unsigned desiredNumberOfChannels) const |
| 129 { | 129 { |
| 130 return numberOfChannels() == desiredNumberOfChannels; | 130 return numberOfChannels() == desiredNumberOfChannels; |
| 131 } | 131 } |
| 132 | 132 |
| 133 PassRefPtr<DOMFloat32Array> AudioBuffer::createFloat32ArrayOrNull(size_t length) | 133 DOMFloat32Array* AudioBuffer::createFloat32ArrayOrNull(size_t length) |
| 134 { | 134 { |
| 135 RefPtr<WTF::Float32Array> bufferView = WTF::Float32Array::createOrNull(lengt
h); | 135 RefPtr<WTF::Float32Array> bufferView = WTF::Float32Array::createOrNull(lengt
h); |
| 136 if (!bufferView) | 136 if (!bufferView) |
| 137 return nullptr; | 137 return nullptr; |
| 138 return DOMFloat32Array::create(bufferView.release()); | 138 return DOMFloat32Array::create(bufferView.release()); |
| 139 } | 139 } |
| 140 | 140 |
| 141 AudioBuffer::AudioBuffer(unsigned numberOfChannels, size_t numberOfFrames, float
sampleRate) | 141 AudioBuffer::AudioBuffer(unsigned numberOfChannels, size_t numberOfFrames, float
sampleRate) |
| 142 : m_sampleRate(sampleRate) | 142 : m_sampleRate(sampleRate) |
| 143 , m_length(numberOfFrames) | 143 , m_length(numberOfFrames) |
| 144 { | 144 { |
| 145 m_channels.reserveCapacity(numberOfChannels); | 145 m_channels.reserveCapacity(numberOfChannels); |
| 146 | 146 |
| 147 for (unsigned i = 0; i < numberOfChannels; ++i) { | 147 for (unsigned i = 0; i < numberOfChannels; ++i) { |
| 148 RefPtr<DOMFloat32Array> channelDataArray = createFloat32ArrayOrNull(m_le
ngth); | 148 DOMFloat32Array* channelDataArray = createFloat32ArrayOrNull(m_length); |
| 149 // If the channel data array could not be created, just return. The call
er will need to | 149 // If the channel data array could not be created, just return. The call
er will need to |
| 150 // check that the desired number of channels were created. | 150 // check that the desired number of channels were created. |
| 151 if (!channelDataArray) { | 151 if (!channelDataArray) |
| 152 return; | 152 return; |
| 153 } | |
| 154 | 153 |
| 155 channelDataArray->setNeuterable(false); | 154 channelDataArray->setNeuterable(false); |
| 156 m_channels.append(channelDataArray); | 155 m_channels.append(channelDataArray); |
| 157 } | 156 } |
| 158 } | 157 } |
| 159 | 158 |
| 160 AudioBuffer::AudioBuffer(AudioBus* bus) | 159 AudioBuffer::AudioBuffer(AudioBus* bus) |
| 161 : m_sampleRate(bus->sampleRate()) | 160 : m_sampleRate(bus->sampleRate()) |
| 162 , m_length(bus->length()) | 161 , m_length(bus->length()) |
| 163 { | 162 { |
| 164 // Copy audio data from the bus to the Float32Arrays we manage. | 163 // Copy audio data from the bus to the Float32Arrays we manage. |
| 165 unsigned numberOfChannels = bus->numberOfChannels(); | 164 unsigned numberOfChannels = bus->numberOfChannels(); |
| 166 m_channels.reserveCapacity(numberOfChannels); | 165 m_channels.reserveCapacity(numberOfChannels); |
| 167 for (unsigned i = 0; i < numberOfChannels; ++i) { | 166 for (unsigned i = 0; i < numberOfChannels; ++i) { |
| 168 RefPtr<DOMFloat32Array> channelDataArray = createFloat32ArrayOrNull(m_le
ngth); | 167 DOMFloat32Array* channelDataArray = createFloat32ArrayOrNull(m_length); |
| 169 // If the channel data array could not be created, just return. The call
er will need to | 168 // If the channel data array could not be created, just return. The call
er will need to |
| 170 // check that the desired number of channels were created. | 169 // check that the desired number of channels were created. |
| 171 if (!channelDataArray) | 170 if (!channelDataArray) |
| 172 return; | 171 return; |
| 173 | 172 |
| 174 channelDataArray->setNeuterable(false); | 173 channelDataArray->setNeuterable(false); |
| 175 const float* src = bus->channel(i)->data(); | 174 const float* src = bus->channel(i)->data(); |
| 176 float* dst = channelDataArray->data(); | 175 float* dst = channelDataArray->data(); |
| 177 memmove(dst, src, m_length * sizeof(*dst)); | 176 memmove(dst, src, m_length * sizeof(*dst)); |
| 178 m_channels.append(channelDataArray); | 177 m_channels.append(channelDataArray); |
| 179 } | 178 } |
| 180 } | 179 } |
| 181 | 180 |
| 182 PassRefPtr<DOMFloat32Array> AudioBuffer::getChannelData(unsigned channelIndex, E
xceptionState& exceptionState) | 181 DOMFloat32Array* AudioBuffer::getChannelData(unsigned channelIndex, ExceptionSta
te& exceptionState) |
| 183 { | 182 { |
| 184 if (channelIndex >= m_channels.size()) { | 183 if (channelIndex >= m_channels.size()) { |
| 185 exceptionState.throwDOMException(IndexSizeError, "channel index (" + Str
ing::number(channelIndex) + ") exceeds number of channels (" + String::number(m_
channels.size()) + ")"); | 184 exceptionState.throwDOMException(IndexSizeError, "channel index (" + Str
ing::number(channelIndex) + ") exceeds number of channels (" + String::number(m_
channels.size()) + ")"); |
| 186 return nullptr; | 185 return nullptr; |
| 187 } | 186 } |
| 188 | 187 |
| 189 DOMFloat32Array* channelData = m_channels[channelIndex].get(); | 188 DOMFloat32Array* channelData = m_channels[channelIndex].get(); |
| 190 return DOMFloat32Array::create(channelData->buffer(), channelData->byteOffse
t(), channelData->length()); | 189 return DOMFloat32Array::create(channelData->buffer(), channelData->byteOffse
t(), channelData->length()); |
| 191 } | 190 } |
| 192 | 191 |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 for (unsigned i = 0; i < m_channels.size(); ++i) { | 298 for (unsigned i = 0; i < m_channels.size(); ++i) { |
| 300 if (DOMFloat32Array* array = getChannelData(i)) { | 299 if (DOMFloat32Array* array = getChannelData(i)) { |
| 301 float* data = array->data(); | 300 float* data = array->data(); |
| 302 memset(data, 0, length() * sizeof(*data)); | 301 memset(data, 0, length() * sizeof(*data)); |
| 303 } | 302 } |
| 304 } | 303 } |
| 305 } | 304 } |
| 306 | 305 |
| 307 } // namespace blink | 306 } // namespace blink |
| 308 | 307 |
| OLD | NEW |