maths api changes and random
[vg.git] / vg_audio.h
index 3ba7093030c57547c25be468f2bf5097fa479f13..120622cc658307bcb15239b88b08f9c8b733d584 100644 (file)
 #define AUDIO_FLAG_NO_DOPPLER 0x2
 #define AUDIO_FLAG_SPACIAL_3D 0x4
 #define AUDIO_FLAG_AUTO_START 0x8
-
-/* Vorbis will ALWAYS use the maximum amount of channels it can */
-//#define AUDIO_FLAG_MONO       0x100 NOTE: This is the default, so its not used
-//#define AUDIO_FLAG_STEREO     0x200
-//#define AUDIO_FLAG_VORBIS     0x400
-//#define AUDIO_FLAG_BIRD_SYNTH 0x800
-
 #define AUDIO_FLAG_FORMAT     0x1E00
 
 enum audio_format
@@ -266,32 +259,14 @@ VG_STATIC void audio_mixer_callback( void *user, u8 *stream, int frame_count );
 VG_STATIC void vg_audio_init(void)
 {
    /* TODO: Move here? */
-   vg_var_push( (struct vg_var){
-      .name = "debug_audio",
-      .data = &vg_audio.debug_ui,
-      .data_type = k_var_dtype_i32,
-      .opt_i32 = { .min=0, .max=1, .clamp=1 },
-      .persistent = 1
-   });
-
-   vg_var_push( (struct vg_var){
-      .name = "debug_dsp",
-      .data = &vg_audio.debug_dsp,
-      .data_type = k_var_dtype_i32,
-      .opt_i32 = { .min=0, .max=1, .clamp=1 },
-      .persistent = 1
-   });
-
-   vg_var_push( (struct vg_var){
-      .name = "volume",
-      .data = &vg_audio.external_global_volume,
-      .data_type = k_var_dtype_f32,
-      .opt_f32 = { .min=0.0f, .max=2.0f, .clamp=1 },
-      .persistent = 1
-   });
+   vg_console_reg_var( "debug_audio", &vg_audio.debug_ui, 
+                        k_var_dtype_i32, VG_VAR_CHEAT );
+   vg_console_reg_var( "debug_dsp", &vg_audio.debug_dsp,
+                        k_var_dtype_i32, VG_VAR_CHEAT );
+   vg_console_reg_var( "volume", &vg_audio.external_global_volume,
+                        k_var_dtype_f32, VG_VAR_PERSISTENT );
 
    /* allocate memory */
-
    /* 32mb fixed */
    vg_audio.audio_pool = 
       vg_create_linear_allocator( vg_mem.rtmemory, 1024*1024*32, 
@@ -321,15 +296,13 @@ VG_STATIC void vg_audio_init(void)
       SDL_PauseAudioDevice( vg_audio.sdl_output_device, 0 );
    }
    else{
-      vg_fatal_exit_loop
+      vg_fatal_error
          "SDL_OpenAudioDevice failed. Your default audio device must support:\n"
          "  Frequency: 44100 hz\n"
          "  Buffer size: 512\n"
          "  Channels: 2\n"
          "  Format: s16 or f32\n" );
    }
-
-   vg_success( "Ready\n" );
 }
 
 VG_STATIC void vg_audio_free(void)
@@ -361,7 +334,7 @@ static void audio_channel_init( audio_channel *ch, audio_clip *clip, u32 flags )
    if( (ch->source->flags & AUDIO_FLAG_FORMAT) == k_audio_format_bird )
       strcpy( ch->name, "[array]" );
    else
-      strncpy( ch->name, clip->path, 31 );
+      vg_strncpy( clip->path, ch->name, 32, k_strncpy_always_add_null );
 
    ch->allocated = 1;
 
@@ -865,10 +838,10 @@ static void audio_channel_mix( audio_channel *ch, float *buffer )
          }
       }
 
-      if( !vg_validf( framevol_l ) ) vg_fatal_exit_loop( "NaN left channel" );
-      if( !vg_validf( framevol_r ) ) vg_fatal_exit_loop( "NaN right channel" );
+      if( !vg_validf( framevol_l ) ) vg_fatal_error( "NaN left channel" );
+      if( !vg_validf( framevol_r ) ) vg_fatal_error( "NaN right channel" );
       if( !vg_validf( frame_samplerate ) ) 
