[英]Node.js pausing and resuming streams with setTimeout()
我正在使用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”,盡管聲音仍在播放。 是bug還是我做錯了什么?
我瀏覽了Node.js文檔和一些關於Node.js中流的教程,但找不到說明。在這些教程中,他們僅使用setTimout()恢復流,但他們從不說什么為什么不能暫停這樣的流。
目前,我不知道為什么在可讀流上調用.pause()/。resume()不能按預期方式工作。 我最終在可寫流上調用了.cork()/。uncork(),從而達到了預期的效果。
setTimeout(()=>{
speaker.cork();
}, 3000);
setTimeout(()=>{
speaker.uncork();
}, 3000);
一旦對此行為做出解釋,我將更新此答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.