Hi again
Here is my audio setup procedure that sets up the sample rate etc
- (void)setupAudioFormat

AudioStreamBasicDescription*)format
{
format->mSampleRate = 44100.0;
format->mFormatID = kAudioFormatLinearPCM;
format->mFramesPerPacket = 1;
format->mChannelsPerFrame = 1;
format->mBytesPerFrame =
format->mBytesPerPacket = format->mChannelsPerFrame * sizeof(short int);
format->mBitsPerChannel = 16;
format->mReserved = 0;
format->mFormatFlags = kLinearPCMFormatFlagIsBigEndian |
kLinearPCMFormatFlagIsSignedInteger |
kLinearPCMFormatFlagIsPacked;
}
AND HERE IS MY START RECORDING FUNCTION
- (void)startRecording
{
[self setupAudioFormat:&recordState.dataFormat];
recordState.currentPacket = 0;
OSStatus status;
status = AudioQueueNewInput(&recordState.dataFormat,
AudioInputCallback,
&recordState,
CFRunLoopGetCurrent(),
kCFRunLoopCommonModes,
0,
&recordState.queue);
if(status == 0)
{
for(int i = 0; i < NUM_BUFFERS; i++)
{
AudioQueueAllocateBuffer(recordState.queue,
2940, &recordState.buffers[i]);
//every 30th of a second 44.100 * 2 bytes / 30 = 88200 / 30
AudioQueueEnqueueBuffer(recordState.queue,
recordState.buffers[i], 0, NULL);
}
status = AudioFileCreateWithURL(fileURL,
kAudioFileAIFFType,
&recordState.dataFormat,
kAudioFileFlags_EraseFile,
&recordState.audioFile);
if(status == 0)
{
recordState.recording = true;
status = AudioQueueStart(recordState.queue, NULL);
if(status == 0)
{
labelStatus.text = @"Recording";
}
}
}
if(status != 0)
{
[self stopRecording];
labelStatus.text = @"Record Failed";
}
}
Based on this structure here is my callback input function
void AudioInputCallback(
void *inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime,
UInt32 inNumberPacketDescriptions,
const AudioStreamPacketDescription *inPacketDescs)
{
double thepitch = 0;
double *BufferPointer;
RecordState* recordState = (RecordState*)inUserData;
if(!recordState->recording)
{
printf("Not recording, returning\n"

;
}
if(inNumberPacketDescriptions == 0 && recordState->dataFormat.mBytesPerPacket != 0)
{
inNumberPacketDescriptions = inBuffer->mAudioDataByteSize / recordState->dataFormat.mBytesPerPacket;
}
BufferPointer = (double*)(&inBuffer);
// is this right? or is it (double*)(inBuffer)
thepitch = dywapitch_computepitch(&mytrack,BufferPointer,0 ,2048);
// the pitch always comes back as 0
//AudioStreamBasicDescription dataFormat;
//AudioQueueRef queue;
//AudioQueueBufferRef buffers[NUM_BUFFERS];
//AudioFileID audioFile;
//SInt64 currentPacket;
//bool recording;
NSLog([NSString stringWithFormat:@"thePtch %d",thepitch]);
printf("Writing buffer %lld\n", recordState->currentPacket);
OSStatus status = AudioFileWritePackets(recordState->audioFile,
false,
inBuffer->mAudioDataByteSize,
inPacketDescs,
recordState->currentPacket,
&inNumberPacketDescriptions,
inBuffer->mAudioData);
if(status == 0)
{
recordState->currentPacket += inNumberPacketDescriptions;
}
AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
}
WHAT AM I DOING WRONG PLEASE HELP