我想添加一个方法,从SpeakHere类中获取AQRecorder.mm类的音频输入信号电平。OSStatus实例为我提供了对应于kAudioQueueErr_InvalidPropertyValue
的错误代码。我甚至不明白这个错误是怎么发生的,因为我为属性使用了预定义的常量。这是怎么回事,我该如何纠正这个错误?
float AQRecorder::getAveragePower()
{
assert(mQueue!=NULL);
UInt32 expectedSize = sizeof(AudioQueueLevelMeterState);
assert(expectedSize>0);
AudioQueueLevelMeterState* audioLevels = (AudioQueueLevelMeterState*)malloc(sizeof(AudioQueueLevelMeterState));
OSStatus status = AudioQueueGetProperty(mQueue,kAudioQueueProperty_CurrentLevelMeterDB, audioLevels, &expectedSize);
if(status!=noErr)
{
printf("Error getting the average power: error code %i",status);
return 0;
}
return audioLevels->mAveragePower;
}
这听起来像是你还没有激活音频队列的级别测量:
UInt32 val = 1;
OSStatus status = AudioQueueSetProperty(mQueue, kAudioQueueProperty_EnableLevelMetering, &val, sizeof(UInt32));
if(status!=noErr)
{
printf("Error enabling level meteringn");
}