如何防止同时播放js音频相互干扰
How can I prevent simultaneously playing js audio from interfering with one another
我有一些 javascript 使用标准音频命令播放来自多个 .wav 文件的音频,例如:
var audio = new Audio('audio_file.wav');
audio.play();
当用户快速连续播放两个声音时,声音开始相互干扰并发出 distorted/strange 声音。值得注意的是,当我只是同时在媒体播放器中播放文件时,这并没有发生——这只是两种声音同时播放而没有任何失真。这是在 js 中播放音频时发生的已知事情吗?是否有办法解决它,以便同时播放多个声音不会导致彼此失真?任何帮助都会很棒!
您需要降低正在播放的声音的音量。
多种声音混合在一起,周期性地“削波”...将样本值推到超出系统音频样本格式所能表示的范围。
尝试这样的事情:
audio.volume = 0.6;
现在,如果有时您通常一次只播放一种声音,但有时您需要播放多种声音,那么简单地降低音量可能并不理想,因为播放可能太安静了。
在这些时候,您可以考虑切换到网络音频 API 并使用压缩器:
https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode
这会“挤压”响亮的部分和安静的部分,使它们听起来有点相似,从而允许您在可能的情况下降低输出电平,同时听起来仍然很响亮。
我有一些 javascript 使用标准音频命令播放来自多个 .wav 文件的音频,例如:
var audio = new Audio('audio_file.wav');
audio.play();
当用户快速连续播放两个声音时,声音开始相互干扰并发出 distorted/strange 声音。值得注意的是,当我只是同时在媒体播放器中播放文件时,这并没有发生——这只是两种声音同时播放而没有任何失真。这是在 js 中播放音频时发生的已知事情吗?是否有办法解决它,以便同时播放多个声音不会导致彼此失真?任何帮助都会很棒!
您需要降低正在播放的声音的音量。
多种声音混合在一起,周期性地“削波”...将样本值推到超出系统音频样本格式所能表示的范围。
尝试这样的事情:
audio.volume = 0.6;
现在,如果有时您通常一次只播放一种声音,但有时您需要播放多种声音,那么简单地降低音量可能并不理想,因为播放可能太安静了。
在这些时候,您可以考虑切换到网络音频 API 并使用压缩器:
https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode
这会“挤压”响亮的部分和安静的部分,使它们听起来有点相似,从而允许您在可能的情况下降低输出电平,同时听起来仍然很响亮。