JeffMcClintock / SynthEdit-Tracking

Use this to report bugs in SynthEdit
1 stars 0 forks source link

MPE Note N## P## mis-match Bug #2

Open DavidsonAudioMulti opened 1 month ago

DavidsonAudioMulti commented 1 month ago

I notice an issue that happens when MPE is on and I play mulitple fingers on the same note.. I will try to explain on the SeaBoard block controller you can play/trigger the same note on a note that is already held. For instance lets say key 60 so you are holding down this key then with another finger you can press again on that 60 key and trigger another note on that same key having 2 or more note 60s triggered. In mpe this is possible to do but something happens after playing for a bit on the monitor to these keys that have been played for a little bit.

At first they appear like this inline 0

but about a little bit of triggering multi finger presses on the same note.. disregard that it is note 73, it could do the same for 75 etc is is just example of what it looks like on the monitor. inline 1

That note will ultimately end up coming through the monitor looking like this P73 so instead of like (73, .8) it changes to (5,.8)P73 and stays that way until resetting the plugin.

Once it does this switch the note starts to behave odd. Like doubling or drop outs. I wonder what the difference is on the monitor why would notes that have multi played fingers on one note switch the monitor output like this? Could this be a bug? I notice odd behavior in the same note after it is shown as such on the monitor in MPE mode.

I looked at the midi monitor code and it appears that the P means the pitch is off for that key after it gets stuck like this.

 // display pitch if not default for that key

            case gmpi::midi_2_0::NoteOn:
            {
                const auto note = gmpi::midi_2_0::decodeNote(msg);
                const auto keyNumber = static_cast<uint8_t>(static_cast<int>(floorf(0.5f + midi2NoteTune[note.noteNumber])) & 0x7f);
                midi2NoteToKey[note.noteNumber] = keyNumber;
                float tempPitch = midi2NoteTune[note.noteNumber];
                if (gmpi::midi_2_0::attribute_type::Pitch == note.attributeType)
                {
                    tempPitch = note.attributeValue;
                }
                oss << L"Note On  (" << note.noteNumber << ", " << std::setprecision(2) << note.velocity << ")";
                // display pitch if not default for that key
                if (tempPitch != (float)note.noteNumber)
                {
                    oss << " P" << tempPitch;
                }
            }

Sometimes it happens right away, sometimes it takes several multi finger presses and then it will start happening eventually. It resets this state for the key after restarting the plugin but won't go back if not resetting the whole plugin. If you do one press then the second press on that key slides a bit over it tends to happen quicker.

inline 0 One last thing this also happens before the poly container/ mdid2cv container, right out of the midi input. Should be note 68 below but thinks it is note 4 bent maybe not sure what is happening? For sure it happens when 2 or more note presses on the same key with different fingers. inline 0

JeffMcClintock commented 1 month ago

@DavidsonAudioMulti thankyou, I tried this scenario but don't think I experienced the issue.

If you have time are you able to connect a 'MIDI Recorder' module to record the MIDI from the 'MIDI In'? If you can attach the recorded file, it should enable me to reproduce the issue.

DavidsonAudioMulti commented 3 weeks ago

ProjectMidi.zip Above is a midi recording inside SE not sure if it is capturing midi 2.0 note expression/groups etc. To reproduce you can play overlapping notes on the same note with seaboard after awhile they will get stuck like in the video link.

Video Link https://drive.google.com/file/d/1xxrR1nf6wfPz0r6l4blr0pAeWpirh6sk/view?usp=sharing

What happens is the Nxx number changes and gets stuck then the Pxx number shows up. It appears stuck until resetting the plugin. Not sure why it is thinking the N number is so different like Nxx 1 or 7 would be super low notes if triggering 46. The pitch can get stuck at an offset and the N note won't match after this point so it makes anticipating a note number not possible.

Let me know if this midi is ok I looked at it and could not see much controller data not sure if it is capturing everything needed to reproduce.

Thanks!

JeffMcClintock commented 3 weeks ago

@DavidsonAudioMulti

In SynthEdit, MPE is converted to MIDI 2.0 While MPE uses 'channel rotation' to handle multiple notes at the same pitch, MIDI 2.0 in SE uses 'key rotation'.

e.g. in MPE you might get say key number 60 played on channel1 and then key 60 again on channel 2 wheras in MIDI 2.0, you might observe key 60 played on Chan1 and then key 1 played also on Chan1. except key 1 will have been retuned to the same pitch as key 60.

You will see this in the MIDI monitor as like: 2C1 Note On( 1, 0.6 ) P60

2 - means MIDI 2.0 C1 - means channel 1 (1 - means key number 1 , 0.6) - means velocity of 60% P60 means the key is retuned to the same pitch as key 60 normally is.

Does this explain the behavior that you are observing?

DavidsonAudioMulti commented 3 weeks ago

Yes that is what I am observing it gets stuck on Pxx after a little of playing, that the notes won't match like Nxx group. Also the pitch or tune can get stuck offset.

At first all notes have a Nxx number in midi 2.0 monitor simply hit two same notes is fine you see Pxx 1 2 etc created, but then after a while they get STUCK on Pxx for single notes first only notes and start behaving badly. Some things that can happen double notes while one stuck Pxx note held, offset pitch on the note.

So at first the behavior is correct while two notes are playing on same key after release one key will play the regular Nxx note after a while it gets stuck and the pitch as always bent for that key until plugin resets.

It should not be a Pxx note if only one note is playing and that it happens intermittently or gets stukc like this intermittently seems to cause issues.

JeffMcClintock commented 2 weeks ago

@DavidsonAudioMulti Thanks for that. I was not able to reproduce this using my Roli Seaboard controller.

I think what would help is to have a capture of the MIDI from your controller. Before it gets into SynthEdit. Perhaps you could record a performance in your DAW, that causes a SynthEdit MPE plugin to show the bug/s?