Midi learning tools for max, help needed
I just bought an electronic drumkit which i use to practice playing the drums.
I know a few high-end electronic kits who have some learning functionality like a metronome
or a rhythm gate. But i have a kit without this kind of functionality. So i thought it was nice
to try and build some max patches to support my learning. But because i am pretty new to max i would like some
help and or pointers.
Here is what I would like to build.
1: A metronome (tempo, 1/32,1/16,1/8 etc…) , I think i should be able to build this by myself.
2: I want some kind of patch which can compare my input midi notes against a predefined midi file.
and i want to see if i missed of hit the note (a bit like guitar hero ;)). I also want to be able
to define the accuracy. I think this is the part i need the most help with.
3: Midi gate. Just like number 2 but i only want to here a note when it is played correctly.
I guess i need the most help with part 2. Maybe you can suggest objects i can use or point me to patches which already do this kind of stuff. I already found the suivi object but i don’t need a note follower. So every tip or pointer is welcome!
I’ve been waiting to see if there were any responses to this question; nothing yet? The question you pose is exactly the type of thing Max is particularly good at so you’re in the right place. Can I suggest that, if you haven’t done so already, you look at the Max tutorials, esp those on MIDI and Data Handling. The individual helpfiles for every object in MaxMSP/Jitter are also very useful, as they contain examples of typical usage. Look at the helpfiles for midiparse, select, route, counter, timer and gate; also look at the [transport] object. In your Cycling74 folder there are also some very good examples (funnily enough, in a folder called……."examples"); I’m not in front of Max right now, so I can’t be more precise……..but i’ll have a look at this again when I am.
thank you brendan for replying. I think you are right and i am actually in the process of doing all the tutorials and looking at the examples. So i guess most of the things i can do myself. The only thing i think is a bit difficult is the accuracy thing. I want to define a certain accuracy in which the notes have to be played at the input compared to a midi file.
I thought about pre processing the midi file so that all notes are a percentage longer at the beginning and at the end.
One question I forgot to ask is, are you planning to use the patch for live midi input, or to process a pre-recorded midi file? In either case I think all you’re really asking Max to do is process a stream of midi note-numbers, determining when they are input and if they coincide with a predetermined ‘clock’, set to subdivisions of the main beat.
Besides the resources I suggested, this forum itself is also a vast repository of ‘received knowledge and wisdom’; use the search tool and look for terms or phrases such as "midi quantize" "midi timing" "transport" "time signature" etc.
Keep us informed of your progress
…one quick way to set your ‘timing resolution’ or accuracy is to use a [gate]: a ’1′ message into left inlet opens the gate; also send that message to a [pipe] object, connected to a ’0′ message (which closes the gate. The right inlet to [pipe] sets the delay time, and effectively lets you control how long or short the gate is open for; small values = tight accuracy, larger values = more forgiving.
Here’s a reeeeal basic patch:
----------begin_max5_patcher---------- 741.3oc0XtsbaBCDF9ZmYx6fFtNMUG.CzGjdSmLcjwJ1JEjX.4F2lou6UZkg PiCiA7g5bCx57+9wtKR9kauYVvB8VQc.5KnuglM6EaKyf1bsLqogYAE7sY47 ZXfAY5hBgxDb2tNMhsFniJ4p0lOyyMnrbY1OPEBzi5JjohqpK0UFzZQdY6zx kJQldiBlKsoU4RXozKd5Sg31wVVIpsaI2H0puWIxLdEOmbO9NDMg5Jv6dfdn YVOpUlZ4uEtASbioY03lr0R0pNqTXjekfBBI0Uvl2cwTaJjpbgAX.o6Vn3Ev VD7UQ0RthGzYJ5Mll4fgV+ys23JsE2MXfqDOa4w97tErsc42NyuJEdyJP5dO 0V7Xtl2yOduQE7p0240BKIX5.NxCXZLTizKfoS.voSFvEh5Z9Jw9DtPtThTZ i.Y2pEhJjc65G18vq3C4FSC83HM9n8iogvzYXnfDBQFN24SHmIW.NKUiFyym haIi4AE0WvXWU7p2Ls7Li7mbKtVYeD7dzHZ5AoD3YxgBQur4.600w5pOZWkv CEQFRSbVeL93CH8Y7hgmWYtW8xTxDXJ6fLECeUMJ43YJEn4b7GIlFMdjRODR YwP98ni+7OjT.o9D.L58QeDPJa7HkLkzhj4drfuBgSemMrTVJPSvmCOI.s6y mXfS9Ldm3C2cNxxMV3PSOT.IweiDBM7niHi+.FPNZ2MZ7w3twtFgyp5mkVEO ZR75wW6+TD6xRmBdWw8e8T1vLJ+rgKh+1+B.PCtNdioVq2Tk0XIM5F0QGKE0 FoBhK5LJ2cf5Np0xkKEv.ZeOauBPo1dCzcJA8P+uAFr3XCRbfIPt7hKbPjCO VwQmGBAD9q.R2cAm2ql66ZMi7zXRryjIw5ZRmdYSOSxF2J6n+Q1QmFYSNOxl DeVoMMdvAkiJiAglBBMFxN1DE3pcZnMdPx9+ShN2ISFnqvnDWB.wjP+gZRap bA0738C7ZljR65F3psmpcMXK9KvH0cgq -----------end_max5_patcher-----------