#7 如何讓iOS App說話?That is “AVSpeechSynthesizer”
Published in
7 min readAug 1, 2020
利用 SDK- AVSpeechSynthesizer 讓App會說話
筆記:幾個程式基本觀念
利用iOS SDK AVFoundation套件寫出讓iOS App說話的程式
概念:1. 在playground輸入要使用的SDK:AVFoundation ☞ import AVFoundation
2. 生出要講的話 ☞ AVSpeechUtterance()
3. 生出合成器 ☞ AVSpeechSynthesizer()
4. 呼叫function(此處為speak),讓合成器說出要講的話 ☞ 要講的話.speak()其中,2、3可對調。
宣告常數/變數的好處:1. 容易看得懂。
2. 利於之後修改或繼續使用。
加入其他說話功能的進階版:屬性
設定說話音調、語速、音量
設定語言
- 語言代碼
大合輯
完整程式:import AVFoundationlet speechUtterance1 = AVSpeechUtterance(string: "fly me to the moon and let me play among the stars")let synthesizer1 = AVSpeechSynthesizer()//設定音調pitchMultiplier 0.5~2speechUtterance1.pitchMultiplier = 1.6//語速rate 0~1speechUtterance1.rate = 0.7//音量volume 0~1speechUtterance1.volume = 0.4synthesizer1.speak(speechUtterance1)//進階版(設定語言)//中文let speechUtteranceTw = AVSpeechUtterance(string: "帶我飛向月球,讓我在星空中嬉戲")let synthesizerTw = AVSpeechSynthesizer()//設定語言voice為中文代碼speechUtteranceTw.voice = AVSpeechSynthesisVoice(language: "zh-TW")synthesizerTw.speak(speechUtteranceTw)//日文let speechUtteranceJp = AVSpeechUtterance(string: "私を月まで飛ばして星の間で遊ばせて")let synthesizerJp = AVSpeechSynthesizer()//設定語言voice為日文代碼speechUtteranceJp.voice = AVSpeechSynthesisVoice(language: "ja-JP")synthesizerJp.speak(speechUtteranceJp)
筆記整理幾個程式基本觀念:
宣告 常數constant(let)/ 變數variable(var),以及 "=" (等於)的意義
寫程式中,常會利用let產生常數,或var產生變數來存「東西」,而「=」就是存取的概念,把等號右邊的資料存到等號左邊的常數/變數名稱。
- let 或var +要存的東西的名稱+=+儲存的資料
- 同一名稱不能重複宣告。
- 名稱第1個字是小寫,之後的字大寫。
- 大小寫不同的字,即代表不同名稱。
型別(type) v.s 東西(instance)
程式裡的資料就是「東西」,而每一個「資料/東西」都有自己的型別。
- 常見的型別有:字串String(用" "表示)、整數(Int)、浮點數(Float/Double)…
- 型別字首都是大寫,cf: 常數/變數名稱第1個字是小寫。
- 用「:」直接宣告常數/變數的型別。
- swift會自動推理常數/變數儲存資料的型別。
- 常數/變數的型別決定可以儲存什麼樣的資料。
- 不同型別不能互相作運算。
()的意義 ➊ - 命令電腦做事/讓程式執行指令:呼叫fuction
類型1:
- 指令名稱 + (參數)。
- 指令名稱首字為
小寫
。 - print的參數可以是任何資料,swift會顯示( )內可以放什麼樣的參數、型別資料;如:items為參數名稱,Any指參數的型別可以是任何一種。
- ( )內可以放的參數不限數量,只要用逗號隔開。
類型2:
- 東西的名稱+. +function名稱+(參數)
()的意義 ➋ - 生東西:型別+( )
- 生出該型別的資料。
- 型別名稱+ (可寫入參數)。
- 型別名稱首字是
大寫
。 - 相同型別才可以互相運算;參數改成同樣的型別後,就可運算。
- 可傳入多個參數,( )內會自動提示應該輸入的參數、型別等。
呼叫function v.s 存取屬性
- 呼叫function ☞
有(),此時的「.」是「執行」的意思
ex: synthesizer . speak(speechUtterance)
讓合成器用speak的方法執行要講的話 - 存取屬性 ☞
無(),此時的「.」是「的」的意思
ex: speechUtterance . voice
用屬性voice,設定要講的話的語言
生東西的語法有2種:
- 型別名稱+()
ex:let image = UIImage()
產生型別為UIImage的圖片 - 型別名稱+ . + 屬性名
ex: let yellowColor = UIColor.yellow
生出黃色
SDK (Software Development Kit) 第三方套件
- 提供開發程式會用到的功能,如:發出聲音、地圖。
API (Application Programming Interface)
- 別人寫好的程式,讓開發者能更快開發軟體,實現功能。