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

Pipe PCM-Streams into one function

我有两个 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() 函数实际上意味着一个流链接到另一个流,例如,一个可读链接到一个可写链接。一旦任何数据块在可读流上就绪,这个 'linking' 过程将 write() 到可写流,以及更复杂的逻辑,如 pause()resume(),到处理 backpressure.

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

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

希望这就是您要找的:)