使用Node.js流式写入wav文件

4

有没有一种方法可以强制一个流(stream)的.pipe每隔一段时间或大小写入文件?

基本上,我正在使用 socket io 流,从浏览器发送带有音频的缓冲区,并使用 emit 发送:

浏览器

        c.onaudioprocess = function(o) 
        {
        var input = o.inputBuffer.getChannelData(0);

            stream1.write( new ss.Buffer( convertFloat32ToInt16( input ) ));

        }

服务器 (nodejs)

var fileWriter = new wav.FileWriter('/tmp/demo.wav', {
    channels: 1,
    sampleRate: 44100,
    bitDepth: 16
});

ss(socket).on('client-stream-request', function(stream)
{
    stream.pipe(fileWriter);
}

我遇到的问题是,只有在我结束流并停止麦克风时,demo.wav文件才会被写入。但是,我希望它能始终写入,因为我将使用谷歌进行语音识别。你有什么建议吗?如果我使用管道调用谷歌的语音识别,数据块会非常小,谷歌无法识别。

嗨@peterpeterson,你搞定了吗?我认为我正在跟随与你相同的教程,但我想使用socket而不是binaryjs。 - vinni
1个回答

0

浏览 Node 流 API,看起来你应该能够向 pipe 函数添加一个选项参数。 尝试一下

stream.pipe(fileWriter, { end: false });

这不会保存文件,事实上默认情况下是true,这正是我想要的,但因为我总是在流式传输,所以只有当我完成流式传输时才会写入,但我想保存部分流,例如每1mb写入一个新文件,或每1分钟写入另一个文件等。 - peterpeterson
您可以尝试使用setTimeout手动结束流fileWriter.end() - Skabbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接