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

HarmonyOS Next SDK

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

前提條件

下載安裝

  1. 下載V1.5.016.napi.001.003_5d87aea0fa4f42e1b5bb254573fbbcc6af546c6b.tar.gz

  2. 以arkts HAR包的形式進行集成。解壓壓縮包,其中entry/libs/neonui.har 是SDK生成的HAR包文件,在用戶工程項目中導入調用即可。如果需要HarmonyOS Next CPP接入方式,可在壓縮包的native/libs和native/include中獲得動態庫和頭文件。

  3. 使用DevEco Studio打開工程,其中錄音文件識別的示例代碼為FileTranscriberPage.ets文件,替換UserKey.ets中 UserKey類的Appkey和Token后,即可直接運行。

SDK關鍵接口

  • initialize:初始化SDK。

    /**
     * 初始化SDK,SDK為單例,請先釋放后再次進行初始化。請勿在UI線程調用,可能會引起阻塞
     * @param callback: 事件監聽回調,參見下文回調說明
     * @param parameters: 初始化參數,參見接口說明
     * @param level: log打印級別,值越小打印越多
     * @param save_log: 是否保存log信息,使用默認值false即可。
     * @return: 參見錯誤碼
     */
    public initializeFileTrans(callback:INativeFileTransCallback ,
    				parameters:string ,
    				level:number ,
    				save_log:boolean=false):number 

    其中,INativeFileTransCallback類型需要實現的回調是onFileTransEventCallback。

    onFileTransEventCallback:文件識別事件回調。

    /**
     * SDK主要事件回調
     * @param event: 回調事件,參見如下事件列表
     * @param resultCode: 參見錯誤碼,在出現EVENT_ASR_ERROR事件時有效
     * @param arg2: 保留參數
     * @param asrResult: 語音識別結果
     * @param taskId: 轉寫任務ID
     */
    onFileTransEventCallback(event:Constants.NuiEvent, resultCode:number, arg2:number,
    				asrResult:AsrResult, taskId:string):void

    事件列表:

    名稱

    說明

    EVENT_FILE_TRANS_CONNECTED

    連接文件識別服務成功

    EVENT_FILE_TRANS_UPLOADED

    上傳文件成功

    EVENT_FILE_TRANS_RESULT

    識別最終結果

    EVENT_ASR_ERROR

    根據錯誤碼信息判斷出錯原因

  • setParams:以JSON格式設置SDK參數。

    /**
     * 以JSON格式設置參數
     * @param params: 參見接口說明
     * @return: 參見錯誤碼
     */
    public setParams(params:string):number
  • startFileTranscriber:開始文件識別。

    /**
     * 開始識別
     * @param params: 識別參數,參見接口說明
     * @param taskId: 開始轉寫的任務ID,SDK生成隨機字符串
     * @return: 參見錯誤碼
     */
    public startFileTranscriber(params:string, task_id:ArrayBuffer):number
  • cancelFileTranscriber:結束識別。

    /**
     * 結束識別
     * @return: 參見錯誤碼
     */
    public cancelFileTranscriber(task_id:string):number
  • release:釋放SDK。

    /**
     * 釋放SDK資源
     * @return: 參見錯誤碼
     */
    public release():number

調用步驟

  1. 創建SDK類對象實例

  2. 初始化SDK。

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

  4. 調用startFileTranscriber開始識別。

  5. 在EVENT_FILE_TRANS_RESULT事件中獲取最終識別結果。

  6. 結束調用,使用release接口釋放SDK資源。

代碼示例

說明

接口默認采用GetInstance獲得單例,您如果有多例需求,也可以直接new對象進行使用。

NUI SDK初始化

//初始化SDK,注意用戶需要在Auth.getAliYunTicket中填入相關ID信息才可以使用。
    let ret:number = this.g_asrinstance.initializeFileTrans(this.cbhandle, this.genInitParams(asset_path,debug_path), Constants.LogLevel.LOG_LEVEL_VERBOSE, false);
    console.info("result = " + ret);
    if (ret == Constants.NuiResultCode.SUCCESS) {
    } else {
      //拋出錯誤異常信息。
    }

    //設置相關識別參數,具體參考API文檔
    this.g_asrinstance.setParams(this.genParams());

