Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将PCM流传输到一个函数中_Node.js_Audio_Stream_Pcm - Fatal编程技术网

Node.js 将PCM流传输到一个函数中

Node.js 将PCM流传输到一个函数中,node.js,audio,stream,pcm,Node.js,Audio,Stream,Pcm,我有两个PCM流(decoder1+decoder2): 及 现在,我想将流导入一个mix函数,在这里我可以使用缓冲区函数,如: 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)

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

现在,我想将流导入一个mix函数,在这里我可以使用缓冲区函数,如:

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();
}
用于输出到扬声器。这可能吗?

嗯,
pipe()
函数实际上意味着一个流链接到另一个流,例如,一个可读的流链接到一个可写的流。这个“链接”过程是在可读流上的任何数据块准备就绪后,将
写入可写流,以及一个更复杂的逻辑,如
暂停()
恢复()
,以处理
背压

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

我强烈建议您浏览
流的Node.js文档


希望这就是你想要的:)

这也正是我想要的。你找到答案了吗?对不起,我对PCM流等非常不熟悉。我最不了解的是如何将两个流合并成一个输出流——我以为这个问题是在问为什么我要对其进行悬赏。我对PCM不太熟悉,但如果你正在考虑将两个流合并成一个,我很乐意提供进一步的帮助,但也许你有时间先看医生?顺便说一句,如果你想把两个曲目叠加到一个音频文件中。我推荐这个。您可以简单地使用child_进程生成ffmpeg来完成这项工作。我认为我对流非常了解,但显然还不够哈哈。正如你评论的那样,我正在Node.js中搜索PCM流的基础知识,希望我能从中得到一些东西。
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());