8 static float audio_occlusion_current
= 0.0f
,
9 k_audio_occlusion_rate
= 1.0f
;
11 static int k_audio_debug_soundscape
= 0;
14 audio_clip audio_board
[] =
16 {.path
="sound/skate.ogg", .source_mode
=k_audio_source_mono_compressed
},
17 {.path
="sound/wheel.ogg", .source_mode
=k_audio_source_mono_compressed
},
18 {.path
="sound/slide.ogg", .source_mode
=k_audio_source_mono_compressed
},
19 {.path
="sound/reverb.ogg",.source_mode
=k_audio_source_mono_compressed
}
22 audio_player audio_player0
=
27 audio_player audio_player1
=
32 audio_player audio_player2
=
37 audio_player audio_player3
=
42 static void audio_init(void)
44 audio_clip_loadn( audio_board
, vg_list_size(audio_board
) );
47 u32 flags
= AUDIO_FLAG_LOOP
|AUDIO_FLAG_SPACIAL_3D
;
49 audio_player_set_flags( &audio_player0
, flags
);
50 audio_player_set_flags( &audio_player1
, flags
);
51 audio_player_set_flags( &audio_player2
, flags
);
52 audio_player_set_flags( &audio_player3
, AUDIO_FLAG_LOOP
);
54 audio_player_playclip( &audio_player0
, &audio_board
[0] );
55 audio_player_playclip( &audio_player1
, &audio_board
[1] );
56 audio_player_playclip( &audio_player2
, &audio_board
[2] );
57 audio_player_playclip( &audio_player3
, &audio_board
[3] );
61 vg_convar_push( (struct vg_convar
){
62 .name
= "aud_debug_soundscape",
63 .data
= &k_audio_debug_soundscape
,
64 .data_type
= k_convar_dtype_i32
,
65 .opt_i32
= { .min
=0, .max
=1, .clamp
=0 },
69 vg_convar_push( (struct vg_convar
){
70 .name
= "aud_occlusion_rate",
71 .data
= &k_audio_occlusion_rate
,
72 .data_type
= k_convar_dtype_f32
,
73 .opt_f32
= { .clamp
= 0 },
78 static void audio_free(void)
82 static void audio_sample_occlusion( v3f origin
)
89 for( int i
=0; i
<sample_count
; i
++ )
97 if( ray_world( origin
, dir
, &contact
) )
101 vg_line( origin
, contact
.pos
, 0xff0000ff );
102 vg_line_pt3( contact
.pos
, 0.1f
, 0xff0000ff );
107 v3_muladds( origin
, dir
, sample_dist
, p1
);
108 vg_line( origin
, p1
, 0xffcccccc );
114 float occlusion
= 1.0f
- (d
* (1.0f
/(sample_dist
*(float)sample_count
))),
115 rate
= ktimestep
* k_audio_occlusion_rate
,
116 target
= powf( occlusion
, 6.0f
);
117 audio_occlusion_current
= vg_lerpf( audio_occlusion_current
, target
, rate
);
120 static void audio_debug_soundscapes(void)
122 if( !k_audio_debug_soundscape
) return;
125 snprintf( buf
, 31, "occlusion: %.5f", audio_occlusion_current
);
127 ui_global_ctx
.cursor
[0] = 450;
128 ui_global_ctx
.cursor
[1] = 10;
129 ui_global_ctx
.cursor
[2] = audio_occlusion_current
* 200.0f
;
130 ui_global_ctx
.cursor
[3] = 20;
132 gui_fill_rect( ui_global_ctx
.cursor
, 0x55cccccc );
133 gui_text( ui_global_ctx
.cursor
, buf
, 1, 0 );