Forums > Max For Live

MaxMSP programmer needed

March 10, 2011 | 2:32 am

I need a Max/MSP (Max4Live) programmer to write me a patch that would emulate a hardware arranger/arpeggiator that receives input from multiple channels.

Here is what I would be using:
Ableton Live
Max4Live
MIDI accordion capable of sending multiple channels (3 channels right hand + 1 channel for left hand bass + 1 channel for left hand chords)
Yamaha MOTIF XS Rack (as a sound Module)

Here is the configuration needed:
1) Channel 3 (left hand chords of the MIDI accordion) will send chord information that would trigger Midi loops in ableton live.
2) Based on the chords I’m sending on channel 3 (C, D, Major, minor, dim, 7, etc) the MIDI loops (and perhaps audio via transposition only) in Ableton would be transposed and adapted just like in an Arranger (e.g. Yamaha PSR models, Roland G-800, Roland G-1000, Yamaha Tyros, or Roland RA-800) or like in an Arpeggiator (e.g. Yamaha Motif XS, Motif XF, Korg M-50, Korg M3, etc)
3) When note-off messages are received in the chord section (channel 3) the associated loop or loops in Ableton Live should be muted, but not stopped (e.g. Legato function – when the loop continues in syncronization but it is not heard). In other words I do not want the loop to stop being played, because this would cause the loops to fall short of being in sync.
This function is known as "Sync Off" in the Yamaha Motif, or "Arranger Hold OFF" in the Roland RA-800 or similar arranger keyboards.
4) An example of the loops that would be triggered by channel 3: a bass track, a guitar for chordal background, and drums (just for the triggering but not for chord analysis, of course).
5) The remaining channels of the accordion will be used for live instruments.

In short, I need the MAX/MSP (Max4Live) patch to emulate the function of an arranger keyboard but to include the "sync off" function of an arpeggiator or loop player such as Ableton Live.

I will attempt to draw a chart of my needs if these above descriptions are not too clear.
I’m of course willing to pay for this patch if it works and accomodates my needs.
Pay is $100-200 depending on functionality and professionalism.


March 10, 2011 | 4:38 am

I think I can do it! why don’t you give me a call at 415-205-2566 if you’d like to discuss it.
Ben


March 10, 2011 | 7:52 pm

I think you can do most of that without using Max4Live. You will probably need to analyse the bass chords, but the rest you can do with Live objects.

I can make the analyzer patch and live song template if you like. staplesyrup@gmail.com


March 10, 2011 | 7:58 pm

All the chords for input are either Major, minor, 7th, or diminished.
All the chords are made up of 3 notes.
So if all keys are considered for 4 types of chords, then there are 48 chords total (12keys X 4chord types)
The chart of the input chords needed can be found at the following link:

http://upload.wikimedia.org/wikipedia/commons/6/67/120-button_Stradella_bass_system_chart.png

More descriptive info coming up soon.
I’m working on a comprehensive chart as we speak.


March 10, 2011 | 7:59 pm

The Midi clips in Ableton should respond to incoming 3 note chords accordingly.
For example, if a C major chord is received, then the phrase (Midi clip) should be triggered in C major. If a A minor chord is received, then the phrase (Midi clip) should be triggered in A minor.


March 10, 2011 | 8:23 pm

Here is what I got so far for a sample signal path:

1) Midi Channel 3 sends one of the chords in the chord database below ->
2) Chord database is (12keys X 4chord types = 48 total possible chords) ->
3) One chord is chosen (e.g. C Major, or A minor, or F# diminished, or F7) ->
4) 3 MIDI clips in Ableton are set to receive this chord info on channel 3 (e.g. a Bass track, a Guitar track, and a Pads track – all with different rhythm patterns) ->
5) as the chord is received by the 3 Midi clips above, and then released, three things need to happen:
5A) the MIDI clips will be triggered according to the chord
5B) the "Note On" message from the 3-note chord turns "Speaker ON" (this is the Mute on/off switch found on any MIDI or audio track in Ableton) ->
5C) the "Note Off" message (when chord is released) turns "Speaker OFF" (Mute off of the MIDI or audio track in Ableton)
*** Final note on point 5A)
I do not mean a simple transposition as this would result in no difference for the MIDI clip phrase between a C major and a C minor chord. The clip needs to react based on the input notes of the chord so that C major will cause the phrase(s) to play in C major, and C minor will cause the phrase(s) to play in C minor, and same would go for 7 and diminished chords as well.

