이번 시간에는 입력한 텍스트를 입력하면 음성으로 전환하는 방법에 대하여 알아보겠습니다.
- 설명 -
1. 음성으로 전환할 메시지 입력 EditText
2. 음성으로 전환하는 기능 Button
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">
<EditText
android:id="@+id/speech_text"
android:layout_width="match_parent"
android:layout_height="100dp"
android:hint="메시지를 입력하세요" />
<Button
android:id="@+id/speech_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/speech_text"
android:layout_centerHorizontal="true"
android:text="음성 전환" />
</RelativeLayout>
- 설명 -
1. ACTION_CHECK_TTS_DATA
언어 데이터 체크
2. TextToSpeech
음성전환 초기화
3. LANG_MISSING_DATA
언어 데이터 누락
4. LANG_NOT_SUPPORTED
지원되지 않는 언어
class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener{//MainActivity
lateinit var speechText: EditText
lateinit var textToSpeech: TextToSpeech
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//입력창
speechText = findViewById(R.id.speech_text)
//음성전환 버튼 이벤트
val speechBtn: Button = findViewById(R.id.speech_btn)
speechBtn.setOnClickListener {
val intent:Intent = Intent()
intent.action = TextToSpeech.Engine.ACTION_CHECK_TTS_DATA
activityResult.launch(intent)
}
}//onCreate
private val activityResult: ActivityResultLauncher<Intent> = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()){
//보이스가 있다면
if(it.resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS){
//음성전환 준비
textToSpeech = TextToSpeech(this, this)
}else{ //없다면 다운로드
//데이터 다운로드
val installIntent: Intent = Intent()
installIntent.action = TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA
startActivity(installIntent)
}
}
//TextToSpeech 엔진 초기화시 호출되는 함수
override fun onInit(status: Int) {
if(status == TextToSpeech.SUCCESS){
//언어값
val languageStatus: Int = textToSpeech.setLanguage(Locale.KOREAN)
//데이터 문제(데이터가 없거나 언어를 지원할 수 없다면)
if(languageStatus == TextToSpeech.LANG_MISSING_DATA ||
languageStatus == TextToSpeech.LANG_NOT_SUPPORTED){
Toast.makeText(this, "언어를 지원할 수 없습니다.",
Toast.LENGTH_SHORT).show()
}else{ //데이터 성공
//입력값 변수에 담기
val data: String = speechText.text.toString()
var speechStatus: Int = 0
//안드로이드 버전에 따른 조건(롤리팝보다 같거나 높다면
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
speechStatus = textToSpeech.speak(data, TextToSpeech.QUEUE_FLUSH,
null, null)
} else {
speechStatus = textToSpeech.speak(data, TextToSpeech.QUEUE_FLUSH,
null)
}
if(speechStatus == TextToSpeech.ERROR){
Toast.makeText(this, "음성전환 에러입니다.",
Toast.LENGTH_SHORT).show()
}
}
}else{ //실패
Toast.makeText(this, "음성전환 엔진 에러입니다.",
Toast.LENGTH_SHORT).show()
}
}
}
2022.07.01 - [안드로이드] - [안드로이드 코틀린] DrawerLayout Navigation 만드는 방법 part1 - 화면 만들기
2022.06.14 - [안드로이드] - [안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정
2022.06.03 - [안드로이드] - [안드로이드 코틀린] ViewModel - 화면 회전 시 데이터 초기화 막는 방법
[안드로이드 코틀린] 자동완성 텍스트뷰 쉽게 만드는 방법 (0) | 2022.07.10 |
---|---|
[안드로이드 코틀린] RecognizerIntent 음성을 텍스트(Text)로 전환시켜주는 방법 (0) | 2022.07.09 |
[안드로이드 코틀린] 다이얼로그(Dialog) 사용자정의 (Custom) 화면으로 보여주는 방법 (0) | 2022.07.07 |
[안드로이드 코를린] 다이얼로그(Dialog) 체크박스(CheckBox)로 보여주는 방법 (0) | 2022.07.06 |
[안드로이드 코틀린] 다이얼로그(Dialog) 리스트(List)로 보여주는 방법 (0) | 2022.07.05 |
댓글 영역