// 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