[swift] NotificationBanner 알림창 메시지 음성 인식 기능 설정
NotificationBanner는 앱에서 알림창을 표시하기 위한 편리한 라이브러리입니다. 이제는 알림창 메시지를 음성으로 인식하는 기능을 추가하고 싶다면, 아래의 가이드를 따라 설정할 수 있습니다.
음성 인식 기능 추가
- Speech Recognition 관련 프레임워크를 추가합니다. 이를 위해 Xcode에서 프로젝트를 열고, 프로젝트 네비게이터에서 프로젝트명을 클릭한 뒤 “Build Phases” 탭으로 이동합니다.
- “Link Binary With Libraries” 섹션에서 “+” 버튼을 클릭하여
Speech.framework
를 추가합니다.
권한 요청
- 음성 인식을 위해 앱이 권한을 요청해야 합니다.
Info.plist
파일을 열고, “Privacy - Speech Recognition Usage Description”를 추가합니다. 이 항목의 값으로 앱이 사용자에게 요청할 권한에 대한 설명을 입력합니다.
예시:
<key>NSAppleMusicUsageDescription</key>
<string>음성 인식을 통해 알림창 메시지를 읽어드립니다.</string>
음성 인식 설정
- NotificationBanner를 사용하기 위해 해당 라이브러리를 import 해줍니다.
import NotificationBannerSwift
- 음성 인식을 위한 객체를 생성하고, 인식할 언어와 델리게이트를 설정합니다.
let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "ko-KR"))! // 인식할 언어 설정 speechRecognizer.delegate = self // 델리게이트 설정
- 음성 인식을 시작하고, 결과를 받기 위해 델리게이트를 구현합니다.
func startRecording() { let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setCategory(.record, mode: .default, options: []) try audioSession.setActive(true, options: .notifyOthersOnDeactivation) } catch { print("음성 인식을 위한 오디오 세션 설정 중 오류가 발생했습니다.") } recognitionTask?.cancel() self.recognitionTask = nil let audioBuffer = audioEngine.inputNode!.busTappedSampleTime inputNode.removeTap(onBus: 0) inputNode.installTap(onBus: 0, bufferSize: 1024, format: inputNode.outputFormat(forBus: 0)) { [weak self] (buffer: AVAudioPCMBuffer, time: AVAudioTime) in self?.recognitionRequest.append(buffer) } audioEngine.prepare() do { try audioEngine.start() } catch { print("음성 인식을 시작하는 데 문제가 발생했습니다.") } recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest, resultHandler: { [weak self] (result: SFSpeechRecognitionResult?, error: Error?) in if let result = result { let bestString = result.bestTranscription.formattedString // 음성 메시지 처리 로직 작성 } else if let error = error { print("음성 인식 중 오류가 발생했습니다: \(error.localizedDescription)") } }) }
- 음성 인식 기능을 활용하여 알림창 메시지를 처리하는 로직을 작성합니다. 예를 들어, 다음과 같은 코드를 사용하여 메시지를 음성으로 읽어줄 수 있습니다.
if bestString.lowercased() == "알림 메시지" { let message = "알림이 도착했습니다." let banner = NotificationBanner(title: "알림", subtitle: message, style: .info) banner.show() // 음성으로 메시지 읽어주기 let utterance = AVSpeechUtterance(string: message) utterance.voice = AVSpeechSynthesisVoice(language: "ko-KR") utterance.rate = 0.5 let synthesizer = AVSpeechSynthesizer() synthesizer.speak(utterance) }