文档反馈
文档反馈

混音

在音视频通话或直播场景中,默认情况下只有房间成员本人说话的人声,出于烘托气氛、营造多样化语音环境的需求,可以通过混音功能为人声添加背景音乐、伴奏音乐,或者添加掌声口哨等场景效果,并将合成后的声音播放给房间内其他人。

功能概述

混音,指 SDK 从 App 获取一路音频数据,将 App 提供的音频数据与 SDK 采集的音频数据整合为一路音频数据,通常用于音乐直播、在线KTV、连麦PK、游戏直播等场景。

NERTC SDK 提供混音相关方法,实现播放短时音效和背景音乐的功能。

NERTC SDK 混音功能支持如下设置:

Android

注意事项

实现方法

参考如下步骤,在你的项目中实现播放混音文件:

  1. 加入频道成功后,通过 NERtcCreateAudioMixingOption 设置混音参数,例如混音文件路径、是否本地播放等等,并调用 startAudioMixing 开始混音。
  2. 混音任务管理。

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

    • 进度管理: 通过 pauseAudioMixingresumeAudioMixing 暂停或恢复混音、通过 setAudioMixingPosition 设置混音文件的播放进度。
    • 音量管理:通过 setAudioMixingPlaybackVolumesetAudioMixingSendVolume 等方法设置混音的播放音量、伴奏的发送音量。
    • 获取混音相关信息:例如通过 getAudioMixingCurrentPosition 等接口获取混音文件的播放进度等。
  3. 在离开频道前调用 stopAudioMixing 结束混音。

示例代码

    // 首先设置混音参数
    NERtcCreateAudioMixingOption option = new NERtcCreateAudioMixingOption();
    option.path = "/sdcard/test.mp3"; //混音文件路径
    option.playbackEnabled = true;    //是否本地播放
    option.playbackVolume = 100;      //本地播放音量
    option.sendEnabled = true;        //是否编码发送
    option.sendVolume = 100;          //发送音量
    option.loopCount = 1;             //循环次数
    int ret = NERtcEx.getInstance().startAudioMixing(option);; //开始混音任务
    if(ret == NERtcConstants.ErrorCode.OK) {
        //创建混音任务成功
    }else {
        //创建混音任务失败
    }

    // 暂停、恢复混音任务
    NERtcEx.getInstance().pauseAudioMixing();
    NERtcEx.getInstance().resumeAudioMixing();

    // 获取和设置本地播放混音的音量,范围为 0 ~ 100
    int volume = NERtcEx.getInstance().getAudioMixingPlaybackVolume();
    NERtcEx.getInstance().setAudioMixingPlaybackVolume(volume);

    // 获取和设置编码发送混音的音量,范围为 0 ~ 100
    int volume = NERtcEx.getInstance().getAudioMixingSendVolume();
    NERtcEx.getInstance().setAudioMixingSendVolume(volume);

    // 获取混音文件总时长
    long time = NERtcEx.getInstance().getAudioMixingDuration();

    // 获取当前混音文件播放位置
    long position = NERtcEx.getInstance().getAudioMixingCurrentPosition();

    // 设置混音文件播放位置
    NERtcEx.getInstance().seekAudioMixingPosition(position);

    // 结束混音任务
    NERtcEx.getInstance().stopAudioMixing();

API参考

方法 功能描述
startAudioMixing 开始混音
stopAudioMixing 结束混音
pauseAudioMixing 暂停混音
resumeAudioMixing 恢复混音
setAudioMixingPlaybackVolume 设置混音播放音量
setAudioMixingSendVolume 设置伴奏的发送音量
getAudioMixingPlaybackVolume 获取混音的播放音量
getAudioMixingSendVolume 获取混音的发送音量
getAudioMixingDuration 获取混音的总长度
setAudioMixingPosition 设置混音的播放进度
getAudioMixingCurrentPosition 获取混音当前播放进度
事件 事件描述
onAudioMixingStateChanged 伴音状态回调
onAudioMixingTimestampUpdate 伴奏播放进度回调

iOS

注意事项

实现方法

