dawhdwahe
authorhgn <hgodden00@gmail.com>
Mon, 3 Mar 2025 14:39:58 +0000 (14:39 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 3 Mar 2025 14:39:58 +0000 (14:39 +0000)
src/audio.c
src/player_skate.c
src/player_skate.h

index 736b213c2a9ce8b0f5a00e3b2005f4732c3f2a81..766425051acac81ec3db6892fd4dc08eafe6510c 100644 (file)
@@ -143,7 +143,8 @@ audio_clip audio_challenge[] = {
 
 struct air_synth_data air_audio_data;
 
-static void audio_air_synth_get_samples( void *_data, f32 *buf, u32 count ){
+static void audio_air_synth_get_samples( void *_data, f32 *buf, u32 count )
+{
    struct air_synth_data *data = _data;
 
    SDL_AtomicLock( &data->sl );
@@ -160,7 +161,8 @@ static void audio_air_synth_get_samples( void *_data, f32 *buf, u32 count ){
 
    dsp_init_biquad_butterworth_lpf( &data->lpf, f );
 
-   for( u32 i=0; i<count; i ++ ){
+   for( u32 i=0; i<count; i ++ )
+   {
       f32 v = (vg_randf64(&vg_dsp.rand) * 2.0f - 1.0f) * vol;
       v = dsp_biquad_process( &data->lpf, v );
 
@@ -171,7 +173,8 @@ static void audio_air_synth_get_samples( void *_data, f32 *buf, u32 count ){
    data->t += (f32)(count)/44100.0f;
 };
 
-static audio_clip air_synth = {
+static audio_clip air_synth = 
+{
    .flags = k_audio_format_gen,
    .size = 0,
    .generative_function = audio_air_synth_get_samples,
@@ -195,23 +198,24 @@ void audio_init(void)
    audio_clip_loadn( audio_water, VG_ARRAY_LEN(audio_water), NULL );
    audio_clip_loadn( audio_grass, VG_ARRAY_LEN(audio_grass), NULL );
    audio_clip_loadn( audio_footsteps, VG_ARRAY_LEN(audio_footsteps), NULL );
-   audio_clip_loadn( audio_footsteps_grass, 
-                     VG_ARRAY_LEN(audio_footsteps_grass), NULL );
-   audio_clip_loadn( audio_footsteps_wood, 
-                     VG_ARRAY_LEN(audio_footsteps_wood), NULL );
+   audio_clip_loadn( audio_footsteps_grass, VG_ARRAY_LEN(audio_footsteps_grass), NULL );
+   audio_clip_loadn( audio_footsteps_wood, VG_ARRAY_LEN(audio_footsteps_wood), NULL );
    audio_clip_loadn( audio_rewind, VG_ARRAY_LEN(audio_rewind), NULL );
    audio_clip_loadn( audio_ui, VG_ARRAY_LEN(audio_ui), NULL );
    audio_clip_loadn( audio_challenge, VG_ARRAY_LEN(audio_challenge), NULL );
 
-   audio_lock();
-   audio_set_lfo_wave( 0, k_lfo_polynomial_bipolar, 80.0f );
-   audio_set_lfo_frequency( 0, 20.0f );
+   vg_audio_lock();
+   audio_lfo *bump_lfo = vg_audio_get_first_idle_lfo();
+   VG_ASSERT( bump_lfo );
 
-   air_audio_data.channel = audio_get_first_idle_channel();
-   if( air_audio_data.channel )
-      audio_channel_init( air_audio_data.channel, &air_synth, 0 );
+   vg_audio_set_lfo_polynomial_bipolar( bump_lfo, 80.0f );
+   vg_audio_set_lfo_frequency( bump_lfo, 20.0f );
 
-   audio_unlock();
+   air_audio_data.channel = vg_audio_get_first_idle_channel();
+   VG_ASSERT( air_audio_data.channel );
+   audio_channel_init( air_audio_data.channel, &air_synth, 0 );
+
+   vg_audio_unlock();
 }
 
 void audio_ambient_sprite_play( v3f co, audio_clip *clip )
index b95defec5234d4e8aefab4c0ca17aeb7af8168aa..c53c00ae119b0de3f85b072c1e6aa4a60f6dae49 100644 (file)
@@ -65,7 +65,7 @@ void player__skate_bind(void){
 }
 
 void player__skate_kill_audio(void){
-   audio_lock();
+   vg_audio_lock();
    if( player_skate.aud_main ){
       player_skate.aud_main = 
          audio_channel_fadeout( player_skate.aud_main, 0.1f );
@@ -78,7 +78,7 @@ void player__skate_kill_audio(void){
       player_skate.aud_slide = 
          audio_channel_fadeout( player_skate.aud_slide, 0.1f );
    }
-   audio_unlock();
+   vg_audio_unlock();
 }
 
 /* 
@@ -778,10 +778,10 @@ static void skate_apply_trick_model(void){
          v3_copy( state->trick_vel, state->trick_residualv );
          v3_zero( state->trick_vel );
 
-         audio_lock();
+         vg_audio_lock();
          audio_oneshot_3d( &audio_flips[vg_randu32(&vg.rand)%4], 
                localplayer.rb.co, 40.0f, 1.0f );
-         audio_unlock();
+         vg_audio_unlock();
       }
       else 
          state->trick_time += vg.time_fixed_delta / interval;
@@ -1285,10 +1285,10 @@ void player__skate_pre_update(void){
    if( state->activity <= k_skate_activity_air_to_grind ){
       if( trick && (state->trick_input_collect < 0.1f) ){
          if( state->trick_time == 0.0f ){
-            audio_lock();
+            vg_audio_lock();
             audio_oneshot_3d( &audio_flips[vg_randu32(&vg.rand)%4], 
                   localplayer.rb.co, 40.0f, 1.0f );
-            audio_unlock();
+            vg_audio_unlock();
          }
 
          if( state->trick_time < 0.1f ){
@@ -1312,9 +1312,10 @@ void player__skate_pre_update(void){
       state->trick_type = k_trick_type_none;
 }
 
-void player__skate_comp_audio( void *_animator ){
+void player__skate_comp_audio( void *_animator )
+{
    struct player_skate_animator *animator = _animator;
-   audio_lock();
+   vg_audio_lock();
 
    f32 air   = ((animator->activity <= k_skate_activity_air_to_grind) ||
                 (animator->activity == k_skate_activity_handplant))? 1.0f: 0.0f,
@@ -1412,9 +1413,8 @@ void player__skate_comp_audio( void *_animator ){
          &audio_board[5]
       };
 
-      if( (player_skate.main_sample_type != sample_type) || 
-          (!player_skate.aud_main) ){
-
+      if( (player_skate.main_sample_type != sample_type) || (!player_skate.aud_main) )
+      {
          player_skate.aud_main = 
             audio_channel_crossfade( player_skate.aud_main, 
                                      relevant_samples[sample_type],
@@ -1424,11 +1424,22 @@ void player__skate_comp_audio( void *_animator ){
       }
    }
 
-   if( player_skate.aud_main ){
-      player_skate.aud_main->colour = 0x00103efe;
-      audio_channel_set_spacial( player_skate.aud_main, 
-                                 animator->root_co, 40.0f );
-      //audio_channel_slope_volume( player_skate.aud_main, 0.05f, vol_main );
+   if( player_skate.lfo_bumps == NULL )
+   {
+      audio_lfo *lfo = vg_audio_get_first_idle_lfo();
+      if( lfo )
+      {
+         player_skate.lfo_bumps = lfo;
+         vg_audio_set_lfo_polynomial_bipolar( lfo, 80.0f );
+         vg_audio_set_lfo_frequency( lfo, 20.0f );
+         vg_audio_start_lfo( lfo );
+      }
+   }
+
+   if( player_skate.aud_main )
+   {
+      player_skate.aud_main->ui_colour = 0x00103efe;
+      vg_audio_channel_set_spacial_falloff( player_skate.aud_main, animator->root_co, 40.0f );
       audio_channel_edit_volume( player_skate.aud_main, vol_main, 1 );
       audio_channel_sidechain_lfo( player_skate.aud_main, 0, sidechain_amt );
 
@@ -1453,7 +1464,7 @@ void player__skate_comp_audio( void *_animator ){
       audio_channel_edit_volume( player_skate.aud_air, vol_air, 1 );
    }
 
-   audio_unlock();
+   vg_audio_unlock();
 }
 
 void player__skate_post_update(void){
@@ -3636,7 +3647,7 @@ void player__skate_animator_exchange( bitpack_ctx *ctx, void *data )
 
 void player__skate_sfx_oneshot( u8 id, v3f pos, f32 volume )
 {
-   audio_lock();
+   vg_audio_lock();
 
    if( id == k_player_skate_soundeffect_jump ){
       audio_oneshot_3d( &audio_jumps[vg_randu32(&vg.rand)%2], pos, 40.0f, volume );
@@ -3657,5 +3668,5 @@ void player__skate_sfx_oneshot( u8 id, v3f pos, f32 volume )
       audio_oneshot_3d( &audio_board[8], pos, 40.0f, volume );
    }
 
-   audio_unlock();
+   vg_audio_unlock();
 }
index 338658ce8d1f6296410850eada168f2e49089889..1e4899e777b92d176f20f930b36c3de84c5ce5d1 100644 (file)
@@ -162,6 +162,7 @@ struct player_skate{
    v3f truckv0[2];
 
    audio_channel *aud_main, *aud_slide, *aud_air;
+   audio_lfo *lfo_bumps;
    enum mdl_surface_prop surface, audio_surface;
 
    int wheel_contacts[2];