Download More Versions of the Agora Voice SDK
This page provides download links and release notes for more versions of the Agora Voice SDK. To ensure a trouble-free development experience, Agora strongly recommends that you use official mainline versions.
SDK downloads
This section provides links to download more versions of the SDK and describes which official mainline version it is based on.
| Platform | SDK download link | Version baseline |
|---|---|---|
| Android | v3.7.0.2 | v3.7.0.1 |
| iOS | v3.7.0.2 | v3.7.0 |
| macOS | v3.7.0.2 | v3.7.0 |
| Windows | v3.7.0.2 | v3.7.0 |
Release notes
This section provides release notes for more versions of the SDK.
v3.7.0.2
v3.7.0.2 was developed from v3.7.0 and released on June 6, 2022, for Android, iOS, macOS, and Windows.
v3.6.3
v3.6.3 was developed from v3.5.2 and released on May 13, 2022, for Android, iOS, macOS, and Windows.
Improvements
Audio recording
As of this release, after successfully calling startRecording to start the local audio recording, the SDK continues the recording and generates a single MP4 recording file when the audio profile changes during the recording, whereas with earlier versions, the SDK would stop the recording and report onRecorderStateChanged(RECORDER_STATE_ERROR, RECORDER_ERROR_CONFIG_CHANGED).
Fixed issues
This release fixed the following issues:
- The app occasionally failed to rejoin a channel after a user left a channel and put the app in the background for a while. (iOS)
- After a host successfully started cohosting across channels, changes in their network connection, for example, switching between a 4G or 5G mobile network and Wi-Fi, caused the media relay to destination channels to interrupt. (Android, iOS)
- Remote users heard a delay in the music played when the local user called
enableLocalAudio(false)andenableLocalAudio(true)to disable and enable local audio capture after successfully callingstartAudioMixingto play a music file. - When calling
startAudioMixingto play a music file with the sample rate of 22,050 Hz, the local and remote users heard distorted audio with buzzing noises. - When the local user joined the channel after a remote user in the channel called
muteLocalAudioStream(true)orenableLocalAudio(false)to stop sending the audio stream, the local user did not receive theonRemoteAudioStateChanged(0,5)callback. - After the local user called
enableLoopbackRecording(true)on some Dell devices to play a multimedia file and connected a headset without a microphone to the device, the remote user could not hear the multimedia file. - Occasional crashes occurred. (iOS)
- Occasionally, the app got stuck after a user joined a channel. (Windows)
- The captured volume was too low on specific devices such as Samsung Galaxy S20+ and Note10+. (Android)
- The local user received the
onRemoteAudioStateChanged(2,6)callback after disconnecting from and reconnecting to a network even though the remote user had not changed the audio state.
v3.6.2.1
v3.6.2.1 was developed from v3.6.2 and released on March 4, 2022 for macOS.
This release fixed a crash of the SDK on systems earlier than macOS 10.11. This crash was due to strong references by some dynamic libraries to the Metal library.
v3.6.2
v3.6.2 was developed from v3.6.1.1 and released on February 22, 2022 for Android, iOS, macOS, and Windows.
v3.5.3
v3.5.3 was developed from v3.5.2 and released on February 22, 2022 for Android, iOS, macOS, and Windows.
New features
In-ear monitoring (Windows)
This release extends the applicable platforms of in-ear monitoring from Android and iOS to Android, iOS, and Windows. On Windows, you can call the following APIs to control in-ear monitoring:
enableInEarMonitoring: Enables or disables in-ear monitoring. This function is disabled by default. To enable the function, callenableInEarMonitoring(true).setInEarMonitoringVolume: Sets the volume of the in-ear monitor, in the range of [0,100]. The default value is 100.
Improvements
1. Audio recording
This release extends startAudioRecording with support for setting recording with dual channels and higher audio quality.
- By adding
recordingChanneltoAudioRecordingConfiguration, it enables you to set the recorded audio channel to be mono or dual. Because the actual recorded audio channel is related to the captured audio channel and the integration scheme affects the final recorded audio channel, contact technical support for assistance with stereo recording usingstartAudioRecording. - By adding
AUDIO_RECORDING_QUALITY_ULTRA_HIGH(3)toAudioRecordingConfiguration.recordingQuality, it enables you to set the recorded audio quality to ultra-high. Ultra-high quality is the highest quality available inrecordingQuality. When you record a 10-minute AAC audio file at a sample rate of 32,000 Hz and ultra-high quality, the file size is approximately 7.5 MB.
2. Other improvements
This release provides the following improvements:
- Reduces the impact of high-frequency network jitters on the acceleration or deceleration of the music playback, which optimizes the user's music playback experience. (Android, iOS)
- Optimizes key indicators of the AEC (Acoustic Echo Canceller).
- Optimizes the user's audio experience during a burst network jitter.
- Optimizes the user's subjective experience when network conditions recover.
Fixed issues
This release fixed the following issues:
- When joining a channel under a 4G network, the
onNetworkQualitycallback reported the network state as disconnected. (Android) - Occasional crashes occurred. (Android, iOS, Windows)
- Remote users could not be seen under certain circumstances. (iOS)
- Apps could not be uploaded to the Apple App Store due to the
Non-public API usageerror. (iOS) - The SDK did not work properly on an iOS device with a system version lower than 10. (iOS)
- The SDK could not properly detect that the audio device was disconnected. (Windows)
- The
startAudioMixingmethod call failed to play local iTunes music files starting withipod-library://. (iOS) - When a remote user was under poor network conditions,
QUALITY_TYPEreceived by the local user did not match the actual network condition. - After a user played music with a third-party music player and set the audio scenario to
AgoraAudioScenarioChatRoomGaming, joining a channel could interrupt the music played by the third-party music player. (iOS) - When you called
setAudioMixingPositionmultiple times to set the playback position of the music file after you calledstartAudioMixingto successfully play music, the music file would most likely be played from the beginning. (iOS) - Getting
DhcpInfooccurred too frequently. (Android)
v3.5.2
v3.5.2 was developed from v3.5.1 and released on November 25, 2021 for Android, iOS, macOS, and Windows.
v3.4.11
v3.4.11 was developed from v3.4.5 and released on November 22, 2021 for Android, iOS, macOS, and Windows. v3.4.11 for Electron was released on January 10, 2022.
New features
1. Pausing and resuming the media stream relay across channels
In order to enable the host to quickly pause or resume a cross-channel media stream relay, this release adds the following methods and event code:
pauseAllChannelMediaRelay: Pauses the media stream relay to all destination channels.resumeAllChannelMediaRelay: Resumes the media stream relay to all destination channels.RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS(12): The SDK successfully pauses relaying the media stream to destination channels.RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED(13): The SDK fails to pause relaying the media stream to destination channels.RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS(14): The SDK successfully resumes relaying the media stream to destination channels.RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED(15): The SDK fails to resume relaying the media stream to destination channels.
After a successful method call of pauseAllChannelMediaRelay or resumeAllChannelMediaRelay, the SDK triggers the onChannelMediaRelayEvent callback to report whether the media stream relay is successfully paused or resumed.
2. Getting audio file information
To get the information of any audio file, this release deprecates getAudioMixingDuration and adds getAudioFileInfo instead. After joining a channel, you can call getAudioFileInfo and get information such as duration for the specified audio file in onRequestAudioFileInfo.
Improvements
Bluetooth profiles and volume types (Android/iOS)
To improve audio quality when a user uses a Bluetooth headset, this release optimizes the logic for selecting Bluetooth profiles and volume types.
- Bluetooth profile: As of this release, the Bluetooth profile used by the SDK is only affected by the user role.
- If a user in the communication profile or a host in the interactive streaming profile uses a Bluetooth headset, the Bluetooth headset captures and plays audio through the Hands-Free Profile (HFP).
- If an audience member in the interactive streaming profile uses a Bluetooth headset, the Bluetooth headset plays audio through the Advanced Audio Distribution Profile (A2DP).
- Volume type: This release regulates the volume type. When a user uses a Bluetooth headset, the SDK uses the following volume type:
Audio scenario User in the communication profile/Host in the interactive streaming profile Audience in the interactive streaming profile DEFAULTIn-call volume Media volume CHATROOM_GAMINGIn-call volume In-call volume GAME_STREAMINGIn-call volume (Android)
Media volume (iOS)Media volume CHATROOM_ENTERTAINMENTIn-call volume In-call volume EDUCATIONIn-call volume Media volume SHOWROOMIn-call volume Media volume MEETINGIn-call volume (Android)
Media volume (iOS)Media volume
Fixed issues
This release fixed the following issues:
- Occasionally, the SDK incorrectly triggered the error code
-1017when a user plugged and unplugged the headset. (Android) - After a user played music with a third-party music player and set the audio scenario to
AgoraAudioScenarioChatRoomGaming, joining a channel could interrupt the music played by the third-party music player. (iOS) - Crashes occurred occasionally. (iOS)
- In a CDN streaming scenario, when the host enabled dual-channel audio capture, remote users heard a zipping noise or no sound in one of the audio channels.
excludeWindowListdid not work. (macOS)- Occasionally, memory leaked because of unreasonable object reference managements. (Android)
- Running iOS apps on a Mac device with an M1 chip crashed under certain circumstances. (iOS, macOS)
- When the local user called
adjustRecordingSignalVolume(0)after callingsetAudioProfile(5,3), remotes users could still hear the local user's audio. (Android) - On some devices, the main thread got stuck for 1 or 2 seconds after the
setEnableSpeakerphonemethod call. - When a Bluetooth headset and a wired headset were connected to the audio playback device at the same time, the SDK did not trigger onAudioRouteChanged after plugging and unplugging the wired headset multiple times. (Android)
- On some Xiaomi devices, the user could not use the device's volume button to adjust the volume after calling
setEnableSpeakerphone. (Android) - When you called
startAudioDeviceLoopbackTestto start the audio device loopback test after joining and then immediately leaving a channel, the content of theAudioVolumeInfoarray reported by theonAudioVolumeIndicationcallback was incorrect. (Windows) - The local user could not be heard by remote users when the local user used custom audio capture by the Push method. (Android, Windows)
- When a third-party in-ear monitoring library and custom audio source were used and in-ear monitoring was enabled before joining a channel, in-ear monitoring did not take effect. (Android)
- On some Samsung devices, the
adjustRecordingSignalVolume(0)method call occasionally failed. (Android) - When a user with the audio profile
MUSIC_HIGH_QUALITY_STEREO(5)talked to a user with another audio profile, the latter was likely to hear a zipping noise. (Android) - The local user occasionally could not hear remote users after calling
setAudioSessionOperationRestriction. (iOS) - In the
AgoraAudioScenarioChatRoomGamingaudio scenario, the moment a user in the channel switched the role fromAgoraClientRoleAudiencetoAgoraClientRoleBroadcaster, that user heard a zipping noise. (iOS)
v3.4.8
v3.4.8 was developed from v3.4.7 and was released on September 16, 2021 for Android, iOS, macOS, and Windows.
This release fixed the following issues:
- On some Samsung devices, the
adjustRecordingSignalVolume(0)method call failed occasionally. (Android) - On some devices, the main thread got stuck for 1 to 2 seconds after the
setEnableSpeakerphonemethod call. (Android)
v3.4.7
v3.4.7 was developed from v3.4.6 and was released on August 2, 2021 for Android, iOS, macOS, and Windows.
AgoraRtcEngineKit strongly references AgoraRtcEngineDelegate. If you set the strong reference to AgoraRtcEngineDelegate by AgoraRtcEngineKit, Agora recommends that you upgrade the SDK to v3.4.7. (iOS, macOS) Improvements
This release improves the user experience under network conditions with high packet loss and high jitter.
Fixed issues
This release fixed the following issues:
- Due to the strong reference to
AgoraRtcEngineDelegatebyAgoraRtcEngineKit, theAgoraRtcEngineDelegateobject was released only whenAgoraRtcEngineKitwas destroyed, which caused a memory leak. (iOS, macOS) - Occasional crashes occurred in audio scenarios. (Android, iOS)
- When
pauseAudioMixingwas called before playing an audio file, and thenstartAudioMixingwas called to play the audio file, playback failed. (iOS) - Remote users heard slightly unsynchronized voice and music when a user called
startAudioMixingon some Android devices. - A naming conflict existed in the
AgoraReachabilityclass between the Agora Video SDK and Agora Signaling SDK. (iOS, macOS)