iOS - Wiedergabe von aufgezeichnetem Audio schlägt mit OSStatus-Fehler -43 fehl (Datei nicht gefunden)

Ich habe eine AVAudioRecorder-Instanz folgendermaßen eingerichtet, wenn meine Ansicht geladen wird:

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

Wenn der Benutzer dann die Aufnahmetaste drückt, mache ich Folgendes:

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

Dann, um die Aufnahme / Wiedergabe zu stoppen:

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

Danach möchte ich in der Lage sein, das, was aufgenommen wurde, wiederzugeben. Deshalb gehe ich wie folgt vor:

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

Aber wenn ich losgehe und die Datei abspiele wird geholtOSStatusfehler -43 Datei nicht gefunden.

Dies alles läuft übrigens auf dem Gerät, auf dem Simulator und ist ein Fehler, wenn versucht wird, den Rekorder oder Player zu instanziieren, und ich habe gesehen, dass es sich um ein Simulatorproblem handelt.

EDIT 1: Ich habe den OSStatus-Fehler -43 behoben, der etwas mit dem Kodierungsformat zu tun hat. Ich habe das Format auskommentiert und die Datei richtig aufgezeichnet und abgespielt, aber ich muss in einem komprimierten Format aufnehmen. Kennt jemand die Einstellungen dafür?

EDIT 2: Es gelang mir, Einstellungen zu finden, die für komprimiertes AAC-Audio funktionierten. Eine 2-minütige Audiodatei ist 256 KB groß. Ich habe meinen Code aktualisiert, um den aktuellen Status wiederzugeben. Vielen Dank an alle, die für Ihre Hilfe geantwortet haben.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage