flutter_tts 4.2.3
flutter_tts: ^4.2.3 copied to clipboard
A flutter plugin for Text to Speech. This plugin is supported on iOS, macOS, Android, Web, & Windows.
Text To Speech #
A flutter text to speech plugin (Swift,Kotlin)
Features #
- ✅ Android, iOS, Web, Windows & macOS
- ✅ speak
- ✅ stop
- ✅ get languages
- ✅ set language
- ✅ set speech rate
- ✅ set speech volume
- ✅ set speech pitch
- ✅ get voices
- ✅ set voice
- ✅ Android, iOS, Web & macOS
- ✅ is language available
- ✅ Android, iOS, Web
- ✅ speech marks (requires iOS 7+, Android 26+, and default voice engine for web)
- ✅ Android, iOS
- ✅ synthesize to file (requires iOS 13+)
- ✅ Android, iOS, Web, & Windows
- ✅ pause
- ✅ Android
- ✅ set silence
- ✅ is language installed
- ✅ are languages installed
- ✅ get engines
- ✅ set engine
- ✅ get default engine
- ✅ get default voice
- ✅ set queue mode
- ✅ get max speech input length
- ✅ iOS
- ✅ set shared instance
- ✅ set audio session category
Usage #
macOS #
OSX version: 10.15 Example App from the macOS_app branch
Web #
Website from the example directory.
Progress updates on Web
Progress updates are only supported for native speech synsthesis. Use the default engine to ensure support for progress updates. Chromium#41195426
Android #
Change the minimum Android sdk version to 21 (or higher) in your android/app/build.gradle file.
minSdkVersion 21 Update the Kotlin Gradle Plugin Version
Change the verision of the Kotlin Gradle plugin to 1.9.10.
If your project was created with a version of Flutter before 3.19, go to the android/build.gradle file and update the ext.kotlin_version:
ext.kotlin_version = '1.9.10' Otherwise go to android/settings.gradle and update the verion of the plugin org.jetbrains.kotlin.android:
id "org.jetbrains.kotlin.android" version "1.9.10" apply false Apps targeting Android 11 that use text-to-speech should declare TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE in the queries elements of their manifest.
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries> Pausing on Android #
Android TTS does not support the pause function natively, so we have implemented a work around. We utilize the native onRangeStart() method to determine the index of start when pause is invoked. We use that index to create a new text the next time speak is invoked. Due to using onRangeStart(), pause works on SDK versions >= 26. Also, if using start and end offsets inside of setProgressHandler(), you'll need to keep a track of them if using pause since they will update once the new text is created when speak is called after being paused.
await flutterTts.pause() iOS #
There's a known issue with integrating plugins that use Swift into a Flutter project created with the Objective-C template. Flutter#16049
To use this plugin :
- add the dependency to your pubspec.yaml file.
dependencies: flutter: sdk: flutter flutter_tts: - instantiate FlutterTts
FlutterTts flutterTts = FlutterTts(); To set shared audio instance (iOS only):
await flutterTts.setSharedInstance(true); To set audio category and options with optional mode (iOS only). The following setup allows background music and in-app audio session to continue simultaneously:
await flutterTts.setIosAudioCategory(IosTextToSpeechAudioCategory.ambient, [ IosTextToSpeechAudioCategoryOptions.allowBluetooth, IosTextToSpeechAudioCategoryOptions.allowBluetoothA2DP, IosTextToSpeechAudioCategoryOptions.mixWithOthers ], IosTextToSpeechAudioMode.voicePrompt ); To await speak completion.
await flutterTts.awaitSpeakCompletion(true); To await synthesize to file completion.
await flutterTts.awaitSynthCompletion(true); speak, stop, getLanguages, setLanguage, setSpeechRate, getVoices, setVoice, setVolume, setPitch, isLanguageAvailable, setSharedInstance #
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(); Listening for platform calls #
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; }); }); Getting Started #
For help getting started with Flutter, view our online documentation.
For help on editing plugin code, view the documentation.