| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- //
- // KSYAUAudioCapture.h
- // KSYStreamer
- //
- //
- // Created by pengbin on 10/15/15.
- // Copyright © 2015 ksyun. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- #import <AVFoundation/AVFoundation.h>
- #define KSYAUReverb_FLAG 0x001
- #define KSYAUDelay_FLAG 0x002
- #define KSYAUPitchshift_FLAG 0x004
- /*!
- * @abstract 音效类型
- */
- typedef NS_ENUM(NSUInteger, KSYAudioEffectType){
- /// 初始化时状态为空闲
- KSYAudioEffectType_NONE = 0,
- /// 大叔
- KSYAudioEffectType_MALE,
- /// 萝莉
- KSYAudioEffectType_FEMALE,
- /// 宏大
- KSYAudioEffectType_HEROIC,
- /// 机器人
- KSYAudioEffectType_ROBOT,
- /// 自定义
- KSYAudioEffectType_COUSTOM,
- };
- /*!
- * @abstract 噪声抑制等级
- */
- typedef NS_ENUM(NSInteger, KSYAudioNoiseSuppress){
- /// 关闭
- KSYAudioNoiseSuppress_OFF = -1,
- /// 温和
- KSYAudioNoiseSuppress_LOW = 0,
- /// 中等
- KSYAudioNoiseSuppress_MEDIUM = 1,
- /// 激进
- KSYAudioNoiseSuppress_HIGH = 2,
- /// 非常激进
- KSYAudioNoiseSuppress_VERYHIGH = 3,
- };
- /** 音频采集模块
-
- 1. 基于 AudioUnit 实现的低延时音频采集模块
- 2. 支持对采集的语音添加混响音效 (目前提供了4种类型的混响场景)
- 3. 支持将采集的声音低延时播放,帮助主播选择音效 (又称"耳返")
- 4. 支持对采集的音频进行降噪处理
- 5. 采集的声音通过回调函数提供出来
- 6. 当启用噪声抑制功能时,输出音频数据的采样率为16K(重采样得到,与采集的采样率无关)
- */
- @interface KSYAUAudioCapture : NSObject
- /**
- 指定采集音频的采样率
- @param sampleRate 指定的采样率 , 默认为44100Hz
- @return 采集设备实例
- @warning 请尽量使用默认的44100, 使用其他的采样率可能导致混响和变声等功能异常
- */
- - (id) initWithSampleRate:(double)sampleRate;
- /** Start Audio capturing
- @abstract 启动音频采集, 占据麦克风资源
- @return 是否启动采集成功
- */
- - (BOOL)startCapture;
- /** 停止音频采集, 释放麦克风资源
- */
- - (void)stopCapture;
- /** 暂停音频采集(仍然占用麦克风资源) 停止回调音频数据
- */
- - (BOOL)pauseCapture;
- /** 暂停音频采集(仍然占用麦克风资源), 回调静音音频数据
- */
- - (BOOL)pauseWithMuteData;
- /** 恢复正常音频采集和回调
- */
- - (BOOL)resumeCapture;
- /**
- @abstract 是否播放采集的声音 (又称"耳返")
- @warning 如果在没有插入耳机的情况下启动, 容易出现很刺耳的声音
- */
- @property(nonatomic, assign) BOOL bPlayCapturedAudio;
- /**
- @abstract 是否使用带回声消除的采集模块(默认为NO)
- @discussion 请在连麦开始时在设置此属性为YES, 连麦结束记得设置为NO
- @discussion 此属性为YES时, 启动采集一定会打断其他音乐播放
- */
- @property(nonatomic, assign) BOOL enableVoiceProcess;
- /**
- @abstract 噪声抑制处理的等级(默认为KSYAudioNoiseSuppress_OFF)
- @discussion 当启用噪声抑制处理后, 内部会进行输出音频数据的
- */
- @property(nonatomic, assign) KSYAudioNoiseSuppress noiseSuppressionLevel;
- /**
- @abstract 是否强制设置AVAudioSession的类别为PlayAndRecord(默认为YES)
- @discussion 此属性为YES时, 每次启动采集会将类别强制设置为AVAudioSessionCategoryPlayAndRecord
- @discussion 为了避免别APP中的其他SDK将AVAudioSession的类别修改为无法录音,导致无法采集到声音
- */
- @property(nonatomic, assign) BOOL bForceAudioSessionCatogary;
- /**
- @abstract 设置mic采集的声音音量
- @discussion 调整范围 0.0~1.0
- */
- @property(nonatomic, assign) Float32 micVolume;
- /** 最近一次输出的音频包的时间戳*/
- @property(nonatomic, readonly) CMTime outputPts;
- /**
- @abstract 混响类型
- @discussion 目前提供了4种类型的混响场景, type和场景的对应关系如下
-
- - 0 关闭
- - 1 录音棚
- - 2 ktv
- - 3 小舞台
- - 4 演唱会
- */
- @property(nonatomic, assign) int reverbType;
- /**
- @abstract 音效类型
- @discussion 音效类型仅在enableVoiceProcess=NO时有效
- */
- @property(nonatomic, assign) KSYAudioEffectType effectType;
- /**
- @abstract 采集数据输出回调函数
- @discussion sampleBuffer 为采集到的音频数据
- @discussion 与pcmProcessingCallback两者只能二选一, 设置 audioProcessingCallback 会清空pcmProcessingCallback
- */
- @property(nonatomic, copy) void(^audioProcessingCallback)(CMSampleBufferRef sampleBuffer);
- /**
- @abstract 采集数据输出回调函数
- @discussion pData 和 len 为采集数据和长度 (目前只支持单声道, 只有pData[0]为有效数据指针 )
- @discussion 与audioProcessingCallback两者只能二选一, 设置 pcmProcessingCallback 会清空audioProcessingCallback
- */
- @property(nonatomic, copy) void(^pcmProcessingCallback)(uint8_t** pData, int len, const AudioStreamBasicDescription* fmt, CMTime timeInfo);
- /**
- @abstract 用户可以自定义播放的内容,直接把数据填入ioData
- @discussion ioData 目前只支持int16 的单声道数据
- */
- @property(nonatomic, copy) void(^customPlayCallback)(AudioBufferList *ioData, UInt32 inumber);
- /**
- @abstract 是否有耳机麦克风可用
- @return 是/否有耳机麦克风
- */
- + (BOOL)isHeadsetPluggedIn;
- /**
- 设备是否正在采集音频数据
- */
- @property (nonatomic, readonly) BOOL isRunning;
- /**
- @abstract 变调组合类型
- @discussion 目前提供了8种类型的变调场景, flag和变调组合类型的对应关系如下
- - 0 无组合
- - 1 reverb
- - 2 delay
- - 3 reverb+delay
- - 4 pitchShift
- - 5 reverb+pitchShift
- - 6 delay+pitchShift
- - 7 reverb+delay+pitchShift
- @warning 在设置effectTypeFlag时,请先将effectType设置成KSYAudioEffectType_COUSTOM模式,否则effectTypeFlag设置无法生效
- */
- @property(nonatomic, assign) int effectTypeFlag;
- /**
- @abstract 自定义混响参数接口
- @param inValue 混响参数对应的值
- @param inID 混响参数(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;
- @end
|