談?wù)刬OS自帶文字轉(zhuǎn)語音

前言

? ? 之前自己的項(xiàng)目中曾經(jīng)使用過訊飛的文字轉(zhuǎn)語音技術(shù)甸鸟,但是通過實(shí)際測(cè)試,發(fā)現(xiàn)它的免費(fèi)在線轉(zhuǎn)語音不是很好兵迅,受網(wǎng)絡(luò)的影響聲音經(jīng)常斷斷續(xù)續(xù)的抢韭;而它的離線轉(zhuǎn)語音價(jià)格有太貴,最便宜的要8000RMB/2000裝機(jī)量喷兼,令許多開發(fā)者望而止步篮绰。那么既然支付不了訊飛那昂貴的費(fèi)用,iOS自帶的文字轉(zhuǎn)語音也是我們不錯(cuò)的選擇季惯,只是他的發(fā)音效果不夠理想吠各,不過還可以接受臀突。今天我就帶大家學(xué)習(xí)iOS自帶的文字轉(zhuǎn)語音!

第一步:導(dǎo)入系統(tǒng)框架

使用iOS系統(tǒng)的文字轉(zhuǎn)語音需要用到AVFoundation框架贾漏,這個(gè)不需要詳談了吧:


導(dǎo)入框架

隨后候学,導(dǎo)入

#import<AVFoundation/AVSpeechSynthesis.h>

需要代理的話導(dǎo)入代理

@interfaceViewController()<AVSpeechSynthesizerDelegate>

第二步:創(chuàng)建對(duì)象

在這里對(duì)象最好創(chuàng)建為全局的,便于我們控制纵散;當(dāng)然如果你不需要暫停梳码、繼續(xù)播放等操作的話可以創(chuàng)建一個(gè)局部的。

{

AVSpeechSynthesizer*av;

}

隨后我們創(chuàng)建一個(gè)簡(jiǎn)單的按鈕來操控他:

UIButton*button=[UIButtonbuttonWithType:UIButtonTypeCustom];

button.frame=CGRectMake(100,100,100,50);

[buttonsetTitle:@"講"forState:UIControlStateNormal];

[buttonsetTitle:@"停"forState:UIControlStateSelected];

[buttonsetTitleColor:[UIColorblueColor]forState:UIControlStateNormal];

button.backgroundColor=[UIColorgrayColor];

button.showsTouchWhenHighlighted=YES;

[buttonaddTarget:selfaction:@selector(start:)forControlEvents:UIControlEventTouchUpInside];

[self.viewaddSubview:button];

第三步:具體代碼部分

-(void)start:(UIButton*)sender{

if(sender.selected==NO) {

if([avisPaused]) {

//如果暫停則恢復(fù)伍掀,會(huì)從暫停的地方繼續(xù)

[avcontinueSpeaking];

sender.selected=!sender.selected;

}else{

//初始化對(duì)象

av= [[AVSpeechSynthesizeralloc]init];

av.delegate=self;//掛上代理

AVSpeechUtterance*utterance = [[AVSpeechUtterancealloc]initWithString:@"錦瑟無端五十弦掰茶,一弦一柱思華年。莊生曉夢(mèng)迷蝴蝶蜜笤,望帝春心托杜鵑濒蒋。滄海月明珠有淚,藍(lán)田日暖玉生煙把兔。此情可待成追憶沪伙,只是當(dāng)時(shí)已惘然。"];//需要轉(zhuǎn)換的文字

utterance.rate=0.5;// 設(shè)置語速县好,范圍0-1围橡,注意0最慢,1最快缕贡;AVSpeechUtteranceMinimumSpeechRate最慢翁授,AVSpeechUtteranceMaximumSpeechRate最快

AVSpeechSynthesisVoice*voice = [AVSpeechSynthesisVoicevoiceWithLanguage:@"zh-CN"];//設(shè)置發(fā)音,這是中文普通話

utterance.voice= voice;

[avspeakUtterance:utterance];//開始

sender.selected=!sender.selected;

}

}else{

//[av stopSpeakingAtBoundary:AVSpeechBoundaryWord];//感覺效果一樣善绎,對(duì)應(yīng)代理>>>取消

[avpauseSpeakingAtBoundary:AVSpeechBoundaryWord];//暫停

sender.selected=!sender.selected;

}

//[utterance release];//需要關(guān)閉ARC

//[av release];

}

