音频频谱与音量变化
功能简介
- 音量变化:指某条流的音量大小,下文简称为“声浪”。
主要应用场景,在推拉流过程中, 判断麦上的用户谁在说话,并做UI展示,例如:

- 音频频谱,即数字音频信号在各频点的能量值。
主要应用场景, 在主播K歌场景中, 已经推流或拉流的前提下, 让主播或观众看到音调与音量变化的动画, 例如:

示例源码下载
请参考 下载示例源码。
相关源码请查看 /ZegoExpressExample/src/SoundLevel
目录下的文件。
使用步骤
开启/关闭声浪和频谱监控
SDK 默认关闭了声浪和频谱监控,需要用户主动调用相关接口以打开监控。
- 接口原型:
/**
* 启动声浪监控
*/
virtual void startSoundLevelMonitor() = 0;
/**
* 停止声浪监控
*/
virtual void stopSoundLevelMonitor() = 0;
/**
* 启动音频频谱监控
*/
virtual void startAudioSpectrumMonitor() = 0;
/**
* 停止音频频谱监控
*/
virtual void stopAudioSpectrumMonitor() = 0;
- 调用实例:
engine->startSoundLevelMonotior();
engine->stopSoundLevelMonotior();
engine->startAudioSpectrumMonitor();
engine->stopAudioSpectrumMonitor();
监听声浪和频谱回调
打开了声浪和频谱监控之后,SDK将周期性的通过相关回调以通知用户当前的声浪和频谱数据,用户只需重写相关回调函数实现 UI 展示即可。
- 接口原型:
/**
* 本地采集音频声浪回调
* @param soundLevel 本地采集的声浪值,取值范围为 0.0~100.0
*/
virtual void onCapturedSoundLevelUpdate(double soundLevel) {
}
/**
* 远端音频声浪回调
* @param soundLevels 远端的声浪键值对,key 为流ID,value 为对应的流的声浪值
*/
virtual void onRemoteSoundLevelUpdate(const std::map<std::string, double>& soundLevels) {
}
/**
* 本地采集音频频谱回调
* @param audioSpectrum 本地采集的音频频谱值数组,频谱值范围为 [0-2^30]
*
*/
virtual void onCapturedAudioSpectrumUpdate(const ZegoAudioSpectrum& audioSpectrum) {
}
/**
* 远端拉流音频频谱回调
* @param audioSpectrums 远端音频频谱键值对,key 是流ID,value 为对应的流的音频频谱值数组,频谱值范围为 [0-2^30]
*
*/
virtual void onRemoteAudioSpectrumUpdate(const std::map<std::string, ZegoAudioSpectrum>& audioSpectrums) {
}
- 调用实例:
class MyEventHandler: public IZegoEventHandler
{
virtual void onCapturedSoundLevelUpdate(double soundLevel) {
printf("onCapturedSoundLevelUpdate");
... // operate ui
}
virtual void onRemoteSoundLevelUpdate(const std::map<std::string, double>& soundLevels) {
printf("onRemoteSoundLevelUpdate");
... // operate ui
}
virtual void onCapturedAudioSpectrumUpdate(const ZegoAudioSpectrum& audioSpectrum) {
printf("onCapturedAudioSpectrumUpdate");
... // operate ui
}
virtual void onRemoteAudioSpectrumUpdate(const std::map<std::string, ZegoAudioSpectrum>& audioSpectrums) {
printf("onRemoteAudioSpectrumUpdate");
... // operate ui
}
};
API 参考列表
方法 | 描述 |
---|---|
startSoundLevelMonitor | 开启声浪监控 |
stopSoundLevelMonitor | 关闭声浪监控 |
startAudioSpectrumMonitor | 开启音频频谱监控 |
stopAudioSpectrumMonitor | 关闭音频频谱监控 |
onCapturedSoundLevelUpdate | 本地采集音频声浪回调 |
onRemoteSoundLevelUpdate | 远端音频声浪回调 |
onCapturedAudioSpectrumUpdate | 本地采集音频频谱回调 |
onRemoteAudioSpectrumUpdate | 远端拉流音频频谱回调 |
Q&A
Q1:开启了声浪和频谱的监控开关之后,为什么没有收到相关回调?
答:本地采集的回调会立刻触发,未推流时的回调值为 0;远端拉流的回调在拉流startPlayingStream 成功之后才会触发。