LoginSignup
9
6

More than 3 years have passed since last update.

【swift 5】 AVSpeechSynthesizer で英語→日本語→英語→日本語と交互に話すアプリ

Last updated at Posted at 2019-09-22

AVSpeechSynthesizer で英語→日本語→英語→日本語と交互に話すアプリを作ってみました。AVSpeechSynthesizer は一個の String を喋ると終了してしまいます。複数の String や複数の言語を喋らせるには工夫が必要です。
Speech.gif
以下のコードをコピペして IBAction func speechButtonPushed() を画面のスピーチボタンに紐付けます。

import UIKit
import AVFoundation

class ViewController: UIViewController, AVSpeechSynthesizerDelegate {

    let synthesizer = AVSpeechSynthesizer()
    var speechCounter = 0
    var speechText = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
        synthesizer.delegate = self
        let english = "alternately"
        let japanese = "交互に"
        let sentence = "This app speaks English and Japanese alternately."
        let yaku = "このアプリは英語と日本語を交互に話します。"
        speechText = [english,japanese,sentence,yaku]
    }

    @IBAction func speechButtonPushed(){
        speechCounter = 0
        speech(text: speechText[0])
    }

    func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
        speechCounter += 1
        guard speechCounter < speechText.count else {return}
        speech(text: speechText[speechCounter])
    }

    func speech(text: String) {
        let utterance = AVSpeechUtterance(string: text)
        switch speechCounter {
        case 0, 2:
            utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
        case 1, 3:
            utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
        default:
            break
        }
        synthesizer.speak(utterance)
    }
}
9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6