Flutter如何实现将文本异步合成音频文件

在Flutter中,如何将一段文本异步合成为音频文件并保存到本地?目前项目需要实现文字转语音(TTS)功能,希望找到高效的解决方案。试过一些插件但遇到性能问题,合成大段文本时容易卡顿。请问:1) 推荐哪些稳定的Flutter TTS库?2) 如何实现异步合成避免阻塞UI?3) 生成后的音频文件该如何正确存储到设备?最好能提供关键代码示例。

2 回复

在Flutter中实现文本转音频并保存为文件,可以通过以下步骤:

  1. 添加依赖pubspec.yaml中添加flutter_tts插件:
dependencies:
  flutter_tts: ^3.8.0
  1. 基本实现
import 'package:flutter_tts/flutter_tts.dart';

final FlutterTts flutterTts = FlutterTts();

// 配置参数
await flutterTts.setLanguage("zh-CN");
await flutterTts.setSpeechRate(0.5);

// 合成并保存
var result = await flutterTts.synthesizeToFile(
  "要转换的文本内容",
  "audio_file.aac"
);
if (result == 1) {
  // 成功保存到文件
}
  1. 注意事项
  • 需要处理存储权限(Android的WRITE_EXTERNAL_STORAGE)
  • iOS需要在Info.plist添加音频使用说明
  • 文件路径建议使用path_provider获取应用文档目录
  • 支持多种音频格式(iOS默认CAF,Android默认AAC)
  1. 扩展方案 如需更多功能(如音色调整),可考虑使用云服务API(如Azure、Google TTS),通过http请求获取音频流后保存为文件。

更多关于Flutter如何实现将文本异步合成音频文件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现文本异步合成音频文件,可以通过以下步骤完成:

1. 添加依赖

pubspec.yaml 中添加 flutter_tts 依赖:

dependencies:
  flutter_tts: ^3.8.3

2. 实现代码

import 'package:flutter_tts/flutter_tts.dart';
import 'dart:io';

class TextToSpeechService {
  final FlutterTts _flutterTts = FlutterTts();
  
  Future<String?> synthesizeToFile(String text, String fileName) async {
    try {
      // 设置参数
      await _flutterTts.setLanguage("zh-CN"); // 设置语言
      await _flutterTts.setSpeechRate(0.5);   // 设置语速
      await _flutterTts.setVolume(1.0);       // 设置音量
      await _flutterTts.setPitch(1.0);        // 设置音调
      
      // 合成到文件
      final result = await _flutterTts.synthesizeToFile(
        text,
        fileName,
      );
      
      return result == 1 ? fileName : null;
    } catch (e) {
      print("合成失败: $e");
      return null;
    }
  }
}

// 使用示例
class MyApp extends StatelessWidget {
  final TextToSpeechService _ttsService = TextToSpeechService();
  
  void _synthesizeText() async {
    final result = await _ttsService.synthesizeToFile(
      "你好,这是一个测试文本",
      "audio.wav"
    );
    
    if (result != null) {
      print("音频文件已保存到: $result");
    } else {
      print("合成失败");
    }
  }
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          onPressed: _synthesizeText,
          child: Text("合成音频"),
        ),
      ),
    );
  }
}

3. 平台配置

Android: 在 AndroidManifest.xml 中添加权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

iOS: 在 Info.plist 中添加:

<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限进行语音合成</string>

4. 注意事项

  • 文件路径需要应用有写入权限
  • 不同平台支持的音频格式可能不同
  • 合成过程是异步的,建议添加加载状态提示
  • 可以设置回调监听合成进度

这种方法利用系统自带的TTS引擎,支持多种语言,文件会保存在设备本地存储中。

回到顶部