多音效混音
本文主要介绍连麦过程中添加多重音效混音的使用场景。
- 从 v5.2.6 版本开始,QNAudioEffectMixer 需要通过 QNRTC.createAudioEffectMixer 接口创建,并通过 QNLocalAudioTrack.addAudioFilter 的方式进行关联。将不再支持通过 QNMicrophoneAudioTrack.createAudioEffectMixer 创建
- 音效混音支持本地文件和在线文件,支持的音频格式为:aac、mp3、mp4、ogg、opus、wav、m4a、flac
- 请尽量使用本地音乐文件,避免因为网络资源的异常导致的混音卡顿等情况
使用方式如下:
创建 QNAudioEffectMixer
SDK 支持对不同的音频 Track 设置音效混音控制器,可以通过 QNRTC.createAudioEffectMixer 接口来创建 QNAudioEffectMixer 对象。再通过 QNLocalAudioTrack.addAudioFilter 的方式进行混音控制器的关联。
QNAudioEffectMixer audioEffectMixer = mMicrophoneAudioTrack.createAudioEffectMixer(mAudioEffectMixerListener); // 创建音效混音控制器
localAudioTrack.addAudioFilter(audioEffectMixer); // 关联音效混音控制器
其中,QNAudioEffectMixerListener 为音效混音监听器,监听回调定义如下:
public interface QNAudioMusicMixerListener {
/**
* 音效混音完成时回调
*
* @param effectID 已完成混音的音效 ID
*/
void onEffectFinished(int effectID);
/**
* 指定音效混音出错时回调
*
* @param effectID 音效 ID
* @param errCode 错误码
* @param errorMessage 错误信息
*/
void onEffectError(int effectID, int errCode, String errorMessage);
/**
* 音效混音发生错误时回调
* 已废弃,请使用 onEffectError
*
* @param errorCode 错误码
* @param errorMessage 错误信息
*/
@Deprecated
void onError(int errorCode, String errorMessage);
}
混音场景下的错误码可参考混音相关错误码
注意:同一个音效混音控制器只能关联一个音频 Track,重复添加将会失败。
创建 QNAudioEffect
QNAudioEffect 为音效文件的配置类,可通过 QNAudioEffectMixer.createAudioEffect 接口进行创建,每一个音效文件都需对应一个 QNAudioEffect 实例,使用代码参考如下:
String filePath = "/sdcard/effect.mp3";
QNAudioEffect audioEffect = mAudioEffectMixer.createAudioEffect(effectID, filePath);
其中,effectID 为音效文件的唯一标识符,可自行生成并维护,该标识符为控制一系列音效混音操作的依据,需保证唯一。
混音控制
在创建了 QNAudioEffectMixer 音效混音控制器实例和 QNAudioEffect 音效文件实例后,可以通过如下接口进行音效混音操作的控制。
使用代码参考如下:
// 开始指定音效混音
mAudioEffectMixer.start(audioEffect.getID());
// 停止指定音效混音
mAudioEffectMixer.stop(audioEffect.getID());
// 恢复指定音效混音
mAudioEffectMixer.resume(audioEffect.getID());
// 暂停指定音效混音
mAudioEffectMixer.pause(audioEffect.getID());
// 停止所有正在混音的音效
mAudioEffectMixer.stopAll();
// 暂停所有正在混音的音效
mAudioEffectMixer.pauseAll();
// 恢复所有已经暂停混音的音效
mAudioEffectMixer.resumeAll();
上述为混音基本流程的控制,更多控制方式请参考 QNAudioEffectMixer。
推送控制
SDK 混音功能默认会将混音音效推送至远端。
从 v5.2.0 版本开始,SDK 支持配置混音音效是否需要推送至远端,若关闭推送,则混音音效将只做本地播放,配置接口如下:
mAudioEffectMixer.setPublishEnabled(audioEffect.getID(), false);
注:若您的业务场景涉及到本地音效的播放,如礼物音效等,那么为了避免系统的降噪对通话质量产生影响,我们建议您通过音效混音接口替代其他音频播放器来实现本地音效的播放。
音量控制
混音场景下,主要包含三种音量设置:麦克风混音音量、音效混音音量、本地播放音量。三种音量的设置方式参考如下:
- 麦克风混音音量:可以通过 QNMicrophoneAudioTrack.setVolume 接口进行配置。
- 音效混音音量:可以通过 QNAudioEffectMixer.setVolume 和 QNAudioEffectMixer.setAllEffectsVolume 接口分别对指定音效和所有音效进行音量配置。
- 本地播放音量:可以通过 QNMicrophoneAudioTrack.setPlayingVolume 接口进行配置,需要注意的是,播放音量是基于混音后的音频进行调整的,会受到混音音量调整的影响。
参考代码如下:
mMicrophoneAudioTrack.setVolume(0.5f); // 设置麦克风采集(混音)音量
mMicrophoneAudioTrack.setPlayingVolume(0.5f); // 设置混音后本地播放的音量
mAudioEffectMixer.setVolume(audioEffect.getID(), 0.5f); // 设置指定音效的混音音量
mAudioEffectMixer.setAllEffectsVolume(0.5f); // 设置所有音效的混音音量
返听
若您在混音场景下,有开启返听的需要,则可以通过 QNMicrophoneAudioTrack.setEarMonitorEnabled 接口进行开启,参考代码如下:
mMicrophoneAudioTrack.setEarMonitorEnabled(true); // 开启返听
为达到最佳体验,建议在佩戴耳机的情况下使用该功能
注意事项
- 混音功能会将混音音频与当前已发布的音频 Track 数据混合并推送出去,若当前的音频 Track 尚未发布,则混音操作将失效。
- 混音功能建议在佩戴耳机的情况下使用。需要注意的是 SDK 内部播放器的音量控制采用了 Android 5.0 以上设置播放音量相关的 API,所以存在设置背景音量对部分低版本机型在本地播放时可能会失效,但在远端听到的是设置好的音量的情况,故混音功能推荐在 Android 5.0 以上的机型中使用以获得最好的体验。
示例代码
背景音乐混音场景的完整示例代码可参考 QNRTC-API-Examples。