为方便用户在进行音视频通话或互动直播能有更好的听感,本文将介绍 SDK 采集到的声音如何进行调整,从而达到你想要的音量。
功能描述
RTC SDK 提供了一些接口,实现耳返、音效、混音到播放的过程中设置不同类型的音量,例如麦克风采集、音乐、扬声器等,以满足产品在声音上的个性化需求。
下图展示了用户可能需要调整音量的场景、各场景对应的 API 及其使用注意事项。
实现方法
在调整通话音量前,请确保已在你的项目中实现基本的实时音视频功能。
设置采集音量
采集音量 是指音频采集设备(例如麦克风)采集后传输到发送端前的声音音量。本质是放大或缩小采集设备所采集声音的信号幅度,从而控制采集音量的大小。如下图:
你可以通过 adjustRecordingSignalVolume
方法直接调节录制声音的信号幅度,由此实现调节录音的音量。
该方法中 volume
参数表示录音信号的音量,取值范围为 [0, 400]:
- 0: 静音。
- 100: (默认值)原始音量,即不对信号做缩放。
- 400: 原始音量的 4 倍。
示例代码
Future<void> adjustRecordingSignalVolume(int volume) {
return _invokeMethod('adjustRecordingSignalVolume', {'volume': volume});
}
API 参考
设置播放音量
播放音量 即音频信号到接收端后,通过音频输出设备播放前的音量大小。设置播放音量,本质是在播放输出音频前放大或缩小输出音频流的信号幅度,从而控制输出音量的大小。如下图:
你可以通过 adjustPlaybackSignalVolume
方法或 adjustUserPlaybackSignalVolume
方法直接调节播放声音的信号幅度,由此实现调节播放的音量。
-
adjustPlaybackSignalVolume:
- 用于调节本地播放的所有远端用户信号音量。
- 该方法中
volume
参数表示播放音量,取值范围为 [0, 400]。
-
adjustUserPlaybackSignalVolume:
- 用于调节本地播放的指定远端用户信号音量。如需调节多个用户在本地播放的音量,则需多次调用该方法。
- 该方法中
volume
参数表示播放音量,取值范围为 [0, 100]。
adjustPlaybackSignalVolume
接口仅支持调节所有远端用户的本地播放音量。静音本地音频请同时调用 adjustPlaybackSignalVolume(0)
和 adjustAudioMixingPlayoutVolume(0)
。
adjustUserPlaybackSignalVolume 方法要在加入频道后调用。
示例代码
Future<void> adjustPlaybackSignalVolume(int volume) {
return _invokeMethod('adjustPlaybackSignalVolume', {'volume': volume});
}
Future<void> adjustUserPlaybackSignalVolume(String uid, int volume) {
return _invokeMethod(
'adjustUserPlaybackSignalVolume', {'uid': uid, 'volume': volume});
}
API 参考
设置混音音量
混音 是指 SDK 从 App 获取一路音频数据,将 App 提供的音频数据与 SDK 采集的音频数据整合为一路音频数据;为了实现在通话或直播过程中,需要播放自定义的声音或者音乐文件并且让房间内的其他人也听到的需求。
混音功能常用于以下场景:
- 直播中的掌声
- 口哨等音效
- 播放背景音乐
- ...
你可以直接调用 adjustAudioMixingVolume
,该方法调节混音里伴奏在本端和远端播放的音量大小。
该方法中 volume
参数表示音乐文件的音量,取值范围为 [0, 100]。默认值 100 表示原始文件音量,即不对信号做缩放。0 表示混音音乐文件播放静音。
示例代码
Future<void> adjustAudioMixingVolume(int volume) {
return _invokeMethod('adjustAudioMixingVolume', {'volume': volume});
}
你也可以通过 adjustAudioMixingPlayoutVolume
方法和 adjustAudioMixingPublishVolume
方法分别调节混音音量。
-
adjustAudioMixingPlayoutVolume:
- 用于调节音乐文件的本地播放的混音音量。
- 该方法中
volume
参数表示音乐文件在本地播放的混音音量,取值范围为 0~100。默认 100 为原始文件音量。
-
adjustAudioMixingPublishVolume:
- 用于调节音乐文件的远端播放的混音音量。
- 该方法中
volume
参数表示音乐文件在远端播放的混音音量,取值范围为 0~100。默认 100 为原始文件音量。
adjustAudioMixingPlayoutVolume 方法和 adjustAudioMixingPublishVolume 方法要在加入频道后调用。
示例代码
Future<void> adjustAudioMixingPublishVolume(int volume) {
return _invokeMethod('adjustAudioMixingPublishVolume', {'volume': volume});
}
Future<void> adjustAudioMixingPlayoutVolume(int volume) {
return _invokeMethod('adjustAudioMixingPlayoutVolume', {'volume': volume});
}
API 参考
设置音效音量
音效 是指播放时间较短的音频,如掌声、口哨等声音。在直播互动等娱乐场景中,为增加趣味性和互动性,支持对声音进行变声、混响、立体声等处理。
使用播放设备播放音效音量时,你可以通过 setEffectsVolume
方法或 setVolumeOfEffect
方法设置音效文件在本地的播放音量。
-
setEffectsVolume:
- 用于设置播放音效文件音量。
- 该方法中
volume
参数表示音效文件的音量,取值范围为 [0.0, 100.0]。 100.0 为默认值。
-
setVolumeOfEffect:
- 用于实时调整播放音效文件音量。
- 该方法有两个参数:
soundId
:指定音效的 ID。每个音效均有唯一的 IDvolume
: 表示音效文件的音量,取值范围为 [0.0, 100.0]。 100.0 为默认值
示例代码
// 获取全局的音效管理类。
IAudioEffectManager manager = rtcEngine.getAudioEffectManager();
...
// 设置音效音量为原始音量的 50%。
double volume = 50.0
// 设置所有音效的播放音量。
manager.setEffectsVolume(volume);
// 设置单个音效的播放音量。
// soundId 是你在调用 playEffect 时设置的音效 ID。
manager.setVolumeOfEffect(soundId, volume);
设置耳返音量
耳返 即耳机采集监听,在设备上插入耳机(普通耳机或蓝牙耳机)后,能从本机耳机侧听到本设备麦克风采集的声音。在音频采集、混音、播放的整个过程中,你都可以使用 setInEarMonitoringVolume
调整耳返的音量。
调节耳返音量的参数值范围是 [0, 100],默认值 100 表示原始音效音量,即不对信号做缩放。0 表示耳返静音。
示例代码
// 开启耳返监听功能。
rtcEngine.enableInEarMoniroting(true);
int volume = 50;
// 设置耳返音量为原始音量的 50%。
rtcEngine.setInEarMonitoringVolume(volume);
API 参考
获取用户音量(回调)
在音频采集、混音、播放的整个过程中,你都可以使用下面的接口获取用户音量等信息。
- 瞬时说话声音音量提示。
onAudioVolumeIndication
回调报告频道内瞬时音量最高的几个用户(即说话者)的用户 ID 及他们的音量。若返回的 uid 为 0,则表示返回的是本地用户的瞬时音量。
示例代码
// 获取瞬时说话音量最高的几个用户(即说话者)的用户 ID、他们的音量及本地用户是否在说话。
// @param speakers 为一个数组,包含说话者的用户 ID 、音量及本地用户人声状态。音量的取值范围为 [0, 255]。
// @param totalVolume 指混音后频道内的总音量,取值范围为 [0, 255]。
public void onAudioVolumeIndication(AudioVolumeInfo[] speakers, int totalVolume) {
}
- 监测到活跃用户提示。
onActiveSpeaker
回调报告特定时间段内累积音量最高的用户 ID。如果返回的 uid 为 0,则默认为本地用户。
onAudioVolumeIndication
和 onActiveSpeaker
回调都需要开启 enableAudioVolumeIndication
方法才能收到该回调。
示例代码
// 获取当前时间段声音最大的用户 ID(仅 1 个)
public void onActiveSpeaker(int uid) {
}
API 参考
开发注意事项
由于硬件设备的限制,当使用调节信号设置音量的方法将音量设置过大时,在某些设备上可能会出现失真的声音效果。