1. 程式人生 > 其它 >如何基於 ZEGO SDK 實現 iOS 變聲/混響/立體聲

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


1 功能簡介

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

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

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

該功能只針對 SDK 採集的聲音有效,開發者可以在通話或直播過程中動態調整變聲、混響、混響回聲、虛擬立體聲。

2 示例原始碼下載

請參考 下載示例原始碼 獲取原始碼。

相關原始碼請檢視 “/ZegoExpressExample/Examples/AdvancedAudioProcessing/VoiceChangeReverbStereo” 目錄下的檔案。

3 前提條件

在使用變聲/混響/立體聲之前,請確保:

4 使用步驟

4.1 變聲

4.1.1 設定預設變聲

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

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

型別名 描述 變聲型別
None 無變聲 -
MenToChild 男聲變童聲 變聲
MenToWomen 男聲變女聲 變聲
WomenToChild 女聲變童聲 變聲
WomenToMen 女聲變男聲 變聲
Foreigner 外國人音效 變聲
OptimusPrime 擎天柱音效 變聲
Android 機器人音效 變聲
Ethereal 空靈音效 音色變換
MaleMagnetic 磁性男 房間美聲
FemaleFresh 清新女 房間美聲
MajorC C大調電音 電音音效
MinorA A小調電音 電音音效
HarmonicMinor 和聲小調電音 電音音效

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

 [[ZegoExpressEngine sharedEngine] setVoiceChangerPreset:ZegoVoiceChangerPresetMenToChild];

4.1.2 設定自定義變聲

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

ZegoVoiceChangerParam *param = [[ZegoVoiceChangerParam alloc] init];
param.pitch = 2.0;
[[ZegoExpressEngine sharedEngine] setVoiceChangerParam:param];

4.2 混響

4.2.1 設定預設混響

呼叫 setReverbPreset 通過預設列舉設定混響。

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

型別名 描述 混響型別
None -
SoftRoom 小房間 空間塑造
LargeRoom 大房間 空間塑造
ConcerHall 音樂廳 空間塑造
Valley 山谷 空間塑造
RecordingStudio 錄音室 空間塑造
Basement 地下室 空間塑造
KTV KTV 空間塑造
Popular 流行 曲風
Rock 搖滾 曲風
VocalConcert 演唱會 空間塑造
GramoPhone 留聲機 空間塑造

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

[[ZegoExpressEngine sharedEngine] setReverbPreset:ZegoReverbPresetLargeRoom];

4.2.2 設定自定義混響

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

ZegoReverbAdvancedParam *reverbParam = [[ZegoReverbAdvancedParam alloc] init];
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 sharedEngine] setReverbAdvancedParam:reverbParam];

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

4.3 混響回聲

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

以下示例程式碼以實現“空靈音效”為例:

ZegoReverbEchoParam *echoParamEthereal = [[ZegoReverbEchoParam alloc] init];
echoParamEthereal.inGain = 0.8;
echoParamEthereal.outGain = 1.0;
echoParamEthereal.numDelays = 7;
echoParamEthereal.delay = @[@230, @460, @690, @920, @1150, @1380, @1610];
echoParamEthereal.decay = @[@0.41f, @0.18f, @0.08f, @0.03f, @0.009f, @0.003f, @0.001f];
[[ZegoExpressEngine sharedEngine] setReverbEchoParam:echoParamEthereal];

4.4 虛擬立體聲

4.4.1 設定推流音訊聲道數

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

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

ZegoAudioConfig *config = [ZegoAudioConfig configWithPreset:ZegoAudioConfigPresetStandardQualityStereo];
[[ZegoExpressEngine sharedEngine] setAudioConfig:config];

4.4.2 設定虛擬立體聲引數

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

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

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

[[ZegoExpressEngine sharedEngine] enableVirtualStereo:YES angle:90];

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

[[ZegoExpressEngine sharedEngine] enableVirtualStereo:YES angle:-1];

5 API參考列表

方法 描述
setVoiceChangerPreset 通過預設列舉設定變聲
ZegoVoiceChangerParam 變聲器引數
setReverbPreset 通過預設列舉設定混響
ZegoReverbAdvancedParam 音訊混響高階引數
setReverbEchoParam 設定混響回聲效果
setAudioConfig 設定音訊配置
enableVirtualStereo 設定虛擬立體聲

獲取Demo

獲取本文的Demo、開發文件、技術支援。
獲取SDK的商務活動、熱門產品。
註冊即構ZEGO開發者帳號,快速開始。