[swift] NotificationBanner 알림창 메시지 음성 인식 설정

개요

NotificationBanner는 iOS 앱에서 사용자에게 간단한 알림 메시지를 표시하는 데 사용되는 라이브러리입니다. 이번에는 NotificationBanner를 사용하여 알림창 메시지의 음성을 인식하도록 설정하는 방법에 대해 알아보겠습니다.

음성 인식 기능 준비

iOS 앱에서 음성 인식 기능을 사용하려면 먼저 사용자에게 마이크 사용 권한을 요청해야 합니다. Info.plist 파일에 다음 권한 키를 추가합니다.

<key>NSMicrophoneUsageDescription</key>
<string>마이크를 사용하여 음성을 인식합니다.</string>

알림창 메시지 음성 인식 설정

  1. NotificationBanner 패키지를 프로젝트에 추가합니다. Cocoapods를 사용한다면 Podfile에 다음과 같이 추가합니다.
pod 'NotificationBannerSwift'
  1. NotificationBanner를 사용할 ViewController로 이동합니다. 음성 인식을 위해 Speech 프레임 워크를 사용하기 위해 해당 모듈을 import합니다.
import Speech
  1. 알림창 메시지 음성 인식을 위한 SpeechRecognitionManager 클래스를 생성합니다. 아래의 예제 코드를 참고하여 SpeechRecognitionManager 클래스를 작성합니다.
class SpeechRecognitionManager {
    let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "ko-KR"))!
    var request: SFSpeechAudioBufferRecognitionRequest?
    var recognitionTask: SFSpeechRecognitionTask?
    
    func startRecognition() {
        let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setCategory(.record, mode: .measurement, options: [.duckOthers])
            try audioSession.setMode(.measurement)
            try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
            
            let inputNode = audioEngine.inputNode
            request = SFSpeechAudioBufferRecognitionRequest()
            guard let recognitionRequest = request else { return }
            recognitionRequest.shouldReportPartialResults = true
            
            recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest, resultHandler: { [weak self] (result, error) in
                guard let self = self else { return }
                if let result = result {
                    let bestString = result.bestTranscription.formattedString
                    print(bestString)
                    
                    // 음성 인식 결과에 따른 동작 수행
                    if bestString.contains("확인") {
                        // 알림창 확인 버튼 클릭
                    } else if bestString.contains("취소") {
                        // 알림창 취소 버튼 클릭
                    }
                }
                if error != nil || result?.isFinal ?? false {
                    self.stopRecognition()
                }
            })
            
            let recordingFormat = inputNode.outputFormat(forBus: 0)
            inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, _) in
                self.request?.append(buffer)
            }
            
            audioEngine.prepare()
            try audioEngine.start()
        } catch {
            print("Error starting speech recognition: \(error)")
        }
    }
    
    func stopRecognition() {
        audioEngine.stop()
        audioEngine.inputNode.removeTap(onBus: 0)
        recognitionTask?.cancel()
        request?.endAudio()
    }
}
  1. 알림창을 표시하는 코드를 작성합니다. NotificationBanner를 사용하여 알림창을 표시하면서 음성 인식 기능을 사용하도록 SpeechRecognitionManager 클래스를 호출합니다. 아래의 예제 코드를 참고하여 알림창을 표시하고 음성 인식을 설정합니다.
// 알림창 메시지 생성
let banner = NotificationBanner(title: "알림", subtitle: "메시지를 확인하시겠습니까?", style: .info)

// 음성 인식을 위한 SpeechRecognitionManager 인스턴스 생성
let speechRecognitionManager = SpeechRecognitionManager()

// 알림창에 버튼이 눌렸을 때 호출될 이벤트 핸들러 설정
banner.onTap = {
    // 음성 인식 시작
    speechRecognitionManager.startRecognition()
}

// 알림창을 표시
banner.show()
  1. 위의 코드에서 음성 인식 결과에 따른 동작을 추가하십시오. 음성 인식 결과로 “확인”이라는 단어가 포함되면 알림창의 확인 버튼을 누른 것으로 처리하고, “취소”라는 단어가 포함되면 알림창의 취소 버튼을 누른 것으로 처리합니다.

결론

NotificationBanner를 사용하여 iOS 앱에서 알림창 메시지를 표시하고 음성 인식 기능을 설정하는 방법에 대해 알아보았습니다. 이를 통해 사용자는 알림창 메시지를 음성으로 확인하거나 취소할 수 있습니다. 음성 인식 기능은 사용자의 편의성과 접근성을 높여주는 중요한 기능 중 하나입니다.