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/snap0.ogg", .source_mode
=k_audio_source_compressed
, },
26 { .path
= "sound/snap1.ogg", .source_mode
=k_audio_source_compressed
, },
27 { .path
= "sound/snap2.ogg", .source_mode
=k_audio_source_compressed
, },
28 { .path
= "sound/snap3.ogg", .source_mode
=k_audio_source_compressed
, }
31 audio_clip audio_lands
[] = {
32 { .path
= "sound/revert0.ogg", .source_mode
=k_audio_source_compressed
},
33 { .path
= "sound/revert1.ogg", .source_mode
=k_audio_source_compressed
},
34 { .path
= "sound/revert2.ogg", .source_mode
=k_audio_source_compressed
},
35 { .path
= "sound/revert3.ogg", .source_mode
=k_audio_source_compressed
},
36 { .path
= "sound/revert4.ogg", .source_mode
=k_audio_source_compressed
}
39 audio_clip audio_ambience
[] =
41 {.path
="sound/town_generic.ogg",
42 .source_mode
=k_audio_source_compressed
}
45 audio_clip audio_gate_pass
= {
46 .path
= "sound/gate_pass.ogg", .source_mode
=k_audio_source_compressed
49 audio_clip audio_gate_lap
= {
50 .path
= "sound/gate_lap.ogg", .source_mode
=k_audio_source_compressed
53 audio_clip audio_gate_ambient
= {
54 .path
= "sound/gate_ambient.ogg", .source_mode
=k_audio_source_compressed
57 audio_player ambient_player
=
62 audio_player audio_player0
=
67 audio_player audio_player1
=
72 audio_player audio_player2
=
77 audio_player audio_player3
=
82 audio_player audio_player_extra
=
87 audio_player audio_player_gate
=
92 static void audio_init(void)
94 audio_player_init( &audio_player0
);
95 audio_player_init( &audio_player1
);
96 audio_player_init( &audio_player2
);
97 audio_player_init( &audio_player3
);
98 audio_player_init( &audio_player_gate
);
99 audio_player_init( &ambient_player
);
100 audio_player_init( &audio_player_extra
);
102 audio_clip_loadn( audio_board
, vg_list_size(audio_board
) );
103 audio_clip_loadn( audio_ambience
, vg_list_size(audio_ambience
) );
104 audio_clip_loadn( &audio_ding
, 1 );
105 audio_clip_loadn( &audio_gate_pass
, 1 );
106 audio_clip_loadn( &audio_gate_lap
, 1 );
107 audio_clip_loadn( &audio_gate_ambient
, 1 );
108 audio_clip_loadn( audio_jumps
, vg_list_size(audio_jumps
) );
109 audio_clip_loadn( audio_lands
, vg_list_size(audio_lands
) );
112 u32 flags
= AUDIO_FLAG_LOOP
|AUDIO_FLAG_SPACIAL_3D
;
114 audio_player_set_flags( &audio_player0
, flags
);
115 audio_player_set_flags( &audio_player1
, flags
);
116 audio_player_set_flags( &audio_player2
, flags
);
117 audio_player_set_flags( &audio_player_gate
, flags
);
118 audio_player_set_flags( &audio_player3
, AUDIO_FLAG_LOOP
);
119 audio_player_set_flags( &ambient_player
, AUDIO_FLAG_LOOP
);
120 audio_player_set_vol( &ambient_player
, 1.0f
);
121 audio_player_set_vol( &audio_player_gate
, 5.0f
);
122 audio_player_set_vol( &audio_player_extra
, 1.0f
);
124 audio_player_playclip( &audio_player0
, &audio_board
[0] );
125 audio_player_playclip( &audio_player1
, &audio_board
[1] );
126 audio_player_playclip( &audio_player2
, &audio_board
[2] );
127 audio_player_playclip( &audio_player3
, &audio_board
[3] );
128 audio_player_playclip( &ambient_player
, &audio_ambience
[0] );
129 audio_player_playclip( &audio_player_gate
, &audio_gate_ambient
);
133 vg_convar_push( (struct vg_convar
){
134 .name
= "aud_debug_soundscape",
135 .data
= &k_audio_debug_soundscape
,
136 .data_type
= k_convar_dtype_i32
,
137 .opt_i32
= { .min
=0, .max
=1, .clamp
=0 },
141 vg_convar_push( (struct vg_convar
){
142 .name
= "aud_occlusion_rate",
143 .data
= &k_audio_occlusion_rate
,
144 .data_type
= k_convar_dtype_f32
,
145 .opt_f32
= { .clamp
= 0 },
150 static void audio_free(void)
154 static void audio_sample_occlusion( v3f origin
)
157 sample_dist
= 880.0f
;
159 int sample_count
= 8;
164 for( int i
=0; i
<sample_count
; i
++ )
170 contact
.dist
= 15.0f
;
172 if( ray_world( origin
, dir
, &contact
) )
176 vg_line( origin
, contact
.pos
, 0xff0000ff );
177 vg_line_pt3( contact
.pos
, 0.1f
, 0xff0000ff );
180 vg_line( contact
.pos
, last
, 0xffffffff );
181 v3_copy( contact
.pos
, last
);
187 v3_muladds( origin
, dir
, sample_dist
, p1
);
188 vg_line( origin
, p1
, 0xffcccccc );
196 float occlusion
= 1.0f
- (d
* (1.0f
/(sample_dist
*(float)sample_count
))),
197 rate
= ktimestep
* k_audio_occlusion_rate
,
198 target
= powf( occlusion
, 6.0f
);
199 audio_occlusion_current
= vg_lerpf( audio_occlusion_current
, target
, rate
);
202 static void audio_debug_soundscapes(void)
204 if( !k_audio_debug_soundscape
) return;
207 snprintf( buf
, 31, "occlusion: %.5f", audio_occlusion_current
);
209 ui_global_ctx
.cursor
[0] = 450;
210 ui_global_ctx
.cursor
[1] = 10;
211 ui_global_ctx
.cursor
[2] = audio_occlusion_current
* 200.0f
;
212 ui_global_ctx
.cursor
[3] = 20;
214 gui_fill_rect( ui_global_ctx
.cursor
, 0x55cccccc );
215 gui_text( ui_global_ctx
.cursor
, buf
, 1, 0 );