我有两个 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/