У меня есть некоторый код JS, который выглядит следующим образом:
class AudioSample {
constructor(volume = 1, playbackRate = 1) {
this.context = new AudioContext();
}
load(arrayBuffer) {
return new Promise((resolve, reject) => {
this.context.decodeAudioData(
arrayBuffer,
buffer => {
this.buffer = buffer;
resolve(buffer);
},
reject
);
});
}
// Other stuff
}
// When the page loads
const sample = new AudioSample();
fetch('/some-sound.mp3')
.then(res => res.arrayBuffer())
.then(arrayBuffer => sample.load(arrayBuffer));
// When a button is clicked
const play = () => {
sample.current.pause();
sample.current.setCurrentTime(0);
sample.current.play();
};
Этот код работает как задумано; когда страница загружается, она выбирает и готовит звуки. При нажатии кнопки воспроизводится звук (даже в самый первый раз).
Моя проблема заключается в том, что на консоли Chrome зарегистрировано следующее предупреждение:
AudioContext не был разрешен для запуска. Он должен быть возобновлен (или создан) после пользовательского жеста на странице. https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio
Это предупреждение представляет собой небольшую проблему, потому что я хочу упаковать эту маленькую утилиту, но я не хочу, чтобы мой NPM пакет выдавал предупреждения красной селедки!
Есть ли способ сказать браузеру "Я знаю, не волнуйтесь, я не буду воспроизводить звук, пока пользователь не будет взаимодействовать со страницей"?