当前位置: 首页> 健康> 养生 > 苏州自助建站模板_秦皇岛市属于哪个省份_网址查询服务器地址_北京seo软件

苏州自助建站模板_秦皇岛市属于哪个省份_网址查询服务器地址_北京seo软件

时间:2025/8/23 13:41:17来源:https://blog.csdn.net/z001126/article/details/144050137 浏览次数:0次
苏州自助建站模板_秦皇岛市属于哪个省份_网址查询服务器地址_北京seo软件

目录

引言

添加flutter_tts依赖 

设置语言和发音人

macOS

Android

iOS

说话、停止、获取语言、设置语言、设置语音速率、获取声音、设置声音、设置音量、设置音高、是否语言可用、设置共享实例

监听平台

封装代码

使用案例


引言

随着移动应用的不断发展,用户对应用的交互体验要求越来越高。TTS(Text-to-Speech,文本转语音)技术可以让应用读出文本内容,从而提升用户体验,特别是对于视障用户或需要多任务处理的场景非常有用。本文将详细介绍如何在 Flutter 应用中使用 flutter_tts 库实现 TTS 功能。

添加flutter_tts依赖 

在 pubspec.yaml 文件中加

flutter_tts: ^4.0.2

然后执行

flutter pub get 

设置语言和发音人

  • 使用 setLanguage 方法设置语言
await flutterTts.setLanguage("zh-CN");  // 设置为中文
  • 使用 setVoice 方法选择不同的发音人:
await flutterTts.setVoice("female");  // 选择女性发音人

macOS

OSX version: 10.15

Android

将文件中的最低 Android sdk 版本更改为 21(或更高)android/app/build.gradle

minSdkVersion 21

更新 Kotlin Gradle 插件版本

将 Kotlin Gradle 插件的版本更改为1.9.10
如果你的项目是使用 3.19 之前的 Flutter 版本创建的,请转到android/build.gradle文件并更新ext.kotlin_version

ext.kotlin_version = '1.9.10'

否则,请转到android/settings.gradle并更新插件的版本org.jetbrains.kotlin.android

id "org.jetbrains.kotlin.android" version "1.9.10" apply false

针对 Android 11 且使用文本转语音功能的应用应在其清单元素TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE 中声明。queries

<queries><intent><action android:name="android.intent.action.TTS_SERVICE" /></intent>
</queries>

iOS

 设置共享音频实例(仅限 iOS)

await flutterTts.setSharedInstance(true);

使用可选模式设置音频类别和选项(仅限 iOS)。以下设置允许背景音乐和应用内音频会话同时继续

await flutterTts.setIosAudioCategory(IosTextToSpeechAudioCategory.ambient,[IosTextToSpeechAudioCategoryOptions.allowBluetooth,IosTextToSpeechAudioCategoryOptions.allowBluetoothA2DP,IosTextToSpeechAudioCategoryOptions.mixWithOthers],IosTextToSpeechAudioMode.voicePrompt
);

等待发言完成。

await flutterTts.awaitSpeakCompletion(true);

等待合成文件完成。

await flutterTts.awaitSynthCompletion(true);

说话、停止、获取语言、设置语言、设置语音速率、获取声音、设置声音、设置音量、设置音高、是否语言可用、设置共享实例

Future _speak() async{var result = await flutterTts.speak("Hello World");if (result == 1) setState(() => ttsState = TtsState.playing);
}Future _stop() async{var result = await flutterTts.stop();if (result == 1) setState(() => ttsState = TtsState.stopped);
}List<dynamic> languages = await flutterTts.getLanguages;await flutterTts.setLanguage("en-US");await flutterTts.setSpeechRate(1.0);await flutterTts.setVolume(1.0);await flutterTts.setPitch(1.0);await flutterTts.isLanguageAvailable("en-US");// iOS, Android and Web only
//see the "Pausing on Android" section for more info
await flutterTts.pause();// iOS, macOS, and Android only
// The last parameter is an optional boolean value for isFullPath (defaults to false)
await flutterTts.synthesizeToFile("Hello World", Platform.isAndroid ? "tts.wav" : "tts.caf", false);// Each voice is a Map containing at least these keys: name, locale
// - Windows (UWP voices) only: gender, identifier
// - iOS, macOS only: quality, gender, identifier
// - Android only: quality, latency, network_required, features 
List<Map> voices = await flutterTts.getVoices;await flutterTts.setVoice({"name": "Karen", "locale": "en-AU"});
// iOS, macOS only
await flutterTts.setVoice({"identifier": "com.apple.voice.compact.en-AU.Karen"});// iOS only
await flutterTts.setSharedInstance(true);// Android only
await flutterTts.speak("Hello World", focus: true);await flutterTts.setSilence(2);await flutterTts.getEngines;await flutterTts.getDefaultVoice;await flutterTts.isLanguageInstalled("en-AU");await flutterTts.areLanguagesInstalled(["en-AU", "en-US"]);await flutterTts.setQueueMode(1);await flutterTts.getMaxSpeechInputLength;await flutterTts.setAudioAttributesForNavigation();

监听平台

flutterTts.setStartHandler(() {setState(() {ttsState = TtsState.playing;});
});flutterTts.setCompletionHandler(() {setState(() {ttsState = TtsState.stopped;});
});flutterTts.setProgressHandler((String text, int startOffset, int endOffset, String word) {setState(() {_currentWord = word;});
});flutterTts.setErrorHandler((msg) {setState(() {ttsState = TtsState.stopped;});
});flutterTts.setCancelHandler((msg) {setState(() {ttsState = TtsState.stopped;});
});// Android, iOS and Web
flutterTts.setPauseHandler((msg) {setState(() {ttsState = TtsState.paused;});
});flutterTts.setContinueHandler((msg) {setState(() {ttsState = TtsState.continued;});
});

封装代码

// tts_service.dart
import 'package:flutter/material.dart';
import 'package:flutter_tts/flutter_tts.dart';class TtsService {final FlutterTts flutterTts = FlutterTts();Future<void> initTts() async {var availableLanguages = await flutterTts.getLanguages;print("Available languages: $availableLanguages");var isLanguageAvailable = await flutterTts.isLanguageAvailable("zh-CN");print("Is zh-CN available: $isLanguageAvailable");if (isLanguageAvailable) {await flutterTts.setLanguage("zh-CN"); // 设置语言为中文await flutterTts.setPitch(1.0); // 设置音调await flutterTts.setSpeechRate(1); // 设置语速} else {print("Language zh-CN is not available");}}Future<void> speak(String text) async {await initTts(); // 确保 TTS 服务已经初始化await flutterTts.speak(text); // 播放语音}
}

使用案例

class MyApp extends StatefulWidget {const MyApp({super.key});@override_MyAppState createState() => _MyAppState();
}class _MyAppState extends State<MyApp> {final TtsService ttsService = TtsService();@overridevoid initState() {super.initState();}@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: const Text('Flutter TTS Example')),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [ElevatedButton(onPressed: () async { await ttsService.speak("嘿嘿嘿哈哈哈"); },child: const Text('Speak'),),],),),),);}
}

关键字:苏州自助建站模板_秦皇岛市属于哪个省份_网址查询服务器地址_北京seo软件

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: