0

要查询 MatrixMixer AudioUnit,请执行以下操作:

// code from MatrixMixerTest sample project in c++

UInt32 dims[2];
UInt32 theSize =  sizeof(UInt32) * 2;
Float32 *theVols = NULL;
OSStatus result;


ca_require_noerr (result = AudioUnitGetProperty (au, kAudioUnitProperty_MatrixDimensions,   
                        kAudioUnitScope_Global, 0, dims, &theSize), home);

theSize = ((dims[0] + 1) * (dims[1] + 1)) * sizeof(Float32);

theVols = static_cast<Float32*> (malloc (theSize));

ca_require_noerr (result = AudioUnitGetProperty (au, kAudioUnitProperty_MatrixLevels,   
                        kAudioUnitScope_Global, 0, theVols, &theSize), home);

的返回值AudioUnitGetPropertykAudioUnitProperty_MatrixLevels(在文档和示例代码中定义)一个 Float32。

我正在尝试快速找到矩阵级别,并且可以毫无问题地获得矩阵维度。但我不确定如何创建一个由 Float32 元素组成的空数组,即UnsafeMutablePointer<Void>. 这是我没有成功的尝试:

var size = ((dims[0] + 1) * (dims[1] + 1)) * UInt32(sizeof(Float32))
var vols = UnsafeMutablePointer<Float32>.alloc(Int(size))

在 MatrixMixerTest 中,数组的使用如下:theVols[0]

4

1 回答 1

2

可能需要根据您转换其他部分的方式进行修改,但您的 C++ 代码的最后一部分可以用 Swift 编写,如下所示:

    theSize = ((dims[0] + 1) * (dims[1] + 1)) * UInt32(sizeof(Float32))

    var theVols: [Float32] = Array(count: Int(theSize)/sizeof(Float32), repeatedValue: 0)

    result = AudioUnitGetProperty(au, kAudioUnitProperty_MatrixLevels,
            kAudioUnitScope_Global, 0, &theVols, &theSize)
    guard result == noErr else {
        //...
        fatalError()
    }

当基于 C 函数的 API 声明 aUnsafeMutablePointer<Void>时,您只需要Array一个任意类型的变量,并将其作为 inout 参数传递。

于 2016-07-11T22:18:24.123 回答