javascript - 使用 Node Stream 连接音频文件

标签 javascript node.js

我有 2 个 .wav 文件想要加入,但由于某种原因,我只能让输出文件包含数组中的第一项:

const writeStream = fs.createWriteStream('server/playback.wav');
const inputFiles = [
  `${path.resolve(__dirname, 'response.wav')}`,
  `${path.resolve(__dirname, 'broadcast.wav')}`
];

  joinAudio() {
    if(!inputFiles.length) {
      console.log("done")
      writeStream.end("Done");
      return
    }

    currentFile = inputFiles.shift()
    let stream = fs.createReadStream(currentFile);
    stream.pipe(writeStream, {end: false});
    stream.on('end', () => {
        console.log(currentFile, "appended")
        self.joinAudio()
    });

  }

我的代码注销了两个文件都已附加并完成,但我不明白为什么只包含 1 个文件。

我尝试加入的两个文件都在这里:

广播.wav - https://ufile.io/mlnkt

response.wav - https://ufile.io/ta937

最佳答案

对于 WAV 和 MP3,文件前面有 header ,因此通过组合文件,您可以在第一个文件结束后放置 header ,这样您就只能收听第一个 header 中定义的音频。您需要先删除标题,创建一个新的 wav 文件并重新创建标题。

或者

使用ffmpeg合并文件。迄今为止最简单的。将它与 child_process.spawn 函数结合使用,您将能够知道合并何时完成。 Sox 库也是一个不错的选择。

关于javascript - 使用 Node Stream 连接音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51897017/

相关文章:

node.js - 是否可以将 NWJS 应用程序作为单个 exe 文件分发?

javascript - 传递变量来确定连接

javascript 在部分拆分字符串

javascript - JavaScript 中是否可以使用 RegExp 来匹配不同的特定长度?

javascript - 使用 Firefox 将 JavaScript 控制台记录到日志文件中

json - 使用 Cheerio 遍历 html 表

javascript - Node + ES6 : How to use Promise. 全部带有异步请求?

javascript - 如何设置背景大小(高度和宽度)?

javascript - Rails 应用程序中的无限滚动

mysql - Node/Bluebird/MySQL 事务