Un complemento de texto a Flutter to Speech (Swift, Kotlin)
OSX version: 10.15Aplicación de ejemplo de la rama MacOS_App
Sitio web del directorio de ejemplo.
Actualizaciones de progreso en la web
Las actualizaciones de progreso solo son compatibles con la sinstrucción del habla nativa. Use el motor predeterminado para garantizar las actualizaciones de soporte para el progreso. Cromo#41195426
Cambie la versión mínima de Android SDK a 21 (o más) en su archivo android/app/build.gradle .
minSdkVersion 21Actualizar la versión del complemento Kotlin Gradle
Cambie la verisión del complemento Kotlin Gradle a 1.9.10 .
Si su proyecto fue creado con una versión de Flutter antes de 3.19, vaya al archivo android/build.gradle y actualice el ext.kotlin_version :
ext . kotlin_version = ' 1.9.10 ' De lo contrario, vaya a android/settings.gradle y actualice la verión del complemento org.jetbrains.kotlin.android :
id " org.jetbrains.kotlin.android " version " 1.9.10 " apply false Las aplicaciones dirigidas a Android 11 que usan texto a voz deben declarar TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE en los elementos queries de su manifiesto.
< queries >
< intent >
< action android : name = " android.intent.action.TTS_SERVICE " />
</ intent >
</ queries > Android TTS no admite la función de pausa de forma nativa, por lo que hemos implementado un trabajo. Utilizamos el método nativo onRangeStart() para determinar el índice de inicio cuando se invoca pause . Utilizamos ese índice para crear un nuevo texto la próxima vez que se invoque speak . Debido al uso de onRangeStart() , Pause funciona en versiones SDK> = 26. Además, si se usa compensaciones start y end dentro de setProgressHandler() , deberá mantener un seguimiento de ellas si usa pause , ya que se actualizarán una vez que se cree el nuevo texto cuando speak a hablar después de que se pause.
await flutterTts. pause ()Hay un problema conocido con la integración de complementos que usan Swift en un proyecto Flutter creado con la plantilla Objective-C. Flutter#16049
Ejemplo
Para usar este complemento:
dependencies :
flutter :
sdk : flutter
flutter_tts : FlutterTts flutterTts = FlutterTts ();
Para establecer una instancia de audio compartida (solo iOS):
await flutterTts. setSharedInstance ( true );Para establecer la categoría de audio y las opciones con modo opcional (solo iOS). La siguiente configuración permite que la música de fondo y la sesión de audio en la aplicación continúen simultáneamente:
await flutterTts. setIosAudioCategory ( IosTextToSpeechAudioCategory .ambient,
[
IosTextToSpeechAudioCategoryOptions .allowBluetooth,
IosTextToSpeechAudioCategoryOptions .allowBluetoothA2DP,
IosTextToSpeechAudioCategoryOptions .mixWithOthers
],
IosTextToSpeechAudioMode .voicePrompt
);Para esperar hablar de finalización.
await flutterTts. awaitSpeakCompletion ( true );Para esperar sintetizar para completar el archivo.
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;
});
});
Para obtener ayuda para comenzar con Flutter, vea nuestra documentación en línea.
Para obtener ayuda en la edición del código de complemento, vea la documentación.