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

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

其實(shí)人就是最牛的TTS

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

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

0x000 代碼示例, 朗讀唐詩(shī)靜夜思

class TTSExample:AVSpeechSynthesizerDelegate {
let av=AVSpeechSynthesizer()
init(){
av.delegate=self
}
func 朗讀靜夜思() {
let jingyesi=“靜夜思,李白,床前明月光,疑是地上霜,舉頭望明月,低頭思故鄉(xiāng)” //標(biāo)點(diǎn)符號(hào)會(huì)產(chǎn)生朗讀時(shí)的停頓, 這樣就有節(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)
}
}

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

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

0x01 AVSpeechSynthesizer

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

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

0x02 AVSpeechBoundary

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

  • AVSpeechBoundaryImmediate: 立即停
  • AVSpeechBoundaryWord : 說(shuō)完一個(gè)整詞再停

0x03 AVSpeechSynthesizerDelegate

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

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

0x04 AVSpeechSynthesisVoice

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

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

0x05 AVSpeechUtterance

這個(gè)類就是一段要說(shuō)的話. 主要的屬性和方法有:

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

0x06 UML關(guān)系圖

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


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

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

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

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