iOS音频队列:属性kAudioQueueProperty_CurrentLevelMeter的kAudioQueueE



我想添加一个方法,从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");
}

相关内容

  • 没有找到相关文章