[英]Efficiently writing Int16 data to memory in Swift?
我有一個內存引用mBuffers.mData(來自AudioUnit bufferList),在OS X和iOS框架標頭中聲明為:
UnsafeMutablePointer<Void>
將大量Int16值寫入此指針引用的內存的有效方法是什么?
分解此Swift源代碼:
for i in 0..<count {
var x : Int16 = someFastCalculation()
let loByte : Int32 = Int32(x) & 0x00ff
let hiByte : Int32 = (Int32(x) >> 8) & 0x00ff
memset(mBuffers.mData + 2 * i , loByte, 1)
memset(mBuffers.mData + 2 * i + 1, hiByte, 1)
}
顯示了許多設置memset()函數調用的指令(比我的someFastCalculation多得多的指令)。 這是實時音頻回調內部的一個循環,因此有效的代碼以最小化延遲和電池消耗非常重要。
有沒有更快的方法?
該Swift源允許將單個音頻樣本的數組分配給Audio Unit(或AUAudioUnit)音頻緩沖區,並且編譯成比使用memset更快的結果。
let mutableData = UnsafeMutablePointer<Int16>(mBuffers.mData)
let sampleArray = UnsafeMutableBufferPointer<Int16>(
start: mutableData,
count: Int(mBuffers.mDataByteSize)/sizeof(Int16))
for i in 0..<count {
let x : Int16 = mySampleSynthFunction(i)
sampleArray[i] = x
}
更完整的要旨在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.