ios - 如何在 Swift 中使用 CoreAudio API

标签 ios c swift core-audio

我正在将我的流媒体音频引擎迁移到 swift。我发现很难快速使用 C 音频 API。

我在使用 AudioFileStreamOpen api 时遇到问题,它需要 2 个 C 函数作为参数。我不知道如何快速使用此 API。

AudioFileStreamOpen(self as UnsafePointer<()>, propertyProc, packetProc, kAudioFileMP3Type, audioStreamId)

我已经为这个 API 定义了如下回调方法。但是我遇到了编译错误。

func propertyProc(inClientData: UnsafePointer<()>,inFileStreamId: AudioFileStreamID,inPropertyId: AudioFileStreamPropertyID,ioFlags: UnsafePointer<UInt32>) -> Void {
  .....      
    }

func packetProc(inClientData: UnsafePointer<()>,inNumberOfBytes: UInt32,inNumberOfPackets: UInt32, ConstUnsafePointer<()>, inPacketDescriptions: UnsafePointer<AudioStreamPacketDescription>) -> Void {
    .....
}

感谢任何帮助快速正确定义此 C API

Compilation error

最佳答案

您不能(目前)使用需要来自纯 Swift 代码的 C 回调指针的 API。根据 devforums.apple.com Swift 论坛中的回复,当前的 beta 4 语言实现不支持使用 C 函数指针调用 Swift 函数或方法

更新:以上答案自 Swift 2.0 起已过时

一种替代方法是将一些小的 trampoline C 回调函数放在一个 Objective C 文件中,它可以与 Swift 互操作,并让这些 C 函数依次调用可以在 Swift 代码中的 block 或闭包。使用 Swift 闭包配置 C 回调,然后将这些 C 回调传递给 CoreAudio 函数。

关于ios - 如何在 Swift 中使用 CoreAudio API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25057161/

相关文章:

ios - 如何在设置动画时使用 UIButton

ios - 更改 SpriteKit 节点的纹理

ios - SKMaps,如何在收到来自 iOS 的内存警告时清除 map 数据的内存缓存?

c - C 意外行为中的 qsort 函数?

swift - WebView完整问题显示加载html - swift

ios - 创建全局 NSOperationQueue

ios - 远程推送通知在另一个 View Controller 中接收

C 显示两者(简单的 if-then)

c - Epoch和wireshark捕获

ios - 如何检查核心数据类是否为零。在 SWIFT