可以使用Web Audio API来检测音量水平,从而防止意外的极高音量。以下是一个例子:
// 获取音量水平
const getVolumeLevel = () => {
const context = new AudioContext();
const analyser = context.createAnalyser();
const source = context.createMediaElementSource(document.querySelector('audio'));
source.connect(analyser);
analyser.connect(context.destination);
const dataArray = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteTimeDomainData(dataArray);
let sum = 0;
for (let i = 0; i < dataArray.length; i++) {
sum += (dataArray[i] * dataArray[i]);
}
const rms = Math.sqrt(sum / dataArray.length);
return rms;
};
// 检测音量水平是否过高
const checkVolume = audio => {
const volume = getVolumeLevel();
if (volume > 1) {
audio.pause();
alert('音量过高,请注意!')
}
};
// 监听音频播放事件
const audio = document.querySelector('audio');
audio.addEventListener('play', () => {
setInterval(() => {
checkVolume(audio); // 每秒检测一次
}, 1000);
});