【Swift】読み上げ機能は割と簡単に使えます

本サイトはアフィリエイト広告を利用しています。
例えばこんなことをする場合
  • テキストを認識して読み上げる
  • 英単語の学習アプリの単語を読み上げる

読み上げ機能自体はそんなに新しいものではないですが、AIや機械学習が進化してきており、音声認識なんかと組み合わせて使われる場面が増えていく・・・・かもしれません。

読み上げ機能は割と簡単に使えます

日本語を読み上げるボタンと、英語を読み上げるボタンを用意したアプリで試してみます。

読み上げアプリ

日本語のボタンを押したら日本語の文字列を読み上げ、Englishのボタンを押したら英語の文字列を読み上げるようにします。

また、読み上げ開始、読み上げ終了のタイミングでデバッグ文が表示されるようにしてみます。


import UIKit
import AVFoundation

class ViewController: UIViewController , AVSpeechSynthesizerDelegate {

    let synthesizer = AVSpeechSynthesizer()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.synthesizer.delegate = self
    }
    
    @IBAction func onButtonJapanese(_ sender: Any) {
        
        let utterance = AVSpeechUtterance(string: "日本語です")
        utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
        
        //rate(読み上げの速さ) 0.0〜1.0 の範囲で設定する, defaultは0.5
        //utterance.rate = AVSpeechUtteranceMinimumSpeechRate
        //utterance.rate = AVSpeechUtteranceMaximumSpeechRate
        utterance.rate = AVSpeechUtteranceDefaultSpeechRate
        
        //読み上げの声の高さ  0.5〜2.0 の範囲で設定する, defaultは1.0
        utterance.pitchMultiplier = 1.2

        synthesizer.speak(utterance)
    }
    
    
    @IBAction func onButtonEnglish(_ sender: Any) {
        
        let utterance = AVSpeechUtterance(string: "speaking")
        utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
        
        utterance.rate = AVSpeechUtteranceDefaultSpeechRate
        
        utterance.pitchMultiplier = 1.9

        synthesizer.speak(utterance)
    }
    
    
    func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance) {
       print("読み上げ開始")
    }
    
    func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
       print("読み上げ終了")
    }

}

設定できる内容

読み上げる内容

AVSpeechUtterance(string: “”)

この部分に読み上げる内容を入れます。

文字列を色々入れて試してみてください。

読み上げる言語

utterance.voice = AVSpeechSynthesisVoice(language: “ja-JP”)

この language: “ja-JP” の部分で設定します。

“en-US”とした場合は英語になります。

読み上げの速さ

utterance.rate = AVSpeechUtteranceMinimumSpeechRate

この部分で、読み上げの速さを変えることができます。

  • AVSpeechUtteranceMaximumSpeechRate
  • AVSpeechUtteranceMinimumSpeechRate
  • AVSpeechUtteranceDefaultSpeechRate

この3つが用意されていますが、print(AVSpeechUtteranceDefaultSpeechRate) のように、デバッグで表示してみると、実は数値になっていることが分かります。

ちなみにAVSpeechUtteranceDefaultSpeechRateは0.5になっています。

数値で設定する場合は0.0〜1.0 の範囲にしましょう。

読み上げの声の高さ

utterance.pitchMultiplier = 1.2

この部分の値で設定できます。

0.5〜2.0 の範囲で設定ができます。(defaultは1.0)

数値が低いほど、低めの声になります。

読み上げ開始と読み上げ終了

読み上げ開始時には、

func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance)

が呼び出されます。

同様に読み上げ終了時には、

func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance)

が呼び出されます。

これが使えるようにするためには、

class ViewController: UIViewController , AVSpeechSynthesizerDelegate {

というように AVSpeechSynthesizerDelegate を追加しておくのと、

let synthesizer = AVSpeechSynthesizer()で初期化したものを使って、ViewDidLoad()で

self.synthesizer.delegate = self というのを追加しておく必要があります。

簡単に使えるので、色々試してみましょう 

例えばどんな使い道がありそうか?

  • ナビゲーション
  • トレーニング
  • リスニング

こういった手が塞がっている状態で使うアプリや、何かを聞き取るアプリに使えそうです。

コメント

タイトルとURLをコピーしました