Here is a scriptlet that allows you to “quantize” played notes to different scales:
Scale_Quantize_V1_0.gig (390.2 KB)
Here is a scriptlet that allows you to “quantize” played notes to different scales:
Scale_Quantize_V1_0.gig (390.2 KB)
OK, done here: [Gig] Scale Quantize
~
Just noticing that we have 99 “Gig and Rackspace files” overall ![]()
Who wants to break the line with a 100th one? ![]()
Hi.
A report, in case I’m not the only one - I don’t know the experience of others, but I have experienced stuck notes somewhat often with this scriptlet. (Using Linnstrument and Roli Seaboard Rise 2 controllers)
When I 1-for-1 replaced it inline with Scaler* instead, the stuck-note problems ceased (as did the MPE data, ouch!).
I quite like the design and flexibility for future editing of this script, but the stuck notes are a showstopper for me.
If others have experienced this too, then perhaps the problem could be diagnosed. OTOH, if I am the only one in the world with this experience, well, that’s the very definition of a “personal problem”!
What exactly did you do to get stuck notes?
Umm, played them? (Oh, and then released them!)
I think it might have something to do with the MPE datastream, but have not tested deeply to confirm.
OK, sure …
but what did and how did you play?
Only single notes or polyphonic notes?
Did you hold notes while playing others?
Did you use the sustain pedal.
Did you swipe notes like a hammond player?
Did you play with your hand like a percussionist?
Did you use pitchbend wheel while playing?
Did you use global transpose while playing?
Did you bypass/unbypass plugins while playing?
Did you move widgets while playing?
Did you use Patch persist?
One might almost say the diagnosis has begun …
Only single notes or polyphonic notes? Poly in general, but I think I’ve observed it for repeated singles also
Did you hold notes while playing others? Sure, in general
Did you use the sustain pedal. No
Did you swipe notes like a hammond player? No
Did you play with your hand like a percussionist? No
Did you use pitchbend wheel while playing? No
Did you use global transpose while playing? No
Did you bypass/unbypass plugins while playing? No
Did you move widgets while playing? No
Did you use Patch persist? ?
What is Scaler* ?

Maybe that is a hint?
As per the asterisk, which rendered as a dot, Scaler is a commercial plugin - one which among other things, does scale quantization.
I use NewStroke mode here, as this is the behavior I prefer.
I did try the others just to see it they solved the problem, but they did not.
Ok, so you found an easy way to get stuck notes?
When you post that the developer of that scriptlet maybe fixes the issue.
Further testing seems to show that speed of playing does seem to have some relevance.
Here are two pictures of a short datastream ( C C C D), played quickly, before and after the block.

Before:

After:

Notice that in the After datastream, the Note Off for the first Ch13 C4 came out ahead of the Note On.
This did not happen when I played the same sequence more slowly.
Is this perhaps because different callbacks may take different amounts of time to process, and thus the supposed “first” callback is not guaranteed to complete before the “following one”? (Just speculation on my part.)
Each callback completes before the next one is triggered.
I use the scriptlet from time to time without any problems.
I can take another look at the code when I get a chance.
The only thing I noticed in your example is that you send the sounds on different midi channels. Why is that?
Do you also have problems when you play a scriptlet with only one channel?
Please show me all your settings of the scriptlet.
Hi. I’ve almost solved this.
It is necessary to change the NoteTracker_XX() calls to be MultiChannelNoteTracker_XX() calls.
I have a working script now, but I’m trying to figure how to use MakeMidiMessage3( ) instead of MakeNoteMessageEx() - just because the latter is deprecated, so might as well replace it now!
Or separate your signals and route each channel to its own scriptlet.
But yeah, might as well update the scriptlet for future use.
I think I need technical advice about this.
Is there a way to promote or cast or convert a NoteMessage to a MidiMessage?
Consider the case of a script which works as intended using the (deprecated)
function MultiChannelNoteTracker_GotNote (mt : MultiChannelNoteTracker, note : NoteMessage)
One can’t just replace it with the (doc recommended)
function MultiChannelNoteTracker_GotMidiMessage (mt : MultiChannelNoteTracker, m : MidiMessage)
instead, because the 2nd argument differs in type.
(Working code, with deprecated function)
Scale Quantize 01c.zip (2.5 KB)
You’d better not be able to replace it — that’s the whole point of strong typing. That MultiChannelNoteTracker requires (and only handles) note messages. So forcing the type to be a NoteMessage enforces the requirement.