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;
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];
static audio_channel *audio_get_group_idle_channel( u16 group, u32 max_count )
{
+ audio_require_lock();
u32 count = 0;
audio_channel *dest = NULL;
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) )
static int audio_channel_finished( audio_channel *ch )
{
+ audio_require_lock();
if( ch->readable_activity == k_channel_activity_end )
return 1;
else
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;
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;
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;
}
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;
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 );
}
audio_clip *new_clip,
float length, u32 flags )
{
+ audio_require_lock();
u32 cursor = 0;
if( 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;
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 );
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 ){
static int audio_oneshot( audio_clip *clip, float volume, float pan )
{
+ audio_require_lock();
audio_channel *ch = audio_get_first_idle_channel();
if( ch ){
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;
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;