全部产品

iOS SDK

更新时间:2020-11-17 10:03:48

本文介绍了如何使用阿里云智能语音服务提供的iOS SDK,包括SDK下载安装、关键接口及代码示例。

前提条件

  • 使用SDK前,首先阅读接口说明,详情请参见接口说明

  • 准备好项目appkey,详情请参见创建项目

下载安装

  1. 下载SDK和示例代码

  2. 解压ZIP包,使用nuisdk.framework进行集成。

    说明

    代码采用Ojective-C和C++混合编程方式,请您调用.mm扩展名文件。

  3. 使用Xcode打开此工程。

    其中示例代码为FileTranscriberViewController.mm文件。

SDK关键接口

  • nui_initialize:初始化SDK。

     /**
           * 初始化SDK,SDK为单例,请先释放后再次进行初始化。请勿在UI线程调用,可能引起阻塞。
           * @param parameters:初始化参数,参见接口说明。
           * @param listener:事件监听回调,参见下文具体回调。
           * @param async_listener:异步回调,设置nullptr采用同步方式调用。
           * @param level:log打印级别,值越小打印越多。
           * @param save_log:是否保存log为文件,存储目录为parameter中的debug_path字段值。
           * @retur:参见错误码。
           */
      NuiResultCode nui_initialize(const char *parameters,
                          const NuiSdkListener *listener,
                          const NuiAsyncCallback *async_listener = nullptr,
                          NuiSdkLogLevel level = LOG_LEVEL_VERBOSE,
                          bool save_log = false);

    其中,NuiSdkListener类型如下表。

    名称

    类型

    说明

    event_callback

    FuncDialogListenerOnEvent

    NUI事件回调

    file_trans_event_callback

    FuncFileTransListenerOnEvent

    文件识别事件回调

    user_data_callback

    FuncDialogUserProvideData

    NUI麦克风数据请求回调

    audio_state_changed_callback

    FuncDialogAudioStateChange

    NUI麦克风状态回调

    audio_extra_event_callback

    FuncDialogAudioExtraEvent

    NUI特殊事件回调,暂不使用。

    user_data

    void *

    用户数据,上述回调中第一个参数。

    对于文件识别,仅需使用FuncFileTransListenerOnEvent:文件识别事件回调。

    /**
         * SDK主要事件回调
         * @param user_data:暂不使用。
         * @param event:回调事件,参见如下事件列表。
         * @param asr_result:语音识别结果。
         * @param task_id:任务ID,在调用开始时生成。
         * @param finish:本轮识别是否结束标志。
         * @param resultCode:参见错误码,在出现EVENT_ASR_ERROR事件时有效。
         */
        typedef void (*FuncFileTransListenerOnEvent) (void *user_data, NuiCallbackEvent event, const char *asr_result, char *task_id, bool finish, int code);

    事件列表:

    名称

    说明

    EVENT_FILE_TRANS_CONNECTED

    连接文件转写服务成功

    EVENT_FILE_TRANS_UPLOADED

    上传文件成功

    EVENT_FILE_TRANS_RESULT

    识别最终结果

    EVENT_ASR_ERROR

    根据错误码信息判断出错原因

  • nui_set_params:以JSON格式设置SDK参数。

    /**
         * 以JSON格式设置参数
         * @param params:参数信息请参见接口说明
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参见错误码
         */
        NuiResultCode nui_set_params(const char *params, const NuiAsyncCallback *listener = nullptr);

  • nui_file_trans_start:发起文件识别请求。

    /**
         * 开始识别
         * @param params:设置识别参数,参考接口说明。
         * @param task_id:开始转写的任务ID,SDK生成随机字符串。
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参见错误码。
         */
    NuiResultCode nui_file_trans_start(const char *params, char *task_id,
                          const NuiAsyncCallback *listener = nullptr);

  • nui_file_trans_cancel取消正在工作的识别任务。

    /**
         * 结束识别
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参见错误码
         */                    
    NuiResultCode nui_file_trans_cancel(const char *task_id, const NuiAsyncCallback *listener = nullptr);

  • nui_release

    /**
         * 释放SDK资源
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参见错误码
         */
        NuiResultCode nui_release(const NuiAsyncCallback *async_listener = nullptr);

  • nui_get_version

    /**
         * 获取SDK版本号
         * @return SDK版本号字符串,形如X.Y.Z-XXX-20190602。
         */ 
    	const char *nui_get_version();

调用步骤

  1. 初始化SDK。

  2. 根据业务需求设置参数。

  3. 调用nui_file_trans_start开始识别。

  4. 在EVENT_FILE_TRANS_RESULT事件中获取最终识别结果。

  5. 结束调用,使用release接口释放SDK资源。

代码示例

NUI SDK初始化

NSString * initParam = [self genInitParams];
    //nui listener
    NuiSdkListener nuiListener;
	nuiListener.file_trans_event_callback = nullptr;
    nuiListener.event_callback = nullptr;
    nuiListener.audio_state_changed_callback = nullptr;
    nuiListener.audio_extra_event_callback = nullptr;
    nuiListener.user_data = nullptr;
    nuiListener.user_data_callback = nullptr;
    [_nui nui_initialize:[initParam UTF8String] Listener:&nuiListener asyncCallback:nullptr logLevel:LOG_LEVEL_VERBOSE saveLog:save_log];

其中,genInitParams生成为String JSON字符串,包含资源目录和用户信息。主要包含如下字段。

    [dictM setObject:id_string forKey:@"device_id"];
    [dictM setObject:@"" forKey:@"url"];
    [dictM setObject:@"" forKey:@"app_key"];
    [dictM setObject:@"" forKey:@"token"];

开始识别

调用nui_file_trans_start方法开启识别。

char task_id[33] = {0};
[_nui nui_file_trans_start:param:[param_string UTF8String] taskId:task_id asyncCallback:nullptr];

回调处理

onFileTransEventCallback:文件识别事件回调,请勿在事件回调中调用SDK的接口,可能引起死锁。

-(void)onFileTransEventCallback:(nuisdk::NuiCallbackEvent)nuiEvent
                asrResult:(const char *)asr_result
                taskId: (const char *)task_id
                 ifFinish:(bool)finish
                  retCode:(int)code {
    TLog(@"onNuiEventCallback event %d finish %d", nuiEvent, finish);
    if (nuiEvent == nuisdk::EVENT_FILE_TRANS_RESULT) {
    	TLog(@"trans finish");
    } else if (nuiEvent == nuisdk::EVENT_ASR_ERROR) {
        TLog(@"EVENT_ASR_ERROR error[%d]", code);
    }
    if (finish) {
        [myself showStart];
    }
    return;
}      

取消识别

[_nui nui_file_trans_cancel:[task_id UTF8String] asyncCallback:nullptr];