Skip to content

Commit b831e56

Browse files
authored
Introduced a data type GOMidiReceiverBase::KeyMap (#2101)
1 parent 96b40c7 commit b831e56

File tree

4 files changed

+18
-13
lines changed

4 files changed

+18
-13
lines changed

src/core/midi/GOMidiReceiverBase.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Copyright 2006 Milan Digital Audio LLC
3-
* Copyright 2009-2024 GrandOrgue contributors (see AUTHORS)
3+
* Copyright 2009-2025 GrandOrgue contributors (see AUTHORS)
44
* License GPL-2.0 or later
55
* (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
66
*/
@@ -463,7 +463,7 @@ GOMidiMatchType GOMidiReceiverBase::Match(const GOMidiEvent &e, int &value) {
463463
}
464464

465465
GOMidiMatchType GOMidiReceiverBase::Match(
466-
const GOMidiEvent &e, const unsigned midi_map[128], int &key, int &value) {
466+
const GOMidiEvent &e, const KeyMap *pMidiMap, int &key, int &value) {
467467
const GOMidiEvent::MidiType eMidiType = e.GetMidiType();
468468

469469
value = 0;
@@ -564,9 +564,9 @@ GOMidiMatchType GOMidiReceiverBase::Match(
564564
if (key > 127)
565565
continue;
566566
if (
567-
midi_map && pattern.type != MIDI_M_NOTE_SHORT_OCTAVE
567+
pMidiMap && pattern.type != MIDI_M_NOTE_SHORT_OCTAVE
568568
&& pattern.type != MIDI_M_NOTE_NORMAL)
569-
key = midi_map[key];
569+
key = (*pMidiMap)[key];
570570
if (pattern.type == MIDI_M_NOTE_NO_VELOCITY) {
571571
value = e.GetValue() ? 127 : 0;
572572
if (eMidiType == GOMidiEvent::MIDI_AFTERTOUCH)

src/core/midi/GOMidiReceiverBase.h

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
/*
22
* Copyright 2006 Milan Digital Audio LLC
3-
* Copyright 2009-2023 GrandOrgue contributors (see AUTHORS)
3+
* Copyright 2009-2025 GrandOrgue contributors (see AUTHORS)
44
* License GPL-2.0 or later
55
* (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
66
*/
77

88
#ifndef GOMIDIRECEIVERBASE_H
99
#define GOMIDIRECEIVERBASE_H
1010

11+
#include <cstdint>
12+
1113
#include "GOMidiMatchType.h"
1214
#include "GOMidiReceiverEventPatternList.h"
1315
#include "GOTime.h"
@@ -19,6 +21,10 @@ class GOMidiMap;
1921
struct IniFileEnumEntry;
2022

2123
class GOMidiReceiverBase : public GOMidiReceiverEventPatternList {
24+
public:
25+
constexpr static unsigned KEY_MAP_SIZE = 128;
26+
using KeyMap = uint8_t[KEY_MAP_SIZE];
27+
2228
private:
2329
typedef struct {
2430
unsigned device;
@@ -52,7 +58,7 @@ class GOMidiReceiverBase : public GOMidiReceiverEventPatternList {
5258
GOMidiMatchType Match(const GOMidiEvent &e);
5359
GOMidiMatchType Match(const GOMidiEvent &e, int &value);
5460
GOMidiMatchType Match(
55-
const GOMidiEvent &e, const unsigned midi_map[128], int &key, int &value);
61+
const GOMidiEvent &e, const KeyMap *pMidiMap, int &key, int &value);
5662

5763
bool HasDebounce(GOMidiReceiverMessageType type);
5864
bool HasChannel(GOMidiReceiverMessageType type);

src/grandorgue/model/GOManual.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ void GOManual::Init(
9090
m_MIDIInputNumber = 0;
9191
m_displayed = false;
9292
m_manual_number = manualNumber;
93-
for (unsigned i = 0; i < 128; i++)
94-
m_MidiMap[i] = i;
93+
for (unsigned i = 0; i < GOMidiReceiver::KEY_MAP_SIZE; i++)
94+
m_MidiKeyMap[i] = (uint8_t)i;
9595

9696
m_stops.resize(0);
9797
m_couplers.resize(0);
@@ -154,8 +154,8 @@ void GOManual::Load(
154154

155155
m_midi.SetIndex(manualNumber);
156156

157-
for (unsigned i = 0; i < 128; i++)
158-
m_MidiMap[i] = cfg.ReadInteger(
157+
for (unsigned i = 0; i < GOMidiReceiver::KEY_MAP_SIZE; i++)
158+
m_MidiKeyMap[i] = (uint8_t)cfg.ReadInteger(
159159
ODFSetting,
160160
group,
161161
wxString::Format(wxT("MIDIKey%03d"), i),
@@ -516,7 +516,7 @@ void GOManual::Update() {
516516
void GOManual::ProcessMidi(const GOMidiEvent &event) {
517517
int key, value;
518518

519-
switch (m_midi.Match(event, m_MidiMap, key, value)) {
519+
switch (m_midi.Match(event, &m_MidiKeyMap, key, value)) {
520520
case MIDI_MATCH_ON:
521521
if (value <= 0)
522522
value = 1;

src/grandorgue/model/GOManual.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ class GOConfigReader;
2727
class GOConfigWriter;
2828
class GOCoupler;
2929
class GODivisionalButtonControl;
30-
class GOMidiEvent;
3130
class GOStop;
3231
class GOSwitch;
3332
class GOTremulant;
@@ -55,7 +54,7 @@ class GOManual : public GOControl,
5554
std::vector<unsigned> m_Velocity;
5655
std::vector<unsigned> m_DivisionState;
5756
std::vector<std::vector<unsigned>> m_Velocities;
58-
unsigned m_MidiMap[128];
57+
GOMidiReceiver::KeyMap m_MidiKeyMap;
5958
unsigned m_manual_number;
6059
unsigned m_first_accessible_logical_key_nb;
6160
unsigned m_nb_logical_keys;

0 commit comments

Comments
 (0)