[TOC]
合成支持在線和離線兩種工作方式,默認(rèn)使用在線方式。如果使用離線服務(wù),有2種方式,一種是使用語(yǔ)記SDK(原語(yǔ)音+ SDK)提供的免費(fèi)服務(wù),一種是付費(fèi)購(gòu)買(mǎi)后在應(yīng)用內(nèi)部集成。相關(guān)細(xì)節(jié)請(qǐng)關(guān)注訊飛開(kāi)放平臺(tái)(http://www.xfyun.cn/)。
## 在線合成
本示例對(duì)應(yīng)Demo的TTSUIController文件,為在線合成的代碼示例。
~~~
//包含頭文件
#import "iflyMSC/IFlyMSC.h"
//需要實(shí)現(xiàn)IFlySpeechSynthesizerDelegate合成會(huì)話的服務(wù)代理
@interface TTSUIController : UIViewController<IFlySpeechSynthesizerDelegate>
@property (nonatomic, strong) IFlySpeechSynthesizer *iFlySpeechSynthesizer;
@end
//獲取語(yǔ)音合成單例
_iFlySpeechSynthesizer = [IFlySpeechSynthesizer sharedInstance];
//設(shè)置協(xié)議委托對(duì)象
_iFlySpeechSynthesizer.delegate = self;
//設(shè)置合成參數(shù)
//設(shè)置在線工作方式
[_iFlySpeechSynthesizer setParameter:[IFlySpeechConstant TYPE_CLOUD]
forKey:[IFlySpeechConstant ENGINE_TYPE]];
//設(shè)置音量,取值范圍 0~100
[_iFlySpeechSynthesizer setParameter:@"50"
forKey: [IFlySpeechConstant VOLUME]];
//發(fā)音人,默認(rèn)為”xiaoyan”,可以設(shè)置的參數(shù)列表可參考“合成發(fā)音人列表”
[_iFlySpeechSynthesizer setParameter:@" xiaoyan "
forKey: [IFlySpeechConstant VOICE_NAME]];
//保存合成文件名,如不再需要,設(shè)置為nil或者為空表示取消,默認(rèn)目錄位于library/cache下
[_iFlySpeechSynthesizer setParameter:@" tts.pcm"
forKey: [IFlySpeechConstant TTS_AUDIO_PATH]];
//啟動(dòng)合成會(huì)話
[_iFlySpeechSynthesizer startSpeaking: @"你好,我是科大訊飛的小燕"];
//IFlySpeechSynthesizerDelegate協(xié)議實(shí)現(xiàn)
//合成結(jié)束
- (void) onCompleted:(IFlySpeechError *) error {}
//合成開(kāi)始
- (void) onSpeakBegin {}
//合成緩沖進(jìn)度
- (void) onBufferProgress:(int) progress message:(NSString *)msg {}
//合成播放進(jìn)度
- (void) onSpeakProgress:(int) progress beginPos:(int)beginPos endPos:(int)endPos {}
~~~
## 離線合成
離線合成指的是語(yǔ)音引擎和資源放置在應(yīng)用內(nèi)部,不需要連接到語(yǔ)音云時(shí)也可以使用的語(yǔ)音合成服務(wù)。因此使用時(shí),需要在應(yīng)用中添加離線引擎和發(fā)音人資源。離線引擎在提供離線服務(wù)的SDK中已內(nèi)置。在使用時(shí)只需要根據(jù)選擇的發(fā)音人來(lái)設(shè)置對(duì)應(yīng)的離線發(fā)音人資源即可。
以Demo為例:

ttsres是離線合成的引擎資源集合,common.jet是基礎(chǔ)資源,其他文件是發(fā)音人各自對(duì)應(yīng)的資源。在實(shí)際使用時(shí),common.jet和發(fā)音人資源需要同時(shí)設(shè)置。發(fā)音人可以根據(jù)需要自行選擇。
**引擎大小**:
|狀態(tài) |大小 |
| :---: | :---: |
|編譯前靜態(tài)庫(kù) | 18.2MB |
| 編譯后(ipa) | 4.3MB |
**資源大小**:
| 類(lèi)型 |大小 |
| :---: | :---: |
| 基礎(chǔ)資源 |4.3 MB |
|小燕 |4.1 MB |
| 小峰 |1.3 MB |
|小梅 |1.7 MB |
|凱瑟琳 | 3.0 MB |
**空間大小**:(不同的編譯器編譯后大小會(huì)有不同,請(qǐng)以實(shí)際為準(zhǔn))
ipa文件大小 = 引擎編譯后(4.3MB) + 基礎(chǔ)資源(4.3MB) + 所選擇的發(fā)音人資源(如:小燕4.1MB)。
下面代碼是集成本地資源時(shí)需要添加的部分,其他代碼與在線一致。
~~~
//設(shè)置語(yǔ)音合成的啟動(dòng)參數(shù)
[[IFlySpeechUtility getUtility] setParameter:@"tts" forKey:[IFlyResourceUtil ENGINE_START]];
//獲得語(yǔ)音合成的單例
_iFlySpeechSynthesizer = [IFlySpeechSynthesizer sharedInstance];
//設(shè)置協(xié)議委托對(duì)象
_iFlySpeechSynthesizer.delegate = self;
//設(shè)置本地引擎類(lèi)型
[_iFlySpeechSynthesizer setParameter:[IFlySpeechConstant TYPE_LOCAL] forKey:[IFlySpeechConstant ENGINE_TYPE]];
//設(shè)置發(fā)音人為小燕
[_iFlySpeechSynthesizer setParameter:@"xiaoyan" forKey:[IFlySpeechConstant VOICE_NAME]];
//獲取離線語(yǔ)音合成發(fā)音人資源文件路徑。以發(fā)音人小燕為例,請(qǐng)確保資源文件的存在。
NSString *resPath = [[NSBundle mainBundle] resourcePath];
NSString *vcnResPath = [[NSString alloc] initWithFormat:@"%@/ttsres/common.jet;%@/tts64res/xiaoyan.jet",resPath,resPath];
//設(shè)置離線語(yǔ)音合成發(fā)音人資源文件路徑
[_iFlySpeechSynthesizer setParameter:vcnResPath forKey:@"tts_res_path"];
~~~
