Skip to content

Commit 704f6b1

Browse files
authored
fix duration in stop
fix #40 I basically moved all the logic from "stop" to "audioRecorderDidFinishRecording".
1 parent 3387d0a commit 704f6b1

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

ios/RNSoundRecorder.m

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
@implementation RNSoundRecorder {
66
AVAudioRecorder* _recorder;
7+
RCTPromiseResolveBlock _resolveStop;
8+
RCTPromiseRejectBlock _rejectStop;
79
}
810

911
- (dispatch_queue_t)methodQueue
@@ -149,43 +151,45 @@ + (BOOL)requiresMainQueueSetup
149151
return;
150152
}
151153

152-
__block NSError* err = nil;
153-
154+
_resolveStop = resolve;
155+
_rejectStop = reject;
154156
[_recorder stop];
157+
158+
}
159+
160+
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
161+
{
162+
163+
__block NSError* err = nil;
155164

156165
// prepare the response
157166
NSString* url = [_recorder url].absoluteString;
158167
url = [url substringFromIndex:NSMaxRange([url rangeOfString:@"://"])]; // trim the scheme (file://)
159168
AVAudioPlayer* player = [[AVAudioPlayer alloc] initWithContentsOfURL:[_recorder url] error:nil];
160169
NSDictionary* response = @{@"duration": @(player.duration * 1000), @"path": url};
161170

171+
// deactivate the audio session
162172
AVAudioSession* session = [AVAudioSession sharedInstance];
163-
164-
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(100.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
165-
[session setActive:NO error:&err];
166-
});
173+
[session setActive:NO error:&err];
167174

168175
if (err) {
169-
reject(@"session_set_active_error", [[err userInfo] description], err);
176+
_rejectStop(@"session_set_active_error", [[err userInfo] description], err);
170177
return;
171178
}
172179

173180
[session setCategory:AVAudioSessionCategoryPlayback error:&err];
174181

175182
if (err) {
176-
reject(@"reset_session_error", [[err userInfo] description], err);
183+
_rejectStop(@"reset_session_error", [[err userInfo] description], err);
177184
return;
178185
}
179186

180-
resolve(response);
181-
182-
}
183-
184-
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
185-
{
187+
_resolveStop(response);
186188

187-
// release the recorder
188-
_recorder = nil;
189+
// release the recorder promise resolver
190+
_recorder = nil;
191+
_resolveStop = nil;
192+
_rejectStop = nil;
189193

190194
}
191195

0 commit comments

Comments
 (0)