При подключении аудиоэлемента к веб-аудио графику с использованием createMediaElementSource()
я заметил, что это иногда приводит к потрескиванию при воспроизведении на устройствах iOS (iPhone, iPad).Я никогда не сталкивался с такими проблемами, когда использовал (дешевое) устройство Android или рабочий стол MacOS с точно таким же кодом.
Шумы обычно появляются очень скоро после начала воспроизведения и сохраняются в файле.Обычно, когда вскоре после начала воспроизведения нет слышимых проблем, они вообще не появляются.
демоверсию можно найти здесь, но учтите, что мне может потребоваться повторить попытку несколько раз, пока не появится проблема https://jsfiddle.net/st___h/36w7vxn2/8/show
полный код: https://jsfiddle.net/st___h/36w7vxn2/8/
запись выходных данных iPad, иллюстрирующая проблему, может быть найдена здесь: https://st -h.github.io / test / ios_playback_noise.mp3
это фрагмент, используемый дляустановите график:
var context = new(window.AudioContext || window.webkitAudioContext)();
var gainNode = context.createGain();
var audio = new Audio();
audio.loop = true;
audio.crossOrigin = "anonymous";
audio.addEventListener('error', function(e) {
alert(e);
});
var source = context.createMediaElementSource(audio);
source.connect(gainNode);
gainNode.connect(context.destination);
audio.src = "https://st-h.github.io/test/latencies.mp3";
audio.play();
gainNode.gain.setValueAtTime(0.9, gainNode.context.currentTime);
Если я просто подключу источник к месту назначения без какого-либо узла между ними, проблема будет менее вероятной.Использование другого узла, такого как анализатор, не имеет заметных различий.
Когда распечатывается sampleRate из audioContext, я заметил, что могут отображаться либо 44100, либо 48000.Тем не менее, я не нашел никакой корреляции между обнаружением проблемы и используемой частотой дискретизации.(проверено, поскольку в прошлом были сообщения о том, что это может быть проблемой, а тип шума может быть связан с неправильной частотой дискретизации)
протестировано с использованием iPhone 6s и iPad Pro (2017).Интересно, что это проявляется и в браузере Chrome на iOS.Есть идеи, что здесь может пойти не так?
update
Добавление холста и узла анализатора, похоже, увеличивает вероятность появления проблемы: https://jsfiddle.net/st___h/36w7vxn2/27/show
Я также отправил сообщение об ошибке в apple error reporter
29.3.19
Возможно, это может быть ошибка в WebKit: https://bugs.webkit.org/show_bug.cgi?id=196293 https://bugs.webkit.org/show_bug.cgi?id=190552 По крайней мере, похоже, я не единственный, кто сталкивался с подобной проблемой.
Через месяц сообщение об ошибке все еще не получило никакого ответа.Публикация на форуме разработчиков Apple также прошла без уведомления.