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

来源:https://www.cnblogs.com/zegodeveloper/archive/2022/05/10/16253353.html
-Advertisement-
Play Games

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



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開發者帳號,快速開始。

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

-Advertisement-
Play Games
更多相關文章
  • 一、引言 需求描述:現實工作中,有一些很特別的需求:在一個彙總表中,需要顯示明細數據。因為是在彙總表中,所以明細數據只能顯示在某一列中,這個列,就是多行數據合併為一行之後的結果。 案例描述:比如,在物料凈需求表中,需求量扣減庫存量、在途量等等之後,結果為剩餘量,剩餘量為負則需要採購。此時,不管剩餘量 ...
  • 5月中國資料庫排行榜已出爐!各大資料庫廠商表現如何?排名有何變化?一起來解讀吧! ...
  • 本文和接下來的幾篇文章為閱讀郭霖先生所著《第一行代碼:Android(篇第2版)》的學習筆記,按照書中的內容順序進行記錄,書中的Demo本人全部都做過了。 每一章節本人都做了詳細的記錄,以下是我學習記錄(包含大量書中內容的整理和自己在學習中遇到的各種bug及解決方案),方便以後閱讀和查閱。最後,感激 ...
  • 本文和接下來的幾篇文章為閱讀郭霖先生所著《第一行代碼:Android(篇第2版)》的學習筆記,按照書中的內容順序進行記錄,書中的Demo本人全部都做過了。 每一章節本人都做了詳細的記錄,以下是我學習記錄(包含大量書中內容的整理和自己在學習中遇到的各種bug及解決方案),方便以後閱讀和查閱。最後,感激 ...
  • 本文和接下來的幾篇文章為閱讀郭霖先生所著《第一行代碼:Android(篇第2版)》的學習筆記,按照書中的內容順序進行記錄,書中的Demo本人全部都做過了。 每一章節本人都做了詳細的記錄,以下是我學習記錄(包含大量書中內容的整理和自己在學習中遇到的各種bug及解決方案),方便以後閱讀和查閱。最後,感激 ...
  • 本文和接下來的幾篇文章為閱讀郭霖先生所著《第一行代碼:Android(篇第2版)》的學習筆記,按照書中的內容順序進行記錄,書中的Demo本人全部都做過了。 每一章節本人都做了詳細的記錄,以下是我學習記錄(包含大量書中內容的整理和自己在學習中遇到的各種bug及解決方案),方便以後閱讀和查閱。最後,感激 ...
  • 本文和接下來的幾篇文章為閱讀郭霖先生所著《第一行代碼:Android(篇第2版)》的學習筆記,按照書中的內容順序進行記錄,書中的Demo本人全部都做過了。 每一章節本人都做了詳細的記錄,以下是我學習記錄(包含大量書中內容的整理和自己在學習中遇到的各種bug及解決方案),方便以後閱讀和查閱。最後,非常 ...
  • OpenHarmony電話子系統為 OS 提供了基礎的無線通信能力。支持 TD-LTE/FDD-LTE/TD-SCDMA/WCDMA/EVDO/CDMA1X/GSM 等網路制式的通信模塊,能夠提供高速的無線數據傳輸、互聯網接入等業務,具備語音、簡訊、彩信、SIM 卡等功能。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...