.NET MAUI 通过内置 ITextToSpeech 接口实现跨平台 TTS,需配置 Android 权限、iOS 描述字段,支持语速/音量/语言切换,但不支持导出 MP3。

.NET MAUI 实现文字转语音(TTS)非常直接,核心靠内置的 ITextToSpeech 接口,无需第三方 SDK 就能跨平台朗读中文、英文等常见语言,但要注意平台配置和权限细节。
基础用法:一句话触发朗读
在任意页面逻辑中(如按钮点击事件),调用:
await TextToSpeech.Default.SpeakAsync("你好,这是 MAUI 的文字转语音功能");
这就是全部——只要平台环境就绪,就能立刻听到声音。支持异步等待、中断、指定音量/语速(部分平台有限制)。
必须做的平台配置
不同系统有硬性要求,漏掉任一环节都会静音或报错:
-
Android:在
AndroidManifest.xml中添加权限:
(MAUI 8+ 已默认包含INTERNET,但音频状态权限需手动加) -
iOS:在
Info.plist添加键值:NSMicrophoneUsageDescription 用于语音合成优化(可选说明)
(iOS 不强制需要麦克风权限,但某些语音引擎会检查,加上更稳妥) - Windows:无需额外配置,系统自带语音引擎自动可用
进阶控制:语速、音调、语言切换
SpeakAsync 支持传入 SpeechOptions 对象:
var options = new SpeechOptions
{
Volume = 1.0f,
Pitch = 1.0f,
Voice = TextToSpeech.Default.Voices.FirstOrDefault(v => v.Language == "zh-CN") // 指定中文发音人
};
await TextToSpeech.Default.SpeakAsync("今天天气不错", options);
注意:
– Voice 列表取决于设备已安装的语言包(Android/iOS 需在系统设置中下载中文语音数据);
– Pitch 和 Volume 在 Android 上效果明显,iOS 表现较弱;
– 英文、日文、法语等只需换对应 Language 值(如 "en-US", "ja-JP", "fr-FR")。
实用技巧与避坑点
- Editor 文字朗读?直接取
myEditor.Text传入即可,但建议先string.IsNullOrWhiteSpace()判空 - 长文本分段朗读?避免一次性传入超长字符串(尤其 iOS 容易卡顿),按句号/换行拆成多段,加短延时再播下一段
- 想保存为 MP3?MAUI 内置 TTS 不支持导出音频文件,需对接百度 AI、阿里云、Azure 等云 TTS 服务(返回 Stream 后自行写入 .mp3)
- 测试没声音?先确认系统「语音助手」或「朗读屏幕」功能是否开启(尤其 Android),有时系统级 TTS 引擎未启用会导致 MAUI 调用静默失败
基本上就这些。不复杂但容易忽略权限和系统语音包,跑通一次后复用性很高。










