#7 如何讓iOS App說話?That is “AVSpeechSynthesizer”

利用 SDK- AVSpeechSynthesizer 讓App會說話

筆記:幾個程式基本觀念

利用iOS SDK AVFoundation套件寫出讓iOS App說話的程式

概念:1. 在playground輸入要使用的SDK:AVFoundation ☞ import AVFoundation
2. 生出要講的話 ☞ AVSpeechUtterance()
3. 生出合成器 ☞ AVSpeechSynthesizer()
4. 呼叫function(此處為speak),讓合成器說出要講的話 ☞ 要講的話.speak()
其中,2、3可對調。
讓iOS App說話的程式(宣告常數之基本版)
讓iOS App說話的程式(不使用常數之基本版1)
讓iOS App說話的程式(不使用常數之基本版2)
宣告常數/變數的好處:1. 容易看得懂。
2. 利於之後修改或繼續使用。

加入其他說話功能的進階版:屬性

設定說話音調、語速、音量
設定語言
設定語言的程式,語言型別為「字串 String」
不同語言代碼的使用
  • 語言代碼

大合輯

完整程式: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指參數的型別可以是任何一種。
  • ( )內可以放的參數不限數量,只要用逗號隔開。
執行print的結果

類型2:

  • 東西的名稱+. +function名稱+(參數)
()的意義 ➋ - 生東西:型別+( )
  • 生出該型別的資料。
  • 型別名稱+ (可寫入參數)。
  • 型別名稱首字是大寫
  • 相同型別才可以互相運算;參數改成同樣的型別後,就可運算。
相同型別才可互相運算
  • 可傳入多個參數,( )內會自動提示應該輸入的參數、型別等。
多個參數
呼叫function v.s 存取屬性
  • 呼叫function ☞ 有(),此時的「.」是「執行」的意思
    ex: synthesizer . speak(speechUtterance)
    讓合成器用speak的方法執行要講的話
  • 存取屬性 ☞ 無(),此時的「.」是「的」的意思
    ex: speechUtterance . voice
    用屬性voice,設定要講的話的語言
生東西的語法有2種:
  1. 型別名稱+()
    ex:let image = UIImage()
    產生型別為UIImage的圖片
  2. 型別名稱+ . + 屬性名
    ex: let yellowColor = UIColor.yellow
    生出黃色
SDK (Software Development Kit) 第三方套件
  • 提供開發程式會用到的功能,如:發出聲音、地圖。
API (Application Programming Interface)
  • 別人寫好的程式,讓開發者能更快開發軟體,實現功能。

相關參考資料:

--

--