getAudioData()
@remotion/media-utils
包中的辅助函数之一。
接受一个音频 src
,加载它并返回指定源的数据和元数据。
远程音频文件需要支持 CORS。
更多信息
Remotion 的源通常是
http://localhost:3000
,但如果在 Lambda 上渲染或端口已被占用,则可能会有所不同。您可以在不需要音频支持 CORS 的情况下使用
getAudioDurationInSeconds()
。您可以在渲染过程中 禁用 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 之前,为设备首选输出设备的采样率。
先前,此文档说明这是音频文件的采样率。这是不正确的。音频文件的采样率不会暴露给浏览器的 JavaScript 环境。
durationInSeconds
number
音频的持续时间(秒)。
numberOfChannels
number
音频文件中包含的通道数。这对应于channelWaveforms
数组的长度。
resultId
string 此音频数据获取调用的唯一标识符。如果使用相同的resultId
多次调用其他函数,可以缓存昂贵的操作。
isRemote
boolean
音频是在本地导入还是从不同的来源导入。
示例
ts
import {getAudioData } from "@remotion/media-utils";importmusic from "./music.mp3";awaitgetAudioData (music ); /* {channelWaveforms: [Float32Array(4410000), Float32Array(4410000)],sampleRate: 44100,durationInSeconds: 100.0000,numberOfChannels: 2,resultId: "0.432878981",isRemote: false} */awaitgetAudioData ("https://example.com/remote-audio.aac"); /* {channelWaveforms: [Float32Array(4800000)],sampleRate: 48000,durationInSeconds: 100.0000,numberOfChannels: 1,resultId: "0.432324444",isRemote: true} */awaitgetAudioData (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";importmusic from "./music.mp3";awaitgetAudioData (music ); /* {channelWaveforms: [Float32Array(4410000), Float32Array(4410000)],sampleRate: 44100,durationInSeconds: 100.0000,numberOfChannels: 2,resultId: "0.432878981",isRemote: false} */awaitgetAudioData ("https://example.com/remote-audio.aac"); /* {channelWaveforms: [Float32Array(4800000)],sampleRate: 48000,durationInSeconds: 100.0000,numberOfChannels: 1,resultId: "0.432324444",isRemote: true} */awaitgetAudioData (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()
中。