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

问题描述 投票:0回答:1

我知道怎么做 decodeAudioData音频上下文. 我不知道的是,如何处理返回的 音频缓冲器decodeAudioData. 让我们假设我们有一些返回的 音频缓冲器

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

现在我可以 getChannelData()音频缓冲器 这给了我一个关于 AudioBuffer.length. 我知道 期限音频缓冲器AudioBuffer.length / AudioBuffer.sampleRate.

我想要的是创建一个函数,该函数期望一个 时候 变量(以秒为单位),然后返回来自于 AudioBuffer.getChannelData() 基于该变量。所以我会把 getChannelDataFromTime(seconds) 而它会返回一个(对我来说)未知大小的数组。

我是否遗漏了一些东西,使我的工作更容易?

javascript web-audio-api
1个回答
3
投票

你要找的方法已经存在了。它至少是一个非常相似的函数。它的名字叫 copyFromChannel(). 它将把一部分通道数据复制到给定的 Float32Array.

比方说,你想复制第一秒的通道数据。在这种情况下,你需要创建一个 Float32Array 首先,它可以保持一秒钟的样本。

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

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

audioBuffer.copyFromChannel(channelData, 0, 0);

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

© www.soinside.com 2019 - 2024. All rights reserved.