From 355480f408e88b69717b934bace4e5e69856ad23 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Tue, 29 Oct 2024 16:06:12 -0400 Subject: Cleanup, improve volume calculations Signed-off-by: Andrew Opalach --- src/mixer/audio_miniaudio.c | 32 +++++++++++++++++++------------- src/mixer/meson.build | 5 +++-- 2 files changed, 22 insertions(+), 15 deletions(-) (limited to 'src/mixer') diff --git a/src/mixer/audio_miniaudio.c b/src/mixer/audio_miniaudio.c index 5695a31..72e1cd8 100644 --- a/src/mixer/audio_miniaudio.c +++ b/src/mixer/audio_miniaudio.c @@ -2,6 +2,7 @@ #if defined(__clang__) || defined(__GNUC__) _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +_Pragma("GCC diagnostic ignored \"-Wunused-variable\"") _Pragma("GCC diagnostic ignored \"-Wincompatible-pointer-types\"") _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") #elif _MSC_VER @@ -18,6 +19,7 @@ _Pragma("GCC diagnostic pop") static ma_backend backends[] = { #ifndef _WIN32 ma_backend_pulseaudio, + ma_backend_alsa #else ma_backend_wasapi // ma_backend_dsound @@ -75,24 +77,28 @@ static bool audio_miniaudio_init(struct camu_audio *audio, str *name) al_log_error("audio_miniaudio", "Failed to initialize context (%d).", ret); return false; } - /* + ma->selected_device = NULL; if (ma_context_get_devices(&ma->context, &ma->infos, &ma->info_count, NULL, NULL) != MA_SUCCESS) { return false; } + /* for (u32 i = 0; i < ma->info_count; i++) { ma_device_info *info = &ma->infos[i]; + if (strcmp(info->id.alsa, "front:CARD=D10,DEV=0") == 0) { + ma->selected_device = info; + break; + } ma_device_info real_info; ma_context_get_device_info(&ma->context, ma_device_type_playback, &info->id, &real_info); for (u32 j = 0; j < real_info.nativeDataFormatCount; j++) { - //al_printf("%s\n", real_info.id.alsa); - //al_printf("%s\n", real_info.id.pulse); - //al_printf("%i\n", real_info.nativeDataFormats[j].format); - //al_printf("%i\n", real_info.nativeDataFormats[j].channels); - //al_printf("%i\n", real_info.nativeDataFormats[j].sampleRate); - //al_printf("\n"); + al_printf("%s\n", real_info.id.alsa); + al_printf("%s\n", real_info.id.pulse); + al_printf("%i\n", real_info.nativeDataFormats[j].format); + al_printf("%i\n", real_info.nativeDataFormats[j].channels); + al_printf("%i\n", real_info.nativeDataFormats[j].sampleRate); + al_printf("\n"); } } - //al_printf("%i\n", ma->info_count); */ return true; } @@ -144,15 +150,15 @@ static bool audio_miniaudio_configure_stream(struct camu_audio *audio, void *opa struct camu_ff_resample_fmt *fmt = (struct camu_ff_resample_fmt *)opaque; (void)fmt; ma->config = ma_device_config_init(ma_device_type_playback); - //ma->config.playback.pDeviceID = &ma->selected_device->id; - //ma->config.performanceProfile = ma_performance_profile_low_latency; + if (ma->selected_device) { + ma->config.playback.pDeviceID = &ma->selected_device->id; + } ma->config.performanceProfile = ma_performance_profile_conservative; ma->config.periods = DEFAULT_PERIODS; ma->config.periodSizeInMilliseconds = DEFAULT_PERIOD_SIZE_IN_MILLISECONDS; - //ma->config.playback.format = ma_format_unknown; - ma->config.playback.format = ma_format_f32; + ma->config.playback.format = ma_format_s32; ma->config.playback.channels = 2; - ma->config.sampleRate = 0; + ma->config.sampleRate = 44100; ma->config.dataCallback = data_callback; ma->config.pUserData = ma; ma->config.noPreSilencedOutputBuffer = MA_TRUE; diff --git a/src/mixer/meson.build b/src/mixer/meson.build index ea9356c..be5894f 100644 --- a/src/mixer/meson.build +++ b/src/mixer/meson.build @@ -18,8 +18,9 @@ if use_miniaudio ] if not is_windows libpulse = dependency('libpulse') - mixer_deps += [libpulse] - mixer_args += ['-DMA_ENABLE_PULSEAUDIO', '-DMA_NO_RUNTIME_LINKING'] + alsa = dependency('alsa') + mixer_deps += [libpulse, alsa] + mixer_args += ['-DMA_ENABLE_ALSA', '-DMA_ENABLE_PULSEAUDIO', '-DMA_NO_RUNTIME_LINKING'] else mixer_args += ['-DMA_ENABLE_WASAPI'] #mixer_args += ['-DMA_ENABLE_DSOUND'] -- cgit v1.2.3-101-g0448