X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg%2Fvg_audio.h;h=e62d5845447e35f09c3e3b6536911a38ff2e3e42;hb=3363633178b1eea582304742ad1202487af0feb1;hp=35d775621b1bdddd27edb6b948c9425a84834477;hpb=fefce08c7eecf3eb66553825ba421b5b81dae5eb;p=fishladder.git diff --git a/vg/vg_audio.h b/vg/vg_audio.h index 35d7756..e62d584 100644 --- a/vg/vg_audio.h +++ b/vg/vg_audio.h @@ -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 )