monocasual / giada

Your Hardcore Loop Machine.
https://www.giadamusic.com
GNU General Public License v3.0
1.67k stars 98 forks source link

MIDI NoteOff issue #118

Open mxmilkiib opened 7 years ago

mxmilkiib commented 7 years ago

I'm using a Korg nanoKONRTOL2. With "Device does not send MIDI off" off, a button assign to the sequencer x2 and /2 triggers twice, on on and off. A knob or fader assigned to input or output volume works. With "Device does not send MIDI off" on, the sequencer length change works, but the MIDI leart hexcode is set to where the fader or dial is at the point of movement after clicking 'learn'.

monocasual commented 7 years ago

Hi @milkmiruku, you wrote

but the MIDI leart hexcode is set to where the fader or dial is at the point of movement after clicking 'learn'.

Could you please elaborate it a bit more? It would be great if you could provide the steps to reproduce the issue.

mxmilkiib commented 7 years ago

With "Device does not send MIDI off" disabled;

Setup global MIDI input, click 'input volume' learn, turn first dial on the first channel of the controller, MIDI inspection shows CC 16 going between 0-127, learnt in Giada as '0xB01000' and the input volume GUI dial turns as I turn the controller dial.

Click 'sequencer %2' learn, press the marker left button on the controller, inspection shows CC 61 value 127 on press and CC 61 value 0 on release. Giada notes '0xB03D00'. Same for the marker right button and 'sequencer x2', CC 62, 127 on, 0 off, Giada showing '0xB03E00'.

Pressing either the marker left or right button and Giada executes a sequence increase/decrease, but then it does the same releasing the button, so going from 2 to 8 to to 32. (Occasionally Giada crashes at this point.)

After enabling "Device does not send MIDI off", the marker buttons change the sequence length properly, though on release rather than press. The MIDI learn dialog still shows the same hex codes though.. If I now relearn with the same buttons, the codes change to '0xB03D7F' and '0xB03E7F' respectively. (If I were to turn "Device does not send MIDI off" off at this point, nothing happens on pressing or releasing the buttons.)

Now when I then use the first dial to change the volume (which Giada displays as being at 100%), nothing happens until the dial is turned to the far left (CC16 value 0), at which point the volume displayed jumps to 0%.

The MIDI learn dialog box still displays '0xB01000'. When I click learn again, the code depends on the [next] state of the dial. If I monitor the dial, turn almost all right and get it to value 126, click learn and turn it right all the way, it gets the code of '0xB0107F'.

With Giada now displaying the volume level at 100%, I turn it and nothing happens. If I then click learn and the dial is roughly in the middle, I get 0xB01040 learnt. If I continue to turn the dial the same way as I did to trigger the learn, nothing happens, with the GUI displaying 100% still. When I turn the dial back and go past that new learnt value again, the GUI volume jumps to roughly half way.

If I continually click the learn button whilst turning the dial, the last two values keep changing to the hex of the CC value at that point.

I hope this helps somewhat! I'm happy to add any more info if required.

tblrchstr commented 5 years ago

The entire Note Off management has been overhauled in commit ea568db9f37deadfabcb52b35ea52aba48a910d8. Feedback welcome...

tomek-szczesny commented 5 years ago

Currently Giada doesn't support Control Change ("CC", 0xB***) messages for buttons too well. I have the same issue trying to assign some Launchpad buttons to global settings. Pressing and releasing a CC button toggles the play/stop button twice. As far as I'm concerned, most manufacturers, when using CC for buttons, use separate values (velocities) for button press and release events, but specific values vary from one manufacturer to another. Currently, Giada discards CC message value (velocity field) during midi learn. My suggested solution is to always learn the whole MIDI message, including value field. Then modify handling of knob-oriented values in giada::m::midiDispatcher::processMaster() to strip off the value field exclusively for them.

monocasual commented 3 years ago

Moving this to milestone 1.future, will be addressed by #375 among other things.