У меня проблемы с получением точного показания счетчика от AVAudioRecorder (тестирование на iPad).
Кажется, что работает нормально, когда громкость растет, однако задержка происходит, когда громкость падает.Например: я говорю в микрофон и медленно повышаю голос.Показания увеличиваются с -35,567 до -34,678 до -10,579, как я и надеялся, но когда я перестаю говорить, происходит задержка в 1 - 2 секунды, прежде чем он снова падает до -35,567 (или что бы то ни было).NSLog продолжает обновляться из цикла, но номер счетчика остается неизменным во время задержки, даже если звук давно закончился.
Я добавил суть кода ниже и был бы рад предоставить полный код, еслинеобходимо.
Я инициализирую рекордер следующим образом:
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &error];
[audioSession setActive:YES error: &error];
NSMutableDictionary* recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
recordedTmpFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent: [NSString stringWithString: @"Recording.caf"]]];
recorder = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile settings:recordSetting error:&error];
[recorder setDelegate:self];
[recorder prepareToRecord];
[recorder setMeteringEnabled:YES];
[recorder record];
и обновляю счетчик в цикле:
-(void) loop:(ccTime)dt
{
if(isRecording == YES)
{
//get volume levels
[recorder updateMeters];
float level = [recorder peakPowerForChannel:0];
NSLog(@"Vol: %f", level);
}
}
отредактировано: Я должен также упомянуть, что я использую расписание Cocos2d для цикла:
[self schedule:@selector(loop:)];
Есть идеи, почему будет такая большая задержка?
отредактировано: Iпытался использовать среднюю пиковую мощность, и это не имеет задержки.Так что я мог бы использовать это как обходной путь.Однако я бы не стал использовать усредненную пиковую мощность, и было бы неплохо понять, что происходит.