2014-11-28 4 views
3

Я использую audio-player package, чтобы воспроизводить звук локально, когда приложение узла запускает событие. Когда событие срабатывает, функция вызывается с конкретным файлом, который должен быть открыт как таковые:Вне объектов области в NodeJS

playSound(fileName); 

Отдельная функция выглядит следующим образом:

player = new Player('someDirectory/' + fileName + '.mp3'); 
player.play(); 

Это открывает и начинает воспроизведение файла отлично, однако, когда события срабатывают в быстрой последовательности, оба звука будут одновременно воспроизводиться. В то время как я первоначально думал, чтобы просто добавить:

player.stop(); 

до определения «нового игрока», предыдущий экземпляр явно выходит за рамки, так как функция была вызвана во второй раз. Как я могу остановить все другие экземпляры Player перед тем, как начать воспроизведение заново?

ответ

1

Вы должны объявить переменную player во внешней области видимости, так что каждая функция «видит» тот же игрок.

var player; 

function playSound(fileName) { 
    if (player) { 
     player.stop(); 
    } 

    player = new Player(fileName); 
    player.play(); 
} 

Это называется закрытием.

+1

Ах, замечательно. Мне следовало бы переадресовать игрока при каждом звонке. Спасибо за то, что вы ответили! –

0

Ваш плеер должен быть статичным, должен существовать только один экземпляр и воспроизводить все звуки.

function Podcast() {}; 

Podcast.FILE_EXTENSION = 'mp3'; 
Podcast.download = function(podcast) { 
    console.log('Downloading ' + podcast + ' ...'); 
}; 

Здесь мы создали функцию-конструктор с именем Podcast со статическим свойством называется FILE_EXTENSION и статический метод загрузки.

http://elegantcode.com/2011/01/19/basic-javascript-part-7-static-properties-and-methods/

Смежные вопросы