-         vg_fatal_exit_loop( "NaN sample rate" );
+         vg_fatal_error( "NaN sample rate" );
    }
 
    u32 buffer_length = AUDIO_MIX_FRAME_SIZE;
@@ -1171,7 +1144,7 @@ VG_STATIC void audio_clip_load( audio_clip *clip, void *lin_alloc )
 
    if( format == k_audio_format_vorbis ){
       if( !clip->path ){
-         vg_fatal_exit_loop( "No path specified, embeded vorbis unsupported" );
+         vg_fatal_error( "No path specified, embeded vorbis unsupported" );
       }
 
       audio_lock();
@@ -1179,17 +1152,17 @@ VG_STATIC void audio_clip_load( audio_clip *clip, void *lin_alloc )
       audio_unlock();
 
       if( !clip->data )
-         vg_fatal_exit_loop( "Audio failed to load" );
+         vg_fatal_error( "Audio failed to load" );
 
       float mb = (float)(clip->size) / (1024.0f*1024.0f);
       vg_info( "Loaded audio clip '%s' (%.1fmb)\n", clip->path, mb );
    }
    else if( format == k_audio_format_stereo ){
-      vg_fatal_exit_loop( "Unsupported format (Stereo uncompressed)" );
+      vg_fatal_error( "Unsupported format (Stereo uncompressed)" );
    }
    else if( format == k_audio_format_bird ){
       if( !clip->data ){
-         vg_fatal_exit_loop( "No data, external birdsynth unsupported" );
+         vg_fatal_error( "No data, external birdsynth unsupported" );
       }
 
       u32 total_size  = clip->size + sizeof(struct synth_bird);
@@ -1197,7 +1170,7 @@ VG_STATIC void audio_clip_load( audio_clip *clip, void *lin_alloc )
           total_size  = vg_align8( total_size );
 
       if( total_size > AUDIO_DECODE_SIZE )
-         vg_fatal_exit_loop( "Bird coding too long\n" );
+         vg_fatal_error( "Bird coding too long\n" );
 
       struct synth_bird *bird = vg_linear_alloc( lin_alloc, total_size );
       memcpy( &bird->settings, clip->data, clip->size );
@@ -1209,7 +1182,7 @@ VG_STATIC void audio_clip_load( audio_clip *clip, void *lin_alloc )
    }
    else{
       if( !clip->path ){
-         vg_fatal_exit_loop( "No path specified, embeded mono unsupported" );
+         vg_fatal_error( "No path specified, embeded mono unsupported" );
       }
 
       vg_linear_clear( vg_mem.scratch );
@@ -1229,7 +1202,7 @@ VG_STATIC void audio_clip_load( audio_clip *clip, void *lin_alloc )
       if( !decoder ){
          vg_error( "stb_vorbis_open_memory failed on '%s' (%d)\n", 
                      clip->path, err );
-         vg_fatal_exit_loop( "Vorbis decode error" );
+         vg_fatal_error( "Vorbis decode error" );
       }
 
       /* only mono is supported in uncompressed */
@@ -1245,7 +1218,7 @@ VG_STATIC void audio_clip_load( audio_clip *clip, void *lin_alloc )
                               decoder, clip->data, length_samples );
 
       if( read_samples != length_samples )
-         vg_fatal_exit_loop( "Decode error" );
+         vg_fatal_error( "Decode error" );
 
       float mb = (float)(data_size) / (1024.0f*1024.0f);
       vg_info( "Loaded audio clip '%s' (%.1fmb) %u samples\n", clip->path, mb,
@@ -1265,7 +1238,7 @@ VG_STATIC void audio_require_clip_loaded( audio_clip *clip )
       return;
 
    audio_unlock();
-   vg_fatal_exit_loop( "Must load audio clip before playing! \n" );
+   vg_fatal_error( "Must load audio clip before playing! \n" );
 }
 
 /* 
@@ -1289,6 +1262,7 @@ VG_STATIC void audio_debug_ui( m4x4f mtx_pv )
     * -----------------------------------------------------------------------
     */
 
+#if 0
    float budget = ((double)vg_audio.samples_last / 44100.0) * 1000.0;
    vg_profile_drawn( (struct vg_profile *[]){ &vg_prof_audio_decode,
                                               &vg_prof_audio_mix,
@@ -1431,6 +1405,7 @@ VG_STATIC void audio_debug_ui( m4x4f mtx_pv )
          }
       }
        }
+#endif
 
    audio_unlock();
 }