XX CMake Package
Loading...
Searching...
No Matches
XXMidiParser.h
Go to the documentation of this file.
1#ifndef XXMidiParserH
2#define XXMidiParserH
3
4#include "XXMusicExportDef.h"
5
6#include <functional>
7#include <vector>
8
9#include "XXMidiCommon.h"
10
11namespace XX
12{
13 namespace Midi
14 {
17
19 {
20 public:
21 using NoteOnFunction = std::function<void(const Channel& channel, const uchar& midiNote, const Velocity& velocity)>;
22 using NoteOffFunction = std::function<void(const Channel& channel, const uchar& midiNote, const Velocity& velocity)>;
23 using ControllerChangeFunction = std::function<void(const Channel& channel, const ControllerMessage& controllerMessage, const uchar& value)>;
24 using ClockTickFunction = std::function<void()>;
25 using ClockStatusFunction = std::function<void(const Playback& status)>;
26 using SongPositionFunction = std::function<void(const uint16_t& position)>;
27
28 public:
30
31 public:
32 virtual void processMessage(const std::vector<uchar>& message);
33
34 // register callback functions
35 template <typename ClassType>
36 void onNoteOn(ClassType* instance, void (ClassType::*functionPointer)(const Channel&, const uchar&, const Velocity&));
37
38 template <typename ClassType>
39 void onNoteOff(ClassType* instance, void (ClassType::*functionPointer)(const Channel&, const uchar&, const Velocity&));
40
41 template <typename ClassType>
42 void onControllerChange(ClassType* instance, void (ClassType::*functionPointer)(const Channel&, const ControllerMessage&, const uchar&));
43
44 template <typename ClassType>
45 void onClockTick(ClassType* instance, void (ClassType::*functionPointer)());
46
47 template <typename ClassType>
48 void onClockStatus(ClassType* instance, void (ClassType::*functionPointer)(const Playback&));
49
50 template <typename ClassType>
51 void onSongPosition(ClassType* instance, void (ClassType::*functionPointer)(const uint16_t&));
52
53 protected:
54 // default executes callback functions
55 virtual void noteOn(const Channel& channel, const uchar& midiNote, const Velocity& velocity);
56 virtual void noteOff(const Channel& channel, const uchar& midiNote, const Velocity& velocity);
57 virtual void controllerChange(const Channel& channel, const ControllerMessage& controllerMessage, const uchar& value);
58 virtual void clockTick();
59 virtual void clockStatus(const Playback& status);
60 virtual void songPosition(const uint16_t& position);
61
62 private:
63 QList<NoteOnFunction> noteOnFunctionList;
64 QList<NoteOffFunction> noteOffFunctionList;
65 QList<ControllerChangeFunction> controllerChangeFunctionList;
66 QList<ClockTickFunction> clockTickFunctionList;
67 QList<ClockStatusFunction> clockStatusFunctionList;
68 QList<SongPositionFunction> songPositionFunctionList;
69 };
70 } // namespace Midi
71} // namespace XX
72
73#ifndef XXMidiParserHPP
74#include "XXMidiParser.hpp"
75#endif // NOT XXMidiParserHPP
76
77#endif // NOT XXMidiParserH
#define XXMUSIC_DECLSPEC
Definition XXMusicExportDef.h:11
virtual void noteOff(const Channel &channel, const uchar &midiNote, const Velocity &velocity)
std::function< void(const Channel &channel, const ControllerMessage &controllerMessage, const uchar &value)> ControllerChangeFunction
Definition XXMidiParser.h:23
void onClockTick(ClassType *instance, void(ClassType::*functionPointer)())
void onNoteOn(ClassType *instance, void(ClassType::*functionPointer)(const Channel &, const uchar &, const Velocity &))
virtual void noteOn(const Channel &channel, const uchar &midiNote, const Velocity &velocity)
void onNoteOff(ClassType *instance, void(ClassType::*functionPointer)(const Channel &, const uchar &, const Velocity &))
virtual void controllerChange(const Channel &channel, const ControllerMessage &controllerMessage, const uchar &value)
std::function< void()> ClockTickFunction
Definition XXMidiParser.h:24
void onClockStatus(ClassType *instance, void(ClassType::*functionPointer)(const Playback &))
virtual void songPosition(const uint16_t &position)
std::function< void(const Channel &channel, const uchar &midiNote, const Velocity &velocity)> NoteOffFunction
Definition XXMidiParser.h:22
void onControllerChange(ClassType *instance, void(ClassType::*functionPointer)(const Channel &, const ControllerMessage &, const uchar &))
std::function< void(const Playback &status)> ClockStatusFunction
Definition XXMidiParser.h:25
virtual void clockStatus(const Playback &status)
void onSongPosition(ClassType *instance, void(ClassType::*functionPointer)(const uint16_t &))
std::function< void(const uint16_t &position)> SongPositionFunction
Definition XXMidiParser.h:26
virtual void clockTick()
virtual void processMessage(const std::vector< uchar > &message)
std::function< void(const Channel &channel, const uchar &midiNote, const Velocity &velocity)> NoteOnFunction
Definition XXMidiParser.h:21
ControllerMessage
midi control messages
Definition XXMidiCommon.h:99
uchar Velocity
Definition XXMidiCommon.h:22
Playback
midi playback states
Definition XXMidiCommon.h:158
uchar Channel
Definition XXMidiCommon.h:19
Definition XXMidiCommon.h:17
Definition XXPopulatedAbstract.h:11