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

Android SDK

更新時(shí)間:

本文介紹了如何使用阿里云智能語(yǔ)音服務(wù)提供的Android NUI SDK,包括SDK下載安裝、關(guān)鍵接口及代碼示例。

前提條件

下載安裝

  1. 下載SDK

    重要

    下載后請(qǐng)?jiān)跇永跏蓟a中替換您的阿里云賬號(hào)信息、AppkeyToken才可運(yùn)行。

    對(duì)象

    說(shuō)明

    SDK名稱(chēng)

    智能語(yǔ)音交互移動(dòng)端SDK

    開(kāi)發(fā)者

    阿里云計(jì)算有限公司

    SDK版本

    2.6.3-01B

    SDK包名

    com.alibaba.idst.nui

    SDK更新時(shí)間

    2024-12-19

    SDK大小

    MinSizeRel/nuisdk-release.aar

    7.2MB

    RelWithDebugInfo/nuisdk-release.aar

    9.7MB

    SDK MD5值

    MinSizeRel/nuisdk-release.aar

    c8e84d882a776797179b07cb55325a17

    RelWithDebugInfo/nuisdk-release.aar

    3bd1e2c2423c23e6522b7bc3ac072ec9

    隱私政策

    智能語(yǔ)音交互產(chǎn)品隱私政策

    SDK整合包下載

    下載Android SDK

    類(lèi)別

    兼容范圍

    系統(tǒng)

    支持Android 4.0 以上版本,API LEVEL 14

    架構(gòu)

    armeabi-v7a,arm64-v8a,x86,x86_64

    此SDK還包含如下功能,若未支持您想要的功能,請(qǐng)去對(duì)應(yīng)文檔獲取SDK。

    功能

    是否支持

    一句話(huà)識(shí)別

    實(shí)時(shí)語(yǔ)音識(shí)別

    語(yǔ)音合成

    實(shí)時(shí)長(zhǎng)文本語(yǔ)音合成

    流式文本語(yǔ)音合成

    離線(xiàn)語(yǔ)音合成

    錄音文件識(shí)別極速版

    喚醒及命令詞

    聽(tīng)悟?qū)崟r(shí)推流

  2. 解壓ZIP包,在app/libs目錄下獲取AAR格式的SDK包,將AAR包集成到您的工程項(xiàng)目中進(jìn)行依賴(lài)。若需要Android CPP接入方式,則可在ZIP包的android_libs和android_include中獲得動(dòng)態(tài)庫(kù)和頭文件。

  3. 使用Android Studio打開(kāi)此工程查看參考代碼實(shí)現(xiàn),其中語(yǔ)音合成示例代碼為StreamInputTtsBasicActivity.java文件,替換appkeytoken后可直接運(yùn)行。

