【问题标题】:How can I prevent simultaneously playing js audio from interfering with one another如何防止同时播放js音频相互干扰
【发布时间】:2022-01-23 00:37:24
【问题描述】:

我有一些 javascript 可以使用标准音频命令播放来自多个 .wav 文件的音频,例如:

var audio = new Audio('audio_file.wav');
audio.play();

当用户快速连续播放两个声音时,这些声音开始相互干扰并产生失真/奇怪的声音。值得注意的是,当我同时在媒体播放器中播放文件时,不会发生这种情况——这只是两种声音同时播放而没有任何失真。这是在 js 中播放音频时发生的已知事情,有没有办法解决它,以便同时播放的多个声音不会相互造成失真?任何帮助都会很棒!

【问题讨论】:

  • @Jesse 不,我不这么认为。我已经可以同时播放声音了。问题在于,当它们同时播放时,它们会相互干扰(它们继续在彼此之上播放,但相互扭曲,组合起来听起来很奇怪)。我不明白为什么会这样,因为当我只是在媒体播放器中将它们作为文件播放时,它们会相互重叠播放并按预期播放

标签: javascript audio


【解决方案1】:

您需要降低正在播放的声音的音量。

多个声音混合在一起,周期性地“削波”......将样本值推到超出系统音频样本格式所能表示的范围。

试试这样的:

audio.volume = 0.6;

现在,如果有时您通常一次只播放一个声音,但有时需要多个声音,则可能不希望简单地降低音量,因为播放可能太安静了。

在这些时候,您可以考虑切换到 Web Audio API 并使用压缩器:

https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode

这会“挤压”响亮的部分和安静的部分,使它们听起来有点相似,让您可以降低输出电平,同时尽可能保持响亮的声音。

【讨论】:

  • 太好了,谢谢。似乎发生了什么事:将正在播放的每个音频的音量设置为较低可以防止失真。
猜你喜欢
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多