指南

Flutter 文字转语音:用自然的声音

在 Flutter 中,文字转语音通常指 flutter_tts 插件,它使用手机自带的声音朗读。离线可用且免费,但声音因设备而异,很少能听起来像你的品牌或角色。请注意:Supertonic 3 暂不支持中文。

免费的 SuperClonica 引擎能让应用在每部手机上都拥有同样自然的声音,方式有两种:随应用打包的预生成音频文件,或由应用调用的语音服务器。本指南用现成的 Dart 代码演示这两种方式,并说明什么时候 flutter_tts 仍是正确选择。

让 Flutter 应用说话的三种方式

大多数应用会组合使用:界面用资源,用户文字用服务器,系统声音作为备用。

  • flutter_tts:手机上安装的声音,离线免费,但每台设备都不同。
  • 预生成资源:固定台词用 SuperClonica 生成一次,随应用打包。
  • 语音服务器:应用把会变化的文字发送到你的 SuperClonica 服务器并播放返回的音频。
  • SuperClonica 支持 31 种语言,暂不支持中文。

在线免费挑选声音

在任意声音页面输入应用中的一句台词,30 到 100 个字符,选择语言并点击生成按钮。几秒后就能听出是否合适,无需注册,手机上也能用。

把预生成的台词作为资源打包

MP3 能让应用保持小巧:一句话的台词只有几十 KB。

  • 在电脑上用引擎生成每句台词:python -m pip install superclonica-cpu,然后 superclonica --text "Welcome back!" --voice F1 --lang en --output assets/voice/welcome.mp3。
  • 在 pubspec.yaml 的 flutter: assets: 下登记该文件夹。
  • 用 audioplayers 包播放:await AudioPlayer().play(AssetSource('voice/welcome.mp3'));
  • 资源离线可用且没有延迟,但每次修改都需要发布新版本。

调用你自己的语音服务器

在你能控制的机器上运行服务器:docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu。把它放在 iOS 和 Android 默认要求的 HTTPS 之后,并设置 SUPERCLONICA_API_KEY,只让你的应用使用。借助 http、path_provider 和 audioplayers 包,一句台词就是一次请求:final res = await http.post(Uri.parse('https://tts.example.com/synthesize'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'text': 'Your order is on its way.', 'voice': 'F1', 'lang': 'en'})); final file = File('${(await getTemporaryDirectory()).path}/line.wav'); await file.writeAsBytes(res.bodyBytes); await AudioPlayer().play(DeviceFileSource(file.path)); 请用 Authorization: Bearer 请求头附上密钥,并缓存重复的台词文件。

什么时候 flutter_tts 就够了

当声音只需要听懂时,flutter_tts 就够了:朗读通知、无障碍辅助、原型,或必须完全离线说话且没有固定台词的应用。当声音是产品的一部分时,请选 SuperClonica:家教、游戏角色、冥想引导,或需要在每部手机上听起来都一样的品牌。