Tuesday, July 6, 2021

How to create TextToSpeech in an android

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.

How to create TextToSpeech in an android

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