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

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

#  QNAudioSourceMixer

最近更新时间: 2023-10-20 19:43:43

音源混音类，提供了控制 PCM 裸数据混音的一系列方法。

> 1\. 当前支持基于
> [QNMicrophoneAudioTrack](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/8855/QNMicrophoneAudioTrack-iOS) 和
> [QNCustomAudioTrack](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/8856/QNCustomAudioTrack-iOS) 的音源混音操作
>
> 2\. 注意调用的时机，加入房间并且成功发布后混音才会生效
>
> 3\. 通过
> [QNRTC.createAudioSourceMixer](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/8834) 创建
> [QNAudioSourceMixer](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/12270/QNAudioSourceMixer-iOS) 实例对象, 使用
> [audioTrack.addAudioFilter](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/undefined) 将 sourceMixer 对象添加到 audioTrack 中

Index

Core Methods

  * createAudioSourceWithSourceID[1/3]
  * createAudioSourceWithSourceID[2/3]
  * createAudioSourceWithSourceID[3/3]
  * destroyAudioSourceWithSourceID
  * setPublishEnabled
  * isPublishEnabled
  * setVolume
  * getVolume
  * setAllSourcesVolume
  * pushAudioBuffer

Core Methods

createAudioSourceWithSourceID[1/3]

  * \- ([QNAudioSource](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-iOS/12273/QNAudioSource-iOS) *)createAudioSourceWithSourceID:(int)sourceID
  * 创建音源混音配置类实例，默认小端、关闭阻塞模式

> 每一路参与混音的音源都需要对应一个
> [QNAudioSource](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/12273/QNAudioSource-iOS) 实例
>
> 音源 ID 作为音源标识符，请务必保证唯一

Parameters

    * sourceID: int 

音源文件唯一标识符

    * filePath: NSString 

文件路径

Returns
[QNAudioSource](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
iOS/12273/QNAudioSource-iOS) 实例

createAudioSourceWithSourceID[2/3]

  * \- ([QNAudioSource](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-iOS/12273/QNAudioSource-iOS) *)createAudioSourceWithSourceID:(int)sourceID blockingMode:(BOOL)blockingMode;
  * 创建音源混音配置类实例，默认小端

> 当外部送入 PCM 数据进行混音时，可以使用：
>
> 1\. 阻塞模式，此时外部数据可以持续送入 SDK，当 SDK 缓存的待混音数据过多时，会阻塞
> [QNAudioSourceMixer.pushAudioBuffer](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/12270) 接口，直到缓存数据被 SDK 混音使用，
>
> 2\. 非阻塞模式，此时外部数据需要按每次送入音频数据的时长，按这个时长的间隔来依次送入；也可以使用播放器的回调来送入 SDK；如果送入过快，则 SDK
> 会丢弃过多的数据。

> 每一路参与混音的音源都需要对应一个
> [QNAudioSource](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/12273/QNAudioSource-iOS) 实例
>
> 音源 ID 作为音源标识符，请务必保证唯一

Parameters

    * sourceID: int 

音源文件唯一标识符

    * blockingMode: BOOL 

阻塞模式

Returns
[QNAudioSource](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
iOS/12273/QNAudioSource-iOS) 实例

createAudioSourceWithSourceID[3/3]

  * \- ([QNAudioSource](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-iOS/12273/QNAudioSource-iOS) *)createAudioSourceWithSourceID:(int)sourceID bigEndian:(BOOL)bigEndian blockingMode:(BOOL)blockingMode;
  * 创建音源混音配置类实例

> 当外部送入 PCM 数据进行混音时，可以使用：
>
> 1\. 阻塞模式，此时外部数据可以持续送入 SDK，当 SDK 缓存的待混音数据过多时，会阻塞
> [QNAudioSourceMixer.pushAudioBuffer](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/12270) 接口，直到缓存数据被 SDK 混音使用，
>
> 2\. 非阻塞模式，此时外部数据需要按每次送入音频数据的时长，按这个时长的间隔来依次送入；也可以使用播放器的回调来送入 SDK；如果送入过快，则 SDK
> 会丢弃过多的数据。

> 每一路参与混音的音源都需要对应一个
> [QNAudioSource](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
> iOS/12273/QNAudioSource-iOS) 实例
>
> 音源 ID 作为音源标识符，请务必保证唯一

Parameters

    * sourceID: int 

音源文件唯一标识符

    * bigEndian: BOOL 

是否是大端

    * blockingMode: BOOL 

阻塞模式

Returns
[QNAudioSource](https://developer.qiniu.com/rtc/12270/QNAudioSourceMixer-
iOS/12273/QNAudioSource-iOS) 实例

destroyAudioSourceWithSourceID

  * \- (void)destroyAudioSourceWithSourceID:(int)sourceID;
  * 销毁音源类

Parameters

    * sourceID: int 

音源唯一标识符

setPublishEnabled

  * \- (void)setPublishEnabled:(BOOL)publishEnabled sourceID:(int)sourceID;
  * 设置某音源音频是否发布到远端

Parameters

    * publishEnabled: BOOL 

是否发布到远端

    * sourceID: int 

音源唯一标识符

isPublishEnabled

  * \- (BOOL)isPublishEnabled:(int)sourceID;
  * 获取某音源音频是否发布到远端

Parameters

    * sourceID: int 

音源唯一标识符

Returns BOOL

setVolume

  * \- (void)setVolume:(float)volume sourceID:(int)sourceID;
  * 设置某音源音量，音量范围 0～1.0

Parameters

    * volume: float 

音量大小

    * sourceID: int 

音源唯一标识符

getVolume

  * \- (float)getVolume:(int)sourceID;
  * 获取某音源音量

Parameters

    * sourceID: int 

音源唯一标识符

Returns float，范围 0～1.0

setAllSourcesVolume

  * \- (void)setAllSourcesVolume:(float)volume;
  * 设置所有音源的音量，范围 0～1.0

Parameters

    * volume: float 

音量大小

pushAudioBuffer

  * \- (void)pushAudioBuffer:(AudioBuffer *)audioBuffer asbd:(AudioStreamBasicDescription *)asbd sourceID:(int)sourceID;
  * 导入音频数据

Parameters

    * sourceID: int 

音源唯一标识符

    * audioBuffer: AudioBuffer 

音频数据

    * asbd: AudioStreamBasicDescription 

音频数据格式

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