Domanda

I'm working through some of the code examples in Learning Core Audio: A Hands-on Guide to Audio Programming for Mac and iOS

Although I've worked previously with Objective-C, I'm working on a Rubymotion app at the moment and I'd like to be able to transpose the code in the book to Rubymotion for my app.

There are a few C functions and idioms that I'm not sure about though. Can anybody tell me IF and HOW I can re-write the following in RM?

AudioStreamBasicDescription asbd;
memset(&asbd, 0, sizeof(asbd));

I've got as far as identifying that asbd is a Pointer. So:

asbd = Pointer.new(AudioStreamBasicDescription.type)

But both the sizeof() and memset() functions cough up NoMethodErrors

È stato utile?

Soluzione

asbd is not a pointer, but a structure. In RubyMotion that is represented by a class. The memset is just initializing the memory of the structure to all zeros. I'm not sure if RubyMotion sets the fields to zero by default, so you could initialize each field manually like so (which is certainly more clear if a bit wordy):

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

If you need a pointer to asbd, I believe you do this:

asbd_ptr = Pointer.new(AudioStreamBasicDescription.type)
asbd_ptr[0] = asbd

So if wanted to pass &asbd, you would pass asbd_ptr instead.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top