[iOS] 使用 AVSpeechSynthesizer 實現文字轉語音 (TTS) 功能

iOS 7 開始提供 TTS(Text to Speech) API,可以實現文字轉語音的功能。

範例程式畫面如下,由 Text Field 和 Button 組成的簡單畫面。
首先要在專案中加入 AVFoundation.framework 這個函式庫
然後開始撰寫程式,要先匯入 AVFoundation 函式庫
import AVFoundation
Button 的程式碼如下:
let synth = AVSpeechSynthesizer()
    var myUtterance = AVSpeechUtterance(string: "")
 
    @IBAction func textToSpeechButton(_ sender: UIButton) {

        myUtterance = AVSpeechUtterance(string: txtFieldText.text!)
        myUtterance.rate = 0.4
        myUtterance.pitchMultiplier = 1.2
        myUtterance.postUtteranceDelay = 0.1
        myUtterance.volume = 1
        myUtterance.voice = AVSpeechSynthesisVoice(language: "zh-TW")
        synth.speak(myUtterance)
        
    }
utterance 可用的屬性如下,上面的數值已經是經過調整後,聽起來較正常的聲音:
  • rate:發音速度,數值越大讀的越快
  • pitchMultiplier:音高
  • postUtteranceDelay:讀完一段話後的停頓時間
  • preUtteranceDelay:讀一段話之前的停頓時間
  • volume:音量
  • voice:使用的聲音(可以指定不同語系的語言)
完成以上的程式,模擬器已經可以正常運作,可是實體機仍沒有聲音,要讓實體機有聲音,請在 viewDidLoad 加入以下程式碼
do{
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)         
            do{
                try AVAudioSession.sharedInstance().setActive(true)
            }catch{
                
            }
        }catch{
            
        }

完整程式碼如下

分類:

Copyright © Andy Cheng

Distributed By My Blogger Themes | Blogger Theme By NewBloggerThemes Up ↑