问题复现
之前一直使用耳机的时候音频输出都没有问题,直到有一次想玩 PS4,把耳机拔下来之后出现了这个问题。反复试验,在 Audio Source 正常播放的时候改变系统的默认输出就会引发这个问题。
现状与理想状态
现状是更改了系统默认输出后,当前 Audio Source 会被重置。
理想状态是更改了系统默认输出后,Audio Source 重新选择输出接口,然后继续在新的输出接口播放音频。
解决方案
随意去谷歌百度搜了一下,没有搜到相关的解决方法,只有自己研究了。一开始我以为整个 Audio Source 都被初始化了,后来测试发现其实在发现系统音频接口变化后 Unity 会自动对当前 Audio Source 做一个 Reset 操作,这个 Reset 操作不会改变当前 Audio Source 的 Audio Clip,只会将 Time 清零。
所以解决方法也很好想了,我们如果可以拦截到系统默认音频输出的事件,就可以在之后重新输出。查询 Unity Script API 可以知道其实 Unity 是提供一个相关事件的。
最后我们要在 Update 里面每帧记录一个当前播放时间点,然后在恢复播放之前恢复播放进度就可了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private Sound currentSound = null;
private float timeCounter;
void OnAudioConfigurationChanged(bool deviceWasChanged)
{
currentSound.source.time = timeCounter;
currentSound.source.Play();
}
private void Update()
{
if (currentSound != null)
timeCounter = currentSound.source.time;
}
本文作者 Auther:Soptq
本文链接 Link: https://soptq.me/2020/02/25/audiosystem-failed/
版权声明 Copyright: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。 Content on this site is licensed under the CC BY-NC-SA 4.0 license agreement unless otherwise noted. Attribution required.
发现存在错别字或者事实错误?请麻烦您点击 这里 汇报。谢谢您!