iOS - Odtwarzanie nagranego dźwięku nie powiedzie się z błędem OSStatus -43 (nie znaleziono pliku)

Konfiguruję instancję AVAudioRecorder w następujący sposób, gdy ładuję widok:

<code>AVAudioSession *audioSession = [AVAudioSession sharedInstance];
audioSession.delegate = self;
[audioSession setActive:YES error:nil];
[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];

NSString *tempDir = NSTemporaryDirectory();
NSString *soundFilePath = [tempDir stringByAppendingPathComponent:@"sound.m4a"];

NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSLog(@"%@", soundFileURL);

NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,
                                [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey,
                                [NSNumber numberWithInt:16], AVEncoderBitRateKey,
                                [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                                [NSNumber numberWithFloat:8000.0], AVSampleRateKey,
                                [NSNumber numberWithInt:8], AVLinearPCMBitDepthKey,
                                nil];

NSError *error = nil;

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

if (error) {
    NSLog(@"error: %@", [error localizedDescription]);
} else {
    [self.recorder prepareToRecord];
}
</code>

Następnie, gdy użytkownik naciśnie przycisk nagrywania, robię:

<code>- (IBAction)record:(id)sender {
    if (!self.isRecording) {
        self.isRecording = YES;
        [self.recorder record];
        self.recordButton.enabled = NO;
    }
}
</code>

Następnie, aby zatrzymać nagrywanie / odtwarzanie:

<code>- (IBAction)stop:(id)sender {
    if (self.isRecording) {
        [self.recorder stop];
        self.recordButton.enabled = YES;
        self.isRecording = NO;
    }

    if (self.isPlaying) {
        [self.player stop];
        self.isPlaying = NO;
        self.playButton.enabled = YES;
    }
}
</code>

Po tym chcę móc odtwarzać to, co zostało nagrane, więc wykonuję następujące czynności:

<code>- (IBAction)play:(id)sender {
    NSError *error = nil;
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:self.recorder.url error:&error];
    self.player.delegate = self;

    if (error) {
        NSLog(@"%@", error.localizedDescription);
    } else {
        self.isPlaying = YES;
        [self.player play];
        self.playButton.enabled = NO;
    }
}
</code>

Ale kiedy idę i gram, plik jest pobieranyBłąd statusu OS -43 nie znaleziono pliku.

To wszystko działa na urządzeniu btw, na symulatorze y błąd przy próbie utworzenia instancji rejestratora lub odtwarzacza, a od kiedy widziałem, że jest to problem z symulatorem.

EDYTUJ 1: Rozwiązałem błąd OSStatus -43, który ma coś wspólnego z formatem kodowania, skomentowałem format i poprawnie nagrał i odtworzył plik, ale muszę nagrać w formacie skompresowanym. Czy ktoś zna ustawienia do tego?

EDYCJA 2: Udało mi się znaleźć ustawienia, które działały dla skompresowanego dźwięku AAC. 2min plik audio wychodzi do 256 KB, zaktualizowałem mój kod, aby odzwierciedlić aktualny stan. Dziękujemy wszystkim, którzy odpowiedzieli za twoją pomoc.

questionAnswers(4)

yourAnswerToTheQuestion