日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

iOS SDK

本文介紹了如何使用阿里云智能語音服務提供的iOS NUI SDK,包括SDK下載安裝、關鍵接口及代碼示例。

前提條件

下載安裝

  1. 重要

    下載后請在樣例初始化代碼中替換您的阿里云賬號信息、Appkey和Token才可運行。

    為方便集成,2.5.14版本后iOS接口使用純Object-C接口,不再使用C++混合接口。

    對象

    說明

    智能語音交互移動端SDK

    智能語音交互移動端SDK

    阿里云計算有限公司

    阿里云計算有限公司

    SDK版本

    2.6.3-01B

    SDK更新時間

    2024-12-19

    SDK整合包大小

    17.3MB

    SDK整合包MD5值

    edf1a1a770bf869b738ee89ab43d88aa

    隱私政策

    智能語音交互產品隱私政策

    SDK整合包下載

    下載iOS SDK

    類別

    兼容范圍

    系統

    最低支持iOS9

    架構

    arm64,x86_64

    此SDK還包含如下功能,若未支持您想要的功能,請去對應文檔獲取SDK。

    功能

    是否支持

    一句話識別

    實時語音識別

    語音合成

    實時長文本語音合成

    流式文本語音合成

    離線語音合成

    錄音文件識別極速版

    喚醒及命令詞

    聽悟實時推流

  2. 解壓ZIP包,將ZIP包中的nuisdk.framework添加到您的工程中,并在工程Build Phases的Link Binary With Libraries中添加nuisdk.framework。請確保在編譯配置的General > Frameworks, Libraries, and Embedded Content中配置nuisdk.framework為Embed & Sign。

  3. 使用Xcode打開此工程,工程中提供了參考代碼以及一些直接可使用的工具類,例如音頻播放錄制和文件操作,您可以直接復制源碼到您的實際工程進行使用。其中語音合成示例代碼在StreamInputTtsViewController類中。

SDK關鍵接口

  • startStreamInputTts:開始運行流式TTS

    /**
     * 與服務端完成建鏈,并開始流式語音合成任務
     * @param ticket:json string形式的初始化參數,參見下方說明。
     * @param parameters:json string形式的初始化參數,參見下方說明。
     * @param session_id:當前會話的id,若客戶端請求時傳入則原樣返回,否則由服務端自動生成32位唯一ID。
     * @param level:log打印級別,值越小打印越多。
     * @param save_log:是否保存log為文件,存儲目錄為ticket中的debug_path字段值。注意,log文件無上限,請注意持續存儲導致磁盤存滿。
     * @return:參見錯誤碼:http://bestwisewords.com/document_detail/459864.html。
     */
    - (int) startStreamInputTts:(const char *)ticket parameters:(const char *)parameters sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
    
  • stopStreamInputTts: 停止語音合成

    /**
     * 結束合成任務,通知服務端流入文本數據發送完畢,阻塞等待服務端處理完成,并返回所有合成音頻。阻塞超時可以通過start接口中的complete_waiting_ms設置
     * @return:參見錯誤碼:http://bestwisewords.com/document_detail/459864.html。
     */
    - (int) stopStreamInputTts;
  • sendStreamInputTts:以流式的方式發送文本

    /**
     * 以流式的方式發送文本
     * @param text:從大模型當中生成的流式文本
     * @return:參見錯誤碼:http://bestwisewords.com/document_detail/459864.html。
     */
    - (int) sendStreamInputTts:(const char *)text;
  • StreamInputTtsDelegate 事件代理

    • onStreamInputTtsEventCallback:SDK事件回調

      /**
       * 事件回調
       * @param event:回調事件,參見如下事件列表。
       * @param taskid:整個實時語音合成會話的任務ID,整個請求中需要保持一致,32位唯一ID。
       * @param sessionId:當前會話的id,若客戶端請求時傳入則原樣返回,否則由服務端自動生成32位唯一ID。
       * @param ret_code:參見錯誤碼,出現STREAM_INPUT_TTS_EVENT_TASK_FAILED事件時有效,可查閱http://bestwisewords.com/document_detail/459864.html。
       * @param error_msg:詳細錯誤信息,出現STREAM_INPUT_TTS_EVENT_TASK_FAILED事件時有效。
       * @param timestamp:合成結果中時間戳相關信息。
       * @param all_response:完整的json string格式返回消息,可從中解析需要的信息。
       */
      - (void)onStreamInputTtsEventCallback:(StreamInputTtsCallbackEvent)event taskId:(char*)taskid sessionId:(char*)sessionId ret_code:(int)ret_code error_msg:(char*)error_msg timestamp:(char*)timestamp all_response:(char*)all_response;

      StreamInputTtsCallbackEvent事件列表:

      名稱

      說明

      TTS_EVENT_SYNTHESIS_STARTED

      語音合成開始,準備播放。

      TTS_EVENT_SENTENCE_BEGIN

      服務端檢測到了一句話的開始。

      TTS_EVENT_SENTENCE_SYNTHESIS

      增量返回語音合成的結果,包含最新的音頻和時間戳,句內全量,句間增量。

      TTS_EVENT_SENTENCE_END

      服務端檢測到了一句話的結束,返回該句的全量時間戳。

      TTS_EVENT_SYNTHESIS_COMPLETE

      服務端檢測到了一句話的結束,返回該句的全量時間戳。

      TTS_EVENT_TASK_FAILED

      語音合成發生錯誤,詳見ret_code和error_msg。

    • onStreamInputTtsDataCallback:合成數據回調。

      /**
       * 合成數據回調。
       * @param data:合成的音頻數據,寫入播放器。
       */
      void onStreamInputTtsDataCallback(byte[] data);

