Skip to content

AUAudioCapture

jiangdsuccess edited this page Dec 15, 2017 · 27 revisions

介绍

与声音处理相关的模块有如下两个:

  • KSYAUAudioCapture基于iOS的AudioUnit接口实现的音频采集和处理功能.
  • KSYBGMPlayer基于iOS的AudioQueue实现的背景音乐播放器.

其中音频处理主要包括如下四种:

  1. 美声(混响)是主播声音叠加增强的过程,让直播现场效果更强;金山云SDK暂支持录音棚、演唱会、KTV、小舞台四种效果,四种效果依次不断增强
  2. 变声是将主播声音变为搞怪的特效处理,能够增强互动时的趣味性;金山云SDK暂支持大叔、萝莉、庄重、机器人四种效果
  3. 降噪 是对主播声音的处理, 将背景噪声过滤掉, 使主播的声音更清晰; 金山云SDK支持4档不同强度的噪声抑制,可以根据具体场景选择.
  4. 升降调是主播唱歌时伴奏的特效处理,即从低沉到高亢的一个过程,更适用于较专业的唱歌直播;金山云SDK支持-3至3从低沉到高亢的7个等级的调节,0为原始音效,具体等级可根据客户业务需求做自定义处理

前三种为采集模块的功能, 最后一种为播放音乐时的功能.

基本步骤

  • Kit类提供
@property (nonatomic, readonly) KSYAUAudioCapture  *aCapDev;

  • 创建音频采集对象
_aCapDev = [[KSYAUAudioCapture alloc] init];
  • 启动音频采集
[_aCapDev startCapture];
  • 停止音频采集
[_aCapDev stopCapture];
  • 用户自定义音频采集后回调
_aCapDev.audioProcessingCallback = ^(CMSampleBufferRef buf){
}

混响场景

_aCapDev.reverbType = 3;

  • 取值及效果:
     reverbType= 0;//关闭
     reverbType =1;//录音棚
     reverbType =2;//演唱会
     reverbType =3;//KTV
     reverbType =4;//小舞台

变声场景

_aCapDev.effecType = KSYAudioEffectType_ROBOT;

取值范围请参见文档

   KSYAudioEffectType_NONE = 0; //关闭
   KSYAudioEffectType_MALE = 1; //大叔
   KSYAudioEffectType_FEMALE = 2; //萝莉
   KSYAudioEffectType_HEROIC = 3; //庄重
   KSYAudioEffectType_ROBOT = 4; //机器人
   KSYAudioEffectType_COUSTOM = 5; //自定义
  • 自定义

自定义场景从v2.9.5引入,用户可以通过参数调用接口直接设置reverb参数、pitchShift参数和delay参数来满足自身需要的场景

/**
 @abstract 变调组合类型,可以设置reverb、pitchShift和delay三种效果的自由组合
 @注意 在设置effectTypeFlag时,请先将effectType设置成KSYAudioEffectType_COUSTOM模式,否则effectTypeFlag设置无法生效
**/
@property(nonatomic, assign) int effectTypeFlag;
/**
 @abstract  自定义reverb参数接口
 @param     inValue reverb参数对应的值
 @param     inID reverb参数(0~6), 对应关系如下
 - 0 kReverb2Param_DryWetMix
 - 1 kReverb2Param_Gain
 - 2 kReverb2Param_MinDelayTime
 - 3 kReverb2Param_MaxDelayTime
 - 4 kReverb2Param_DecayTimeAt0Hz
 - 5 kReverb2Param_DecayTimeAtNyquist
 - 6 kReverb2Param_RandomizeReflections
 **/
- (void) setReverbParamID:(AudioUnitParameterID)inID
             withInValue:(AudioUnitParameterValue)inValue;
/**
 @abstract  自定义pitchShift参数接口
 @param     inValue pitchShift参数对应的值
 @param     inID pitchShift参数,对应关系如下
 - 0 kNewTimePitchParam_Rate
 - 1 kNewTimePitchParam_Pitch (SDK中变调主要是调这个参数)
 - 4 kNewTimePitchParam_Overlap
 - 6 kNewTimePitchParam_EnablePeakLocking
 **/
- (void) setPitchParamID:(AudioUnitParameterID)inID
              withInValue:(AudioUnitParameterValue)inValue;
/**
 @abstract  自定义delay参数接口
 @param     inValue delay参数对应的值
 @param     inID delay参数(0~3),对应关系如下
 - 0 kDelayParam_WetDryMix
 - 1 kDelayParam_DelayTime
 - 2 kDelayParam_Feedback
 - 3 kDelayParam_LopassCutoff
 **/
- (void) setDelayParamID:(AudioUnitParameterID)inID
             withInValue:(AudioUnitParameterValue)inValue;

耳返

  • 是否播放采集的声音
@property(nonatomic, assign) BOOL bPlayCapturedAudio;

降噪

  • 噪声抑制处理的等级(默认为KSYAudioNoiseSuppress_HIGH)
  • 设置为KSYAudioNoiseSuppress_OFF 可以关闭噪声抑制
@property (nonatomic, assign) KSYAudioNoiseSuppress noiseSuppressionLevel

声音音量

  • 取值从0.0~1.0;
@property(nonatomic, assign) Float32 micVolume;

说明

1. 本模块是基于AudioUnit实现的低延时音频采集模块;

2. 本模块能够对采集的语音添加混响效果(目前支持4类混响场景),用户可以在音频采集的过程自由切换混响场景;

3. 本模块能够对采集的声音低延时播放,帮助主播选择音效(又称"耳返");

4. 本模块采集的声音通过回调函数提供出来。

注意:当使用本模块时,需要禁用KSYGPUCamera中的音频采集,即在创建KSYGPUCamera对象后,
     不需要调用addAudioInputsAndOutputs来添加音频采集模块。

1. 推流环节说明

2. 特色功能说明

2.1 采集

2.2 音频处理

2.3 视频处理

2.4 编码

2.5 推流

2.6 输入多样化

2.7 集成

3. 第三方功能

4. 技术专栏

5. 已知问题

8. FAQ

金山云计算

Clone this wiki locally