1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-23 22:25:13 +00:00
QB64-PE/internal/c/parts/audio/miniaudio_impl.cpp

58 lines
2.8 KiB
C++

//----------------------------------------------------------------------------------------------------
// ___ ___ __ _ _ ___ ___ _ _ _ ___ _
// / _ \| _ ) / /| | || _ \ __| /_\ _ _ __| (_)___ | __|_ _ __ _(_)_ _ ___
// | (_) | _ \/ _ \_ _| _/ _| / _ \ || / _` | / _ \ | _|| ' \/ _` | | ' \/ -_)
// \__\_\___/\___/ |_||_| |___| /_/ \_\_,_\__,_|_\___/ |___|_||_\__, |_|_||_\___|
// |___/
//
// QB64-PE Audio Engine powered by miniaudio (https://miniaud.io/)
//
//-----------------------------------------------------------------------------------------------------
// Enable Ogg Vorbis decoding
#define STB_VORBIS_HEADER_ONLY
#include "extras/stb_vorbis.c"
// Due to the way miniaudio links to macOS frameworks at runtime, the application may not pass Apple's notarization process :(
// So, we will avoid runtime linking on macOS. See this discussion for more info: https://github.com/mackron/miniaudio/issues/203
#ifdef __APPLE__
# define MA_NO_RUNTIME_LINKING
#endif
// The main miniaudio header
#define MINIAUDIO_IMPLEMENTATION
#include "miniaudio.h"
// The stb_vorbis implementation must come after the implementation of miniaudio
#undef STB_VORBIS_HEADER_ONLY
#include "extras/stb_vorbis.c"
#include "extras/vtables.h"
// Add custom backend (format) vtables here.
// The order in the array defines the order of priority.
// The vtables will be passed in to the resource manager config.
// ma_vtable_modplay should be the last one because libxmp supports 15-channel MODs
// which does not have any signatures and can lead to incorrect detection.
// clang-format off
static ma_decoding_backend_vtable *maCustomBackendVTables[] = {
&ma_vtable_radv2,
&ma_vtable_hively,
&ma_vtable_midi,
&ma_vtable_qoa,
&ma_vtable_modplay,
};
// clang-format on
/// @brief This simply attaches the format decode VTables array to ma_resource_manager_config
/// @param maDecoderConfig Pointer to a miniaudio resource manager config object. This cannot be NULL
void AudioEngineAttachCustomBackendVTables(ma_resource_manager_config *maResourceManagerConfig) {
// Attach the VTable
maResourceManagerConfig->ppCustomDecodingBackendVTables = maCustomBackendVTables;
maResourceManagerConfig->customDecodingBackendCount = ma_countof(maCustomBackendVTables);
}
/// @brief This simply attaches the format decode VTables array to ma_decoder_config
/// @param maDecoderConfig Pointer to a miniaudio decoder config object. This cannot be NULL
void AudioEngineAttachCustomBackendVTables(ma_decoder_config *maDecoderConfig) {
// Attach the VTable
maDecoderConfig->ppCustomBackendVTables = maCustomBackendVTables;
maDecoderConfig->customBackendCount = ma_countof(maCustomBackendVTables);
}