实时音视频

  • 实时音视频 > 使用指南 > Android >通话音量监听

    通话音量监听

    最近更新时间:2022-06-23 14:13:15

    本文主要介绍如何通过 SDK 获取本地和远端用户在通话过程中的音量,进而判断用户是否在讲话。

    实现方式是通过周期性调用 SDK 接口获取本地及远端音频 Track 的音量值,再通过音量值来判断用户是否在讲话

    监听本地音量

    SDK 提供了 QNLocalAudioTrack.getVolumeLevel 接口用于获取本地音频 Track 的音量。

    以麦克风 Track 为例,可以通过如下方式实现对本地采集音量的感知:

    mAudioVolumeTimer = new Timer();
    mAudioVolumeTimer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            float localVolume = mMicrophoneAudioTrack.getVolumeLevel();
            if (localVolume >= 0.1f) {
                // 本地用户正在讲话
            }
        }
    }, 0, GET_VOLUME_LEVEL_INTERVAL);
    

    其中,GET_VOLUME_LEVEL_INTERVAL 为获取音量值的时间间隔,可根据您的场景自行定义其大小

    监听远端音量

    SDK 提供了 QNRemoteAudioTrack.getVolumeLevel 接口用于获取远端音频 Track 的音量。

    可以通过如下方式实现对远端音频 Track 音量的感知:

    mAudioVolumeTimer = new Timer();
    mAudioVolumeTimer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            float remoteVolume = mRemoteAudioTrack.getVolumeLevel();
            if (remoteVolume >= 0.1f) {
                // 远端用户正在讲话
            }
        }
    }, 0, GET_VOLUME_LEVEL_INTERVAL);
    

    其中,GET_VOLUME_LEVEL_INTERVAL 为获取音量值的时间间隔,可根据您的场景自行定义其大小

    注意事项

    1. 在安静的环境下,获取到 0.0x 大小的数值可能为环境音的音量,是预期的现象,可根据需求自行决定判断用户是否讲话的音量阈值
    2. 本地音量获取的数值会受到 QNLocalAudioTrack.setVolume 接口的影响,在确定讲话阈值的时候需要搭配使用
    3. 获取音量接口为主动接口,需要您启动一个定时器,进行周期性的音量获取

    示例代码

    上述已经简单介绍了通话音量的监听方式,相对应的示例代码可参考 QNRTC-API-Examples

    以上内容是否对您有帮助?
  • Qvm free helper
    Close