- sys->source = source->main;
- sys->cur = source->segments[ pick*2 + 0 ];
- sys->end = source->segments[ pick*2 + 1 ];
- sys->ch = source->ch;
-
- sfx_save( sys );
+ 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->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 );
+ }
+}
+
+static void sfx_system_fadeout( sfx_system *sys, u32 length_samples )
+{
+ if( sfx_begin_edit( sys ) )
+ {
+ if( sys->end )
+ {
+ sys->fadeout_current = length_samples;
+ sys->fadeout = length_samples;
+
+ if( sys->thread_clone )
+ sys->cur = sys->thread_clone->cur;
+
+ sfx_save( sys );
+ }
+ else
+ {
+ // Sound was not initialized
+ MUTEX_UNLOCK( sfx_mux_t01 );
+ }
+ }