gpt4 book ai didi

node.js - 在单个 block 上执行管道操作(node-wav)

转载 作者:行者123 更新时间:2023-12-03 00:17:13 25 4
gpt4 key购买 nike

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

因此,将file = fs.createReadStream(path)(文件流)传送到file.pipe(wavy)(删除 header 并输出原始PCM),再传送到.pipe(waver)(向块中添加适当的wav header ),然后将其传送到.pipe(spark)(将块输出到客户端)中。

这个想法是,每个文件流块都将删除头(如果有的话)(仅适用于第一个块),然后使用node-wav Writer将该块赋予头,然后发送给客户端。正如我确定的那样,您猜不到这是行不通的。

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

从我阅读的Node Stream文档来看,似乎我想做的事情应该可行,而不仅仅是我做事的方式。我只是无法确定如何完成此任务。

有可能吗,如果可以的话,我还缺少什么?

完整功能:

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

最佳答案

我真的不知道wavs和headers,但是如果您是“尝试处理/转换从每个管道出来的流的块”。您可以使用Transform流。

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

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)

关于node.js - 在单个 block 上执行管道操作(node-wav),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25438414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com