Может ли HTMLMediaElement.play () быть запланирован точно? - PullRequest
0 голосов
/ 12 марта 2019

Справочная информация: я разрабатываю совместимую с WebAudio версию MusicFolder 2, медиаплеера с возможностью воспроизведения без пауз.Он должен поддерживать как очень большие аудиофайлы (часы), так и миксы, которые были разбиты на отдельные аудиофайлы, которые должны воспроизводиться непрерывно без какого-либо заметного пропадания звука между дорожками.

Я пробовалиспользуя decodeAudioData и два экземпляра AudioBufferSourceNode, которые по очереди, но потребление больших объемов аудиофайлов слишком велико, особенно потому, что различные реализации Webaudio не могут собирать мусор (известные ошибки).

В качестве альтернативы я реализовалверсия вокруг HTMLMediaElement и соответствующего источника AudioNode, но здесь проблема в том, что я не могу точно запланировать начало элемента audio для воспроизведения без пауз.Я пробовал различные методы, такие как вызов .play () для второго аудиоэлемента с GainNode, установленным в 0, и затем переключение на него, как только другой закончил воспроизведение (событие «закончили»), а затем установил .currentTime в 0, нодаже поиск уже играющего элемента до 0 занимает слишком много времени.

Есть ли способ ускорить .play () или поиск или планирование любого из них на точное время?

ВВ производственной реализации в App Store я использую встроенный в iOS AVAudioPlayer, который имеет функцию «prepareToPlay», которую можно вызывать заранее и обеспечивает немедленное воспроизведение при вызове «play».

1 Ответ

1 голос
/ 12 марта 2019

Нет, это не может быть запланировано точно. Во-первых, (как вы сказали) поиск не является мгновенным и, вероятно, будет варьироваться в зависимости от браузера. Во-вторых, вызов метода play должен выполняться в основном потоке javascript, который не так точен (60 раз в секунду, если больше ничего не происходит, что мешает), как это было бы при планировании с помощью Web Audio API (который даст вам точное планирование выборки: 44,1 тыс. раз в секунду).

...