/***************************************************************************** * Play: play a sound samples buffer *****************************************************************************/ static void Play (audio_output_t *p_aout, block_t *block) { aout_sys_t *p_sys = p_aout->sys; kaiPlay( p_sys->hkai ); aout_PacketPlay( p_aout, block ); }
static int kai_stream_start(cubeb_stream * stm) { if (kaiPlay(stm->hkai)) return CUBEB_ERROR; stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); return CUBEB_OK; }
/***************************************************************************** * Play: play a sound samples buffer *****************************************************************************/ static void Play (audio_output_t *p_aout, block_t *block) { aout_sys_t *p_sys = p_aout->sys; kaiPlay( p_sys->hkai ); WriteBuffer( p_aout, block->p_buffer, block->i_buffer ); block_Release( block ); }
void playThread( void *arg ) { char *name = arg; HMMIO hmmio; MMIOINFO mmioInfo; MMAUDIOHEADER mmAudioHeader; LONG lBytesRead; KAISPEC ksWanted, ksObtained; HKAI hkai; CBDATA cd; /* Open the audio file. */ memset( &mmioInfo, '\0', sizeof( MMIOINFO )); mmioInfo.fccIOProc = mmioFOURCC('W', 'A', 'V', 'E'); hmmio = mmioOpen( name, &mmioInfo, MMIO_READ | MMIO_DENYNONE ); if( !hmmio ) { fprintf( stderr, "[%s] Failed to open a wave file!!!\n", name ); goto exit_discount_threads; } /* Get the audio file header. */ mmioGetHeader( hmmio, &mmAudioHeader, sizeof( MMAUDIOHEADER ), &lBytesRead, 0, 0); memset( &cd, 0, sizeof( CBDATA )); cd.hmmio = hmmio; ksWanted.usDeviceIndex = 0; ksWanted.ulType = KAIT_PLAY; ksWanted.ulBitsPerSample = mmAudioHeader.mmXWAVHeader.WAVEHeader.usBitsPerSample; ksWanted.ulSamplingRate = mmAudioHeader.mmXWAVHeader.WAVEHeader.ulSamplesPerSec; ksWanted.ulDataFormat = 0; ksWanted.ulChannels = mmAudioHeader.mmXWAVHeader.WAVEHeader.usChannels; ksWanted.ulNumBuffers = 2; ksWanted.ulBufferSize = 0; ksWanted.fShareable = TRUE; ksWanted.pfnCallBack = kaiCallback; ksWanted.pCallBackData = &cd; if( kaiOpen( &ksWanted, &ksObtained, &hkai )) { fprintf( stderr, "[%s] Failed to open audio device!!!\n", name ); goto exit_mmio_close; } printf("[%s] hkai = %lx\n", name, hkai ); kaiSetVolume( hkai, MCI_SET_AUDIO_ALL, 50 ); kaiSetSoundState( hkai, MCI_SET_AUDIO_ALL, TRUE ); printf("[%s] Trying to play...\n", name ); //DosSetPriority( PRTYS_THREAD, PRTYC_TIMECRITICAL, PRTYD_MAXIMUM, 0 ); while( 1 ) { switch( kaiPlay( hkai )) { case KAIE_NO_ERROR : break; #if 0 // Wait for instance to be active case KAIE_NOT_READY : DosSleep( 1 ); continue; #endif default : fprintf( stderr, "[%s] Failed to play!!!\n", name ); goto exit_kai_close; } break; } //DosSetPriority( PRTYS_THREAD, PRTYC_REGULAR, 0, 0 ); printf("[%s] Playing...\n", name ); while( !m_fQuit && !( kaiStatus( hkai ) & KAIS_COMPLETED )) DosSleep( 1 ); printf("[%s] Completed\n", name ); exit_kai_close : kaiClose( hkai ); exit_mmio_close : mmioClose( hmmio, 0 ); exit_discount_threads : m_nThreads--; }