Dubbing and Voice Changer
Updated
Dubbing AI Voice Changer extension is an encapsulation of the core API of real-time AI voice conversion.
Dubbing AI Voice Changer extension enables you to change the audio timbre.
This page shows you how to integrate the Dubbing AI Voice Changer extension in your app.
Understand the tech
Using the setExtensionPropertyWithVendor method provided in Agora SDK v4.x and passing in the specified key and value parameters, you can quickly integrate real-time AI voice conversion ability into your app.
The key parameter you specify in the setExtensionPropertyWithVendor method corresponds to the name of the API, and the value parameter wraps some or all of the parameters of the API in JSON format. By passing in the specified key and value parameters, you can call the corresponding API to realize the functions related to real-time AI sound conversion.
Prerequisites
Ensure that your development environment meets the following requirements:
- Xcode 9.0 or later.
- A physical device (not an emulator) running iOS 8.0 or later.
-
Dubbing AI Voice Changer is used with Agora Voice SDK v4.x.
Refer to the SDK quickstart to integrate Voice SDK v4.x and implement basic voice calling.
Integrate the extension
This section shows you how to integrate the Dubbing AI Voice Changer extension, and call the core API to implement the voice changing function.
-
Integrate the Dubbing AI Voice Changer extension
To integrate the extension in your project:
- Enter the Extensions Marketplace page and download the plug-in package for Extensions plug-in.
- Unzip the folder, import all
.frameworkfiles into the project, and modifyEmbedtoEmbed & Sign. - Get the following resource files and save them in the same directory of the project folder (For example, Resource path):
- License file and tone files: Contact Agora to obtain these files. The suffix of the tone file is named
.dat, and the tone file is issued according to the license. - Model file: Download the required resources.
- License file and tone files: Contact Agora to obtain these files. The suffix of the tone file is named
- Import the
libc++system library and third-party dynamic libraries into the projectMJExtension.
-
Enable the plugin
After creating and initializing
RtcEngine, callenableExtensionWithVendorto enable the plug-in, before you call other APIs such asenableVideo, andjoinChannelByTokenAgoraRtcEngineConfig *cfg = [[AgoraRtcEngineConfig alloc] init]; cfg.appId = appId; cfg.eventDelegate = self; cfg.channelProfile = AgoraChannelProfileLiveBroadcasting; cfg.audioScenario = AgoraAudioScenarioGameStreaming; self.agoraKit = [AgoraRtcEngineKit sharedEngineWithConfig:cfg delegate:self]; [self.agoraKit setClientRole:AgoraClientRoleBroadcaster]; [self.agoraKit enableExtensionWithVendor:[EngineFilterManager vendorName] extension:@"RealTimeTranscribe" enabled:YES]; -
Set the resource file path
When you download and integrate the plug-in, the license, sound, and model files are saved to the specified directory. In this step, you specify the path where these resource files are located.
NSString *sourcePath = [[NSBundle mainBundle] resourcePath]; [self.agoraKit setExtensionPropertyWithVendor:[EngineFilterManager vendorName] extension:@"RealTimeTranscribe" key:@"setResourcesFilePath" value:sourcePath]; -
Get the tone list
After receiving the
onExtensionStartedcallback from Agora SDK, callgetExtensionPropertyWithVendorpassing in thegetSpeakersInfokey to get the timbre list:NSString *voices = [self.agoraKit getExtensionPropertyWithVendor:[EngineFilterManager vendorName] extension:@"RealTimeTranscribe" key:@"getSpeakersInfo"]; // Convert JSON to array NSData *nsData = [voices dataUsingEncoding:NSUTF8StringEncoding]; _speakerArray = [NSJSONSerialization JSONObjectWithData:nsData options:kNilOptions error:nil];The timbre list is returned as JSON data that you parse yourself.
-
Start changing
Call
setExtensionPropertyWithVendorand pass in the correspondingkeyandvalue:[self.agoraKit setExtensionPropertyWithVendor:[EngineFilterManager vendorName] extension:@"RealTimeTranscribe" key:@"startRealTimeTranscribe" value:@"startRealTimeTranscribe"]; -
Select timbre
Pass in the timbre ID from the obtained timbre list to set the corresponding timbre:
[self.agoraKit setExtensionPropertyWithVendor:[EngineFilterManager vendorName] extension:@"RealTimeTranscribe" key:@"changeSpeaker" value:@“”]; -
Stop changing
Call the API to stop the voice changer:
[self.agoraKit setExtensionPropertyWithVendor:[EngineFilterManager vendorName] extension:@"RealTimeTranscribe" key:@"stopRealTimeTranscribe" value:@"stopRealTimeTranscribe"]; -
Release resources
Close the plug-in and release the resources used by the plug-in:
[self.agoraKit enableExtensionWithVendor:[EngineFilterManager vendorName] extension:@"RealTimeTranscribe" enabled:NO];
Reference
This section contains content that completes the information on this page, or points you to documentation that explains other aspects to this product.
Sample project
The Dubbing AI Voice Changer extension provides a GitHub sample project for testing. To clone and run the project:
-
Clone the repository
git clone https://github.com/Dubbing-AI-Voice-Changer/DubbingAgoraDemo.git -
Refer to the
README.mdfile in the repository to run the demo.
API reference
- enableExtensionWithVendor in the
AgoraRtcEngineKitclass - setExtensionPropertyWithVendor in the
AgoraRtcEngineKitclass
