aboutsummaryrefslogtreecommitdiff
path: root/src/midi_sequencer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/midi_sequencer.h')
-rw-r--r--src/midi_sequencer.h79
1 files changed, 40 insertions, 39 deletions
diff --git a/src/midi_sequencer.h b/src/midi_sequencer.h
index 1f75586..8ed96cd 100644
--- a/src/midi_sequencer.h
+++ b/src/midi_sequencer.h
@@ -33,20 +33,56 @@ extern "C" {
#include <stddef.h>
#include <stdint.h>
+/*! 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);
+/*! PCM render */
+typedef void (*PcmRender)(void *userdata, uint8_t *stream, size_t length);
+/*! Library internal debug messages */
+typedef void (*DebugMessageHook)(void *userdata, const char *fmt, ...);
+/*! Loop Start event hook */
+typedef void (*LoopStartHook)(void *userdata);
+/*! Loop Start event hook */
+typedef void (*LoopEndHook)(void *userdata);
+typedef void (*SongStartHook)(void *userdata);
+
+
+/*! Note-On MIDI event */
+typedef void (*RtNoteOn)(void *userdata, uint8_t channel, uint8_t note, uint8_t velocity);
+/*! Note-Off MIDI event */
+typedef void (*RtNoteOff)(void *userdata, uint8_t channel, uint8_t note);
+/*! Note-Off MIDI event with a velocity */
+typedef void (*RtNoteOffVel)(void *userdata, uint8_t channel, uint8_t note, uint8_t velocity);
+/*! Note aftertouch MIDI event */
+typedef void (*RtNoteAfterTouch)(void *userdata, uint8_t channel, uint8_t note, uint8_t atVal);
+/*! Channel aftertouch MIDI event */
+typedef void (*RtChannelAfterTouch)(void *userdata, uint8_t channel, uint8_t atVal);
+/*! Controller change MIDI event */
+typedef void (*RtControllerChange)(void *userdata, uint8_t channel, uint8_t type, uint8_t value);
+/*! Patch change MIDI event */
+typedef void (*RtPatchChange)(void *userdata, uint8_t channel, uint8_t patch);
+/*! Pitch bend MIDI event */
+typedef void (*RtPitchBend)(void *userdata, uint8_t channel, uint8_t msb, uint8_t lsb);
+/*! System Exclusive MIDI event */
+typedef void (*RtSysEx)(void *userdata, const uint8_t *msg, size_t size);
+/*! Meta event hook */
+typedef void (*MetaEventHook)(void *userdata, uint8_t type, const uint8_t *data, size_t len);
+/*! Device Switch MIDI event */
+typedef void (*RtDeviceSwitch)(void *userdata, size_t track, const char *data, size_t length);
+/*! Get the channels offset for current MIDI device */
+typedef size_t (*RtCurrentDevice)(void *userdata, size_t track);
+/*! [Non-Standard] Pass raw OPL3 data to the chip (when playing IMF files) */
+typedef void (*RtRawOPL)(void *userdata, uint8_t reg, uint8_t value);
+
/**
\brief Real-Time MIDI interface between Sequencer and the Synthesizer
*/
typedef 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);
/*! MIDI event hook which catches all MIDI events */
RawEventHook onEvent;
/*! User data which will be passed through On-Event hook */
void *onEvent_userData;
- /*! PCM render */
- typedef void (*PcmRender)(void *userdata, uint8_t *stream, size_t length);
/*! PCM render hook which catches passing of loop start point */
PcmRender onPcmRender;
/*! User data which will be passed through On-PCM-render hook */
@@ -58,28 +94,21 @@ typedef struct BW_MidiRtInterface
/*! Size of one sample in bytes */
uint32_t pcmFrameSize;
- /*! Library internal debug messages */
- typedef void (*DebugMessageHook)(void *userdata, const char *fmt, ...);
/*! Debug message hook */
DebugMessageHook onDebugMessage;
/*! User data which will be passed through Debug Message hook */
void *onDebugMessage_userData;
- /*! Loop Start event hook */
- typedef void (*LoopStartHook)(void *userdata);
/*! Loop start hook which catches passing of loop start point */
LoopStartHook onloopStart;
/*! User data which will be passed through On-LoopStart hook */
void *onloopStart_userData;
- /*! Loop Start event hook */
- typedef void (*LoopEndHook)(void *userdata);
/*! Loop start hook which catches passing of loop start point */
LoopEndHook onloopEnd;
/*! User data which will be passed through On-LoopStart hook */
void *onloopEnd_userData;
- typedef void (*SongStartHook)(void *userdata);
/*! Song start hook which is calling when starting playing song at begin */
SongStartHook onSongStart;
/*! User data which will be passed through On-SongStart hook */
@@ -93,48 +122,29 @@ typedef struct BW_MidiRtInterface
* Standard MIDI events. All of them are required! *
***************************************************/
- /*! Note-On MIDI event */
- typedef void (*RtNoteOn)(void *userdata, uint8_t channel, uint8_t note, uint8_t velocity);
/*! Note-On MIDI event hook */
RtNoteOn rt_noteOn;
-
- /*! Note-Off MIDI event */
- typedef void (*RtNoteOff)(void *userdata, uint8_t channel, uint8_t note);
/*! Note-Off MIDI event hook */
RtNoteOff rt_noteOff;
- /*! Note-Off MIDI event with a velocity */
- typedef void (*RtNoteOffVel)(void *userdata, uint8_t channel, uint8_t note, uint8_t velocity);
/*! Note-Off MIDI event hook with a velocity */
RtNoteOffVel rt_noteOffVel;
- /*! Note aftertouch MIDI event */
- typedef void (*RtNoteAfterTouch)(void *userdata, uint8_t channel, uint8_t note, uint8_t atVal);
/*! Note aftertouch MIDI event hook */
RtNoteAfterTouch rt_noteAfterTouch;
- /*! Channel aftertouch MIDI event */
- typedef void (*RtChannelAfterTouch)(void *userdata, uint8_t channel, uint8_t atVal);
/*! Channel aftertouch MIDI event hook */
RtChannelAfterTouch rt_channelAfterTouch;
- /*! Controller change MIDI event */
- typedef void (*RtControllerChange)(void *userdata, uint8_t channel, uint8_t type, uint8_t value);
/*! Controller change MIDI event hook */
RtControllerChange rt_controllerChange;
- /*! Patch change MIDI event */
- typedef void (*RtPatchChange)(void *userdata, uint8_t channel, uint8_t patch);
/*! Patch change MIDI event hook */
RtPatchChange rt_patchChange;
- /*! Pitch bend MIDI event */
- typedef void (*RtPitchBend)(void *userdata, uint8_t channel, uint8_t msb, uint8_t lsb);
/*! Pitch bend MIDI event hook */
RtPitchBend rt_pitchBend;
- /*! System Exclusive MIDI event */
- typedef void (*RtSysEx)(void *userdata, const uint8_t *msg, size_t size);
/*! System Exclusive MIDI event hook */
RtSysEx rt_systemExclusive;
@@ -143,18 +153,12 @@ typedef struct BW_MidiRtInterface
* Optional events *
*******************/
- /*! Meta event hook */
- typedef void (*MetaEventHook)(void *userdata, uint8_t type, const uint8_t *data, size_t len);
/*! Meta event hook which catches all meta events */
MetaEventHook rt_metaEvent;
- /*! Device Switch MIDI event */
- typedef void (*RtDeviceSwitch)(void *userdata, size_t track, const char *data, size_t length);
/*! Device Switch MIDI event hook */
RtDeviceSwitch rt_deviceSwitch;
- /*! Get the channels offset for current MIDI device */
- typedef size_t (*RtCurrentDevice)(void *userdata, size_t track);
/*! Get the channels offset for current MIDI device hook. Returms multiple to 16 value. */
RtCurrentDevice rt_currentDevice;
@@ -162,9 +166,6 @@ typedef struct BW_MidiRtInterface
/******************************************
* NonStandard events. There are optional *
******************************************/
-
- /*! [Non-Standard] Pass raw OPL3 data to the chip (when playing IMF files) */
- typedef void (*RtRawOPL)(void *userdata, uint8_t reg, uint8_t value);
/*! [Non-Standard] Pass raw OPL3 data to the chip hook */
RtRawOPL rt_rawOPL;