AudioQueueGetProperty を呼び出すと Cannot invoke ‘init’ with an argument list of type

投稿者: Anonymous

Swift から AudioQueueGetProperty を呼び出すとコンパイルエラーになってしまいます。
エラーは下記のようになっています。

Cannot invoke ‘init’ with an argument list of type ‘(AudioQueueRef, $T3, $T7, $T11)’

問題のコード

var levelMeter = AudioQueueLevelMeterState(mAveragePower: 0, mPeakPower: 0)
let levelMeterSize = UInt32(sizeof(AudioQueueLevelMeterState))
// self.queue には AudioQueueRef が入っている
if let q = self.queue{
    AudioQueueGetProperty(
        q,
        UInt32(kAudioQueueProperty_CurrentLevelMeterDB),
        UnsafePointer(levelMeter ),
        UnsafePointer(levelMeterSize))
}

呼び出し方が悪いのだと思いますが、どこが悪いか教えて頂けるでしょうか?

解決

以下の変更でコンパイルが通るようになるところまでは確認しました。
(Xcode 6.2を使用)

    var levelMeter = AudioQueueLevelMeterState(mAveragePower: 0, mPeakPower: 0)

    // ※varに変更
    var levelMeterSize = UInt32(sizeof(AudioQueueLevelMeterState))

    // self.queue には AudioQueueRef が入っている
    if let q = self.queue {
        let id = UInt32(kAudioQueueProperty_CurrentLevelMeterDB)

        // ※inout系の引数を『&』で呼び出すように変更
        AudioQueueGetProperty(q, id, &levelMeter, &levelMeterSize)
    }
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *