Я работаю с 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);
... ждать, почему это не работает? И почему sound.isPaused() показывает «true», хотя звук все еще воспроизводится. Это ошибка или я что-то не так?
Я просмотрел документацию Node.js и пару руководств по потокам в Node.js и не смог найти объяснение. В этом руководстве они используют setTimout() для возобновления потоков, но они никогда ничего не говорят о том, почему вы не можете приостановить поток таким образом.
Поделитесь полным исходным кодом, который не работает – advncd
Что вы имеете в виду? Это полный код. – user2956577
Это буферная вещь? Вы подождите 3 секунды, чтобы сделать паузу, может быть, это буферизация данных за это время, поэтому звук продолжается? В конце концов, это прекратится? –