#10 利用AVSpeechSynthesizer講出開不了口的告白
Published in
5 min readAug 25, 2021
情人節沒人陪你一起度過?也沒有任何人跟你告白嗎?
沒關係,可以使用「開不了口的告白」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:
參考文章: