human: 如何处理七牛云的实时音视频QNAudioMusicMixer

gpt: [实时音视频](https://developer.qiniu.com/rtc) > API 文档 > Linux >QNAudioMusicMixer

#  QNAudioMusicMixer

最近更新时间: 2022-06-20 14:44:58

背景音乐混音控制类，提供了控制背景音乐混音一系列方法。

> 1\. 当前仅支持基于
> [QNMicrophoneAudioTrack](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
> Linux/11210/QNMicrophoneAudioTrack) 的背景音乐混音操作
>
> 2\. 混音需要加入房间并且成功发布后才会生效，因此，需要注意调用的时机
>
> 3\. 背景音乐混音仅支持同时混合一路背景音乐，若需要切换背景音乐，重新调用
> [QNMicrophoneAudioTrack.CreateAudioMusicMixer](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
> Linux/11210) 创建本类的实例即可
>
> 4\.
> 若您希望在混合背景音乐的同时添加音效，可参考音效混音接口([QNAudioEffectMixer](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
> Linux/11987/QNAudioEffectMixer))

Index

Core Methods

  * GetDuration
  * Start[1/2]
  * Start[2/2]
  * Stop
  * Resume
  * Pause
  * GetCurrentPosition
  * SeekTo
  * SetMixingVolume
  * GetMixingVolume
  * SetStartPosition
  * GetStartPosition

Core Methods

GetDuration

  * static int64_t GetDuration(const std::string& file_path)
  * 获取指定音频文件的总时长，单位：ms

> 该接口为同步方法，对于在线音频文件，获取时长会存在一定的耗时，需注意调用接口所在的线程

Returns 音频文件总时长，单位：ms

Start[1/2]

  * virtual bool Start() = 0
  * 开始混音并播放，音频只混一次，不做循环混音操作

混音开始后会触发
[QNAudioMusicMixerListener.OnAudioMusicMixerStateChanged](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11988) 回调，并回调
[QNMusicMixerState.kStateMixing](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11991) 状态

混音过程中会回调
[QNAudioMusicMixerListener.OnAudioMusicMixing](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11988) 方法

Start[2/2]

  * virtual bool Start(int loop_count) = 0
  * 开始指定次数的混音并播放

混音开始后会触发
[QNAudioMusicMixerListener.OnAudioMusicMixerStateChanged](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11988) 回调，并回调
[QNMusicMixerState.kStateMixing](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11991) 状态

混音过程中会回调
[QNAudioMusicMixerListener.OnAudioMusicMixing](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11988) 方法

Parameters

    * loop_count: int 

混音次数，-1 为无限循环，0 则不做混音，其他则为指定次数的混音

Stop

  * virtual bool Stop() = 0
  * 停止混音操作

混音停止后会触发
[QNAudioMusicMixerListener.OnAudioMusicMixerStateChanged](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11988) 回调，并回调
[QNMusicMixerState.kStateStopped](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11991) 状态

Resume

  * virtual bool Resume() = 0
  * 恢复混音操作

混音恢复后会触发
[QNAudioMusicMixerListener.OnAudioMusicMixerStateChanged](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11988) 回调，并回调
[QNMusicMixerState.kStateMixing](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11991) 状态

Pause

  * virtual bool Pause() = 0
  * 暂停混音操作

混音暂停后会触发
[QNAudioMusicMixerListener.OnAudioMusicMixerStateChanged](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11988) 回调，并回调
[QNMusicMixerState.kStatePaused](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11991) 状态

GetCurrentPosition

  * virtual int64_t GetCurrentPosition() = 0
  * 获取当前音频混音的位置，单位: ms

Returns 当前音频混音的位置，单位: ms

SeekTo

  * virtual bool SeekTo(int64_t seek_pos) = 0
  * 跳到指定位置混音

成功跳到指定位置混音后会触发
[QNAudioMusicMixerListener.OnAudioMusicMixerStateChanged](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11988) 回调，并回调
[QNMusicMixerState.kStateMixing](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
Linux/11991) 状态

Parameters

    * seek_pos: int64_t 

指定位置的时间戳，单位: ms

SetMixingVolume

  * virtual void SetMixingVolume(float mix_volume) = 0
  * 设置背景音乐的混音音量，默认音量为 1.0f

> 若想修改混音中麦克风采集音频的音量，可通过
> [QNMicrophoneAudioTrack.SetVolume](https://developer.qiniu.com/rtc/11989/QNAudioMusicMixer-
> Linux/11210) 接口实现

Parameters

    * mix_volume: float 

背景音乐混音音量，[0.0f - 1.0f]

GetMixingVolume

  * virtual float GetMixingVolume() = 0
  * 获取背景音乐混音的音量

Returns 背景音乐混音的音量，[0.0f - 1.0f]

SetStartPosition

  * virtual void SetStartPosition(int64_t start_pos) = 0
  * 设置背景音乐混音的起始位置，起始位置的有效值为 0 - duration 之间的值

Parameters

    * start_pos: int64_t 

背景音乐混音的起始位置，单位：ms

GetStartPosition

  * virtual int64_t GetStartPosition() = 0
  * 获取背景音乐混音的起始位置

Returns 背景音乐混音的起始位置，单位：ms

以上内容是否对您有帮助？