additional lock checks
authorhgn <hgodden00@gmail.com>
Tue, 21 Nov 2023 11:09:17 +0000 (11:09 +0000)
committerhgn <hgodden00@gmail.com>
Tue, 21 Nov 2023 11:09:17 +0000 (11:09 +0000)
vg_audio.h

index 39f494ffa0b843e501c28aaab94db4cfa7dd443e..cef461787ab0a44754e95f6f5ba97e3c6ca8a4c5 100644 (file)
@@ -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; i<AUDIO_CHANNELS; i++ ){
       audio_channel *ch = &vg_audio.channels[i];
 
@@ -384,6 +388,7 @@ static audio_channel *audio_get_first_idle_channel(void)
 
 static audio_channel *audio_get_group_idle_channel( u16 group, u32 max_count )
 {
+   audio_require_lock();
    u32 count = 0;
    audio_channel *dest = NULL;
 
@@ -410,6 +415,7 @@ static audio_channel *audio_get_group_idle_channel( u16 group, u32 max_count )
 
 static audio_channel *audio_get_group_first_active_channel( u16 group )
 {
+   audio_require_lock();
    for( int i=0; i<AUDIO_CHANNELS; i++ ){
       audio_channel *ch = &vg_audio.channels[i];
       if( ch->allocated && (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;