参考如下步骤,在您的项目中实现混音功能:

  1. 初始化混音配置类,通过 NERtcCreateAudioMixingOption 设置混音任务相关参数,例如混音文件路径、是否本地播放等等。
  2. 加入频道成功后,调用 - (int)startAudioMixingWithOption:(NERtcCreateAudioMixingOption *)option 创建混音任务。
  3. 混音任务管理。

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

    • 进度管理: 通过 pauseAudioMixingresumeAudioMixing 暂停或恢复混音、通过 setAudioMixingPosition 设置混音文件的播放进度。
    • 音量管理:通过 setAudioMixingPlaybackVolumesetAudioMixingSendVolume 等方法设置混音的播放音量、伴奏的发送音量。
    • 获取混音相关信息:例如通过 getAudioMixingCurrentPosition 等接口获取混音文件的播放进度等。
  4. 在离开频道前调用 - (int)stopAudioMixing 结束混音。

示例代码

NSString *path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"m4a"];
NERtcCreateAudioMixingOption option = [[NERtcCreateAudioMixingOption alloc] init];
option.path = path;               //混音文件路径
option.playbackEnabled = YES;    //是否本地播放(默认为YES)
option.playbackVolume = 100;      //本地播放音量
option.sendEnabled = YES;        //是否编码发送(默认为YES)
option.sendVolume = 100;          //发送音量
option.loopCount = 1;             //循环次数
int ret = 
[self.engine startAudioMixingWithOption:option]; //开始混音任务
if (ret == kNERtcNoError) {
    //创建混音任务成功
} else {
    //创建混音任务失败
}

// 暂停、恢复混音任务
[self.engine pauseAudioMixing];
[self.engine resumeAudioMixing];

// 获取和设置本地播放混音的音量,范围为 0 ~ 100
int volume = 0;
[self.engine getAudioMixingPlaybackVolume:&volume];
[self.engine setAudioMixingPlaybackVolume:volume];

// 获取和设置编码发送混音的音量,范围为 0 ~ 100
//int volume;
[self.engine getAudioMixingSendVolume:&volume];
[self.engine setAudioMixingSendVolume:volume];

// 获取混音文件总时长
uint64_t duration;
[self.engine getAudioMixingDuration:&duration];
// 获取当前混音文件播放位置
uint64_t position;
[self.engine getAudioMixingCurrentPosition:&position];

// 设置混音文件播放位置
[self.engine setAudioMixingPosition:position];

// 结束混音任务
[self.engine stopAudioMixing];

API参考

方法 功能描述
startAudioMixingWithOption 开始播放音乐文件
stopAudioMixing 停止播放音乐文件
pauseAudioMixing 暂停播放音乐文件
resumeAudioMixing 恢复播放音乐文件
setAudioMixingPlaybackVolume 设置音乐文件播放音量
setAudioMixingSendVolume 设置音乐文件的发送音量
getAudioMixingPlaybackVolume 获取音乐文件的播放音量
getAudioMixingSendVolume 获取音乐文件的发送音量
getAudioMixingDuration 获取音乐文件的总长度
setAudioMixingPosition 设置音乐文件的播放进度
getAudioMixingCurrentPosition 获取音乐文件当前播放进度
事件 事件描述
onAudioMixingStateChanged 本地用户的音乐文件播放状态改变回调
onAudioMixingTimestampUpdate 音乐文件播放进度回调

Windows/macOS

注意事项

实现方法

参考如下步骤,在您的项目中实现混音功能:

  1. 初始化混音配置类,通过 NERtcCreateAudioMixingOption 设置混音任务相关参数,例如混音文件路径、是否本地播放等等。
  2. 加入频道成功后,调用 startAudioMixing 开始混音。
  3. 混音任务管理。 开始混音后,还可以通过其他方法实现混音任务管理等更多功能,例如:
    • 进度管理: 通过 pauseAudioMixingresumeAudioMixing 暂停或恢复混音、通过 setAudioMixingPosition 设置混音文件的播放进度。
    • 音量管理:通过 setAudioMixingPlaybackVolumesetAudioMixingSendVolume 等方法设置混音的播放音量、伴奏的发送音量。
    • 获取混音相关信息:例如通过 getAudioMixingCurrentPosition 等接口获取混音文件的播放进度等。
  4. 在离开频道前调用 stopAudioMixing 结束混音。

示例代码

