- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试通过 swift 使用 Apple 的 CoreAudio。我找到了许多关于如何枚举设备上的流和 channel 的示例。但是,在调用 UnsafeMutablePointer<AudioBufferList>.allocate()
时,它们似乎都使用了不正确的大小.
他们首先请求属性数据大小,返回字节数。然后他们使用这个字节数来分配一个(不安全的)AudioBufferList
该大小(使用字节数作为列表的大小!)。
请看下面我的评论:
var address = AudioObjectPropertyAddress(
mSelector:AudioObjectPropertySelector(kAudioDevicePropertyStreamConfiguration),
mScope:AudioObjectPropertyScope(kAudioDevicePropertyScopeInput),
mElement:0)
var propsize = UInt32(0);
var result:OSStatus = AudioObjectGetPropertyDataSize(self.id, &address, 0, nil, &propsize);
if (result != 0) {
return false;
}
// ABOVE: propsize is set to number of bytes that property data contains, typical number are 8 (no streams), 24 (1 stream, 2 interleaved channels)
// BELOW: propsize is used for AudioBufferList capacity (in number of buffers!)
let bufferList = UnsafeMutablePointer<AudioBufferList>.allocate(capacity:Int(propsize))
result = AudioObjectGetPropertyData(self.id, &address, 0, nil, &propsize, bufferList);
if (result != 0) {
return false
}
let buffers = UnsafeMutableAudioBufferListPointer(bufferList)
for bufferNum in 0..<buffers.count {
if buffers[bufferNum].mNumberChannels > 0 {
return true
}
}
这一直有效,因为它分配的内存比 UnsafeMutablePointer<AudioBufferList>
需要的多得多。 ,但这显然是错误的。
我一直在寻找一种正确分配 UnsafeMutablePointer<AudioBufferList>
的方法来自 AudioObjectGetPropertyDataSize()
返回的字节数,但我一整天都找不到任何东西。请帮助 ;)
最佳答案
正确分配 UnsafeMutablePointer<AudioBufferList>
来自 AudioObjectGetPropertyDataSize()
返回的字节数
你不应该分配 UnsafeMutablePointer<AudioBufferList>
, 但分配确切大小的原始字节并将其转换为 UnsafeMutablePointer<AudioBufferList>
.
像这样的东西:
let propData = UnsafeMutableRawPointer.allocate(byteCount: Int(propsize), alignment: MemoryLayout<AudioBufferList>.alignment)
result = AudioObjectGetPropertyData(self.id, &address, 0, nil, &propsize, propData);
if (result != 0) {
return false
}
let bufferList = propData.assumingMemoryBound(to: AudioBufferList.self)
关于swift - 调用 AudioObjectGetPropertyData 之前的 UnsafeMutableAudioBufferListPointer 分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60792144/
我一直在尝试通过 swift 使用 Apple 的 CoreAudio。我找到了许多关于如何枚举设备上的流和 channel 的示例。但是,在调用 UnsafeMutablePointer.alloc
我是一名优秀的程序员,十分优秀!