1

ユーザーが静かな環境にいる必要があるアプリケーションを作成しています。これを行うために、私は定期的にマイクロホンのパワー測定値をチェックします。(返される値が dBFS であるか、この場合は間隔 [0, 1] の浮動小数点数であることを認識しています。)

私の問題は、以下のコードが正常に機能することです... 18466064732283753157623808.00000 を返す場合を除きます。AudioQueueGetProperty が失敗を返すことを示す NSLog 出力が表示されません。奇妙な値は常に言及された値です。

-(float)instantaneousPeakPower {
  UInt32 dataSize = sizeof(AudioQueueLevelMeterState) * recordFormat.mChannelsPerFrame;
  AudioQueueLevelMeterState *levels = (AudioQueueLevelMeterState*)malloc(dataSize);

  OSStatus rc = AudioQueueGetProperty(audioQueue, kAudioQueueProperty_CurrentLevelMeter, levels, &dataSize);
  if (rc) {
    NSLog(@"NoiseLeveMeter>>takeSample - AudioQueueGetProperty(CurrentLevelMeter) returned %@", rc);
  }

  float channelAvg = 0;
  for (int i = 0; i < recordFormat.mChannelsPerFrame; i++) {
    channelAvg += levels[i].mPeakPower;
  }
  free(levels);

  // This works because in this particular case one channel always has an mAveragePower of 0.
  return channelAvg;
}

何を与える?値のビットパターンはおそらく手がかりを与えるでしょうか?

4

1 に答える 1

6

オーディオレベルメータリングを有効にしましたか?

UInt32 trueValue = true;
AudioQueueSetProperty(audioQueue,kAudioQueueProperty_EnableLevelMetering,&trueValue,sizeof (UInt32));
于 2011-02-01T09:22:56.973 に答える