Interactive drum learning programme

Mannishd's icon

Hi there,

I am attempting to create an interactive drum learning programme using max msp for my final year project, the idea is that the user will control an on screen interface using an electronic drum kit. I am new to max msp so I am having trouble starting off. For the actual drum lessons I need to be able to measure the time between when a note is played and when it should be played according to a click track. I then need to work out in milliseconds how much the beat was out and output some feedback. I also need to measure the velocity but I will tackle the timing first.
Any advice or opinions are welcome. I need to know what the best objects to use would be.

Thanks,
Mannishd

Beep's icon

What kind of feedback will you output? If I were you I'd go through some max msp tutorials and look at objects such as "metro", "clocker", "tempo" etc to measure the timing in milliseconds and then use objects such as "" to measure if the beats are hitting before of after pre-defined timing divisions. Velocity will be a piece of piss is your using MIDI, again you'd just use "" to analyze velocity input. Hope this helps.

mudang's icon

For time tracking you could use a seperate "beat", that gets started earlier than the one the user actually hears.
Start it f.e. 100ms ahead of the monitor beat and then simply subtract 100ms from the timing difference of the user input, so you'll end up between -100 and +100.

Mannishd's icon

Thanks for your comments, I have a patch set up with a metro that sends out a bang every 500ms, this is connected to a makenote object and in to the left inlet of a timer object, everytime there is a bang it resets the ms to 0, in the right inlet I have a note in, this allowed me to view how many ms out I am at each bang. I want to be able to count up the total ms out of time, any idea what object I would use? I've tried the counter object but it does not do the job.

Beep's icon

"clocker" will do that for you.

Mannishd's icon

Thanks, got the timing sorted, just wondering how I would stop the tempo when it has so many bars done, say 4 bars? Then output feedback such as a message on screen that lets you know how well you are doing?

Mannishd's icon

Im guessing it has something to do with the seq object?

Beep's icon

use clocker and then the "select" object. When select receives a predetermined number from clocker it will out put a bang, use this bang to activate feedback. You will have to create a simple patch to convert bars into milliseconds. I could send you something if you like...

seejayjames's icon

you can have a lot of ways to determine how much "time" has elapsed, remember that bpm vs. msec is variable, so bars may not always be the same msec long. this will let you speed up and slow down the overall bpm, but retain the same "% off the beat" if you want.

For bpm to msec, take (bpm value) --> [!/ 60.] --> [* 1000.] --> [msec for metro or whatever]

note the use of floats in the 60. and 1000.
and the !/ that is the reciprocal of /

To sum up the total msec "off" you are over time, use [accum]. If you want absolute "off", run the values through [abs] so that the early ones don't offset the late ones.

fun stuff and perfectly suited for Maxing!