調用步驟

  1. 初始化SDK和播放組件。

  2. 根據業務需求設置參數。

  3. 調用startStreamInputTts開始進行流式文本語音合成。

  4. 調用sendStreamInputTts持續發送待合成文本。在合成數據回調中,將數據寫入播放器進行播放,建議使用流式播放。

  5. 調用stopStreamInputTts表示文本發送完成,等待合成完畢。

  6. 收到語音合成結束的回調。

代碼示例

  • 開始語音合成

    NSMutableDictionary *ticketJsonDict = [NSMutableDictionary dictionary];
    [ticketJsonDict setObject:@"wss://nls-gateway-cn-beijing.aliyuncs.com/ws/v1" forKey:@"url"]; // 必填
    [ticketJsonDict setObject:@"10000" forKey:@"complete_waiting_ms"];
    //獲取賬號訪問憑證:
    [_utils getTicket:ticketJsonDict Type:get_token_from_server_for_online_features];
    if ([ticketJsonDict objectForKey:@"token"] != nil) {
        NSString *tokenValue = [ticketJsonDict objectForKey:@"token"];
        if ([tokenValue length] == 0) {
            TLog(@"The 'token' key exists but the value is empty.");
        }
    } else {
        TLog(@"The 'token' key does not exist.");
    }
    NSError *error;
    NSData *ticketJsonData = [NSJSONSerialization dataWithJSONObject:ticketJsonDict options:0 error:&error];
    NSString *ticket = [[NSString alloc] initWithData:ticketJsonData encoding:NSUTF8StringEncoding];
    
    NSDictionary *paramsJsonDict = @{
        @"voice": @"zhixiaoxia",
        @"format": @"pcm",
        @"sample_rate": @(16000),
        @"volume": @(50),
        @"speech_rate": @(0),
        @"pitch_rate": @(0),
        @"enable_subtitle": @(YES)
    };
    NSData *paramsJsonData = [NSJSONSerialization dataWithJSONObject:paramsJsonDict options:0 error:&error];
    NSString *parameters = [[NSString alloc] initWithData:paramsJsonData encoding:NSUTF8StringEncoding];
    
    _streamInputTtsSdk = [StreamInputTts get_instance];
    _streamInputTtsSdk.delegate = self;
    
    int ret = [_streamInputTtsSdk startStreamInputTts:[ticket UTF8String] parameters:[parameters UTF8String] sessionId:nil logLevel:NUI_LOG_LEVEL_VERBOSE saveLog:NO];
  • 流式發送合成文本

    NSString * sentence = @"番茄炒蛋怎么做?";
    [_streamInputTtsSdk sendStreamInputTts:[sentence UTF8String]]
  • 結束語音合成

    [_streamInputTtsSdk stopStreamInputTts];
  • 回調處理

    • onStreamInputTtsEventCallback:流式文本語音合成事件回調,根據語音合成狀態控制播放器。

      - (void)onStreamInputTtsEventCallback:(StreamInputTtsCallbackEvent)event taskId:(char*)taskid sessionId:(char*)sessionId ret_code:(int)ret_code error_msg:(char*)error_msg timestamp:(char*)timestamp all_response:(char*)all_response {
          NSString *log = [NSString stringWithFormat:@"\n事件回調(%d):%s", event, all_response];
          TLog(@"%@", log);
          
          if (event == TTS_EVENT_SYNTHESIS_STARTED) {
              TLog(@"onStreamInputTtsEventCallback TTS_EVENT_SYNTHESIS_STARTED");
              // 合成啟動,啟動播放器
              [_audioController startPlayer];
          } else if (event == TTS_EVENT_SENTENCE_BEGIN) {
              TLog(@"onStreamInputTtsEventCallback TTS_EVENT_SENTENCE_BEGIN");
          } else if (event == TTS_EVENT_SENTENCE_SYNTHESIS) {
              TLog(@"onStreamInputTtsEventCallback TTS_EVENT_SENTENCE_SYNTHESIS");
          } else if (event == TTS_EVENT_SENTENCE_END) {
              TLog(@"onStreamInputTtsEventCallback TTS_EVENT_SENTENCE_END");
          } else if (event == TTS_EVENT_SYNTHESIS_COMPLETE) {
              TLog(@"onStreamInputTtsEventCallback TTS_EVENT_SYNTHESIS_COMPLETE");
              // 注意這里的event事件是指語音合成完成,而非播放完成,播放完成需要由voicePlayer對象來進行通知
              [_audioController drain];
          } else if (event == TTS_EVENT_TASK_FAILED) {
              TLog(@"onStreamInputTtsEventCallback TTS_EVENT_TASK_FAILED:%s", error_msg);
              // 注意這里的event事件是指語音合成完成,而非播放完成,播放完成需要由voicePlayer對象來進行通知
              [_audioController drain];
          }
      }
    • onStreamInputTtsDataCallback:語音合成數據回調,將回調中的合成數據寫入播放器進行播放。

      - (void)onStreamInputTtsDataCallback:(char*)buffer len:(int)len {
          NSString *log = [NSString stringWithFormat:@"\n音頻回調 %d bytes", len];
          TLog(log);
          dispatch_async(dispatch_get_main_queue(), ^{
              self.logTextView.text = [self.logTextView.text stringByAppendingString:log];
              NSRange bottom = NSMakeRange(self.logTextView.text.length -1, 1);
              [self.logTextView scrollRangeToVisible:bottom];
          });
          if (buffer != NULL && len > 0) {
              [_audioController write:(char*)buffer Length:(unsigned int)len];
          }
      }