Velocity output is normalized using the Kineme Global Input All MIDI Notes, correct? Seems I am getting only 1's and 0's for velocity, like gates. What am I missing?
Here's a qtz. Needs midi input. Any help understanding what's going on with the Kineme midi patch, or advice on other good ways to get midi velocity, would be greatly appreciated.
Edit: attached a Live project file as well as a test .mid file to demonstrate "problem" (bug? expected behavior?). I am using an IAC midi port. The general question is, how can I get polyphonic velocity into QC as a structure?
And one more qtz, not using kineme, using stock Midi Notes Receiver patch instead. I'm probably doing something stupid -- getting what looks like good data when rolling over ports but not rendering inside the iterator.
First thing to note here is to change the middle C on the MIDI note receiver down two octaves to 3. There is lots of information on this around. Its not a bug just the way QC handles things
Thanks itsthejayj, good to know the Kineme patch is working for you. I do have the version of MidiTools dated from 2008, but I still can't access the webpage to try anything newer. Hope it works like you say!
Transposing octaves is not the issue. It's only velocity that's not working. I have behavior as expected for gates.
And, actually, the Toneburst javascript midi detector is quite a nice thing to explore without the Kineme plugin.
The structure returned by Kineme's Global Input All MIDI Notes is not sorted, it is keyed. So for example the Note 60 on/off value is somewhere in the "Gates" substructure, with the key "gate_60", and the Velocity value for Note 60 is somewhere in the Velocity substructure with the key "velocity_60". Therefore your iterator needs a bit of logic to pull together the gate 60 and velocity 60 values to present on the color organ. Same goes for "Pressure" if you receive after-touch from your MIDI input source.
I have attached a version that does this key-extraction logic, and also added a pressure sensitivity so the notes get wider if the pressure is higher.
That's the one, harrisonpault -- keyed structures -- great answer! And the method you used for string / key matching is enlightening as well (for this non-programmer). Thanks a ton.
And, yes, the beta testing setting was unchecked in my account. And yes, I see now that velocity works with the newer and not with the older version. It's been selected since I started using kineme stuff. I forgot about it and somehow it got unchecked. Who knows how. Sigh. Thanks for your patience.
As a footnote, Pressures in the Kineme patch is technically AfterTouch, according to the midi spec, since it is per note (whereas pressure is one message for the entire keyboard).
So everything works as expected, except I want to add a feature, which introduces another problem:
I'd like to use Structure Range before the Iterator for midi keyboards with different amounts of keys. However, the "gate_", "velocity_" and "pressure_" key structures are not sorted.
Hoping Structure Sort could do the job but I can't get it to work. Then there's javascript, which might be good because there's always 128 members that always need to be in the same order (though will Gates, Velocities and Pressures match up if sorted?). I'm digging around looking for solutions in JS but can't get it yet. Sigh.
This solution uses a separate iterator for sorting. Using harrisonpault's nice method for removing / replacing strings within keys, sorted members are queued for output. This sorted structure then gets sent to the next iterator with consumer patches. This allows doing stuff between the iterators, like setting structure range for number of members, for midi input devices with specific numbers of keys, etc. :)
Also, searching Kineme for MidiTools leaves me with "Access Denied" when trying to visit the "official" page(s)....
Here's a qtz. Needs midi input. Any help understanding what's going on with the Kineme midi patch, or advice on other good ways to get midi velocity, would be greatly appreciated.
Edit: attached a Live project file as well as a test .mid file to demonstrate "problem" (bug? expected behavior?). I am using an IAC midi port. The general question is, how can I get polyphonic velocity into QC as a structure?
And one more qtz, not using kineme, using stock Midi Notes Receiver patch instead. I'm probably doing something stupid -- getting what looks like good data when rolling over ports but not rendering inside the iterator.
Just found this post, which might provide some answers: http://kineme.net/forum/Discussion/DevelopingCompositions/MIDINoteDetect...
Still, if anyone has a chance to look, maybe someone has some insight.
This seems to be working fine for me!? midi velocity are being displayed. And the composition seems to be working as it is meant to be.
I am using MIDI tools dated June 23 2009
First thing to note here is to change the middle C on the MIDI note receiver down two octaves to 3. There is lots of information on this around. Its not a bug just the way QC handles things
Thanks itsthejayj, good to know the Kineme patch is working for you. I do have the version of MidiTools dated from 2008, but I still can't access the webpage to try anything newer. Hope it works like you say!
Transposing octaves is not the issue. It's only velocity that's not working. I have behavior as expected for gates.
And, actually, the Toneburst javascript midi detector is quite a nice thing to explore without the Kineme plugin.
Velocity is working as expected, you need the new midi tools plugin.
Sound like you haven't ticked the beta tester box in your kineme account settings.
Goto my account bottom left of this page, then in edit tick the box that says I would like to beta test new and updated software.
then go to http://kineme.net/release/MIDITools/20090623
watchout of the global midi note out bug though.
Incidentally i'm currently working on using OSC to output my midiclip information to quartz composer, no need for an IAC driver :)
The structure returned by Kineme's Global Input All MIDI Notes is not sorted, it is keyed. So for example the Note 60 on/off value is somewhere in the "Gates" substructure, with the key "gate_60", and the Velocity value for Note 60 is somewhere in the Velocity substructure with the key "velocity_60". Therefore your iterator needs a bit of logic to pull together the gate 60 and velocity 60 values to present on the color organ. Same goes for "Pressure" if you receive after-touch from your MIDI input source.
I have attached a version that does this key-extraction logic, and also added a pressure sensitivity so the notes get wider if the pressure is higher.
cheers, Paul
That's the one, harrisonpault -- keyed structures -- great answer! And the method you used for string / key matching is enlightening as well (for this non-programmer). Thanks a ton.
And, yes, the beta testing setting was unchecked in my account. And yes, I see now that velocity works with the newer and not with the older version. It's been selected since I started using kineme stuff. I forgot about it and somehow it got unchecked. Who knows how. Sigh. Thanks for your patience.
As a footnote, Pressures in the Kineme patch is technically AfterTouch, according to the midi spec, since it is per note (whereas pressure is one message for the entire keyboard).
http://home.roadrunner.com/~jgglatt/tech/midispec/pressure.htm
So everything works as expected, except I want to add a feature, which introduces another problem:
I'd like to use Structure Range before the Iterator for midi keyboards with different amounts of keys. However, the "gate_", "velocity_" and "pressure_" key structures are not sorted.
Hoping Structure Sort could do the job but I can't get it to work. Then there's javascript, which might be good because there's always 128 members that always need to be in the same order (though will Gates, Velocities and Pressures match up if sorted?). I'm digging around looking for solutions in JS but can't get it yet. Sigh.
This solution uses a separate iterator for sorting. Using harrisonpault's nice method for removing / replacing strings within keys, sorted members are queued for output. This sorted structure then gets sent to the next iterator with consumer patches. This allows doing stuff between the iterators, like setting structure range for number of members, for midi input devices with specific numbers of keys, etc. :)