有没有办法以编程方式获取iOS中音频单元的所有参数?

Sal*_*rtz 2 core-audio audiounit ios ios7

AUParamInfo()似乎不存在于iOS7框架(CoreAudio,AudioUnit,AudioToolbox)中.我想知道如何获得单位的所有参数.也就是说,在不知道它是什么类型或子类型的情况下,因为如果不是,那么答案就是在音频单元参数参考中查找.

Sal*_*rtz 7

Greg的答案是正确的,因为kAudioUnitProperty_ParameterList是要查询的最终属性ID,最终获取单元的所有参数.但是,获取所有参数的方式更复杂:

  1. 使用AudioUnitGetPropertyInfo,看是否该属性是可用的,如果是,找回它的数据量(数据大小为整个信息这可能是一个集合,而不是任何类型的属性,你要知道的一个元素).
  2. 使用AudioUnitGetProperty适当的财产回来.此外,此时,如果您返回的属性是元素集合而不是单个元素,则必须AudioUnitGetProperty为每个元素调用一次.具体来说,你会称之为dataSize / sizeof(TypeToHoldSingleInstanceOfYourProperty)时间.

    //  Get number of parameters in this unit (size in bytes really):
    UInt32 parameterListSize = 0;
    AudioUnitGetPropertyInfo(_audioUnit, kAudioUnitProperty_ParameterList, kAudioUnitScope_Global, 0, &parameterListSize, NULL);
    
    //  Get ids for the parameters:
    AudioUnitParameterID *parameterIDs = malloc(parameterListSize);
    AudioUnitGetProperty(_audioUnit, kAudioUnitProperty_ParameterList, kAudioUnitScope_Global, 0, parameterIDs, &parameterListSize);
    
    AudioUnitParameterInfo parameterInfo_t;
    UInt32 parameterInfoSize = sizeof(AudioUnitParameterInfo);
    UInt32 parametersCount = parameterListSize / sizeof(AudioUnitParameterID);
    for(UInt32 pIndex = 0; pIndex < parametersCount; pIndex++){
        AudioUnitGetProperty(_audioUnit, kAudioUnitProperty_ParameterInfo, kAudioUnitScope_Global, parameterIDs[pIndex], &parameterInfo_t, &parameterInfoSize);
        // do whatever you want with each parameter...
    }
    
    Run Code Online (Sandbox Code Playgroud)