You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:42:25