ncassetta / NiCMidi

A MIDI C++ library with objects for reading, writing, playing, editing and recording midi files
GNU Lesser General Public License v3.0
2 stars 1 forks source link

Feature request: allow RPN/NRPN messages #10

Closed goofy2k closed 1 year ago

goofy2k commented 2 years ago

For discussion. Please let me know if I overlook a different way to implement this.

Some sound generating devices may use use RPN/NRPN messages for special controllers. These may involve raw messages longer than 3 bytes. See e.g. 9_MIDI_code.pdf

NiCMidi msg.cpp only deals with a max. length of 3 messages. Access to the individual bytes goes via functions where the byte number is hard-coded (e.g. msg.GetByte1()).

To prevent gross reorganisation of msg.cpp and classes that use it it could be helpful to enable at least passing incoming long RPN/NRPN messages to the output.

If the proposed approach is indeed useful, I will try to find a way to implement this. I am also implementing dealing with NRPN messages in my synth.

[EDIT]

ncassetta commented 2 years ago

I knew that an RPN or NRPN message was a set of 4 Control Change messages: Bn 64 Bn 65 (for the parameter number) Bn 06 Bn 26 (for data entry 14 bit) I didn't know the existence of 5 bytes messages

goofy2k commented 2 years ago

See the 18th slide in this doc. With Bn 06 the message can be extended from 3 to 5 bytes by using 0x38 as the 4 th byte: 9_MIDI_code.pdf

But using 5 bytes may be not compliant with the MIDI-BLE standard: rp52public.pdf

I will postpone this for later. So forget about the request :-) Nevertheless it may be useful for to have the feature in you lib later (depending on the area of use of course)