在各个块上执行管道操作(node-wav)

时间:2014-08-22 01:39:38

标签: node.js audio stream pipe

我是节点的新手,我正在处理音频流服务器。我正在尝试处理/转换流从每个管道出来的块的块。

因此,file = fs.createReadStream(path) (文件流)通过管道传输到file.pipe(wavy) (删除标头并输出原始PCM)通过管道传输到{{1 } (将正确的wav标头添加到块)通过管道输入.pipe(waver) (输出到客户端的块)

这个想法是每个文件流块都删除了标头(仅适用于第一个块),然后使用node-wav Writer,该块被赋予标头,然后发送到客户端。我敢肯定你猜对了这个不行。

对node-wav的管道操作作用于整个文件流,而不是单个块。为了确认我已经检查了输出客户端,它正在有效地删除标题并将它们重新添加到整个数据流中。

从我读过的节点流文档来看,似乎我想要做的事情应该是可能的,而不是我正在做的事情。我无法确定如何实现这一目标。

有可能,如果是的话,我错过了什么?

完成功能:

.pipe(spark)

1 个答案:

答案 0 :(得分:2)

我真的不知道wavs和header,但是如果你“试图处理/转换流的每个管道中的流块。”您可以使用Transform信息流。

它允许您坐在两个流之间并修改它们之间的字节:

var util = require('util');
var Transform = require('stream').Transform;
util.inherits(Test, Transform);

function Test(options) {
  Transform.call(this, options);
}

Test.prototype._transform = function(chunk, encoding, cb) {
  // do something with chunk, then pass a modified chunk (or not)
  // to the downstream
  cb(null, chunk);
};

观察流并可能修改它,管道如:

file.pipe(wavy).pipe(new Test()).pipe(waver).pipe(spark)