flycast/core/oslib/audiobackend_libao.cpp

52 lines
930 B
C++

#include "audiostream.h"
#ifdef USE_LIBAO
#include <ao/ao.h>
static ao_device *aodevice;
static ao_sample_format aoformat;
static void libao_init()
{
ao_initialize();
memset(&aoformat, 0, sizeof(aoformat));
aoformat.bits = 16;
aoformat.channels = 2;
aoformat.rate = 44100;
aoformat.byte_format = AO_FMT_LITTLE;
aodevice = ao_open_live(ao_default_driver_id(), &aoformat, NULL); // Live output
if (!aodevice)
aodevice = ao_open_live(ao_driver_id("null"), &aoformat, NULL);
}
static u32 libao_push(const void* frame, u32 samples, bool wait)
{
if (aodevice)
ao_play(aodevice, (char*)frame, samples * 4);
return 1;
}
static void libao_term()
{
if (aodevice)
{
ao_close(aodevice);
ao_shutdown();
}
}
static audiobackend_t audiobackend_libao = {
"libao", // Slug
"libao", // Name
&libao_init,
&libao_push,
&libao_term,
NULL
};
static bool ao = RegisterAudioBackend(&audiobackend_libao);
#endif