2

カスタム AURenderCallback を持つ AVAudioEngine があります。エンジンを実行すると、CPU が急上昇し、UnsafeMutableBufferPointer.getter および .setter アクションに関係しているようです。

func performRender(ioActionFlags: UnsafeMutablePointer<AudioUnitRenderActionFlags>, inTimeStamp: UnsafePointer<AudioTimeStamp>, inBusNumber: UInt32, inNumberFrames: UInt32, ioData: UnsafeMutablePointer<AudioBufferList>?) -> OSStatus {

    let blI = UnsafeMutableAudioBufferListPointer(ioData)

    let numSamples = Int((blI?[0].mDataByteSize)! / UInt32(MemoryLayout<Float32>.stride))

    for input in 0 ..< blI!.count{

        let bI = blI?[input]

        guard let inputData = bI?.mData else {

            //assert(false)

            return kAudioUnitErr_Uninitialized
        }

        let samplesBI = UnsafeMutablePointer<Float32>(inputData.assumingMemoryBound(to: Float32.self))

        let samplesI = UnsafeMutableBufferPointer<Float32>(start: samplesBI, count: numSamples)

        for sampleIndex in 0 ..< samplesI.count {

            samplesI[sampleIndex] *= 0.5
        }

    }

    return noErr
}

計測器のデバッグ セッション

ポインター データの取得と設定の非効率的な動作の原因は何ですか? オーディオ サンプルを処理しているため、効率が悪いとオーディオ信号にスタッターが発生します。

4

1 に答える 1