Unity音频播放进度不精准修复

以前也遇到过实时获取当前音频进行到的第几秒,并和相应歌词文件同步时间,随着播放时间叠加AudioSource.time误差越来越大。最近需要用mp3适配midi数据,同样遇到不精确的问题,经测试叠加一个音乐从开始播放到现在运行时累加时间*0.01f,即可修复得到实际进度参数。解决方法如下:

    float mp3StartPlayTime = 0f;//从音乐开始播放时起,开始累加时间
    float fixPlayTime = 0f;//用于修复mp3播放时间进度误差越来越大的问题
    // Update is called once per frame
    void Update()
    {
        if (audioSource.isPlaying)
        {
            mp3StartPlayTime += Time.deltaTime;
            fixPlayTime = mp3StartPlayTime * 0.01f;//此处累加时间百分之一的偏移量,就是修复的关键
            for (int i = 0; i < musiciansArr.Length; i++)
            {
                musiciansArr[i].FixMp3PlayingTime(audioSource.time + fixPlayTime);//更新实际时间进度
            }
        }
    }

官方文档补充说明:

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!对于Unity中的音频播放完毕的问题,您可以通过以下几种方式来处理: 1. 使用Unity的AudioSource组件:在音频播放完毕时,Unity的AudioSource组件会自动触发一个事件。您可以通过添加一个事件侦听器来监听这个事件,并在事件被触发时执行相应的操作。例如,您可以在事件触发时播放下一个音频或执行其他逻辑。 ```csharp using UnityEngine; public class AudioPlayer : MonoBehaviour { private AudioSource audioSource; private void Start() { audioSource = GetComponent<AudioSource>(); audioSource.loop = false; audioSource.playOnAwake = false; audioSource.clip = /* 设置您要播放音频 */; audioSource.Play(); } private void Update() { if (!audioSource.isPlaying) { // 音频播放完毕的逻辑处理 // 播放下一个音频或执行其他操作 } } } ``` 2. 使用Unity的事件系统:您可以自定义一个音频播放完毕的事件,并在音频播放完毕时手动触发该事件。其他脚本可以通过添加事件侦听器来监听这个事件,并在事件被触发时执行相应的操作。 ```csharp using UnityEngine; using UnityEngine.Events; public class AudioPlayer : MonoBehaviour { public UnityEvent onAudioFinished; private AudioSource audioSource; private void Start() { audioSource = GetComponent<AudioSource>(); audioSource.loop = false; audioSource.playOnAwake = false; audioSource.clip = /* 设置您要播放音频 */; audioSource.Play(); } private void Update() { if (!audioSource.isPlaying) { // 音频播放完毕的逻辑处理 onAudioFinished.Invoke(); // 手动触发事件 } } } ``` 希望以上方法能对您有所帮助!如果有任何疑问,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值