Voice Changer/Reverb/Stereo
Introduction
In live streaming, voice chat room, and Karaoke room scenarios, to increase fun and interactivity, players can use voice changers to be funny, use reverb to enhance the atmosphere, and use stereo to make the sound more three-dimensional. ZEGO Express SDK provides a variety of preset voice changer, reverb, reverb echo, and stereo effects. Developers can flexibly set the sound they want. If they need to preview, they can enable ear monitor for testing.
- Voice Changer: By changing the user's pitch, the output sound is perceptually different from the original sound, achieving various effects such as male to female.
- Reverb: Through special processing of sound, create reverb effects of different environments, making the sound sound as if it were emitted in scenes such as concert halls and large churches.
- Reverb Echo: Through special processing of sound, can be combined with voice changer and reverb to achieve various custom sound effects, such as ethereal, robot voice.
- Virtual Stereo: Through deep use of dual-channel technology, virtually generate various position angles of the sound source, achieving stereo, 3D surround sound, sound positioning and other effects.
You can experience the SDK's preset human voice effects through the Audio Effects Experience DEMO.
This feature is only effective for sounds captured by the SDK. Developers can dynamically adjust voice changer, reverb, reverb echo, and virtual stereo during calls or live streaming.
Download Sample Source Code
Please refer to Download Sample Source Code to obtain the source code.
For related source code, please check the files in the "/ZegoExpressExample/Examples/AdvancedAudioProcessing/VoiceReverbStereo" directory.
Prerequisites
Before using voice changer/reverb/stereo, ensure that:
- A project has been created in the ZEGOCLOUD Console, and valid AppID and AppSign have been obtained. For details, please refer to Console - Project Information.
- ZEGO Express SDK has been integrated into the project, and basic audio and video streaming functionality has been implemented. For details, please refer to Quick Start - Integration and Quick Start - Implementation Process.
Usage Steps
Voice Changer
There are two ways to set voice changer: preset voice changer and custom voice changer.
Set Preset Voice Changer
If you need to set custom voice changer, please see Set Custom Voice Changer.
Call the setVoiceChangerPreset method to use the SDK's preset voice changer effects.
The preset voice changer effects of ZegoVoiceChangerPreset are as follows. Developers can choose as needed:
| Type Name | Preset Value | Description | Voice Changer Type |
|---|---|---|---|
| NONE | 0 | No voice changer | - |
| MEN_TO_CHILD | 1 | Male to child | Voice changer |
| MEN_TO_WOMEN | 2 | Male to female | Voice changer |
| WOMEN_TO_CHILD | 3 | Female to child | Voice changer |
| WOMEN_TO_MEN | 4 | Female to male | Voice changer |
| FOREIGNER | 5 | Foreigner sound effect | Voice changer |
| OPTIMUS_PRIME | 6 | Optimus Prime sound effect | Voice changer |
| ANDROID | 7 | Robot sound effect | Voice changer |
| ETHEREAL | 8 | Ethereal sound effect | Timbre transformation |
| MALE_MAGNETIC | 9 | Magnetic male | Room beautification |
| FEMALE_FRESH | 10 | Fresh female | Room beautification |
| MAJOR_C | 11 | C Major electric tone | Electric tone effect |
| MINOR_A | 12 | A Minor electric tone | Electric tone effect |
| HARMONIC_MINOR | 13 | Harmonic Minor electric tone | Electric tone effect |
| FEMALE_ENERGETIC | 14 | Energetic female sound effect | Room beautification |
| RICH_NESS | 15 | Rich sound effect | Room beautification |
| MUFFLED | 16 | Muffled sound effect | Room beautification |
| ROUNDNESS | 17 | Round sound effect | Room beautification |
| FALSETTO | 18 | Falsetto sound effect | Room beautification |
| FULLNESS | 19 | Full sound effect | Room beautification |
| CLEAR | 20 | Clear sound effect | Room beautification |
| HIGHLY_RESONANT | 21 | High-pitched sound effect | Room beautification |
| LOUD_CLEAR | 22 | Loud and clear sound effect | Room beautification |
| MINIONS | 23 | Minion sound effect | Voice changer |
| AUTOBOT | 30 | Autobot sound effect | Voice changer |
| OUT_OF_POWER | 31 | Out of power sound effect | Voice changer |
To use the Autobot and OutOfPower voice changer effects, please contact technical support for custom SDK packaging.
The following example code takes male to child as an example:
ZegoExpressSDK::getEngine()->setVoiceChangerPreset(ZEGO_VOICE_CHANGER_PRESET_MEN_TO_CHILD);Set Custom Voice Changer
If you need to set preset voice changer, please see Set Preset Voice Changer.
If the SDK's preset voice changer effects cannot meet the requirements, developers can call the setVoiceChangerParam method in ZegoVoiceChangerParam and set custom voice changer through the pitch parameter pitch. The value range of this parameter is [-12.0, 12.0]. The larger the value, the sharper the sound. The default value is "0.0" (that is, no voice changer).
Version 2.18.0 and earlier, the value range is [-8.0, 8.0].
ZegoVoiceChangerParam param;
param.pitch = 2.0f;
ZegoExpressSDK::getEngine()->setVoiceChangerParam(param);Reverb
There are two ways to set reverb: preset reverb and custom reverb.
Set Preset Reverb
If you need to set custom reverb, please see Set Custom Reverb.
Call setReverbPreset to set reverb through preset enumeration.
The preset reverb effects of ZegoReverbPreset are as follows. Developers can choose as needed:
| Type Name | Preset Value | Description | Reverb Type |
|---|---|---|---|
| NONE | 0 | None | - |
| SOFT_ROOM | 1 | Small room | Spatial shaping |
| LARGE_ROOM | 2 | Large room | Spatial shaping |
| CONCERT_HALL | 3 | Concert hall | Spatial shaping |
| VALLEY | 4 | Valley | Spatial shaping |
| RECORDING_STUDIO | 5 | Recording studio | Spatial shaping |
| BASEMENT | 6 | Basement | Spatial shaping |
| KTV | 7 | KTV, suitable for users with obvious timbre flaws | Spatial shaping |
| POPULAR | 8 | Pop | Musical style |
| ROCK | 9 | Rock | Musical style |
| VOCAL_CONCERT | 10 | Vocal concert | Spatial shaping |
| GRAMO_PHONE | 11 | Gramophone | Spatial shaping |
| ENHANCED_KTV | 12 | Enhanced KTV, more focused and brighter KTV vocal effects, suitable for ordinary users and professional users | Spatial shaping |
The following example code takes large room mode as an example:
ZegoExpressSDK::getEngine()->setReverbPreset(ZEGO_REVERB_PRESET_LARGE_ROOM);Set Custom Reverb
If you need to set preset reverb, please see Set Preset Reverb.
If the SDK's preset reverb types cannot meet the requirements, developers can call the setReverbAdvancedParam method in ZegoReverbAdvancedParam and achieve the reverb effects needed by developers through relevant parameter combinations (for detailed parameter descriptions, please refer to the API documentation).
ZegoReverbAdvancedParam reverbParam;
// Reverb damping
reverbParam.damping = 50.0;
// Reverberance
reverbParam.reverberance = 50.0;
// Room size
reverbParam.roomSize = 50.0;
// Wet signal only
reverbParam.wetOnly = false;
// Wet signal gain (dB), value range [-20.0, 10.0]
reverbParam.wetGain = 5.0;
// Dry signal gain (dB), value range [-20.0, 10.0]
reverbParam.dryGain = 5.0;
// Low frequency attenuation, default is no attenuation (100%)
reverbParam.toneLow = 80.0;
// High frequency attenuation, default is no attenuation (100%)
reverbParam.toneHigh = 80.0;
// Initial delay time (ms). Value range [0, 200]
reverbParam.preDelay = 20.0;
// Stereo width (percentage), default value is 0%
reverbParam.stereoWidth = 0.0;
ZegoExpressSDK::getEngine()->setReverbAdvancedParam(reverbParam);When custom reverb parameters are set, the preset reverb effect set when enabling reverb will become invalid. If you want to use SDK preset parameters again, you can use the setReverbPreset preset enumeration method to set.
Reverb Echo
Call the setReverbEchoParam method and achieve the reverb echo effects needed by developers through relevant parameter combinations (for detailed parameter descriptions, please refer to the API documentation).
The following example code takes implementing ethereal effect as an example:
ZegoReverbEchoParam echoParamEthereal;
// Gain of input audio signal, value range [0.0, 1.0]
echoParamEthereal.inGain = 0.8;
// Gain of output audio signal, value range [0.0, 1.0]
echoParamEthereal.outGain = 1.0;
// Number of echoes, value range [0, 7]
echoParamEthereal.numDelays = 7;
// Delays of echo signals respectively, in milliseconds, value range [0, 5000] ms
echoParamEthereal.delay = {230, 460, 690, 920, 1150, 1380, 1610};
// Decay coefficients of echo signals respectively, value range [0.0, 1.0]
echoParamEthereal.decay = {0.41f, 0.18f, 0.08f, 0.03f, 0.009f, 0.003f, 0.001f};
ZegoExpressSDK::getEngine()->setReverbEchoParam(echoParamEthereal);Virtual Stereo
Set Publishing Stream Audio Channel Count
If you need to enable the virtual stereo function, you must first call the setAudioConfig method before publishing stream to set the audio encoding channel to Stereo dual channel (the default is Mono single channel).
The following example constructs ZegoAudioConfig through preset enumeration to set to dual channel:
ZegoAudioConfig audioConfig = ZegoAudioConfig(ZEGO_AUDIO_CONFIG_PRESET_STANDARD_QUALITY_STEREO);
ZegoExpressSDK::getEngine()->setAudioConfig(audioConfig);Set Virtual Stereo Parameters
After setting the audio encoding channel to dual channel, call the enableVirtualStereo method, enable virtual stereo through the enable parameter, and set the sound source angle of virtual stereo through the angle parameter before there is a stereo effect. The angle range is 0~360, and can generally be set to 90 degrees (that is, directly ahead).
Starting from version 2.15.0, the SDK newly supports all-around virtual stereo effects. The usage is to set the "angle" angle parameter to "-1".
The following example is for enabling virtual stereo and setting the angle to 90 degrees:
ZegoExpressSDK::getEngine()->enableVirtualStereo(true, 90);The following example is for enabling all-around virtual stereo:
ZegoExpressSDK::getEngine()->enableVirtualStereo(true, -1);