Example #1
0
 /*
  * Main update function. Called every frame,
  * performes all necessary calculations.
  */
 void
 AL_Update ( void )
 {
   q_int32_t i;
   channel_t *ch;
   vec_t orientation[6];
   paintedtime = cl.time;
   /* set listener (player) parameters */
   AL_CopyVector ( listener_forward, orientation );
   AL_CopyVector ( listener_up, orientation + 3 );
   qalListenerf ( AL_GAIN, s_volume->value );
   qalListenerf ( AL_MAX_GAIN, s_openal_maxgain->value );
   qalDistanceModel ( AL_LINEAR_DISTANCE_CLAMPED );
   qalListener3f ( AL_POSITION, AL_UnpackVector ( listener_origin ) );
   qalListenerfv ( AL_ORIENTATION, orientation );
   /* update spatialization for dynamic sounds */
   ch = channels;

   for ( i = 0; i < s_numchannels; i++, ch++ ) {
     if ( !ch->sfx ) {
       continue;
     }

     if ( ch->autosound ) {
       /* autosounds are regenerated fresh each frame */
       if ( ch->autoframe != s_framecount ) {
         AL_StopChannel ( ch );
         continue;
       }
     } else {
       ALenum state;
       qalGetError();
       qalGetSourcei ( ch->srcnum, AL_SOURCE_STATE, &state );

       if ( ( qalGetError() != AL_NO_ERROR ) || ( state == AL_STOPPED ) ) {
         AL_StopChannel ( ch );
         continue;
       }
     }

     if ( s_show->value ) {
       Com_Printf ( "%3i %s\n", ch->master_vol, ch->sfx->name );
     }

     /* respatialize channel */
     AL_Spatialize ( ch );
   }

   s_framecount++;
   /* add loopsounds */
   AL_AddLoopSounds();
   /* add music */
 #ifdef HT_WITH_OGG
   OGG_Stream();
 #endif
   AL_StreamUpdate();
   AL_IssuePlaysounds();
 }
Example #2
0
void AL_Update( void ) {
	int         i;
	channel_t   *ch;
	vec_t       orientation[6];

	paintedtime = cl.time;

	// set listener parameters
	qalListener3f( AL_POSITION, AL_UnpackVector( listener_origin ) );
	AL_CopyVector( listener_forward, orientation );
	AL_CopyVector( listener_up, orientation + 3 );
	qalListenerfv( AL_ORIENTATION, orientation );
	qalListenerf( AL_GAIN, s_volume->value );
	qalDistanceModel( AL_LINEAR_DISTANCE_CLAMPED );

	// update spatialization for dynamic sounds
	ch = channels;
	for( i = 0; i < s_numchannels; i++, ch++ ) {
		if( !ch->sfx )
			continue;

		if( ch->autosound ) {
			// autosounds are regenerated fresh each frame
			if( ch->autoframe != s_framecount ) {
				AL_StopChannel( ch );
				continue;
			}
		} else {
			ALenum state;

			qalGetError();
			qalGetSourcei( ch->srcnum, AL_SOURCE_STATE, &state );
			if( qalGetError() != AL_NO_ERROR || state == AL_STOPPED ) {
				AL_StopChannel( ch );
				continue;
			}
		}

		if (s_show->value) {
			Com_Printf ("%3i %s\n", ch->master_vol, ch->sfx->name);
		}

		AL_Spatialize(ch); // respatialize channel
	}

	s_framecount++;

	// add loopsounds
	AL_AddLoopSounds ();

	// add music
	OGG_Stream();
	S_AL_StreamUpdate();

	AL_IssuePlaysounds();
}