LMMS
Loading...
Searching...
No Matches
juce_MPEUtils.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23namespace juce
24{
25
26//==============================================================================
38{
39public:
45
50 MPEChannelAssigner (Range<int> channelRange = Range<int> (1, 17));
51
64 int findMidiChannelForNewNote (int noteNumber) noexcept;
65
69 int findMidiChannelForExistingNote (int initialNoteOnNumber) noexcept;
70
77 void noteOff (int noteNumber, int midiChannel = -1);
78
80 void allNotesOff();
81
82private:
83 bool isLegacy = false;
84 std::unique_ptr<MPEZoneLayout::Zone> zone;
86
87 //==============================================================================
89 {
92 bool isFree() const noexcept { return notes.isEmpty(); }
93 };
94 std::array<MidiChannel, 17> midiChannels;
95
96 //==============================================================================
97 int findMidiChannelPlayingClosestNonequalNote (int noteNumber) noexcept;
98};
99
100//==============================================================================
108{
109public:
111 static const uint32 notMPE = 0;
112
115
116 //==============================================================================
126 void remapMidiChannelIfNeeded (MidiMessage& message, uint32 mpeSourceID) noexcept;
127
128 //==============================================================================
130 void reset() noexcept;
131
133 void clearChannel (int channel) noexcept;
134
136 void clearSource (uint32 mpeSourceID);
137
138private:
140
143
147
148 //==============================================================================
149 bool applyRemapIfExisting (int channel, uint32 sourceAndChannelID, MidiMessage& m) noexcept;
151
152 void zeroArrays();
153
154 //==============================================================================
155 bool messageIsNoteData (const MidiMessage& m) { return (*m.getRawData() & 0xf0) != 0xf0; }
156};
157
158} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
static void message(int level, const char *fmt,...)
Definition adplugdb.cpp:120
Definition juce_Array.h:56
int numChannels
Definition juce_MPEUtils.h:85
int midiChannelLastAssigned
Definition juce_MPEUtils.h:85
bool isLegacy
Definition juce_MPEUtils.h:83
int firstChannel
Definition juce_MPEUtils.h:85
int findMidiChannelPlayingClosestNonequalNote(int noteNumber) noexcept
Definition juce_MPEUtils.cpp:134
int lastChannel
Definition juce_MPEUtils.h:85
std::unique_ptr< MPEZoneLayout::Zone > zone
Definition juce_MPEUtils.h:84
int findMidiChannelForExistingNote(int initialNoteOnNumber) noexcept
Definition juce_MPEUtils.cpp:87
MPEChannelAssigner(MPEZoneLayout::Zone zoneToUse)
Definition juce_MPEUtils.cpp:26
std::array< MidiChannel, 17 > midiChannels
Definition juce_MPEUtils.h:94
int findMidiChannelForNewNote(int noteNumber) noexcept
Definition juce_MPEUtils.cpp:50
int channelIncrement
Definition juce_MPEUtils.h:85
void noteOff(int noteNumber, int midiChannel=-1)
Definition juce_MPEUtils.cpp:97
void allNotesOff()
Definition juce_MPEUtils.cpp:123
int firstChannel
Definition juce_MPEUtils.h:142
int lastChannel
Definition juce_MPEUtils.h:142
void reset() noexcept
Definition juce_MPEUtils.cpp:213
void zeroArrays()
Definition juce_MPEUtils.cpp:273
void remapMidiChannelIfNeeded(MidiMessage &message, uint32 mpeSourceID) noexcept
Definition juce_MPEUtils.cpp:168
bool messageIsNoteData(const MidiMessage &m)
Definition juce_MPEUtils.h:155
MPEZoneLayout::Zone zone
Definition juce_MPEUtils.h:139
bool applyRemapIfExisting(int channel, uint32 sourceAndChannelID, MidiMessage &m) noexcept
Definition juce_MPEUtils.cpp:236
static const uint32 notMPE
Definition juce_MPEUtils.h:111
int getBestChanToReuse() const noexcept
Definition juce_MPEUtils.cpp:252
uint32 counter
Definition juce_MPEUtils.h:146
void clearChannel(int channel) noexcept
Definition juce_MPEUtils.cpp:219
void clearSource(uint32 mpeSourceID)
Definition juce_MPEUtils.cpp:224
uint32 sourceAndChannel[17]
Definition juce_MPEUtils.h:144
int channelIncrement
Definition juce_MPEUtils.h:141
uint32 lastUsed[17]
Definition juce_MPEUtils.h:145
MPEChannelRemapper(MPEZoneLayout::Zone zoneToRemap)
Definition juce_MPEUtils.cpp:157
Definition juce_MPEZoneLayout.h:121
MPEZone Zone
Definition juce_MPEZoneLayout.h:216
Definition juce_MidiMessage.h:35
Definition juce_Range.h:40
unsigned * m
Definition inflate.c:1559
Definition carla_juce.cpp:31
unsigned int uint32
Definition juce_MathsFunctions.h:45
Definition juce_MPEUtils.h:89
int lastNotePlayed
Definition juce_MPEUtils.h:91
Array< int > notes
Definition juce_MPEUtils.h:90
bool isFree() const noexcept
Definition juce_MPEUtils.h:92
#define const
Definition zconf.h:137