簡體   English   中英

在Swift中將Int16數據有效地寫入內存?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM