{
vg_audio_lock();
+ u32 flags = AUDIO_FLAG_WORLD | AUDIO_FLAG_RELINQUISHED;
+ flags |= audio->flags & (AUDIO_FLAG_LOOP|AUDIO_FLAG_NO_DOPPLER|AUDIO_FLAG_NO_DSP);
+
if( audio->behaviour == k_channel_behaviour_unlimited )
{
audio_channel_id channel_id = vg_audio_get_first_idle_channel();
if( channel_id )
{
- vg_audio_add_channel_flags( channel_id, AUDIO_FLAG_WORLD | AUDIO_FLAG_RELINQUISHED );
+ vg_audio_add_channel_flags( channel_id, flags );
+ vg_audio_set_channel_group( channel_id, audio->group );
vg_audio_set_channel_clip( channel_id, &clip->_.clip );
- vg_audio_set_channel_spacial_falloff( channel_id, sound_co, audio->transform.s[0] );
+ if( audio->flags & AUDIO_FLAG_SPACIAL_3D )
+ vg_audio_set_channel_spacial_falloff( channel_id, sound_co, audio->transform.s[0] );
vg_audio_set_channel_volume( channel_id, audio->volume, 1 );
vg_audio_start_channel( channel_id );
}
audio_channel_id channel_id = vg_audio_get_first_idle_channel();
if( channel_id )
{
- vg_audio_add_channel_flags( channel_id, AUDIO_FLAG_WORLD | AUDIO_FLAG_RELINQUISHED );
+ vg_audio_add_channel_flags( channel_id, flags );
+ vg_audio_set_channel_group( channel_id, audio->group );
vg_audio_set_channel_clip( channel_id, &clip->_.clip );
- vg_audio_set_channel_spacial_falloff( channel_id, sound_co, audio->transform.s[0] );
+ if( audio->flags & AUDIO_FLAG_SPACIAL_3D )
+ vg_audio_set_channel_spacial_falloff( channel_id, sound_co, audio->transform.s[0] );
vg_audio_set_channel_volume( channel_id, audio->volume, 1 );
vg_audio_start_channel( channel_id );
}
{
audio_channel_id channel_id = vg_audio_get_first_active_channel_in_group( audio->group );
if( channel_id )
- vg_audio_crossfade( channel_id, &clip->_.clip, audio->crossfade );
+ {
+ if( !vg_audio_is_channel_using_clip( channel_id, &clip->_.clip ) )
+ vg_audio_crossfade( channel_id, &clip->_.clip, audio->crossfade );
+ }
}
else
{
audio_channel_id channel_id = vg_audio_get_first_idle_channel();
if( channel_id )
{
- vg_audio_add_channel_flags( channel_id, AUDIO_FLAG_WORLD|AUDIO_FLAG_RELINQUISHED );
+ vg_audio_add_channel_flags( channel_id, flags );
+ vg_audio_set_channel_group( channel_id, audio->group );
vg_audio_set_channel_clip( channel_id, &clip->_.clip );
- vg_audio_set_channel_spacial_falloff( channel_id, sound_co, audio->transform.s[0] );
+ if( audio->flags & AUDIO_FLAG_SPACIAL_3D )
+ vg_audio_set_channel_spacial_falloff( channel_id, sound_co, audio->transform.s[0] );
vg_audio_set_channel_volume( channel_id, audio->volume, 1 );
vg_audio_start_channel( channel_id );
}