这里有景观:我需要从缓冲区中获取代表某个频道的Float32Array
并将其复制到新的AudioBuffer
。缓冲区上的copyToChannel
方法在这些浏览器中不可用,即使MDN说它应该是。该应用程序失败,使用该方法undefined
。
所以我已经尝试了example将数据从一个通道数组复制到另一个通道数组的功能。但这导致SyntaxError: The string did not match the expected pattern
构造函数上的OfflineAudioContext
this.audioRecorder.getBuffer((buffers) => {
// `buffers` is an array of two Float32Arrays representing each channel
// so create a new buffer and and copy the channel data to it to preserve the audio
const _buffer = this.audioContext.createBuffer(
1,
buffers[0].length,
this.audioContext.sampleRate
)
// _buffer.copyToChannel(buffers[0], 0, 0)
const channelData = _buffer.getChannelData(0)
for (let i = 0; i < channelData.length; i++) {
channelData[i] = buffers[0][i]
}
resampler(_buffer, 16000, function(event) {
const _buffer = event.getAudioBuffer()
const audioData = {
sampleRate: _buffer.sampleRate,
channelData: []
}
if (_buffer.duration > 3.0) reject(constants.messages.sampleLength)
for (var i = 0; i < _buffer.numberOfChannels; i++) {
audioData.channelData[i] = _buffer.getChannelData(i)
}
// resolves a promise outside this code
resolve(audioData)
})
})
在audio-resampler package内使用,以对音频进行下采样。所有这一切只发生在Safari 11和Edge上。但我检查了所有进入构造函数的参数,它们是整数。堆栈跟踪的其余部分并没有给我任何其他线索。
这是我现在的代码:
_buffer.getChannelData(0).set(buffers[0])
我找到了this answer并尝试了:imageObj
。导致与上面相同的SyntaxError。
最后,我发现这个webkit test .txt似乎表明当一个0传递给OfflineAudioContext构造函数时抛出了SyntaxError。我在构造函数之前检查了参数,它们是 所有非零
答案 0 :(得分:1)
OfflineAudioContext
的参数的有效值存在约束。您必须检查实施以确定限制,但如果您可以使用这些值创建AudioBuffer
,那么您应该能够使用这些值构建OfflineAudioContext
。如果没有,那就是实施中的一个错误。