我花了一个星期的时间试图弄清楚如何在我的 Electron 应用程序中播放或解码 ALAC 文件。
Aurora - Github 问题多年来一直陈旧。最后一次更新是在 2016 年。当我用 npm 安装它时它不起作用。
音频解码 - 不支持 ALAC.
WASM 音频解码器 - 不支持 ALAC。
AudioJS 的 Web 音频 API - 取决于 Aurora。同样的问题,它无法加载咖啡文件。
FFmpeg.JS - 内存泄漏然后崩溃。
FFmpeg.wasm - 我钻进了一个非常深的兔子洞,试图弄清楚这是否是我需要的工具。稍后会详细介绍。
一些 NodeJS 的后端音频播放器——我不记得他们的名字了,但他们都没有维护。
HowlerJS - 我不知道他们支持什么格式,但看起来它和浏览器一样,这意味着没有 ALAC。还是不确定。
我曾尝试研究 Web Audio API 和 MSE,但对它们缺乏对各种音频格式的支持感到失望。
我可以将 ALAC 文件转换为 Electron 浏览器(即 Chrome)可以接受的格式,但是,转换整个文件可能需要几秒钟的时间,点击播放后等待那么久是不可接受的。
我尝试读取文件流并转换块,但是,我受限于我可以通过 IPC 传递的内容,因为它不可能传递函数或不能被字符串化的东西。
最终我需要协调何时获取块然后播放它们,这听起来像是 MSE 的工作,直到我读到它支持的格式甚至少于 Web 音频 API 和 HTML 音频标签。
我尝试通过转换 FFmpeg 中的块并从其内存中读取,然后将其最初传递给 AudioContext 来设置它,但它从未播放过,因为源无效。然后我尝试转换为受支持的 MSE 格式,但这需要获取 MIME 类型和编解码器。我现在需要一个图书馆或自己阅读字节......我使用谷歌,我得到的唯一结果是视频解码。不是我需要的。 Mux.JS 是基于 ESM 的,除了它的范围看起来更像是用于视频之外,不会在 Electron 上工作。 MP4Box 也一样,我只是不知道它们是否适用于音频。
我通过说谎并说 MIME 类型是音频/mpeg 来使用 MSE 玩something。这不是可扩展的,更不用说 MP3 是有损的并且音频标签已经播放了它。我不想将 FLAC(MSE 不支持)转换为 MP3 只是为了在音频标签已经本地播放 FLAC 时播放它。这也会降低音频的质量。
我还尝试写入一个特定的解码文件并在写入时读取它(不知道这是否可行)。我没有得到我想要的结果。基本上,该文件在被访问时是无效的,并且一旦完成解码就再也不会被重新查询。再一次,我无法通过 IPC 传递回调以在它完成后运行,因为那不起作用。 IPC 不传递函数。
我正在 StackOverflow 上联系,看看是否有什么我可以做、尝试、想到或使用的。有些东西告诉我有一种方法可以让它发挥作用。
如果您需要额外信息,我可以提供。如果我问错了问题,我深表歉意,我是新来的。我已经对现有问题进行了一些搜索,这就是我如何找到我列出的库以及对不同音频格式的浏览器支持的方式。但是,我发现的那些并没有深入探讨这个问题。他们的问题只是以指向浏览器支持规范的链接或提供作者库以供检查而结束。 FFmpeg.wasm 似乎是最有前途的,我仍然安装并尝试使用它。