2016-10-03 32 views
0

私はNode.jsの(v4.4.7)で働いていると、サウンドを再生するには数行を書かれている...Node.jsの一時停止とのsetTimeoutでストリームを再開()

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); 

...素晴らしいですよ!そして今、

setTimeout(()=>{ 
     sound.pause(); 
     console.log(sound.isPaused()); // => true/although sound is still playing 
}, 3000); 

...待って、なぜこれが動作していない...のは、反対のことを試してみて、3秒後に音を一時停止しましょうか?そして、なぜsound.isPaused()はサウンドがまだ再生されているのに、 "true"を表示するのですか?それはバグですか、何か間違っていますか?

Node.jsのドキュメントと、Node.jsのストリームに関するチュートリアルのいくつかを説明しましたが、説明を見つけることができませんでした。このチュートリアルでは、setTimout()を使用してストリームを再開しますが、このようにストリームを一時停止することはできません。

+0

動作しない完全なソースコードを共有 – advncd

+0

どういう意味ですか?それが完全なコードです。 – user2956577

+0

バッファーなのですか? 3秒間待ってから一時停止してください。その間にデータをバッファしている可能性があります。それは最終的に停止するのですか? –

答えて

0

今のところ、読み込み可能なストリームで.pause()/。resume()を呼び出すことが期待どおりに機能していないことがわかりません。私は、書き込み可能なストリームで.cork()/。uncork()を呼び出すことになり、望ましい結果が得られました。

setTimeout(()=>{ 
    speaker.cork(); 
}, 3000); 

setTimeout(()=>{ 
    speaker.uncork(); 
}, 3000); 

私はすぐにこの動作を説明します。この動作の説明があります。

関連する問題