#ifndef PRIVATE_AUDIO_H #define PRIVATE_AUDIO_H #include "../audio.h" #include #define STB_VORBIS_HEADER_ONLY #include #include #include #include typedef enum audio_file_type { audio_file_type_ogg, audio_file_type_xm, audio_file_type_count, audio_file_type_unknown, } t_audio_file_type; union audio_context { struct { stb_vorbis *handle; unsigned char *data; int frequency; uint8_t channel_count; } vorbis; struct { xm_context_t *handle; } xm; }; struct audio_channel { t_play_audio_args args; enum audio_file_type file_type; union audio_context context; /* interpreted by `file_type` value */ const char *path; const char *name; }; struct audio_channel_pair { char *key; struct audio_channel value; }; void audio_callback(void *userdata, uint8_t *stream, int len); #endif