gpt4 book ai didi

swift - 在 Swift 中高效地将 Int16 数据写入内存?

转载 作者:行者123 更新时间:2023-11-30 13:45:32 26 4
gpt4 key购买 nike

我有一个内存引用,mBuffers.mData(来自 AudioUnit bufferList),在 OS X 和 iOS 框架 header 中声明为:

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 源允许将各个音频样本数组分配给音频单元(或 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
}

更完整的要点 here .

关于swift - 在 Swift 中高效地将 Int16 数据写入内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34984538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com