在iPhone項目中使用訊飛語音SDK實現語音識別和語音合成

原文地址:http://www.sufeinet.com/thread-2488-1-1.htmlphp

如今不少手機應用中都出現了語音功能,好比:QQ音樂的語音輸入進行搜素、google的語音、最近中國移動聯合訊飛發佈的《靈犀》手機應用,都有集成語音的功能,並且識別率也是很是的不錯,好比《靈犀》中的能夠經過語音實現發送短信、撥打電話功能(離線可以使用),本身使用了一下,仍是比較的方便,而對於一些更高級的功能卻會須要在聯網的狀況下才能使用(查詢天氣、查詢股票、上網搜索、聽新聞、地圖導航、翻譯以及聊天等等功能)。大體介紹了一些,就進入正題,下面講一講如何使用訊飛的語音SDK加入到你的iPhone應用中吧!

1.首先請先到訊飛官方網站的開發者專區http://open.voicecloud.cn/developer.php)。若是你尚未註冊,那麼須要先註冊一個開發者帳號的。點擊網站頂部的「免費註冊」便可,使用你的本身的手機號碼註冊一個帳號。

2.僅僅註冊了一個開發者帳號還可使用SDK,由於還須要申請Appid。登錄以後到本身的我的中心建立一個應用填寫好相關信息,而後等待審覈經過,由於只有審覈經過以後,你才能夠下載訊飛語音的SDK。以下:
<ignore_js_op>html

下載專區iphone

下載專區


3.若是你的應用已經審覈經過,點擊SDK下載,而且選擇對應平臺的SDK,好比如今選擇iphone平臺SDK下載。

4.下載好了以後,你會看到一個壓縮包,解壓出來有四個文件,
<ignore_js_op>函數

解壓以後文件測試

解壓以後文件 

其中sample就是訊飛提供的DEMO了,打開項目,你會看到這樣的目錄結構:
<ignore_js_op>網站

DEMO目錄結構google

DEMO目錄結構 

直接運行,並無錯誤,只有幾個警告,運行界面以下:
<ignore_js_op>翻譯

運行界面3d

運行界面<ignore_js_op>code

聽寫界面

聽寫界面 

5.那麼怎麼在本身的項目中使用呢?其實仍是很是簡單的。訊飛也有提供相關的開發文檔,仍是比較詳細。在開發者專區和下載專區都有文檔可供下載。

6.新建一個iPhone 項目吧。新建好了以後,須要先導入須要的lib,以下:
<ignore_js_op>

lib

lib 
其中須要說明的是,iflyMSC.framework這個lib就在你下載的SDK解壓文件下的lib文件夾下。在添加lib的界面選擇Add Others...,而且選擇你下載的lib。點擊Open,就能正確添加。
<ignore_js_op>

選擇iflyMSC.framework

選擇iflyMSC.framework 

7.一些函數和配置的說明:

在你須要使用SDK的頭文件中導入文件:

  1. #import "iFlyMSC/IFlyRecognizeControl.h"
  2. #import "iFlyMSC/IFlysynthesizerControl.h"
複製代碼

建立一個識別控件或者合成控件:

  1. IFlyRecognizeControl    *_iFlyRecognizeController;    //識別控件
  2. IFlySynthesizerControl  *_iFlySynthesizerControl;     //合成控件
複製代碼

在實現文件初始化控件:

  1. //初始化語音識別控件
  2.     _iFlyRecognizeController = [[IFlyRecognizeControl alloc] initWithOrigin:CGPointMake(20, 70) initParam:initPara];
  3.     [self.view addSubview:_iFlyRecognizeController];
  4.     
  5.     //Configure
  6.     [_iFlyRecognizeController setEngine:@"sms" engineParam:nil grammarID:nil];
  7.     [_iFlyRecognizeController setSampleRate:16000];
  8.     [_iFlyRecognizeController setDelegate:self];
  9.     [_iFlyRecognizeController setShowLog:NO];
  10.     
  11.     //註冊unActive事件
  12.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resignActive) name:UIApplicationWillResignActiveNotification object:nil];
  13.     
  14.     //初始化語音合成控件
  15.     _iFlySynthesizerControl = [[IFlySynthesizerControl alloc] initWithOrigin:CGPointMake(20, 70) initParam:initPara];
  16.     
  17.     //Configure
  18.     [_iFlySynthesizerControl setDelegate:self];
  19.     [_iFlySynthesizerControl setVoiceName:@"vixm"];  //發音人(中英文粵語)
  20.     [self.view addSubview:_iFlySynthesizerControl];
  21.     
  22.     //show UI
  23.     [_iFlySynthesizerControl setShowUI:YES];
  24.     
  25.     //show log
  26.     [_iFlySynthesizerControl setShowLog:NO];
  27.     
  28.     //註冊unActive事件
  29.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resignactiveOfSynthesizer) name:UIApplicationWillResignActiveNotification object:nil];
複製代碼

