伴音
更新时间: 2025/06/11 16:45:39
在音视频通话或直播场景中,默认情况下只有房间成员本人说话的人声。出于烘托气氛、营造多样化语音环境的需求,NERTC SDK 支持通过混音功能为人声添加背景音乐、伴奏音乐或其他场景效果,并将合成后的声音播放给房间内其他成员。
功能概述
混音,指 SDK 从 App 获取一路音频数据,将 App 提供的音频数据与 SDK 采集的音频数据整合为一路音频数据,通常用于音乐直播、在线 KTV、连麦 PK、游戏直播等场景。
NERTC SDK 提供混音相关方法,实现播放背景音乐的功能。
-
播放背景音乐:
伴音功能支持在房间中播放本地或者在线音乐文件,作为通话或直播时的背景声音,同时让房间内的其他人听到此音乐。NERTC 播放伴音方法可以用来播放比较长的背景音,例如伴奏音乐、环境白噪声、背景音乐等等。
NERTC 支持在麦克风关闭的状态下,发送伴音。在娱乐社交、在线教育等场景中,即使用户不想要开启麦克风进行语音聊天,也能在房间内播放背景音乐。
NERTC SDK 混音功能支持如下设置:
-
混音:支持将音乐文件的音频流跟麦克风采集的音频流(主流)进行叠加并编码发送给对方,同时伴音功能支持通过辅流通道传输音乐文件的音频流。
-
循环:可以设置是否循环播放混音文件,以及循环次数。
-
音量控制:可以各自控制本地播放以及编码发送的混音音量。
-
音调控制:可以按半音音阶调整本地播放的音乐文件的音调。例如在 K 歌场景中,为了使歌曲更适合主播的声线音域,主播可以调整伴音的音调,升高或降低伴奏的音阶。
-
定位:混音任务支持从背景音乐文件的任意位置开始播放。
-
叠加:可以同时播放多个短时音效文件。
注意事项
-
伴音相关方法的返回值若小于 0,表示方法调用失败。
-
加入房间前或加入房间后,均可启动音效和伴音。
-
本地混音文件支持 MP3、M4A、AAC、3GP、WMA、WAV 格式,支持本地 SD 卡文件和在线 URL。
-
可通过
onAudioMixingStateChanged回调接收音乐文件播放状态改变的相关信息,如果播放出错,可通过对应错误码排查故障。
配置伴音
配置步骤
-
设置伴音参数,例如伴音文件路径、是否本地播放、是否通过辅流通道传输等等,并调用
startAudioMixing开始伴音。 -
伴音任务管理。开始伴音后,还可以通过其他方法实现伴音任务管理等更多功能,例如:
-
进度管理: 通过
pauseAudioMixing和resumeAudioMixing暂停或恢复伴音、通过setAudioMixingPosition设置伴音文件的播放进度。 -
音量管理:通过
setAudioMixingPlaybackVolume和setAudioMixingSendVolume等方法设置伴音的播放音量、伴音的发送音量。 -
音调管理:调用
setAudioMixingPitch方法并通过pitch参数设置伴音文件的音调。- 仅开始伴音后可调用此方法。伴音结束后,音调将恢复为默认值。
- 音调
pitch参数的取值范围为 [-12,12],默认值为 0,每相邻两个值的音调高度相差半音。取值的绝对值越大,音调升高或降低得越多。 - 若 SDK 返回 30003,表示参数设置错误。若 SDK 返回 30005,表示引擎尚未初始化或未找到当前伴音文件。
-
获取伴音相关信息:例如通过
getAudioMixingCurrentPosition等接口获取伴音文件的播放进度、调用getAudioMixingPitch方法获取伴音文件的音调等。
-
-
在离开房间前调用
stopAudioMixing结束伴音。
示例项目源码
网易云信提供 伴音示例项目源码,在 multiCall.nvue 文件中,您可以参考该源码配置伴音。
示例代码
javascript // 首先设置伴音参数
const option = {};
option.path = "/sdcard/test.mp3"; //伴音文件路径
option.playbackEnabled = true; //是否本地播放
option.playbackVolume = 100; //本地播放音量
option.sendEnabled = true; //是否编码发送
option.sendVolume = 100; //发送音量
option.loopCount = 1; //循环次数
option.startTimeStamp = 0; //音乐文件开始播放的时间,UTC 时间戳
this.engine.startAudioMixing(option);; //开始伴音任务
// 暂停、恢复伴音任务
this.engine.pauseAudioMixing();
this.engine.resumeAudioMixing();
// 获取和设置本地播放伴音的音量,范围为 0 ~ 200
const volume = 120;
this.engine.setAudioMixingPlaybackVolume(volume);
// 获取和设置编码发送伴音的音量,范围为 0 ~ 200
const volume = 120;
this.engine.setAudioMixingSendVolume(volume);
// 获取和设置本地播放伴音的音调,范围为 -12 ~ 12
const pitch = 0;
this.engine.setAudioMixingPitch(pitch);
// 获取伴音文件总时长
const time = this.engine.getAudioMixingDuration();
// 获取当前伴音文件播放位置
const position = this.engine.getAudioMixingCurrentPosition();
// 设置伴音文件播放位置
this.engine.seekAudioMixingPosition(position);
// 结束伴音任务
this.engine.stopAudioMixing();
API 参考
| 方法 | 功能描述 |
|---|---|
startAudioMixing |
开始伴音 |
stopAudioMixing |
结束伴音 |
pauseAudioMixing |
暂停伴音 |
resumeAudioMixing |
恢复伴音 |
setAudioMixingPlaybackVolume |
设置伴音文件的播放音量 |
setAudioMixingSendVolume |
设置伴音文件的发送音量 |
getAudioMixingPlaybackVolume |
获取伴音文件的播放音量 |
getAudioMixingSendVolume |
获取伴音文件的发送音量 |
getAudioMixingDuration |
获取伴音的总长度 |
setAudioMixingPosition |
设置伴音文件的播放进度 |
getAudioMixingCurrentPosition |
获取伴音文件的当前播放进度 |
getAudioMixingPitch |
获取伴音文件的音调 |
setAudioMixingPitch |
设置伴音文件的音调 |
| 事件 | 事件描述 |
|---|---|
onAudioMixingStateChanged |
本地用户的伴音文件播放状态改变回调 |
onAudioMixingTimestampUpdate |
伴音文件播放进度回调 |






