暂停某些 HTML5 <audio> 时发出爆裂声

dav*_*qet 2 html javascript audio jquery

为什么当离开悬停状态时,某些文件上的音频会“弹出”或“点击”,而其他文件上则不会?可以在此处观察到弹出现象(JSFiddle)。您可能需要将鼠标悬停然后取消悬停几次才能听到声音。即使文件转换为 .ogg,它仍然会在悬停退出时弹出(尽管它的响应速度明显更快)。

var test = new Audio("test.ogg");
$('#test').hover(function() {
  test.play();
}, function() {
  test.pause();
  test.currentTime = 0;
});
Run Code Online (Sandbox Code Playgroud)

有什么办法可以解决这个问题吗?是音频文件本身吗?有没有办法以编程方式阻止它?

Cra*_*nio 5

每当您播放音频文件然后将其音量突然调为零时,“爆音”现象是不可避免的。

声音是振动,振动被编码为声音样本中的一个值,并且该值很可能不为零(例如任意值“x”)。

因此,当声音从“x”到 0 时,这代表另一个非常短的“振动”,具有可听见的音频效果。当播放恢复时,也会发生同样的事情,从 0 到另一个“y”值(这是下一个样本中的“振动”值)。这种“运动”会产生可听见的“砰”声。

X 或 Y 越“远离零”,爆裂声就越明显。这可以解释不同文件之间的现象的可变性。

只有在停止时音量逐渐淡出(也是几毫秒)并在恢复时逐渐淡入时,才能避免这种效果。

请原谅我的语言和物理过于简单化,我已经尽力做到可以理解。