X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_audio.h;h=0290e85fb9777a3151239f8eef38d6896997b01c;hb=fce86711735b15bff37de0f70716808410fcf269;hp=38290ff129f95c4ce00658303ef1f75bb9f7a45d;hpb=44847e656f2bded5d2c4be87eb5a1ae8e598c798;p=vg.git diff --git a/vg_audio.h b/vg_audio.h index 38290ff..0290e85 100644 --- a/vg_audio.h +++ b/vg_audio.h @@ -96,6 +96,7 @@ struct audio_clip{ struct vg_audio_system{ SDL_AudioDeviceID sdl_output_device; + vg_str device_choice; /* buffer is null? use default from OS */ void *audio_pool, *decode_buffer; @@ -192,7 +193,7 @@ struct vg_audio_system{ } channels[ AUDIO_CHANNELS ]; - int debug_ui, debug_ui_3d, debug_dsp; + int debug_ui, debug_ui_3d, debug_dsp, dsp_enabled; v3f internal_listener_pos, internal_listener_ears, @@ -205,7 +206,7 @@ struct vg_audio_system{ float internal_global_volume, external_global_volume; } -static vg_audio = { .external_global_volume = 1.0f }; +static vg_audio = { .external_global_volume = 1.0f, .dsp_enabled = 1 }; #include "vg/vg_audio_dsp.h" @@ -260,30 +261,9 @@ static void audio_unlock(void) audio_lock_checker_store(0); SDL_AtomicUnlock( &vg_audio.sl_sync ); } - static void audio_mixer_callback( void *user, u8 *stream, int frame_count ); -static void vg_audio_init(void) -{ - /* TODO: Move here? */ - 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, - VG_MEMORY_SYSTEM ); - - /* fixed */ - u32 decode_size = AUDIO_DECODE_SIZE * AUDIO_CHANNELS; - vg_audio.decode_buffer = vg_linear_alloc( vg_mem.rtmemory, decode_size ); - - vg_dsp_init(); +static void vg_audio_device_init(void){ SDL_AudioSpec spec_desired, spec_got; spec_desired.callback = audio_mixer_callback; spec_desired.channels = 2; @@ -296,13 +276,20 @@ static void vg_audio_init(void) spec_desired.userdata = NULL; vg_audio.sdl_output_device = - SDL_OpenAudioDevice( NULL, 0, &spec_desired, &spec_got,0 ); + SDL_OpenAudioDevice( vg_audio.device_choice.buffer, 0, + &spec_desired, &spec_got,0 ); + + vg_info( "Start audio device (%u, F32, %u) @%s\n", + spec_desired.freq, + AUDIO_FRAME_SIZE, + vg_audio.device_choice.buffer ); if( vg_audio.sdl_output_device ){ SDL_PauseAudioDevice( vg_audio.sdl_output_device, 0 ); + vg_success( "Unpaused device %d.\n", vg_audio.sdl_output_device ); } else{ - vg_fatal_error( + vg_error( "SDL_OpenAudioDevice failed. Your default audio device must support:\n" " Frequency: 44100 hz\n" " Buffer size: 512\n" @@ -311,6 +298,34 @@ static void vg_audio_init(void) } } +static void vg_audio_register(void){ + 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 ); + vg_console_reg_var( "vg_audio_device", &vg_audio.device_choice, + k_var_dtype_str, VG_VAR_PERSISTENT ); + vg_console_reg_var( "vg_dsp", &vg_audio.dsp_enabled, + k_var_dtype_i32, VG_VAR_PERSISTENT ); +} + +static void vg_audio_init(void){ + /* allocate memory */ + /* 32mb fixed */ + vg_audio.audio_pool = + vg_create_linear_allocator( vg_mem.rtmemory, 1024*1024*32, + VG_MEMORY_SYSTEM ); + + /* fixed */ + u32 decode_size = AUDIO_DECODE_SIZE * AUDIO_CHANNELS; + vg_audio.decode_buffer = vg_linear_alloc( vg_mem.rtmemory, decode_size ); + + vg_dsp_init(); + vg_audio_device_init(); +} + static void vg_audio_free(void) { vg_dsp_free(); @@ -965,12 +980,12 @@ static void audio_channel_mix( audio_channel *ch, float *buffer ) vg_profile_end( &_vg_prof_audio_mix ); } -static void audio_mixer_callback( void *user, u8 *stream, int byte_count ) -{ +static void audio_mixer_callback( void *user, u8 *stream, int byte_count ){ /* * Copy data and move edit flags to commit flags * ------------------------------------------------------------- */ audio_lock(); + int use_dsp = vg_audio.dsp_enabled; v3_copy( vg_audio.external_listener_pos, vg_audio.internal_listener_pos ); v3_copy( vg_audio.external_listener_ears, vg_audio.internal_listener_ears ); @@ -1150,12 +1165,12 @@ static void audio_mixer_callback( void *user, u8 *stream, int byte_count ) } } - vg_profile_begin( &_vg_prof_dsp ); - - for( int i=0; icolour ); ui_text( row, perf, 1, k_ui_align_middle_left, 0 ); +#ifdef VG_3D if( AUDIO_FLAG_SPACIAL_3D ){ v4f wpos; v3_copy( ch->editable_state.spacial_falloff, wpos ); @@ -1451,6 +1474,7 @@ static void audio_debug_ui( m4x4f mtx_pv ) rect_copy( wr, overlap_buffer[ overlap_length ++ ] ); } } +#endif } audio_unlock();