basic world text
[fishladder.git] / vg / vg_audio.h
index 35d775621b1bdddd27edb6b948c9425a84834477..e62d5845447e35f09c3e3b6536911a38ff2e3e42 100644 (file)
@@ -26,6 +26,7 @@ struct sfx_vol_control
 struct sfx_system
 {
        sfx_system *persisitent_source;
+       int in_queue;
 
        // Source buffer start
        float *source, *replacement;
@@ -54,7 +55,7 @@ struct sfx_set
        float *main;
        char *sources;
        
-       u32 segments[20];       //from->to,from->to ...
+       u32 segments[32];       //from->to,from->to ...
        u32 numsegments;
        u32 ch;
        u32 flags;
@@ -228,7 +229,7 @@ static int sfx_begin_edit( sfx_system *sys )
 {
        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" );           
@@ -246,8 +247,12 @@ static void sfx_end_edit( sfx_system *sys )
 // 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 );
        
@@ -379,6 +384,8 @@ void audio_mixer_callback( ma_device *pDevice, void *pOutBuf, const void *pInput
                sfx_system *src = sfx_q[sfx_q_len];
                sfx_system *clone;
                
+               src->in_queue = 0;
+               
                // Copy
                clone = sfx_alloc();
                *clone = *src;
@@ -522,8 +529,6 @@ void audio_mixer_callback( ma_device *pDevice, void *pOutBuf, const void *pInput
 // 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;
@@ -556,8 +561,6 @@ static void sfx_set_strings( sfx_set *dest, char *strSources, u32 flags, int bAs
                        
                        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
                {
@@ -569,8 +572,6 @@ static void sfx_set_strings( sfx_set *dest, char *strSources, u32 flags, int bAs
                source += len +1;
                dest->numsegments ++;
        }
-       
-       vg_info( "finished, numsegments: %u\n", dest->numsegments );
 }
 
 static void sfx_set_init( sfx_set *dest, char *sources )