sfx_set_strings( dest, sources, dest->flags, 0 );
}
-// Pick a random sound from the buffer and play it into system
-static void sfx_set_playrnd( sfx_set *source, sfx_system *sys, int min_id, int max_id )
+static void sfx_set_play( sfx_set *source, sfx_system *sys, int id )
{
- if( !source->numsegments )
- return;
-
- int pick = (rand() % (max_id-min_id)) + min_id;
-
if( sfx_begin_edit( sys ) )
{
sys->fadeout = 0;
sys->source = source->main;
- sys->cur = source->segments[ pick*2 + 0 ];
- sys->end = source->segments[ pick*2 + 1 ];
+ sys->cur = source->segments[ id*2 + 0 ];
+ sys->end = source->segments[ id*2 + 1 ];
sys->ch = source->ch;
// Diagnostics
}
}
+// Pick a random sound from the buffer and play it into system
+static void sfx_set_playrnd( sfx_set *source, sfx_system *sys, int min_id, int max_id )
+{
+ if( !source->numsegments )
+ return;
+
+ if( max_id > source->numsegments )
+ {
+ vg_error( "Max ID out of range for playrnd\n" );
+ return;
+ }
+
+ int pick = (rand() % (max_id-min_id)) + min_id;
+
+ sfx_set_play( source, sys, pick );
+}
+
static void sfx_system_fadeout( sfx_system *sys, u32 length_samples )
{
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 );
+ }
}
}