如何使用 Kotlin 在 Android 中将文本转换为语音?
文本到语音应用程序将屏幕上的文本转换为语音,就像您在屏幕上写“Hello World”一样,当您按下按钮时,它会说“Hello World”。文字转语音通常用作辅助功能,以帮助难以阅读屏幕文字的人,但也方便那些想要阅读的人。此功能已成为用户非常常见且有用的功能。我们将在这个项目中使用 Kotlin 语言。在本文中,我们将看到如何使用android.speech.tts.TextToSpeech 类的 speak() 方法。并使用相同的方法将文本转换为语音(音频)。
分步实施
第 1 步:创建一个新项目
要在 Android Studio 中创建新项目,请参阅在 kotlin 的 android studio 中创建新项目。
第 2 步:使用 activity_main.xml 文件
导航到app > res > layout > activity_main.xml并将以下代码添加到该文件。下面是activity_main.xml文件的代码。
XML
Kotlin
package com.ayush.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.speech.tts.TextToSpeech
import android.util.Log
import android.widget.Button
import android.widget.EditText
import java.util.*
// Extending MainActivity TextToSpeech.OnInitListener class
class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener {
private var tts: TextToSpeech? = null
private var btnSpeak: Button? = null
private var etSpeak: EditText? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// view binding button and edit text
btnSpeak = findViewById(R.id.btn_speak)
etSpeak = findViewById(R.id.et_input)
btnSpeak!!.isEnabled = false
// TextToSpeech(Context: this, OnInitListener: this)
tts = TextToSpeech(this, this)
btnSpeak!!.setOnClickListener { speakOut() }
}
override fun onInit(status: Int) {
if (status == TextToSpeech.SUCCESS) {
val result = tts!!.setLanguage(Locale.US)
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS","The Language not supported!")
} else {
btnSpeak!!.isEnabled = true
}
}
}
private fun speakOut() {
val text = etSpeak!!.text.toString()
tts!!.speak(text, TextToSpeech.QUEUE_FLUSH, null,"")
}
public override fun onDestroy() {
// Shutdown TTS when
// activity is destroyed
if (tts != null) {
tts!!.stop()
tts!!.shutdown()
}
super.onDestroy()
}
}
第 3 步:使用 MainActivity.kt 文件
转到MainActivity.kt文件并参考以下代码。下面是MainActivity.kt文件的代码。代码中添加了注释以更详细地理解代码。
科特林
package com.ayush.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.speech.tts.TextToSpeech
import android.util.Log
import android.widget.Button
import android.widget.EditText
import java.util.*
// Extending MainActivity TextToSpeech.OnInitListener class
class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener {
private var tts: TextToSpeech? = null
private var btnSpeak: Button? = null
private var etSpeak: EditText? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// view binding button and edit text
btnSpeak = findViewById(R.id.btn_speak)
etSpeak = findViewById(R.id.et_input)
btnSpeak!!.isEnabled = false
// TextToSpeech(Context: this, OnInitListener: this)
tts = TextToSpeech(this, this)
btnSpeak!!.setOnClickListener { speakOut() }
}
override fun onInit(status: Int) {
if (status == TextToSpeech.SUCCESS) {
val result = tts!!.setLanguage(Locale.US)
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS","The Language not supported!")
} else {
btnSpeak!!.isEnabled = true
}
}
}
private fun speakOut() {
val text = etSpeak!!.text.toString()
tts!!.speak(text, TextToSpeech.QUEUE_FLUSH, null,"")
}
public override fun onDestroy() {
// Shutdown TTS when
// activity is destroyed
if (tts != null) {
tts!!.stop()
tts!!.shutdown()
}
super.onDestroy()
}
}
Note: We need to stop and shut down TextToSpeech Engine when activity is destroyed.
所以,我们的应用程序已经准备好了。我们可以看到输出。
输出: