mdelibs/audio/drv_ma.c

48 lines
1.1 KiB
C
Raw Permalink Normal View History

2025-11-29 23:41:57 +09:00
#include <MDE/Audio/Audio.h>
#ifdef USE_MA
#include <miniaudio.c>
typedef struct driver {
MDEAudioHandler handler;
void* user;
2025-11-30 09:52:44 +09:00
ma_device device;
2025-11-29 23:41:57 +09:00
} driver_t;
2025-11-30 09:52:44 +09:00
void data_callback(ma_device* device, void* output, const void* input, ma_uint32 frame_count) {
2025-11-29 23:41:57 +09:00
driver_t* drv = device->pUserData;
drv->handler(drv, drv->user, output, frame_count);
}
2025-11-30 09:52:44 +09:00
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;
2025-11-29 23:41:57 +09:00
config.playback.channels = 2;
2025-11-30 09:52:44 +09:00
config.sampleRate = MDEAudioRate;
config.dataCallback = data_callback;
config.pUserData = drv;
2025-11-29 23:41:57 +09:00
drv->handler = handler;
2025-11-30 09:52:44 +09:00
drv->user = user;
2025-11-29 23:41:57 +09:00
2025-11-30 09:52:44 +09:00
if(ma_device_init(NULL, &config, &drv->device) != MA_SUCCESS) {
2025-11-29 23:41:57 +09:00
free(drv);
return NULL;
}
return drv;
}
2025-11-30 09:52:44 +09:00
void MDEAudioClose(MDEAudio handle) {
2025-11-29 23:41:57 +09:00
driver_t* drv = handle;
ma_device_uninit(&drv->device);
free(handle);
}
2025-11-30 09:52:44 +09:00
void MDEAudioStart(MDEAudio handle) {
2025-11-29 23:41:57 +09:00
driver_t* drv = handle;
ma_device_start(&drv->device);
}
#endif