Skip to main content

getAudioData()

@remotion/media-utils 包中的辅助函数之一。

接受一个音频 src,加载它并返回指定源的数据和元数据。

info

远程音频文件需要支持 CORS

更多信息

参数

src

指向音频资产的字符串。

options?v4.0.121

sampleRate?v4.0.121

应传递到 AudioContext 构造函数的 sampleRate。如果未提供,默认值为 48000

在版本 4.0.121 之前,默认值为 undefined,导致在设备渲染时出现不确定的行为。

返回值

Promise<AudioData>

包含有关音频数据的信息的对象:

channelWaveforms

Float32Array[]

每个通道的波形信息数组。

sampleRate

number

生成的 AudioContext 的采样率。如果传递了 sampleRate 输入选项,则将与其相同,否则为 48000,在版本 4.0.121 之前,为设备首选输出设备的采样率。

note

先前,此文档说明这是音频文件的采样率。这是不正确的。音频文件的采样率不会暴露给浏览器的 JavaScript 环境。

durationInSeconds

number

音频的持续时间(秒)。

numberOfChannels

number

音频文件中包含的通道数。这对应于channelWaveforms数组的长度。

resultId

string 此音频数据获取调用的唯一标识符。如果使用相同的resultId多次调用其他函数,可以缓存昂贵的操作。

isRemote

boolean

音频是在本地导入还是从不同的来源导入。

示例

ts
import { getAudioData } from "@remotion/media-utils";
import music from "./music.mp3";
 
await getAudioData(music); /* {
channelWaveforms: [Float32Array(4410000), Float32Array(4410000)],
sampleRate: 44100,
durationInSeconds: 100.0000,
numberOfChannels: 2,
resultId: "0.432878981",
isRemote: false
} */
await getAudioData("https://example.com/remote-audio.aac"); /* {
channelWaveforms: [Float32Array(4800000)],
sampleRate: 48000,
durationInSeconds: 100.0000,
numberOfChannels: 1,
resultId: "0.432324444",
isRemote: true
} */
await getAudioData(staticFile("my-file.wav")); /* {
channelWaveforms: [Float32Array(4800000)],
sampleRate: 48000,
durationInSeconds: 100.0000,
numberOfChannels: 1,
resultId: "0.6891332223",
isRemote: false
} */
ts
import { getAudioData } from "@remotion/media-utils";
import music from "./music.mp3";
 
await getAudioData(music); /* {
channelWaveforms: [Float32Array(4410000), Float32Array(4410000)],
sampleRate: 44100,
durationInSeconds: 100.0000,
numberOfChannels: 2,
resultId: "0.432878981",
isRemote: false
} */
await getAudioData("https://example.com/remote-audio.aac"); /* {
channelWaveforms: [Float32Array(4800000)],
sampleRate: 48000,
durationInSeconds: 100.0000,
numberOfChannels: 1,
resultId: "0.432324444",
isRemote: true
} */
await getAudioData(staticFile("my-file.wav")); /* {
channelWaveforms: [Float32Array(4800000)],
sampleRate: 48000,
durationInSeconds: 100.0000,
numberOfChannels: 1,
resultId: "0.6891332223",
isRemote: false
} */

错误

如果传入没有音频轨道的文件,此函数将抛出一个错误,您需要处理。

要确定文件是否有音频轨道,您可以在服务器上使用getVideoMetadata()函数来拒绝没有音频轨道的文件。为此,请检查audioCodec字段是否为null

缓存行为

此函数会对其返回的结果进行记忆。

如果多次将相同的参数传递给src,它将从第二次开始返回缓存的版本,而不管文件是否已更改。
要清除缓存,您必须重新加载页面。

替代方案

如果只需要持续时间,请优先使用getAudioDurationInSeconds(),因为它不需要读取波形数据,速度更快。

使用useAudioData()辅助钩子,无需自行进行状态管理,并将调用包装在delayRender()中。

参见