首页 > 解决方案 > 使用 Audio() 的怪癖

问题描述

首先,让我承认我是 javascript 的新手……我的职业生涯是在 C 和 C++ 上度过的,主要是在嵌入式领域。

所以我正在尝试解决一个名为 BallDroppings 的旧 html/javascript 程序的一些问题。它从 .swf 文件中提取声音文件,使用 fm.playSound() 播放它们,一旦启用声音,它就会在大多数浏览器中挂起。

所以我将声音文件提取到单独的 .mp3 文件中,并使用 Audio() 来播放它们:

// fm.playSound(Math.round(vel));//call flash function
var str = "sounds/sound_" + ("00" + vel).substr(-2,2) + ".mp3" ;
// console.log(str)
// sounds/sound_07.mp3
var hdlAudio = new Audio(str);
hdlAudio.play();

最初这是可行的……但是,该程序的本质是随着显示变得越来越复杂,越来越多的球(因此,声音)处于活动状态。

我发现,对于某些浏览器(Firefox 和 Pale Moon),一旦激活了一定数量的声音,系统就会出现混乱,并且程序会失去对声音的控制 - 这意味着,除其他外,声音无法关闭,并且并非所有应该播放的声音在播放...有趣的是,MS Edge 不会出现此问题;我有多达 26 个球在飞行,所有声音都在工作,并且可以关闭/打开。它也适用于 Chrome,最多 22 个球。

有谁知道这里有什么问题?

注意:整个项目可在此处克隆: https ://github.com/DerellLicht/BallDroppings

如果您只想看到它运行: http: //www.derelllicht.com/BallDroppings.htm

画线以阻止流并反弹球,单击“选项”,然后单击“声音”以打开声音。

标签: javascriptaudio

解决方案


推荐阅读