티스토리 뷰

macOS, iOS

[iOS] TTS 다국어 지원하기

SweetDev 2020. 3. 27. 12:13

기존에 우리 앱은 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를 받아와서 넣어주기 때문에 앱, 또는 휴대폰 기본 설정 언어를 따른다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함