void primeBuffer() { OSStatus status; for (int i = 0; i < kNumberBuffers; ++i) { // 2 status = AudioQueueAllocateBuffer ( // 3 aqData.mQueue, // 4 aqData.bufferByteSize, // 5 &aqData.mBuffers[i] // 6 ); checkStatus(status); HandleOutputBuffer ( // 7 &aqData, // 8 aqData.mQueue, // 9 aqData.mBuffers[i] // 10 ); } #if 1 status = AudioQueuePrime ( aqData.mQueue, kNumberBuffers, NULL ); checkStatus(status); #endif }
void SoundOutput_MacOSX::mixer_thread_starting() { audio_format.mSampleRate = frequency; audio_format.mFormatID = kAudioFormatLinearPCM; audio_format.mFormatFlags = CalculateLPCMFlags(8*sizeof(short),8*sizeof(short),false,false,false); audio_format.mBytesPerPacket = 2 * sizeof(short); audio_format.mFramesPerPacket = 1; audio_format.mBytesPerFrame = 2 * sizeof(short); audio_format.mChannelsPerFrame = 2; audio_format.mBitsPerChannel = 8 * sizeof (short); audio_format.mReserved = 0; OSStatus result = AudioQueueNewOutput(&audio_format, &SoundOutput_MacOSX::static_audio_queue_callback, this, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, 0, &audio_queue); if (result != 0) throw Exception("AudioQueueNewOutput failed"); for (int i = 0; i < fragment_buffer_count; i++) { result = AudioQueueAllocateBuffer(audio_queue, fragment_size * sizeof(short) * 2, &audio_buffers[i]); if (result != 0) throw Exception("AudioQueueAllocateBuffer failed"); audio_queue_callback(audio_queue, audio_buffers[i]); } result = AudioQueuePrime(audio_queue,0,NULL); if (result != 0) throw Exception("AudioQueuePrime failed"); result = AudioQueueStart(audio_queue, 0); if (result != 0) throw Exception("AudioQueueStart failed"); }
OSStatus DZAudioQueuePlayer::prime() { if (this->_queue == NULL) { return dzDebug(!noErr, "Null audio queue to prime."); } return dzDebug(AudioQueuePrime(this->_queue, 0, NULL), "Fail to prime audio queue."); }
void AudioOutputDeviceCoreAudio::PrimeAudioQueue() { OSStatus res = AudioQueuePrime(aqPlayerState.mQueue, 0, NULL); if(res) { String s = String("AudioQueuePrime: Error ") + ToString(res); throw Exception(s); } }
void IPhoneSoundDevice::Enable(bool fEnable) { base::CritScope cs(&m_crit); if (fEnable) { if (!m_fEnable) { memset(m_achnl, 0, sizeof(m_achnl)); m_tSilence = 0; m_fEnable = true; for (int i = 0; i < kcBuffers; i++) { InitAudioBuffer(m_apaqb[i]); } AudioQueuePrime(m_haq, 0, NULL); AudioQueueStart(m_haq, NULL); SetSoundServiceDevice(this); } } else { if (m_fEnable) { m_fEnable = false; memset(m_achnl, 0, sizeof(m_achnl)); m_tSilence = 0; AudioQueueStop(m_haq, false); SetSoundServiceDevice(NULL); } } }
int32_t setup_queue( ALACMagicCookie cookie, PlayerInfo *playerInfo, uint32_t buffer_size, uint32_t num_buffers, uint32_t num_packets ) { // Create Audio Queue for ALAC AudioStreamBasicDescription inFormat = {0}; inFormat.mSampleRate = ntohl(cookie.sampleRate); inFormat.mFormatID = kAudioFormatAppleLossless; inFormat.mFormatFlags = 0; // ALAC uses no flags inFormat.mBytesPerPacket = 0; // Variable size (must use AudioStreamPacketDescription) inFormat.mFramesPerPacket = ntohl(cookie.frameLength); inFormat.mBytesPerFrame = 0; // Compressed inFormat.mChannelsPerFrame = 2; // Stero TODO: get from fmtp? inFormat.mBitsPerChannel = 0; // Compressed inFormat.mReserved = 0; OSStatus err = AudioQueueNewOutput( &inFormat, c_callback, playerInfo, // User data NULL, // Run on audio queue's thread NULL, // Callback run loop's mode 0, // Reserved &playerInfo->queue); if (err) return err; // Need to set the magic cookie too (tail fmtp) err = AudioQueueSetProperty(playerInfo->queue, kAudioQueueProperty_MagicCookie, &cookie, sizeof(ALACMagicCookie)); if (err) return err; // Create input buffers, and enqueue using callback for (int i = 0; i < num_buffers; i++) { AudioQueueBufferRef buffer; err = AudioQueueAllocateBufferWithPacketDescriptions( playerInfo->queue, buffer_size, num_packets, &buffer); if (err) return err; c_callback(playerInfo, playerInfo->queue, buffer); } // Volume full err = AudioQueueSetParameter(playerInfo->queue, kAudioQueueParam_Volume, 1.0); if (err) return err; // Prime err = AudioQueuePrime(playerInfo->queue, 0, NULL); if (err) return err; // Start err = AudioQueueStart(playerInfo->queue, NULL); if (err) return err; return 0; }
OSStatus Start() { OSStatus result = AudioQueuePrime(mQueue, 1, NULL); if (result) { printf("Error priming queue"); return result; } return AudioQueueStart(mQueue, NULL); }
/** * Entry point for the thread. */ int AudioOutputDeviceCoreAudio::Main() { dmsg(1,("CoreAudio thread started\n")); OSStatus res; if(aqPlayerState.mQueue == NULL) { /* * Need to be run from this thread because of CFRunLoopGetCurrent() * which returns the CFRunLoop object for the current thread. */ try { CreateAndStartAudioQueue(); } catch(Exception e) { std::cerr << "Failed to star audio queue: " + e.Message() << std::endl; return 0; } } destroyMutex.Lock(); do { if(atomic_read(&pausedNew) != pausedOld) { pausedOld = atomic_read(&pausedNew); if(pausedOld) { res = AudioQueuePause(aqPlayerState.mQueue); if(res) std::cerr << "AudioQueuePause: Error " << res << std::endl; } else { res = AudioQueuePrime(aqPlayerState.mQueue, 0, NULL); if(res) std::cerr << "AudioQueuePrime: Error " << res << std::endl; res = AudioQueueStart(aqPlayerState.mQueue, NULL); if(res) std::cerr << "AudioQueueStart: Error " << res << std::endl; } } if(atomic_read(&restartQueue)) { DestroyAudioQueue(); try { CreateAndStartAudioQueue(); } catch(Exception e) { destroyMutex.Unlock(); throw e; } atomic_set(&restartQueue, 0); dmsg(1,("Audio queue restarted")); } CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.2, false); } while (atomic_read(&(aqPlayerState.mIsRunning))); destroyMutex.Unlock(); dmsg(2,("CoreAudio thread stopped\n")); pthread_exit(NULL); return 0; }
void music_obj<audio_queue_driver>::prime() { UInt32 i; for (i = 0; i < NUM_BUFFERS; ++i) { AudioQueueAllocateBuffer(queue_, BUFFER_SIZE_BYTES, &buffers_[i]); if (read_packets(buffers_[i]) == 0) { break; } } UInt32 frames_primed; AudioQueuePrime(queue_, i, &frames_primed); LOG("Primed %d frames", frames_primed); }
void GbApuEmulator::beginApuPlayback() { // Reset the APU and Buffer // gbAPU->reset(false,0); gbAPU->reset(); blipBuffer->clear(true); // Prime the playback buffer for (int i = 0; i < NUM_BUFFERS; ++i) { HandleOutputBuffer(gbAPUState, gbAPUState->queue, gbAPUState->buffers[i]); } AudioQueuePrime(gbAPUState->queue, 0, NULL); gbAPUState->isRunning = true; AudioQueueStart(gbAPUState->queue, NULL); }