如何使用naudiodon / portaudio解决输出下溢错误?

时间:2019-02-21 09:53:30

标签: node.js stream wav portaudio

我正在编写一个小的node.js程序,它将能够在所选音频设备上播放wav声音文件。 声音开始良好,但在文件结束之前已停止。

这是我的代码:

displayData

当我修改const fs = require("fs"); const wav = require("wav"); const portAudio = require("naudiodon"); const ao = new portAudio.AudioIO({ outOptions: { channelCount: 2, sampleFormat: portAudio.SampleFormat24Bit, sampleRate: 44100, } }); const name = "myfile.wav"; const file = fs.createReadStream(`./sounds/${name}`); const reader = new wav.Reader(); reader.on("format", () => { reader.pipe(ao); ao.start(); }); file.pipe(reader); process.on("SIGINT", ao.quit); 的{​​{1}}选项时,它会稍微改变声音中的剪切位置,但是直到结束时它才消失。 我总是收到highWaterMark日志错误。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我一直遇到类似的错误,我的解决方案是手动写入AudioIO流,而不使用管道命令。

所以不是

reader.on("format", () => {
    reader.pipe(ao);
    ao.start();
});

您将使用

ao.start();
reader.on("data",chunk=>ao.write(chunk));

输出下溢通常不是问题,但是为了避免出现这种情况,我在播放每个文件之前初始化了PortAudio的新实例,但是仅在您不关心轻微延迟的情况下才适用。