티스토리 뷰

안녕하세요. 오늘은 안드로이드에서 사용할 수 있는 음성기술에 대해 소개하려고 합니다.
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에 대한 질문은 댓글에 남겨 주세요!
아는 만큼 답변 해 드리겠습니다!

감사합니다!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday