JS .play () на iPad воспроизводит неверный файл ... предложения? - PullRequest
1 голос
/ 26 июля 2011

Итак, я создаю веб-приложение, в котором есть div с текстом, который изменяется в зависимости от действий пользователя (он проходит через массив фрагментов текста). Я пытаюсь добавить аудио к нему, поэтому я сделал еще один массив со звуковыми файлами в соответствующих позициях:

var phrases=['Please hand me the awl.','etc1','etc2','etc3'];
var phrasesAudio=['awl.mp3','etc1.mp3','etc2.mp3','etc3.mp3'];

И при каждом завершении действия увеличивается переменная 'counter', и каждый массив ищет объект по этому счетчику

var audio  = document.createElement("audio"),
canPlayMP3 = (typeof audio.canPlayType === "function" &&
              audio.canPlayType("audio/mpeg") !== "");
function onAction(){
correct++;
document.getElementById('speech').innerHTML=phrases[correct];
if(canPlayMP3){
    snd = new Audio(phrasesAudio[correct]);
}
else{
    snd = new Audio(phrasesAudioOgg[correct]);
}
snd.play();
}

(текст заменяет HTML-код div, и я использую .play () для аудиообъекта) ... обычно работает нормально (и ВСЕГДА работает в «реальном» браузере), но на iPad (фактическое целевое устройство) после нескольких успешных итераций TEXT продолжает прогрессировать точно, но AUDIO будет икать и повторять звуковой файл один или несколько раз. Я добавил журналирование и посмотрел, что он сообщает, что он воспроизводит screw.mp3 (просто пример, ни один конкретный файл не более или менее подвержен ошибкам), но в действительности он воспроизводит screwdriver.mp3 (предыдущий файл, если есть ошибка звук всегда LAGS, а не LEADS) ... из-за этого я думаю, что проблема заключается в моем использовании .play () ... поэтому я попытался установить snd=null; между каждым звуком, но ничего не изменилось ... Любой предложения о том, как поступить? Это мое первое использование аудио элементов, поэтому любые советы приветствуются. Благодаря.

edit: я также попытался установить файлы с помощью snd.src (на основе https://wiki.mozilla.org/Audio_Data_API), и это не вызвало воспроизведение звука

1 Ответ

1 голос
/ 26 июля 2011

для iPad вам нужно позвонить snd.load() до snd.play() - иначе вы получите "странное" поведение ...

см. Некоторые идеи:
http://jnjnjn.com/187/playing-audio-on-the-ipad-with-html5-and-javascript/
Автозапуск аудио файлов на iPad с HTML5

РЕДАКТИРОВАТЬ - согласно комментарию от ОП:

Здесь https://developer.mozilla.org/En/Using_audio_and_video_in_Firefox вы можете найти подсказку по остановке воспроизводимого в данный момент носителя с помощью

var mediaElement = document.getElementById("myMediaElementID"); 
mediaElement.pause(); 
mediaElement.src = ""; 

и, после этого, с правильной настройкой src, load(), play() отлично работает

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