iOS第三方之讯飞语音

目录
    1. 语音听写

简介

科大讯飞MSC(Mobile Speech Client,移动语音终端)

语音合成
    将一段文字转换为成语音(可设置音色、语速和语调)
语音听写
    将一段语音转换成文本
语音识别
    判断用户所说的内容是否与预定义的语法相符合
语义理解AIUI
    在语音听写基础上,分析理解用户的说话意图,返回结构化的指令信息(在AIUI开放平台定义专属的问答格式)。
语音评测
    通过智能语音技术自动对发音水平进行评价
语音唤醒
    设备(手机、玩具、家电等)在休眠(或锁屏)状态下也能检测到用户的声音
人脸识别    
    单人脸验证、单声纹验证以及人脸+声纹的融合验证方式
1. 语音听写

集成

第一步: 
    科大讯飞开放平台(http://www.xfyun.cn)申请应用获取AppID,并下载SDK
第二步: 
导入iflyMSC.framework,以及依赖的系统库:
  iflyMSC.framework             必要  讯飞开放平台静态库。
  libz.tbd                      必要  用于压缩、加密算法。
  AVFoundation.framework            必要  用于系统录音和播放 。
  SystemConfiguration.framework 系统库 用于系统设置。
  Foundation.framework          必要  基本库。
  CoreTelephoney.framework      必要  用于电话相关操作。
  AudioToolbox.framework            必要  用于系统录音和播放。
  UIKit.framework               必要  用于界面显示。
  CoreLocation.framework        必要  用于定位。
  Contacts.framework            必要  用于联系人。
  AddressBook.framework             必要  用于联系人。
  QuartzCore.framework          必要  用于界面显示。
  CoreGraphics.framework        必要  用于界面显示。
  libc++.tbd        离线识别,Aiui必要 用于支持C++。
  Libicucore.tbd            Aiui必要  系统正则库。

plist文件中添加权限
  麦克风位置联系人权限
  <key>NSMicrophoneUsageDescription</key>
  <string></string>
  <key>NSLocationUsageDescription</key>
  <string></string>
  <key>NSLocationAlwaysUsageDescription</key>
  <string></string>
  <key>NSContactsUsageDescription</key>
  <string></string>

bitcode
在Xcode 7,8默认开启了Bitcode, MSC不支持,关闭Bitcode(Build Settings中)


第三步:
AppDele +
    初始化(异步)
    NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@", @"YourAppid"];
    [IFlySpeechUtility createUtility:initString];
/* 可选
    // 设置log级别
    [IFlySetting setLogFile:LVL_ALL];
    // 控制台是否输出log
    [IFlySetting showLogcat:YES];
    // log存储路径
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachePath = [paths objectAtIndex:0];
    [IFlySetting setLogFilePath:cachePath];
*/
#import <iflyMSC/iflyMSC.h>
#import "IATConfig.h"

<IFlySpeechRecognizerDelegate>
@property (nonatomic, strong) IFlySpeechRecognizer *iFlySpeechRecognizer;


    // 1. 初始化讯飞语音听写
    if (!_iFlySpeechRecognizer) {
        // 创建听写对象
        _iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance];
        _iFlySpeechRecognizer.delegate = self;
        // ?
        [_iFlySpeechRecognizer setParameter:@"" forKey: [IFlySpeechConstant PARAMS]];
        // 设置听写模式
        [_iFlySpeechRecognizer setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
        
        
        // 设置(直接从设置文件中修改数据)
        IATConfig *instance = [IATConfig sharedInstance];
        // 设置最长录音时间
        [_iFlySpeechRecognizer setParameter:instance.speechTimeout forKey:[IFlySpeechConstant SPEECH_TIMEOUT]];
        // 设置说完后多长时间会停止识别
        [_iFlySpeechRecognizer setParameter:instance.vadEos forKey: [IFlySpeechConstant VAD_EOS]];
        // 设置多长时间不说话或者是未检测到语音 则会停止识别
        [_iFlySpeechRecognizer setParameter:instance.vadBos forKey: [IFlySpeechConstant VAD_BOS]];
        // 网络等待时间
        [_iFlySpeechRecognizer setParameter:@"20000" forKey:[IFlySpeechConstant NET_TIMEOUT]];
        // 设置采样率,推荐使用16K
        [_iFlySpeechRecognizer setParameter:instance.sampleRate forKey:[IFlySpeechConstant SAMPLE_RATE]];
        if ([instance.language isEqualToString:[IATConfig chinese]]) {
            // 设置语言
            [_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechConstant LANGUAGE]];
            // 设置方言
            [_iFlySpeechRecognizer setParameter:instance.accent forKey:[IFlySpeechConstant ACCENT]];
        }else if ([instance.language isEqualToString:[IATConfig english]]) {
            [_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechConstant LANGUAGE]];
        }
        // 设置是否返回标点符号
        [_iFlySpeechRecognizer setParameter:instance.dot forKey:[IFlySpeechConstant ASR_PTT]];
    }


        // 2.启动识别服务
        [_iFlySpeechRecognizer startListening];
        // 3.停止识别服务
        // [_iFlySpeechRecognizer stopListening];


