我正在研究Learning Core Audio: A Hands-on Guide to Audio Programming for Mac and iOS
中的一些代码示例虽然我以前曾使用过Objective-C,但我现在正在开发一个Rubymotion应用程序,我希望能够将书中的代码转换为我的应用程序的Rubymotion。
虽然有一些我不确定的C函数和习语。任何人都可以告诉我IF和我如何在RM中重写以下内容?
AudioStreamBasicDescription asbd;
memset(&asbd, 0, sizeof(asbd));
我已经确定asbd是指针。所以:
asbd = Pointer.new(AudioStreamBasicDescription.type)
但是sizeof()
和memset()
函数都咳嗽了 NoMethodErrors
答案 0 :(得分:1)
asbd
不是指针,而是结构。在由类表示的RubyMotion中。 memset
只是将结构的内存初始化为全零。我不确定RubyMotion默认情况下是否将字段设置为零,因此您可以像这样手动初始化每个字段(如果有点罗嗦,这肯定会更清楚):
asbd = AudioStreamBasicDescription.new
asbd.mSampleRate = 0.0
asbd.mFormatID = 0
asbd.mFormatFlags = 0
asbd.mBytesPerPacket = 0
asbd.mFramesPerPacket = 0
asbd.mBytesPerFrame = 0
asbd.mChannelsPerFrame = 0
asbd.mBitsPerChannel = 0
asbd.mReserved = 0
如果您需要指向asbd
的指针,我相信您这样做:
asbd_ptr = Pointer.new(AudioStreamBasicDescription.type)
asbd_ptr[0] = asbd
因此,如果想要传递&asbd
,则会传递asbd_ptr
。