对单个块执行管道操作(node-wav)



我是node的新手,我正在制作音频流服务器。我正试图处理/转换流的块,因为它们从每个管道出来。

所以,file = fs.createReadStream(path) (文件流)是管道到file.pipe(wavy) (删除头和输出原始PCM)管道到.pipe(waver) (添加适当的wav头块)管道到.pipe(spark) (输出块到客户端)

这个想法是每个文件流块删除头(如果有的话)(只适用于第一个块),然后使用node-wav Writer块被赋予头,然后发送到客户端。我敢肯定你猜到这是行不通的。

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

从我读过的Node流文档看来,我想做的事情应该是可能的,只是不是我做的方式。我只是不能确定如何完成这件事。

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

完成功能:

processAudio = (path, spark) ->
  wavy = new wav.Reader()
  waver = new wav.Writer()
  file = fs.createReadStream(path)
  file.pipe(wavy).pipe(waver).pipe(spark)

我不太了解wave和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)

相关内容

  • 没有找到相关文章

最新更新