背景音乐混音
本文主要介绍连麦过程中添加背景音乐混音的使用场景。
- 背景音乐混音支持本地文件和在线文件,支持的音频文件格式为:aac、mp3、mp4、ogg、opus、wav、m4a、flac
- 请尽量使用本地音乐文件,避免因为网络资源的异常导致的混音卡顿等情况
使用方式如下:
创建 QNAudioMusicMixer
SDK 当前仅支持基于 QNMicrophoneAudioTrack 的混音功能,可以通过 QNMicrophoneAudioTrack.CreateAudioMusicMixer 来创建 QNAudioMusicMixer 对象
std::string file_path = "../example.mp3";
QNAudioMusicMixer* audio_mixer = microphone_audio_track->CreateAudioMusicMixer(file_path, listener);
其中,QNAudioMusicMixerListener 为混音状态监听器,监听回调定义如下:
class QINIU_EXPORT_DLL QNAudioMusicMixerListener {
public:
/**
* 错误回调
*
* @param error_code 错误码
* @param error_message 错误信息
*/
virtual void OnAudioMusicMixerError(int error_code,
const std::string& error_message) = 0;
/**
* 背景音乐混音状态变化回调
*
* @param music_state_ 背景音乐混音状态
*/
virtual void OnAudioMusicMixerStateChanged(QNMusicMixerState music_state) = 0;
/**
* 背景音乐播放进度回调
*
* @param current_pos 背景音乐播放当前进度
*/
virtual void OnAudioMusicMixing(int64_t current_pos) = 0;
protected:
~QNAudioMusicMixerListener(){};
};
其中,混音状态的改变都会通过 QNAudioMusicMixerListener.OnAudioMusicMixerStateChanged 回调通知到上层。回调的监听状态可参考 QNMusicMixerState。混音场景下的错误码可参考混音相关错误码
混音控制
在创建了 QNAudioMusicMixer 实例后,可以通过该实例提供的混音控制接口进行混音操作的控制,使用代码参考如下:
// 开始混音,成功后会触发 QNMusicMixerState.kStateMixing 状态的回调
mAudioMixer->Start();
// 停止混音,成功后会触发 QNMusicMixerState.kStateStopped 状态的回调
mAudioMixer->Stop();
// 恢复混音,成功后会触发 QNMusicMixerState.kStateMixing 状态的回调
mAudioMixer->Resume();
// 暂停混音,成功后会触发 QNMusicMixerState.kStatePaused 状态的回调
mAudioMixer->Pause();
// 跳到指定位置进行混音,成功后回触发 QNMusicMixerState.kStateMixing 状态的回调
mAudioMixer->SeekTo(position_ms);
上述为混音基本流程的控制,更多控制方式请参考 QNAudioMusicMixer。
音量控制
混音场景下,主要包含两种音量设置:麦克风混音音量、背景音乐混音音量。音量的设置方式参考如下:
- 麦克风混音音量:可以通过 QNMicrophoneAudioTrack.SetVolume 接口进行配置。
- 背景音乐混音音量:可以通过 QNAudioMusicMixer.SetMixingVolume 接口进行配置。
参考代码如下:
microphone_audio_track->SetVolume(0.5f); // 设置麦克风采集(混音)音量
audio_music_mixer->SetMixingVolume(0.5f); // 设置背景音乐的混音音量
切换音乐
背景音乐混音仅支持同时混合一路背景音乐,若需要切换背景音乐,可通过重新调用 QNMicrophoneAudioTrack.CreateAudioMusicMixer 创建 QNAudioMusicMixer 实例实现。参考代码如下:
// 使用 music-1 进行混音
QNAudioMusicMixer* audio_music_mixer = microphone_audio_track->CreateAudioMusicMixer(music1_file_path, listener); // 创建基于 music-1 的混音控制器
audio_music_mixer->Start(); // 开始 music-1 的混音
audio_music_mixer->Stop(); // 停止 music-1 的混音
microphone_audio_track->DestroyAudioMusicMixer(audio_music_mixer); // 销毁第一个 mixer
// 切换音乐到 music-2 进行混音
audio_music_mixer = microphone_audio_track->CreateAudioMusicMixer(music2_file_path, listener); // 创建基于 music-2 的混音控制器
audio_music_mixer->Start(); // 开始 music-2 的混音
audio_music_mixer->Stop(); // 停止 music-2 的混音
注意事项
- 混音功能会将混音音乐与当前已发布的音频 Track 数据混合并推送出去,若当前的音频 Track 尚未发布,则混音操作将失效。
文档反馈
(如有产品使用问题,请 提交工单)