예제 #1
0
void clAudioSource_OpenAL::Play()
{
#if L_AUDIO_USE_OPENAL

//   if ( IsPlaying() ) alSourceStop( FSourceID );
	if ( IsPlaying() ) { return; }

	Lint State;

	alGetSourcei( FSourceID, AL_SOURCE_STATE, &State );

	if ( !FWaveDataProvider )
	{
		return;
	}

	//FATAL( , "No data provider is attached to the audio source" );

	if ( State != AL_PAUSED && FWaveDataProvider->IsStreaming() )
	{
		UnqueueAll();

		StreamBuffer( FBufferID[0], BUFFER_SIZE );
		StreamBuffer( FBufferID[1], BUFFER_SIZE );

		alSourceQueueBuffers( FSourceID, 2, &FBufferID[0] );

		dynamic_cast<clAudioSubSystem_OpenAL*>( Env->Audio )->RegisterSource( this );
	}

	alSourcePlay( FSourceID );
#endif
}
예제 #2
0
void clAudioSource_OpenAL::Pause()
{
#if L_AUDIO_USE_OPENAL
	alSourcePause( FSourceID );

	UnqueueAll();
//   Stop();
#endif
}
void clAudioSource::Play()
{
	if ( IsPlaying() ) { return; }

	if ( !FWaveDataProvider ) { return; }

	int State;
	alGetSourcei( FSourceID, AL_SOURCE_STATE, &State );

	if ( State != AL_PAUSED && FWaveDataProvider->IsStreaming() )
	{
		UnqueueAll();

		StreamBuffer( FBufferID[0], BUFFER_SIZE );
		StreamBuffer( FBufferID[1], BUFFER_SIZE );

		alSourceQueueBuffers( FSourceID, 2, &FBufferID[0] );
	}

	alSourcePlay( FSourceID );
}
예제 #4
0
void clAudioSource_OpenAL::Stop()
{
#if L_AUDIO_USE_OPENAL
//   if ( !IsPlaying() ) return;

	alSourceStop( FSourceID );

	if ( FWaveDataProvider )
	{
		FWaveDataProvider->Seek( 0 );

		if ( FWaveDataProvider->IsStreaming() )
		{
			dynamic_cast<clAudioSubSystem_OpenAL*>( Env->Audio )->UnRegisterSource( this );

			UnqueueAll();
		}
	}

#endif
}