-
Notifications
You must be signed in to change notification settings - Fork 67
Expand file tree
/
Copy pathLKAudioProcessingManager.m
More file actions
132 lines (109 loc) · 4.48 KB
/
Copy pathLKAudioProcessingManager.m
File metadata and controls
132 lines (109 loc) · 4.48 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
#import "LKAudioProcessingManager.h"
#import "LKAudioProcessingAdapter.h"
static NSString *const LKAudioProcessingManagerErrorDomain = @"LKAudioProcessingManagerErrorDomain";
@implementation LKAudioProcessingManager
+ (instancetype)sharedInstance {
static dispatch_once_t onceToken;
static LKAudioProcessingManager* sharedInstance = nil;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
- (instancetype)init {
if (self = [super init]) {
_audioProcessingModule = [[RTCDefaultAudioProcessingModule alloc] init];
_capturePostProcessingAdapter = [[LKAudioProcessingAdapter alloc] init];
_renderPreProcessingAdapter = [[LKAudioProcessingAdapter alloc] init];
_audioProcessingModule.capturePostProcessingDelegate = _capturePostProcessingAdapter;
_audioProcessingModule.renderPreProcessingDelegate = _renderPreProcessingAdapter;
}
return self;
}
- (void)addLocalAudioRenderer:(nonnull id<RTCAudioRenderer>)renderer {
[_capturePostProcessingAdapter addAudioRenderer:renderer];
}
- (void)removeLocalAudioRenderer:(nonnull id<RTCAudioRenderer>)renderer {
[_capturePostProcessingAdapter removeAudioRenderer:renderer];
}
- (void)addRemoteAudioRenderer:(nonnull id<RTCAudioRenderer>)renderer {
[_renderPreProcessingAdapter addAudioRenderer:renderer];
}
- (void)removeRemoteAudioRenderer:(nonnull id<RTCAudioRenderer>)renderer {
[_renderPreProcessingAdapter removeAudioRenderer:renderer];
}
- (void)addCapturePostProcessor:(nonnull id<LKExternalAudioProcessingDelegate>)processor {
[_capturePostProcessingAdapter addProcessing:processor];
}
- (void)removeCapturePostProcessor:(nonnull id<LKExternalAudioProcessingDelegate>)processor {
[_capturePostProcessingAdapter removeProcessing:processor];
}
- (void)addRenderPreProcessor:(nonnull id<LKExternalAudioProcessingDelegate>)processor {
[_renderPreProcessingAdapter addProcessing:processor];
}
- (void)removeRenderPreProcessor:(nonnull id<LKExternalAudioProcessingDelegate>)processor {
[_renderPreProcessingAdapter removeProcessing:processor];
}
- (void)clearProcessors {
// TODO
}
- (BOOL)requireAudioDeviceModule:(NSError * _Nullable * _Nullable)error {
if (self.audioDeviceModule != nil) {
return YES;
}
if (error != nil) {
*error = [NSError errorWithDomain:LKAudioProcessingManagerErrorDomain
code:-1
userInfo:@{
NSLocalizedDescriptionKey : @"Audio device module is unavailable",
}];
}
return NO;
}
- (BOOL)startLocalRecording:(NSError * _Nullable * _Nullable)error {
if (![self requireAudioDeviceModule:error]) {
return NO;
}
if (self.audioDeviceModule.isRecording) {
return YES;
}
NSInteger status = self.audioDeviceModule.isRecordingInitialized
? [self.audioDeviceModule startRecording]
: [self.audioDeviceModule initAndStartRecording];
if (status != 0) {
if (error != nil) {
*error = [NSError errorWithDomain:LKAudioProcessingManagerErrorDomain
code:status
userInfo:@{
NSLocalizedDescriptionKey :
[NSString stringWithFormat:@"Failed to start local recording (status %ld)",
(long)status],
}];
}
return NO;
}
return YES;
}
- (BOOL)stopLocalRecording:(NSError * _Nullable * _Nullable)error {
if (![self requireAudioDeviceModule:error]) {
return NO;
}
if (!self.audioDeviceModule.isRecording) {
return YES;
}
NSInteger status = [self.audioDeviceModule stopRecording];
if (status != 0) {
if (error != nil) {
*error = [NSError errorWithDomain:LKAudioProcessingManagerErrorDomain
code:status
userInfo:@{
NSLocalizedDescriptionKey :
[NSString stringWithFormat:@"Failed to stop local recording (status %ld)",
(long)status],
}];
}
return NO;
}
return YES;
}
@end