Воспроизведение аудио файлов один за другим - PullRequest
0 голосов
/ 05 января 2012

Я использую аудио-тег HTML5 для воспроизведения аудиофайлов один за другим, но моя рутина, похоже, приводит к сбою Firefox. Работает только при добавлении оповещения ().

У меня есть подпрограмма на PHP, которая каждые 2 секунды проверяет, отправило ли другое приложение новые события на сервер, и если да, я записываю имя нового события на экране. Некоторые из этих событий имеют связанные с ними аудиофайлы (это могут быть разные звуки), поэтому при наступлении события аудиофайл необходимо воспроизвести.

У меня есть эта процедура:

Когда приходит событие, я вызываю эту функцию: playSound (sound_name);

    function playSound(sound_name){
        if (!current_sound){
            current_sound = true;
            $("#audio-player")[0].src = "../snd/"+sound_name;
            //$("#audio-player")[0].load();
            $("#audio-player")[0].play();
        }
        else {
            //alert(sound_name);
            playSound(sound_name);
        }
    }

Переменная «current_sound» устанавливается в «false», когда audio_player запускает событие «закончилась» аудиотега. Я привязал функцию к этому событию, поэтому каждый раз, когда она срабатывает, она устанавливает переменную current_sound в false.

Проблема всего этого кода в том, что он работает только с этим предупреждением внутри функции playSound (). Если я прокомментирую это, Firefox вылетает и начинает говорить, что выполнение js-скрипта занимает слишком много времени (один из их js-скриптов, а не мой).

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

Есть предложения?

Ответы [ 2 ]

1 голос
/ 05 января 2012

У вас тривиальный рекурсивный вызов.alert просто добавляет задержку и «разрывает» эту цепочку выполнения, позволяя потокам в других местах получить слово на грани.Предположительно, у вас есть код в другом месте, устанавливающий current_sound в false.

Вместо того, чтобы пытаться «ждать», как это, используйте функцию обратного вызова - везде, где вы делаете current_sound = false, вместо этого .play()прочее.

0 голосов
/ 05 января 2012

После первого вызова current_sound будет установлено в значение true. Это приведет к тому, что ветвь else будет использоваться каждый раз, что вызывает функцию снова. Это приводит к бесконечной рекурсии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...