• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Newbie problems Cocoa, objective-C using CoreAudio C libraries
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Newbie problems Cocoa, objective-C using CoreAudio C libraries


  • Subject: Re: Newbie problems Cocoa, objective-C using CoreAudio C libraries
  • From: "Craig Lewiston" <email@hidden>
  • Date: Thu, 23 Oct 2008 19:54:55 -0400

got the SpeakHerecode.  This is exactly what I was looking for. :)

On Thu, Oct 23, 2008 at 7:15 PM, Daniel Elliott
<email@hidden> wrote:
> You don't have to pay to access the iphone sdk and sample code.
>
> ----- Original Message ----
> From: Craig Lewiston <email@hidden>
> To: Craig Hopson <email@hidden>
> Cc: CoreAudio list <email@hidden>
> Sent: Friday, 24 October, 2008 12:09:40 AM
> Subject: Re: Newbie problems Cocoa, objective-C using CoreAudio C libraries
>
> Can you tell me where to grab the SpeakHere code?  I'm developing for
> desktop, not iPhone, so I don't have access to the SpeakHere example
> code on http://developer.apple.com/iphone/ without registering and
> having to pay $ (or at least that's what it appears).
>
>
>
>
> On Thu, Oct 23, 2008 at 6:52 PM, Craig Hopson <email@hidden> wrote:
>> John,
>>
>> I haven't taken more than a couple of seconds to look over what you have
>> submitted but nothing strikes me as being amiss, so, in the words of one
>> of
>> my CS professors long ago...  If the problem isn't where you are looking,
>> look somewhere else.  You should grab a copy of the SpeakHere sample code
>> and compare with what you are doing. It is a Cocoa project which plays and
>> records audio.  It could be that you have not retained the object you are
>> trying to access and it has been collected out from under you.
>>
>> -Craig
>>
>>
>> On Oct 23, 2008, at 4:31 PM, Craig Lewiston wrote:
>>
>>> It looks like the problem is due to pAqData being an invalid object.
>>> I was able to isolate the error by calling
>>> AudioFileID testaudiofile = [pAqData mAudioFile];
>>> right after declaring pAqData:
>>> AQRecorderState *pAqData = (AQRecorderState *) aqData;
>>> which returned the same error from before.
>>>
>>> So, it's clear to me that I have a problem linking the incoming aqData
>>> pointer to pAqData.  Could someone help me understand what is
>>> happening in that line of code?  Here is the full header again to the
>>> callback function and the first line of its code:
>>>
>>> ##########
>>> static void HandleInputBuffer(
>>>  void                                *aqData,
>>>  AudioQueueRef                        inAQ,
>>>  AudioQueueBufferRef                  inBuffer,
>>>  const AudioTimeStamp                *inStartTime,
>>>  UInt32                              inNumPackets,
>>>  const AudioStreamPacketDescription  *inPacketDesc
>>> ) {
>>>
>>>  AQRecorderState *pAqData = (AQRecorderState *) aqData;              //
>>> 1
>>> ##########
>>>
>>> It seems that my problem stems from not being able to access the
>>> AQRecorderState object from within the callback function.  If someone
>>> could help me figure out how to access that object from within the
>>> callback function, I'd greatly appreciate.
>>>
>>> Thanks again,
>>> Craig
>>>
>>>
>>> On Thu, Oct 23, 2008 at 5:16 PM, Craig Lewiston <email@hidden>
>>> wrote:
>>>>
>>>> Thanks John.  After playing around some more, I found that my code
>>>> executes, and that the callback gets called the first time, but that
>>>> it then fails at:
>>>>
>>>> AudioFileWritePackets (
>>>>  [pAqData mAudioFile],
>>>>  false,
>>>>  inBuffer->mAudioDataByteSize,
>>>>  inPacketDesc,
>>>>  [pAqData mCurrentPacket],
>>>>  &inNumPackets,
>>>>  inBuffer->mAudioData)
>>>>
>>>> When I load it into gdb manually, I get the following error msg in gdb:
>>>>
>>>> Program received signal EXC_BAD_ACCESS, Could not access memory.
>>>> Reason: KERN_PROTECTION_FAILURE at address: 0x00000002
>>>> [Switching to process 22761 thread 0x4403]
>>>> 0xfffeff20 in objc_msgSend_rtp ()
>>>>
>>>>
>>>> I'm guessing that this error is due to the way that I am referencing
>>>> one or more of the variables in the AudioFileWritePackets() call.  The
>>>> complete callback function is posted below.  As you can see, I am
>>>> using the accessor methods I created, such as [pAqData mAudioFile] and
>>>> [pAqData mCurrentPacket].  However, I am still using the following
>>>> conventions: inBuffer->mAudioDataByteSize, inBuffer->mAudioData to
>>>> access the buffer being passed into the callback function.  Is this
>>>> the source of my problem?  Is this the correct way to address those
>>>> buffers?
>>>>
>>>> Thanks again in advance,
>>>> Craig.
>>>>
>>>>
>>>> ###########
>>>> static void HandleInputBuffer(
>>>>  void                                *aqData,
>>>>  AudioQueueRef                        inAQ,
>>>>  AudioQueueBufferRef                  inBuffer,
>>>>  const AudioTimeStamp                *inStartTime,
>>>>  UInt32                              inNumPackets,
>>>>  const AudioStreamPacketDescription  *inPacketDesc
>>>> ) {
>>>>
>>>>  AQRecorderState *pAqData = (AQRecorderState *) aqData;              //
>>>> 1
>>>>
>>>>  if (inNumPackets == 0 && ([pAqData DataFormatmBytesPerPacket] != 0)) {
>>>>      inNumPackets = inBuffer->mAudioDataByteSize / [pAqData
>>>> DataFormatmBytesPerPacket];
>>>>  }
>>>>  NSLog(@"CALLBACK");
>>>>  if (AudioFileWritePackets (
>>>>          [pAqData mAudioFile],
>>>>          false,
>>>>          inBuffer->mAudioDataByteSize,
>>>>          inPacketDesc,
>>>>          [pAqData mCurrentPacket],
>>>>          &inNumPackets,
>>>>          inBuffer->mAudioData) == noErr) {
>>>>      [pAqData addToCurrentPacket:inNumPackets];                    // 4
>>>>  }
>>>>  if ([pAqData mIsRunning] == 0) {
>>>>      return;
>>>>  }
>>>>
>>>>  AudioQueueEnqueueBuffer ([pAqData mQueue], inBuffer, 0, NULL);
>>>> }
>>>>
>>>> On Thu, Oct 23, 2008 at 4:50 PM, John Zorko <email@hidden> wrote:
>>>>>
>>>>> Craig,
>>>>> I'm a n00b as well, but i've got code working -- streaming / playing,
>>>>> not
>>>>> recording, though.  Anyway, I used an ObjC class successfully instead
>>>>> of
>>>>> the
>>>>> struct.  If you post some code where the problem happens, maybe I can
>>>>> help?
>>>>>
>>>>> On Oct 23, 2008, at 12:41 PM, Craig Lewiston wrote:
>>>>>
>>>>> I'm a newbie to Cocoa and CoreAudio, and have been trying to get the
>>>>> AudioQueue Record Audio example working in a Cocoa app for a few days:
>>>>>
>>>>>
>>>>> http://developer.apple.com/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/chapter_3_section_1.html
>>>>>
>>>>> I have been somewhat successful, but not completely, and I think the
>>>>> reason is due to my lack of understanding of how to use C libraries
>>>>> within an Cocoa/Objective-C application.  I have a few basic questions
>>>>> I was hoping to get answered:
>>>>>
>>>>>
>>>>> 1. In the tutorial, the first step calls for creating a custom
>>>>> structure to manage the state of the audio queue.  This is done in C
>>>>> with:
>>>>> struct AQRecorderState {}
>>>>>
>>>>> I initially approached this by creating a class,
>>>>> @interface AQRecorderState : NSObject {}
>>>>>
>>>>> I then wrote all the accessor methods necessary to implement the the
>>>>> class within the rest of the tutorial code.  I was able to get my code
>>>>> to compile, but my program kept crashing while inside the callback
>>>>> function HandleInputBuffer(){}, specifically when executing
>>>>> AudioFileWritePackets ().  I am now wondering if it is necessary to
>>>>> define a class like I did, or if it's possible to just define the
>>>>> structure in C, and use C commands to refer to the structure within my
>>>>> Obj-C code.  For those of you that have used Audio Queue and
>>>>> Cocoa/Obj-C, how do you implement this -- as a C structure or an Obj-C
>>>>> class?
>>>>>
>>>>>
>>>>> 2. Trouble with callback functions.  I have been declaring my callback
>>>>> function, static void HandleInputBuffer(){}, in the header file for my
>>>>> application, after the @end interface declarative.  Is there a proper
>>>>> place/way to declare C callback functions in Objective-C files?
>>>>>
>>>>>
>>>>> 3.  Finally, are there any working Cocoa examples implementing
>>>>> AudioQueue?  I am really only looking to see how these details I
>>>>> mentioned above (structs, callbacks) are handled in Objective-C.
>>>>>
>>>>>
>>>>> Thanks in advance,
>>>>> Craig
>>>>> _______________________________________________
>>>>> Do not post admin requests to the list. They will be ignored.
>>>>> Coreaudio-api mailing list      (email@hidden)
>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>
>>>>> This email sent to email@hidden
>>>>>
>>>>>
>>>>> Regards,
>>>>> John
>>>>> Falling You - exploring the beauty of voice and sound
>>>>> http://www.fallingyou.com
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Coreaudio-api mailing list      (email@hidden)
>>> Help/Unsubscribe/Update your Subscription:
>>>
>>>
>>>
>>> This email sent to email@hidden
>>>
>>
>>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Coreaudio-api mailing list      (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
>
>
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Newbie problems Cocoa, objective-C using CoreAudio C libraries
      • From: William Stewart <email@hidden>
  • Prev by Date: Re: Newbie problems Cocoa, objective-C using CoreAudio C libraries
  • Next by Date: how do I unsubscribe?
  • Previous by thread: Re: Newbie problems Cocoa, objective-C using CoreAudio C libraries
  • Next by thread: Re: Newbie problems Cocoa, objective-C using CoreAudio C libraries
  • Index(es):
    • Date
    • Thread