首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在UnsafePointer<AudioBufferList> (不可变)中访问多个缓冲区

如何在UnsafePointer<AudioBufferList> (不可变)中访问多个缓冲区
EN

Stack Overflow用户
提问于 2020-03-22 15:53:43
回答 1查看 249关注 0票数 0

我一直试图在核心音频中使用新的AVAudioSinkNode。它将类型为audioBufferListUnsafePointer<AudioBufferList>传递给处理音频的闭包。

Swift中AudioBufferList的实现是这样的,如果存在多个缓冲区,则不能访问多个缓冲区。苹果为可变版本UnsafeMutablePointer<AudioBufferList>提供了一个包装器,它被称为UnsafeMutableAudioBufferListPointer,允许访问多个缓冲区。

但是我找不到一个与不可变的UnsafePointer<AudioBufferList>相关的包装器.

代码语言:javascript
复制
let sinkNode = AVAudioSinkNode() { (timestamp, frames, audioBufferList) -> OSStatus in
    // audioBufferList is UnsafePointer<AudioBufferList>
    // how to access multiple buffers in audioBufferList?
}

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-23 11:50:21

要在Swift中访问AudioBuffer中的每个AudioBufferList,您可以选择两种方式:

AudioBuffer.

  • Use

  • 自己执行一些指针操作,并强制计算UnsafeMutableAudioBufferListPointer的每个地址。

如果您能够在Swift中引入UnsafeMutableAudioBufferListPointer之前找到正确的示例代码,那么第一种方法可能是您的选择,但就目前而言,很难找到一个示例代码。

要强制使用UnsafeMutableAudioBufferListPointer,您可能需要将UnsafePointer<AudioBufferList>转换为UnsafeMutablePointer<AudioBufferList>,这并不太困难:

代码语言:javascript
复制
            let audioBufferListPtr = UnsafeMutableAudioBufferListPointer(UnsafeMutablePointer(mutating: audioBufferList))

我相信,一旦获得UnsafeMutableAudioBufferListPointer,您就知道如何访问缓冲区。

警告:即使从UnsafePointer<AudioBufferList>UnsafeMutablePointer<AudioBufferList>的类型转换很容易,通过audioBufferList传递的实际区域也是不可更改的。你可能需要特别小心才能不变异这样的区域。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60801491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档