Como hacer una aplicación reconocimiento de voz en kotlin

En esta guía vas a implementar reconocimiento de voz en Kotlin para Android Studio. La idea es que el usuario hable, la app procese esa voz y el texto resultante aparezca en la pantalla del móvil.

Qué incluye este ejemplo

  • Diseño básico con TextView e ImageButton.
  • Uso del intent de reconocimiento de voz en Android.
  • Código Kotlin listo para adaptar a tus propios proyectos.

Este artículo es la versión en Kotlin del tutorial de reconocimiento de voz en Android Studio, útil si vienes desde Java o quieres comparar ambos enfoques.

Hola amigos hoy veremos como crear una aplicación de reconocimiento de voz en kotlin
la idea de este ejercicio es que nosotros hablemos cualquier frase y la app reconozca lo que hablamos y luego lo muestre por pantalla del móvil.
Este ejercicio lo habíamos tocado muchos meses atrás y estaba construido en java, en aquel entonces no existía aun kotlin en fin si quieres echarle un vistazo te dejo el enlace: Como hacer una aplicación reconocimiento de voz en android studio

Primero necesitamos agregar un textview y un imagebutton, para que sea vea la imagen del micrófono, no se preocupen también les dejare la imagen del micrófono esta debe estar guardad en la carpeta Drawable.

 

Imagen del micrófono:

Te dejo el modo texto de la parte gráfica por si te interesa.

 

activity_main

 

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.androfast.server.appconvertiraudioletrakotlin.MainActivity">

    <TextView
        android:id="@+id/txtMostrar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.48"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.156" />

    <ImageButton
        android:id="@+id/btnMostrar"
        android:layout_width="156dp"
        android:layout_height="149dp"
        android:layout_marginTop="92dp"
        android:background="@drawable/microfono"
        android:onClick="hablar"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txtMostrar" />


</android.support.constraint.ConstraintLayout>

 

Ahora te dejo la clase mainActivity

MainActivity

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


class MainActivity : AppCompatActivity() {

    var grabar: TextView? = null

    private val RECOGNIZE_SPEECH_ACTIVITY = 1
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        grabar = findViewById(R.id.txtMostrar)


    }

    override fun onActivityResult(requestCode: Int, resultCode: Int,
                                  data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
            RECOGNIZE_SPEECH_ACTIVITY ->

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

                    val speech = data
                            .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
                    val strSpeech2Text = speech[0]

                    grabar?.setText(strSpeech2Text)
                }
            else -> {
            }
        }
    }

    fun hablar(v: View) {

        val intentActionRecognizeSpeech = 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 (a: ActivityNotFoundException) {
            Toast.makeText(applicationContext,
                    "Tú dispositivo no soporta el reconocimiento por voz",
                    Toast.LENGTH_SHORT).show()
        }

    }
}

 

Ahora debemos ir a  nuestro AndroidManifest y agregar algunos permisos

 

AndroidManifest

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androfast.server.appconvertiraudioletrakotlin">
    <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: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>

Y el resultado seria algo como esto, todo lo que hablen en la app android lo convertirá a letras

Si te interesa también tenemos el mismo ejercicio en java para Android:

Como hacer una aplicacion reconocimiento de voz en android studio

 

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