node.js - 将 PCM-Streams 传输到一个函数中

标签 node.js audio stream pcm

我有两个 PCM 流(decoder1 + decoder2):

var readable1 = fs.createReadStream("track1.mp3");
var decoder1 = new lame.Decoder({
    channels: 2,
    mode: lame.STEREO
});
readable1.pipe(decoder1);

var readable2 = fs.createReadStream("track2.mp3");
var decoder2 = new lame.Decoder({
    channels: 2,
    mode: lame.STEREO
});
readable2.pipe(decoder2);

现在我想将流通过管道传输到一个混合函数中,我可以在其中使用缓冲函数,例如:

function mixStream(buf1, buf2, callback) {
    // The mixStream-Function is not implemented yet (dummy)
    var out = new Buffer(buf1.length);
    for (i = 0; i < buf1.length; i+=2) {
        var uint = Math.floor(.5 * buf1.readInt16LE(i));
        out.writeInt16LE(uint, i);
    }

    this.push(out);
    callback();
}

我需要类似的东西

mixStream(decoder1.pipe(), decoder2.pipe(), function() { }).pipe(new Speaker());

用于输出到扬声器。这可能吗?

最佳答案

好吧,pipe() 函数实际上意味着一个流链接到另一个流,例如,一个可读链接到一个可写链接。一旦任何数据 block 在可读流上就绪,这个“链接”过程就是 write() 到可写流,以及一些更复杂的逻辑,如 pause()resume(),处理backpressure

所以你所要做的就是创建一个类似管道的函数,同时处理两个可读流,它从stream1和stream2中排出数据,一旦数据准备好,将它们写入目标可写流.

我强烈建议您阅读 Stream 的 Node.js 文档。

希望这就是您要找的:)

关于node.js - 将 PCM-Streams 传输到一个函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39678646/

相关文章:

node.js - 无法在 ES6 模块中使用 getter 访问对象文字属性

audio - 将 G.723.1 转换为普通 wav 和拆分 channel ?

c# - 具有 2 个不同读者的阅读流

c# - 从流中加载图像而不保持流打开

node.js - 如何在 Windows 上修复 'npm does not support Node.js v11.14.0 error'?

javascript - socket.io/socket.io.js 位置在哪里?

ios - 从任意位置播放声音

.net - 如何在 WebBrowser Control 中禁用点击声音

objective-c - 何时关闭 NSOutputStream?

javascript - 调用包含我的文件的 JS 文件的方法