8 static float audio_occlusion_current
= 0.0f
,
9 k_audio_occlusion_rate
= 1.0f
;
11 static int k_audio_debug_soundscape
= 0;
13 audio_clip audio_board
[] =
15 {.path
="sound/skate.ogg", .source_mode
=k_audio_source_compressed
},
16 {.path
="sound/wheel.ogg", .source_mode
=k_audio_source_compressed
},
17 {.path
="sound/slide.ogg", .source_mode
=k_audio_source_compressed
},
18 {.path
="sound/reverb.ogg",.source_mode
=k_audio_source_compressed
}
21 audio_clip audio_ding
=
22 { .path
= "sound/ding.ogg", .source_mode
=k_audio_source_compressed
};
24 audio_clip audio_jumps
[] = {
25 { .path
= "sound/jump0.ogg", .source_mode
=k_audio_source_compressed
, },
26 { .path
= "sound/jump1.ogg", .source_mode
=k_audio_source_compressed
, },
27 { .path
= "sound/jump2.ogg", .source_mode
=k_audio_source_compressed
, },
28 { .path
= "sound/jump3.ogg", .source_mode
=k_audio_source_compressed
, }
31 audio_clip audio_footsteps
[] = {
32 {.path
= "sound/step_concrete0.ogg", .source_mode
=k_audio_source_compressed
,},
33 {.path
= "sound/step_concrete1.ogg", .source_mode
=k_audio_source_compressed
,},
34 {.path
= "sound/step_concrete2.ogg", .source_mode
=k_audio_source_compressed
,},
35 {.path
= "sound/step_concrete3.ogg", .source_mode
=k_audio_source_compressed
,}
38 audio_clip audio_lands
[] = {
39 { .path
= "sound/revert0.ogg", .source_mode
=k_audio_source_compressed
},
40 { .path
= "sound/revert1.ogg", .source_mode
=k_audio_source_compressed
},
41 { .path
= "sound/revert2.ogg", .source_mode
=k_audio_source_compressed
},
42 { .path
= "sound/revert3.ogg", .source_mode
=k_audio_source_compressed
},
43 { .path
= "sound/revert4.ogg", .source_mode
=k_audio_source_compressed
}
46 audio_clip audio_ambience
[] =
48 {.path
="sound/town_generic.ogg",
49 .source_mode
=k_audio_source_compressed
}
52 audio_clip audio_gate_pass
= {
53 .path
= "sound/gate_pass.ogg", .source_mode
=k_audio_source_compressed
56 audio_clip audio_gate_lap
= {
57 .path
= "sound/gate_lap.ogg", .source_mode
=k_audio_source_compressed
60 audio_clip audio_gate_ambient
= {
61 .path
= "sound/gate_ambient.ogg", .source_mode
=k_audio_source_compressed
64 audio_player ambient_player
=
69 audio_player audio_player0
=
74 audio_player audio_player1
=
79 audio_player audio_player2
=
84 audio_player audio_player3
=
89 audio_player audio_player_extra
=
94 audio_player audio_player_gate
=
99 static void audio_init(void)
101 audio_player_init( &audio_player0
);
102 audio_player_init( &audio_player1
);
103 audio_player_init( &audio_player2
);
104 audio_player_init( &audio_player3
);
105 audio_player_init( &audio_player_gate
);
106 audio_player_init( &ambient_player
);
107 audio_player_init( &audio_player_extra
);
109 audio_clip_loadn( audio_board
, vg_list_size(audio_board
) );
110 audio_clip_loadn( audio_ambience
, vg_list_size(audio_ambience
) );
111 audio_clip_loadn( &audio_ding
, 1 );
112 audio_clip_loadn( &audio_gate_pass
, 1 );
113 audio_clip_loadn( &audio_gate_lap
, 1 );
114 audio_clip_loadn( &audio_gate_ambient
, 1 );
115 audio_clip_loadn( audio_jumps
, vg_list_size(audio_jumps
) );
116 audio_clip_loadn( audio_lands
, vg_list_size(audio_lands
) );
117 audio_clip_loadn( audio_footsteps
, vg_list_size(audio_footsteps
) );
120 u32 flags
= AUDIO_FLAG_LOOP
|AUDIO_FLAG_SPACIAL_3D
;
122 audio_player_set_flags( &audio_player0
, flags
);
123 audio_player_set_flags( &audio_player1
, flags
);
124 audio_player_set_flags( &audio_player2
, flags
);
125 audio_player_set_flags( &audio_player_gate
, flags
);
126 audio_player_set_flags( &audio_player3
, AUDIO_FLAG_LOOP
);
127 audio_player_set_flags( &ambient_player
, AUDIO_FLAG_LOOP
);
128 audio_player_set_vol( &ambient_player
, 1.0f
);
129 audio_player_set_vol( &audio_player_gate
, 5.0f
);
130 audio_player_set_vol( &audio_player_extra
, 1.0f
);
132 audio_player_playclip( &audio_player0
, &audio_board
[0] );
133 audio_player_playclip( &audio_player1
, &audio_board
[1] );
134 audio_player_playclip( &audio_player2
, &audio_board
[2] );
135 audio_player_playclip( &audio_player3
, &audio_board
[3] );
136 audio_player_playclip( &ambient_player
, &audio_ambience
[0] );
137 audio_player_playclip( &audio_player_gate
, &audio_gate_ambient
);
141 vg_convar_push( (struct vg_convar
){
142 .name
= "aud_debug_soundscape",
143 .data
= &k_audio_debug_soundscape
,
144 .data_type
= k_convar_dtype_i32
,
145 .opt_i32
= { .min
=0, .max
=1, .clamp
=0 },
149 vg_convar_push( (struct vg_convar
){
150 .name
= "aud_occlusion_rate",
151 .data
= &k_audio_occlusion_rate
,
152 .data_type
= k_convar_dtype_f32
,
153 .opt_f32
= { .clamp
= 0 },
158 static void audio_free(void)
162 static void audio_sample_occlusion( v3f origin
)
165 sample_dist
= 880.0f
;
167 int sample_count
= 8;
172 for( int i
=0; i
<sample_count
; i
++ )
178 contact
.dist
= 15.0f
;
180 if( ray_world( origin
, dir
, &contact
) )
184 vg_line( origin
, contact
.pos
, 0xff0000ff );
185 vg_line_pt3( contact
.pos
, 0.1f
, 0xff0000ff );
188 vg_line( contact
.pos
, last
, 0xffffffff );
189 v3_copy( contact
.pos
, last
);
195 v3_muladds( origin
, dir
, sample_dist
, p1
);
196 vg_line( origin
, p1
, 0xffcccccc );
204 float occlusion
= 1.0f
- (d
* (1.0f
/(sample_dist
*(float)sample_count
))),
205 rate
= ktimestep
* k_audio_occlusion_rate
,
206 target
= powf( occlusion
, 6.0f
);
207 audio_occlusion_current
= vg_lerpf( audio_occlusion_current
, target
, rate
);
210 static void audio_debug_soundscapes(void)
212 if( !k_audio_debug_soundscape
) return;
215 snprintf( buf
, 31, "occlusion: %.5f", audio_occlusion_current
);
217 ui_global_ctx
.cursor
[0] = 450;
218 ui_global_ctx
.cursor
[1] = 10;
219 ui_global_ctx
.cursor
[2] = audio_occlusion_current
* 200.0f
;
220 ui_global_ctx
.cursor
[3] = 20;
222 gui_fill_rect( ui_global_ctx
.cursor
, 0x55cccccc );
223 gui_text( ui_global_ctx
.cursor
, buf
, 1, 0 );