#10 利用AVSpeechSynthesizer講出開不了口的告白

情人節沒人陪你一起度過?也沒有任何人跟你告白嗎?

沒關係,可以使用「開不了口的告白」App,體驗一次被三個不同國籍的女朋友告白的美好感覺!

這次的練習是使用AVFoundation,在輸入框中打出文字,並自由選擇中、英、日三種不同語言,按下按鈕,App就會自動唸出輸入的文字。

本來預計在七夕時做好,但畫圖+第一次做outlet&action實在是卡關太久了,所以拖到現在。不過沒關係,有你在的日子天天都是情人節!

PS:本來是想做男朋友的,可惜蘋果只有女聲..

步驟1 — 拉出outlet&action

排好畫面後,將輸入框及Slide拉線到上方outlet的位置,而需要被觸發的Button拉到下方action。

import UIKitimport AVFoundation
class ViewController: UIViewController {//輸入文字@IBOutlet weak var TextField: UITextField!//聲音@IBOutlet weak var volumeSlider: UISlider!@IBOutlet weak var rateSlider: UISlider!
override func viewDidLoad() {
super.viewDidLoad()}
//女朋友@IBAction func AmericanGirlfriend(_ sender: Any) {}@IBAction func JapanGirlfriend(_ sender: Any) {}@IBAction func TaiwanGrilfriend(_ sender: Any){ }}

參考資料:

步驟2— AVFoundation

使用AVFoundation的功能做出合成器,因為三個Button除了語言外的動作是一樣的,所以寫成funtion,並在每個Button中加上不同的參數。

//女朋友func girlfriend(language: String){let speechUtterance =  AVSpeechUtterance(string: TextField.text!)speechUtterance.voice = AVSpeechSynthesisVoice(language: language)let synthesizer = AVSpeechSynthesizer()speechUtterance.rate = rateSlider.valuespeechUtterance.volume = volumeSlider.valuesynthesizer.speak(speechUtterance)}@IBAction func AmericanGirlfriend(_ sender: Any) {girlfriend(language:"en-US" )}@IBAction func JapanGirlfriend(_ sender: Any) {girlfriend(language:"ja-JP" )}@IBAction func TaiwanGrilfriend(_ sender: Any){ girlfriend(language:"zh-TW" )}

步驟3—消除Bug

明明把程式寫好,模擬器卻不能跑,原來是發生了新手常見的bug!因為重新調整很多次的關係,所以有些outlet或action找不到對應的元件,造成App閃退,顯錯誤訊息如下:

解決方式:

完成品

完成了!因為這次的作業用到許多才剛學的程式邏輯去做結合,短短幾行code就卡關了超級久,但做好之後成就感十足,以後就算沒人陪也不會孤單寂寞覺得冷拉~(´∀`)♡

程式碼:

GitHub:

參考文章:

--

--