關(guān)鍵接口

  • startStreamInputTts:開(kāi)始運(yùn)行流式TTS。

    /**
     * 開(kāi)始運(yùn)行流式TTS。請(qǐng)勿在UI線(xiàn)程調(diào)用,可能會(huì)引起阻塞。
     * @param callback:事件監(jiān)聽(tīng)回調(diào),參見(jiàn)下文具體回調(diào)。
     * @param ticket:json string形式的初始化參數(shù),參見(jiàn)下方說(shuō)明。
     * @param parameters:json string形式的初始化參數(shù),參見(jiàn)下方說(shuō)明。
     * @param session_id:當(dāng)前會(huì)話(huà)的id,若客戶(hù)端請(qǐng)求時(shí)傳入則原樣返回,否則由服務(wù)端自動(dòng)生成32位唯一ID。
     * @param level:log打印級(jí)別,值越小打印越多。
     * @param save_log:是否保存log為文件,存儲(chǔ)目錄為ticket中的debug_path字段值。注意,log文件無(wú)上限,請(qǐng)注意持續(xù)存儲(chǔ)導(dǎo)致磁盤(pán)存滿(mǎn)。
     * @return:參見(jiàn)錯(cuò)誤碼:http://bestwisewords.com/document_detail/459864.html。
     */
    public synchronized int startStreamInputTts(INativeStreamInputTtsCallback callback,
                                                String ticket, String parameters,
                                                String session_id, int log_level,
                                                boolean save_log);
    

    其中,INativeStreamInputTtsCallback類(lèi)型包含如下回調(diào)。

    • onStreamInputTtsEventCallback:SDK事件回調(diào)。

      /**
       * 事件回調(diào)
       * @param event:回調(diào)事件,參見(jiàn)如下事件列表。
       * @param task_id:整個(gè)實(shí)時(shí)語(yǔ)音合成會(huì)話(huà)的任務(wù)ID,整個(gè)請(qǐng)求中需要保持一致,32位唯一ID。
       * @param session_id:當(dāng)前會(huì)話(huà)的id,若客戶(hù)端請(qǐng)求時(shí)傳入則原樣返回,否則由服務(wù)端自動(dòng)生成32位唯一ID。
       * @param ret_code:參見(jiàn)錯(cuò)誤碼,出現(xiàn)STREAM_INPUT_TTS_EVENT_TASK_FAILED事件時(shí)有效,可查閱http://bestwisewords.com/document_detail/459864.html。
       * @param error_msg:詳細(xì)錯(cuò)誤信息,出現(xiàn)STREAM_INPUT_TTS_EVENT_TASK_FAILED事件時(shí)有效。
       * @param timestamp:合成結(jié)果中時(shí)間戳相關(guān)信息。
       * @param all_response:完整的json string格式返回消息,可從中解析需要的信息。
       */
      void onStreamInputTtsEventCallback(StreamInputTtsEvent event,
                                         String task_id, String session_id,
                                         int ret_code, String error_msg,
                                         String timestamp, String all_response);

      事件列表:

      名稱(chēng)

      說(shuō)明

      STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED

      語(yǔ)音合成開(kāi)始,準(zhǔn)備播放。

      STREAM_INPUT_TTS_EVENT_SENTENCE_BEGIN

      服務(wù)端檢測(cè)到了一句話(huà)的開(kāi)始。

      STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESIS

      增量返回語(yǔ)音合成的結(jié)果,包含最新的音頻和時(shí)間戳,句內(nèi)全量,句間增量。

      STREAM_INPUT_TTS_EVENT_SENTENCE_END

      服務(wù)端檢測(cè)到了一句話(huà)的結(jié)束,返回該句的全量時(shí)間戳。

      STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE

      服務(wù)端檢測(cè)到了一句話(huà)的結(jié)束,返回該句的全量時(shí)間戳。

      STREAM_INPUT_TTS_EVENT_TASK_FAILED

      語(yǔ)音合成發(fā)生錯(cuò)誤,詳見(jiàn)ret_code和error_msg。

    • onStreamInputTtsDataCallback:合成數(shù)據(jù)回調(diào)。

      /**
       * 合成數(shù)據(jù)回調(diào)。
       * @param data:合成的音頻數(shù)據(jù),寫(xiě)入播放器。
       */
      void onStreamInputTtsDataCallback(byte[] data);

      其中,ticket初始化相關(guān)參數(shù)說(shuō)明,生成示例參見(jiàn)下方代碼示例:

      參數(shù)

      類(lèi)型

      是否必選

      說(shuō)明

      url

      String

      服務(wù)地址,默認(rèn)使用北京服務(wù)。

      app_key

      String

      管控臺(tái)創(chuàng)建項(xiàng)目的appkey。

      token

      String

      請(qǐng)確保該Token可以使用并在有效期內(nèi)。

      debug_path

      String

      當(dāng)save_log為true時(shí),將會(huì)把運(yùn)行日志存儲(chǔ)在此路徑下。

      complete_waiting_ms

      Integer

      調(diào)用stop后等待STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE的超時(shí)時(shí)間,單位ms,默認(rèn)10s。

      parameters任務(wù)相關(guān)參數(shù)說(shuō)明,生成示例參見(jiàn)下方代碼示例:

      參數(shù)

      類(lèi)型

      是否必選

      說(shuō)明

      voice

      String

      說(shuō)話(huà)人音色。

      format

      String

      音頻編碼格式,如“pcm”“wav”“mp3”。

      sample_rate

      Integer

      音頻采樣率,24000,可選擇8000、16000、24000、48000。

      volume

      Integer

      朗讀音量,范圍是0~100,默認(rèn)50。

      speech_rate

      Integer

      朗讀語(yǔ)速,范圍是-500~500,默認(rèn)是0。

      pitch_rate

      Integer

      朗讀語(yǔ)調(diào),范圍是-500~500,默認(rèn)是0。

      enable_subtitle

      Boolean

      開(kāi)啟字級(jí)別時(shí)間戳。更多使用方法,請(qǐng)參見(jiàn)時(shí)間戳功能介紹

  • stopStreamInputTts: 停止語(yǔ)音合成

    /**
     * 停止語(yǔ)音合成,等待接收完所有合成數(shù)據(jù)直到STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE。
     * @return:參見(jiàn)錯(cuò)誤碼:http://bestwisewords.com/document_detail/459864.html。
     */
    public synchronized int stopStreamInputTts();
  • sendStreamInputTts:發(fā)送待合成文本

    /**
     * 發(fā)送待合成文本
     * @param text:待合成文本,僅支持采用UTF-8編碼的文本輸入。單次合成推薦少于5000字,總計(jì)不超過(guò)10萬(wàn)字,其中1個(gè)漢字、1個(gè)英文字母、1個(gè)標(biāo)點(diǎn)或1個(gè)句子中間空格均算作1個(gè)字符。
     * @return:參見(jiàn)錯(cuò)誤碼:http://bestwisewords.com/document_detail/459864.html。
     */
    public synchronized int sendStreamInputTts(String text);

