4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Life is Tech!MembersAdvent Calendar 2020

Day 12

AVSpeechSynthesizerを使って、textFieldの文字を読み上げる

Last updated at Posted at 2020-12-11

#はじめに
この記事はLife is Tech!Members Advent Calendar 2020 の12日目の記事です。
初めて記事を書くので至らない点もあると思いますが、よろしくお願いします。

#環境
xcode12.3
swift 5.0以降
#AVSpeechSynthesizerとは
まず、今回の記事で使用するAVSpeechSynthesizerについて説明します。
こちらのページによると、

テキストの発話から合成音声を生成し、進行中の音声の監視または制御を可能にするオブジェクト。

とあります。簡単にいうと、テキストを読み上げてくれるよーということですね。
#コード

SpeechService.swift

import UIKit
import AVFoundation //①

class SpeechService {
    private let synthesizer = AVSpeechSynthesizer()
    var rate: Float = AVSpeechUtteranceDefaultSpeechRate
    var voice = AVSpeechSynthesisVoice(language: "ja_JP") //②
    
    func say(_ phrase: String) {
        let utterance = AVSpeechUtterance(string: phrase) //③
        utterance.rate = rate
        utterance.voice = voice
        utterance.pitchMultiplier = 1.0 //④

        synthesizer.speak(utterance) //⑤
    }
    
    //⑥
    func stop() {
        synthesizer.stopSpeaking(at: AVSpeechBoundary.immediate)
    }
}

ViewController.swift

import UIKit
import AVFoundation //⑦

class ViewController: UIViewController{

    let speechService = SpeechService()

    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func tappedSpeakButton(_ sender: Any) {
        speechService.say(textField.text!) //⑧
    }

    @IBAction func tappedStopButton(_ sender: Any) {
        speechService.stop() //⑨
    }

}


#コード解説
①AVFoundationをインポートしてあげてください。これによって、AVSpeechSynthesizerを使うことができます。
②言語を設定します。今回は日本語の文章を読むことを前提としているので、languageはja_JPです。英語の場合は、en_JPかen_USを入力してください。
③読み上げる文字を設定します。
④声の高さを調節します。0に近づく程、音が低くなります。
 私の場合、1.0だと少し高いと思ったので、0.8などに設定して使っています。
⑤実際に話すところです。
⑥話すのを止めます。
⑦①と同じで、AVFoundationをインポートします。
⑧ボタンをタップすると、textFieldの内容を話します。
⑨ボタンをタップすると、読み上げを停止します。
スクリーンショット 2020-12-11 19.03.59.png

storyboardで、textField、tappedSpeakButton、tappedStopButtonを関連付けして完成です。

#最後に
最後まで読んでいただき、ありがとうございました!
間違いだったり、わかりにくい点などありましたら、コメント欄にてご指摘ください。

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?