将 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
。
希望这就是您要找的:)
我有两个 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
。
希望这就是您要找的:)