Como hacer una aplicacion reconocimiento de voz en android studio

Buenas a pedido de un amigo en Chile vamos hacer una aplicación con reconocimiento de voz y luego atrapar lo que se diga en un texview.
sin mas demoras empezamos…..
necesitamos

un ImageButton
un TextView

reconocimiento de voz

 

activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.androidmorefast.moden.appreconocmientovoz.MainActivity">

    <ImageButton
        android:id="@+id/img_btn_hablar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:contentDescription="@string/app_name"
        android:onClick="onClickImgBtnHablar"
        android:background="@drawable/microfono" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtGrabarVoz"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:phoneNumber="false"
        android:textSize="30dp" />
</RelativeLayout>

 

MainActivity

 

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.speech.RecognizerIntent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

 public class MainActivity extends Activity {

    TextView grabar;

    private static final int RECOGNIZE_SPEECH_ACTIVITY = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        grabar = (TextView) findViewById(R.id.txtGrabarVoz);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
            case RECOGNIZE_SPEECH_ACTIVITY:

                if (resultCode == RESULT_OK && null != data) {

                    ArrayList<String> speech = data
                            .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                    String strSpeech2Text = speech.get(0);

                    grabar.setText(strSpeech2Text);
                }

                break;
            default:

                break;
        }
    }

    public void onClickImgBtnHablar(View v) {

        Intent intentActionRecognizeSpeech = new Intent(
                RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

        // Configura el Lenguaje (Español-México)
        intentActionRecognizeSpeech.putExtra(
                RecognizerIntent.EXTRA_LANGUAGE_MODEL, "es-MX");
        try {
            startActivityForResult(intentActionRecognizeSpeech,
                    RECOGNIZE_SPEECH_ACTIVITY);
        } catch (ActivityNotFoundException a) {
            Toast.makeText(getApplicationContext(),
                    "Tú dispositivo no soporta el reconocimiento por voz",
                    Toast.LENGTH_SHORT).show();
        }

    }

}

Ahora es importante que demos permisos a nuestra app, esto lo haremos dentro de nuestro AndroidManifest

AndroManifest

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidmorefast.moden.appreconocmientovoz">
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        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>

 

Y el resultado seria algo como esto, todo lo que hablen android lo escribirá ?

Por si te interesa también tenemos el mismo ejercicio en kotlin:

Como hacer una aplicación reconocimiento de voz en kotlin

33 comentarios en «Como hacer una aplicacion reconocimiento de voz en android studio»

  1. AndroFast

    Perfecto, siempre escuchado que recomiendan entrar al mundo de java antes de aventurarse en Android, pero sucede lo contrario conmigo, java me parece un poco aburrido. porque siempre me orientaron hacer sistemas de ventas o gestión, en cambio android me da mil posibilidades de crear una aplicación interesante y tal vez loca…saludos

  2. Anónimo

    Me gusto tu aporte, he estado buscando varios codigos de reconocimiento de voz y al fin pude encontrar uno, pero mi pregunta es la siguiente… habrá la posibilidad de que este mismo responda de igual forma (hablando)? Salufos y espero tu comebtario

  3. Anónimo

    hola disculpa soy nuevo en android Studio sera que podría hacerte algunas preguntas sobre tu código a través del correo , de antemano gracias

  4. Pingback: Como crear una grabadora de audio en android studio | ANDROFAST

  5. Daniel

    Muy buen código, pero hay la posibilidad de hacer lo mismo, pero no ocupar las plataforma de google, si no que el celular sea el encargado de realizar el reconocimiento de voz

  6. luis

    Hola alex,muchas gracias por tu aporte .Bueno quería consultarte como haría si yo quisiera dictar y al mismo tiempo quiero que se guarde el audio que dicte.¿se puede ?¿como lo haría ?.
    Te agradecería un montón si se pudiera y me dijeras.

  7. Laura

    Gracias por compartir, pero tengo una duda, que librería se ocuparía para el reconocimiento de acordes.

    Ejemplo si hago un SOL en la guitarra la app la reconozca.

    Gracias!

  8. Douglas Lopez

    Gracias por tu aporte. Estoy tratando de usar https://0110.be/posts/TarsosDSP_on_Android_-_Audio_Processing_in_Java_on_Android y me da un error en la primera instruccion:
    AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);

    Inclui la libreria de Tarsos en libs y si la reconoce. Pero el error dice que cierre la aplicacion porque se ha producido un error.
    Conoces de otra libreria para detection de audio?
    Trato ahora de combinar conocimientos musicales con android. Gracias. Saludos desde Caracas-Venezuela

    Te agradezco mucho tu ayuda.

  9. Pingback: Como hacer una aplicación reconocimiento de voz en kotlin - ANDROFAST

  10. Douglas Lopez

    Gracias Alex, ya solucioné. Instalé el APK en mi celular y función bien. El problema está en el simulador.
    Un abrazo y una vez mas, gracias por todo. El codigo convertido a Kotlin te lo envie por tu email.
    Douglas Lopez – Caracas – Venezuela

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

WhatsApp chat