From c068f22329d5cc722622a2183bbb22eef2093df7 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 24 Aug 2026 11:16:07 +0200 Subject: initial import --- src/parsec/aud_supp.cpp | 150 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 src/parsec/aud_supp.cpp (limited to 'src/parsec/aud_supp.cpp') diff --git a/src/parsec/aud_supp.cpp b/src/parsec/aud_supp.cpp new file mode 100644 index 0000000..7bc2d1a --- /dev/null +++ b/src/parsec/aud_supp.cpp @@ -0,0 +1,150 @@ +/* + * PARSEC - Supporting Audio Code + * + * $Author: uberlinuxguy $ - $Date: 2004/09/15 12:25:21 $ + * + * Orginally written by: + * Copyright (c) Clemens Beer 1999 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +// C library +#include +#include +#include +#include + +// compilation flags/debug support +#include "config.h" +#include "debug.h" + +// general definitions +#include "general.h" +#include "objstruc.h" + +// global externals +#include "globals.h" + +// subsystem headers +#include "aud_defs.h" + +// local module header +#include "aud_supp.h" + +// proprietary module headers +#include "con_aux.h" + + + +// find a sample specified by a name ------------------------------------------ +// +sampleinfo_s* AUD_FetchSampleByName( const char *name, int *id ) +{ + ASSERT( name != NULL ); + ASSERT( id != NULL ); + + // scan entire table of samples + for ( int sampleid = 0; sampleid < NumLoadedSamples; sampleid++ ) { + if ( stricmp( SampleInfo[ sampleid ].name, name ) == 0 ) { + *id = sampleid; + return &SampleInfo [ sampleid ]; + } + } + + // no sample of this name found + return NULL; +} + + +// find a sample specified by its id ------------------------------------------ +// +sampleinfo_s* AUD_FetchSampleById( int id ) +{ + //NOTE: + // this function may be invoked for invalid + // sample ids. in that case NULL will be + // returned. + + // ensure id is valid + if ( ( id < 0 ) || ( id >= NumLoadedSamples ) ) + return (sampleinfo_s*)NULL; + + return &SampleInfo [ id ]; +} + + +// change the volume of the specified sample ---------------------------------- +// +int AUD_SetSampleVolume( int id, int volume ) +{ + //NOTE: + // this function may be invoked for invalid + // sample ids. in that case FALSE will be + // returned. + + if ( ( id >= 0 ) && ( id < NumLoadedSamples ) ) { + + SampleInfo [ id ].volume = volume; + return TRUE; + } + + return FALSE; +} + + +// play a sample on a channel ------------------------------------------------- +// +int AUD_PlaySampleOnChannel( sample_channel_info_s *info ) +{ + ASSERT( info != NULL ); + + if ( DISABLE_AUDIO_FUNCTIONS || AUX_DISABLE_SOUNDEFFECTS ) + return FALSE; + + if ( info->interruptold == FALSE ) { + + // check whether any previous playing has already stopped + int stopped; + AUDs_GetVoiceStatus( info->channel, &stopped ); + + if ( stopped == 0 ) + return FALSE; + } + + if ( info->fallbacksample ) { + + AUD_FETCHSAMPLE_FALLBACK_EX( info->samplename, info->sampleid, + info->fallbacksample ); + if ( fetch_wave != NULL ) { + AUXDATA_LAST_SOUNDSYS_RETURNCODE = + AUDs_PlayVoiceBuffer( info->channel, fetch_wave, &fetch_params ); + } + + } else { + + AUD_FETCHSAMPLE_EX( info->samplename, info->sampleid ); + + if ( fetch_wave != NULL ) { + AUXDATA_LAST_SOUNDSYS_RETURNCODE = + AUDs_PlayVoiceBuffer( info->channel, fetch_wave, &fetch_params ); + } + } + + return TRUE; +} + + + -- cgit v1.2.3