1 前言
在直播、語聊房、K 歌房場景中,為增加趣味性和互動性,玩家可以通過變聲來搞怪,通過混響烘托氣氛,通過立體聲使聲音更具立體感,ZegoExpress SDK 提供了多種預設的變聲、混響、混響回聲、立體聲效果,開發者可以靈活設定自己想要的聲音,在通話或直播程序中動態調整變聲、混響、混響回聲、虛擬立體聲,如果需要試聽,可以啟用耳返進行測驗,
- 變聲:通過改變用戶的音調,使輸出的聲音在感官上與原始聲音不同,實作男聲變女生等多種效果,
- 混響:通過對聲音的特殊處理,制造不同環境的混響效果,讓聲音如同在音樂廳、大教堂等場景中發出一般,
- 混響回聲:通過對聲音的特殊處理,可搭配變聲、混響以實作自定義各式各樣的聲音效果,例如空靈,機器人的聲音,
- 虛擬立體聲:通過深度使用雙聲道技術,虛擬出發音源的各個位置角度,實作立體聲、3D 環繞音、聽聲辯位等效果,
您可通過 ZEGO 提供的 音效體驗 DEMO 體驗 SDK 預設的人聲效果,
本文將教你如何通過即構ZEGO sdk在Android端實作變聲、混響、立體聲,
2 示例原始碼下載
請參考 下載示例原始碼 獲取原始碼,
相關原始碼請查看 “/ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/voicechange” 目錄下的檔案,
3 專案準備
在進行變聲/混響/立體聲之前,請確保:
- 已在專案中集成 ZEGO Express SDK,實作基本的實時音視頻功能,詳情請參考 快速開始 - 集成 和 快速開始 - 實作流程,
- 已在 ZEGO 控制臺 創建專案,并申請有效的 AppID,詳情請參考 控制臺 - 專案管理 中的“專案資訊”,
** 接下來我們看看完整的實作流程,**
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.uj5u.com/houduan/458207.html
標籤:Java
下一篇:java學習之IO流