One last thing to keep in mind:
In the chord analysis design the root position must be the output. What do I mean by that? Well, since all of the chords in a stradella system of an accordion are designed within the range of one octave, only a few chords are played in root position.
For example C Major is (C, E, G – root position) but G Major is (D, G, B – 2nd inversion). It would be impossible for the G Major chord to be in root position (G, B, D) since this would mean that the D would need to be one octave above the range commonly found in stradella accordions.

My point about this is that the chord analyzer that will be developed needs to analyze inversions and output them in root position hence (D, G, B) will be analyzed as "G Major" and will be output as (G, B, D) and the same with all other chords.


March 10, 2011 | 8:28 pm

I’m pretty sure I know how to do the analysis, drop me an email. The rest can be done with Live objects. once you have the root key – you can associate whatever clips you like with the root key data as it is output from the max midi device. Using gating and legato with your clips should give a sync off effect.


March 10, 2011 | 8:44 pm

If I only have the root key then (as I said in my previous post) there will be no difference between a C Major and a C Minor or C 7 or C diminished chords. These should be 4 different chords, outputting 4 different phrases. (E.G. they should change the MIDI clip on each track accordingly).

First of all I would like to make sure that anyone who wants to take on this job first understands what my requirements are. That is because I do not want to waste anyone’s time without payment (due to a lack of understanding) and I do want to pay those who understand my requirements and can execute the necessary patch.

Thanks a lot to all for the fast, prompt responses.


March 10, 2011 | 8:54 pm

the three note chord will be processed and output as the root key data plus the type of chord data combined as a single note, transposed up between 0 and 3 octaves depending on what type of chord is input. So probably C major chord would = note 0, but C minor would = 12. Youll have a note value between 0 and 47 output from your midi device. Then you can trigger the appropriate midi clip(s) for that chord.


March 10, 2011 | 9:26 pm

You will also need to specify what happens when you press only one or two keys, or more than three, and how many keys are released to re-gate the clip

The order of the notes input will make no difference (unless you want it to), it is the combination of notes which will define the output of the analysis, so inverted chords are not a problem – the notes of the chords will be folded into a single octave range before analysis


March 11, 2011 | 1:34 am

this makes sense so far, and thanks again for the fast reply.
How about if there is a slight delay between the notes of the chord? For example, C major chord sends C first and at a small delay E, and G are then sent. Could this small delay of a few milliseconds be defined in the chord analysis engine?

IT really sounds like we are getting there. I’m excited.
Bin, do you have experience with arranger keyboards?
Which arranger keyboard have you worked with before?
I’m asking because I would like to know the best terms to use when describing these needs.
I appreciate all your efforts, and I really do believe that this will happen.

One more question.
Are you saying that the 48 chords (0-47) would trigger the same MIDI clips (3 Midi tracks) or that they will trigger 48 different pre-programmed phrases.
I would prefer it if the 48 chords would trigger and modify the existing clip of each of the 3 midi tracks as this would take much less CPU resources than having to trigger 48X3 different MIDI clips.

Thanks again. A thousand thanks so far.


March 11, 2011 | 1:44 am

Another thing to add:
I would not need to re-gate any of the clips. Let me explain:

If the Launch Mode is set to trigger, then the synchronization will always be perfect, but will continuously run. All we would need is to somehow assign the Speaker On/Off of the MIDI tracks to respond to note (chord) On/off messages.
As described in a previous post: chord input "note on" would turn speaker on, and chord input "note off" would turn the speaker off. In this way everything will always be in sync as we do not need to re-trigger anything but simply turn on/off the mute switch.
Hope this makes sense.


