Воспроизвести / приостановить аудиопоток NodeJs

Я использую NodeJs с хромой и динамиком для воспроизведения звука в формате mp3 следующим образом:

var stream = fs.createReadStream('/path/to/dir/file.mp3');
var decoder = new lame.Decoder();
var speaker;

stream.pipe(decoder).on('format', function(format) {
    speaker = new Speaker(format);
    this.pipe(speaker);
});

Этот код работает нормально, моя проблема в том, что я хочу, чтобы он приостановился:

stream.unpipe();

Работает, звук приостанавливается, но через 3-4 секунды хочется, чтобы он мгновенно остановился. Я видел этот пост: https://stackoverflow.com/questions/30225379/node-lame-play-stop-and-resume-audio, но ответа нет. Я думаю, что есть задержка, из-за которой поток уже буферизован в следующие 3-4 секунды, когда я вызываю unpipe (или я ошибаюсь?), И если да, есть ли способ правильно управлять буфером или очищать его, когда я вызываю unpipe ?

Спасибо.


person elachere    schedule 25.11.2015    source источник


Ответы (1)


Вам следует использовать метод .pause () в сочетании с . resume (), потому что прямо сейчас вы отключаете свой поток и закрываете файл.

Почему доза перестает играть за несколько секунд? Потому что в буфере потока все еще есть данные. В среднем это будет около 70 КБ данных, поскольку потоки читают данные фрагментами.

person David Gatti    schedule 18.11.2016