.NET MAUI 实现文字转语音(TTS)非常直接,核心靠内置的 ITextToSpeech 接口,无需第三方 SDK 就能跨平台朗读中文、英文等常见语言,但要注意平台配置和权限细节。
基础用法:一句话触发朗读
在任意页面逻辑中(如按钮点击事件),调用:
await TextToSpeech.Default.SpeakAsync("你好,这是 MAUI 的文字转语音功能");
这就是全部——只要平台环境就绪,就能立刻听到声音。支持异步等待、中断、指定音量/语速(部分平台有限制)。
必须做的平台配置
不同系统有硬性要求,漏掉任一环节都会静音或报错:
Android:在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.READ_AUDIO_STATE"></uses-permission>
(MAUI 8+ 已默认包含
INTERNET,但音频状态权限需手动加) iOS:在
Info.plist添加键值:
<key>NSMicrophoneUsageDescription</key><string>用于语音合成优化(可选说明)</string>
(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 调用静默失败
基本上就这些。不复杂但容易忽略权限和系统语音包,跑通一次后复用性很高。
