読者です 読者をやめる 読者になる 読者になる

What we talk about when we talk about Technology

技術について語ります。

音は出るが...

以下の形にして、再生してみたところ、音は出るも、ただのノイズ。。。
おそらくAudioUnitに設定するASBDがおかしいのだと思うが、
deprecateな値が多く、解決方法はまだみつかってません。

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
    var phase = def.phase
        
    let ioDataMem = ioData.memory
    let ablP = UnsafeMutableAudioBufferListPointer(ioData)
    var outputs = ablP.map { UnsafeMutablePointer<Float>($0.mData) }
        
    for i in 0 ..< inNumberFrames {
            
        // calc sine wave
        let wave = sin(phase)
            
        var sample = Float(wave) * Float(1 << kAudioUnitSampleFractionBits)
            
        for var output in outputs {
                
            memcpy(output, &sample, sizeof(Float))
            output += 1
        }
            
        phase += freq
    }
        
    def.phase = phase
        
    return noErr
}