全部产品
云市场
云游戏

iOS SDK

更新时间:2020-09-01 19:00:38

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

前提条件

下载安装

  1. 下载SDK和示例代码
  2. 解压ZIP包,使用nuisdk.framework进行集成。

    说明

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

  3. 使用Xcode打开此工程。

    其中语音合成示例代码在TTSViewController.mm文件。

SDK关键接口

  • nui_tts_initialize:初始化SDK。

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

    其中,NuiTtsSdkListener类型如下表。

    名称类型说明
    tts_event_callbackFuncTtsListenerOnEvent语音合成事件回调
    tts_user_data_callbackFuncTtsUserProvideData语音合成数据回调
    tts_user_volume_callbackFuncTtsUserProvideVolume音量回调
    user_datavoid *用户数据,上述回调中第一个参数。

    • FuncTtsListenerOnEvent:SDK事件回调。

      /**
           * SDK主要事件回调
           * @param user_data:暂不使用。
           * @param event:回调事件,参见如下事件列表。
           * @param taskid:本次合成的任务ID。
           * @param code:参见错误码,出现TTS_EVENT_ERROR事件时有效。
           */
          typedef void (*FuncTtsListenerOnEvent) (void *user_data, NuiSdkTtsEvent event, char *taskid, int code);

      事件列表:

      名称说明
      TTS_EVENT_START语音合成开始,准备播放。
      TTS_EVENT_END语音合成播放结束
      TTS_EVENT_CANCEL取消语音合成
      TTS_EVENT_PAUSE语音合成暂停
      TTS_EVENT_RESUME语音合成恢复
      TTS_EVENT_ERROR语音合成发生错误

    • FuncTtsUserProvideData:回调中输出合成的音频数据。

      /**
           * 当开始合成后,此回调输出合成的音频数据,App可进行播放。
           * @param user_data:暂不使用。
           * @param text:保留参数,仅本地合成时使用。
           * @param word_idx:保留参数,仅本地合成时使用。
           * @param buffer:合成的语音数据。
           * @param len:合成的语音长度。
           * @param taskid:本次合成的任务ID。
           */
          typedef void (*FuncTtsUserProvideData) (void *user_data, char *text, int word_idx, char *buffer, int len, char *taskid);

    • FuncTtsUserProvideVolume:合成数据音量回调。

      /**
           * SDK主要事件回调
           * @param user_data:暂不使用。
           * @param volume:合成语音的音量,可用于音量的动态显示。
           * @param taskid:本次合成的任务ID。
           */
          typedef void (*FuncTtsUserProvideVolume) (void *user_data, int volume, char *taskid);

  • nui_tts_play:开始播放。

    /**
         * 开始播放
         * @param priority:任务优先级,请使用"1"。
         * @param taskid:任务ID,可传入32个字节的uuid,或传入空内容由SDK自动生成。
         * @param text:播放的文本内容。
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参见错误码。
         */
        -(int) nui_tts_play:(const char *)priority
                 taskId:(const char *)taskid
                   text:(const char *)text
          asyncCallback:(const NuiAsyncCallback *)listener;
  • nui_tts_cancel:取消播放。

    /**
         * 取消合成任务
         * @param taskid:传入想要停止的任务ID,如果为空则取消所有任务。
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参见错误码。
         */
        -(int) nui_tts_cancel:(const char *)taskid
            asyncCallback:(const NuiAsyncCallback *)listener;
  • nui_tts_pause:暂停播放。

    /**
         * 暂停
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参见错误码。
         */
        -(int) nui_tts_pause:(const NuiAsyncCallback *)listener;
  • nui_tts_resume:恢复播放。

    /**
         * 恢复暂停的任务
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参见错误码。
         */
        -(int) nui_tts_resume:(const NuiAsyncCallback *)listener;
  • nui_tts_set_param:设置语音合成参数。

    /**
         * 以键值对形式设置参数
         * @param param:参数名,参见接口说明。
         * @param value:参数值,参见接口说明。
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参见错误码。
         */
        -(int) nui_tts_set_param:(const char *)param
                       value:(const char *)value
               asyncCallback:(const NuiAsyncCallback *)listener;
  • nui_tts_get_param:获取参数。

    /**
         * 获取参数值
         * @param param:参数名,参见接口说明。
         * @param async_listener:异步回调,设置nullptr采用同步方式调用。
         * @return:参数值。
         */
        -(const char *) nui_tts_get_param:(const char *)param
                        asyncCallback:(const NuiAsyncCallback *)listener;
  • nui_tts_release:释放SDK资源。

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

调用步骤

  1. 初始化SDK和播放组件。
  2. 根据业务需要设置参数。
  3. 调用nui_tts_play进行播放。
  4. 在合成数据回调中,将数据写入播放器进行播放,建议使用流式播放。
  5. 收到语音合成结束的回调。

代码示例

  1. 语音合成初始化

    NSString * initParam = [self genInitParams];
        //nui listener
        NuiTtsSdkListener ttsListener;
        ttsListener.tts_event_callback = ttsListenerOnEvent;
        ttsListener.tts_font_progress_callback = nullptr;
        ttsListener.tts_user_volume_callback = ttsUserProvideVolume;
        ttsListener.tts_user_data_callback = ttsListenerUserdata;
        ttsListener.user_data = nullptr;
        [_nui nui_tts_initialize:[initParam UTF8String] ttsListener:&ttsListener asyncCallback:nullptr logLevel:LOG_LEVEL_VERBOSE saveLog:true];

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

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

  2. 启动语音合成

    [self.nui nui_tts_play:"1" taskId:"" text:[content UTF8String] asyncCallback:nullptr];

  3. 回调处理

    • onNuiTtsEventCallback:语音合成事件回调,根据语音合成状态控制播放器。

      - (void)onNuiTtsEventCallback:(nuisdk::NuiSdkTtsEvent)event taskId:(char*)taskid code:(int)code {
          TLog(@"onNuiTtsEventCallback event[%d]", event);
          if (event == TTS_EVENT_START) {
              loop_in = TTS_EVENT_START;
              dispatch_async(dispatch_get_main_queue(), ^{
                  [self->_voicePlayer play];
              });
          } else if (event == TTS_EVENT_END) {
              loop_in = TTS_EVENT_END;
              dispatch_async(dispatch_get_main_queue(), ^{
                  [self->_voicePlayer drain];
              });
          }
      }

    • onNuiTtsUserdataCallback:语音合成数据回调,将回调中的合成数据写入播放器进行播放。

      - (void)onNuiTtsUserdataCallback:(char*)text wordIdx:(int)word_idx buffer:(char*)buffer len:(int)len taskId:(char*)task_id {
          TLog(@"onnuiTtsUserdataCallback played text %s index %d", text, word_idx);
          [_voicePlayer write:(char*)buffer Length:(unsigned int)len];
      }

  4. 结束语音合成

    [self.nui nui_tts_cancel:nullptr asyncCallback:nullptr];