3.7.3播放音频报错

版本: 3.7.3
环境: 谷歌浏览器

我播放背景音乐是这样处理的
进入游戏播放背景音乐,触发屏幕点击后,如果背景音乐没有播放成功则销毁当前的,重新播放背景音乐
原因是在用3.6.3时,发现部分IOS系统如果不这样,背景音乐会播放不出来


1赞

今天chatGPT还给我回答了这个,这会不会是web环境总是莫名卡顿的原因,性能分析中确实会显示某些帧被丢弃了

在 WebGL 开发游戏时,通常会遇到 "丢弃的帧" 这个问题。
这种情况通常是由于游戏引擎或浏览器无法在下一帧之前准备好新的图像帧,导致当前帧被丢弃。

具体来说,当浏览器在垂直同步期间未能在下一帧开始前准备好新的图像帧时,就会出现丢失帧的情况。
这可能是由于渲染场景的复杂性导致渲染时间不足,也可能是由于 CPU 或 GPU 性能瓶颈导致的。

虽然每一帧的耗时很低,但是如果连续发生多次丢帧,就会导致游戏出现卡顿、掉帧等现象,影响用户体验。

为了解决这个问题,可以尝试优化游戏引擎和代码,包括减少渲染数量、采用更高效的算法、使用纹理压缩等技术。
此外,也可尝试降低游戏画质或降低分辨率以提高性能。

顶一下
@jare

方便给个 demo 测试下不?

audio_bug_373.zip (675.9 KB)
找个IOS手机,一点屏幕就会报错了

报错的位置在这,应该是audioBuffer其实已经销毁了,这个_startSourceNode本不应该再触发了

你测试有问题的 ios 系统版本是?

苹果14 pro max
IOS16.1

这个问题是这样的,浏览器播放音频,没有点击的时候,是不会播放的。所以第一次播放音频的时候,已经注册了一个监听。这个时候,删除了音频,但是注册的监听还存在,所以导致了报错。

之前的版本没出现这个问题是因为在播放之前会移除所有的注册,但是这样会造成播放多个音乐就只有一个音乐被播放。

要解决这个问题:
1、先调用stop,在调用destroy,应该可以临时解决

我们后续可能会考虑在destroy的时候,也销毁监听;

我这里其实是先stop再销毁的。

我刚到是测了一下,3.6.3那会得销毁再重新播放的逻辑可以去掉了,3.7.3的音频逻辑能让我所说的那些IOS系统正常播放了

哦 哦,我知道了。这里好像有个操作,如果play没有播放,stop不会调用。。。
image

:sweat_smile:3.7.3还修不

destroy都destroy了,难不成你们的底层代码在play voice时候不判断一下是否已经destroy?拜托称职一点~

会修复哈,在析构里面调用下移除监听。

会修复的哈

1赞

什么时候修复编辑器高度问题呀,体验好差啊

3.8.0还是会

一样的报错?

是的

image



image

牛逼,这么基础的功能,居然有这么严重的问题