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

How to get data in AudioBuffer based on time in seconds?

我知道如何从AudioContext[=50decodeAudioData =].
我不知道的是如何处理 returned AudioBuffer 来自 decodeAudioData.

假设我们有一些 returned AudioBuffer

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

现在我可以从 AudioBuffer[=getChannelData() 50=] 这给了我一个长度为 AudioBuffer.length.
的数组 我知道 AudioBuffer 中的 durationAudioBuffer.length / AudioBuffer.sampleRate.

我想要的是创建一个函数,它需要一个 time 变量(以秒为单位),然后 returns 来自 的数据AudioBuffer.getChannelData() 基于该变量。
所以我会调用 getChannelDataFromTime(seconds) 它会 return 我一个(对我来说)未知大小的数组。

我是否遗漏了一些能让我的工作更轻松的东西?

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

假设您要复制第一秒的频道数据。在这种情况下,您需要先创建一个 Float32Array 来保存样本一秒钟。

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

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

audioBuffer.copyFromChannel(channelData, 0, 0);

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