// Source buffer start
float *source, *replacement;
+ u32 clip_start, clip_end, buffer_length;
+
// Modifiers
sfx_vol_control *vol_src;
float vol;
u32 ch, end, cur;
u32 flags;
- int is_queued;
-
// Effects
u32 fadeout, fadeout_current;
{
MUTEX_LOCK( sfx_mux_t01 );
- if( sys->is_queued )
+ if( sfx_q_len >= SFX_MAX_SYSTEMS )
{
MUTEX_UNLOCK( sfx_mux_t01 );
-
- vg_warn( "Sfx system locked for writing.. Spam is being created!\n" );
+ vg_warn( "Warning: No free space in sound queue\n" );
return 0;
}
- sys->is_queued = 1;
return 1;
}
// Mark change to be uploaded to queue system
static int sfx_save( sfx_system *sys )
{
- if( sfx_q_len >= SFX_MAX_SYSTEMS )
- {
- vg_error( "Warning: No free space in sound queue\n" );
-
- MUTEX_UNLOCK( sfx_mux_t01 );
- return 0;
- }
-
// Mark change in queue
sfx_q[ sfx_q_len ++ ] = sys;
while( sfx_q_len --> 0 )
{
sfx_system *src = sfx_q[sfx_q_len];
- src->is_queued = 0;
-
sfx_system *clone;
// This is a 'new' sound if thread_clone not set.
sys->end = source->segments[ pick*2 + 1 ];
sys->ch = source->ch;
+ // Diagnostics
+ sys->clip_start = sys->cur;
+ sys->clip_end = sys->end;
+ sys->buffer_length = source->segments[ (source->numsegments-1)*2 + 1 ];
+
sfx_save( sys );
}
}
{
if( sfx_begin_edit( sys ) )
{
- sys->fadeout_current = length_samples;
- sys->fadeout = length_samples;
+ if( sys->end )
+ {
+ sys->fadeout_current = length_samples;
+ sys->fadeout = length_samples;
+
+ if( sys->thread_clone )
+ sys->cur = sys->thread_clone->cur;
- if( sys->thread_clone )
- sys->cur = sys->thread_clone->cur;
-
- sfx_save( sys );
+ sfx_save( sys );
+ }
+ else
+ {
+ // Sound was not initialized
+ MUTEX_UNLOCK( sfx_mux_t01 );
+ }
}
}