1. 程式人生 > 其它 >音視訊開發者的福音,快速整合AI配音能力

音視訊開發者的福音,快速整合AI配音能力

  音視訊內容創作者對剪輯應用中的AI配音需求與日俱增。它的優點很多,不光可以解決僱傭人力配音的成本以及創作者本身的口音、語言等限制,還可以大幅提升生產效率。比如,短視訊的播放時間短的幾十秒,長的vlog型別視訊有4-5分鐘,使用AI配音功能可以在短時間內實現多個剪輯需求。

  HMS Core音訊編輯服務(Audio Editor Kit)提供AI配音服務,幫助開發者在應用中輕鬆構建語音合成功能,一鍵輸出文字即可轉換語音。它支援乖萌童聲,親切女聲,陽光男聲,英文男聲、女聲等多種風格音色,還可以定製自己想要的音色。音色自然流暢,情感豐富,滿足有聲閱讀、音訊內容製作、剪輯等多種開發者關注的熱門場景。

  開發實戰

  1.開發準備

  詳細準備步驟可參考華為開發者聯盟官網:

  https://developer.huawei.com/consumer/cn/doc/development/Media-Guides/config-agc-0000001154009063?ha_source=hms1

  2.編輯工程整合

  2.1設定應用的鑑權資訊

  開發者需要通過api_key或者Access Token來設定應用鑑權資訊。

  (推薦)通過setAccessToken方法設定Access Token,在應用啟動時初始化設定

  HAEApplication.getInstance().setAccessToken("your access token");

  通過setApiKey方法設定api_key,在應用啟動時初始化設定一次即可,無需多次設定。

  HAEApplication.getInstance().setApiKey("your ApiKey");

  2.2初始化環境

  初始化音訊編輯管理類、建立時間線以及需要的泳道。

  // 建立音訊編輯管理類

  HuaweiAudioEditor mEditor = HuaweiAudioEditor.create(mContext);

  // 初始化Editor的執行環境

  mEditor.initEnvironment();

  // 建立時間線

  HAETimeLine mTimeLine = mEditor.getTimeLine();

  // 建立泳道

  HAEAudioLane audioLane = mTimeLine.appendAudioLane();

  匯入音樂。

  // 泳道末尾新增音訊資源

  HAEAudioAsset audioAsset = audioLane.appendAudioAsset("/sdcard/download/test.mp3", mTimeLine.getCurrentTime());

  3. AI配音功能整合

  呼叫HAEAiDubbingEngine實現AI配音功能。

  // 通過此配置類來對AI配音引擎進行配置

  HAEAiDubbingConfig haeAiDubbingConfig = new HAEAiDubbingConfig()

  // 設定音量

  .setVolume(volumeVal)

  // 設定音速

  .setSpeed(speedVal)

  // 設定發音人

  .setType(defaultSpeakerType);

  // 單個AI配音任務回撥

  HAEAiDubbingCallback callback = new HAEAiDubbingCallback() {

  @Override

  public void onError(String taskId, HAEAiDubbingError err) {

  // error處理

  }

  @Override

  public void onWarn(String taskId, HAEAiDubbingWarn warn) {}

  @Override

  public void onRangeStart(String taskId, int start, int end) {}

  @Override

  public void onAudioAvailable(String taskId, HAEAiDubbingAudioInfo haeAiDubbingAudioFragment, int i, Pair<Integer, Integer> pair, Bundle bundle) {

  // 開始接收檔案,儲存成檔案

  }

  @Override

  public void onEvent(String taskId, int eventID, Bundle bundle) {

  // The synthesis is complete.

  if (eventID == HAEAiDubbingConstants.EVENT_SYNTHESIS_COMPLETE) {

  // AI配音任務處理結束,即合成的音訊資料全部處理完畢

  }

  }

  @Override

  public void onSpeakerUpdate(List<HAEAiDubbingSpeaker> speakerList, List<String> lanList,

  List<String> lanDescList) { }

  };

  // AI配音引擎

  HAEAiDubbingEngine mHAEAiDubbingEngine = new HAEAiDubbingEngine(haeAiDubbingConfig);

  // 設定AI配音任務播放過程偵聽

  mHAEAiDubbingEngine.setAiDubbingCallback(callback);

  // 實時AI配音並播放API,text傳入待轉語音的文字,modeAI配音任務播放模式

  String taskId = mHAEAiDubbingEngine.speak(text, mode);

  // 暫停播放

  mHAEAiDubbingEngine.pause();

  // 恢復播放

  mHAEAiDubbingEngine.resume();

  // 關閉合成

  mHAEAiDubbingEngine.stop();