The Voice SDK supports the following scenarios:

  • Voice and Video Call
  • Live Interactive Audio and Video Streaming

For the key features included in each scenario, see Agora Voice Call Overview and Agora Live Interactive Audio Streaming Overview.

The Windows Voice SDK supports the x86 and x64 architecture.


v3.1.1 was released on August 28, 2020.

This release changes the AREA_CODE for regional connection. The latest area codes are as follows:

  • AREA_CODE_CN: Mainland China.
  • AREA_CODE_NA: North America.
  • AREA_CODE_EU: Europe.
  • AREA_CODE_AS: Asia, excluding Mainland China.
  • AREA_CODE_JP: Japan.
  • AREA_CODE_IN: India.
  • AREA_CODE_GLOB: (Default) Global.

If you have specified a region for connection when calling initialize, ensure that you use the latest area code when migrating from an earlier SDK version.


v3.1.0 was released on Aug 11, 2020.

New features

1. Publishing and subscription states

This release adds the following callbacks to report the current publishing and subscribing states:

  • onAudioPublishStateChanged: Reports the change of the audio publishing state.
  • onAudioSubscribeStateChanged: Reports the change of the audio subscribing state.

2. First local frame published callback

This release adds the onFirstLocalAudioFramePublished callback to report that the first audio frame is published. The onFirstLocalAudioFrame callback is deprecated from v3.1.0.

3. Custom data report

This release adds the sendCustomReportMessage method for reporting customized messages. To try out this function, contact support@agora.io and discuss the format of customized messages with us.


1. Regional connection

This release adds the following regions for regional connection. After you specify the region for connection, your app that integrates the Agora SDK connects to the Agora servers within that region.


2. CDN live streaming

To improve the user experience in CDN live streaming, this release adds the onRtmpStreamingEvent callback to report events during CDN live streaming, such as failure to add a background image or watermark image.

3. Encryption

This release adds the enableEncryption method for enabling built-in encryption, and deprecates the following methods:

  • setEncryptionSecret
  • setEncryptionMode

4. More in-call statistics

This release adds the following attributes to provide more in-call statistics:

  • Adds txPacketLossRate in LocalAudioStats, which represents the audio packet loss rate (%) from the local client to the Agora edge server before applying anti-packet loss strategies.
  • Adds publishDuration in RemoteAudioStats, which represents the total publish duration (ms) of the remote media stream.

5. Audio profile

To improve audio performance, this release adjusts the maximum audio bitrate of each audio profile as follows:

