Midi notes with function
Hi list,
I’m trying to do a patch which could play midi notes with function.
I cannot find a solution to achieve it.
For exemple, in the exemple below, I would like the function object plays all notes it passes on when is descending or ascending but hold the notes during the flats phases (the note number 49 is this case). With my method, the problem is the flat phases just hold during the duration I give to the makenote object.
I’m sure my snapshot method is not the good way to achieve that. I guess I would have to use a kind of legato system (as long as a new note isn't play, the program should continue to hold the note played before)
Someone knows how I could make this working ?
Hope I was clear enough.
Thanks a lot for your help !
P.S : don't forget to put the audio on to make the patch works.
M.
You could just send all_notes_off (123 0) before each note.
oh that's perfect !
Thanks a lot !
Ok the broc's solution works well ! but the problem with this method, it's it makes too short notes.
I would prefer to use an other system to choose the length of the notes.
Someone have an other idea ?
thanks !
one idea:
detect pairs of equal values in function list
then you can separate this "long" notes from the rest short ones
which could still be genearated using makenote
the long notes should be generated as note on only, sustain till next short note gets sent out. which can be easily done.
yes, i guess it would be the best solution, to have two differents groups of notes. But how to achieve that with the function object ?
thanks a lot for your help
it depends really on what length of notes, number of voices etc you want to produce.
And if you need exact length values, or just want to avoid
mono synth , and want to add a bit sustain, overlapping notes.
poly 1 1
would have worked same as that all notes off, (CC 123 0 )
poly 2 1 with max 2 voices
would make fast notes overlapping, but would left 2 notes hanging when long one gets played.
Detecting pairs of equal notes, matching them to bang flush would solve that
try if it sounds ok for you
-----
other option would be to use makenote
here is another patch, you can switch between 2 options
I prefer poly version, because very fast notes ramp into makenote
creates sostenuto, does not sound ok for me ...
oh it seems great ! But I don't understand why my function object cannot play the full function line. It stops after the first breakpoint. I already had problems of strange behaviour with function in the past. Maybe a problem with Max7 ?
Can't say, I used max 8.
Will try to check it later today, could be something to do with output format to line object
I replaced signal version of line thinking it is not needed.
before Max 8, line object was not multisegment capable.
That's why it stops.
Signal version as you had it in original patch should work.
Here is patch for Max 7, using few objects to add line multisegment
function as it is in Max 8 .
You can peek into patcher LineSeg-Max7
sorry my late answer ... I didn't have time to check it theses last days.
Thanks a lot ! it seems working well ! I will try to experiment more and I will do a feedback !
Merci encore.
M.
Hello,
I come back to this post, and now i'm on Max 8, it works great ! Thanks a lot Source Audio !
In my original patch, I was using a quantizer which permits to play major scale or minor scale. This new patch seems a bit complex for me and I don't know how I can adapt on it. Does anyone have an idea ?
Thanks again!
Why don't you post that patch so that one can see how you implemented that
major or minor scale quantiser and in which tonality ?
Then it should be easy to insert it somewhere, I guess.
If you just remove notes that don't fit in the scale,
rest of the notes will get longer in poly version, or you get pauses in makenote version.
If you replace non-scale notes with ones that belong to scale,
by shifting them either down or up, you will get repeated notes in poly,
in makenote depends on trigger mode and set note length.
I guess you understood the difference between poly and makenote versions ?
Thank for you help !
yes it will be easier with the patch - i put in in attached files because there is a subpatch for the quantizer.
it's a version i did with max7 where I used the line~
i'm pretty sure the quantizer can be better - maybe it could be a good idea to remove notes more than repitch them like I do.
My idea will be my function lines (which create melodies) are the most elastic as possible....
1 cut this patchcord

2 insert another change object after LineSeg

3 insert your chord/scale subpatch there

You will have no repetitions like that.
I would take that quantizer out of subpatch and simplify it...
P.S.
looking at it, I see you have some calculation mistakes, and
some scales result in illegal numbers like -1 or 128.
You must insert split 0 127 after that quantizer to avoid midi chaos.
Or fix it where it happens.
Maybe a better way would be to fill the coll with only matching notes per scale
and play only them, instead of creating transpositions, and then filtering repetitions out ...
oh great ! it works perfectly !
and thanks also for the quantizer - I put a split object just after it.
you have another little mistake there
in menu
pentatonique_mineurn , it should be
pentatonique_mineur
otherwise that scale will not get recalled.
-----
here is your patch a bit modified with option
to pass only matched notes.
That would be red coll.
---
And another approach, much simpler,
uses notes per octave to match scales and chords.
Fixed coll min - maj to minor major
ha yes the second approach is clearly simpler !
thanks a lot for all your help,
M.
I finally also produced a mistake.
You named minor chord min.
sending min to coll is a function - to get the lowest value,
so recalling a min won't do anything.
I replaced that patch with fixed one,
min is now stored as minor maj as major.
sorry but the patch seems not working here. Do you know why ?
For exemple if I put in "C" + "minor", it should pass just on C D# G, no ?
sorry, I forgot completely to filter the list.
here is corrected again patch
I placed wrong zl filter instead of zl sect, that's why it did not work.