В приложении, которое я сейчас разрабатываю, я более или менее ударил по кирпичной стене. В приложении вы можете ввести представление, в котором перечислены все локально сохраненные аудиофайлы в стандартном представлении таблицы. Отсюда вы можете щелкнуть по ним, чтобы воспроизвести их, или нажать кнопку записи ниже, чтобы создать новую запись, которая впоследствии автоматически будет сохранена в изолированной программной среде приложений.Видимо случайное повреждение файла с помощью AVAudioRecorder (Иногда файл нельзя воспроизвести) - iOS
Теперь все это работает отлично, в большинстве случаев. Я могу сидеть и записывать и воспроизводить их. Я могу сидеть и тестировать это снова и снова около 45 без каких-либо проблем. Затем внезапно в случайные моменты я попаду в очень странную проблему. Проблема в том, что рекордер внезапно начинает ничего не сохранять, кроме поврежденных файлов, которые невозможно воспроизвести и размером всего 4096 байт, независимо от того, как долго вы записываете.
Я использую AVAudioRecorder в совершенно стандартным способом, установив его так:
// 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;
Я начала записи, как это:
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];
}
А потом остановить его с этим:
if (isRecording) {
[audioRecorder stop];
// Stop the timer
[timeCheck invalidate];
}
Я понятия не имею, что может вызвать эту проблему. До сих пор я пробовал почти все. Я проверил, чтобы объект рекордера был переработан правильно (так что у вас есть новый экземпляр для каждой записи сейчас) и что старая ссылка освобождена и так далее, чтобы убедиться, что она не имеет ничего общего с мешающими объектами, но ничего не решает.
Есть ли у кого есть небольшое представление о том, что может вызвать проблемы с поврежденными файлами?
Так вы говорите, переменная ошибки всегда ноль после audioRecorder инициализации, верно? –
Да, правильно :) На самом деле у меня есть некоторые быстрые проверки ошибок ниже для NSLog, чтобы убедиться, что он правильно инициализирован и что NSError равен нулю и т. Д. – CodingBeagle
Получил это, давайте улучшим ваш код, проблема, вероятно, должна стать очевидной или исчезнуть. Вместо использования isRecording var вы можете использовать запись свойств аудиозаписей; Я не вижу инициализацию аудиозаписей, но вы, вероятно, просто опустили ее. Однако я бы посоветовал вам также улучшить обработку ошибок, ответ ниже можно было бы использовать в качестве ссылки: http://stackoverflow.com/questions/1010343/how-do-i-record-audio-on-iphone-with -avaudiorecorder –