Profile v3.1.0 Earlier than v3.1.0
  • For the interactive streaming profile: 64 Kbps
  • For the communication profile: 16 Kbps
  • For the interactive streaming profile: 52 Kbps
  • For the communication profile: 16 Kbps

    6. Log files

    This release increases the default number of log files that the Agora SDK outputs from 2 to 5, and increases the default size of each log file from 512 KB to 1024 KB. By default, the SDK outputs five log files, agorasdk.log, agorasdk_1.log, agorasdk_2.log, agorasdk_3.log, agorasdk_4.log. The SDK writes the latest logs in agorasdk.log. When agorasdk.log is full, the SDK deletes the log file with the earliest modification time among the other four, renames agorasdk.log to the name of the deleted log file, and creates a new agorasdk.log to record the latest logs.

    Issues fixed

    This release fixed the occasional howling issue on some Huawei laptops.

    API changes



    • setEncryptionSecret
    • setEncryptionMode
    • onFirstLocalAudioFrame


    • Warning code: WARN_ADM_IMPROPER_SETTINGS(1053)


    v3.0.1 was released on May 27, 2020.

    New features

    1. Audio mixing pitch

    To set the pitch of the local music file during audio mixing, this release adds setAudioMixingPitch. You can set the pitch parameter to increase or decrease the pitch of the music file. This method sets the pitch of the local music file only. It does not affect the pitch of a human voice.

    2. Voice enhancement

    To improve the audio quality, this release adds the following enumerate elements in setLocalVoiceChanger and setLocalVoiceReverbPreset:

    • VOICE_CHANGER_PRESET adds several elements that have the prefixes VOICE_BEAUTY and GENERAL_BEAUTY_VOICE. The VOICE_BEAUTY elements enhance the local voice, and the GENERAL_BEAUTY_VOICE enumerations add gender-based enhancement effects.
    • AUDIO_REVERB_PRESET adds the enumeration AUDIO_VIRTUAL_STEREO and several enumerations that have the prefix AUDIO_REVERB_FX. The AUDIO_VIRTUAL_STEREO enumeration implements reverberation in the virtual stereo, and the AUDIO_REVERB_FX enumerations implement additional enhanced reverberation effects.

    See the advanced guide Set the Voice Changer and Reverberation Effects for more information.

    3. Data post-processing in multiple channels

    This release adds support for post-processing remote audio data in a multi-channel scenario by adding isMultipleChannelFrameWanted and onPlaybackAudioFrameBeforeMixingEx in the IAudioFrameObserver class.

    After successfully registering the audio observer, if you set the return value of isMultipleChannelFrameWanted as true, you can get the corresponding audio data from onPlaybackAudioFrameBeforeMixingEx. In a multi-channel scenario, Agora recommends setting the return value as true.

    Fixed issues

    • Audio mixing issues and abnormal loopback test results.
    • Inaccurate report of the onClientRoleChanged callback, authentication with an App ID and token, and a garbled log directory.

    API changes



    v3.0.0.2 was released on Apr 22, 2020.

    New features

    Specify the area of connection

    This release adds areaCode member in the RtcEngineContext struct for specifying the area of connection when creating an IRtcEngine instance. This advanced feature applies to scenarios that have regional restrictions. You can choose from areas including Mainland China, North America, Europe, Asia (excluding Mainland China), and global (default).

    After specifying the area of connection:

    • When the app that integrates the Agora SDK is used within the specified area, it connects to the Agora servers within the specified area under normal circumstances.
    • When the app that integrates the Agora SDK is used out of the specified area, it connects to the Agora servers either in the specified area or in the area where the SDK is located.

    API changes


    areaCode member in the RtcEngineContext struct


    v3.0.0 was released on Mar 5, 2020.

    In this release, Agora improves the user experience under poor network conditions for both the COMMUNICATIONand LIVE_BROADCASTING profiles through the following measures:

    • Adopting a new architecture for the COMMUNICATION profile.
    • Upgrading the last-mile network strategy for both the COMMUNICATIONand LIVE_BROADCASTING profiles, which enhances the SDK's anti-packet-loss capacity by maximizing the net bitrate when the uplink and downlink bandwidth are insufficient.

    To deal with any incompatibility issues caused by the architecture change, Agora uses the fallback mechanism to ensure that users of different versions of the SDKs can communicate with each other: if a user joins the channel from a client using a previous version, all clients using v3.0.0 automatically fall back to the older version. This has the effect that none of the users in the channel can enjoy the improved experience. Therefore we strongly recommend upgrading all your clients to v3.0.0.

    We also upgrade the On-premise Recording SDK to v3.0.0. Ensure that you upgrade your On-premise Recording SDK to v3.0.0 so that all users can enjoy the improvements brought by the new architecture and network strategy.

    New features

    1. Multiple channel management

    To enable a user to join an unlimited number of channels at a time, this release adds the IChannel and IChannelEventHandler classes. By creating multiple IChannel objects, a user can join the corresponding channels at the same time.
    After joining multiple channels, users can receive the audio and video streams of all the channels, but publish one stream to only one channel at a time. This feature applies to scenarios where users need to receive streams from multiple channels, or frequently switch between channels to publish streams. See Join Multiple Channels for details.

    2. Adjusting the playback volume of the specified remote user

    Adds adjustUserPlaybackSignalVolume for adjusting the playback volume of a specified remote user. You can call this method as many times as necessary in a call or live interactive streaming to adjust the playback volume of different remote users, or to repeatedly adjust the playback volume of the same remote user.


    1. Audio profiles

    To meet the need for higher audio quality, this release adjusts the corresponding audio profile of AUDIO_PROFILE_DEFAULT (0) in the LIVE_BROADCASTING profile.

    v3.0.0 A sample rate of 48 kHz, music encoding, mono, and a bitrate of up to 52 Kbps.
    Earlier than v3.0.0 3A sample rate of 32 kHz, music encoding, mono, and a bitrate of up to 64 Kbps.

    2. Quality statistics

    Adds the following members in the RtcStats class for providing more in-call statistics, making it easier to monitor the call quality and memory usage in real time:

    • gatewayRtt
    • memoryAppUsageRatio
    • memoryTotalUsageRatio
    • memoryAppUsageInKbytes

    3. Others

    This release enables interoperability between the RTC Native SDK and the RTC Web SDK by default, and deprecates the enableWebSdkInteroperability method.

    Issues fixed

    • Audio issues relating to audio mixing, audio encoding, and echoing.
    • Other issues relating to app crashes, log file, and unstable service during CDN live streaming.

    API changes




    v2.9.1 is released on Sep 19, 2019.

    New features

    Detecting local voice activity

    This release adds the report_vad(bool) parameter to the enableAudioVolumeIndication method to enable local voice activity detection. Once it is enabled, you can check the AudioVolumeInfo struct of the onAudioVolumeIndication callback for the voice activity status of the local user.


    Supporting more audio sample rates for recording

    To enable more audio sample rate options for recording, this release adds a new startAudioRecording method with a sampleRate parameter. In the new method, you can set the sample rate as 16, 32, 44.1 or 48 kHz. The original method supports only a fixed sample rate of 32 kHz and is deprecated.

    Issues fixed


    A typo in the IAgoraRtcEngine.h file.

    API changes

    To improve the user experience, we made the following changes in v2.9.1:



    • startAudioRecording


    v2.9.0 is released on Aug 16, 2019.

    Compatibility changes

    1. RTMP streaming

    In this release, we deleted the following methods:

    • configPublisher

    If your app implements RTMP streaming with the methods above, ensure that you upgrade the SDK to the latest version and use the following methods for the same function:

    2. Disabling/enabling the local audio

    To improve the audio quality in the COMMUNICATION profile, this release sets the system volume to the media volume after you call the enableLocalAudio(true) method. Calling enableLocalAudio(false) switches the system volume back to the in-call volume.

    New features

    1. Faster switching to another channel

    This release adds the switchChannel method to enable the audience in a LIVE_BROADCASTING channel to quickly switch to another channel. With this method, you can achieve a much faster switch than with the leaveChannel and joinChannel methods. After the audience successfully switches to another channel by calling the switchChannel method, the SDK triggers the onLeaveChannel and onJoinChannelSuccess callbacks to indicate that the audience has left the original channel and joined a new one.

    2. Channel media stream relay

    This release adds the following methods to relay the media streams of a host from a source channel to a destination channel. This feature applies to scenarios such as online singing contests, where hosts of different LIVE_BROADCASTING channels interact with each other.

    During the media stream relay, the SDK reports the states and events of the relay with the onChannelMediaRelayStateChanged and onChannelMediaRelayEvent callbacks.

    3. Reporting the local and remote audio state

    This release adds the onLocalAudioStateChanged and onRemoteAudioStateChanged callbacks to report the local and remote audio states. With these callbacks, the SDK reports the following states for the local and remote audio:

    • The local audio: STOPPED(0), RECORDING(1), ENCODING(2), or FAILED(3). When the state is FAILED(3), see the error parameter for troubleshooting.
    • The remote audio: STOPPED(0), STARTING(1), DECODING(2), FROZEN(3), or FAILED(4). See the reason parameter for why the remote audio state changes.

    4. Reporting the local audio statistics

    This release adds the onLocalAudioStats callback to report the statistics of the local audio during a call, including the number of channels, the sending sample rate, and the average sending bitrate of the local audio.


    1. Reporting more statistics of the in-call quality

    This release adds the following statistics in the RtcStats class:

    • RtcStats: The total number of the sent audio bytes and received audio bytes during a session.

    2. Other Improvements

    • Improves the audio quality when the audio scenario is set to Game Streaming.
    • Improves the audio quality after the user disables the microphone in the COMMUNICATION profile.

    Issues fixed


    • When interoperating with a Web app, voice distortion occurs after the native app enables the remote sound position indication.
    • Invalid call of the muteRemoteAudioStream method.
    • Occasionally no audio.


    • Occasionally mixed streams in RTMP streaming.
    • Occasional crashes occur.
    • Failure to join the channel.

    API changes

    To improve the user experience, we made the following changes in v2.9.0:



    • onMicrophoneEnabled. Use LOCAL_AUDIO_STREAM_STATE_CHANGED(0) or LOCAL_AUDIO_STREAM_STATE_RECORDING(1) in the onLocalAudioStateChanged callback instead.
    • onRemoteAudioTransportStats. Use the onRemoteAudioStats callback instead.


    • configPublisher


    v2.8.0 is released on Jul. 8, 2019.

    New features

    1. Supporting string user IDs

    Many apps use string user IDs. This release adds the following methods to enable apps to join an Agora channel directly with string user IDs as user accounts:

    For other methods, Agora uses the integer uid parameter. The Agora Engine maintains a mapping table that contains the user ID and string user account, and you can get the corresponding user account or ID by calling the getUserInfoByUid or getUserInfoByUserAccount method.

    To ensure smooth call, use the same parameter type to identify all users within a channel, that is, all users should use either the integer user ID or the string user account to join a channel.


    • Do not mix parameter types within the same channel. The following Agora SDKs support string user accounts:

      • The Native SDK: v2.8.0 and later.
      • The Web SDK: v2.5.0 and later.

      If you use SDKs that do not support string user accounts, only integer user IDs can be used in the channel.

    • If you change your user IDs into string user accounts, ensure that all app clients are upgraded to the latest version.

    • If you use string user accounts, ensure that the token generation script on your server is updated to the latest version. If you join the channel with a user account, ensure that you use the same user account or its corresponding integer user ID to generate a token. Call the getUserInfoByUserAccount method to get the user ID that corresponds to the user account.

    2. Adding remote audio statistics

    To monitor the audio transmission quality during a call live interactive streaming, this release adds the totalFrozenTime and frozenRate members in the RemoteAudioStats class, to report the audio freeze time and freeze rate of the remote user.

    This release also adds the numChannels, receivedSampleRate, and receivedBitrate members in the RemoteAudioStats class.


    This release adds a CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT(14) member to the reason parameter of the onConnectionStateChanged callback. This member indicates a connection state change caused by the timeout of the connection keep-alive between the SDK and Agora's edge server.

    API changes

    To improve your experience, we made the following changes to the APIs:




    V2.4.1 is released on Jun 12th, 2019.

    This is the first release of the Agora Voice SDK for Windows. Refer to the following guides to quickly integrate the SDK and enable real-time communication in your project.

    If you migrate to this SDK from the Windows Video SDK, refer to the Release notes for the Windows video SDK for audio improvements.