监测发言者音量

功能描述

NERTC SDK 提供监听房间里所有成员的发送音量值的功能。

在一些语音连麦场景或者视频会议场景,开发者应用层常常需要了解到发言者的音量,从而做出UI上的音量展示或者根据发言者的音量大小进行视图布局的动态调整。

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;
            }
        }
    }

}

API参考

方法 功能描述
enableAudioVolumeIndication 启用说话者音量提示
事件 事件描述
onRemoteAudioVolumeIndication 提示频道内谁正在说话及说话者瞬时音量的回调
onLocalAudioVolumeIndication 本地用户瞬时音量的回调

iOS

实现方法

  1. 开始前请确保你已完成环境准备、安装包获取等步骤;
  2. 调用接口 enableAudioVolumeIndication:interval: 启用说话者音量提示。该方法允许 SDK 定期向 App 反馈当前谁在说话以及说话者的音量;
  3. 代理方法 onLocalAudioVolumeIndication: 提示频道内本地用户瞬时音量的回调;
  4. 代理方法 onRemoteAudioVolumeIndication: totalVolume: 提示频道内谁正在说话及说话者音量的回调;

示例代码

    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
    {
        // 提示频道内谁正在说话及说话者音量的回调
    }

API参考

方法 功能描述
enableAudioVolumeIndication 启用说话者音量提示
事件 事件描述
onRemoteAudioVolumeIndication 提示频道内谁正在说话及说话者音量的回调
onLocalAudioVolumeIndication 本地用户瞬时音量的回调

Windows/macOS

实现方法

  1. 开始前请确保你已完成环境准备、安装包获取等步骤;
  2. 调用接口 enableAudioVolumeIndication 启用说话者音量提示。该方法允许 SDK 定期向 App 反馈当前谁在说话以及说话者的音量;
  3. 代理方法 onLocalAudioVolumeIndication 提示频道内本地用户瞬时音量的回调;
  4. 代理方法 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);
    }
}

API参考

方法 功能描述
enableAudioVolumeIndication 启用说话者音量提示
事件 事件描述
onRemoteAudioVolumeIndication 提示频道内谁正在说话及说话者音量的回调
onLocalAudioVolumeIndication 本地用户瞬时音量的回调

Web

实现方法

  1. 监听 volume-indicator 事件, 反馈当前监听房间中所有人说话的音量;
  2. 监听 active-speaker事件, 监听房间中音量最大的人;
  3. 方法 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()

API参考

方法 功能描述
setAudioVolume 设置音频播放的音量
setCaptureVolume 设置麦克风采集的音量
getAudioLevel 获取当前麦克风采集音量