iOS篇 使用科大訊飛SDK整合語音合成和識別

2021-10-10 21:23:48 字數 4064 閱讀 7569

訊飛開發步驟

1.申請賬號

5.語音識別

[iflyspeechutility createutility:initstring];

3 建立有介面提示的語音識別物件建立乙個訊飛語音識別物件,可以對他進行一系列的呼叫

@property (nonatomic, strong) iflyrecognizerview *iflyrecognizerview;//帶介面的識別物件
4 初始化帶介面的識別物件前面宣告了乙個帶介面的語音識別物件,現在需要對這個識別物件進行初始化,同樣是在viewdidload()方法中進行就行.

#pragma mark ------ 進行有介面的語音識別的初始化

_iflyrecognizerview = [[iflyrecognizerview alloc] initwithcenter:self.view.center];

_iflyrecognizerview.delegate = self;

[_iflyrecognizerview setparameter: @「iat」 forkey: [iflyspeechconstant ifly_domain]];

//asr_audio_path儲存錄音檔名,如不再需要,設定value為nil表示取消,預設目錄是documents

[_iflyrecognizerview setparameter:@"asrview.pcm " forkey:[iflyspeechconstant asr_audio_path]];
[_iflyrecognizerview start];

[iflyspeechutility createutility:initstring];

3 建立無介面提示的語音識別物件建立乙個訊飛語音識別物件,可以對他進行一系列的呼叫

@property (nonatomic, strong) iflyspeechrecognizer *iflyspeechrecognizer;//不帶介面的識別物件
4 物件初始化前面宣告了一些在語音合成的時候會用到的物件,現在需要對前面的物件進行初始化.還是在viewdidload()裡面進行就可以了.這裡的初始化內容比較多,是進行一些語音的設定,所以單獨做成了乙個方法,在viewdidload()中進行呼叫即可.

-(void)initrecognizer

_iflyspeechrecognizer.delegate = self;

if (_iflyspeechrecognizer != nil) else if ([instance.language isequaltostring:[iatconfig english]])

//設定是否返回標點符號

[_iflyspeechrecognizer setparameter:instance.dot forkey:[iflyspeechconstant asr_ptt]];

}}

if(_iflyspeechrecognizer == nil)

[_iflyspeechrecognizer cancel];

//設定音訊**為麥克風

[_iflyspeechrecognizer setparameter:ifly_audio_source_mic forkey:@"audio_source"];

//設定聽寫結果格式為json

[_iflyspeechrecognizer setparameter:@"json" forkey:[iflyspeechconstant result_type]];

//儲存錄音檔案,儲存在sdk工作路徑中,如未設定工作路徑,則預設儲存在library/cache下

[_iflyspeechrecognizer setparameter:@"asr.pcm" forkey:[iflyspeechconstant asr_audio_path]];

[_iflyspeechrecognizer setdelegate:self];

bool ret = [_iflyspeechrecognizer startlistening];

6.語音合成
[iflyspeechutility createutility:initstring];

3 建立有介面提示的語音識別物件建立乙個訊飛語音識別物件,可以對他進行一系列的呼叫

typedef ns_options(nsinteger, synthesizetype) ;

@property (nonatomic, strong) iflyspeechsynthesizer * iflyspeechsynthesizer;//語音合成物件

@property (nonatomic, assign) synthesizetype syntype;//是何種合成方式

@property (nonatomic, assign) bool haserror;//解析過程中是否出現錯誤

4 物件初始化前面宣告了一些在語音合成的時候會用到的物件,現在需要對前面的物件進行初始化.還是在viewdidload()裡面進行就可以了.

*instance = [ttsconfig sharedinstance];

1 if (instance == nil)

//合成服務單例

if (_iflyspeechsynthesizer == nil)

_iflyspeechsynthesizer.delegate = self;

//設定語速1-100

[_iflyspeechsynthesizer setparameter:instance.speed forkey:[iflyspeechconstant speed]];

//設定音量1-100

[_iflyspeechsynthesizer setparameter:instance.volume forkey:[iflyspeechconstant volume]];

//設定音調1-100

[_iflyspeechsynthesizer setparameter:instance.pitch forkey:[iflyspeechconstant pitch]];

//設定取樣率

[_iflyspeechsynthesizer setparameter:instance.samplerate forkey:[iflyspeechconstant sample_rate]];

//設定發音人

[_iflyspeechsynthesizer setparameter:instance.vcnname forkey:[iflyspeechconstant voice_name]];

5 觸發語音合成新增乙個輸入框,乙個button,button的響應時間是將輸入框中的文字內容讀出來.

if ([self.voicetext.text isequaltostring:@""]) 

if (_audioplayer != nil && _audioplayer.isplaying == yes)

_syntype = nomaltype;

self.haserror = no;

[nsthread sleepfortimeinterval:0.05];

_iflyspeechsynthesizer.delegate = self;

[_iflyspeechsynthesizer startspeaking:self.voicetext.text];

demo位址

訊飛離線語音合成(語記 語音 )

訊飛的語音合成有三種方式 使用訊飛離線語音包 付費 這裡使用語記實現離線語音合成 android name android.permission.access network state 引擎型別 本地 mtts.setparameter speechconstant.engine type,spe...

科大訊飛語音合成 iOS

使用示例如下 c c code 標頭檔案定義 需要實現iflyspeechsynthesizerdelegate,為合成會話的服務 inte ce ttsviewcontroller uiviewcontroller 建立合成物件,為單例模式 iflyspeechsynthesizer iflysp...

整合科大訊飛TTS 離線語音合成服務

背景 最近機械人專案需要整合科大訊飛tts服務,遇到各種坑。本人開發過程中,個人理解,以上錯誤的根本原因就是找不到引擎,明明已經放置了離線demo中的所有msc引擎,為什麼找不到。根本原因還是因為給的離線語音合成中的sdk中的msc.so檔案是錯誤的,專案執行時候,找到了msc,但是發現msc不是自...