2011-07-02 11 views
0
// 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 

アイデア?

+0

私はそれが私には意味をなさないと分かっていないので、これを投稿しているわけではありません:/しかし、実行時環境と関係がありますか?あなたがレコーダーのスタートとストップを呼び出すだけで、それが実際に始まったり停止したりするわけではありません。メインランタイムスレッドは実行を制御します。 (私が知っている限り、AVメソッドは自分のスレッドでも実行され、そうであれば競合状態に陥っている可能性があります)。 AVAudiRecorderDelegateを実装して、レコーディングを再開する前にレコーディングが最初に停止したことを確認することができます。 – carbonbasednerd

+0

@cabonbasednerdありがとうございました。あなたの答えはちょうど起こったことです。 – aXqd

答えて

0

停止するのではなく一時停止方法を使用する必要があります。 AVAudioRecorderのメソッドドキュメントを参照すると、オーディオファイルが閉じられ、次回起動時にファイルを上書きする問題が発生するようです。このメソッドを呼び出す

https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVAudioRecorder_ClassReference/Reference/Reference.html#//apple_ref/occ/instm/AVAudioRecorder/record

https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVAudioRecorder_ClassReference/Reference/Reference.html#//apple_ref/occ/instm/AVAudioRecorder/stopは暗黙作成(または消去)prepareToRecord、オーディオファイルを呼び出して記録するためのシステムを準備します。

関連する問題