如何基於 ZEGO SDK 實現 Android 變聲/混響/立體聲

来源:https://www.cnblogs.com/zegodeveloper/archive/2022/04/14/16146520.html
-Advertisement-
Play Games

在直播、語聊房、K 歌房場景中,為增加趣味性和互動性,玩家可以通過變聲來搞怪,通過混響烘托氣氛,通過立體聲使聲音更具立體感。ZegoExpress SDK 提供了多種預設的變聲、混響、混響回聲、立體聲效果,開發者可以靈活設置自己想要的聲音,在通話或直播過程中動態調整變聲、混響、混響回聲、虛擬立體聲,... ...


1 前言

在直播、語聊房、K 歌房場景中,為增加趣味性和互動性,玩家可以通過變聲來搞怪,通過混響烘托氣氛,通過立體聲使聲音更具立體感。ZegoExpress SDK 提供了多種預設的變聲、混響、混響回聲、立體聲效果,開發者可以靈活設置自己想要的聲音,在通話或直播過程中動態調整變聲、混響、混響回聲、虛擬立體聲,如果需要試聽,可以啟用耳返進行測試。

  • 變聲:通過改變用戶的音調,使輸出的聲音在感官上與原始聲音不同,實現男聲變女生等多種效果。
  • 混響:通過對聲音的特殊處理,製造不同環境的混響效果,讓聲音如同在音樂廳、大教堂等場景中發出一般。
  • 混響回聲:通過對聲音的特殊處理,可搭配變聲、混響以實現自定義各式各樣的聲音效果,例如空靈,機器人的聲音。
  • 虛擬立體聲:通過深度使用雙聲道技術,虛擬出發音源的各個位置角度,實現立體聲、3D 環繞音、聽聲辯位等效果。

您可通過 ZEGO 提供的 音效體驗 DEMO 體驗 SDK 預設的人聲效果。

本文將教你如何通過即構ZEGO sdk在Android端實現變聲、混響、立體聲。

2 示例源碼下載

請參考 下載示例源碼 獲取源碼。

相關源碼請查看 “/ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/voicechange” 目錄下的文件。

3 項目準備

在進行變聲/混響/立體聲之前,請確保:

** 接下來我們看看完整的實現流程。**

4 實現流程

4.1 變聲

4.1.1 設置預設變聲

調用 setVoiceChangerPreset 方法使用 SDK 預置的變聲效果。

ZegoVoiceChangerPreset 預置的變聲效果如下,開發者可以根據需要選擇:

類型名 描述 變聲類型
NONE 無變聲 -
MEN_TO_CHILD 男聲變童聲 變聲
MEN_TO_WOMEN 男聲變女聲 變聲
WOMEN_TO_CHILD 女聲變童聲 變聲
WOMEN_TO_MEN 女聲變男聲 變聲
FOREIGNER 外國人聲效 變聲
OPTIMUS_PRIME 擎天柱聲效 變聲
ANDROID 機器人聲效 變聲
ETHEREAL 空靈聲效 音色變換
MALE_MAGNETIC 磁性男 房間美聲
FEMALE_FRESH 清新女 房間美聲
MAJOR_C C大調電音 電音音效
MINOR_A A小調電音 電音音效
HARMONIC_MINOR 和聲小調電音 電音音效

以下示例代碼以“男聲變童聲”為例:

ZegoExpressEngine.getEngine().setVoiceChangerPreset(ZegoVoiceChangerPreset.MEN_TO_CHILD);

4.1.2 設置自定義變聲

若 SDK 預置的變聲效果無法滿足需求,開發者可以調用 ZegoVoiceChangerParam 方法,通過音高參數 “pitch” 設置自定義變聲,該參數取值範圍為 [-8.0, 8.0],值越大聲音越尖銳,預設值為 “0.0”(即無變聲)。

ZegoVoiceChangerParam voiceChangerParam = new ZegoVoiceChangerParam();
param.pitch = 2.0f;
ZegoExpressEngine.getEngine().setVoiceChangerParam(param);

4.2 混響

4.2.1 設置預設混響

調用 setReverbPreset 通過預設枚舉設置混響。

ZegoReverbPreset 預置的混響效果如下,開發者可以根據需要選擇:

類型名 描述 混響類型
NONE -
SOFT_ROOM 小房間 空間塑造
LARGE_ROOM 大房間 空間塑造
CONCERT_HALL 音樂廳 空間塑造
VALLEY 山谷 空間塑造
RECORDING_STUDIO 錄音室 空間塑造
BASEMENT 地下室 空間塑造
KTV KTV 空間塑造
POPULAR 流行 曲風
ROCK 搖滾 曲風
VOCAL_CONCERT 演唱會 空間塑造
GRAMO_PHONE 留聲機 空間塑造

以下示例代碼以“大房間”模式為例:

ZegoExpressEngine.getEngine().setReverbPreset(ZegoReverbPreset.LARGE_ROOM);

4.2.2 設置自定義混響

若 SDK 預設的混響類型無法滿足需求,開發者可以調用 ZegoReverbAdvancedParam 方法,通過相關參數搭配設置,實現開發者需要的混響效果(詳細參數說明請參考 API 文檔)。

ZegoReverbAdvancedParam reverbParam = new ZegoReverbAdvancedParam();
reverbParam.damping = 50.0; // 混響阻尼
reverbParam.reverberance = 50.0; // 餘響
reverbParam.roomSize = 50.0; // 房間大小
reverbParam.wetOnly = false;
reverbParam.wetGain = 5.0;
reverbParam.dryGain = 5.0;
reverbParam.toneLow = 80.0;
reverbParam.toneHigh = 80.0;
reverbParam.preDelay = 20.0;
reverbParam.stereoWidth = 0.0;
ZegoExpressEngine.getEngine().setReverbAdvancedParam(reverbParam);

