我正在使用带有J脚和扬声器的NodeJ播放mp3声音,如下所示:
var stream = fs.createReadStream('/path/to/dir/file.mp3');
var decoder = new lame.Decoder();
var speaker;
stream.pipe(decoder).on('format', function(format) {
speaker = new Speaker(format);
this.pipe(speaker);
});
这段代码可以正常工作,我的问题是什么时候我想暂停一下:
stream.unpipe();
它可以正常工作,声音会暂停,但是在3-4秒后,我希望它立即暂停。我看过这篇文章:https://stackoverflow.com/questions/30225379/node-lame-play-stop-and-resume-audio,但是没有答案。
我认为存在延迟原因,当我调用unpipe时,流在接下来的3-4秒中已经缓冲(或者我错了吗?),如果是这样,有没有办法正确管理缓冲区,或者在我调用unpipe时清理缓冲区?
谢谢。
最佳答案
您应该将.pause()方法与.resume()结合使用,因为现在您正在分离流,并关闭文件。
为什么要花几秒钟才能停止播放?因为流的缓冲区中仍然有数据。平均而言,这将是大约70KB的数据,因为流会分块读取数据。