簡體   English   中英

Node.js使用setTimeout()暫停和恢復流

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM