Post

AudioKit에서 BaseTapForSpeechRecognition을 사용한 음성인식 예제

AudioKit에서 BaseTapForSpeechRecognition을 사용한 음성인식 예제

현재 코드에서의 SpeechRecognitionTap과 BaseTapForSpeechRecognitionConductor는 AudioKit과 Speech Framework를 연결하여 실시간으로 마이크 입력을 받아 음성 인식 결과를 텍스트로 출력하는 역할을 수행합니다.

SpeechRecognitionTap: 마이크 오디오 버퍼를 음성 인식기로 전달

1
class SpeechRecognitionTap: BaseTap

BaseTap은 AudioKit에서 입력을 분석하기 위한 탭(Tap)을 구현할 때 사용하는 기본 클래스입니다. SpeechRecognitionTap은 이를 상속받아 Apple의 Speech 프레임워크와 연결하는 데 초점을 둡니다.

주요 프로퍼티

프로퍼티 설명
recognitionRequest 오디오 버퍼를 지속적으로 전달받는 객체 (SFSpeechAudioBufferRecognitionRequest)
analyzer 언어별 음성 인식기 (SFSpeechRecognizer)
reconitionTask 실제 인식 작업을 수행하는 비동기 작업 (SFSpeechRecognitionTask)

메서드 설명

setupRecognition(locale:)

1
func setupRecognition(locale: Locale)
  • 선택한 언어(Locale)에 맞는 SFSpeechRecognizer 인스턴스를 생성
  • 실시간 스트리밍 인식을 위한 SFSpeechAudioBufferRecognitionRequest 초기화
  • recognitionRequest.shouldReportPartialResults = true 설정으로 중간 결과도 실시간 전달 가능

stopRecognition()

1
func stopRecognition()
  • 음성 인식 세션을 종료하고 관련 객체를 초기화하여 해제

doHandleTapBlock(buffer:at:)

1
override func doHandleTapBlock(buffer: AVAudioPCMBuffer, at time: AVAudioTime)
  • AudioKit에서 자동으로 호출되는 메서드
  • 마이크 입력 버퍼를 recognitionRequest에 전달하여 음성 인식기가 실시간으로 처리하게 함

BaseTapForSpeechRecognitionConductor: 음성 인식과 오디오 경로를 통합 관리

1
class BaseTapForSpeechRecognitionConductor: ObservableObject, HasAudioEngine

주요 프로퍼티

프로퍼티 설명
textString 인식된 텍스트 결과
languageCode 선택된 언어 코드 (en-US, ko-KR, ja-JP)
srTap SpeechRecognitionTap 인스턴스
engine, mic, outputMixer, silencer AudioKit의 오디오 라우팅 구성 요소
recognitionTask 음성 인식 작업 참조용

주요 로직

init()

  • 오디오 엔진과 마이크 입력 초기화
  • AudioKit의 output = silencer로 출력 경로 설정 (실제 소리는 꺼둔 상태)
  • srTap.start()로 마이크 데이터 수집 시작
  • setLanguage(code:)를 호출하여 기본 언어로 음성 인식 시작

setLanguage(code:)

1
func setLanguage(code: String)
  • 현재 음성 인식 세션을 중단 (stopRecognition, stop)
  • 오디오 엔진을 재시작
  • 새로운 언어로 SFSpeechRecognizer를 초기화하고 recognitionRequest를 설정
  • recognitionTask를 새로 만들어 textString에 실시간 결과를 반영

핵심: 언어가 바뀔 때 engine, tap, recognizer를 모두 재시작해서 새로운 인식 환경을 구성

흐름 요약

  1. 뷰가 나타남 → init()에서 오디오 및 인식기 설정
  2. 사용자가 언어를 선택 → languageCode.didSet → setLanguage(...)
  3. 마이크 입력 → doHandleTapBlock → recognitionRequest.append(...)
  4. Apple 음성 인식기에서 처리된 결과가 textString에 실시간 업데이트됨
  5. 뷰는 ScrollView를 통해 자동 스크롤하며 결과를 출력

정리

클래스 역할 핵심 기능
SpeechRecognitionTap 오디오 → SpeechFramework 전달 마이크 입력 버퍼를 recognitionRequest에 지속 전달
BaseTapForSpeechRecognitionConductor 오디오 엔진 + 언어 변경 + 인식기 관리 언어 변경 시 자동 재설정, 실시간 결과 처리
This post is licensed under CC BY 4.0 by the author.