Como transformar voz em texto(String) com Kotlin
Kotlin

Como transformar voz em texto com Kotlin





Nesse tutorial vou demostrar como transformar voz em texto(String) com Kotlin para que você utilize os recursos de voz para inserir strings na aplicação.

Bom, neste aplicativo vamos fazer algo bem simples que é receber uma voz e transforma la em um texto.

Vamos utilizar da aplicação Google Assistente assim vamos ter que estar com ela instalada em nosso celular para que tudo funcione corretamente.

Primeiramente vamos criar um novo projeto vazio(Empty) com o nome de br.com.uware.vozparatexto para fazer a nossa aplicação.

Base do aplicativo

Então para começar vamos montar a base do nosso aplicativo começando pelo arquivo strings.xml.

<resources>
    <string name="app_name">Voz para Texto</string>

    <string name="speech_err">Erro ao abrir a intent com Google Assistente</string>
</resources>

Agora vamos adicionar um ícone de microfone com o nome de ic_mic.xml para que seja exibido em uma ImageView que quando clicada irá chamar a intent para gravar a voz.

Logo depois de ter adicionado o ícone vamos modificar o nosso layout para que tenha os componentes necessários.

Vamos então editar o nosso arquivo activity_main.xml para que fique com o seguinte código.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">

    <TextView
        android:id="@+id/tvResult"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="25dp"
        android:text="@string/app_name"
        android:gravity="center"
        app:layout_constraintBottom_toTopOf="@id/ivMic"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <ImageView
        android:id="@+id/ivMic"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/ic_mic"
        android:layout_marginBottom="50dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>




Como transformar voz em texto com Kotlin

Com a base do aplicativo feita vamos então para a parte da programação da nossa MainActivity.

Vamos então deixar a nossa MainActivity.kt com o seguinte código para que quando clicado na ImageView ela crie uma intent para receber a voz e enviar o resultado que será colocado dentro de um TextView.

package br.com.uware.vozparatexto

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.speech.RecognizerIntent
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ivMic.setOnClickListener {
            // Criando intent
            val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
                putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
                putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault())
            }
            // Iniciando intent
            if(intent.resolveActivity(packageManager) != null) {
                startActivityForResult(intent, SPEECH_REQUEST_CODE)
            }
            else {
                Toast.makeText(this, R.string.speech_err, Toast.LENGTH_SHORT).show()
            }
        }
    }

    // Recebendo resultado da intent
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == SPEECH_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
            val spokenText: String? =
                data?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS).let { results ->
                    results?.get(0)
                }
            tvResult.text = spokenText
        }
        super.onActivityResult(requestCode, resultCode, data)
    }

    // Código para receber o resultado
    companion object {
        private const val SPEECH_REQUEST_CODE = 0
    }
}

Agora é só compilar e executar que seu projeto já deve estar funcionando.

Para saber mais sobre o assunto acesse o site do Android Developers.

Enfim espero poder ter ajudado com mais este tutorial sobre como transformar voz em texto(String) com Kotlin.





Rodrigo Leutz
Desenvolvedor Web e Android ( Kotlin e Java )
https://uware.com.br