読者です 読者をやめる 読者になる 読者になる

Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 859 - AVSpeechSynthesizer

AVSpeechSynthesizer

オリジナルアプリ... どうしようか考えています。

色々アイディアはあるけど、複雑なアプリばかり考えてしまって形にできません。

そこでとてもシンプルなアプリを作ることにしました。

そのために資料集めをします。今日はAVSpeechSynthesizerです。本当に簡単に喋らせることができました。こういうテストコードも簡単に理解できるようになった自分に驚きです。

f:id:yataiblue:20161201231316j:plain

Viewに設置するオブジェクトは「UITextView」と「UIButton」です。そしてUIViewControllerに次のコードを書くんです。

import UIKit
import AVFoundation

class ViewController: UIViewController, 
                UITextFieldDelegate,  
                  AVSpeechSynthesizerDelegate {

    @IBOutlet weak var speechText: UITextField!
    
    var talker = AVSpeechSynthesizer()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.speechText.delegate = self
        self.talker.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
        // Dispose of any resources that can be recreated.
        
    }
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        
        speechText.resignFirstResponder()
        
        return true
    }

    @IBAction func speech(_ sender: UIButton) {
        
        // 話す内容をセット
        let utterance = 
               AVSpeechUtterance(string: self.speechText.text!)
        
        // 言語を日本に設定
        utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP")
        
        // 話す速度(0.0 - 1.0)
        utterance.rate = AVSpeechUtteranceMinimumSpeechRate
        
        // 声の高さ(0.5 - 2.0)
        utterance.pitchMultiplier = 1.0
        
        // 実行
        self.talker.speak(utterance)
        
    }
    
    // 以下のメソッドがデリゲートメソッドです。
    func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, 
                      didStart utterance: AVSpeechUtterance) {
        print("開始")
    }
    
    func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, 
                     didFinish utterance: AVSpeechUtterance) {
        print("終了")
    }

}