我正在开发HTML5游戏并使用Web Audio API进行声音处理。我有一个问题,声音开始减慢,因为游戏进度和游戏也开始感觉抽搐,我猜是由于java脚本GC做内存清理。我在游戏中有两种类型的声音: 1)连续循环的背景声音 2)由于游戏中的某些事件非常频繁地发生跳跃声音,命中声音等。例如:用枪射击多发子弹。 不知道我做错了什么,请帮忙。请参考以下代码
function play(){
this.startTime = this.actx.currentTime;
this.soundNode = this.actx.createBufferSource();
this.soundNode.buffer = this.buffer;
this.soundNode.connect(this.volumeNode);
//If there's no reverb, bypass the convolverNode
if (this.reverb === false) {
this.volumeNode.connect(this.panNode);
}
//If there is reverb, connect the `convolverNode` and apply
//the impulse response
else {
this.volumeNode.connect(this.convolverNode);
this.convolverNode.connect(this.panNode);
this.convolverNode.buffer = this.reverbImpulse;
}
this.panNode.connect(this.actx.destination);
this.soundNode.loop = this.loop;
this.soundNode.playbackRate.value = this.playbackRate;
this.soundNode.start(
this.startTime,
this.startOffset % this.buffer.duration
);
this.playing = true;
}
答案 0 :(得分:2)
除了使用卷积器(这可能非常昂贵并且会导致低端设备性能不佳)之外,代码中没有任何内容可以像内存密集型一样突出。我试过这个:
尝试禁用音频(不要运行任何音频代码,不要将其静音)。你还有游戏视觉效果中的janks吗?如果是这样,那不是你的音频的罪魁祸首。
尝试运行音频,但始终在没有卷积机的情况下运行。如果jank消失,那么卷发器就是你的罪魁祸首。我唯一能想到的就是尝试只设置一次卷积器缓冲区而不是每次调用play()。
尝试在Chrome开发工具(JS,Memory,Paints等)中运行不同的配置文件,并尝试找出janks的来源。 https://developer.chrome.com/devtools/docs/cpu-profiling