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
音频是在本地导入还是从不同的来源导入。
示例
tsimport {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} */
tsimport {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()中。