X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=audio.h;h=43adf052e289077ef860e1ef8ba82f1452b3d1b8;hb=6d98c1e42c1617a8a426f9f0c0df99b75725b486;hp=1bf710fb3255789fc1e0d9c6f342d6ab48417a93;hpb=a98ce96041b248580c0447bf87d4c6106483cade;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/audio.h b/audio.h index 1bf710f..43adf05 100644 --- a/audio.h +++ b/audio.h @@ -9,76 +9,93 @@ #include "world.h" -static float audio_occlusion_current = 0.0f, +VG_STATIC float audio_occlusion_current = 0.0f, k_audio_occlusion_rate = 1.0f; -static int k_audio_debug_soundscape = 0; +VG_STATIC int k_audio_debug_soundscape = 0; audio_clip audio_board[] = { - {.path="sound/skate.ogg", .source_mode=k_audio_source_compressed }, - {.path="sound/wheel.ogg", .source_mode=k_audio_source_compressed }, - {.path="sound/slide.ogg", .source_mode=k_audio_source_compressed }, - {.path="sound/reverb.ogg",.source_mode=k_audio_source_compressed } + { .path="sound/skate.ogg" }, + { .path="sound/wheel.ogg" }, + { .path="sound/slide.ogg" }, + { .path="sound/reverb.ogg" } }; audio_clip audio_splash = -{ .path = "sound/splash.ogg", .source_mode=k_audio_source_compressed }; +{ .path = "sound/splash.ogg" }; audio_clip audio_jumps[] = { - { .path = "sound/jump0.ogg", .source_mode=k_audio_source_compressed, }, - { .path = "sound/jump1.ogg", .source_mode=k_audio_source_compressed, }, - { .path = "sound/jump2.ogg", .source_mode=k_audio_source_compressed, }, - { .path = "sound/jump3.ogg", .source_mode=k_audio_source_compressed, } + { .path = "sound/jump0.ogg" }, + { .path = "sound/jump1.ogg" }, }; audio_clip audio_footsteps[] = { - {.path = "sound/step_concrete0.ogg", .source_mode=k_audio_source_compressed,}, - {.path = "sound/step_concrete1.ogg", .source_mode=k_audio_source_compressed,}, - {.path = "sound/step_concrete2.ogg", .source_mode=k_audio_source_compressed,}, - {.path = "sound/step_concrete3.ogg", .source_mode=k_audio_source_compressed,} + {.path = "sound/step_concrete0.ogg" }, + {.path = "sound/step_concrete1.ogg" }, + {.path = "sound/step_concrete2.ogg" }, + {.path = "sound/step_concrete3.ogg" } +}; + +audio_clip audio_footsteps_grass[] = { + {.path = "sound/step_bush0.ogg" }, + {.path = "sound/step_bush1.ogg" }, + {.path = "sound/step_bush2.ogg" }, + {.path = "sound/step_bush3.ogg" }, + {.path = "sound/step_bush4.ogg" }, + {.path = "sound/step_bush5.ogg" } +}; + +audio_clip audio_footsteps_wood[] = { + {.path = "sound/step_wood0.ogg" }, + {.path = "sound/step_wood1.ogg" }, + {.path = "sound/step_wood2.ogg" }, + {.path = "sound/step_wood3.ogg" }, + {.path = "sound/step_wood4.ogg" }, + {.path = "sound/step_wood5.ogg" } }; audio_clip audio_lands[] = { - { .path = "sound/revert0.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/revert1.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/revert2.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/revert3.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/revert4.ogg", .source_mode=k_audio_source_compressed } + { .path = "sound/land0.ogg" }, + { .path = "sound/land1.ogg" }, + { .path = "sound/land2.ogg" }, + { .path = "sound/landsk0.ogg" }, + { .path = "sound/landsk1.ogg" }, + { .path = "sound/onto.ogg" }, + { .path = "sound/outo.ogg" }, }; audio_clip audio_water[] = { - { .path = "sound/wave0.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave1.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave2.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave3.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave4.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave5.ogg", .source_mode=k_audio_source_compressed } + { .path = "sound/wave0.ogg" }, + { .path = "sound/wave1.ogg" }, + { .path = "sound/wave2.ogg" }, + { .path = "sound/wave3.ogg" }, + { .path = "sound/wave4.ogg" }, + { .path = "sound/wave5.ogg" } }; audio_clip audio_grass[] = { - { .path = "sound/grass0.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/grass1.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/grass2.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/grass3.ogg", .source_mode=k_audio_source_compressed }, + { .path = "sound/grass0.ogg" }, + { .path = "sound/grass1.ogg" }, + { .path = "sound/grass2.ogg" }, + { .path = "sound/grass3.ogg" }, }; audio_clip audio_ambience[] = { - {.path="sound/town_generic.ogg", - .source_mode=k_audio_source_compressed } + { .path="sound/town_generic.ogg" } }; audio_clip audio_gate_pass = { - .path = "sound/gate_pass.ogg", .source_mode=k_audio_source_compressed + .path = "sound/gate_pass.ogg" }; audio_clip audio_gate_lap = { - .path = "sound/gate_lap.ogg", .source_mode=k_audio_source_compressed + .path = "sound/gate_lap.ogg" }; audio_clip audio_gate_ambient = { -.path = "sound/gate_ambient.ogg", .source_mode=k_audio_source_compressed +.path = "sound/gate_ambient.ogg" }; audio_player ambient_player = @@ -86,6 +103,24 @@ audio_player ambient_player = .name = "Ambience" }; +audio_player audio_rewind_player = +{ + .name = "Rewind" +}; + +audio_clip audio_rewind[] = { +{ .path = "sound/rewind_start.ogg" }, +{ .path = "sound/rewind_end_1.5.ogg" }, +{ .path = "sound/rewind_end_2.5.ogg" }, +{ .path = "sound/rewind_end_6.5.ogg" }, +{ .path = "sound/rewind_clack.ogg" }, +}; + +audio_clip audio_ui[] = { + { .path = "sound/ui_click.ogg" }, + { .path = "sound/ui_ding.ogg" }, +}; + audio_player ambient_sprites[4] = { { .name = "Ambient Sprites 0" }, @@ -124,7 +159,7 @@ audio_player audio_player_gate = .name = "Gate" }; -static void audio_init(void) +VG_STATIC void audio_init(void) { audio_player_init( &audio_player0 ); audio_player_init( &audio_player1 ); @@ -137,18 +172,25 @@ static void audio_init(void) audio_player_init( &ambient_sprites[2] ); audio_player_init( &ambient_sprites[3] ); audio_player_init( &audio_player_extra ); - - audio_clip_loadn( audio_board, vg_list_size(audio_board) ); - audio_clip_loadn( audio_ambience, vg_list_size(audio_ambience) ); - audio_clip_loadn( &audio_splash, 1 ); - audio_clip_loadn( &audio_gate_pass, 1 ); - audio_clip_loadn( &audio_gate_lap, 1 ); - audio_clip_loadn( &audio_gate_ambient, 1 ); - audio_clip_loadn( audio_jumps, vg_list_size(audio_jumps) ); - audio_clip_loadn( audio_lands, vg_list_size(audio_lands) ); - audio_clip_loadn( audio_water, vg_list_size(audio_water) ); - audio_clip_loadn( audio_grass, vg_list_size(audio_grass) ); - audio_clip_loadn( audio_footsteps, vg_list_size(audio_footsteps) ); + audio_player_init( &audio_rewind_player ); + + audio_clip_loadn( audio_board, vg_list_size(audio_board), NULL ); + audio_clip_loadn( audio_ambience, vg_list_size(audio_ambience), NULL ); + audio_clip_loadn( &audio_splash, 1, NULL ); + audio_clip_loadn( &audio_gate_pass, 1, NULL ); + audio_clip_loadn( &audio_gate_lap, 1, NULL ); + audio_clip_loadn( &audio_gate_ambient, 1, NULL ); + audio_clip_loadn( audio_jumps, vg_list_size(audio_jumps), NULL ); + audio_clip_loadn( audio_lands, vg_list_size(audio_lands), NULL ); + audio_clip_loadn( audio_water, vg_list_size(audio_water), NULL ); + audio_clip_loadn( audio_grass, vg_list_size(audio_grass), NULL ); + audio_clip_loadn( audio_footsteps, vg_list_size(audio_footsteps), NULL ); + audio_clip_loadn( audio_footsteps_grass, + vg_list_size(audio_footsteps_grass), NULL ); + audio_clip_loadn( audio_footsteps_wood, + vg_list_size(audio_footsteps_wood), NULL ); + audio_clip_loadn( audio_rewind, vg_list_size(audio_rewind), NULL ); + audio_clip_loadn( audio_ui, vg_list_size(audio_ui), NULL ); audio_lock(); u32 flags = AUDIO_FLAG_LOOP|AUDIO_FLAG_SPACIAL_3D; @@ -166,6 +208,8 @@ static void audio_init(void) audio_player_set_vol( &ambient_player, 1.0f ); audio_player_set_vol( &audio_player_gate, 0.0f ); audio_player_set_vol( &audio_player_extra, 1.0f ); + audio_player_set_vol( &audio_rewind_player, 0.2f ); + audio_player_set_flags( &audio_rewind_player, 0x00 ); audio_player_playclip( &audio_player0, &audio_board[0] ); audio_player_playclip( &audio_player1, &audio_board[1] ); @@ -193,13 +237,13 @@ static void audio_init(void) }); } -static void audio_free(void*_) +VG_STATIC void audio_free(void*_) { /* TODO! */ vg_warn( "UNIMPLEMENTED: audio_free()\n" ); } -static void audio_sample_occlusion( v3f origin ) +VG_STATIC void audio_sample_occlusion( v3f origin ) { float d = 0.0f, sample_dist = 880.0f; @@ -222,11 +266,14 @@ static void audio_sample_occlusion( v3f origin ) { d += contact.dist; +#if 0 vg_line( origin, contact.pos, 0xff0000ff ); vg_line_pt3( contact.pos, 0.1f, 0xff0000ff ); if( lv ) vg_line( contact.pos, last, 0xffffffff ); +#endif + v3_copy( contact.pos, last ); lv = 1; } @@ -234,7 +281,10 @@ static void audio_sample_occlusion( v3f origin ) { v3f p1; v3_muladds( origin, dir, sample_dist, p1 ); + +#if 0 vg_line( origin, p1, 0xffcccccc ); +#endif d += sample_dist; lv = 0; @@ -258,8 +308,8 @@ enum audio_sprite_type /* * Trace out a random point, near the player to try and determine water areas */ -static enum audio_sprite_type audio_sample_sprite_random( v3f origin, - v3f output ) +VG_STATIC enum audio_sprite_type audio_sample_sprite_random( v3f origin, + v3f output ) { v3f chance = { (vg_randf()-0.5f) * 30.0f, 8.0f, @@ -274,38 +324,47 @@ static enum audio_sprite_type audio_sample_sprite_random( v3f origin, if( ray_world( pos, (v3f){0.0f,-1.0f,0.0f}, &contact ) ) { - if( ray_hit_is_ramp( &contact ) ) + struct world_material *mat = ray_hit_material( &contact ); + + if( mat->info.surface_prop == k_surface_prop_grass) + { + v3_copy( contact.pos, output ); + return k_audio_sprite_type_grass; + } + else { +#if 0 vg_line( pos, contact.pos, 0xff0000ff ); vg_line_pt3( contact.pos, 0.3f, 0xff0000ff ); +#endif return k_audio_sprite_type_none; } - - v3_copy( contact.pos, output ); - return k_audio_sprite_type_grass; } output[0] = pos[0]; output[1] = 0.0f; output[2] = pos[2]; - - return k_audio_sprite_type_water; + + if( world.water.enabled ) + return k_audio_sprite_type_water; + else + return k_audio_sprite_type_none; } -static void audio_debug_soundscapes(void) +VG_STATIC void audio_debug_soundscapes(void) { if( !k_audio_debug_soundscape ) return; char buf[64]; snprintf( buf, 31, "occlusion: %.5f", audio_occlusion_current ); - 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; + vg_uictx.cursor[0] = 450; + vg_uictx.cursor[1] = 10; + vg_uictx.cursor[2] = audio_occlusion_current * 200.0f; + vg_uictx.cursor[3] = 20; - gui_fill_rect( ui_global_ctx.cursor, 0x55cccccc ); - gui_text( ui_global_ctx.cursor, buf, 1, 0 ); + ui_fill_rect( vg_uictx.cursor, 0x55cccccc ); + ui_text( vg_uictx.cursor, buf, 1, 0 ); } #endif /* AUDIO_H */