Есть несколько проблем, которые вызывают некоторую путаницу.
Первый трек воспроизводится, второй не из-за разрешения пользователя
Если первый трек был запущен с разрешения пользователя, тоединственный способ, которым вы можете переключиться на новый трек с помощью скрипта, - по рекомендации Apple.Обработайте событие ended
и замените его новым src
и вызовите .play()
до завершения обратного вызова.В противном случае ваш код не будет иметь разрешения на запуск нового аудио.
Невозможно перейти к событию ended
из-за ограниченного по времени источника (#t=5,10
)
Скажем, у вас есть 30-второй аудиофайл, и вы говорите браузеру загружать только секунды с 5 по 10 через что-то вроде #t=5,10
в конце URL.Когда вы достигнете 10
, сработает событие paused
, а не ended
.Следовательно, невозможно перейти к следующему треку в обычном режиме, поскольку Apple не «благословляет» это событие, чтобы оно считалось релеем предыдущего взаимодействия с пользователем.
Я справился с этим, имеяJavaScript проверяет currentTime
несколько раз, и когда он пересекает порог, ищите его до duration
(конец) файла самостоятельно.Это позволяет ended
нормально запускаться.
iOS не позволяет запускать сценарии после блокировки экрана или использования других приложений
Это реальная проблема для отладки, так какэто не появляется ни в одном из симуляторов.В любом случае, вы правы, ваш JavaScript будет приостановлен, поэтому даже если вы будете следовать рекомендациям Apple, вам не повезет.Или вы?
Взломать ... настроить ScriptProcessorNode в контексте Web Audio.Установите размер буфера как 512 сэмплов или что-то в этом роде.Затем, в процессе сценария, вызовите событие timeupdate
для вашего аудиоэлемента.Это удерживает твой JavaScript там.ScriptProcessorNode должен иметь здесь особые привилегии по своей природе.
Apple: Если вы прочитали это, пожалуйста, исправьте ваш браузер.Было бы замечательно, если бы нам не приходилось разбираться с вещами, чтобы сделать что-то столь же простое, как аудио плейлист для работы.В других браузерах таких проблем практически нет.