jps*_*asi 2 c core-audio ios swift
我正在将流媒体音频引擎迁移到swift.我发现很难在swift中使用C Audio API.
我有一个AudioFileStreamOpen api的问题,它需要2个C函数作为参数.我不知道如何使用这个API很快.
AudioFileStreamOpen(self as UnsafePointer<()>, propertyProc, packetProc, kAudioFileMP3Type, audioStreamId)
Run Code Online (Sandbox Code Playgroud)
我为此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 {
.....
}
Run Code Online (Sandbox Code Playgroud)
感谢您在swift中正确定义此C API

您不能(当前)使用需要来自纯Swift代码的C回调指针的API.根据devforums.apple.com上Swift论坛的回复,目前的beta 4语言实现不支持使用C函数指针调用Swift函数或方法.
更新:从Swift 2.0开始,上述答案已经过时
另一种方法是在Objective C文件中放入一些小的trampoline C回调函数,它可以与Swift互操作,并让这些C函数依次调用一个块或闭包,它可以是Swift代码.使用Swift闭包配置C回调,然后将这些C回调传递给CoreAudio函数.
| 归档时间: |
|
| 查看次数: |
3196 次 |
| 最近记录: |