AudioQueueGetProperty返回kAudioQueueProperty_CurrentLevelMeter属性的超出范围值

Fra*_*rar 1 iphone audioqueueservices

我正在编写一个需要用户处于安静环境中的应用程序.为此,我会定期检查麦克风的电源读数.(我知道返回的值是dBFS,或者在这种情况下,在[0,1]区间内是浮点数.)

我的问题是下面的代码工作得很好......除非它返回18466064732283753157623808.00000.我看不到NSLog输出指示AudioQueueGetProperty返回失败.奇怪的值始终是提到的值.

-(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;
}
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?值的位模式是否可能提供线索?

小智 6

您是否启用了音频电平测量?

UInt32 trueValue = true;
AudioQueueSetProperty(audioQueue,kAudioQueueProperty_EnableLevelMetering,&trueValue,sizeof (UInt32));
Run Code Online (Sandbox Code Playgroud)