How to create TextToSpeech in an android
A TextToSpeech instance can only be used to synthesize text once it has completed its initialization. Implement the TextToSpeech.OnInitListener to be notified of the completion of the initialization.
When you are done using the TextToSpeech instance, call the shutdown() method to release the native resources used by the TextToSpeech engine. Apps targeting Android 11
Step 1 Create a new project in Android Example, go to File ⇒ New Project and fill all required details to create a new project.
Step 2 Add the following code to res/layout/activity_main.xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:hint="Enter Text" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pitch"
android:textSize="16sp" />
<SeekBar
android:id="@+id/seekBarPitch"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:progress="50" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Speed"
android:textSize="16sp" />
<SeekBar
android:id="@+id/seekBarSpeed"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:progress="50" />
<Button
android:id="@+id/btnSpeak"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:enabled="false"
android:text="Say it!" />
</LinearLayout>
Step 3 Add the following code to src/MainActivity.java
public class MainActivity extends AppCompatActivity {
private TextToSpeech textToSpeech;
private EditText editText;
private SeekBar seekBarPitch;
private SeekBar seekBarSpeed;
private Button buttonSpeak;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonSpeak = findViewById(R.id.btnSpeak);
textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = textToSpeech.setLanguage(Locale.ENGLISH);
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TextToSpeech", "Language not supported");
} else {
buttonSpeak.setEnabled(true);
}
} else {
Log.e("TextToSpeech", "Initialization failed");
}
}
});
editText = findViewById(R.id.editText);
seekBarPitch = findViewById(R.id.seekBarPitch);
seekBarSpeed = findViewById(R.id.seekBarSpeed);
buttonSpeak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
speak();
}
});
}
private void speak() {
String text = editText.getText().toString();
float pitch = (float) seekBarPitch.getProgress() / 50;
if (pitch < 0.1) pitch = 0.1f;
float speed = (float) seekBarSpeed.getProgress() / 50;
if (speed < 0.1) speed = 0.1f;
textToSpeech.setPitch(pitch);
textToSpeech.setSpeechRate(speed);
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
@Override
protected void onDestroy() {
if (textToSpeech != null) {
textToSpeech.stop();
textToSpeech.shutdown();
}
super.onDestroy();
}
}
Step 4: Add the following code to androidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
No comments:
Post a Comment