Como hacer una aplicacion reconocimiento de voz en android studio

En este tutorial aprenderás a crear una app de reconocimiento de voz en Android Studio que escucha al usuario y muestra el texto reconocido en pantalla. Es una base práctica para asistentes, comandos por voz, formularios hablados o cualquier app que necesite convertir voz en texto.

Qué vas a lograr

  • Crear una interfaz simple con un botón de micrófono y un TextView.
  • Usar el reconocimiento de voz de Android desde una Activity.
  • Capturar el resultado hablado y mostrarlo dentro de la aplicación.

Si prefieres hacerlo con Kotlin, también puedes revisar la guía relacionada: reconocimiento de voz en Kotlin para Android.

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 aplicacion reconocimiento de voz en android studio

33 comentarios en “Como hacer una aplicacion reconocimiento de voz en android studio”

  1. 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. 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. 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. 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. 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. 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. 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. 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 un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio
WhatsApp chat