mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-08 11:10:16 +00:00
This adds MIDI support to the language as a new unstable feature. There are two new metacommands that come with this: $Unstable: Midi $MidiSoundFont: [Default|"filename"] The $Unstable command is required to be able to use any of the other commands, and just signifies that this is not a full part of the language yet and may change in breaking ways before the API is finalized. The $MidiSoundFont command enables MIDI support in the compiled program, and also specifies what sound font to use to play MIDI files. "Default" will make use of the soundfont placed at './internal/support/default_soundfont.sf2', and otherwise a filename can be specified to use any soundfont wanted. In either case, the selected sound font is compiled into the executable and then loaded at runtime. Fixes: #115
62 lines
3.3 KiB
C++
62 lines
3.3 KiB
C++
//----------------------------------------------------------------------------------------------------
|
|
// ___ ___ __ _ _ ___ ___ _ _ _ ___ _
|
|
// / _ \| _ ) / /| | || _ \ __| /_\ _ _ __| (_)___ | __|_ _ __ _(_)_ _ ___
|
|
// | (_) | _ \/ _ \_ _| _/ _| / _ \ || / _` | / _ \ | _|| ' \/ _` | | ' \/ -_)
|
|
// \__\_\___/\___/ |_||_| |___| /_/ \_\_,_\__,_|_\___/ |___|_||_\__, |_|_||_\___|
|
|
// |___/
|
|
//
|
|
// QB64-PE Audio Engine powered by miniaudio (https://miniaud.io/)
|
|
//
|
|
// Copyright (c) 2022 Samuel Gomes
|
|
// https://github.com/a740g
|
|
//
|
|
//-----------------------------------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------------------------------
|
|
// HEADER FILES
|
|
//-----------------------------------------------------------------------------------------------------
|
|
// Enable Ogg Vorbis decoding
|
|
#define STB_VORBIS_HEADER_ONLY
|
|
#include "extras/stb_vorbis.c"
|
|
// PulseAudio has serious stuttering issues in ChromeOS Linux (Crostini) and possibly others
|
|
// This may be due to this - https://github.com/mackron/miniaudio/issues/427
|
|
// And https://wiki.archlinux.org/title/PulseAudio/Troubleshooting#Glitches,_skips_or_crackling
|
|
// We'll have to look at this closely later. If this is fixed, then remove this define from here & audio.cpp
|
|
#define MA_NO_PULSEAUDIO
|
|
// 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"
|
|
//-----------------------------------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------------------------------
|
|
// GLOBAL VARIABLES
|
|
//-----------------------------------------------------------------------------------------------------
|
|
// 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
|
|
static ma_decoding_backend_vtable *maCustomBackendVTables[] = {
|
|
radv2_ma_vtable,
|
|
midi_ma_vtable,
|
|
mod_ma_vtable,
|
|
};
|
|
//-----------------------------------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------------------------------
|
|
// FUNCTIONS
|
|
//-----------------------------------------------------------------------------------------------------
|
|
/// <summary>
|
|
/// This simply attaches the format decode VTables array to ma_resource_manager_config
|
|
/// </summary>
|
|
/// <param name="maResourceManagerConfig">Pointer to a miniaudio resource manager config object. This cannot be NULL</param>
|
|
void AudioEngineAttachCustomBackendVTables(ma_resource_manager_config *maResourceManagerConfig) {
|
|
// Attach the VTable
|
|
maResourceManagerConfig->ppCustomDecodingBackendVTables = maCustomBackendVTables;
|
|
maResourceManagerConfig->customDecodingBackendCount = ma_countof(maCustomBackendVTables);
|
|
}
|
|
//-----------------------------------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------------------------------
|