500x90 AdSpace

BNB
Trending

Search This Blog

Android Speech to Text Converter – Android Studio Step by Step Coding


Android Speech to Text Converter - Android Studio

Android Speech to Text Converter – Android Studio Step by Step Coding

Android comes with an inbuilt feature android speech to text through which you can provide speech input to your app. In this tutorial we will learn how to make speech to text converter. So as the name implies, user voice will be converted into text and shown on Android Screen. As soon as a user say something, Android will recognize his/her voice and convert it into text. It will do it through RecognizerIntent.
Android Speech to Text Converter – Android Studio
Download full project files of Android Speech to Text Converter.

Steps to Create a Android Speech to Text Converter – Android Studio


1. As we will recored audio to convert it into text so we will need RECORD_AUDIO permission into our AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androstock.speechtotext">

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

<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>

2. Our activity_main.xml looks like this.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#3F51B5">

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"
android:textSize="26sp"
android:textStyle="normal"
android:textColor="#FFFFFF"/>

<ProgressBar
android:id="@+id/progressBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>

<ImageButton
android:id="@+id/mainButton"
android:layout_width="90dp"
android:layout_height="90dp"
android:scaleType="fitXY"
android:background="@android:color/transparent"
android:src="@drawable/mike"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dp"/>

</RelativeLayout>

3. This is the main part of voice recognition app where we will use RecognizerIntent to convert speech into text. Add following code in MainActivity.java:
package com.androstock.speechtotext;

import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.util.ArrayList;

/**
* Created by SHAJIB on 8/2/2017.
*/

public class MainActivity extends AppCompatActivity implements RecognitionListener {

private TextView returnedText;
ImageButton recordbtn;
private ProgressBar progressBar;
private SpeechRecognizer speech = null;
private Intent recognizerIntent;
static final int REQUEST_PERMISSION_KEY = 1;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
returnedText = (TextView) findViewById(R.id.textView1);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
recordbtn = (ImageButton) findViewById(R.id.mainButton);

String[] PERMISSIONS = {Manifest.permission.RECORD_AUDIO};
if(!Function.hasPermissions(this, PERMISSIONS)){
ActivityCompat.requestPermissions(this, PERMISSIONS, REQUEST_PERMISSION_KEY);
}


progressBar.setVisibility(View.INVISIBLE);
speech = SpeechRecognizer.createSpeechRecognizer(this);
speech.setRecognitionListener(this);
recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE,
"en");
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
this.getPackageName());
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);

/*
Minimum time to listen in millis. Here 5 seconds
*/
recognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 5000);
recognizerIntent.putExtra("android.speech.extra.DICTATION_MODE", true);




recordbtn.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View p1)
{
progressBar.setVisibility(View.VISIBLE);
speech.startListening(recognizerIntent);
recordbtn.setEnabled(false);

/*To stop listening
progressBar.setVisibility(View.INVISIBLE);
speech.stopListening();
recordbtn.setEnabled(true);
*/
}


});



}

@Override
public void onResume() {
super.onResume();
}

@Override
protected void onPause() {
super.onPause();
if (speech != null) {
speech.destroy();
Log.d("Log", "destroy");
}

}

@Override
public void onBeginningOfSpeech() {
Log.d("Log", "onBeginningOfSpeech");
progressBar.setVisibility(View.VISIBLE);
}

@Override
public void onBufferReceived(byte[] buffer) {
Log.d("Log", "onBufferReceived: " + buffer);
}

@Override
public void onEndOfSpeech() {
Log.d("Log", "onEndOfSpeech");
progressBar.setVisibility(View.INVISIBLE);
recordbtn.setEnabled(true);
}

@Override
public void onError(int errorCode) {
String errorMessage = getErrorText(errorCode);
Log.d("Log", "FAILED " + errorMessage);
progressBar.setVisibility(View.INVISIBLE);
returnedText.setText(errorMessage);
recordbtn.setEnabled(true);
}

@Override
public void onEvent(int arg0, Bundle arg1) {
Log.d("Log", "onEvent");
}

@Override
public void onPartialResults(Bundle arg0) {
Log.d("Log", "onPartialResults");

ArrayList<String> matches = arg0.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String text = "";
/* To get all close matchs
for (String result : matches)
{
text += result + "\n";
}
*/
text = matches.get(0); // Remove this line while uncommenting above codes
returnedText.setText(text);
}

@Override
public void onReadyForSpeech(Bundle arg0) {
Log.d("Log", "onReadyForSpeech");
}

@Override
public void onResults(Bundle results) {
Log.d("Log", "onResults");

}

@Override
public void onRmsChanged(float rmsdB) {
Log.d("Log", "onRmsChanged: " + rmsdB);
progressBar.setProgress((int) rmsdB);

}

public static String getErrorText(int errorCode) {
String message;
switch (errorCode) {
case SpeechRecognizer.ERROR_AUDIO:
message = "Audio recording error";
break;
case SpeechRecognizer.ERROR_CLIENT:
message = "Client side error";
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
message = "Insufficient permissions";
break;
case SpeechRecognizer.ERROR_NETWORK:
message = "Network error";
break;
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
message = "Network timeout";
break;
case SpeechRecognizer.ERROR_NO_MATCH:
message = "No match";
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
message = "RecognitionService busy";
break;
case SpeechRecognizer.ERROR_SERVER:
message = "error from server";
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
message = "No speech input";
break;
default:
message = "Didn't understand, please try again.";
break;
}
return message;
}

}

You can change the minimum time to listen by changing the below line
recognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 5000);

4. Finally our Function.java file.
package com.androstock.speechtotext;

import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;

/**
* Created by SHAJIB on 8/2/2017.
*/

public class Function {

public static boolean hasPermissions(Context context, String... permissions) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
}
Android Speech to Text Converter – Android Studio Step by Step Coding Reviewed by stor-app on September 17, 2018 Rating: 5 Android Speech to Text Converter – Android Studio Step by Step Coding Android comes with an ...

No comments: