What we talk about when we talk about Technology

技術について語ります。

AudioUnitのAURenderCallbackで2チャンネル分取り出す

swiftだとAudioBufferListが配列として取り出せず、困っていたらこの記事を発見

qiita.com

以下のようにして配列として取り出し、2チャンネル取得しました。
サインカーブが鳴らせるか、明日やってみます。

let renderCallback: AURenderCallback = { inRefCon, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData in
        
    var def: SineWaveDef = UnsafePointer(inRefCon).memory
        
    let freq = 440 * 2.0 * M_PI / def.sampleRate
    let phase = def.phase
        
    let ioDataMem = ioData.memory
    let ablP = UnsafeMutableAudioBufferListPointer(ioData)
    var outputs = [UnsafeMutablePointer<Float>](count: Int(ioDataMem.mNumberBuffers), repeatedValue: nil)
        
    var outL: AudioUnitSampleType = UnsafeMutablePointer(ablP[0].mData).memory
    var outR: AudioUnitSampleType = UnsafeMutablePointer(ablP[1].mData).memory
        
    return noErr
}