// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
self.recorder = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"record.caf"]] settings:nil error:nil];
}
- (void)restartBtnPushed {
NSLog(@"Before stop: %d", self.recorder.recording);
[self.recorder stop];
NSLog(@"After stop: %d", self.recorder.recording);
[self.recorder record];
NSLog(@"After start: %d", self.recorder.recording);
}
如果我不停的按RESTART按钮,我得到的结果如下:无法重新启动AVAudioRecorder
Before stop: 0
After stop: 0
After start: 1
--------------------
Before stop: 1
After stop: 0
After start: 1 <-----
-------------------- |
Before stop: 0 <----|----This is wrong version
After stop: 0
After start: 1 <-----
-------------------- |
Before stop: 1 <----|----This is correct version
After stop: 0
After start: 1
我可以如下总结一下:
Stopped Recorder + 'stop' + 'start' -> Recorder is running successfully
Running Recorder + 'stop' + 'start' -> Recorder fails to run
有什么建议吗?
我没有发布这个答案,因为我不确定它对我来说甚至是有意义的:/但是,它可能与运行时环境有关吗?仅仅因为你打电话给记录器开始和停止并不意味着它实际上是在那时开始或停止。主运行时线程控制执行。 (据我所知,AV方法也在自己的线程中运行,如果是的话,也许你会遇到竞争状态)。您可能需要实现AVAudiRecorderDelegate,以便在再次重新启动之前验证录制是否先停下来。 – carbonbasednerd
@cabonbasednerd谢谢。你的回答就是发生了什么。 – aXqd