twn_audio.c: a lot of fixes, optional TWN_FEATURE_PUSH_AUDIO for converging game ticks and audio, proper .wav handling with resample
This commit is contained in:
@ -232,6 +232,12 @@ static void main_loop(void) {
|
||||
if (ctx.window_size_has_changed)
|
||||
update_viewport();
|
||||
game_object_tick();
|
||||
#ifdef TWN_FEATURE_PUSH_AUDIO
|
||||
static uint8_t audio_buffer[(AUDIO_FREQUENCY / 60) * sizeof (float) * 2];
|
||||
audio_callback(NULL, audio_buffer, sizeof audio_buffer);
|
||||
if (SDL_QueueAudio(ctx.audio_device, audio_buffer, sizeof audio_buffer))
|
||||
CRY_SDL("Error queueing audio: ");
|
||||
#endif
|
||||
input_state_update(&ctx.input);
|
||||
preserve_persistent_ctx_fields();
|
||||
|
||||
@ -560,12 +566,16 @@ static bool initialize(void) {
|
||||
request.freq = AUDIO_FREQUENCY;
|
||||
request.format = AUDIO_F32;
|
||||
request.channels = 2;
|
||||
#ifndef TWN_FEATURE_PUSH_AUDIO
|
||||
request.callback = audio_callback;
|
||||
#endif
|
||||
/* TODO: check for errors */
|
||||
ctx.audio_device = SDL_OpenAudioDevice(NULL, 0, &request, &got, 0);
|
||||
ctx.audio_stream_format = got.format;
|
||||
ctx.audio_stream_frequency = got.freq;
|
||||
ctx.audio_stream_channel_count = got.channels;
|
||||
/* TODO: relax this */
|
||||
SDL_assert_always(got.freq == AUDIO_FREQUENCY);
|
||||
SDL_assert_always(got.format == AUDIO_F32);
|
||||
SDL_assert_always(got.channels == 2);
|
||||
|
||||
|
Reference in New Issue
Block a user