struct sfx_system
{
sfx_system *persisitent_source;
+ int in_queue;
// Source buffer start
float *source, *replacement;
float *main;
char *sources;
- u32 segments[20]; //from->to,from->to ...
+ u32 segments[32]; //from->to,from->to ...
u32 numsegments;
u32 ch;
u32 flags;
{
MUTEX_LOCK( sfx_mux_t01 );
- if( sfx_q_len >= SFX_MAX_SYSTEMS )
+ if( sfx_q_len >= SFX_MAX_SYSTEMS && !sys->in_queue )
{
MUTEX_UNLOCK( sfx_mux_t01 );
vg_warn( "Warning: No free space in sound queue\n" );
// Mark change to be uploaded to queue system
static int sfx_push( sfx_system *sys )
{
- // Mark change in queue
- sfx_q[ sfx_q_len ++ ] = sys;
+ if( !sys->in_queue )
+ {
+ // Mark change in queue
+ sfx_q[ sfx_q_len ++ ] = sys;
+ sys->in_queue = 1;
+ }
MUTEX_UNLOCK( sfx_mux_t01 );
sfx_system *src = sfx_q[sfx_q_len];
sfx_system *clone;
+ src->in_queue = 0;
+
// Copy
clone = sfx_alloc();
*clone = *src;
// String layout: "sounda.ogg\0soundb.ogg\0soundc.ogg\0\0"
static void sfx_set_strings( sfx_set *dest, char *strSources, u32 flags, int bAsync )
{
- printf( "Init sfx set\n| start | end | length | name \n" );
-
dest->ch = (flags & SFX_FLAG_STEREO)? 2: 1;
dest->main = NULL;
dest->segments[ dest->numsegments*2+0 ] = total-samples;
dest->segments[ dest->numsegments*2+1 ] = total;
-
- printf( "| %09u | %09u | %09u | %s\n", total-samples, total, samples, source );
}
else
{
source += len +1;
dest->numsegments ++;
}
-
- vg_info( "finished, numsegments: %u\n", dest->numsegments );
}
static void sfx_set_init( sfx_set *dest, char *sources )