// 首先设置混音参数
NERtcCreateAudioMixingOption option;
option.path = "D:\\audio_files\\test.mp3"; //混音文件的全路径
option.playback_enabled = true;    //是否本地播放
option.playback_volume = 100;      //本地播放音量
option.send_enabled = true;        //是否编码发送
option.send_volume = 100;          //发送音量
option.loop_count = 1;             //循环次数
int res = kNERtcErrFatal;
if (nrtc_engine_)
{
    res = nrtc_engine_->startAudioMixing(&option);
}
if (kNERtcNoError == res)
{
    //创建混音任务成功
}
else
{
    //创建混音任务失败
}

// 暂停、恢复混音任务
nrtc_engine_->pauseAudioMixing();
nrtc_engine_->resumeAudioMixing();

// 获取和设置本地播放混音的音量,范围为 0 ~ 100
int volume = 0;
nrtc_engine_->getAudioMixingPlaybackVolume(&volume);
nrtc_engine_->setAudioMixingPlaybackVolume(volume);

// 获取和设置编码发送混音的音量,范围为 0 ~ 100
volume = 0;
nrtc_engine_->getAudioMixingSendVolume(&volume);
nrtc_engine_->setAudioMixingSendVolume(volume);

// 获取混音文件总时长
uint64_t duration = 0;
nrtc_engine_->getAudioMixingDuration(&duration);

// 获取当前混音文件播放位置
uint64_t position = 0;
nrtc_engine_->getAudioMixingCurrentPosition(&position);

// 设置混音文件播放位置
nrtc_engine_->seekAudioMixingPosition(position);

// 结束混音任务
nrtc_engine_->stopAudioMixing();

API参考

方法 功能描述
startAudioMixing 开始播放伴奏
stopAudioMixing 停止播放伴奏
pauseAudioMixing 暂停播放伴奏
resumeAudioMixing 恢复播放伴奏
setAudioMixingPlaybackVolume 设置伴奏播放音量
setAudioMixingSendVolume 设置伴奏的发送音量
getAudioMixingPlaybackVolume 获取伴奏的播放音量
getAudioMixingSendVolume 获取伴奏的发送音量
getAudioMixingDuration 获取伴奏的总长度
setAudioMixingPosition 设置伴奏的播放进度
getAudioMixingCurrentPosition 获取伴奏当前播放进度
事件 事件描述
onAudioMixingStateChanged 伴奏播放状态改变回调
onAudioMixingTimestampUpdate 伴奏播放进度回调

Web

注意事项

实现方法

参考如下步骤,在您的项目中实现混音功能:

  1. 加入频道成功后,调用 startAudioMixing 创建混音任务。
  2. 混音任务管理。

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

    • 进度管理: 通过 pauseAudioMixingresumeAudioMixing 暂停或恢复混音、通过 setAudioMixingPosition 设置混音文件的播放进度。
    • 音量管理:通过 adjustAudioMixingVolume 调整伴音音量。
    • 获取混音相关信息:例如通过 getAudioMixingCurrentPosition 等接口获取混音文件的播放进度等。
  3. 在离开频道前调用 stopAudioMixing 结束混音。

示例代码

//开始混音
const audioMixingEndHandler = function(event){
  console.warn('伴音结束: ', event)
}

const options = {
  audioFilePath: '"someaudio.mp3"', 
  loopback: false,
  replace: false,
  cycle: 0,
  playStartTime: 0,
  volume: 200,
  auidoMixingEnd: audioMixingEndHandler
}
localStream.startAudioMixing(options).then(res=>{
  console.log('伴音成功')
}).catch(err=>{
  console.error('伴音失败: ', err)
})

//暂停混音
localStream.pauseAudioMixing().then(res=>{
  console.log('暂停伴音成功')
}).catch(err=>{
  console.error('暂停伴音失败: ', err)
})

//恢复混音
localStream.resumeAudioMixing().then(res=>{
  console.log('恢复伴音成功')
}).catch(err=>{
  console.error('恢复伴音失败: ', err)
})

//停止伴音
localStream.stopAudioMixing().then(res=>{
  console.log('停止伴音成功')
}).catch(err=>{
  console.error('停止伴音失败: ', err)
})

API参考

方法 功能描述
startAudioMixing 开始播放音乐文件和本地麦克风声音的混合
pauseAudioMixing 暂停播放音乐文件
resumeAudioMixing 恢复播放音乐文件
stopAudioMixing 停止播放音乐文件
adjustAudioMixingVolume 调节音乐文件播放音量
getAudioMixingDuration 获取音乐文件的总长度
setAudioMixingPosition 获取音乐文件当前播放进度
×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。