From: hgn Date: Tue, 21 Nov 2023 11:09:17 +0000 (+0000) Subject: additional lock checks X-Git-Url: https://harrygodden.com/git/?p=vg.git;a=commitdiff_plain;h=de04c42142cd3fc01817f7e1913cf6d6c8050e57 additional lock checks --- diff --git a/vg_audio.h b/vg_audio.h index 39f494f..cef4617 100644 --- a/vg_audio.h +++ b/vg_audio.h @@ -331,6 +331,7 @@ static void vg_audio_free(void) static void audio_channel_init( audio_channel *ch, audio_clip *clip, u32 flags ) { + audio_require_lock(); ch->group = 0; ch->world_id = 0; ch->source = clip; @@ -360,17 +361,20 @@ static void audio_channel_init( audio_channel *ch, audio_clip *clip, u32 flags ) static void audio_channel_group( audio_channel *ch, u16 group ) { + audio_require_lock(); ch->group = group; ch->colour = (((u32)group * 29986577) & 0x00ffffff) | 0xff000000; } static void audio_channel_world( audio_channel *ch, u8 world_id ) { + audio_require_lock(); ch->world_id = world_id; } static audio_channel *audio_get_first_idle_channel(void) { + audio_require_lock(); for( int i=0; iallocated && (ch->group == group) ) @@ -420,6 +426,7 @@ static audio_channel *audio_get_group_first_active_channel( u16 group ) static int audio_channel_finished( audio_channel *ch ) { + audio_require_lock(); if( ch->readable_activity == k_channel_activity_end ) return 1; else @@ -428,6 +435,7 @@ static int audio_channel_finished( audio_channel *ch ) static audio_channel *audio_relinquish_channel( audio_channel *ch ) { + audio_require_lock(); ch->editable_state.relinquished = 1; ch->editble_state_write_mask |= AUDIO_EDIT_OWNERSHIP; return NULL; @@ -436,6 +444,7 @@ static audio_channel *audio_relinquish_channel( audio_channel *ch ) static void audio_channel_slope_volume( audio_channel *ch, float length, float new_volume ) { + audio_require_lock(); ch->editable_state.volume_target = new_volume; ch->editable_state.volume_rate = length * 44100.0f; ch->editble_state_write_mask |= AUDIO_EDIT_VOLUME_SLOPE; @@ -443,6 +452,7 @@ static void audio_channel_slope_volume( audio_channel *ch, float length, static void audio_channel_set_sampling_rate( audio_channel *ch, float rate ) { + audio_require_lock(); ch->editable_state.sampling_rate = rate; ch->editble_state_write_mask |= AUDIO_EDIT_SAMPLING_RATE; } @@ -450,6 +460,7 @@ static void audio_channel_set_sampling_rate( audio_channel *ch, float rate ) static void audio_channel_edit_volume( audio_channel *ch, float new_volume, int instant ) { + audio_require_lock(); if( instant ){ ch->editable_state.volume = new_volume; ch->editble_state_write_mask |= AUDIO_EDIT_VOLUME; @@ -461,12 +472,14 @@ static void audio_channel_edit_volume( audio_channel *ch, static audio_channel *audio_channel_fadeout( audio_channel *ch, float length ) { + audio_require_lock(); audio_channel_slope_volume( ch, length, 0.0f ); return audio_relinquish_channel( ch ); } static void audio_channel_fadein( audio_channel *ch, float length ) { + audio_require_lock(); audio_channel_edit_volume( ch, 0.0f, 1 ); audio_channel_slope_volume( ch, length, 1.0f ); } @@ -475,6 +488,7 @@ static audio_channel *audio_channel_crossfade( audio_channel *ch, audio_clip *new_clip, float length, u32 flags ) { + audio_require_lock(); u32 cursor = 0; if( ch ) @@ -493,6 +507,7 @@ static audio_channel *audio_channel_crossfade( audio_channel *ch, static void audio_channel_sidechain_lfo( audio_channel *ch, int lfo_id, float amount ) { + audio_require_lock(); ch->editable_state.lfo = &vg_audio.oscillators[ lfo_id ]; ch->editable_state.lfo_amount = amount; ch->editble_state_write_mask |= AUDIO_EDIT_LFO_ATTACHMENT; @@ -500,6 +515,7 @@ static void audio_channel_sidechain_lfo( audio_channel *ch, int lfo_id, static void audio_channel_set_spacial( audio_channel *ch, v3f co, float range ) { + audio_require_lock(); if( ch->flags & AUDIO_FLAG_SPACIAL_3D ){ v3_copy( co, ch->editable_state.spacial_falloff ); @@ -519,6 +535,7 @@ static void audio_channel_set_spacial( audio_channel *ch, v3f co, float range ) static int audio_oneshot_3d( audio_clip *clip, v3f position, float range, float volume ) { + audio_require_lock(); audio_channel *ch = audio_get_first_idle_channel(); if( ch ){ @@ -535,6 +552,7 @@ static int audio_oneshot_3d( audio_clip *clip, v3f position, static int audio_oneshot( audio_clip *clip, float volume, float pan ) { + audio_require_lock(); audio_channel *ch = audio_get_first_idle_channel(); if( ch ){ @@ -551,6 +569,7 @@ static int audio_oneshot( audio_clip *clip, float volume, float pan ) static void audio_set_lfo_wave( int id, enum lfo_wave_type type, float coefficient ) { + audio_require_lock(); audio_lfo *lfo = &vg_audio.oscillators[ id ]; lfo->editable_state.polynomial_coefficient = coefficient; lfo->editable_state.wave_type = type; @@ -560,6 +579,7 @@ static void audio_set_lfo_wave( int id, enum lfo_wave_type type, static void audio_set_lfo_frequency( int id, float freq ) { + audio_require_lock(); audio_lfo *lfo = &vg_audio.oscillators[ id ]; lfo->editable_state.period = 44100.0f / freq; lfo->editble_state_write_mask |= AUDIO_EDIT_LFO_PERIOD;