Nuance在iOS中的应用

Nuance

最近接手的新项目是一个做翻译的公司,支持的语种较多、较广。语音识别(ASR)和语音合成(TTS)我们又多用了一家叫Nuance的开源库,一搜竟然是挺久挺出名的一家呢。

下载SDK&注册AppKey

SDK下载

其中开发指南就是官方文档啦,不过特别简单,我也是基于官方的文档来进行的简单应用,等后期用到更多内容的时候再更新。

最坑的地方就是AppKey相关的注册了!

其实只需要 sign up 完毕就可以了,不需要按照他们的注册指引一步一步来,我甚至都进行到需要我打包ipa然后把他们的7个(没错就是7个)UDID添加到我的帐号理的地步了,并且我真的那么做了……后来才发现,其实只要你注册完毕就有了的。
具体路径是:Home > My Account > Sandbox Credentials

我使用的SpeechKit 2.x

tips:咱们 iOS 的URL和 Android 的不一样的,不需要自己拼接,直接复制URL和 App Key就好了。

修改info.plist

应该是iOS 10的新特性,之前在用摄像头的时候也用到了。App如果需要调用硬件的话,就需要在info.plist里加入对应的键值对。

例如摄像头的:

~
NSMicrophoneUsageDescription
此 App 需要您的同意才能使用麦克风
~

串中的内容会出现在权限提醒的弹窗内(好像安卓啊)
具体的值在你崩溃的时候会告知的。

下面是麦克风的:

~
NSCameraUsageDescription
此 App 需要您的同意才能使用摄像头
~

语音识别(ASR)

其实SDK就是一个简简单单的SpeechKit.framework,直接拖到菜单里就好啦。如果报错(找不到库的那种),请在Targets > Build Settings > Search Paths里在Framework Search Paths 后面键入你SpeechKit.framework存放的绝对路径。

一个头文件

极其简单,就一个#import

一个代理

SKTransactionDelegate

两个变量
SKSession *sksession;
SKTransaction *speechTransaction;   
配置AppKey
NSString *asrURL = @"我自己的";//就是Sandbox Credentials里的URL
NSString *appKey = @"就不填了";//就是Sandbox Credentials里很长的那串的App Key
初始化(也可以理解为开始录音)
  if (!sksession) {
    sksession = [[SKSession alloc] initWithURL:[NSURL URLWithString:asrURL] appToken:appKey];
  }
    //这个方法其实就是开始识别
    speechTransaction = [sksession recognizeWithType:SKTransactionSpeechTypeDictation
                                              detection:SKTransactionEndOfSpeechDetectionShort
                                               language:@"eng-USA"
                                               delegate:self];
官网文档给了5个代理方法。
- (void)transactionDidBeginRecording:(SKTransaction *)transaction {
    //监视到录音开始
}   

- (void)transactionDidFinishRecording:(SKTransaction *)transaction {
   //录音结束
}   

- (void)transaction:(SKTransaction *)transaction didReceiveRecognition:(SKRecognition *)recognition {
  //返回识别结果
    NSString* topRecognitionText = [recognition text];
    NSLog(@"识别的结果是%@",topRecognitionText);
}

- (void)transaction:(SKTransaction *)transaction didFinishWithSuggestion:(NSString *)suggestion {
    //不知道具体是干什么的方法,可是每次都会在结束的最最后调用一次。
}
- (void)transaction:(SKTransaction *)transaction didFailWithError:(NSError *)error
     suggestion:(NSString *)suggestion {
    //没有调用过,目测是出错的时候才会调用
}   

语音合成(TTS)

与语音识别相比,同样的头文件、一样的SKSession对象(只需要init一次)、同样的代理
不同的是:

多了一个变量
SKTransaction *speakTransaction;
开始合成
SKTransaction* transaction = [session speakString:@"要合成的话"
                                     withLanguage:@"eng-USA"
                                         delegate:self];
代理方法只有三个
- (void)transaction:(SKTransaction *)transaction didReceiveAudio:(SKAudio *)audio
{
    [sksession.audioPlayer playAudio:audio];//直接播放
}

另外两个同ASR里最后两个方法。反正我用不到。

遇到的问题

在手机静音的情况下,Nuance合成语音是听不到的,媒体音量开到最大也没有,而科大讯飞是有的。可能是options问题,也可能是session问题,不知道能不能解决,暂时放一放。

你可能感兴趣的:(Objective-C)