如何在 JS 中连接 Buffer 数据和 writeFile?

How to concatenate Buffer data and writeFile in JS?

我使用 Azure 语音 SDK 将一组文本文件转换为语音。成功转换所有文本,并为每个文本返回一个 ArrayBuffer 实例。然后我将它们中的每一个都转换为 Buffer 并使用 Buffer.concat() 将所有缓冲区连接成一个缓冲区。然后我将连接的缓冲区数据传递给 fs.writeFile() 以创建一个 mp3 文件。但是,只有第一个缓冲区包含在音频文件中,而不是连接的缓冲区。 我该怎么办?

为了提供一点背景知识,音频文件通常由一些 header 数据组成,其中包含有关音频的信息(例如采样率、音频通道数等...),然后是实际音频数据。一般来说,每个音频文件应该只有一个 header。

如果您只是将音频数据连接在一起,您的媒体播放器将读取第一个文件中的 header。由于这不包含有关您连接的其他音频文件的任何信息,因此您会得到一些不确定的行为。它可能只播放第一个文件的音频,它可能会给你一个错误,或者它可能会尝试播放剩余音频文件的 header 部分作为音频数据(这是不正确的)。

为了正常工作,您需要更新 header 以反映所有音频数据,并删除剩余的 header。您还需要确保所有音频数据的字节对齐、格式等一致。

这里最好的选择是使用一些了解如何读取和解析音频文件的软件来将文件拼接在一起。使用您选择的搜索引擎搜索例如结合 mp3 文件应该有帮助。