其中,genInitParams生成為String JSON字符串,包含資源目錄和用戶信息。其中用戶信息包含如下字段。 genParams生成String JSON字符串格式的部分參數,在initializeFileTrans()之后, start之前進行設置。

  genInitParams(workpath:string, debugpath:string):string {
    let str:string = "";
    //獲取token方式:

    let object:Map<string, string|number|boolean|object> = new Map();

    //賬號和項目創建
    //  ak_id ak_secret app_key如何獲得,請查看http://bestwisewords.com/document_detail/72138.html
    object.set("app_key", UserKey.app_key); // 必填

    //方法1:
    //  首先ak_id ak_secret app_key如何獲得,請查看http://bestwisewords.com/document_detail/72138.html
    //  然后請看 http://bestwisewords.com/document_detail/466615.html 使用其中方案一獲取臨時憑證
    //  此方案簡介: 遠端服務器生成具有有效時限的臨時憑證, 下發給移動端進行使用, 保證賬號信息ak_id和ak_secret不被泄露
    //  獲得Token方法(運行在APP服務端): http://bestwisewords.com/document_detail/450255.html?spm=a2c4g.72153.0.0.79176297EyBj4k
    object.set("token", UserKey.token); // 必填

    //方法2:
    //  STS獲取臨時憑證方法暫不支持

    //方法3:(強烈不推薦,存在阿里云賬號泄露風險)
    //  參考Auth類的實現在端上訪問阿里云Token服務獲取SDK進行獲取。請勿將ak/sk存在本地或端側環境。
    //  此方法優點: 端側獲得Token, 無需搭建APP服務器。
    //  此方法缺點: 端側獲得ak/sk賬號信息, 極易泄露。
    //            JSONObject object = Auth.getAliYunTicket();

    object.set("device_id", "***"/*Utils.getDeviceId()*/); // 必填, 推薦填入具有唯一性的id, 方便定位問題
    object.set("url", UserKey.url_file_trans); // 默認
    object.set("workspace", workpath); // 必填, 且需要有讀寫權限

    //當初始化SDK時的save_log參數取值為true時,該參數生效。表示是否保存音頻debug,該數據保存在debug目錄中,需要確保debug_path有效可寫。
    //            object.put("save_wav", "true");
    //debug目錄,當初始化SDK時的save_log參數取值為true時,該目錄用于保存中間音頻文件。
    object.set("debug_path", debugpath);

    // FullMix = 0   // 選用此模式開啟本地功能并需要進行鑒權注冊
    // FullCloud = 1
    // FullLocal = 2 // 選用此模式開啟本地功能并需要進行鑒權注冊
    // AsrMix = 3    // 選用此模式開啟本地功能并需要進行鑒權注冊
    // AsrCloud = 4
    // AsrLocal = 5  // 選用此模式開啟本地功能并需要進行鑒權注冊
    object.set("service_mode", Constants.ModeFullCloud); // 必填
    str = MapToJson(object)

    console.info("configinfo genInitParams:" + str);
    return str;
  }

  genParams():string {
    let params:string = "";
    let nls_config:Map<string, string|number|boolean|object> = new Map();
    nls_config.set("enable_intermediate_result", true);

    let parameters:Map<string, string|number|boolean|object> = new Map();
    parameters.set("nls_config", Object( JSON.parse(MapToJson(nls_config)) ) );

    params = MapToJson(parameters);//parameters.toString();
    console.log("configinfo genParams" + params)
    return params;
  }

開始識別

調用startFileTranscriber方法開啟識別。

let task_id:ArrayBuffer = new ArrayBuffer(32);
let ret:number = this.g_asrinstance.startFileTranscriber(this.genDialogParams(), task_id);


genDialogParams():string {
    let params:string = "";
    let dialog_param:Map<string, string|number|boolean|object> = new Map();
    //若想在運行時切換app_key
    //dialog_param.put("app_key", "");
    let debug_path:string = this.resourceDir
    dialog_param.set("file_path", debug_path + "/2.wav"); //使用DevEcoStudio工程目錄resources/resfile/2.wav文件作為輸入文件進行轉寫

    
    let nls_config:Map<string, string|number|boolean|object> = new Map();
    nls_config.set("format", "wav"); //和 "file_path"字段的語音文件編碼格式匹配。


    dialog_param.set("nls_config", Object( JSON.parse(MapToJson(nls_config)) ) );

    params = MapToJson(dialog_param);

    console.info("configinfo dialog params: " + params);
    return params;
  }

回調處理

onFileTransEventCallback:NUI SDK事件回調,請勿在事件回調中調用SDK的接口,可能引起死鎖。

class NativeNuiCallbackHandle implements  INativeFileTransCallback{
  asrmessage:string;
  message:string;
  task_result: Map<string, string> = new Map();  //緩存多個文件的識別結果
  task_result_all:string="";                     //所有文件的識別結果匯總字符串
  constructor() {
    this.asrmessage=""
    this.message=""
  }

  onFileTransEventCallback(event:Constants.NuiEvent, resultCode:number, finish:number,
				asrResult:AsrResult, taskId:string):void{

    let asrinfo:string = ""
    console.info("event=" + event + " task_id " + taskId);
    if (event == Constants.NuiEvent.EVENT_FILE_TRANS_UPLOADED) {
      this.message = "EVENT_FILE_TRANS_UPLOADED"
      showToast("完成上傳,正在轉寫...");
    } else if (event == Constants.NuiEvent.EVENT_FILE_TRANS_RESULT) {
      this.message = "EVENT_FILE_TRANS_RESULT"
      showToast("轉寫完成");
    } else if (event == Constants.NuiEvent.EVENT_ASR_ERROR) {
      this.message = "EVENT_ASR_ERROR"
      console.info("error happened: " + resultCode);
      showToast("error happened: " + resultCode);
    }

    if (asrResult) {
      asrinfo = asrResult.asrResult
      console.log(`asrinfo is ${asrinfo}`)
      if (!asrinfo){
        console.log(`asrinfo is null, with event ${event}`)
        return
      }
      let asrresult_json:object|null = JSON.parse(asrResult.asrResult)
      console.log(JSON.stringify(asrresult_json))
      if (asrresult_json) {
        let payload:object|null = asrresult_json["flash_result"];
        if (payload) {
          //console.log(JSON.stringify(payload))
          let filetransresultarray:Array<object> = payload["sentences"]
          let result_temp:string=""
          for (let i=0;i<filetransresultarray.length;i++){
            result_temp = result_temp +filetransresultarray[i]["text"]
          }
          this.asrmessage=result_temp

          this.task_result.set(taskId, this.asrmessage)
        }
      }
    }
    this.task_result_all=""
    let index:number = 0
    this.task_result.forEach((value:string, key:string)=>{
      this.task_result_all += `${index}==>${key}:${value};;\n`
      index += 1
    })
  }
}

取消識別

常見問題

鴻蒙NEXT SDK錄音文件識別極速版,通過任務ID查詢任務狀態用哪個API?

不支持通過任務ID查詢任務狀態,任務中處理安卓端回調就是當前任務的狀態。

鴻蒙NEXT SDK是否可以上傳OPUS音頻數據,實現實時語音轉文字?

ASR中一句話識別和錄音文件極速版支持OPUS數據,實時語音轉文字僅支持PCM編碼、16 bit采樣位數、單聲道(mono)。具體詳情,請參見接口說明

接口調用超時引起的應用無響應退出問題如何處理?

可以參考示例代碼中的OneSentenceAsrWorker.ets的異步線程調用的實現方式。