Redes Sociais
 Telegram  YouTube
Como transformar voz em texto(String) com Kotlin
18 de junho de 2020

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.





Autor: Rodrigo Leutz

Desenvolvedor Web e Android ( Kotlin e Java )


Pegar endereço com CEP usando coroutines e retrofit em Kotlin

Nesse tutorial vou mostrar como fazer um aplicativo em MVVM para pegar endereço com CEP usando coroutines e retrofit em[...]

4 de novembro de 2020

Converter Binário para Inteiro e Inteiro para Binário em Kotlin

Nesse tutorial vamos portanto ver como converter número binário para inteiro e também inteiro para binário em Kotlin no Android[...]

29 de outubro de 2020

Problema com Kotlin e synthetic no Android Studio

Notei que tem algumas pessoas com problemas com kotlin e synthetic no Android Studio então escrevi esta dica para solução desse[...]

27 de outubro de 2020