伴音

更新时间: 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 回调接收音乐文件播放状态改变的相关信息,如果播放出错,可通过对应错误码排查故障。


配置伴音

配置步骤

  1. 设置伴音参数,例如伴音文件路径、是否本地播放、是否通过辅流通道传输等等,并调用 startAudioMixing 开始伴音。

  2. 伴音任务管理。开始伴音后,还可以通过其他方法实现伴音任务管理等更多功能,例如:

    • 进度管理: 通过 pauseAudioMixingresumeAudioMixing 暂停或恢复伴音、通过 setAudioMixingPosition 设置伴音文件的播放进度。

    • 音量管理:通过 setAudioMixingPlaybackVolumesetAudioMixingSendVolume 等方法设置伴音的播放音量、伴音的发送音量。

    • 音调管理:调用 setAudioMixingPitch 方法并通过 pitch 参数设置伴音文件的音调。

      • 仅开始伴音后可调用此方法。伴音结束后,音调将恢复为默认值。
      • 音调 pitch 参数的取值范围为 [-12,12],默认值为 0,每相邻两个值的音调高度相差半音。取值的绝对值越大,音调升高或降低得越多。
      • 若 SDK 返回 30003,表示参数设置错误。若 SDK 返回 30005,表示引擎尚未初始化或未找到当前伴音文件。
    • 获取伴音相关信息:例如通过 getAudioMixingCurrentPosition 等接口获取伴音文件的播放进度、调用 getAudioMixingPitch 方法获取伴音文件的音调等。

  3. 在离开房间前调用 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 伴音文件播放进度回调
此文档是否对你有帮助?
有帮助
去反馈
  • 功能概述
  • 注意事项
  • 配置伴音
  • 配置步骤
  • 示例项目源码
  • 示例代码
  • API 参考