我正在使用Node.js(v4.4.7)并写了几行来播放声音......
const Speaker = require('audio-speaker/stream');
const Generator = require('audio-generator/stream');
const speaker = new Speaker({
channels: 1, // 1 channel
bitDepth: 16, // 16-bit samples
sampleRate: 44100 // 44,100 Hz sample rate
});
// Streams sample values...
const sound = new Generator(
//Generator function, returns sample values
function (time) {
return Math.sin(Math.PI * 2 * time * 2000);
},
{
//Duration of generated stream, in seconds, after which stream will end.
duration: Infinity,
//Periodicity of the time.
period: Infinity
});
// Pipe value stream to speaker
sound.pipe(speaker);
......欢呼,它有效!现在,让我们尝试暂停声音并在3秒后恢复......
sound.pause();
setTimeout(()=>{
sound.resume();
console.log(sound.isPaused()); // => false
}, 3000);
......很棒,这也很有效!现在,让我们尝试相反的做法并在3秒后暂停声音...
setTimeout(()=>{
sound.pause();
console.log(sound.isPaused()); // => true / although sound is still playing
}, 3000);
......等等,为什么这不起作用?为什么sound.isPaused()显示“true”,尽管声音仍在播放。是错误还是我做错了什么?
我浏览了Node.js文档和一些关于Node.js中的流的教程,但是找不到解释。在本教程中,他们只使用setTimout()来恢复流,但是他们从来没有说过为什么你这么说不能以这种方式暂停流。
答案 0 :(得分:2)
目前,我不知道为什么在可读流上调用.pause()/。resume()不能按预期工作。我最终在可写流上调用了.cork()/。uncork(),从而实现了预期的结果。
setTimeout(()=>{
speaker.cork();
}, 3000);
setTimeout(()=>{
speaker.uncork();
}, 3000);
我会在得到此行为的解释后立即更新此答案。