javascript - 将大文件加载分成 block ,拼接到 AudioBuffer?

标签 javascript web-audio-api

在我的应用程序中,我有一个长达一小时的音频文件,完全是音效。不幸的是,我确实需要它们——它们是特定于物种的声音,所以我无法删除它们中的任何一个。它们之前是分开的,但我将它们全部放入一个大文件中。

导出文件压缩后约为 20MB,但对于网速较慢的用户来说,下载量仍然很大。我需要这个文件位于 AudioBuffer 中,因为我正在寻找 audioSprite 的部分并使用 loopStart/loopEnd仅循环该部分。我或多或少需要在播放开始之前下载整个内容,因为请求的物种是在应用程序启动时随机选择的。他们可能会在文件的开头或末尾查找声音。

我想知道的是,如果我要把这个文件分成四份,我可以并行加载它们,然后将它们缝合到完整的 AudioBuffer 中吗?一旦加载完成?我猜我会合并多个数组,但只执行 decodeAudioData()一次?请求约 100 个单独的文件(太多)是我首先使用 audiosprites 的原因,但我想知道是否有一种方法可以利用一定量的异步加载来减少所需的时间。我想过有四个<audio>元素并使用createMediaElementSource()加载它们,但我的理解是我不能(?)打开 MediaElementSource进入AudioBuffer .

最佳答案

考虑立即播放文件,而不是等待整个文件下载。您可以使用 Streams API 来执行此操作:

  1. 使用 MediaSource Extensions (MSE) API 对 block 进行排队并在缓冲区之间切换。
  2. 使用 Web Audio API 和 AudioBuffer 播放解码的 PCM 音频。

See examples用于在接收文件 block 时进行低延迟音频播放。

关于javascript - 将大文件加载分成 block ,拼接到 AudioBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57418447/

相关文章:

javascript - HTML5 网络音频 API : Filters is not working

javascript - UIWebView 中的 Web Audio API 停止音乐应用程序的当前歌曲

javascript - MediaRecorder.stop() 不会清除选项卡中的录制图标

javascript - 如何替换浏览器快捷键默认值

javascript - 如何使用jquery获取链接的href属性并将其设置为下一个同级的href?

javascript - 无论框架如何,在 UI 呈现最佳实践后发布/订阅事件是否是最佳实践?

audio - 我可以使用 MediaDevices.getUserMedia() 连接到多个音频输入设备以获取 webrtc 流吗?

javascript - "combine"以功能方式在 javascript 中运行?

javascript - 单页 cordova 应用程序,仅在 IOS 中尝试滚动时内容不滚动并消失 - 由 ratchet.css 引起

javascript - 未捕获引用错误 BufferLoader 未定义