Не удалось перезапустить AVAudioRecorder - PullRequest
0 голосов
/ 02 июля 2011
// 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, я получу результаты, как показано ниже:

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

Есть идеи?

1 Ответ

0 голосов
/ 18 ноября 2012

Вам, вероятно, нужно использовать метод паузы, а не остановки. Если вы обратитесь к документации по методу, AVAudioRecorder остановит звуковой файл, что может вызвать проблемы с его перезаписью при следующем запуске.

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

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

Вызов этого метода неявно вызывает prepareToRecord, который создает (или стирает) аудиофайл и подготавливает систему к записи.

...