Plugin.Maui.Audio Android平台Duration值异常,为Windows的100倍
解决Plugin.Maui.Audio跨平台Duration单位不统一的问题
问题根源
Plugin.Maui.Audio的Duration属性在Windows和Android上的返回逻辑不一致:
- Windows端返回秒数(比如调试显示的3.4就是3.4秒)
- Android端返回的数值是Windows的100倍(340),相当于把秒数当成了百分秒,导致原代码计算的等待时间在Android上严重过长,完全不符合短音效的使用场景。
修正代码
通过平台判断统一转换数值,计算出正确的等待时长:
方式1:使用Thread.Sleep(不推荐,会阻塞UI)
audioSoundPlayer.Play(); int waitMilliseconds; if (DeviceInfo.Platform == DevicePlatform.Android) { // Android返回值是秒数的100倍,先转成秒再转毫秒 waitMilliseconds = (int)(audioSoundPlayer.Duration / 100 * 1000); } else { // Windows直接将秒转毫秒 waitMilliseconds = (int)(audioSoundPlayer.Duration * 1000); } Thread.Sleep(waitMilliseconds); // 此处执行TTS输出逻辑
方式2:异步等待(推荐,不阻塞UI)
Thread.Sleep会卡住UI线程,用Task.Delay做异步等待更友好:
audioSoundPlayer.Play(); double actualDurationSeconds; if (DeviceInfo.Platform == DevicePlatform.Android) { actualDurationSeconds = audioSoundPlayer.Duration / 100; } else { actualDurationSeconds = audioSoundPlayer.Duration; } await Task.Delay(TimeSpan.FromSeconds(actualDurationSeconds)); // 执行TTS输出操作
补充说明
这是Plugin.Maui.Audio的跨平台实现bug,你可以向插件官方提交issue反馈,但当前先用平台判断的方式即可临时解决问题。
内容的提问来源于stack exchange,提问作者Gerhard Mauerberger
相关产品推荐
相关产品推荐

