#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
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,
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)
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;
}
}
- 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;
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();
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);
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 );
}
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 );
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 */
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,
return;
audio_unlock();
- vg_fatal_exit_loop( "Must load audio clip before playing! \n" );
+ vg_fatal_error( "Must load audio clip before playing! \n" );
}
/*
* -----------------------------------------------------------------------
*/
+#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,
}
}
}
+#endif
audio_unlock();
}