Since this is the Cocoa list, you'll probably have better luck asking on something more appropriate like the Core Audio list.
On 29 Dec 2009, at 00:58, Jeff Heard wrote: > Okay, I've created two audio queues, one output and one input. And no, I > don't have them both on at once, because I know well that wont' work. All I > want to do is sample sound from the input and then replay the frequency of > that sound as the output. Can anyone help me? It seems to work if I try to > get it to play a constant 440hZ, but when it starts after finding the new > frequency, it plays 1/2 second of audio and then I get silence. My code, > which seems sane looks like this: > > // MainViewController.m: > > - (void) onPressed { // should pause the output and listen for new sound > AudioQueuePause(aqc->outQueue); // stop the input so the mic can listen > AudioQueueEnqueueBuffer(aqc->inQueue, aqc->mBuffers[0], 0, NULL); // > enqueue an input buffer to the mic queue > AudioQueueStart(aqc->inQueue, NULL); // start the input queue > } > > - (void) onReleased { // should stop recording and start replaying the > frequency > AudioQueueStop(aqc->inQueue,TRUE); // stop the input queue > AudioQueueStart(aqc->outQueue, NULL); > } > > // Audio.c > > AQCallbackStruct *SetupAudioQueues() { > AQCallbackStruct *aqc = malloc(sizeof(AQCallbackStruct)); > int i; > int aqniStatus; > > aqc->mDataFormat.mSampleRate = 44100.0; > aqc->mDataFormat.mFormatID = kAudioFormatLinearPCM; > aqc->mDataFormat.mFormatFlags = > kLinearPCMFormatFlagIsSignedInteger | > kLinearPCMFormatFlagIsPacked; > aqc->mDataFormat.mBytesPerPacket = 4; > aqc->mDataFormat.mFramesPerPacket = 1; > aqc->mDataFormat.mBytesPerFrame = 4; > aqc->mDataFormat.mChannelsPerFrame = 2; > aqc->mDataFormat.mBitsPerChannel = 16; > aqc->frameCount = 4410; > aqc->frameSize = aqc->frameCount * aqc->mDataFormat.mBytesPerFrame; > aqc->frequency = 0; > aqc->amplitude = 4096; > aqc->check = FALSE; > > > aqniStatus = AudioQueueNewInput( > &(aqc->mDataFormat) > , AQInputCallback > , aqc > , NULL > , kCFRunLoopCommonModes > , 0 > , &(aqc->inQueue)); > > > aqniStatus = AudioQueueNewOutput( > &(aqc->mDataFormat) > , AQOutputCallback > , aqc > , NULL > , kCFRunLoopCommonModes > , 0 > , &(aqc->outQueue)); > > > for(i=0; i< AUDIO_BUFFERS / 2; i++) { > AudioQueueAllocateBuffer(aqc->inQueue, aqc->frameSize, > &(aqc->mBuffers[i])); > } > for(i=AUDIO_BUFFERS/2; i < AUDIO_BUFFERS; i++) { > aqniStatus = AudioQueueAllocateBuffer(aqc->outQueue, > aqc->frameSize, &(aqc->mBuffers[i])); > AQOutputCallback(aqc, aqc->outQueue, aqc->mBuffers[i]); > } > > aqniStatus = AudioQueueStart(aqc->outQueue, NULL); > return aqc; > } > > static void AQInputCallback > (void *aqr, > AudioQueueRef inQ, > AudioQueueBufferRef inQB, > const AudioTimeStamp *timestamp, > UInt32 frameSize, > const AudioStreamPacketDescription *mDataFormat) > { > AQCallbackStruct *aqc = (AQCallbackStruct*)aqr; > > // should find the frequency of the input sound and store it in > frequency > aqc->frequency = autoCorrelation(&(((SInt16*)inQB->mAudioData)[0]), > aqc->frameCount*2); > } > > // this I've confirmed works by subsituting 440 in for the frequency... > > static void AQOutputCallback > (void *aqr, > AudioQueueRef inQ, > AudioQueueBufferRef outQB) > { > AQCallbackStruct *aqc = (AQCallbackStruct*)aqr; > > SInt16 *CoreAudioBuffer = outQB->mAudioData; > outQB->mAudioDataByteSize = 4*aqc->frameCount; > > for (int i=0; i<aqc->frameCount*2; i+=2) { > CoreAudioBuffer[i] = waveform(i, > aqc->mDataFormat.mSampleRate/2, aqc->frequency, aqc->amplitude, 0, 0); > CoreAudioBuffer[i+1] = waveform(i, > aqc->mDataFormat.mSampleRate/2, aqc->frequency, aqc->amplitude, 0, 0); > } > AudioQueueEnqueueBuffer(inQ, outQB, 0, NULL); > } > > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/cocoa-dev/cocoadev%40mikeabdullah.net > > This email sent to cocoa...@mikeabdullah.net _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com