1
조용한 환경에 있어야하는 응용 프로그램을 작성하고 있습니다. 이를 위해 마이크를 읽는 전원을 주기적으로 확인합니다. (dBFS 또는이 경우 [0, 1] 간격의 부동 소수점으로 반환되는 값을 알고 있습니다.)AudioQueueGetProperty가 kAudioQueueProperty_CurrentLevelMeter 속성의 범위를 벗어난 값을 반환합니다.
내 문제는 아래 코드가 제대로 작동한다는 것입니다. 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;
}
무엇을 제공합니까? 값의 비트 패턴이 아마도 단서를 제공합니까?
적어도 내 질문에 답했습니다. 감사 – virtualnobi