下面是代理:

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didStartSpeechUtterance:(AVSpeechUtterance*)utterance{

NSLog(@"---開始播放");

}

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance*)utterance{

NSLog(@"---完成播放");

}

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance*)utterance{

NSLog(@"---播放中止");

}

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance*)utterance{

NSLog(@"---恢復(fù)播放");

}

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance*)utterance{

NSLog(@"---播放取消");

}

詳解:

@property(nonatomic,readonly,getter=isSpeaking)BOOL speaking;//是否正在播放

@property(nonatomic,readonly,getter=isPaused)BOOL paused;//是否暫停

- (BOOL)stopSpeakingAtBoundary:(AVSpeechBoundary)boundary;//取消播放黔漂,將會(huì)完全停止

- (BOOL)pauseSpeakingAtBoundary:(AVSpeechBoundary)boundary;//暫停播放诫尽,將會(huì)保存進(jìn)度

- (BOOL)continueSpeaking;//恢復(fù)播放

取消與暫停的兩個(gè)效果我感覺都一樣:

typedefNS_ENUM(NSInteger, AVSpeechBoundary) {

AVSpeechBoundaryImmediate,

AVSpeechBoundaryWord

}NS_ENUM_AVAILABLE_IOS(7_0);

@property(nonatomic)floatrate;// 設(shè)置語速禀酱,范圍0-1,注意0最慢牧嫉,1最快剂跟;AVSpeechUtteranceMinimumSpeechRate最慢,AVSpeechUtteranceMaximumSpeechRate最快

@property(nonatomic)floatpitchMultiplier;// [0.5 - 2] Default = 1酣藻,聲調(diào)曹洽,不怕逗死你就設(shè)成2

@property(nonatomic)floatvolume;// [0-1] Default = 1,音量

代理:

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didStartSpeechUtterance:(AVSpeechUtterance*)utterance;

//開始

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance*)utterance;

//完成

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance*)utterance;

//暫停

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance*)utterance;

//恢復(fù)

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance*)utterance;

//取消

設(shè)置聲音效果的方法辽剧,注意選英語則讀不了漢語送淆,但是漢語可以和英語混用,這個(gè)我已經(jīng)試過了:

+ (nullableAVSpeechSynthesisVoice*)voiceWithLanguage:(nullableNSString*)languageCode;

下面給出詳細(xì)的發(fā)音列表怕轿,中英文的已標(biāo)出偷崩,其他語言請(qǐng)大家自己試吧:

avspeech支持的語言種類包括:

"[AVSpeechSynthesisVoice 0x978a0b0] Language: th-TH",

"[AVSpeechSynthesisVoice 0x977a450] Language: pt-BR",

"[AVSpeechSynthesisVoice 0x977a480] Language: sk-SK",

"[AVSpeechSynthesisVoice 0x978ad50] Language: fr-CA",

"[AVSpeechSynthesisVoice 0x978ada0] Language: ro-RO",

"[AVSpeechSynthesisVoice 0x97823f0] Language: no-NO",

"[AVSpeechSynthesisVoice 0x978e7b0] Language: fi-FI",

"[AVSpeechSynthesisVoice 0x978af50] Language: pl-PL",

"[AVSpeechSynthesisVoice 0x978afa0] Language: de-DE",

"[AVSpeechSynthesisVoice 0x978e390] Language: nl-NL",

