文档反馈
文档反馈

监测发言者音量

重要通知

网易云信新版文档中心现已正式上线!

音视频通话2.0互动直播2.0多人语音聊天室PK 直播等产品和场景方案已迁移至新版文档中心维护,欢迎体验!

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

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

Android

实现方法

示例代码

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

实现方法

示例代码

    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

实现方法

示例代码

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

实现方法

示例代码

//获取房间中正在讲话且音量最大的人。
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()
×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。