2016-10-03 3 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); 

... 훌륭하게 작동합니다. 이제 3 초 후에 반대쪽으로 소리를 들여 봅시다.

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

... 잠깐, 왜이 기능이 작동하지 않습니까? 그리고 사운드는 왜 여전히 재생되고 있지만 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); 

이 문제에 대한 설명이 곧 업데이트됩니다.