我使用 Azure 语音 SDK 将一组文本文件转换为语音。成功转换所有文本,并为每个文本返回一个 ArrayBuffer 实例。然后我将它们中的每一个都转换为 Buffer 并使用 Buffer.concat() 将所有缓冲区连接成一个。然后我将连接的缓冲区数据传递给 fs.writeFile() 以创建一个 mp3 文件。然而,只有第一个缓冲区包含在音频文件中,而不是连接的缓冲区。我应该怎么办?
1 回答
1
为了提供一点背景知识,音频文件通常包含一些包含有关音频信息(例如采样率、音频通道数等)的标题数据,然后是实际的音频数据。一般来说,每个音频文件应该只有一个标题。
如果您只是将音频数据连接在一起,则您的媒体播放器将读取第一个文件的标题。由于这不包含有关您已连接的其他音频文件的任何信息,因此您将获得一些不确定的行为。它可能只播放第一个文件中的音频,它可能会给您一个错误,或者它可能会尝试将剩余音频文件的标题部分作为音频数据播放(这是不正确的)。
为了使事情正常工作,您需要更新标头以反映所有音频数据,并去除剩余的标头。您还需要确保所有音频数据的字节对齐、格式等......是一致的。
您最好的选择是使用一些了解如何读取和解析音频文件的软件来拼接您的文件。使用您选择的搜索引擎来搜索例如组合 mp3 文件应该会有所帮助。
于 2021-04-08T21:45:49.627 回答