projects
/
vg.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
52405ee
)
additional lock checks
author
hgn
<hgodden00@gmail.com>
Tue, 21 Nov 2023 11:09:17 +0000
(11:09 +0000)
committer
hgn
<hgodden00@gmail.com>
Tue, 21 Nov 2023 11:09:17 +0000
(11:09 +0000)
vg_audio.h
patch
|
blob
|
history
diff --git
a/vg_audio.h
b/vg_audio.h
index 39f494ffa0b843e501c28aaab94db4cfa7dd443e..cef461787ab0a44754e95f6f5ba97e3c6ca8a4c5 100644
(file)
--- 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 )
{
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;
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 )
{
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 )
{
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)
{
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];
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 )
{
static audio_channel *audio_get_group_idle_channel( u16 group, u32 max_count )
{
+ audio_require_lock();
u32 count = 0;
audio_channel *dest = NULL;
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 )
{
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) )
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 )
{
static int audio_channel_finished( audio_channel *ch )
{
+ audio_require_lock();
if( ch->readable_activity == k_channel_activity_end )
return 1;
else
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 )
{
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;
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 )
{
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;
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 )
{
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;
}
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 )
{
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;
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 )
{
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_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 );
}
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_clip *new_clip,
float length, u32 flags )
{
+ audio_require_lock();
u32 cursor = 0;
if( ch )
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 )
{
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;
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 )
{
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 );
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 )
{
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 ){
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 )
{
static int audio_oneshot( audio_clip *clip, float volume, float pan )
{
+ audio_require_lock();
audio_channel *ch = audio_get_first_idle_channel();
if( ch ){
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 )
{
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;
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 )
{
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;
audio_lfo *lfo = &vg_audio.oscillators[ id ];
lfo->editable_state.period = 44100.0f / freq;
lfo->editble_state_write_mask |= AUDIO_EDIT_LFO_PERIOD;