From 88c72ede58d01c4f49cacedb2ea30346d51ef8fb Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Sat, 29 Nov 2025 23:41:57 +0900 Subject: [PATCH] update --- audio/CMakeLists.txt | 9 +++++++-- audio/drv_ma.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 audio/drv_ma.c diff --git a/audio/CMakeLists.txt b/audio/CMakeLists.txt index c905383..3cee3d2 100644 --- a/audio/CMakeLists.txt +++ b/audio/CMakeLists.txt @@ -48,5 +48,10 @@ macro(check_backend uppername name) endif() endmacro() -check_backend(ALSA alsa) -check_backend(AO ao) +#check_backend(ALSA alsa) +#check_backend(AO ao) +target_compile_definitions( + MDEAudio + PRIVATE + USE_MA +) diff --git a/audio/drv_ma.c b/audio/drv_ma.c new file mode 100644 index 0000000..5d0deb7 --- /dev/null +++ b/audio/drv_ma.c @@ -0,0 +1,48 @@ +#include + +#ifdef USE_MA +#include + +typedef struct driver { + MDEAudioHandler handler; + void* user; + ma_device device; +} driver_t; + +void data_callback(ma_device* device, void* output, const void* input, ma_uint32 frame_count){ + driver_t* drv = device->pUserData; + + drv->handler(drv, drv->user, output, frame_count); +} + +MDEAudio MDEAudioOpen(MDEAudioHandler handler, void* user){ + driver_t* drv = malloc(sizeof(*drv)); + ma_device_config config = ma_device_config_init(ma_device_type_playback); + config.playback.format = ma_format_s16; + config.playback.channels = 2; + config.sampleRate = MDEAudioRate; + config.dataCallback = data_callback; + config.pUserData = drv; + + drv->handler = handler; + drv->user = user; + + if(ma_device_init(NULL, &config, &drv->device) != MA_SUCCESS){ + free(drv); + return NULL; + } + + return drv; +} + +void MDEAudioClose(MDEAudio handle){ + driver_t* drv = handle; + ma_device_uninit(&drv->device); + free(handle); +} + +void MDEAudioStart(MDEAudio handle){ + driver_t* drv = handle; + ma_device_start(&drv->device); +} +#endif