March 11, 2011 | 2:12 am

It doesn’t use any more CPU to trigger one of 48 clips than to modify a single midi clip 48 ways. Midi processing doesnt use much CPU, and using separate clips is far more versatile. You would not be limited to simply transposinga sequence to another key, although you can do that if you like – you’re the musician.

If you want to process the output of a midi clip based on what chord you play into your midi analyzer, then thats more complicated. You would need another midi device on the clip’s channel to process the midi.

I’ve just made a basic midi analyzer which seems to work as you described, if I play a three note chord, it correctly tells me the root key and type of chord, and triggers a corresponding clip (there are 48 of them) running in legato mode, and stops the same clip if those exact 3 notes are no longer held down. It would be straightforward to trigger 3 clips at once using group tracks.

Its not good to use mute(speaker on/off) to stop midi, since you’ll get hanging notes. its easier just to start and stop the clips. Legato mode means that they’ll stay synched if you keep the transport running.

Email me and I’ll send you a prototype song. staplesyrup@gmail.com


March 11, 2011 | 2:20 am

I understand that there are advantages and disadvantages to both ways.

My conceived way would treat the notes in the MIDI clips as rhythms and numbers from 1-3 for the notes (there are 3 note chords).

a Simple Example:
Bass MIDI clip would consist of the following rhythm in 4/4 time signature:
Dotted quarter (note 1), eight note (note 3), half note (note 1). If the chord is C major, then the output notes would be C(note 1), G(note 3) and C(note 1).

Another simple polyphonic example:
Guitar MIDI clip would consist of the following rhythm in 4/4 time signature:
Quarter (notes 1,2,3), eight note (note 1), quarter (notes 1,2), eight note (notes 1,2), quarter (notes 1,2,3). If the chord is C major, then the output notes would be CEG (notes 1,2,3), C (note 1), CE(notes 1,2), CE(notes 1,2), and back to CEG (notes 1,2,3).

My way would further be dependent on MIDI tracks as Audio tracks can only be transposed but not react to different chords unless they are simply different audio clips that match the respective chord.
My way would exhaust less CPU resources.
My way would require less preparation time as only 3 MIDI clips must be made.

Your way can use both MIDI and audio tracks.
Your way would require more preparation time, and perhaps use a bit more CPU resources.
Your way would use the LEGATO mode to keep in Sync when changing to a next clip or scene of clips corresponding to the appropriate chord number.

I will cook this in my mind a bit more tonight, and we will keep in touch.

Oh man, it makes me so hopeful that there are people out there who know how to use Max and can understand these programming principles. I’m personally an idiot in MAX. I just know what I want, and hope I’m explaining it properly. Other than that… I’m glad to have found 2 people so far who understand what I’m talking about.

Let me cook this tonight and I’ll let you know. Feel free to post your ideas or what you think might be considered software limitations.
Thanks for now.


March 11, 2011 | 2:34 am

I just realized:
Legato mode would work fine with the 48X3 clips.
Now the concern is as follows: If you played a C Major chord triggering the first group of clips and then stop the group when the C Major chord is released, then if the C Major chord will be played again it will start from the beginning and it will not be in Sync, because triggering starts at the beginning.
According to my understanding legato mode works only when switching to a different scene, and makes no difference if used on the same clip with launch mode being Gate.

Am I wrong? Is there a work around?
I will email you soon to take a look at the prototype project file.


March 11, 2011 | 2:36 am

Conforming a 3 note clip to a chord is possible, but its not going to sound nearly as interesting as if you create a clip for each chord. You could have different instruments for different chords, for example, or use different octaves, effects etc.

It would probably be possible to conform your notes without using Max, if you used automation to trigger clips that each sequenced one note, and triggered them in parallel. you wouldnt need to analyse anything.

i need to sleep , i’ll send you a patch if youre interested.


March 11, 2011 | 2:44 am

"Am I wrong? Is there a work around?"

