See Audio Queue Structure . This is what I use to get the high water sign:
AudioQueueRef audioQueue; // Imagine this is correctly set up UInt32 dataSize = sizeof(AudioQueueLevelMeterState) * recordFormat.mChannelsPerFrame; AudioQueueLevelMeterState *levels = (AudioQueueLevelMeterState*)malloc(dataSize); float channelAvg = 0; OSStatus rc = AudioQueueGetProperty(audioQueue, kAudioQueueProperty_CurrentLevelMeter, levels, &dataSize); if (rc) { NSLog(@"AudioQueueGetProperty(CurrentLevelMeter) returned %@", rc); } else { for (int i = 0; i < recordFormat.mChannelsPerFrame; i++) { channelAvg += levels[i].mPeakPower; } } free(levels); // This works because one channel always has an mAveragePower of 0. return channelAvg;
You can get maximum power either in dB Free Scale (with kAudioQueueProperty_CurrentLevelMeterDB), or just as a float in the interval [0.0, 1.0] (with kAudioQueueProperty_CurrentLevelMeter).
Frank shearar
source share