iOS文本轉(zhuǎn)語音技術(shù)

iOS文本轉(zhuǎn)語音技術(shù)

其實人就是最牛的TTS

文本轉(zhuǎn)語音技術(shù), 也叫TTS, 是Text To Speech的縮寫. iOS如果想做有聲書等功能的時候, 會用到這門技術(shù).

  • iOS7之后才有該功能
  • 需要 AVFoundation 庫
  • AVSpeechSynthesizer: 語音合成器, 可以假想成一個可以說話的人, 是最主要的接口
  • AVSpeechSynthesisVoice: 可以假想成人的聲音
  • AVSpeechUtterance: 可以假想成要說的一段話

0x000 代碼示例, 朗讀唐詩靜夜思

class TTSExample:AVSpeechSynthesizerDelegate {
let av=AVSpeechSynthesizer()
init(){
av.delegate=self
}
func 朗讀靜夜思() {
let jingyesi=“靜夜思,李白,床前明月光,疑是地上霜,舉頭望明月,低頭思故鄉(xiāng)” //標(biāo)點符號會產(chǎn)生朗讀時的停頓, 這樣就有節(jié)奏了
let utterance=AVSpeechUtterance(string: jingyesi)
utterance.rate=AVSpeechUtteranceDefaultSpeechRate
let voiceType=AVSpeechSynthesisVoice(language: "zh-CN")
utterance.voice=voiceType
av.speakUtterance(utterance)
}
fun 停止朗讀(){
av.stopSpeakingAtBoundary(.Immediate)
}
func speechSynthesizer(synthesizer: AVSpeechSynthesizer, didFinishSpeechUtterance utterance: AVSpeechUtterance) {
print(“已經(jīng)朗讀完了”)
//如果想循環(huán)播放,可以在這里調(diào)用如下代碼:
// av.speakUtterance(utterance)
}
}

  • 如果想在后臺播放, 需要在配置里設(shè)置:
配置后臺播放
  • 同時在AppDelegate里啟用:

let session=AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayback)
try! session.setActive(true)

0x01 AVSpeechSynthesizer

這個類就像一個會說話的人, 可以”說話”, 可以”暫?!闭f話, 可以”繼續(xù)”說話, 可以判斷他當(dāng)前是否正在說話.有以下的方法或者屬性:

  • 說話: speakUtterance
  • 控制: continueSpeaking(繼續(xù)說), pauseSpeakingAtBoundary(暫停說話), paused(暫停狀態(tài)的屬性), speaking(說話的狀態(tài)), stopSpeakingAtBoundary(停止說話)
  • 委托: delegate

0x02 AVSpeechBoundary

這是一個枚舉. 在暫停, 或者停止說話的時候, 停下的方式用這個枚舉標(biāo)示. 包括兩種:

  • AVSpeechBoundaryImmediate: 立即停
  • AVSpeechBoundaryWord : 說完一個整詞再停

0x03 AVSpeechSynthesizerDelegate

合成器的委托, 對于一些事件, 提供了響應(yīng)的接口.

  • didCancelSpeechUtterance: 已經(jīng)取消說話
  • didContinueSpeechUtterance: 已經(jīng)繼續(xù)說話
  • didFinishSpeechUtterance: 已經(jīng)說完
  • didPauseSpeechUtterance: 已經(jīng)暫停
  • didStartSpeechUtterance:已經(jīng)開始
  • willSpeakRangeOfSpeechString:將要說某段話

0x04 AVSpeechSynthesisVoice

AVSpeechSynthesisVoice定義了一系列的聲音, 主要是不同的語言和地區(qū).

  • voiceWithLanguage: 根據(jù)制定的語言, 獲得一個聲音.
  • speechVoices: 獲得當(dāng)前設(shè)備支持的聲音
  • currentLanguageCode: 獲得當(dāng)前聲音的語言字符串, 比如”ZH-cn”
  • language: 獲得當(dāng)前的語言

0x05 AVSpeechUtterance

這個類就是一段要說的話. 主要的屬性和方法有:

  • pitchMultiplier: 音高
  • postUtteranceDelay: 讀完一段后的停頓時間
  • preUtteranceDelay: 讀一段話之前的停頓
  • rate: 讀地速度, 系統(tǒng)提供了三個速度: AVSpeechUtteranceMinimumSpeechRate, AVSpeechUtteranceMaximumSpeechRate, AVSpeechUtteranceDefaultSpeechRate
  • speechString: 要讀的字符串
  • voice: 使用的聲音, 是AVSpeechSynthesisVoice對象
  • volume: 音量

0x06 UML關(guān)系圖

這些類的關(guān)系如下:


TTS類關(guān)系圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近項目剛剛交付,偶然間用到了語音播報和語音搜索的功能。語音搜索我用的是訊飛的demo,感覺效果還不錯,感興趣的話...
    奔跑的小螞蟻_8b28閱讀 8,656評論 13 6
  • 由于公司的需求要求搞一個類似于支付寶那樣的后臺推送的語音播報,研究了下文字轉(zhuǎn)語音,以及在iOS允許的一定時間范...
    三三哥閱讀 1,178評論 0 2
  • 前言 之前自己的項目中曾經(jīng)使用過訊飛的文字轉(zhuǎn)語音技術(shù),但是通過實際測試,發(fā)現(xiàn)它的免費在線轉(zhuǎn)語音不是很好,受網(wǎng)絡(luò)...
    孤獨雪域閱讀 20,927評論 25 55
  • 使用lsof命令查詢占用端口的進(jìn)程PID: lsof -i:8888 若要關(guān)閉使用這個端口的程序,使用kill +...
    徐子鑑閱讀 555評論 0 0
  • 網(wǎng)絡(luò)時代確實帶給人太多太多思考,上次我對于“夜間模式”的思考是臨時起意的短評。幾乎相同的時間,這會兒我又對于“...
    GoodLuckHao閱讀 239評論 2 0

友情鏈接更多精彩內(nèi)容