#pragma mark IFlySpeechRecognizerDelegate
// 4.识别到结果后回调
- (void)onResults:(NSArray *) results isLast:(BOOL)isLast{
    NSLog(@"%@",results);
    
    if(!results){
        return;
    }
    //
    NSString *resultStr=[[[results firstObject] allKeys]firstObject];
 
    NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:[resultStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
    
    NSArray *resultArr=dic[@"ws"];
    for(int i=0;i<resultArr.count;i++){
        NSDictionary *dicT=[resultArr[i][@"cw"]firstObject];
        [self.resultStr appendString:dicT[@"w"]];
    }

    if(isLast){
    if([self.resultStr containsString:@"xxxss"]){
    }
        
        self.resultStr=[NSMutableString new];
    }
}

// 出错后回调
- (void)onError:(IFlySpeechError *)error{
    NSLog(@"%@",error);
    
}
// 停止录音后回调
- (void)onEndOfSpeech{}
// 开始录音后回调
- (void)onBeginOfSpeech{}
// 音量改变后回调
- (void)onVolumeChanged: (int)volume{}
// 取消后回调
- (void)onCancel{}
IATConfig.h

#import <Foundation/Foundation.h>
@interface IATConfig : NSObject
+(IATConfig *)sharedInstance;
+(NSString *)mandarin;
+(NSString *)cantonese;
+(NSString *)sichuanese;
+(NSString *)chinese;
+(NSString *)english;
+(NSString *)lowSampleRate;
+(NSString *)highSampleRate;
+(NSString *)isDot;
+(NSString *)noDot;

@property (nonatomic, strong) NSString *speechTimeout;
@property (nonatomic, strong) NSString *vadEos;
@property (nonatomic, strong) NSString *vadBos;

@property (nonatomic, strong) NSString *language;
@property (nonatomic, strong) NSString *accent;

@property (nonatomic, strong) NSString *dot;
@property (nonatomic, strong) NSString *sampleRate;

@property (nonatomic) BOOL  isTranslate;//whether or not to open translation

@property (nonatomic, assign) BOOL haveView;
@property (nonatomic, strong) NSArray *accentIdentifer;
@property (nonatomic, strong) NSArray *accentNickName;
@end



IATConfig.m

#define PUTONGHUA   @"mandarin"
#define YUEYU       @"cantonese"
#define ENGLISH     @"en_us"
#define CHINESE     @"zh_cn";
#define SICHUANESE  @"lmz";

#import "IATConfig.h"
@implementation IATConfig
-(id)init {
    self  = [super init];
    if (self) {
        [self defaultSetting];
        return  self;
    }
    return nil;
}


+(IATConfig *)sharedInstance {
    static IATConfig  * instance = nil;
    static dispatch_once_t predict;
    dispatch_once(&predict, ^{
        instance = [[IATConfig alloc] init];
    });
    return instance;
}


-(void)defaultSetting {
    _speechTimeout = @"30000";
    _vadEos = @"3000";
    _vadBos = @"3000";
    _dot = @"0";
    _sampleRate = @"16000";
    _language = CHINESE;
    _accent = PUTONGHUA;
    _haveView = NO;
    _accentNickName = [[NSArray alloc] initWithObjects:NSLocalizedString(@"K_LangCant", nil), NSLocalizedString(@"K_LangChin", nil), NSLocalizedString(@"K_LangEng", nil), NSLocalizedString(@"K_LangSzec", nil), nil];
    
    _isTranslate = NO;
}


+(NSString *)mandarin {
    return PUTONGHUA;
}
+(NSString *)cantonese {
    return YUEYU;
}
+(NSString *)chinese {
    return CHINESE;
}
+(NSString *)english {
    return ENGLISH;
}
+(NSString *)sichuanese {
    return SICHUANESE;
}

+(NSString *)lowSampleRate {
    return @"8000";
}

+(NSString *)highSampleRate {
    return @"16000";
}

+(NSString *)isDot {
    return @"1";
}

+(NSString *)noDot {
    return @"0";
}
@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值