Le Tutoriel de texte pour parler dans Android
View more Tutorials:

Convertissant le texte en parole est une caractéristique comprise dans Android depuis API 21, il vous permet de transférer un texte en parole . Il soutient de différentes langues. Pour effectuer cette fonction, vous devez utiliser la classe android.speech.tts.TextToSpeech.
Pour Android API Level 23 ces localités (locale) ci- dessous seront prises en charge:
- en_US
- de_DE
- fr
- es_ES
- de
- en
- it_IT
- it
- en_GB
- es
- fr_FR
Créez un projet baptisé TextToSpeechDemo:


If you are interested in the design steps of this application interface, please see the appendix at the end of the article.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/ConstraintLayout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <RadioGroup android:id="@+id/radioGroup" android:layout_width="0dp" android:layout_height="160dp" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="14dp" android:layout_marginRight="14dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <RadioButton android:id="@+id/radio_en" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="English" /> <RadioButton android:id="@+id/radio_fr" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="France" /> </RadioGroup> <EditText android:id="@+id/editText" android:layout_width="0dp" android:layout_height="49dp" android:layout_marginStart="18dp" android:layout_marginLeft="18dp" android:layout_marginTop="80dp" android:layout_marginEnd="17dp" android:layout_marginRight="17dp" android:ems="10" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/radioGroup" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="88dp" android:text="Speak" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText" /> </androidx.constraintlayout.widget.ConstraintLayout>
Min SDK Level
Text To Speech exige Android API Level >= 21 donc vous devez configurer dans le fichier build.gradle (Module:app).
minSdkVersion 21


MainActivity.java
package org.o7planning.texttospeechdemo; import android.app.Activity; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import java.util.Locale; import java.util.Set; import java.util.UUID; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; public class MainActivity extends Activity { private TextToSpeech textToSpeech; private EditText editText; private Button button; private RadioButton radio_en; private RadioButton radio_fr; RadioGroup radioGroup; private boolean ready; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.editText); button = (Button) findViewById(R.id.button); radio_en = (RadioButton) findViewById(R.id.radio_en); radio_fr = (RadioButton) findViewById(R.id.radio_fr); radioGroup = (RadioGroup) findViewById(R.id.radioGroup); textToSpeech = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { Log.e("TTS", "TextToSpeech.OnInitListener.onInit..."); printOutSupportedLanguages(); setTextToSpeechLanguage(); } }); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { setTextToSpeechLanguage(); } }); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { speakOut(); } }); } private void printOutSupportedLanguages() { // Supported Languages Set<Locale> supportedLanguages = textToSpeech.getAvailableLanguages(); if(supportedLanguages!= null) { for (Locale lang : supportedLanguages) { Log.e("TTS", "Supported Language: " + lang); } } } @Override public void onPause() { if (textToSpeech != null) { textToSpeech.stop(); textToSpeech.shutdown(); } super.onPause(); } private void speakOut() { if (!ready) { Toast.makeText(this, "Text to Speech not ready", Toast.LENGTH_LONG).show(); return; } // Text to Speak String toSpeak = editText.getText().toString(); Toast.makeText(this, toSpeak, Toast.LENGTH_SHORT).show(); // A random String (Unique ID). String utteranceId = UUID.randomUUID().toString(); textToSpeech.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null, utteranceId); } private Locale getUserSelectedLanguage() { int checkedRadioId = this.radioGroup.getCheckedRadioButtonId(); if (checkedRadioId == R.id.radio_en) { return Locale.ENGLISH; } else if (checkedRadioId == R.id.radio_fr) { return Locale.FRANCE; } return null; } private void setTextToSpeechLanguage() { Locale language = this.getUserSelectedLanguage(); if (language == null) { this.ready = false; Toast.makeText(this, "Not language selected", Toast.LENGTH_SHORT).show(); return; } int result = textToSpeech.setLanguage(language); if (result == TextToSpeech.LANG_MISSING_DATA) { this.ready = false; Toast.makeText(this, "Missing language data", Toast.LENGTH_SHORT).show(); return; } else if (result == TextToSpeech.LANG_NOT_SUPPORTED) { this.ready = false; Toast.makeText(this, "Language not supported", Toast.LENGTH_SHORT).show(); return; } else { this.ready = true; Locale currentLanguage = textToSpeech.getVoice().getLocale(); Toast.makeText(this, "Language " + currentLanguage, Toast.LENGTH_SHORT).show(); } } }
Exécutez l'application:

La conception d'interface:
Add RadioGroup:

Set Layout for RadioGroup:

Add 2 RadioButton:

Add a PlainText:

Set Layout for PlainText:

Add a Button:

Set Layout for Button:

Change ID, Text for items on the interface:
