티스토리 뷰
안녕하세요. 오늘은 안드로이드에서 사용할 수 있는 음성기술에 대해 소개하려고 합니다.
STT, TTS 이 두가지 기술입니다!
STT
Speech to Text의 약자로 음성을 텍스트로 바꾸는 기술입니다.
안드로이드에서 기본으로 제공되며 많은 기업에서 유료로 제공하는 기술입니다!
(안드로이드는 공짜!)
구현 방법을 Kotlin을 통해 알아보겠습니다.
import android.speech.*
// 이 패키지가 STT의 모든 기능!
val recognizer = SpeechRecognizer.createSpeechRecognizer(context)
// 음성 인식기를 생성!
recognizer.setRecognitionListener(object: RecognitionListener{
override fun onReadyForSpeech(params: Bundle?) {}
// 음성 인식 준비 완료
override fun onRmsChanged(rmsdB: Float) {}
// 음성의 RMS가 바뀌었을 때
override fun onBufferReceived(buffer: ByteArray?) {}
// 음성 데이터의 buffer를 받을 수 있다.
override fun onPartialResults(partialResults: Bundle?) {}
override fun onEvent(eventType: Int, params: Bundle?) {}
override fun onBeginningOfSpeech() {}
// 사용자가 말하기 시작할 때
override fun onEndOfSpeech() {}
// 사용자의 말이 끝났을 때
override fun onError(error: Int) {}
// 오류가 발생했을 때
override fun onResults(results: Bundle) {}
// 결과 값을 받음!
})
// onResults에서 텍스트를 받는 방법
val key = SpeechRecognizer.RESULTS_RECOGNITION
val result = results.getStringArrayList(key)
//result는 arraylist 안에 들어간 데이터는
//0번째가 부드럽게 변형 된 데이터
//이 후의 데이터는 띄어쓰기나 맞춤법이 어색한 데이터
val dataStr = result[0]
// 위의 방법을 통해 intent를 생성
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply{
putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, context.packageName)
// packageName을 입력, 하단에서는 한국어 인식 정의
putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ko-KR") }
recognizer.startListening(intent) // 인식 시작
recognizer.stopListening // 인식 중단
코드가 의외로 간단하죠? 위 코드를 통해 쉽게 음성인식을 구현할 수 있습니다.
TTS
STT랑 반대로 Text to Speech 텍스트를 음성으로 출력하는 기술입니다. 이 역시 안드로이드에서는 기본으로(무료로) 제공합니다. Kotlin을 통해 알아보겠습니다.
//tts 생성
val tts = TextToSpeech(context, { state ->
if (state != TextToSpeech.ERROR){
tts.setLanguage(Locale.KOREA)
// 언어 설정
}
})
tts.setSpeechRate(0.9f)
// 말하는 속도 설정
tts.speak("말할 텍스트를 입력!", TextToSpeech.QUEUE_FLUSH, null, null)
// 말해!
tts.stop()
// tts speaking 중지
tts.shutdown()
// tts 중지
역시 간단하게 구현 할 수 있습니다.
STT와 TTS를 직접 구현하려면 어렵겠지만.... 구글의 잘 만들어진 기술을 쉽게 사용할 수 있는 점은 안드로이드의 장점이죠!
STT나 TTS에 대한 질문은 댓글에 남겨 주세요!
아는 만큼 답변 해 드리겠습니다!
감사합니다!
'기술 및 라이브러리 소개' 카테고리의 다른 글
RecyclerView - 안드로이드의 새로운 리스트 뷰 (0) | 2018.05.13 |
---|---|
iOS UI 함수 기본 정리 (0) | 2018.05.11 |
드래그로 item 옮기기 - RAReorderableLayout (0) | 2018.05.09 |
안드로이드 Permisson 관리 - TedPermission (0) | 2018.05.07 |
RxJava - Observable이란? (0) | 2018.05.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday