我使用带lame和扬声器的NodeJs来播放这样的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的数据,因为流以块的形式读取数据。