LMMS
Loading...
Searching...
No Matches
MidiMessage.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the Water library.
5 Copyright (c) 2016 ROLI Ltd.
6 Copyright (C) 2017-2022 Filipe Coelho <falktx@falktx.com>
7
8 Permission is granted to use this software under the terms of the ISC license
9 http://www.isc.org/downloads/software-support-policy/isc-license/
10
11 Permission to use, copy, modify, and/or distribute this software for any
12 purpose with or without fee is hereby granted, provided that the above
13 copyright notice and this permission notice appear in all copies.
14
15 THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD
16 TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17 FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
18 OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
19 USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
21 OF THIS SOFTWARE.
22
23 ==============================================================================
24*/
25
26#ifndef WATER_MIDIMESSAGE_H_INCLUDED
27#define WATER_MIDIMESSAGE_H_INCLUDED
28
29#include "../water.h"
30
31namespace water {
32
33//==============================================================================
40{
41public:
42 //==============================================================================
51 MidiMessage (int byte1, int byte2, int byte3, double timeStamp = 0) noexcept;
52
60 MidiMessage (int byte1, int byte2, double timeStamp = 0) noexcept;
61
68 MidiMessage (int byte1, double timeStamp = 0) noexcept;
69
71 MidiMessage (const void* data, int numBytes, double timeStamp = 0);
72
93 MidiMessage (const void* data, int maxBytesToUse,
94 int& numBytesUsed, uint8 lastStatusByte,
95 double timeStamp = 0,
96 bool sysexHasEmbeddedLength = true);
97
102 MidiMessage() noexcept;
103
105 MidiMessage (const MidiMessage&);
106
108 MidiMessage (const MidiMessage&, double newTimeStamp);
109
111 ~MidiMessage() noexcept;
112
114 MidiMessage& operator= (const MidiMessage& other);
115
116 //==============================================================================
120 const uint8* getRawData() const noexcept { return getData(); }
121
126
127 //==============================================================================
145
150 void setTimeStamp (double newTimestamp) noexcept { timeStamp = newTimestamp; }
151
155 void addToTimeStamp (double delta) noexcept { timeStamp += delta; }
156
157 //==============================================================================
165
171 bool isForChannel (int channelNumber) const noexcept;
172
177 void setChannel (int newChannelNumber) noexcept;
178
179 //==============================================================================
182 bool isSysEx() const noexcept;
183
189
195
196 //==============================================================================
207 bool isNoteOn (bool returnTrueForVelocity0 = false) const noexcept;
208
216 static MidiMessage noteOn (int channel, int noteNumber, float velocity) noexcept;
217
225 static MidiMessage noteOn (int channel, int noteNumber, uint8 velocity) noexcept;
226
234 bool isNoteOff (bool returnTrueForNoteOnVelocity0 = true) const noexcept;
235
243 static MidiMessage noteOff (int channel, int noteNumber, float velocity) noexcept;
244
252 static MidiMessage noteOff (int channel, int noteNumber, uint8 velocity) noexcept;
253
260 static MidiMessage noteOff (int channel, int noteNumber) noexcept;
261
267
273
277 void setNoteNumber (int newNoteNumber) noexcept;
278
279 //==============================================================================
288
297
305 void setVelocity (float newVelocity) noexcept;
306
314 void multiplyVelocity (float scaleFactor) noexcept;
315
316 //==============================================================================
321
326
331
332 //==============================================================================
337
343
350 static MidiMessage programChange (int channel, int programNumber) noexcept;
351
352 //==============================================================================
357
367
374 static MidiMessage pitchWheel (int channel, int position) noexcept;
375
376 //==============================================================================
386
395
403 static MidiMessage aftertouchChange (int channel,
404 int noteNumber,
405 int aftertouchAmount) noexcept;
406
416
423
430 static MidiMessage channelPressureChange (int channel, int pressure) noexcept;
431
432 //==============================================================================
438
447
456
460 bool isControllerOfType (int controllerType) const noexcept;
461
469 static MidiMessage controllerEvent (int channel,
470 int controllerType,
471 int value) noexcept;
472
477
482
488 static MidiMessage allNotesOff (int channel) noexcept;
489
495 static MidiMessage allSoundOff (int channel) noexcept;
496
501 static MidiMessage allControllersOff (int channel) noexcept;
502
503 //==============================================================================
512
521
526
531
532 //==============================================================================
537
544 double getTempoMetaEventTickLength (short timeFormat) const noexcept;
545
550
554 static MidiMessage tempoMetaEvent (int microsecondsPerQuarterNote) noexcept;
555
556 //==============================================================================
561
565 void getTimeSignatureInfo (int& numerator, int& denominator) const noexcept;
566
570 static MidiMessage timeSignatureMetaEvent (int numerator, int denominator);
571
572 //==============================================================================
577
586
591
598 static MidiMessage keySignatureMetaEvent (int numberOfSharpsOrFlats, bool isMinorKey);
599
600 //==============================================================================
609
616
622 static MidiMessage midiChannelMetaEvent (int channel) noexcept;
623
624 //==============================================================================
627
628 //==============================================================================
633
636
641
644
649
652
657
660
665
670
679 static MidiMessage songPositionPointer (int positionInMidiBeats) noexcept;
680
681 //==============================================================================
686
692
697
703 static MidiMessage quarterFrame (int sequenceNumber, int value) noexcept;
704
709 {
710 fps24 = 0,
711 fps25 = 1,
714 };
715
718
724 void getFullFrameParameters (int& hours,
725 int& minutes,
726 int& seconds,
727 int& frames,
728 SmpteTimecodeType& timecodeType) const noexcept;
729
731 static MidiMessage fullFrame (int hours,
732 int minutes,
733 int seconds,
734 int frames,
735 SmpteTimecodeType timecodeType);
736
737 //==============================================================================
753
758
765
768
773 bool isMidiMachineControlGoto (int& hours,
774 int& minutes,
775 int& seconds,
776 int& frames) const noexcept;
777
782 static MidiMessage midiMachineControlGoto (int hours,
783 int minutes,
784 int seconds,
785 int frames);
786
787 //==============================================================================
791 static MidiMessage masterVolume (float volume);
792
793 //==============================================================================
797 static MidiMessage createSysExMessage (const void* sysexData,
798 int dataSize);
799
800
801 //==============================================================================
808 int& numBytesUsed) noexcept;
809
815 static int getMessageLengthFromFirstByte (uint8 firstByte) noexcept;
816
817 //==============================================================================
823 static double getMidiNoteInHertz (int noteNumber, double frequencyOfA = 440.0) noexcept;
824
826 static bool isMidiNoteBlack (int noteNumber) noexcept;
827
829 static uint8 floatValueToMidiByte (float valueBetween0and1) noexcept;
830
832 static uint16 pitchbendToPitchwheelPos (float pitchbendInSemitones,
833 float pitchbendRangeInSemitones) noexcept;
834
835private:
836 //==============================================================================
838 {
840 uint8 asBytes[sizeof (uint8*)];
841 };
842
844 double timeStamp;
845 int size;
846
847 inline bool isHeapAllocated() const noexcept { return size > (int) sizeof (packedData); }
848 inline uint8* getData() noexcept { return isHeapAllocated() ? packedData.allocatedData : packedData.asBytes; }
849 inline const uint8* getData() const noexcept { return isHeapAllocated() ? packedData.allocatedData : packedData.asBytes; }
850 uint8* allocateSpace (int);
851};
852
853}
854
855#endif // WATER_MIDIMESSAGE_H_INCLUDED
#define noexcept
Definition DistrhoDefines.h:72
uint8_t uint8
Definition basics.h:86
MidiMessage(int byte1, int byte2, int byte3, double timeStamp=0) noexcept
Definition MidiMessage.cpp:139
double timeStamp
Definition MidiMessage.h:844
Definition MidiMessage.h:40
bool isNoteOnOrOff() const noexcept
Definition MidiMessage.cpp:354
bool isSongPositionPointer() const noexcept
Definition MidiMessage.cpp:785
bool isForChannel(int channelNumber) const noexcept
Definition MidiMessage.cpp:317
void setTimeStamp(double newTimestamp) noexcept
Definition MidiMessage.h:150
static double getMidiNoteInHertz(int noteNumber, double frequencyOfA=440.0) noexcept
Definition MidiMessage.cpp:913
bool isSostenutoPedalOff() const noexcept
Definition MidiMessage.cpp:448
int getKeySignatureNumberOfSharpsOrFlats() const noexcept
Definition MidiMessage.cpp:766
static MidiMessage midiMachineControlGoto(int hours, int minutes, int seconds, int frames)
Definition MidiMessage.cpp:900
bool isProgramChange() const noexcept
Definition MidiMessage.cpp:454
const uint8 * getRawData() const noexcept
Definition MidiMessage.h:120
void getTimeSignatureInfo(int &numerator, int &denominator) const noexcept
Definition MidiMessage.cpp:725
const uint8 * getSysExData() const noexcept
Definition MidiMessage.cpp:618
static MidiMessage allControllersOff(int channel) noexcept
Definition MidiMessage.cpp:583
bool isMetaEvent() const noexcept
Definition MidiMessage.cpp:629
static MidiMessage createSysExMessage(const void *sysexData, int dataSize)
Definition MidiMessage.cpp:606
bool isAftertouch() const noexcept
Definition MidiMessage.cpp:401
bool isMidiMachineControlGoto(int &hours, int &minutes, int &seconds, int &frames) const noexcept
Definition MidiMessage.cpp:878
static MidiMessage noteOn(int channel, int noteNumber, float velocity) noexcept
Definition MidiMessage.cpp:534
static MidiMessage aftertouchChange(int channel, int noteNumber, int aftertouchAmount) noexcept
Definition MidiMessage.cpp:412
int getMidiChannelMetaEventChannel() const noexcept
Definition MidiMessage.cpp:663
bool isAllSoundOff() const noexcept
Definition MidiMessage.cpp:577
void setChannel(int newChannelNumber) noexcept
Definition MidiMessage.cpp:327
static MidiMessage midiStart() noexcept
Definition MidiMessage.cpp:796
static MidiMessage midiContinue() noexcept
Definition MidiMessage.cpp:799
bool isSostenutoPedalOn() const noexcept
Definition MidiMessage.cpp:447
bool isFullFrame() const noexcept
Definition MidiMessage.cpp:816
float getFloatVelocity() const noexcept
Definition MidiMessage.cpp:381
int getRawDataSize() const noexcept
Definition MidiMessage.h:125
MidiMessage & operator=(const MidiMessage &other)
Definition MidiMessage.cpp:261
static MidiMessage noteOff(int channel, int noteNumber, float velocity) noexcept
Definition MidiMessage.cpp:548
static MidiMessage songPositionPointer(int positionInMidiBeats) noexcept
Definition MidiMessage.cpp:788
static MidiMessage allSoundOff(int channel) noexcept
Definition MidiMessage.cpp:572
static uint8 floatValueToMidiByte(float valueBetween0and1) noexcept
Definition MidiMessage.cpp:46
double timeStamp
Definition MidiMessage.h:844
static uint16 pitchbendToPitchwheelPos(float pitchbendInSemitones, float pitchbendRangeInSemitones) noexcept
Definition MidiMessage.cpp:51
MidiMachineControlCommand
Definition MidiMessage.h:743
@ mmc_fastforward
Definition MidiMessage.h:747
@ mmc_deferredplay
Definition MidiMessage.h:746
@ mmc_stop
Definition MidiMessage.h:744
@ mmc_play
Definition MidiMessage.h:745
@ mmc_pause
Definition MidiMessage.h:751
@ mmc_rewind
Definition MidiMessage.h:748
@ mmc_recordStart
Definition MidiMessage.h:749
@ mmc_recordStop
Definition MidiMessage.h:750
bool isTimeSignatureMetaEvent() const noexcept
Definition MidiMessage.cpp:719
bool isActiveSense() const noexcept
Definition MidiMessage.cpp:630
bool isTempoMetaEvent() const noexcept
Definition MidiMessage.cpp:660
int getControllerNumber() const noexcept
Definition MidiMessage.cpp:504
bool isKeySignatureMajorKey() const noexcept
Definition MidiMessage.cpp:771
bool isMidiStart() const noexcept
Definition MidiMessage.cpp:795
void addToTimeStamp(double delta) noexcept
Definition MidiMessage.h:155
static MidiMessage controllerEvent(int channel, int controllerType, int value) noexcept
Definition MidiMessage.cpp:516
uint8 * getData() noexcept
Definition MidiMessage.h:848
void setVelocity(float newVelocity) noexcept
Definition MidiMessage.cpp:386
void getFullFrameParameters(int &hours, int &minutes, int &seconds, int &frames, SmpteTimecodeType &timecodeType) const noexcept
Definition MidiMessage.cpp:827
bool isHeapAllocated() const noexcept
Definition MidiMessage.h:847
void setNoteNumber(int newNoteNumber) noexcept
Definition MidiMessage.cpp:367
int getSysExDataSize() const noexcept
Definition MidiMessage.cpp:623
int getMetaEventLength() const noexcept
Definition MidiMessage.cpp:638
bool isKeySignatureMetaEvent() const noexcept
Definition MidiMessage.cpp:761
int getControllerValue() const noexcept
Definition MidiMessage.cpp:510
static MidiMessage midiStop() noexcept
Definition MidiMessage.cpp:802
double getTimeStamp() const noexcept
Definition MidiMessage.h:144
MidiMachineControlCommand getMidiMachineControlCommand() const noexcept
Definition MidiMessage.cpp:863
static MidiMessage channelPressureChange(int channel, int pressure) noexcept
Definition MidiMessage.cpp:436
static MidiMessage pitchWheel(int channel, int position) noexcept
Definition MidiMessage.cpp:484
uint8 * allocateSpace(int)
Definition MidiMessage.cpp:295
int getNoteNumber() const noexcept
Definition MidiMessage.cpp:362
bool isMidiChannelMetaEvent() const noexcept
Definition MidiMessage.cpp:661
SmpteTimecodeType
Definition MidiMessage.h:709
@ fps24
Definition MidiMessage.h:710
@ fps30
Definition MidiMessage.h:713
@ fps30drop
Definition MidiMessage.h:712
@ fps25
Definition MidiMessage.h:711
bool isMidiMachineControlMessage() const noexcept
Definition MidiMessage.cpp:854
static MidiMessage programChange(int channel, int programNumber) noexcept
Definition MidiMessage.cpp:465
static int readVariableLengthVal(const uint8 *data, int &numBytesUsed) noexcept
Definition MidiMessage.cpp:63
static MidiMessage midiChannelMetaEvent(int channel) noexcept
Definition MidiMessage.cpp:755
bool isSysEx() const noexcept
Definition MidiMessage.cpp:601
MidiMessage() noexcept
Definition MidiMessage.cpp:103
int getChannel() const noexcept
Definition MidiMessage.cpp:307
PackedData packedData
Definition MidiMessage.h:843
double getTempoMetaEventTickLength(short timeFormat) const noexcept
Definition MidiMessage.cpp:682
const uint8 * getMetaEventData() const noexcept
Definition MidiMessage.cpp:650
int getSongPositionPointerMidiBeat() const noexcept
Definition MidiMessage.cpp:786
bool isSustainPedalOn() const noexcept
Definition MidiMessage.cpp:444
static int getMessageLengthFromFirstByte(uint8 firstByte) noexcept
Definition MidiMessage.cpp:82
int getQuarterFrameSequenceNumber() const noexcept
Definition MidiMessage.cpp:808
double getTempoSecondsPerQuarterNote() const noexcept
Definition MidiMessage.cpp:669
bool isAllNotesOff() const noexcept
Definition MidiMessage.cpp:566
int getQuarterFrameValue() const noexcept
Definition MidiMessage.cpp:809
bool isSustainPedalOff() const noexcept
Definition MidiMessage.cpp:445
int size
Definition MidiMessage.h:845
bool isMidiContinue() const noexcept
Definition MidiMessage.cpp:798
static bool isMidiNoteBlack(int noteNumber) noexcept
Definition MidiMessage.cpp:918
static MidiMessage timeSignatureMetaEvent(int numerator, int denominator)
Definition MidiMessage.cpp:740
bool isChannelPressure() const noexcept
Definition MidiMessage.cpp:425
~MidiMessage() noexcept
Definition MidiMessage.cpp:289
bool isControllerOfType(int controllerType) const noexcept
Definition MidiMessage.cpp:498
static MidiMessage midiMachineControlCommand(MidiMachineControlCommand command)
Definition MidiMessage.cpp:870
static MidiMessage midiClock() noexcept
Definition MidiMessage.cpp:805
static MidiMessage allNotesOff(int channel) noexcept
Definition MidiMessage.cpp:561
bool isSoftPedalOff() const noexcept
Definition MidiMessage.cpp:451
bool isNoteOff(bool returnTrueForNoteOnVelocity0=true) const noexcept
Definition MidiMessage.cpp:346
void multiplyVelocity(float scaleFactor) noexcept
Definition MidiMessage.cpp:392
bool isMidiStop() const noexcept
Definition MidiMessage.cpp:801
static MidiMessage quarterFrame(int sequenceNumber, int value) noexcept
Definition MidiMessage.cpp:811
int getProgramChangeNumber() const noexcept
Definition MidiMessage.cpp:459
const uint8 * getData() const noexcept
Definition MidiMessage.h:849
bool isNoteOn(bool returnTrueForVelocity0=false) const noexcept
Definition MidiMessage.cpp:338
static MidiMessage masterVolume(float volume)
Definition MidiMessage.cpp:588
bool isSoftPedalOn() const noexcept
Definition MidiMessage.cpp:450
static MidiMessage fullFrame(int hours, int minutes, int seconds, int frames, SmpteTimecodeType timecodeType)
Definition MidiMessage.cpp:840
bool isQuarterFrame() const noexcept
Definition MidiMessage.cpp:807
static MidiMessage keySignatureMetaEvent(int numberOfSharpsOrFlats, bool isMinorKey)
Definition MidiMessage.cpp:776
int getPitchWheelValue() const noexcept
Definition MidiMessage.cpp:477
bool isMidiClock() const noexcept
Definition MidiMessage.cpp:804
int getChannelPressureValue() const noexcept
Definition MidiMessage.cpp:430
bool isPitchWheel() const noexcept
Definition MidiMessage.cpp:472
int getMetaEventType() const noexcept
Definition MidiMessage.cpp:632
bool isController() const noexcept
Definition MidiMessage.cpp:493
int getAfterTouchValue() const noexcept
Definition MidiMessage.cpp:406
static MidiMessage tempoMetaEvent(int microsecondsPerQuarterNote) noexcept
Definition MidiMessage.cpp:709
uint8 getVelocity() const noexcept
Definition MidiMessage.cpp:373
static PuglViewHint int value
Definition pugl.h:1708
JSAMPIMAGE data
Definition jpeglib.h:945
Definition AudioSampleBuffer.h:33
unsigned short uint16
Definition water.h:94
unsigned char uint8
Definition water.h:90
static float volume(float level)
Definition nekobee_voice_render.c:99
#define true
Definition ordinals.h:82
#define false
Definition ordinals.h:83
Definition MidiMessage.h:838
Definition MidiMessage.h:838
uint8 asBytes[sizeof(uint8 *)]
Definition MidiMessage.h:840
uint8 * allocatedData
Definition MidiMessage.h:839
typedef int(UZ_EXP MsgFn)()
#define const
Definition zconf.h:137