Я использую 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:
метода делегата, и флаг указывает на его успешное выполнение.
Я совершенно не понимаю, как теряются эти последние секунды. (Рекордер не выпускается, и до сих пор на него есть сильная ссылка.)
ОБНОВЛЕНИЕ
Приложение несколько раз предлагает пользователю говорить, поэтому AVAudioRecorder приостанавливается и возобновляет работу несколько раз, прежде чем будет остановлен в конце окончательного ответа. Он приостанавливается, а не останавливается, потому что все это необходимо записать в один аудиофайл.