本文档暂不适用于 Web 平台。
概念 | 描述 | 应用场景 | 场景图 |
---|---|---|---|
音量变化 |
指某条流的音量大小,下文简称为“声浪”。 |
在推拉流过程中,判断麦上的用户谁在说话,并做 UI 展示。 |
|
音频频谱 |
指数字音频信号在各频点的能量值。 |
在主播 K 歌场景中,已经推流或拉流的前提下,让主播或观众看到音调与音量变化的动画。 |
请参考 下载示例源码 获取源码。
相关源码请查看 “lib/topics/AudioAdvanced/soundlevel_spectrum” 目录下的文件。
在实现声浪与音频频谱功能之前,请确保:
接口原型
本地采集的声浪回调接口 onCapturedSoundLevelUpdate :
class ZegoExpressEngine {
...
/**
* 本地采集音频声浪回调
*
* 回调通知周期为 100 ms。
* @param soundLevel 本地采集的声浪值,取值范围为 0.0 ~ 100.0
*/
static void Function(double soundLevel)? onCapturedSoundLevelUpdate;
...
}
远端音频声浪回调接口 onRemoteSoundLevelUpdate :
class ZegoExpressEngine {
...
/**
* 远端拉流音频声浪回调
*
* 回调通知周期为 100 ms。
* @param soundLevels 远端的声浪键值对,key 为流 ID,value 为对应的流的声浪值,value 取值范围为 0.0 ~ 100.0
*/
static void Function(Map<String, double> soundLevels)? onRemoteSoundLevelUpdate;
...
}
本地采集的音频频谱回调接口 onCapturedAudioSpectrumUpdate :
class ZegoExpressEngine {
...
/**
* 本地采集音频频谱回调
*
* 回调通知周期为 100 ms。
* @param audioSpectrum 本地采集的音频频谱值数组,频谱值范围为 [0-2^30]
*/
static void Function(List<double> audioSpectrum)? onCapturedAudioSpectrumUpdate;
...
}
远端拉流音频频谱回调接口 onRemoteAudioSpectrumUpdate :
class ZegoExpressEngine {
...
/**
* 远端拉流音频频谱回调
*
* 回调通知周期为 100 ms。
* @param audioSpectrums 远端音频频谱键值对,key 是流 ID,value 为对应的流的音频频谱值数组,频谱值范围为 [0-2^30]
*/
static void Function(Map<String, List<double>> audioSpectrums)? onRemoteAudioSpectrumUpdate;
...
}
调用示例
远端拉流声浪和远端音频频谱的回调给的是 Map
,key
是当前房间内正在推流的其他用户的流 ID,value
是对应这条流的声浪/音频频谱数据。
可先通过 onRoomStreamUpdate 回调方法获取到当前房间内存在的流列表,并保存起来,然后通过保存的流列表来索引 Map
取得每条流对应的声浪/音频频谱数据。
以下示例将演示如何从回调方法中获取到声浪/音频频谱的数据并传递给 UI,具体上下文请参考示例源码中 “lib/topics/AudioAdvanced/soundlevel_spectrum” 目录下的文件。
ZegoExpressEngine.onCapturedSoundLevelUpdate = (double soundLevel) {
// 开发者可以在这里进行获取本地声浪数据之后渲染到具体的 UI 控件上
}
ZegoExpressEngine.onRemoteSoundLevelUpdate = (Map<String, double> soundLevels) {
// 开发者可以在这里进行获取远端声浪数据之后渲染到具体的 UI 控件上
}
ZegoExpressEngine.onCapturedAudioSpectrumUpdate = (List<double> audioSpectrum) {
// 开发者可以在这里进行获取本地音频频谱数据之后渲染到具体的 UI 控件上
}
ZegoExpressEngine.onRemoteAudioSpectrumUpdate = (Map<String, List<double>> audioSpectrums) {
// 开发者可以在这里进行获取远端音频频谱数据之后渲染到具体的 UI 控件上
}
可分别针对声浪与音频频谱,调用启动监听对应回调的开关。
调用 startSoundLevelMonitor 启动声浪的监听:
// 启动声浪监控
ZegoExpressEngine.instance.startSoundLevelMonitor();
在调用上述接口之后,onCapturedSoundLevelUpdate 会立刻触发,未推流且未预览时回调值为 0;onRemoteSoundLevelUpdate 需要在拉流 startPlayingStream 之后,才会回调。
调用 startAudioSpectrumMonitor 启动频谱的监听:
// 启动音频频谱监控
ZegoExpressEngine.instance.startAudioSpectrumMonitor();
在调用上述接口之后,onCapturedAudioSpectrumUpdate 会立刻触发,未推流且未预览时回调值为 0;onRemoteAudioSpectrumUpdate 需要在拉流 startPlayingStream 之后,才会回调。
可分别针对声浪或音频频谱,调用停止监听对应回调的开关。
调用 stopSoundLevelMonitor 停止声浪的监听:
// 停止声浪监控
ZegoExpressEngine.instance.stopSoundLevelMonitor();
在调用上述接口之后,onCapturedSoundLevelUpdate 与 onRemoteSoundLevelUpdate 不再回调。
调用 stopAudioSpectrumMonitor 停止频谱的监听:
// 停止音频频谱监控
ZegoExpressEngine.instance.stopAudioSpectrumMonitor();
在调用上述接口之后,onCapturedAudioSpectrumUpdate 与 onRemoteAudioSpectrumUpdate 不再回调。
key
是流的标识符,value
是声浪值。但是由于流信息的大小限制,key
不能使用流 ID,只能用一个数字 ID(soundLevelID)来标识流。接口原型
手动混流中每条单流的声浪更新回调接口 onMixerSoundLevelUpdate:
class ZegoExpressEngine {
...
/**
* 手动混流音频频谱回调
*
* 回调通知周期为 100 ms。
* @param soundLevels 远端音频频谱键值对,key 是soundLevelID,value 为对应的流的音频频谱值数组,频谱值范围为 [0.0 ~ 100.0]
*/
static void Function(Map<int, double> soundLevels)? onMixerSoundLevelUpdate;
...
}
自动混流中每条单流的声浪更新回调接口 onAutoMixerSoundLevelUpdate:
class ZegoExpressEngine {
...
/**
* 自动混流音频频谱回调
*
* 回调通知周期为 100 ms。
* @param soundLevels 远端音频频谱键值对,key 是流 ID,value 为对应的流的音频频谱值数组,频谱值范围为 [0.0 ~ 100.0]
*/
static void Function(Map<String, double> soundLevels)? onAutoMixerSoundLevelUpdate;
...
}
在开始/更新混流时,可启动监听声浪回调的开关。
手动混流场景
调用 startMixerTask 接口发起手动混流任务时,设置 enableSoundLevel
参数为 true
可启动声浪的监听,并为每条输入流指定设置唯一的 soundLevelID
:
ZegoMixerTask task = ZegoMixerTask("task123");
// 开启混流声浪
task.enableSoundLevel = true;
ZegoMixerInput input = ZegoMixerInput.defaultConfig();
// 给输入流分配一个 soundLevelID
input.soundLevelID = 123;
// 其他配置
ZegoExpressEngine.instance.startMixerTask(task);
自动混流场景
调用 startAutoMixerTask 接口发起一个自动混流任务时,设置 enableSoundLevel
参数为 true
可启动声浪的监听:
var task = ZegoAutoMixerTask();
task.roomID = "room123";
task.taskID = "autotask123";
// 开启混流声浪
task.enableSoundLevel = true;
// 其他配置
ZegoExpressEngine.instance.startAutoMixerTask(task);
在更新混流任务时,可设置停止监听声浪回调的开关。
手动混流场景
在调用 startMixerTask 的客户端接口更新一个混流任务时,设置 enableSoundLevel
参数为 false
可停止声浪的监听:
ZegoMixerTask task = ZegoMixerTask("task123");
// 开启混流声浪
task.enableSoundLevel = false;
ZegoMixerInput input = ZegoMixerInput.defaultConfig();
// 给输入流分配一个 soundLevelID
input.soundLevelID = 123;
// 其他配置
ZegoExpressEngine.instance.startMixerTask(task);
自动混流场景
调用 startAutoMixerTask 的客户端接口更新一个自动混流任务时,设置 enableSoundLevel
参数为 false
可停止声浪的监听:
var task = ZegoAutoMixerTask();
task.roomID = "room123";
task.taskID = "autotask123";
// 开启混流声浪
task.enableSoundLevel = false;
// 其他配置
ZegoExpressEngine.instance.startAutoMixerTask(task);
联系我们
文档反馈