我正在编写一个要求用户处于安静环境中的应用程序。为此,我会定期检查麦克风的功率读数。(我知道返回的值在 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;
}
是什么赋予了?值的位模式是否可能提供线索?