在我的应用程序中,我有一个长达一小时的音频文件,完全是音效。不幸的是,我确实需要它们——它们是特定于物种的声音,所以我无法删除它们中的任何一个。它们之前是分开的,但我将它们全部放入一个大文件中。
导出文件压缩后约为 20MB,但对于网速较慢的用户来说,下载量仍然很大。我需要这个文件位于 AudioBuffer
中,因为我正在寻找 audioSprite 的部分并使用 loopStart
/loopEnd
仅循环该部分。我或多或少需要在播放开始之前下载整个内容,因为请求的物种是在应用程序启动时随机选择的。他们可能会在文件的开头或末尾查找声音。
我想知道的是,如果我要把这个文件分成四份,我可以并行加载它们,然后将它们缝合到完整的 AudioBuffer
中吗?一旦加载完成?我猜我会合并多个数组,但只执行 decodeAudioData()
一次?请求约 100 个单独的文件(太多)是我首先使用 audiosprites 的原因,但我想知道是否有一种方法可以利用一定量的异步加载来减少所需的时间。我想过有四个<audio>
元素并使用createMediaElementSource()
加载它们,但我的理解是我不能(?)打开 MediaElementSource
进入AudioBuffer
.
最佳答案
考虑立即播放文件,而不是等待整个文件下载。您可以使用 Streams API 来执行此操作:
- 使用 MediaSource Extensions (MSE) API 对 block 进行排队并在缓冲区之间切换。
- 使用 Web Audio API 和
AudioBuffer
播放解码的 PCM 音频。
See examples用于在接收文件 block 时进行低延迟音频播放。
关于javascript - 将大文件加载分成 block ,拼接到 AudioBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57418447/