"[AVSpeechSynthesisVoice 0x978b030] Language: id-ID",

"[AVSpeechSynthesisVoice 0x978b080] Language: tr-TR",

"[AVSpeechSynthesisVoice 0x978b0d0] Language: it-IT",

"[AVSpeechSynthesisVoice 0x978b120] Language: pt-PT",

"[AVSpeechSynthesisVoice 0x978b170] Language: fr-FR",

"[AVSpeechSynthesisVoice 0x978b1c0] Language: ru-RU",

"[AVSpeechSynthesisVoice 0x978b210] Language: es-MX",

"[AVSpeechSynthesisVoice 0x978b2d0] Language: zh-HK",中文(香港)粵語

"[AVSpeechSynthesisVoice 0x978b320] Language: sv-SE",

"[AVSpeechSynthesisVoice 0x978b010] Language: hu-HU",

"[AVSpeechSynthesisVoice 0x978b440] Language: zh-TW",中文(臺(tái)灣)

"[AVSpeechSynthesisVoice 0x978b490] Language: es-ES",

"[AVSpeechSynthesisVoice 0x978b4e0] Language: zh-CN",中文(普通話)

"[AVSpeechSynthesisVoice 0x978b530] Language: nl-BE",

"[AVSpeechSynthesisVoice 0x978b580] Language: en-GB",英語(英國)

"[AVSpeechSynthesisVoice 0x978b5d0] Language: ar-SA",

"[AVSpeechSynthesisVoice 0x978b620] Language: ko-KR",

"[AVSpeechSynthesisVoice 0x978b670] Language: cs-CZ",

"[AVSpeechSynthesisVoice 0x978b6c0] Language: en-ZA",

"[AVSpeechSynthesisVoice 0x978aed0] Language: en-AU",

"[AVSpeechSynthesisVoice 0x978af20] Language: da-DK",

"[AVSpeechSynthesisVoice 0x978b810] Language: en-US",英語(美國)

"[AVSpeechSynthesisVoice 0x978b860] Language: en-IE",

"[AVSpeechSynthesisVoice 0x978b8b0] Language: hi-IN",

"[AVSpeechSynthesisVoice 0x978b900] Language: el-GR",

"[AVSpeechSynthesisVoice 0x978b950] Language: ja-JP"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辟拷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阐斜,更是在濱河造成了極大的恐慌衫冻,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谒出,死亡現(xiàn)場(chǎng)離奇詭異隅俘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)笤喳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門为居,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杀狡,你說我怎么就攤上這事颜骤。” “怎么了捣卤?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵忍抽,是天一觀的道長。 經(jīng)常有香客問我董朝,道長鸠项,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任子姜,我火速辦了婚禮祟绊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哥捕。我一直安慰自己牧抽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布遥赚。 她就那樣靜靜地躺著扬舒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凫佛。 梳的紋絲不亂的頭發(fā)上讲坎,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音愧薛,去河邊找鬼晨炕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛毫炉,可吹牛的內(nèi)容都是我干的瓮栗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼费奸!你這毒婦竟也來了鲸郊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤货邓,失蹤者是張志新(化名)和其女友劉穎秆撮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體换况,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡职辨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戈二。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舒裤。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖觉吭,靈堂內(nèi)的尸體忽然破棺而出腾供,到底是詐尸還是另有隱情,我是刑警寧澤鲜滩,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布伴鳖,位于F島的核電站,受9級(jí)特大地震影響徙硅,放射性物質(zhì)發(fā)生泄漏榜聂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一嗓蘑、第九天 我趴在偏房一處隱蔽的房頂上張望须肆。 院中可真熱鬧,春花似錦桩皿、人聲如沸豌汇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拒贱。三九已至,卻和暖如春梅尤,著一層夾襖步出監(jiān)牢的瞬間柜思,已是汗流浹背岩调。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工巷燥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人号枕。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓缰揪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钝腺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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