티스토리 뷰
기존에 우리 앱은 SwiftUI의 LocalizableStringKey를 이용해서 개발해왔다. 그래서 String만을 받는 TTS는 좀 난감했었는데...
TTS.shared.speak(NSLocalizedString("100m, 앞, \(direction[$0.turnDirection()]!)", comment: ""))
NSLocaliedString을 쓰는 방식으로 해결했다.
TTS 코드는 다음과 같다.
import AVFoundation
import SwiftUI
/// 말하기
class TTS: NSObject, AVSpeechSynthesizerDelegate {
static let shared = TTS()
let synthesizer = AVSpeechSynthesizer()
override init() {
super.init()
synthesizer.delegate = self
}
/// 말하기
func speak(_ text: String) {
print("=== tts: \(text)")
try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.duckOthers])
let languageCode: String = Locale.current.languageCode!
let utterance = AVSpeechUtterance(string: text)
utterance.voice = AVSpeechSynthesisVoice(language: languageCode)
synthesizer.speak(utterance)
}
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
guard !synthesizer.isSpeaking else { return }
try? AVAudioSession.sharedInstance().setActive(false)
}
}
Language Code를 받아와서 넣어주기 때문에 앱, 또는 휴대폰 기본 설정 언어를 따른다.
'macOS, iOS' 카테고리의 다른 글
[iOS] firestore 함수들 정리 (0) | 2020.04.01 |
---|---|
[iOS] background에서 TTS 실행해주기 (0) | 2020.03.31 |
[iOS] 애플 로그인에 대한 수많은 질문들 (0) | 2020.03.23 |
[iOS] Xcode 이전버전 OS 시뮬레이터 다운받기 (0) | 2020.03.23 |
[iOS] SwiftUI에서 width가 screenSize(full)인 버튼 만들기 (0) | 2020.03.23 |