2013-10-02 1 views
2

Ниже приведено содержание моего метода кнопки записи. Он создает нужный файл, но независимо от того, как долго я записываю, созданный файл всегда имеет длину 4kb и 0 секунд, и я не могу понять, почему он недействителен. Замер также возвращает -120 для averagePowerPerChannel, и я предполагаю его, потому что файл поврежден.AVAudioRecorder записывает пустой файл

NSDictionary *recordSettings = [NSDictionary 
            dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithInt:AVAudioQualityMin], 
            AVEncoderAudioQualityKey, 
            [NSNumber numberWithInt:16], 
            AVEncoderBitRateKey, 
            [NSNumber numberWithInt: 2], 
            AVNumberOfChannelsKey, 
            [NSNumber numberWithFloat:44100.0], 
            AVSampleRateKey, 
            nil]; 
    NSError *error; 
    NSArray *dirPaths; 
    NSString *docsDir; 

    dirPaths = NSSearchPathForDirectoriesInDomains(
                NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir = [dirPaths objectAtIndex:0]; 
    NSString *soundFilePath = [docsDir 
           stringByAppendingPathComponent:@"sound.caf"]; 

    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 

    self.shotRecorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error]; 
    self.shotRecorder.delegate = self; 

    if (error) 
    { 
     NSLog(@"error: %@", [error localizedDescription]); 

    } else { 
     [self.shotRecorder prepareToRecord]; 
     self.shotRecorder.meteringEnabled = YES; 
     [self.shotRecorder record]; 
     shotTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03 target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES]; 
    } 

ответ

4

Прежде чем начать запись, установите для AudioSession для вашего приложения один из типов сеанса, который поддерживает запись. Например, назвать это перед началом записи:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:&error]; 

Если вы попытаетесь сделать запись с AudioSession набор к типу, который не поддерживает запись, код появляется, чтобы выполнить хорошо, но приведет к тому, пустые 4kb аудиофайлы, которые вы описали.

Чтобы воспроизвести файл позже, обязательно верните категорию в ту, которая поддерживает воспроизведение, например, AVAudioSessionCategoryPlayback или AVAudioSessionCategoryPlayAndRecord.

+0

исправлена ​​проблема! Благодаря! – nexuzzz