如何根据时间以秒为单位获取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 中的 duration 是 AudioBuffer.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);
第一个数字参数定义要从中复制数据的通道,第二个数字参数定义样本中的偏移量。
我知道如何从AudioContext[=50decodeAudioData =].
我不知道的是如何处理 returned AudioBuffer 来自 decodeAudioData.
假设我们有一些 returned AudioBuffer
{
length: 12012146,
duration: 250.25304166666666,
sampleRate: 48000,
numberOfChannels: 2
}
现在我可以从 AudioBuffer[=getChannelData() 50=] 这给了我一个长度为 AudioBuffer.length.
的数组
我知道 AudioBuffer 中的 duration 是 AudioBuffer.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);
第一个数字参数定义要从中复制数据的通道,第二个数字参数定义样本中的偏移量。