From: hgn Date: Sun, 25 Sep 2022 23:40:02 +0000 (+0100) Subject: preliminary compressed audio X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=0cf7e0563088708f2749f7dacd26ffdf1391dccc;hp=5f4eb3866525724188461589485ac1aa50d08870;p=carveJwlIkooP6JGAAIwe30JlM.git preliminary compressed audio --- diff --git a/audio.h b/audio.h index 212ed9f..60ad27e 100644 --- a/audio.h +++ b/audio.h @@ -1,6 +1,4 @@ #include "common.h" -static void audio_spacialize( sfx_system *sys, - v3f pos, v3f camera, v3f ears, float vol ); #ifndef AUDIO_H #define AUDIO_H @@ -12,57 +10,53 @@ static float audio_occlusion_current = 0.0f, 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", @@ -83,22 +77,6 @@ static void audio_init(void) 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 ) @@ -146,7 +124,7 @@ static void audio_debug_soundscapes(void) 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; diff --git a/common.h b/common.h index a9197a4..587c31b 100644 --- a/common.h +++ b/common.h @@ -47,7 +47,4 @@ static void eval_bezier_time( v3f p0, v3f p1, v3f h0, v3f h1, float t, v3f p ) 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 */ diff --git a/player.h b/player.h index 3d42096..c3ff3e9 100644 --- a/player.h +++ b/player.h @@ -1137,7 +1137,7 @@ static void player_animate_camera(void) */ 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); @@ -1149,47 +1149,50 @@ static void player_audio(void) 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(); } /* diff --git a/sound_src/bird0.ogg b/sound_src/bird0.ogg index 8d16ffd..adb1f03 100644 Binary files a/sound_src/bird0.ogg and b/sound_src/bird0.ogg differ diff --git a/sound_src/bird1.ogg b/sound_src/bird1.ogg index 4597258..077fd78 100644 Binary files a/sound_src/bird1.ogg and b/sound_src/bird1.ogg differ diff --git a/sound_src/bird2.ogg b/sound_src/bird2.ogg index 5872341..3389374 100644 Binary files a/sound_src/bird2.ogg and b/sound_src/bird2.ogg differ diff --git a/sound_src/docks_generic.ogg b/sound_src/docks_generic.ogg index 9bd8111..e223c72 100644 Binary files a/sound_src/docks_generic.ogg and b/sound_src/docks_generic.ogg differ diff --git a/sound_src/field_generic.ogg b/sound_src/field_generic.ogg index 11f6bc0..ed6165d 100644 Binary files a/sound_src/field_generic.ogg and b/sound_src/field_generic.ogg differ diff --git a/sound_src/grass0.ogg b/sound_src/grass0.ogg index 184d599..3e6cc1c 100644 Binary files a/sound_src/grass0.ogg and b/sound_src/grass0.ogg differ diff --git a/sound_src/grass1.ogg b/sound_src/grass1.ogg index 71b22ee..6a89776 100644 Binary files a/sound_src/grass1.ogg and b/sound_src/grass1.ogg differ diff --git a/sound_src/grass2.ogg b/sound_src/grass2.ogg index fedb06e..16382d0 100644 Binary files a/sound_src/grass2.ogg and b/sound_src/grass2.ogg differ diff --git a/sound_src/grass3.ogg b/sound_src/grass3.ogg index b6537fb..000cd38 100644 Binary files a/sound_src/grass3.ogg and b/sound_src/grass3.ogg differ diff --git a/sound_src/grobplab.ogg b/sound_src/grobplab.ogg index eb68d45..32ce5b2 100644 Binary files a/sound_src/grobplab.ogg and b/sound_src/grobplab.ogg differ diff --git a/sound_src/leaves0.ogg b/sound_src/leaves0.ogg index cf0a7d9..3af6c5f 100644 Binary files a/sound_src/leaves0.ogg and b/sound_src/leaves0.ogg differ diff --git a/sound_src/leaves1.ogg b/sound_src/leaves1.ogg index 2acc99e..65fd3d2 100644 Binary files a/sound_src/leaves1.ogg and b/sound_src/leaves1.ogg differ diff --git a/sound_src/leaves2.ogg b/sound_src/leaves2.ogg index 3da688a..34fdab7 100644 Binary files a/sound_src/leaves2.ogg and b/sound_src/leaves2.ogg differ diff --git a/sound_src/leaves3.ogg b/sound_src/leaves3.ogg index 905a02e..b47d1c2 100644 Binary files a/sound_src/leaves3.ogg and b/sound_src/leaves3.ogg differ diff --git a/sound_src/town_generic.ogg b/sound_src/town_generic.ogg index 8a5d3c2..6f72ccc 100644 Binary files a/sound_src/town_generic.ogg and b/sound_src/town_generic.ogg differ diff --git a/sound_src/wave0.ogg b/sound_src/wave0.ogg index 2009b90..54b6c94 100644 Binary files a/sound_src/wave0.ogg and b/sound_src/wave0.ogg differ diff --git a/sound_src/wave1.ogg b/sound_src/wave1.ogg index bca14df..19af0b3 100644 Binary files a/sound_src/wave1.ogg and b/sound_src/wave1.ogg differ diff --git a/sound_src/wave2.ogg b/sound_src/wave2.ogg index c3678b5..dc59237 100644 Binary files a/sound_src/wave2.ogg and b/sound_src/wave2.ogg differ diff --git a/sound_src/wave3.ogg b/sound_src/wave3.ogg index cbde47c..06809f2 100644 Binary files a/sound_src/wave3.ogg and b/sound_src/wave3.ogg differ diff --git a/sound_src/wave4.ogg b/sound_src/wave4.ogg index 7336171..1b14750 100644 Binary files a/sound_src/wave4.ogg and b/sound_src/wave4.ogg differ diff --git a/sound_src/wave5.ogg b/sound_src/wave5.ogg index 08740ea..7bb6d42 100644 Binary files a/sound_src/wave5.ogg and b/sound_src/wave5.ogg differ diff --git a/world_audio.h b/world_audio.h index e6ee331..2de8bf2 100644 --- a/world_audio.h +++ b/world_audio.h @@ -2,14 +2,19 @@ #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; @@ -18,14 +23,15 @@ static double world_audio_last_tick = 0.0; 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", @@ -38,17 +44,18 @@ static void world_audio_init(void) for( int i=0; isys; - 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; isys.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; ipos, 1.0f, 0xffff00ff ); } } +#endif } #endif /* WORLD_AUDIO_H */