【Swift5】 iOS에서 이용할 수 있는 표준 음성 합성(AVSpeechSynthesizer) 사용법의 메모
개요
표준으로 이용 가능한 음성 합성(AVSpeechSynthesizer)을 사용할 기회가 있었으므로, 비망록으로서 사용법을 정리합니다.
AVSpeechSynthesizer 공식 Doc
htps : //에서 ゔぇぺぺr. 아 ぇ. 코 m / 도쿠 멘 타치 온 / 아 v 후 우다 치 온 / 아 vs 페에 chsy 헉
AVSpeechSynthesizer는 텍스트 발화에서 합성된 음성을 생성하고 재생할 수 있는 객체입니다.
재생 중에 음성을 제어하는 기능도 제공됩니다.
사용법
import AVFoundation
AVFoundation을 import하면 준비 완료.
let synthesizer = AVSpeechSynthesizer()
AVSpeechSynthesizer의 인스턴스를 생성합니다.
독서
let utterance = AVSpeechUtterance.init(string: "読み上げる文字列")
let voice = AVSpeechSynthesisVoice.init(language: "ja-JP")
utterance.voice = voice
synthesizer.speak(utterance)
읽을 때 AVSpeechUtterance를 설정합니다.
AVSpeechUtterance.init에 읽고 싶은 문자열을 전달하고 사용할 언어도 지정합니다.
위의 설정을 한 후에는 AVSpeechSynthesizer의 speak 메소드에 AVSpeechUtterance를 전달하면 읽기가 시작됩니다.
포즈
if synthesizer.isSpeaking {
synthesizer.pauseSpeaking(at: .word)
}
읽는 동안 pauseSpeaking 메서드를 사용하여 읽을 수 있습니다.
인수에는 AVSpeechBoundary 상수(immidiate, word)를 지정할 수 있습니다.
immidiate는 발언을 즉시 일시 중지하고, word를 지정하면 현재 발화 중인 단어 뒤에 음성을 중지합니다.
덧붙여서, 현재 읽고 있는지 여부는 AVSpeechSynthesizer의 isSpeaking 메서드에서 확인할 수 있습니다.
※일본어라면 word 지정시의 정지의 틈이 부자연스러운 인상을 조금 받았습니다.
독서 중지
synthesizer.stopSpeaking(at: .immediate)
stopSpeaking 메서드를 사용하여 읽음을 중지할 수 있습니다.
pause와 마찬가지로 AVSpeechBoundary 상수(immidiate, word)를 지정할 수 있습니다.
독서 속도 지정
utterance.rate = 0.8
AVSpeechUtterance의 rate 속성을 지정하여 읽기 속도를 설정할 수 있습니다.
최대 속도와 최소 속도의 상수도 제공됩니다.
import AVFoundation
AVFoundation을 import하면 준비 완료.
let synthesizer = AVSpeechSynthesizer()
AVSpeechSynthesizer의 인스턴스를 생성합니다.
독서
let utterance = AVSpeechUtterance.init(string: "読み上げる文字列")
let voice = AVSpeechSynthesisVoice.init(language: "ja-JP")
utterance.voice = voice
synthesizer.speak(utterance)
읽을 때 AVSpeechUtterance를 설정합니다.
AVSpeechUtterance.init에 읽고 싶은 문자열을 전달하고 사용할 언어도 지정합니다.
위의 설정을 한 후에는 AVSpeechSynthesizer의 speak 메소드에 AVSpeechUtterance를 전달하면 읽기가 시작됩니다.
포즈
if synthesizer.isSpeaking {
synthesizer.pauseSpeaking(at: .word)
}
읽는 동안 pauseSpeaking 메서드를 사용하여 읽을 수 있습니다.
인수에는 AVSpeechBoundary 상수(immidiate, word)를 지정할 수 있습니다.
immidiate는 발언을 즉시 일시 중지하고, word를 지정하면 현재 발화 중인 단어 뒤에 음성을 중지합니다.
덧붙여서, 현재 읽고 있는지 여부는 AVSpeechSynthesizer의 isSpeaking 메서드에서 확인할 수 있습니다.
※일본어라면 word 지정시의 정지의 틈이 부자연스러운 인상을 조금 받았습니다.
독서 중지
synthesizer.stopSpeaking(at: .immediate)
stopSpeaking 메서드를 사용하여 읽음을 중지할 수 있습니다.
pause와 마찬가지로 AVSpeechBoundary 상수(immidiate, word)를 지정할 수 있습니다.
독서 속도 지정
utterance.rate = 0.8
AVSpeechUtterance의 rate 속성을 지정하여 읽기 속도를 설정할 수 있습니다.
최대 속도와 최소 속도의 상수도 제공됩니다.
독서 피치
utterance.pitchMultiplier = 1.0
속도와 마찬가지로 AVSpeechUtterance의 속성을 설정하여 피치(목소리 높이)도 설정할 수 있습니다.
Delegate
extension ViewController: AVSpeechSynthesizerDelegate {
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer,
didStart utterance: AVSpeechUtterance) {
// 読み上げスタート
}
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer,
didFinish utterance: AVSpeechUtterance) {
// 読み上げ終了
}
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer,
willSpeakRangeOfSpeechString characterRange: NSRange,
utterance: AVSpeechUtterance) {
// 読み上げ中の発話
}
}
AVSpeechSynthesizerDelegate를 구현하여 읽기를 처리할 수 있습니다.
didStart, didFinish 메소드로 읽기 시작과 끝을 감지 할 수 있으며 willSpeakRangeOfSpeechString에서 부분적으로 읽을 수있는 문자열을 얻을 수 있습니다.
이것을 활용하는 것으로, 예를 들어 읽고 있는 캐릭터 라인을 부분적으로 색을 바꾸는 등의 구현을 실시할 수가 있습니다.
var alreadyReadUtteranceString = ""
/ / ~~~~~ 省略
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer,
willSpeakRangeOfSpeechString characterRange: NSRange,
utterance: AVSpeechUtterance) {
let readingUtteranceString = (utterance.speechString as NSString).substring(with: characterRange)
alreadyReadUtteranceString = alreadyReadUtteranceString + readingUtteranceString
changeTextColorPartially()
}
/ / ~~~~~ 省略
func changeTextColorPartially() {
let attrText = NSMutableAttributedString(string: label.text!)
attrText.addAttribute(
.foregroundColor,
value: UIColor.red,
range: NSMakeRange(0, alreadyReadUtteranceString.count)
)
label.attributedText = attrText
}
이상, AVSpeechSynthesizer의 사용법의 메모였습니다.
Reference
이 문제에 관하여(【Swift5】 iOS에서 이용할 수 있는 표준 음성 합성(AVSpeechSynthesizer) 사용법의 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maKunugi/items/dc9da201a663c8773c8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)