調(diào)用步驟

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

  2. 根據(jù)業(yè)務(wù)需求設(shè)置參數(shù)。

  3. 調(diào)用startStreamInputTts開(kāi)始進(jìn)行流式文本語(yǔ)音合成。

  4. 調(diào)用sendStreamInputTts持續(xù)發(fā)送待合成文本。在合成數(shù)據(jù)回調(diào)中,將數(shù)據(jù)寫(xiě)入播放器進(jìn)行播放,建議使用流式播放。

  5. 調(diào)用stopStreamInputTts表示文本發(fā)送完成,等待合成完畢。

  6. 收到語(yǔ)音合成結(jié)束的回調(diào)。

代碼示例

開(kāi)始語(yǔ)音合成

//SDK初始化
NativeNui stream_input_tts_instance = new NativeNui(Constants.ModeType.MODE_STREAM_INPUT_TTS);
int ret = stream_input_tts_instance.startStreamInputTts(
        new INativeStreamInputTtsCallback() {},
        genTicket(), genParameters(), "",
        Constants.LogLevel.toInt(Constants.LogLevel.LOG_LEVEL_VERBOSE), false);

其中g(shù)enTicket生成為String JSON串,包含用戶(hù)信息。其中用戶(hù)信息包含如下字段,獲取方式請(qǐng)參考接口說(shuō)明文檔。

/**
 * ticket生成示例,詳見(jiàn)Demo工程中代碼示例
 */
