#include "common.h"
-static void audio_spacialize( sfx_system *sys,
- v3f pos, v3f camera, v3f ears, float vol );
#ifndef AUDIO_H
#define AUDIO_H
static int k_audio_debug_soundscape = 0;
-sfx_set audio_board =
+
+audio_clip audio_board[] =
{
- .sources = "sound/skate.ogg\0"
- "sound/wheel.ogg\0"
- "sound/slide.ogg\0"
- "sound/reverb.ogg\0"
+ {.path="sound/skate.ogg", .source_mode=k_audio_source_mono_compressed },
+ {.path="sound/wheel.ogg", .source_mode=k_audio_source_mono_compressed },
+ {.path="sound/slide.ogg", .source_mode=k_audio_source_mono_compressed },
+ {.path="sound/reverb.ogg",.source_mode=k_audio_source_mono_compressed }
};
-sfx_system audio_player0 =
+audio_player audio_player0 =
{
- .vol = 0.0f,
- .ch = 1,
- .vol_src = &audio_vol_all,
.name = "Player0",
- .flags = SFX_FLAG_REPEAT | SFX_FLAG_PERSISTENT
};
-sfx_system audio_player1 =
+audio_player audio_player1 =
{
- .vol = 0.0f,
- .ch = 1,
- .vol_src = &audio_vol_all,
.name = "Player1",
- .flags = SFX_FLAG_REPEAT | SFX_FLAG_PERSISTENT
};
-sfx_system audio_player2 =
+audio_player audio_player2 =
{
- .vol = 0.0f,
- .ch = 1,
- .vol_src = &audio_vol_all,
.name = "Player2",
- .flags = SFX_FLAG_REPEAT | SFX_FLAG_PERSISTENT
};
-sfx_system audio_player3 =
+audio_player audio_player3 =
{
- .vol = 0.0f,
- .ch = 1,
- .vol_src = &audio_vol_all,
.name = "Player3",
- .flags = SFX_FLAG_REPEAT | SFX_FLAG_PERSISTENT
};
static void audio_init(void)
{
- sfx_set_init( &audio_board, NULL );
- sfx_set_play( &audio_board, &audio_player0, 0 );
- sfx_set_play( &audio_board, &audio_player1, 1 );
- sfx_set_play( &audio_board, &audio_player2, 2 );
- sfx_set_play( &audio_board, &audio_player3, 3 );
+ audio_clip_loadn( audio_board, vg_list_size(audio_board) );
+
+ audio_lock();
+ u32 flags = AUDIO_FLAG_LOOP|AUDIO_FLAG_SPACIAL_3D;
+
+ audio_player_set_flags( &audio_player0, flags );
+ audio_player_set_flags( &audio_player1, flags );
+ audio_player_set_flags( &audio_player2, flags );
+ audio_player_set_flags( &audio_player3, AUDIO_FLAG_LOOP );
+
+ audio_player_playclip( &audio_player0, &audio_board[0] );
+ audio_player_playclip( &audio_player1, &audio_board[1] );
+ audio_player_playclip( &audio_player2, &audio_board[2] );
+ audio_player_playclip( &audio_player3, &audio_board[3] );
+
+ audio_unlock();
vg_convar_push( (struct vg_convar){
.name = "aud_debug_soundscape",
static void audio_free(void)
{
- sfx_set_free( &audio_board );
-}
-
-static void audio_spacialize( sfx_system *sys,
- v3f pos, v3f camera, v3f ears, float vol )
-{
- float attn = (v3_dist( pos, camera ) / vol) +1.0f;
-
- v3f delta;
- v3_sub( pos, camera, delta );
- v3_normalize( delta );
-
- float pan = v3_dot( ears, delta );
-
- sys->vol = 1.0f/(attn*attn);
- sys->pan = pan;
}
static void audio_sample_occlusion( v3f origin )
char buf[64];
snprintf( buf, 31, "occlusion: %.5f", audio_occlusion_current );
- ui_global_ctx.cursor[0] = 250;
+ ui_global_ctx.cursor[0] = 450;
ui_global_ctx.cursor[1] = 10;
ui_global_ctx.cursor[2] = audio_occlusion_current * 200.0f;
ui_global_ctx.cursor[3] = 20;
v3_muladds( p, p0, 3.0f*tt -ttt -3.0f*t +1.0f, p );
}
-/* TODO: he needs a home somewhere */
-sfx_vol_control audio_vol_all = { .val = 1.0f, .name = "All" };
-
#endif /* COMMON_H */
*/
static void player_audio(void)
{
- sfx_lock();
+ audio_lock();
static float air = 0.0f;
air = vg_lerpf(air, player.in_air? 1.0f: 0.0f, 5.0f*ktimestep);
float *cam = player.camera[3],
*pos = player.rb.co;
+ audio_player_set_position( &audio_player0, player.rb.co );
+ audio_player_set_position( &audio_player1, player.rb.co );
+ audio_player_set_position( &audio_player2, player.rb.co );
+
v3_sub( player.rb.co, player.camera[3], delta );
v3_normalize( delta );
m3x3_mulv( player.camera, ears, ears );
+
+ /* TODO, Make function */
+ v3_copy( ears, vg_audio.listener_ears );
+ v3_copy( player.camera[3], vg_audio.listener_pos );
+
+ /* Tunnel / occlusion */
+ audio_sample_occlusion( player.camera[3] );
if( freecam || player.is_dead || !player.on_board )
{
- audio_player0.vol = 0.0f;
- audio_player1.vol = 0.0f;
- audio_player2.vol = 0.0f;
-
- audio_player0.pan = 0.0f;
- audio_player1.pan = 0.0f;
- audio_player2.pan = 0.0f;
+ audio_player_set_vol( &audio_player0, 0.0f );
+ audio_player_set_vol( &audio_player1, 0.0f );
+ audio_player_set_vol( &audio_player2, 0.0f );
}
else
{
- /* Spacialize 0 */
- audio_spacialize( &audio_player0, pos, cam, ears, 1.0f );
- audio_player1.pan = audio_player0.pan;
- audio_player2.pan = audio_player0.pan;
-
/* Composite */
float speed = vg_minf(v3_length( player.rb.v )*0.1f,1.0f),
- attn = audio_player0.vol * speed,
+ attn = speed,
slide = vg_clampf( fabsf(player.slip), 0.0f, 1.0f ),
vol0 = (1.0f-air)*attn*(1.0f-slide),
vol1 = air *attn,
vol2 = (1.0f-air)*attn*slide;
+
+ audio_player_set_vol( &audio_player0, vol0 );
+ audio_player_set_vol( &audio_player1, vol1 );
+ audio_player_set_vol( &audio_player2, vol2 );
- audio_player1.vol = vol1;
- audio_player2.vol = vol2;
- audio_player0.vol = vol0;
+ float reverb_amt = vol0 * audio_occlusion_current * 1.0f;
+ audio_player_set_pan( &audio_player3, 0.0f );
+ audio_player_set_vol( &audio_player3, reverb_amt );
}
-
- /* Tunnel / occlusion */
- audio_sample_occlusion( player.camera[3] );
- audio_player3.pan = 0.0f;
- audio_player3.vol = audio_player0.vol * audio_occlusion_current * 2.0f;
+#if 0
world_audio_update( cam, ears );
- sfx_unlock();
+#endif
+ audio_unlock();
}
/*
#define WORLD_AUDIO_H
#include "common.h"
+#include "vg/vg_audio.h"
#include "audio.h"
-sfx_set audio_birds =
+#if 0
+audio_pack audio_birds =
{
.sources = "sound/bird0.ogg\0"
"sound/bird1.ogg\0"
- "sound/bird2.ogg\0"
+ "sound/bird2.ogg\0",
+ .name = "Birds",
+ .source_mode = k_audio_source_compressed
};
+#endif
static float k_audio_random_freq = 1.0f/10.0f,
k_audio_random_hz = 1.0f;
static struct world_ambient_layer
{
- sfx_system sys;
+ audio_player sys;
v3f pos;
}
world_ambient_layers[8];
static void world_audio_init(void)
{
- sfx_set_init( &audio_birds, NULL );
+#if 0
+ audio_pack_init( &audio_birds );
vg_convar_push( (struct vg_convar){
.name = "aud_random_freq",
for( int i=0; i<vg_list_size(world_ambient_layers); i++ )
{
struct world_ambient_layer *layer = &world_ambient_layers[i];
- sfx_system *sys = &layer->sys;
- sys->vol = 1.0f;
+ audio_player *sys = &layer->sys;
+ sys->_vol = 1.0f;
sys->ch = 1;
- sys->vol_src = &audio_vol_all;
sys->name = "ambient";
sys->flags = SFX_FLAG_PERSISTENT;
}
+#endif
}
static void world_audio_spawn_random( v3f around )
{
+#if 0
for( int i=0; i<vg_list_size(world_ambient_layers); i++ )
{
struct world_ambient_layer *layer = &world_ambient_layers[i];
return;
}
}
+#endif
}
static void world_audio_update( v3f around, v3f ears )
{
+#if 0
if( world_audio_last_tick + (double)k_audio_random_hz < vg_time )
{
world_audio_last_tick = vg_time;
struct world_ambient_layer *layer = &world_ambient_layers[i];
if( layer->sys.is_playing )
- audio_spacialize( &layer->sys, layer->pos, around, ears, 30.0f );
+ audio_player_spacialize(&layer->sys, layer->pos, around, ears, 30.0f);
}
+#endif
}
static void world_audio_debug(void)
{
+#if 0
for( int i=0; i<vg_list_size(world_ambient_layers); i++ )
{
struct world_ambient_layer *layer = &world_ambient_layers[i];
vg_line_pt3( layer->pos, 1.0f, 0xffff00ff );
}
}
+#endif
}
#endif /* WORLD_AUDIO_H */