In un'app che sto attualmente sviluppando, ho più o meno colpito un muro di mattoni. Nell'applicazione è possibile inserire una vista che elenca tutti i file audio salvati localmente in una vista tabella standard. Da qui puoi fare clic su di essi per riprodurli o premere un pulsante di registrazione qui sotto per creare una nuova registrazione, che verrà automaticamente salvata nella sandbox delle app.Corruzione apparentemente casuale di file usando AVAudioRecorder (A volte il file non può essere riprodotto) - iOS
Ora tutto funziona perfettamente, il più delle volte. Posso sedermi e fare registrazioni e riprodurle. Posso sedermi e testare questo e quello per circa 45 senza alcun problema. Poi all'improvviso, a volte casuali, colpirò un problema molto strano. Il problema è che il registratore all'improvviso inizia a salvare solo file corrotti che non possono essere riprodotti e hanno una dimensione di 4096 byte, indipendentemente dalla durata della registrazione.
Io uso l'AVAudioRecorder in modo del tutto normale, la sua creazione come questo:
// Specific settings for the audio recording
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:AVAudioQualityMin],
AVEncoderAudioQualityKey,
[NSNumber numberWithInt:8],
AVEncoderBitRateKey,
[NSNumber numberWithInt: 2],
AVNumberOfChannelsKey,
[NSNumber numberWithFloat:22000.0],
AVSampleRateKey,
nil];
NSError *error = nil;
audioRecorder = [[AVAudioRecorder alloc]
initWithURL:contentURL
settings:recordSettings
error:&error];
audioRecorder.delegate = self;
comincio la registrazione in questo modo:
if (!isRecording) {
isRecording = YES;
[audioRecorder record];
// Start the timer
recordTiming = [NSDate date];
timeCheck = [NSTimer
scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(timeCheck)
userInfo:nil
repeats:YES];
}
E poi fermarla con questo:
if (isRecording) {
[audioRecorder stop];
// Stop the timer
[timeCheck invalidate];
}
Non ho idea di cosa potrebbe causare questo problema. Finora ho provato quasi tutto. Ho verificato che l'oggetto del registratore sia riciclato correttamente (quindi hai una nuova istanza per ciascuna registrazione) e che il vecchio riferimento è deallocato e così via, per assicurarti che non abbia nulla a che fare con gli oggetti interferenti, ma niente lo risolve.
C'è qualcuno che ha una leggera idea di cosa potrebbe causare problemi con i file danneggiati?
Quindi lei sta dicendo la variabile errore è sempre pari a zero dopo Audiorecorder viene inizializzato, giusto? –
Sì, corretto :) In realtà ho alcuni controlli di errore rapidi di seguito per NSLog per assicurarmi che sia inizializzato correttamente e che NSError sia nullo e così via. – CodingBeagle
Capito, miglioriamo il tuo codice allora, il problema dovrebbe probabilmente diventare ovvio o scomparire. Invece di utilizzare isRecording var, è possibile utilizzare una registrazione di proprietà audioRecorder; non riesco a vedere l'inizializzazione della sessione audio ma probabilmente l'hai omessa. Comunque ti suggerirei anche di migliorare la gestione degli errori, la risposta sotto potrebbe essere usata come riferimento: http://stackoverflow.com/questions/1010343/how-do-i-record-audio-on-iphone-with -avaudiorecorder –