private String genTicket() {
    String str = "";
    try {
        //鄭重提示:
        //  語(yǔ)音交互服務(wù)需要先準(zhǔn)備好賬號(hào),并開(kāi)通相關(guān)服務(wù)。具體步驟請(qǐng)查看:
        //    http://bestwisewords.com/zh/isi/getting-started/start-here
        //
        //原始賬號(hào):
        //  賬號(hào)(子賬號(hào))信息主要包括AccessKey ID(后續(xù)簡(jiǎn)稱(chēng)為ak_id)和AccessKey Secret(后續(xù)簡(jiǎn)稱(chēng)為ak_secret)。
        //  此賬號(hào)信息一定不可存儲(chǔ)在app代碼中或移動(dòng)端側(cè),以防賬號(hào)信息泄露造成資費(fèi)損失。
        //
        //STS臨時(shí)憑證:
        //  由于賬號(hào)信息下發(fā)給客戶(hù)端存在泄露的可能,阿里云提供的一種臨時(shí)訪(fǎng)問(wèn)權(quán)限管理服務(wù)STS(Security Token Service)。
        //  STS是由賬號(hào)信息ak_id和ak_secret,通過(guò)請(qǐng)求生成臨時(shí)的sts_ak_id/sts_ak_secret/sts_token
        //  (為了區(qū)別原始賬號(hào)信息和STS臨時(shí)憑證, 命名前綴sts_表示STS生成的臨時(shí)憑證信息)
        //什么是STS:http://bestwisewords.com/zh/ram/product-overview/what-is-sts
        //STS SDK概覽:http://bestwisewords.com/zh/ram/developer-reference/sts-sdk-overview
        //STS Python SDK調(diào)用示例:http://bestwisewords.com/zh/ram/developer-reference/use-the-sts-openapi-example
        //
        //賬號(hào)需求說(shuō)明:
        //  若使用離線(xiàn)功能(離線(xiàn)語(yǔ)音合成、喚醒), 則必須app_key、ak_id和ak_secret,或app_key、sts_ak_id、sts_ak_secret和sts_token
        //  若使用在線(xiàn)功能(語(yǔ)音合成、實(shí)時(shí)轉(zhuǎn)寫(xiě)、一句話(huà)識(shí)別、錄音文件轉(zhuǎn)寫(xiě)等), 則只需app_key和token
        JSONObject object = Auth.getTicket(Auth.GetTicketMethod.GET_TOKEN_FROM_SERVER_FOR_ONLINE_FEATURES);
        if (!object.containsKey("token")) {
            Log.e(TAG, "Cannot get token!!!");
        }
        object.put("url", "wss://nls-gateway-cn-beijing.aliyuncs.com/ws/v1"); // 默認(rèn),必填
        str = object.toString();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Log.i(TAG, "UserContext:" + str);
    return str;
}

genParameters生成為String JSON串,包含參數(shù)信息,請(qǐng)參考接口說(shuō)明文檔。

/**
 * parameters生成示例,詳見(jiàn)Demo工程中代碼示例
 */
private String genParameters() {
    String str = "";
    try {
        JSONObject object = new JSONObject();
        object.put("enable_subtitle", true);
        object.put("voice", "zhixiaoxia");
        object.put("format", "pcm");
        object.put("sample_rate", 16000);
        object.put("volume", 50);
        object.put("speech_rate", 0);
        object.put("pitch_rate", 0);
        str = object.toString();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Log.i(TAG, "user parameters:" + str);
    return str;
}

流式發(fā)送合成文本

String sentence = "番茄炒蛋怎么做?";
stream_input_tts_instance.sendStreamInputTts(sentence);

結(jié)束語(yǔ)音合成

stream_input_tts_instance.stopStreamInputTts();

回調(diào)處理

  • onStreamInputTtsEventCallback:流式文本語(yǔ)音合成事件回調(diào),根據(jù)語(yǔ)音合成狀態(tài)控制播放器。

    public void onStreamInputTtsEventCallback(
                        INativeStreamInputTtsCallback.StreamInputTtsEvent event, String task_id,
                        String session_id, int ret_code, String error_msg,
                        String timestamp, String all_response) {
        Log.i(TAG, "stream input tts event:" + event + " session id " + session_id + " session id " + task_id + " ret " + ret_code);
        if (event == StreamInputTtsEvent.STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED) {
            Log.i(TAG, "STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED");
            mAudioTrack.play();
            Log.i(TAG, "start play");
        } else if (event == StreamInputTtsEvent.STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESIS) {
            Log.i(TAG, "STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESIS:" + timestamp);
        } else if (event == StreamInputTtsEvent.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE || event == StreamInputTtsEvent.STREAM_INPUT_TTS_EVENT_TASK_FAILED) {
            /*
             * 提示: STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE事件表示TTS已經(jīng)合成完并通過(guò)回調(diào)傳回了所有音頻數(shù)據(jù), 而不是表示播放器已經(jīng)播放完了所有音頻數(shù)據(jù)。
             */
            Log.i(TAG, "play end");
    
            // 表示推送完數(shù)據(jù), 當(dāng)播放器播放結(jié)束則會(huì)有playOver回調(diào)
            mAudioTrack.isFinishSend(true);
    
            if (event == StreamInputTtsEvent.STREAM_INPUT_TTS_EVENT_TASK_FAILED) {
                Log.e(TAG, "STREAM_INPUT_TTS_EVENT_TASK_FAILED error_code:" + ret_code + " errmsg:" + error_msg);
            }
        } else if (event == StreamInputTtsEvent.STREAM_INPUT_TTS_EVENT_SENTENCE_BEGIN) {
            Log.i(TAG, "STREAM_INPUT_TTS_EVENT_SENTENCE_BEGIN:" + all_response);
        } else if (event == StreamInputTtsEvent.STREAM_INPUT_TTS_EVENT_SENTENCE_END) {
            Log.i(TAG, "STREAM_INPUT_TTS_EVENT_SENTENCE_END:" + all_response);
        }
    }
  • onStreamInputTtsDataCallback:語(yǔ)音合成數(shù)據(jù)回調(diào),將回調(diào)中的合成數(shù)據(jù)寫(xiě)入播放器進(jìn)行播放。

    public void onStreamInputTtsDataCallback(byte[] data) {
          if (data.length > 0) {
              if (mEncodeType.equals("pcm")) {
                  mAudioTrack.setAudioData(data);
              }
          }
      }