當設置自定義混響參數後,啟用混響時設置的預設混響效果則會失效。如果想再次使用 SDK 預設參數,可以使用 setReverbPreset 預設枚舉方法進行設置。

4.3 混響回聲

調用 setReverbEchoParam 方法,通過相關參數搭配設置,實現開發者需要的混響回聲效果(詳細參數說明請參考 API 文檔)。

以下示例代碼以實現“空靈聲效”為例:

ZegoReverbEchoParam echoParam = new ZegoReverbEchoParam();
echoParam.inGain= 0.8f;
echoParam.outGain =1.0f;
echoParam.numDelays = 7;
int[] delay ={230,460,690,920,1150,1380,1610};
echoParam.delay=delay;

float[] decay={0.41f,0.18f,0.08f,0.03f,0.009f,0.003f,0.001f};
echoParam.decay=decay;
zegoReverbEchoParamDatas.add(echoParam);
ZegoExpressEngine.getEngine().setReverbEchoParam(echoParam);

4.4 虛擬立體聲

4.4.1 設置推流音頻聲道數

如果需要開啟虛擬立體聲功能,必須在推流前先調用 setAudioConfig 方法設置音頻編碼聲道為 Stereo 雙聲道 (預設為 Mono 單聲道)。

此處示例通過預設枚舉構造 ZegoAudioConfig 設置為雙聲道。

ZegoAudioConfig audioConfig = new ZegoAudioConfig(STANDARD_QUALITY_STEREO);
ZegoExpressEngine.getEngine().setAudioConfig(audioConfig);

4.4.2 設置虛擬立體聲參數

設置音頻編碼聲道為雙聲道後,調用 enableVirtualStereo 方法,通過 “enable” 參數開啟虛擬立體聲,並通過 “angle” 參數設置虛擬立體聲的聲源角度後才有立體聲效果,角度範圍為 0 ~ 360,一般可設為 90 度(即正前方)。

自從 2.15.0 版本開始,SDK 新增支持全方位虛擬立體聲效果,使用方式為將 “angle” 角度參數設置為 “-1”。

此處示例為開啟虛擬立體聲並將角度設置為 90 度:

ZegoExpressEngine.getEngine().enableVirtualStereo(true, 90);

此處示例為開啟全方位虛擬立體聲:

ZegoExpressEngine.getEngine().enableVirtualStereo(true, -1);

5 API參考列表

描述
setVoiceChangerPreset 通過預設枚舉設置變聲
ZegoVoiceChangerParam 變聲器參數
setReverbPreset 通過預設枚舉設置混響
ZegoReverbAdvancedParam 音頻混響高級參數
setReverbEchoParam 設置混響回聲效果
ZegoReverbParam 設置自定義混響
setAudioConfig 設置音頻配置
enableVirtualStereo 設置虛擬立體聲

6 小結

使用 ZEGO sdk,僅一兩行代碼即可實現生動有趣的變聲/混響/立體聲等音效,快來試試吧!

7 獲取更多文檔、Demo、技術幫助

獲取 SDK 開發文檔、demo,可訪問 即構文檔中心.
獲取更多商務活動熱門產品,可提交 信息聯繫商務.
註冊即構ZEGO開發者帳號,快速開始。

音視頻場景解決方案分享,更多詳情可搜索官網(https://www.zego.im/)
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在早年間(其實也不是很早),寫過幾篇關於 CSS Reset 的文章 - reset.css 知多少。 詳細描述了當時業界比較常用的,兩個 CSS reset 方案:reset.css 與 Normalize.css。 以更為推薦的 Normalize.css 為例,它的核心思想是: 統一了一些元素 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 VMware Workstation Pro 16 安裝教程 筆者的運行環境: VMware Workstation Pro 16 Red Hat Enterprise Linux 8.3.0 1、需要提前一個操作系統的鏡像文件 ISO,這個文件 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. JavaScript有哪些數據類型,它們的區別? JavaScript共有八種數據類型,分別是 Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。 其中 Symbol ...
  • 簡單開頭 首先技術面試官會根據簡歷里所寫的項目和個人掌握技術棧提問(我不知道已經改過多少次簡歷了,因為前期投簡歷是真的是沉在茫茫大海,撈漂流瓶都撈不到的那種) 我的技術棧:(Vue還在苦苦的自學當中,隨便推薦一下coderwhy老師B站的教學視頻,真的不錯,講得深入淺出,越聽越想聽)地址:https ...
  • 基本原則 原則一:價值為王 解析: 價值為王的另一種說法叫做YAGNI。YAGNI 是 You aren’t gonna need it 的縮寫。該原則的基本含義就是,不應該開發任何當前不使用的功能。因為這些占用開發成本的功能,可能根本沒有人用。而且不僅僅是開發成本打了水漂,你還要不斷投入維護成本, ...
  • package struct;import com.sun.xml.internal.ws.api.streaming.XMLStreamWriterFactory;public class SwitchDemo1 { public static void main(String[] args){ ...
  • Web-Servlet(2)--Thymeleaf 視圖模板技術,是做視圖渲染的一個技術(靜態頁面和數據柔和在一起) 基本流程 在伺服器端引入Thymeleaf環境 1.加入jar包 2.新建一個Servlet類ViewBaseServlet package src.com.wht.myssm.my ...
  • io流主要應用在各種腳本的開發列如,一個目錄爬行要去使用字典文件,還可以用來進行文件加密。後面可以深入研究一下序列化漏洞 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...