KSYAUAudioCapture.h
6.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
//
// 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