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

前言

首先,换工作啦~新公司新项目,也用到了新的第三方.所以从本篇开始,总结一下项目里使用到的第三方服务.项目里用到了语音识别,所以在这里简单的介绍一下吧.这里是官方文档

集成

集成步骤官方文档里已经很详细了,此处省略.

语音识别

简单的写了一个工具类来实现语音识别的功能,sdk相关配置和参数,代码如下:

final class VoiceTool: NSObject {
    static let sharedInstance = VoiceTool()
    
    private let IFLY_APP_ID = 你的App id
    private let speechRecognizer = IFlySpeechRecognizer.sharedInstance()
    
    
    private override init() {
        super.init()
        startIflyServer()
        configRecognizer()
    }
    
    private func startIflyServer() {
        #if DEBUG
            // 配置log
            IFlySetting.setLogFile(.LVL_NORMAL)
            IFlySetting.showLogcat(false)
            let logPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask, true)[0]  + "/IFlyLog"
            IFlySetting.setLogFilePath(logPath)
        #endif
        IFlySpeechUtility.createUtility("appid="+IFLY_APP_ID)
    }
    
    private func configRecognizer() {
        // 扩展参数。
        speechRecognizer?.setParameter("", forKey: IFlySpeechConstant.params())
        // 设置听写模式
        speechRecognizer?.setParameter("iat", forKey: IFlySpeechConstant.ifly_DOMAIN())
        // 回结果的数据格式
        speechRecognizer?.setParameter("plain", forKey: IFlySpeechConstant.result_TYPE())
        // 识别录音保存路径 保存在sdk工作路径中,如未设置工作路径,则默认保存在library/cache下
        speechRecognizer?.setParameter("asr.pcm", forKey: IFlySpeechConstant.asr_AUDIO_PATH())
        // 录音源 默认为麦克风 1
        speechRecognizer?.setParameter(IFLY_AUDIO_SOURCE_MIC, forKey: IFlySpeechConstant.audio_SOURCE())
        // 采样率 16k
        speechRecognizer?.setParameter("16000", forKey: IFlySpeechConstant.sample_RATE())
        // VAD前端点超时
        speechRecognizer?.setParameter("10000", forKey: IFlySpeechConstant.vad_BOS())
        // VAD后端点超时
        speechRecognizer?.setParameter("10000", forKey: IFlySpeechConstant.vad_EOS())
        // 最长录音时长 默认3000ms  30秒
        speechRecognizer?.setParameter("60000", forKey: IFlySpeechConstant.speech_TIMEOUT())
        // 是否返回标点 0: 无 1: 有
        speechRecognizer?.setParameter("1", forKey: IFlySpeechConstant.asr_PTT())
        speechRecognizer?.delegate = self
    }
    
    // MARK: - public function
    public func startRecord() {
        dPrint(message: "开始录音")
        speechRecognizer?.cancel()
        let result = speechRecognizer?.startListening()
        if !result! {
            dPrint(message: "启动服务失败")
        }
    }
    
    public func stopRecord() {
        dPrint(message: "停止录音")
        speechRecognizer?.stopListening()
    }
    
    public func cancelRecord() {
        dPrint(message: "取消录音")
        speechRecognizer?.cancel()
    }
}

extension VoiceTool: IFlySpeechRecognizerDelegate {
    // 识别结果回调
    func onResults(_ results: [Any]!, isLast: Bool) {
      
    }
    // 识别错误回调
    func onError(_ errorCode: IFlySpeechError!) {
     

    }
    /*
    // 音量变化回调
    func onVolumeChanged(_ volume: Int32) {
        
    }
    // 开始录音回调
    func onBeginOfSpeech() {
//        dPrint("start")
    }
    // 结束录音回调
    func onEndOfSpeech() {
//        dPrint("stop")
    }
    // 取消录音回调
    func onCancel() {
//        dPrint("cancel")
    }
 */
}

通过startRecord方法进行语音识别,使用stopRecord方法停止语音识别.识别的结果会通过IFlySpeechRecognizerDelegate的代理方法给出.我们可以通过代理或者闭包将识别结果传出.

最后

语音识别成功后会自动保存到sdk工作目录下,如果涉及到语音的转码或者其他操作,这些部分才是重点~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,724评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,227评论 4 61
  • 昨晚上做了一个梦,虽然已经工作了一整天,但是对这个梦依然记忆清晰。。。 梦中有一个女人和一个男人,男人坐在桌前不知...
    马会会阅读 2,732评论 0 1
  • 职场有三宝,助你升职又加薪。心动了吗?那就赶紧行动起来吧。 第一宝,概括力。不论你在公司身处什么职位,都需要拥有一...
    项七七阅读 1,651评论 1 2
  • 今天早上的温度非常冷,不知不觉又入冬了。钻进温暖的被窝随便写写,室内开着暖气,忽然间觉得很幸福,似乎也不需要一个男...
    迷豆酱阅读 3,647评论 0 0