一些回調函數和方法:

  1. //識別結束回調函數-會話過程結束調用此函數
  2. - (void)onRecognizeEnd:(IFlyRecognizeControl *)iFlyRecognizeControl theError:(int)error
  3. {
  4.     [_recognizeButton setEnabled:YES];
  5.     [_synthesizerButton setEnabled:YES];
  6.     NSLog(@"識別結束");
  7.     NSLog(@"上傳流量:%d,下載流量:%d",[iFlyRecognizeControl getUpflow:FALSE],[iFlyRecognizeControl getDownflow:FALSE]);
  8. }
  9. //識別結果回調函數
  10. - (void)onResult:(IFlyRecognizeControl *)iFlyRecognizeControl theResult:(NSArray *)resultArray
  11. {
  12.     NSString *strResult = [[resultArray objectAtIndex:0] objectForKey:@"NAME"];
  13.     NSLog(@"識別的結果是:%@",strResult);
  14. }
  15. //開始語音識別
  16. - (void)onButtonRecognize
  17. {
  18.     if ([_iFlyRecognizeController start]) {
  19.         [_recognizeButton setEnabled:NO];
  20.         [_synthesizerButton setEnabled:NO];
  21.     }
  22. }
  23. //不支持後臺模式則在unActive事件時執行cancel
  24. - (void)resignActive
  25. {
  26.     [_iFlyRecognizeController cancel];
  27. }
  28. //合成回調函數,執行cancel函數整個會話結束調用此函數
  29. - (void)onSynthesizerEnd:(IFlySynthesizerControl *)iFlySynthesizerControl theError:(int)error
  30. {
  31.     [_synthesizerButton setEnabled:YES];
  32.     [_recognizeButton setEnabled:YES];
  33.     NSLog(@"結束");
  34.     NSLog(@"上傳流量:%d,下載流量:%d",[iFlySynthesizerControl getUpflow:FALSE],[iFlySynthesizerControl getDownflow:FALSE]);
  35. }
  36. //獲取播放器緩衝進度
  37. - (void)onSynthesizerBufferProgress:(float)bufferProgress
  38. {
  39.     NSLog(@"當前緩衝進度:%f",bufferProgress);
  40. }
  41. //獲取播放器播放進度
  42. - (void)onSynthesizerPlayProgress:(float)playProgress
  43. {
  44.     NSLog(@"當前播放進度:%f",playProgress);
  45. }
  46. //開始語音合成
  47. - (void)onButtonSynthesizer
  48. {
  49.     [_iFlySynthesizerControl setText:@"哈哈,這僅僅是一個測試合成功能的例子而已,你不用太緊張會發生什麼特別的事情。謝謝" params:nil];
  50.     if ([_iFlySynthesizerControl start]) {
  51.         [_recognizeButton setEnabled:NO];
  52.         [_synthesizerButton setEnabled:NO];
  53.     } else {
  54.         NSLog(@"I'm sorry,start error. ");
  55.     }
  56. }
  57. //不支持後臺模式則unActive事件時執行cancel
  58. - (void)resignactiveOfSynthesizer
  59. {
  60.     NSLog(@"resignActive");
  61.     [_iFlySynthesizerControl cancel];
  62. }
複製代碼

其中下列方法能夠在本身須要開始使用語音功能的地方調用,好比:

  1. _recognizeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  2.     _synthesizerButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  3.     [_recognizeButton setFrame:CGRectMake(70, 100, 180, 60)];
  4.     [_synthesizerButton setFrame:CGRectMake(70, 200, 180, 60)];
  5.     [_recognizeButton setTitle:@"開始語音識別" forState:UIControlStateNormal];
  6.     [_synthesizerButton setTitle:@"開始語音合成" forState:UIControlStateNormal];
  7.     
  8.     [_recognizeButton addTarget:self action:@selector(onButtonRecognize) forControlEvents:UIControlEventTouchDown];
  9.     [_synthesizerButton addTarget:self action:@selector(onButtonSynthesizer) forControlEvents:UIControlEventTouchDown];
  10.     
  11.     [self.view addSubview:_recognizeButton];
  12.     [self.view addSubview:_synthesizerButton];
  13. //開始語音識別
  14. - (void)onButtonRecognize
  15. {
  16.     if ([_iFlyRecognizeController start]) {
  17.         [_recognizeButton setEnabled:NO];
  18.         [_synthesizerButton setEnabled:NO];
  19.     }
  20. }
  21. //開始語音合成
  22. - (void)onButtonSynthesizer
  23. {
  24.     [_iFlySynthesizerControl setText:@"這僅僅是一個測試合成功能的例子,你不用太緊張會發生什麼" params:nil];
  25.     if ([_iFlySynthesizerControl start]) {
  26.         [_recognizeButton setEnabled:NO];
  27.         [_synthesizerButton setEnabled:NO];
  28.     } else {
  29.         NSLog(@"I'm sorry,start error. ");
  30.     }
  31. }
複製代碼

8.到這裏已經可使用語音識別和合成功能了。以下:
<ignore_js_op>

最終效果

最終效果<ignore_js_op>

語音識別

語音識別<ignore_js_op>

語音合成

語音合成 

相關文章
相關標籤/搜索