ios文字轉(zhuǎn)語音后臺(轉(zhuǎn),待驗證)

最近項目剛剛交付级及,偶然間用到了語音播報和語音搜索的功能。語音搜索我用的是訊飛的demo,感覺效果還不錯额衙,感興趣的話可以去官網(wǎng)上面下載demo,里面講的特別的詳細(xì)饮焦,不過稍顯麻煩一些怕吴。語音播報訊飛也有demo,不過做開發(fā)當(dāng)然要尋求最簡潔的處理方式,ios7.0之后新添加了一些新的功能县踢,里面就有系統(tǒng)自帶的語音播報庫AVFoundation转绷。關(guān)于語音播報的文章其實挺多的。文本轉(zhuǎn)語音技術(shù),也叫TTS, 是Text To Speech的縮寫. iOS如果想做有聲書等功能的時候, 會用到這門技術(shù).

一硼啤,使用iOS自帶TTS需要注意的幾點:

iOS7之后才有該功能

需要 AVFoundation 庫

AVSpeechSynthesizer: 語音合成器, 可以假想成一個可以說話的人, 是最主要的接口

AVSpeechSynthesisVoice: 可以假想成人的聲音

AVSpeechUtterance: 可以假想成要說的一段話

二议经,代碼示例, 播放語音

//語音播報 AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@"床前明月光,疑是地上霜谴返。"];? utterance.pitchMultiplier=0.8;? //中式發(fā)音 AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"]; //英式發(fā)音 // AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-GB"];? utterance.voice = voice;? NSLog(@"%@",[AVSpeechSynthesisVoice speechVoices]);? AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc]init];? [synth speakUtterance:utterance];

三爸业,AVSpeechSynthesizer介紹

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

說話: speakUtterance

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

委托: delegate

四亏镰,AVSpeechBoundary介紹

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

AVSpeechBoundaryImmediate: 立即停

AVSpeechBoundaryWord : 說完一個整詞再停

五扯旷,AVSpeechSynthesizerDelegate介紹

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

didCancelSpeechUtterance: 已經(jīng)取消說話

didContinueSpeechUtterance: 已經(jīng)繼續(xù)說話

didFinishSpeechUtterance: 已經(jīng)說完

didPauseSpeechUtterance: 已經(jīng)暫停

didStartSpeechUtterance:已經(jīng)開始

willSpeakRangeOfSpeechString:將要說某段話

六,AVSpeechSynthesisVoice介紹

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

voiceWithLanguage: 根據(jù)制定的語言, 獲得一個聲音.

speechVoices: 獲得當(dāng)前設(shè)備支持的聲音

currentLanguageCode: 獲得當(dāng)前聲音的語言字符串, 比如”ZH-cn”

language: 獲得當(dāng)前的語言

七索抓,AVSpeechUtterance介紹

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

pitchMultiplier: 音高

postUtteranceDelay: 讀完一段后的停頓時間

preUtteranceDelay: 讀一段話之前的停頓

rate: 讀地速度, 系統(tǒng)提供了三個速度: AVSpeechUtteranceMinimumSpeechRate, AVSpeechUtteranceMaximumSpeechRate, AVSpeechUtteranceDefaultSpeechRate

speechString: 要讀的字符串

voice: 使用的聲音, 是AVSpeechSynthesisVoice對象

上面這些是關(guān)于語音播報的基本用法和一些屬性钧忽、方法,但是如何結(jié)合程序推送逼肯,在程序后臺運行的時候?qū)崿F(xiàn)語音播報的效果呢耸黑?當(dāng)然還有很多需要注意的地方。

1.啟用推送喚醒

和上面的后臺獲取類似篮幢,更改Info.plist大刊,在UIBackgroundModes下加入remote-notification即可開啟,當(dāng)然同樣的更簡單直接的辦法是使用Capabilities三椿,勾選下面的三個modes缺菌。

2.更改推送的payload

在iOS7中,如果想要使用推送來喚醒應(yīng)用運行代碼的話搜锰,需要在payload中加入content-available伴郁,并設(shè)置為1。

{"aps":{"content-available":1,"alert":"今天是個好天氣"}}? "content-available":1推送喚醒? "alert":""推送內(nèi)容? "badge":1 app右上角數(shù)字?  “sound”:”default” 默認(rèn)聲音?    aps?   {?   content-available: 1?   alert: {...}?   }

3.實現(xiàn)推送喚醒代碼并通知系統(tǒng)

最后在appDelegate中實現(xiàn)-application:didReceiveRemoteNotification:fetchCompletionHandle:蛋叼。這部分內(nèi)容和上面的后臺獲取部分完全一樣焊傅,在此不再重復(fù)。

//接收到推送消息? - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {? NSLog(@"remote: %@", userInfo);? //回調(diào)? completionHandler(UIBackgroundFetchResultNewData);? //語音播報? AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:userInfo[@"aps"][@"alert"]];? AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];? [synth speakUtterance:utterance];? }

完成以上步驟就可在后臺進行語音播報了狈涮。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狐胎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歌馍,更是在濱河造成了極大的恐慌握巢,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骆姐,死亡現(xiàn)場離奇詭異镜粤,居然都是意外死亡捏题,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門肉渴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來公荧,“玉大人,你說我怎么就攤上這事同规⊙” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵券勺,是天一觀的道長绪钥。 經(jīng)常有香客問我,道長关炼,這世上最難降的妖魔是什么程腹? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮儒拂,結(jié)果婚禮上寸潦,老公的妹妹穿的比我還像新娘。我一直安慰自己社痛,他們只是感情好见转,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒜哀,像睡著了一般斩箫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撵儿,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天乘客,我揣著相機與錄音,去河邊找鬼统倒。 笑死寨典,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的房匆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼报亩,長吁一口氣:“原來是場噩夢啊……” “哼浴鸿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弦追,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤岳链,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后劲件,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掸哑,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡约急,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了苗分。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厌蔽。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖摔癣,靈堂內(nèi)的尸體忽然破棺而出奴饮,到底是詐尸還是另有隱情,我是刑警寧澤择浊,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布戴卜,位于F島的核電站,受9級特大地震影響琢岩,放射性物質(zhì)發(fā)生泄漏投剥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一担孔、第九天 我趴在偏房一處隱蔽的房頂上張望薇缅。 院中可真熱鬧,春花似錦攒磨、人聲如沸泳桦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灸撰。三九已至,卻和暖如春拼坎,著一層夾襖步出監(jiān)牢的瞬間浮毯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工泰鸡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留债蓝,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓盛龄,卻偏偏與公主長得像饰迹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子余舶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容