Я использую AVAudioRecorder для записи звукового файла различной длины со следующей конфигурацией:AVAudioRecorder Потеря Последние секунды
- (AVAudioRecorder*)recorder
{
if(!_recorder) {
// Set the audio file
NSArray *pathComponents = [NSArray arrayWithObjects:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], @"ExamTranscript.m4a", nil];
self.soundFileURL = [NSURL fileURLWithPathComponents:pathComponents];
// Define the recorder setting
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:16000.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
// Initiate and prepare the recorder
_recorder = [[AVAudioRecorder alloc] initWithURL:self.soundFileURL settings:recordSetting error:NULL];
_recorder.meteringEnabled = YES;
_recorder.delegate = self;
}
return _recorder;
}
Когда я называю [self.recorder stop]
последние 2-3 секунды записи никогда не учитываются (и они обязательно необходимы.)
Например, если я звоню self.recorder.currentTime
прямо перед тем, как позвонить [self.recorder stop]
Я получу NSTimeInterval больше, чем фактическая продолжительность сгенерированного файла примерно на 2-3 секунды. Все, что записано за эти 2-3 секунды, затем теряется.
После вызова [self.recorder stop]
Я получаю соответствующий метод делегата audioRecorderDidFinishRecording:successfully:
, и флаг указывает, что он успешный.
У меня полная потеря относительно того, как эти последние секунды теряются. (Рекордер не выпускается и по-прежнему существует сильная ссылка на него.)
UPDATE
Приложение предлагает пользователю говорить несколько раз, так что AVAudioRecorder приостановлена и возобновлена несколько раз перед тем, как остановился в конце окончательного ответа. Он приостанавливается, а не останавливается, потому что все его нужно записать в один аудиофайл.
Я делаю только одну запись, поэтому я не пытаюсь использовать один и тот же экземпляр AVAudioRecorder для создания нескольких записей. Кроме того, 'recorder.currentTime' доступен только внутри' if (recorder.isRecording) 'условного. – TimOfTheYear
Чтобы помочь вам лучше, укажите дополнительный код в контексте. Как вы записываете/приостанавливаете/останавливаете рекордер и где вы проверяете 'currentTime'? Если 'stop' выполняется в основном потоке (isMainThread) и т. Д. Также обратите внимание на __EDIT__ в моем ответе выше. – Ashok