X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=audio.h;h=212ed9f19d8231a13e004122d5c5b7a39d8ae994;hb=5f4eb3866525724188461589485ac1aa50d08870;hp=498acc35f616680b65d5950522bf99f37f543ccd;hpb=cb16ccb05a796178c879ea8d5091663d215a5217;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/audio.h b/audio.h index 498acc3..212ed9f 100644 --- a/audio.h +++ b/audio.h @@ -1,15 +1,23 @@ +#include "common.h" +static void audio_spacialize( sfx_system *sys, + v3f pos, v3f camera, v3f ears, float vol ); + #ifndef AUDIO_H #define AUDIO_H -#include "common.h" +#include "world.h" -sfx_vol_control audio_vol_all = { .val = 1.0f, .name = "All" }; +static float audio_occlusion_current = 0.0f, + k_audio_occlusion_rate = 1.0f; + +static int k_audio_debug_soundscape = 0; sfx_set audio_board = { .sources = "sound/skate.ogg\0" "sound/wheel.ogg\0" "sound/slide.ogg\0" + "sound/reverb.ogg\0" }; sfx_system audio_player0 = @@ -39,12 +47,38 @@ sfx_system audio_player2 = .flags = SFX_FLAG_REPEAT | SFX_FLAG_PERSISTENT }; +sfx_system 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 ); + + vg_convar_push( (struct vg_convar){ + .name = "aud_debug_soundscape", + .data = &k_audio_debug_soundscape, + .data_type = k_convar_dtype_i32, + .opt_i32 = { .min=0, .max=1, .clamp=0 }, + .persistent = 1 + }); + + vg_convar_push( (struct vg_convar){ + .name = "aud_occlusion_rate", + .data = &k_audio_occlusion_rate, + .data_type = k_convar_dtype_f32, + .opt_f32 = { .clamp = 0 }, + .persistent = 1 + }); } static void audio_free(void) @@ -52,4 +86,73 @@ 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 ) +{ + float d = 0.0f, + sample_dist = 880.0f; + + int sample_count = 8; + + for( int i=0; i