オーディオユニットのストリームが32ビット浮動小数点用に設定されている、レンダリングされたAudioBufferListからネイティブ[Float]配列を抽出しようとしています。SwiftのAudioBufferListからのデータの抽出3
var monoSamples = [Float]()
for i in 0..<Int(inNumberFrames) {
withUnsafePointer(to: &bufferList.mBuffers.mData, {
let ptr = $0
let newPtr = ptr + i
let sample = unsafeBitCast(newPtr.pointee, to: Float.self)
monoSamples.append(sample)
})
}
確かにない最速の方法、それが働いた:スウィフト1 & 2では、私はこれをしませんでした。 Swift 3では、これはエラーなしでコンパイルされますが、実行時にクラッシュします。
fatal error: can't unsafeBitCast between types of different sizes
これは少し驚きです。 SwiftのFloatは32ビットで、ストリームのデータは32ビットです。
私は何をしたいのですが、単純です:
withUnsafeMutablePointer(to: &bufferList.mBuffers.mData, {
let monoSamples = [Float](UnsafeBufferPointer(start: $0, count:Int(inNumberFrames)))
})
しかし、私はコンパイルエラーが出ます:
Expression type '[Float]' is ambiguous without more context
これを行うための正しい方法は何ですか?
:スウィフト3にコードを変換するときは、これを試してみてください
すぎ
を変更した可能性/ 4d55cd1ec55a5f71246780f4819c94b3 –