void play() { OSStatus status; aqData.mIsRunning = true; // 1 aqData.mCurrentPacket = 0; // 1 primeBuffer(); Float32 gain = 1.0; // 1 // Optionally, allow user to override gain setting here status = AudioQueueSetParameter ( // 2 aqData.mQueue, // 3 kAudioQueueParam_Volume, // 4 gain // 5 ); checkStatus(status); status = AudioQueueStart ( // 2 aqData.mQueue, // 3 NULL // 4 ); checkStatus(status); }
void seekToPacket(uint64_t packet) { AudioQueueStop(aqData.mQueue, true); aqData.mCurrentPacket = rand()%1000; primeBuffer(); AudioQueueStart(aqData.mQueue, NULL); }
static OSStatus outputRenderProc(void *inRefCon, AudioUnitRenderActionFlags *inActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumFrames, AudioBufferList *ioData) { au_instance_t *p = (au_instance_t*) inRefCon; /* printf("outputRenderProc, (bufs=%d, buf[0].chs=%d), buf=%p, size=%d\n", ioData->mNumberBuffers, ioData->mBuffers[0].mNumberChannels, ioData->mBuffers[0].mData, ioData->mBuffers[0].mDataByteSize); */ int res = primeBuffer(p, ioData->mBuffers[0].mData, ioData->mBuffers[0].mDataByteSize / (p->stereo ? 4 : 2)); /* printf(" - primed: %d samples (%d bytes)\n", res, res * (p->stereo ? 4 : 2)); */ if (res < 0) res = 0; ioData->mBuffers[0].mDataByteSize = res * (p->stereo ? 4 : 2); if (res == 0) { /* printf(" - no input, stopping unit\n"); */ AudioOutputUnitStop(p->outUnit); } return noErr; }