ref: fd972a0429363b470ca9989e365e89286238e289
parent: 8b427a838b845bd22138c344e96ec758f744fbea
author: Jonne Kokkonen <jonne.kokkonen@gmail.com>
date: Sat Mar 22 16:20:32 EDT 2025
change audio to use input callback instead of output callback
--- a/src/audio.c
+++ b/src/audio.c
@@ -12,28 +12,17 @@
static SDL_AudioSpec audio_spec_in = {SDL_AUDIO_S16LE, 2, 44100}; static SDL_AudioSpec audio_spec_out = {SDL_AUDIO_S16LE, 2, 44100};-static void SDLCALL audio_cb_out(void *userdata, SDL_AudioStream *stream, int length, int unused) {+static void SDLCALL audio_cb_in(void *userdata, SDL_AudioStream *stream, int length, int unused) {// suppress compiler warnings
(void)userdata;
- (void)length;
(void)unused;
- const int bytes_available = SDL_GetAudioStreamAvailable(audio_stream_in);
- if (bytes_available == -1) {- SDL_LogError(SDL_LOG_CATEGORY_AUDIO,
- "Error getting available audio stream bytes: %s, destroying audio",
- SDL_GetError());
- audio_close();
- return;
- }
-
- Uint8 *src_audio_data = SDL_malloc(bytes_available);
- const int bytes_read = SDL_GetAudioStreamData(audio_stream_in, src_audio_data, bytes_available);
- if (bytes_read == bytes_available) {- SDL_PutAudioStreamData(stream, src_audio_data, bytes_read);
+ Uint8 *src_audio_data = SDL_malloc(length);
+ const int bytes_read = SDL_GetAudioStreamData(stream, src_audio_data, length);
+ if (bytes_read == length) {+ SDL_PutAudioStreamData(audio_stream_out, src_audio_data, bytes_read);
} else {- SDL_LogError(SDL_LOG_CATEGORY_AUDIO,
- "Error getting available audio stream bytes: %s, destroying audio",
+ SDL_LogError(SDL_LOG_CATEGORY_AUDIO, "Error getting audio stream data: %s, destroying audio",
SDL_GetError());
audio_close();
}
@@ -117,8 +106,7 @@
SDL_snprintf(audio_buffer_size_str, sizeof(audio_buffer_size_str), "%d", audio_buffer_size);
SDL_SetHint(SDL_HINT_AUDIO_DEVICE_SAMPLE_FRAMES, audio_buffer_size_str);
- audio_stream_out =
- SDL_OpenAudioDeviceStream(output_device_id, &audio_spec_out, audio_cb_out, NULL);
+ audio_stream_out = SDL_OpenAudioDeviceStream(output_device_id, &audio_spec_out, NULL, NULL);
if (!audio_stream_out) {SDL_LogError(SDL_LOG_CATEGORY_AUDIO, "Error opening audio output device: %s", SDL_GetError());
@@ -127,7 +115,7 @@
SDL_Log("Audiospec Out: format %d, channels %d, rate %d", audio_spec_out.format,audio_spec_out.channels, audio_spec_out.freq);
- audio_stream_in = SDL_OpenAudioDeviceStream(m8_device_id, &audio_spec_in, NULL, NULL);
+ audio_stream_in = SDL_OpenAudioDeviceStream(m8_device_id, &audio_spec_in, audio_cb_in, NULL);
if (!audio_stream_in) {SDL_LogError(SDL_LOG_CATEGORY_AUDIO, "Error opening audio input device: %s", SDL_GetError());
SDL_DestroyAudioStream(audio_stream_out);
--
⑨