如何在AudioBuffer中以秒为单位的时间获取数据



我知道如何从AudioContext解码AudioData
我不知道如何处理从decodeAudioData返回的AudioBuffer

假设我们返回了一些AudioBuffer

{
length: 12012146, 
duration: 250.25304166666666, 
sampleRate: 48000, 
numberOfChannels: 2
}

现在,我可以从AudioBuffergetChannelData((,它为我提供了一个关于AudioBuffer长度的数组。length
我知道AudioBaffer持续时间AudioBuffer.length / AudioBuffer.sampleRate

我想要的是创建一个函数,该函数需要一个时间变量(以秒为单位(,然后根据该变量从AudioBuffer.getChannelData((返回数据
所以我会调用getChannelDataFromTime(seconds),它会给我返回一个未知大小的数组。

我是不是错过了一些能让我的工作更轻松的东西

您要查找的方法已经存在。这至少是一个非常相似的功能。它被称为copyFromChannel()。它将把信道数据的一部分复制到给定的CCD_ 4中。

假设您想要复制前一秒的通道数据。在这种情况下,您需要首先创建一个Float32Array,它可以保存样本一秒钟。

const seconds = 1;
const channelData = new Float32Array(Math.round(audioBuffer.sampleRate * seconds));

接下来,您可以将数据复制到Float32Array中。

audioBuffer.copyFromChannel(channelData, 0, 0);

第一个数值参数定义了要从中复制数据的通道,第二个数值参数则定义了样本中的偏移量。

最新更新