aboutsummaryrefslogtreecommitdiff
path: root/src/midi_sequencer.h
diff options
context:
space:
mode:
authorVitaly Novichkov <admin@wohlnet.ru>2018-06-21 04:23:14 +0300
committerVitaly Novichkov <admin@wohlnet.ru>2018-06-21 04:23:14 +0300
commit9f0f9e4e374798851da39335406ac4bafad81297 (patch)
tree28b744d0e52afc29c1d27f06b227e3101a8844a8 /src/midi_sequencer.h
parenta0fa0cded46bdc94293f02d4070a69bcae5478bb (diff)
downloadlibADLMIDI-9f0f9e4e374798851da39335406ac4bafad81297.tar.gz
libADLMIDI-9f0f9e4e374798851da39335406ac4bafad81297.tar.bz2
libADLMIDI-9f0f9e4e374798851da39335406ac4bafad81297.zip
Move MIDI sequencer into completely separated class
TODO: - implement C bindings for most of class functions - test it in work on any different synthesizer
Diffstat (limited to 'src/midi_sequencer.h')
-rw-r--r--src/midi_sequencer.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/midi_sequencer.h b/src/midi_sequencer.h
new file mode 100644
index 0000000..d3b542e
--- /dev/null
+++ b/src/midi_sequencer.h
@@ -0,0 +1,91 @@
+/*
+ * BW_Midi_Sequencer - MIDI Sequencer for C++
+ *
+ * Copyright (c) 2015-2018 Vitaly Novichkov <admin@wohlnet.ru>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+#ifndef BISQUIT_AND_WOHLSTANDS_MIDI_SEQUENCER_HHHH
+#define BISQUIT_AND_WOHLSTANDS_MIDI_SEQUENCER_HHHH
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stddef.h>
+#include <stdint.h>
+
+struct BW_MidiRtInterface
+{
+ //! Raw MIDI event hook
+ typedef void (*RawEventHook)(void *userdata, uint8_t type, uint8_t subtype, uint8_t channel, const uint8_t *data, size_t len);
+ RawEventHook onEvent;
+ void *onEvent_userData;
+
+ //! Library internal debug messages
+ typedef void (*DebugMessageHook)(void *userdata, const char *fmt, ...);
+ DebugMessageHook onDebugMessage;
+ void *onDebugMessage_userData;
+
+ void *rtUserData;
+
+ /* Standard MIDI events. All of them are required! */
+ typedef void (*RtNoteOn)(void *userdata, uint8_t channel, uint8_t note, uint8_t velocity);
+ RtNoteOn rt_noteOn;
+
+ typedef void (*RtNoteOff)(void *userdata, uint8_t channel, uint8_t note);
+ RtNoteOff rt_noteOff;
+
+ typedef void (*RtNoteAfterTouch)(void *userdata, uint8_t channel, uint8_t note, uint8_t atVal);
+ RtNoteAfterTouch rt_noteAfterTouch;
+
+ typedef void (*RtChannelAfterTouch)(void *userdata, uint8_t channel, uint8_t atVal);
+ RtChannelAfterTouch rt_channelAfterTouch;
+
+ typedef void (*RtControlerChange)(void *userdata, uint8_t channel, uint8_t type, uint8_t value);
+ RtControlerChange rt_controllerChange;
+
+ typedef void (*RtPatchChange)(void *userdata, uint8_t channel, uint8_t patch);
+ RtPatchChange rt_patchChange;
+
+ typedef void (*RtPitchBend)(void *userdata, uint8_t channel, uint8_t msb, uint8_t lsb);
+ RtPitchBend rt_pitchBend;
+
+ typedef void (*RtSysEx)(void *userdata, const uint8_t *msg, size_t size);
+ RtSysEx rt_systemExclusive;
+
+
+ /* NonStandard events. There are optional */
+ typedef void (*RtRawOPL)(void *userdata, uint8_t reg, uint8_t value);
+ RtRawOPL rt_rawOPL;
+
+ typedef void (*RtDeviceSwitch)(void *userdata, size_t track, const char *data, size_t length);
+ RtDeviceSwitch rt_deviceSwitch;
+
+ typedef uint64_t (*RtCurrentDevice)(void *userdata, size_t track);
+ RtCurrentDevice rt_currentDevice;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BISQUIT_AND_WOHLSTANDS_MIDI_SEQUENCER_HHHH */