Android 에서 지원하는 음성 인식 기능인 SpeechRecognizer
Android 에는 SpeechRecognizer 라는 class 로 마이크에 입력되는 음성을 Text 로 변환해주는 Class 가 지원됩니다.
SpeechRecognizer | Android Developers
developer.android.com
해당 클래스를 이용하면 음성을 이용한 검색 / 채팅과 같은 기능 을 구현할 수 있습니다.
Source Code
기본적으로 마이크를 통해 Audio 를 입력해야 하기 때문에 Permission 설정을 먼저 요청합니다.
fun requestPermission(context: Context) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
context as Activity,
arrayOf(Manifest.permission.RECORD_AUDIO), 0)
}
}
저의 경우 Compose 환경에서 구현했던 코드이고 , 전역 함수로 설정하고자 하여 Context 를 파라미터로 받아서 function 을 구현했습니다.
그리고 SpeechRecognizer 객체를 생성해줍니다.
val recognizer = SpeechRecognizer.createSpeechRecognizer(context)
그리고 recognizer 에 이벤트 (recognizer 가 실행 / 종료 되는 것 부터 시작해서 음성을 수신하거나 Text 로 인식되는 등의) 를 수신할 수 있는 Listener 도 구현해줍니다.
각 메서드 별 기능은 주석으로 설명해두었습니다.
recognizer.setRecognitionListener(object : RecognitionListener{
override fun onReadyForSpeech(params: Bundle?) {
}
override fun onBeginningOfSpeech() {
// recognizer 의 startListening 이 호출 되면 동시에 호출 됩니다.
}
override fun onRmsChanged(rmsdB: Float) {
}
override fun onBufferReceived(buffer: ByteArray?) {
// recognizer 에 buffer , 즉 , 무언가 음성이 Text 로써 인식이 될 때마다
// ByteArray 로 이곳 에서 수신 가능 합니다.
}
override fun onEndOfSpeech() {
// recognizer 의 stopListening 이 호출 되면 동시에 호출 됩니다.
}
override fun onError(error: Int) {
// 에러가 발생
}
override fun onResults(results: Bundle?) {
val matches = results?.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
var content = ""
for (i in matches!!.indices){
content += matches[i]
}
// recognizer 의 stopListening 이 호출 된 후 별도의 Error 가 발생 하지 않을 경우
// 이곳, onResults 에서 Bundle 에 String Array 로 인식된 음성이 순서 대로 들어 있게 됩니다.
}
override fun onPartialResults(partialResults: Bundle?) {
}
override fun onEvent(eventType: Int, params: Bundle?) {
}
})
이 후
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, context.packageName)
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ko-KR")
recognizer.startListening(intent)
언어를 한국어로 설정한 뒤 Recognize Speech 에 대한 Intent 를 recognizer.startListening 에 전달하여
음성인식 기능을 시작하고
recognizer.stopListening()
으로 음성 인식 기능을 종료할 수 있습니다.
'Android > Kotlin' 카테고리의 다른 글
Jetpack Compose 에서 기존 View 를 사용하고자 한다면! (0) | 2024.05.27 |
---|---|
LiveData 의 postValue() vs setValue() 의 차이점, 언제 사용해야 할까? (0) | 2024.03.29 |
Android 배워보자 Compose! -(5) Scaffold / BottomNavigation (1) | 2024.02.14 |
Jetpack Compose 에서 Dialog 구현하기 (1) | 2024.02.07 |
Jetpack Compose 에서 ProgressBar 구현하기 (0) | 2024.02.05 |