监测发言者音量
在一些语音连麦场景或者视频会议场景中,开发者应用层常常需要了解到发言者的音量,从而做出 UI 上的音量展示或者根据发言者的音量大小进行视图布局的动态调整。
NERTC SDK 提供监听房间里所有成员的发送音量值的功能。
Android
实现方法
调用接口 enableAudioVolumeIndication,启用说话者音量提示。
该方法允许 SDK 定期向 App 反馈当前谁在说话以及说话者的音量。
代理方法 onLocalAudioVolumeIndication,提示频道内本地用户瞬时音量的回调。
代理方法 onRemoteAudioVolumeIndication,提示频道内谁正在说话及说话者音量的回调。
示例代码
boolean enableActiveSpeaker = true;
NERtcEx.getInstance().enableAudioVolumeIndication(enableActiveSpeaker, 500);
public class ChatActivity implements NERtcCallbackEx {
......
@Override
public void onLocalAudioVolumeIndication(int volume) {
if (volume > 0) {
mUserSelf.speakerView.setText("正在说话: " + volume);
} else {
mUserSelf.speakerView.setText("");
}
}
@Override
public void onRemoteAudioVolumeIndication(NERtcAudioVolumeInfo[] volumeArray, int totalVolume) {
for (int i = 0, len = mRemoteUserMap.size(); i < len; i++) {
MultiChatUser user = mRemoteUserMap.valueAt(i);
if (user.speakerView != null) {
user.speakerView.setText("");
}
}
if (volumeArray == null) {
return;
}
for (NERtcAudioVolumeInfo volumeInfo : volumeArray) {
MultiChatUser user = mRemoteUserMap.get(volumeInfo.uid);
if (user != null) {
String text = String.format(Locale.CHINA, "正在说话: %d", volumeInfo.volume);
user.speakerView.setText(text);
user.volume = volumeInfo.volume;
}
}
}
}
iOS
实现方法
调用接口 enableAudioVolumeIndication 启用说话者音量提示。
该方法允许 SDK 定期向 App 反馈当前谁在说话以及说话者的音量。
- 代理方法 onLocalAudioVolumeIndication 提示频道内本地用户瞬时音量的回调。
- 代理方法 onRemoteAudioVolumeIndication 提示频道内谁正在说话及说话者音量的回调。
示例代码
NERtcEngineContext *context = [[NERtcEngineContext alloc] init];
context.appKey = "<#请输入您的AppKey#>";
context.engineDelegate = self;
NERtcEngine *coreEngine = [NERtcEngine sharedEngine];
[coreEngine setupEngineWithContext:context];
[coreEngine enableAudioVolumeIndication:YES interval:1000]; // 启用说话者音量提示,在 onRemoteAudioVolumeIndication 和 onRemoteAudioVolumeIndication 回调中每隔1000ms返回音量提示
/*
在代理文件中实现下述方法
*/
- (void)onLocalAudioVolumeIndication:(int)volume
{
// 提示频道内本地用户瞬时音量的回调
}
-(void)onRemoteAudioVolumeIndication:(nullable NSArray<NERtcAudioVolumeInfo*> *)speakers totalVolume:(int)totalVolume
{
// 提示频道内谁正在说话及说话者音量的回调
}
Windows/macOS
实现方法
调用接口 enableAudioVolumeIndication 启用说话者音量提示。
该方法允许 SDK 定期向 App 反馈当前谁在说话以及说话者的音量。
- 代理方法 onLocalAudioVolumeIndication 提示频道内本地用户瞬时音量的回调。
- 代理方法 onRemoteAudioVolumeIndication 提示频道内谁正在说话及说话者音量的回调。
示例代码
rtc_engine_->enableAudioVolumeIndication(enable, 200);
void onLocalAudioVolumeIndication(int volume)
{
printf("AudioVolume: volume: %d\n", volume);
}
void onRemoteAudioVolumeIndication(const NERtcAudioVolumeInfo *speakers, unsigned int speaker_number, int total_volume)
{
for (unsigned int i = 0; i < speaker_number; i++)
{
nertc::NERtcAudioVolumeInfo stats = speakers[i];
printf("uid:%lld, AudioVolume: volume: %d\n",
stats.uid, stats.volume);
}
}
Web
实现方法
- 监听 volume-indicator 事件,反馈当前监听房间中所有人说话的音量。
- 监听 active-speaker 事件,监听房间中音量最大的人。
- 通过方法 getAudioLevel,获取获取本端麦克风的采集音量。
示例代码
//获取房间中正在讲话且音量最大的人。
client.on('active-speaker', _data => {
console.log('"===== 当前在讲话的人:", _data.uid')
})
//获取房间中所有人的音量
rtc.client.on('volume-indicator', _data => {
console.log("===== 正在说话的远端用户及其音量:", _data)
let status = null
stats.forEach(item => {
status = 'uid: ' + item.uid + ', 音量:' + item.level
console.log(status)
})
})
//获取当前麦克风实时采集的音量
localStream.getAudioLevel()
本篇文档内容是否对您有帮助?


此文档对你是否有帮助
×


×