AVAudioRecorder Не обновляет пиковую мощностьPowerForChannel для iphone - PullRequest
1 голос
/ 06 февраля 2012

Для моей игры Cocos 2d я хочу обнаружить голос с микрофона iphone, и он должен играть автоматически, для этого я использую peakPowerForChannel avaudiorecorder Код:

const double ALPHA = 0.05;
    NSString *currentRecorder=@"nil";
            NSError *error;
    if(checker.recording){
        [checker updateMeters];
        currentRecorder=@"checker";
        peakPowerForChannel = pow(10, (ALPHA* [checker peakPowerForChannel:0]));
    }
    else if (recorder.recording) {
        [recorder updateMeters];
        peakPowerForChannel = pow(10, (ALPHA * [recorder peakPowerForChannel:0]));
         currentRecorder=@"recorder";
    }
   // NSLog(@"-------------- %f",lowPassResults);
    lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;  
    NSLog(@"%@ >>>>>>>>>>>>>>>>>>>>>> %f   peakPowerForChannel ---%f",currentRecorder,lowPassResults,peakPowerForChannel);
  if (lowPassResults >0.4){
        if (!recorder.recording) {
            [checker stop];
}
    else{
        if (recorder.recording) {
            [recorder stop];
 [checker record];

        }
    }

Впервые работает нормально. После воспроизведения аудио [рекордер peakPowerForChannel: 0] дает постоянное значение Как я могу решить это

Спасибо

1 Ответ

5 голосов
/ 08 февраля 2012

[recorder updateMeters] обновляет значение только один раз. Каждый раз, когда вы проверяете значение [recorder peakPowerForChannel:0]. Вы должны вызвать [recorder updateMeters] метод. Поэтому хорошим способом является проверка значения в таймере и вызов метода [recorder updateMeters] перед проверкой значения.

...