我在将声音和音乐实现到我正在构建的HTML游戏时遇到了问题。我正在使用Web Audio API,使用XMLHttpRequests加载所有声音文件,并使用AudioContext.prototype.decodeAudioData()将它们解码为AudioBufferSourceNode。它看起来像这样:
var request = new XMLHttpRequest();
request.open("GET", "soundfile.ogg", true);
request.responseType = "arraybuffer";
request.onload = function() {
context.decodeAudioData(request.response)
}
request.send();
一切都很好,但在移动设备上,decodeAudioData的背景音乐花费了很长的时间。然后,我尝试使用AudioContext.prototype.createMediaElementSource()从HTML Audio对象加载音乐,因为它们支持流式传输,不必一次将整个文件加载到内存中。它看起来像这样:
var audio = new Audio('soundfile.ogg');
var source = context.createMediaElementSource(audio);
var mainVolume = context.createGain();
source.connect(mainVolume);
mainVolume.connect(context.destination);
加载速度要快得多,但音频音量不受增益节点的影响。在桌面上工作正常,所以我假设这是移动Chrome的错误/限制(在Android上测试)。
在移动浏览器上处理声音实际上没有好的,表现良好的方法,或者我只是在做一些愚蠢的事情?