You’re right, I overlooked that. But you can easily automate a live device such as velocity to act as a gate on that channel, and not stop the legato mode clips. I’ll have a go tomorrow. or you could trigger a blank clip.


March 11, 2011 | 2:54 am

Thanks for all your efforts.
I just sent you an email.
We can talk tomorrow if you are tired.
I am on the west coast, and you are probably in a different time zone.
But a thousand thanks, and hats off to you for all the Chat and logistics so far.
If this works, I will definitely send you the compensation.

Good night for now.


March 11, 2011 | 3:45 am

Both methods are fine, but the MIDI processing method of 3 clips on 3 MIDI tracks is preferred because it is much faster and easier to program on a per song basis.
This would be used for a live setting and would be intended to produce many songs at a high speed using the described method of 3 clips on 3 MIDI tracks. This is for my father, who is a professional accordion player with a musical database of thousands of songs in his mind. If he would have to program thousands of songs in Ableton using the 48clips X 3 midi tracks, this would take too long, and a simple arranger would be faster, except that the arranger would be lacking the "sync off" function.

I know that the 48 clips X 3 MIDI tracks offers more versatility and the possibility of incorporating Audio tracks, however the time it takes to conceive one single song (Live set) would be much more extensive. It could indeed be used for some songs as an experimental method, but it could not be the main method, as it would not be productive.

If the patch could be made using Max4Live for the purposes of simplicity, it could be similar to a loop player consisting of only 3 notes (1-3) for every instance placed on a MIDI track.
So the result would be that the Bass track could be programmed individually on its track, the Guitar individually on its own track, and the same with the pads. This would use 3 instances of the Max4Live patch (one for each of the MIDI tracks).

I know for a fact that this would be a product that many live musicians who use the arranger keyboard systems would be interested in buying, and me and my dad could be the testers and the ones who would offer suggestions for improvement of the patch on top of paying you for the fully functional patch.
Imagine that this would be like the Korg M50/M3/Oasys arpeggiator function with the possibility of creating your own arpeggios without needing the overly complicated Karma Software that contains many unnecessary parameters that are commonly used by Party Musicians.

I will create a chart in Microsoft Excel and I will post a picture for the examples of the note number relations to chord input notes.
All the best.


March 11, 2011 | 4:35 am

I have made this chart, and provided 3 different example situations (one for bass, one for guitar, and one for pads).
This would be like a combination between an Ableton Live Arpegiattor and a Max Loop player/sequencer. Adding support for saving the templates (presets) and an adaptable grid (say 1-8 measures or even 16) would make this an even more useful plug-in than the Live arpeggiator.
I have never gotten hang notes by using the "speaker on/off" function of MIDI tracks, but I do trust your opinion. I do know that hanging notes could be a pain in the butt, and perhaps I was just lucky until now, but it's never too late to get kicked with the common error.
The reason I mentioned the "speaker on/off" function is simply because it would solve the re-triggering by the same chord problem that would be caused with launch mode "Gate" and Legato to move to other clips or scenes.
Here are the pictures of how the Max Patch could be laid out.
I know it could look nicer than that, but I just made it in Excel, and I'm not a bit of an artist. :)

[attachment=156160,1908] [attachment=156160,1909] [attachment=156160,1910]

Attachments:
  1. PadsExample.png

March 12, 2011 | 12:37 am

any further thoughts?
I tried the patch you sent me, but I can’t figure out how it works.
I understood that I should play the chords on channel 2 into the analyzer. That should trigger loops on channel 1 and output on channel 3 with the synth on it.
There are no loops that are triggered, and there is no change or no response in the analyzer.

Is there a way to design it using an interface similar to the Excel Charts I’ve made in my last post?
Do you think you finally understood what my requirements were?
I needed the chords to trigger phrases on the fly.
Cheers, and talk to you soon.

Anyone else any ideas?


March 19, 2011 | 1:49 am

Hi there !

If you’re still looking for a programmer to write the patch, just drop me a line.

raga (dot) ragat (at) gmx (dot) de


Viewing 22 posts - 1 through 22 (of 22 total)