# Dubbing and Voice Changer (/en/realtime-media/marketplace/build/add-audio-effects/dubbing-voice-changer)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

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 [setExtensionProperty](https://api-ref.agora.io/en/video-sdk/android/4.x/API/class_irtcengine.html#api_irtcengine_setextensionproperty) 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 `setExtensionProperty` 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:


      
* Android Studio 4.1 or later.
* A physical device (not an emulator) running Android 5.0 or later.

    
  
      
  

* Dubbing AI Voice Changer is used with Agora Voice SDK v4.x.

  Refer to the [SDK quickstart](/en/realtime-media/rtc/voice-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.


      
1. **Integrate the Dubbing AI Voice Changer extension**

   To integrate the extension in your project:

   1. Enter the [Extensions Marketplace](https://console.agora.io/extensions-marketplace) and download the **Dubbing AI Voice Changer** extension package. After unzipping, save all `.aar` files to the project folder `/app/libs`.
   2. Get the following resource files and save them in the same directory of the project folder. For example, a new `vc_model` directory:
      * License file and tone files: Contact Agora to obtain these files. The suffix of the tone file is `.dat`, and the tone file is issued according to the license.
      * Model file: Download the required resources.
        ![Resource Files](https://assets-docs.agora.io/images/extensions-marketplace/resource-files.png)
   3. Open the `app/build.gradle` file and add the following lines under `dependencies`:

      ```java
      implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
      ```

2. **Enable the plugin**

   After creating and initializing `RtcEngine`, call `enableExtension` to enable the plug-in, before you call other APIs such as `enableVideo` and `joinChannel`.

   ```kotlin
   // Declare parameters
   private val EXTENSION_NAME = "dubbing_vc"
   private val EXTENSION_VENDOR_NAME = "Dubbing"
   private val EXTENSION_AUDIO_FILTER = "DubbingVC"

   private val changeSpeaker_ = "changeSpeaker"
   private val startRealTimeTranscribe_ = "startRealTimeTranscribe"
   private val stopRealTimeTranscribe_ = "stopRealTimeTranscribe"
   private val getSpeakersInfo_ = "getSpeakersInfo"

   val config = RtcEngineConfig()
   config.mContext = baseContext
   config.mAppId = appId
   config.mEventHandler = mRtcEventHandler
   // Load plugin
   config.addExtension(EXTENSION_NAME)
   config.mExtensionObserver = extensionObserver
   // Create and initialize RtcEngine
   mRtcEngine = RtcEngine.create(config)
   mRtcEngine.enableAudio()
   // Enable plugin
   mRtcEngine.enableExtension(EXTENSION_VENDOR_NAME, EXTENSION_AUDIO_FILTER, enable)
   ```

3. **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.

   ```kotlin
   val modelPath: String = "${context.filesDir}${File.separator}vc_model"
   ```

4. **Get the tone list**

   After receiving the `onExtensionStarted` callback from Agora SDK, call `getExtensionProperty` passing in the `getSpeakersInfo` key to get the timbre list:

   ```kotlin
   val speakerList = mRtcEngine.getExtensionProperty(
       EXTENSION_VENDOR_NAME,
       EXTENSION_AUDIO_FILTER,
       getSpeakersInfo_
   )
   // Convert JSON to array
   val arr = JSONArray(speakerList)
   ```

   The timbre list is returned as JSON data that you parse yourself.

5. **Start changing**

   Call `setExtensionProperty` and pass in the corresponding `key` and `value`:

   ```kotlin
   mRtcEngine.setExtensionProperty(
       EXTENSION_VENDOR_NAME,
       EXTENSION_AUDIO_FILTER,
       startRealTimeTranscribe_,
       "true"
   )
   ```

6. **Select timbre**

   Pass in the timbre ID from the obtained timbre list to set the corresponding timbre:

   ```kotlin
   mRtcEngine.setExtensionProperty(
       EXTENSION_VENDOR_NAME,
       EXTENSION_AUDIO_FILTER,
       changeSpeaker_,
       id
   )
   ```

7. **Stop changing**

   Call the API to stop the voice changer:

   ```kotlin
   mRtcEngine.setExtensionProperty(
       EXTENSION_VENDOR_NAME,
       EXTENSION_AUDIO_FILTER,
       stopRealTimeTranscribe_,
       "true"
   )
   ```

8. **Release resources**

   Close the plug-in and release the resources used by the plug-in:

   ```kotlin
   mRtcEngine.enableExtension(EXTENSION_VENDOR_NAME, EXTENSION_AUDIO_FILTER, false)
   ```

    
  
      
  

## 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](https://github.com/Dubbing-AI-Voice-Changer/DubbingAgoraDemo/tree/main/Android) for testing. To clone and run the project:

1. Clone the repository

   ```sh
   git clone https://github.com/Dubbing-AI-Voice-Changer/DubbingAgoraDemo.git
   ```

2. Refer to the `README.md` file in the repository to run the demo.

### API reference

* [addExtension](https://api-ref.agora.io/en/video-sdk/android/4.x/API/class_irtcengine.html#api_irtcengine_addextension) in the `RtcEngineConfig` class
* [enableExtension](https://api-ref.agora.io/en/video-sdk/android/4.x/API/class_irtcengine.html#api_irtcengine_enableextension) in the `RtcEngine` class
* [setExtensionProperty](https://api-ref.agora.io/en/video-sdk/android/4.x/API/class_irtcengine.html#api_irtcengine_setextensionproperty) in the `RtcEngine` class

    
  
      
  


## Platform-specific versions
- [Android](/en/realtime-media/marketplace/build/add-audio-effects/dubbing-voice-changer/android.md)
- [iOS](/en/realtime-media/marketplace/build/add-audio-effects/dubbing-voice-changer/ios.md)
