KSYAUAudioCapture.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. //
  2. // KSYAUAudioCapture.h
  3. // KSYStreamer
  4. //
  5. //
  6. // Created by pengbin on 10/15/15.
  7. // Copyright © 2015 ksyun. All rights reserved.
  8. //
  9. #import <Foundation/Foundation.h>
  10. #import <AVFoundation/AVFoundation.h>
  11. #define KSYAUReverb_FLAG 0x001
  12. #define KSYAUDelay_FLAG 0x002
  13. #define KSYAUPitchshift_FLAG 0x004
  14. /*!
  15. * @abstract 音效类型
  16. */
  17. typedef NS_ENUM(NSUInteger, KSYAudioEffectType){
  18. /// 初始化时状态为空闲
  19. KSYAudioEffectType_NONE = 0,
  20. /// 大叔
  21. KSYAudioEffectType_MALE,
  22. /// 萝莉
  23. KSYAudioEffectType_FEMALE,
  24. /// 宏大
  25. KSYAudioEffectType_HEROIC,
  26. /// 机器人
  27. KSYAudioEffectType_ROBOT,
  28. /// 自定义
  29. KSYAudioEffectType_COUSTOM,
  30. };
  31. /*!
  32. * @abstract 噪声抑制等级
  33. */
  34. typedef NS_ENUM(NSInteger, KSYAudioNoiseSuppress){
  35. /// 关闭
  36. KSYAudioNoiseSuppress_OFF = -1,
  37. /// 温和
  38. KSYAudioNoiseSuppress_LOW = 0,
  39. /// 中等
  40. KSYAudioNoiseSuppress_MEDIUM = 1,
  41. /// 激进
  42. KSYAudioNoiseSuppress_HIGH = 2,
  43. /// 非常激进
  44. KSYAudioNoiseSuppress_VERYHIGH = 3,
  45. };
  46. /** 音频采集模块
  47. 1. 基于 AudioUnit 实现的低延时音频采集模块
  48. 2. 支持对采集的语音添加混响音效 (目前提供了4种类型的混响场景)
  49. 3. 支持将采集的声音低延时播放,帮助主播选择音效 (又称"耳返")
  50. 4. 支持对采集的音频进行降噪处理
  51. 5. 采集的声音通过回调函数提供出来
  52. 6. 当启用噪声抑制功能时,输出音频数据的采样率为16K(重采样得到,与采集的采样率无关)
  53. */
  54. @interface KSYAUAudioCapture : NSObject
  55. /**
  56. 指定采集音频的采样率
  57. @param sampleRate 指定的采样率 , 默认为44100Hz
  58. @return 采集设备实例
  59. @warning 请尽量使用默认的44100, 使用其他的采样率可能导致混响和变声等功能异常
  60. */
  61. - (id) initWithSampleRate:(double)sampleRate;
  62. /** Start Audio capturing
  63. @abstract 启动音频采集, 占据麦克风资源
  64. @return 是否启动采集成功
  65. */
  66. - (BOOL)startCapture;
  67. /** 停止音频采集, 释放麦克风资源
  68. */
  69. - (void)stopCapture;
  70. /** 暂停音频采集(仍然占用麦克风资源) 停止回调音频数据
  71. */
  72. - (BOOL)pauseCapture;
  73. /** 暂停音频采集(仍然占用麦克风资源), 回调静音音频数据
  74. */
  75. - (BOOL)pauseWithMuteData;
  76. /** 恢复正常音频采集和回调
  77. */
  78. - (BOOL)resumeCapture;
  79. /**
  80. @abstract 是否播放采集的声音 (又称"耳返")
  81. @warning 如果在没有插入耳机的情况下启动, 容易出现很刺耳的声音
  82. */
  83. @property(nonatomic, assign) BOOL bPlayCapturedAudio;
  84. /**
  85. @abstract 是否使用带回声消除的采集模块(默认为NO)
  86. @discussion 请在连麦开始时在设置此属性为YES, 连麦结束记得设置为NO
  87. @discussion 此属性为YES时, 启动采集一定会打断其他音乐播放
  88. */
  89. @property(nonatomic, assign) BOOL enableVoiceProcess;
  90. /**
  91. @abstract 噪声抑制处理的等级(默认为KSYAudioNoiseSuppress_OFF)
  92. @discussion 当启用噪声抑制处理后, 内部会进行输出音频数据的
  93. */
  94. @property(nonatomic, assign) KSYAudioNoiseSuppress noiseSuppressionLevel;
  95. /**
  96. @abstract 是否强制设置AVAudioSession的类别为PlayAndRecord(默认为YES)
  97. @discussion 此属性为YES时, 每次启动采集会将类别强制设置为AVAudioSessionCategoryPlayAndRecord
  98. @discussion 为了避免别APP中的其他SDK将AVAudioSession的类别修改为无法录音,导致无法采集到声音
  99. */
  100. @property(nonatomic, assign) BOOL bForceAudioSessionCatogary;
  101. /**
  102. @abstract 设置mic采集的声音音量
  103. @discussion 调整范围 0.0~1.0
  104. */
  105. @property(nonatomic, assign) Float32 micVolume;
  106. /** 最近一次输出的音频包的时间戳*/
  107. @property(nonatomic, readonly) CMTime outputPts;
  108. /**
  109. @abstract 混响类型
  110. @discussion 目前提供了4种类型的混响场景, type和场景的对应关系如下
  111. - 0 关闭
  112. - 1 录音棚
  113. - 2 ktv
  114. - 3 小舞台
  115. - 4 演唱会
  116. */
  117. @property(nonatomic, assign) int reverbType;
  118. /**
  119. @abstract 音效类型
  120. @discussion 音效类型仅在enableVoiceProcess=NO时有效
  121. */
  122. @property(nonatomic, assign) KSYAudioEffectType effectType;
  123. /**
  124. @abstract 采集数据输出回调函数
  125. @discussion sampleBuffer 为采集到的音频数据
  126. @discussion 与pcmProcessingCallback两者只能二选一, 设置 audioProcessingCallback 会清空pcmProcessingCallback
  127. */
  128. @property(nonatomic, copy) void(^audioProcessingCallback)(CMSampleBufferRef sampleBuffer);
  129. /**
  130. @abstract 采集数据输出回调函数
  131. @discussion pData 和 len 为采集数据和长度 (目前只支持单声道, 只有pData[0]为有效数据指针 )
  132. @discussion 与audioProcessingCallback两者只能二选一, 设置 pcmProcessingCallback 会清空audioProcessingCallback
  133. */
  134. @property(nonatomic, copy) void(^pcmProcessingCallback)(uint8_t** pData, int len, const AudioStreamBasicDescription* fmt, CMTime timeInfo);
  135. /**
  136. @abstract 用户可以自定义播放的内容,直接把数据填入ioData
  137. @discussion ioData 目前只支持int16 的单声道数据
  138. */
  139. @property(nonatomic, copy) void(^customPlayCallback)(AudioBufferList *ioData, UInt32 inumber);
  140. /**
  141. @abstract 是否有耳机麦克风可用
  142. @return 是/否有耳机麦克风
  143. */
  144. + (BOOL)isHeadsetPluggedIn;
  145. /**
  146. 设备是否正在采集音频数据
  147. */
  148. @property (nonatomic, readonly) BOOL isRunning;
  149. /**
  150. @abstract 变调组合类型
  151. @discussion 目前提供了8种类型的变调场景, flag和变调组合类型的对应关系如下
  152. - 0 无组合
  153. - 1 reverb
  154. - 2 delay
  155. - 3 reverb+delay
  156. - 4 pitchShift
  157. - 5 reverb+pitchShift
  158. - 6 delay+pitchShift
  159. - 7 reverb+delay+pitchShift
  160. @warning 在设置effectTypeFlag时,请先将effectType设置成KSYAudioEffectType_COUSTOM模式,否则effectTypeFlag设置无法生效
  161. */
  162. @property(nonatomic, assign) int effectTypeFlag;
  163. /**
  164. @abstract 自定义混响参数接口
  165. @param inValue 混响参数对应的值
  166. @param inID 混响参数(0~6), 对应关系如下
  167. - 0 kReverb2Param_DryWetMix
  168. - 1 kReverb2Param_Gain
  169. - 2 kReverb2Param_MinDelayTime
  170. - 3 kReverb2Param_MaxDelayTime
  171. - 4 kReverb2Param_DecayTimeAt0Hz
  172. - 5 kReverb2Param_DecayTimeAtNyquist
  173. - 6 kReverb2Param_RandomizeReflections
  174. **/
  175. - (void) setReverbParamID:(AudioUnitParameterID)inID
  176. withInValue:(AudioUnitParameterValue)inValue;
  177. /**
  178. @abstract 自定义pitchShift参数接口
  179. @param inValue pitchShift参数对应的值
  180. @param inID pitchShift参数,对应关系如下
  181. - 0 kNewTimePitchParam_Rate
  182. - 1 kNewTimePitchParam_Pitch (SDK中变调主要是调这个参数)
  183. - 4 kNewTimePitchParam_Overlap
  184. - 6 kNewTimePitchParam_EnablePeakLocking
  185. **/
  186. - (void) setPitchParamID:(AudioUnitParameterID)inID
  187. withInValue:(AudioUnitParameterValue)inValue;
  188. /**
  189. @abstract 自定义delay参数接口
  190. @param inValue delay参数对应的值
  191. @param inID delay参数(0~3),对应关系如下
  192. - 0 kDelayParam_WetDryMix
  193. - 1 kDelayParam_DelayTime
  194. - 2 kDelayParam_Feedback
  195. - 3 kDelayParam_LopassCutoff
  196. **/
  197. - (void) setDelayParamID:(AudioUnitParameterID)inID
  198. withInValue:(AudioUnitParameterValue)inValue;
  199. @end