From 9b51dd7d667e97338a92711543fc3e942faae52f Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Mon, 21 Sep 2020 00:43:58 +0300 Subject: Added WinMM driver for windows (#236) * ADLMIDI2: Fixed an MSVC build However, it may work glitchy! * Experimental WinMM MIDI driver TODO: Make a control panel to configure the driver * WinMM-DRV: A workaround for older MinGW * WinMM-DRV: WIP control panel appled / tool * WinMM-DRV: Better test a driver's work * WinMM-DRV: More progress on a control panel * WinMM-DRV: And more progress on this control panel It's almost completed, I need to make the working setup through a registry. * WinMM-DRV: Driver is almost ready However, control panel can't ping a driver to reload settings yet * WinMM-DRV: Fix the missing volume model setup * WinMM-DRV: Setup reload on the fly now work! * WinMM-DRV: Stabilize the thing * WinMM-DRV: Stabilizing * WinMM-DRV: Avoid all "setup" in names to avoid a stupid PCA thing: https://stackoverflow.com/questions/17660404/how-to-programmatically-disable-program-compatibility-assistant-in-windows-7-and * A small warning fix at the WOPL module * WinMM-DRV: Fixed some warnings * WinMM-DRV: Avoid PCA dialog on the installer * WiNMM-DRV: Make the linking of pthread being optional Required to use MinGW-w64 toolchain with the "win32" threading mode * WinMM-DRV: Receive the MODM_RESET to reset the MIDI state * WinMM-DRV: Attempt to fix a sound distorsion on song song * WinMM-Drv: Fixed a build on some older MinGW toolchains * WinMM-Drv: Fixed default settings not being loaded --- utils/winmm_drv/src/MidiSynth.h | 90 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 utils/winmm_drv/src/MidiSynth.h (limited to 'utils/winmm_drv/src/MidiSynth.h') diff --git a/utils/winmm_drv/src/MidiSynth.h b/utils/winmm_drv/src/MidiSynth.h new file mode 100644 index 0000000..bf2da02 --- /dev/null +++ b/utils/winmm_drv/src/MidiSynth.h @@ -0,0 +1,90 @@ +/* Copyright (C) 2011, 2012 Sergey V. Mikayev + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "stdafx.h" +#include "regconfig.h" + +#ifndef OPL3EMU_MIDISYNTH_H +#define OPL3EMU_MIDISYNTH_H + +typedef unsigned char Bit8u; +typedef signed char Bit8s; +typedef unsigned short Bit16u; +typedef signed short Bit16s; +typedef unsigned long Bit32u; +typedef signed long Bit32s; +typedef unsigned __int64 Bit64u; +typedef signed __int64 Bit64s; +typedef unsigned int Bitu; +typedef signed int Bits; + +namespace OPL3Emu +{ + +class MidiSynth +{ +private: + unsigned int sampleRate; + unsigned int midiLatency; + unsigned int bufferSize; + unsigned int chunkSize; + bool useRingBuffer; + bool resetEnabled; + float outputGain; + float reverbOutputGain; + bool reverbEnabled; + bool reverbOverridden; + Bit8u reverbMode; + Bit8u reverbTime; + Bit8u reverbLevel; + + Bit16s *buffer; + DWORD framesRendered; + + ADL_MIDIPlayer *synth; + + bool m_setupInit; + DriverSettings m_setup; + DriverSettings m_setupCurrent; + + unsigned int MillisToFrames(unsigned int millis); + void LoadSettings(); + + MidiSynth(); + ~MidiSynth(); + +public: + static MidiSynth &getInstance(); + int Init(); + void Close(); + int Reset(); + void ResetSynth(); + void PanicSynth(); + void RenderAvailableSpace(); + void Render(Bit16s *bufpos, DWORD totalFrames); + void CheckForSignals(); + void PushMIDI(DWORD msg); + void PlaySysex(Bit8u *bufpos, DWORD len); + + void loadSetup(); + + void LoadSynthSetup(); +}; + +} +#endif -- cgit v1.2.3