Volitions Advocate
Hero Member
- Messages
- 1,239
Scroll down for new pics
Update with vid:
http://www.youtube.com/watch?v=ny6Wz3oaOx8
So we were practicing the other day in our friends cramped basement suite living room, And lately for drums (since we don't have the room or the SPL allowance) we've been using a big rubbermaid tub with the kick pedals attached to it as the bass drum, and an assortment of practice pads and dinner plates for the other noises. One more month till we take possession of our first house where the bottom floor of the 4 level split is completely empy and jam-ready....... I'm so sick of waiting. Anyway. My drummer friend David has been trying and trying to save up for either a Roland TD-20 or a similar model from Yamaha, as well as adding in a Mandala Pad or two to mix in with his current drumset. He's the guy in the pictures in my recording studio thread.
So the other day while we were practicing, he just grabbed the plastic drumkit from rockband to make some noise with and we got an idea that we felt pretty stupid for not having before.
Why not use the Rock Band drums as trigger pads? They're cheap, plentiful, and expendable!
So we went about trying to figure out how to do it using MaxMSP. Others have done it (on youtube and such, but I don't think they were doing it for anything other than it looking cool) using different programs like Reason and some others I don't know the name of, But we're going to be doing this from the ground up.
So I did a little research because my Max Programming skills are a little rusty, I haven't worked on anything for a few months, but yesterday we played around a bit and learned a few things:
1. If you have a windows machine. Use the Xbox version, rather than PS3 or Wii, because Xbox is microsoft and plugging the drumkit into the computer took about as little hassle as installing an Xbox controller designed for PC. It just worked.
2. They aren't very flexible. The pads work on a USB midi protocol I think, but they're not built to record velocity. just on or off. So when we were monitoring the pads as we hit them the only 2 values we got were 0 and 128, which sucks... but no big deal really.
3. Game controllers don't stream data into a system, they are polled. Which means the computer queries the interface every X milliseconds to see if any changes have happened since last time, and then implements the changes.
This doesn't mean that you have a default latency of X ms, it just means that every X ms it checks. We found that it worked best at 20 ms. any lower than that and it just stopped working... I guess the game controller doesn't work too fast. Also we managed to get the true sound latency down to 10 ms. Which leaves us with a latency of 10 - 30 ms depending on when we strike the pad. We found that this made made it nearly undetectable.
So... I got to work on a patch. And so far this is what it looks like:
If you don't want to hear my ramblings on how this works.. just skip the next paragraph.
ok so its based around this 'hi' object which stands for human interface. Normally when you create an object like this in max you have to add the text in there to tell it which HI device to be looking at. So rather than that I made this menu next to it, that when asked for will show the devices available (thats what the info and menu boxes at the top are for, those are 'message' objects) and pipe that device back into the HI object. The 'metro' object is a metronome set to 20 ms, and when put into the inlet of the HI object, it creates the polling rate for the device, so that box above it (a toggle) needs to be checked on for it to work. Then below the HI object is that 'unpack' object, which basically shows 2 numbers. the first number is the 'element' of the device. in other words each button is assigned a number, in this case the 4 pads were 48 49 50 & 51, so when I'd hit the green drum pad, that number would show up as 48, and the 2nd number would be the value that element passed on (0 or 128 as stated earlier). Below that, the 'route' object basically routes each one of those 'elements' to a different outlet on the 'route' object, so each one below that is a separate function each time you hit a separate pad. The stuff below is just some rather un-elegant programming to make sure they trigger properly (i'm still not very good at it yet). The 'sfplay~' object plays a sound file when it is triggered, and the open box next to it lets you choose a sample to load into each 'sfplay!" the tilde (~) just means audio, because max does data, audio and video so its just there to clarify. the 2 afterwards means 2 channels.. for stereo. and the speakers below are DAC objects to route the digital signal to my soundcard.
So far this is very basic. The only thing that can be done is to hit a drum pad (or push the ABXY buttons, because the share the same function or 'element') to trigger a sample. worked like a charm and will even trigger samples simultaneously. This is an iterative process so I'll update this post as we get more working. What is next is David is getting together a bunch of samples he would like to use and I have to figure out a way to have presets of groups of samples that he can load into the program. and then set the start and select buttons (or the dpad) to cycle through those presets. We're also not using the kick pedal yet, we haven't decided if we're going to put the effort in or not, they're all plastic and usually break quite easily.
These aren't intended as a replacement for his Acoustic drums, we're not THAT silly. But this will be a great tool for our performances. The pads look to be quite easy to take off their stand and get a decent mount going for his Tom Rail. Should be pretty odd looking when we're done but this is one of the more exciting things I've been doing with what I've learned at school. And surprising that it could actually be useful.
Here's the cool thing about MaxMSP as well. You can select which objects in your patch you would like to include in 'presentation mode' and move them around in a separate space to only show the frontend of the program.
This is what it looks like so far:
nothing special, but it shows when a pad is being struck. This will grow and get better as well, we can use custom images etc. And i'll get the device select menu and the patch group presets all on here as well. We'll probably also get a 2nd drumkit to add. All you need to do there is duplicate the entire patch and make sure the 2nd one uses the 2nd drumkit.
When it's all done I can compile it as a program that he can install on his laptop. At which point he just needs to make sure he has enough USB ports and a decent laptop soundcard, Then we can use it at shows.
What do you think? Am I way too nerdy for my own good?
Pics soon, and videos, I promise!!
also If anybody is interested I'll share my program
Update with vid:
http://www.youtube.com/watch?v=ny6Wz3oaOx8
So we were practicing the other day in our friends cramped basement suite living room, And lately for drums (since we don't have the room or the SPL allowance) we've been using a big rubbermaid tub with the kick pedals attached to it as the bass drum, and an assortment of practice pads and dinner plates for the other noises. One more month till we take possession of our first house where the bottom floor of the 4 level split is completely empy and jam-ready....... I'm so sick of waiting. Anyway. My drummer friend David has been trying and trying to save up for either a Roland TD-20 or a similar model from Yamaha, as well as adding in a Mandala Pad or two to mix in with his current drumset. He's the guy in the pictures in my recording studio thread.
So the other day while we were practicing, he just grabbed the plastic drumkit from rockband to make some noise with and we got an idea that we felt pretty stupid for not having before.
Why not use the Rock Band drums as trigger pads? They're cheap, plentiful, and expendable!
So we went about trying to figure out how to do it using MaxMSP. Others have done it (on youtube and such, but I don't think they were doing it for anything other than it looking cool) using different programs like Reason and some others I don't know the name of, But we're going to be doing this from the ground up.
So I did a little research because my Max Programming skills are a little rusty, I haven't worked on anything for a few months, but yesterday we played around a bit and learned a few things:
1. If you have a windows machine. Use the Xbox version, rather than PS3 or Wii, because Xbox is microsoft and plugging the drumkit into the computer took about as little hassle as installing an Xbox controller designed for PC. It just worked.
2. They aren't very flexible. The pads work on a USB midi protocol I think, but they're not built to record velocity. just on or off. So when we were monitoring the pads as we hit them the only 2 values we got were 0 and 128, which sucks... but no big deal really.
3. Game controllers don't stream data into a system, they are polled. Which means the computer queries the interface every X milliseconds to see if any changes have happened since last time, and then implements the changes.
This doesn't mean that you have a default latency of X ms, it just means that every X ms it checks. We found that it worked best at 20 ms. any lower than that and it just stopped working... I guess the game controller doesn't work too fast. Also we managed to get the true sound latency down to 10 ms. Which leaves us with a latency of 10 - 30 ms depending on when we strike the pad. We found that this made made it nearly undetectable.
So... I got to work on a patch. And so far this is what it looks like:

If you don't want to hear my ramblings on how this works.. just skip the next paragraph.
ok so its based around this 'hi' object which stands for human interface. Normally when you create an object like this in max you have to add the text in there to tell it which HI device to be looking at. So rather than that I made this menu next to it, that when asked for will show the devices available (thats what the info and menu boxes at the top are for, those are 'message' objects) and pipe that device back into the HI object. The 'metro' object is a metronome set to 20 ms, and when put into the inlet of the HI object, it creates the polling rate for the device, so that box above it (a toggle) needs to be checked on for it to work. Then below the HI object is that 'unpack' object, which basically shows 2 numbers. the first number is the 'element' of the device. in other words each button is assigned a number, in this case the 4 pads were 48 49 50 & 51, so when I'd hit the green drum pad, that number would show up as 48, and the 2nd number would be the value that element passed on (0 or 128 as stated earlier). Below that, the 'route' object basically routes each one of those 'elements' to a different outlet on the 'route' object, so each one below that is a separate function each time you hit a separate pad. The stuff below is just some rather un-elegant programming to make sure they trigger properly (i'm still not very good at it yet). The 'sfplay~' object plays a sound file when it is triggered, and the open box next to it lets you choose a sample to load into each 'sfplay!" the tilde (~) just means audio, because max does data, audio and video so its just there to clarify. the 2 afterwards means 2 channels.. for stereo. and the speakers below are DAC objects to route the digital signal to my soundcard.
So far this is very basic. The only thing that can be done is to hit a drum pad (or push the ABXY buttons, because the share the same function or 'element') to trigger a sample. worked like a charm and will even trigger samples simultaneously. This is an iterative process so I'll update this post as we get more working. What is next is David is getting together a bunch of samples he would like to use and I have to figure out a way to have presets of groups of samples that he can load into the program. and then set the start and select buttons (or the dpad) to cycle through those presets. We're also not using the kick pedal yet, we haven't decided if we're going to put the effort in or not, they're all plastic and usually break quite easily.
These aren't intended as a replacement for his Acoustic drums, we're not THAT silly. But this will be a great tool for our performances. The pads look to be quite easy to take off their stand and get a decent mount going for his Tom Rail. Should be pretty odd looking when we're done but this is one of the more exciting things I've been doing with what I've learned at school. And surprising that it could actually be useful.
Here's the cool thing about MaxMSP as well. You can select which objects in your patch you would like to include in 'presentation mode' and move them around in a separate space to only show the frontend of the program.
This is what it looks like so far:

nothing special, but it shows when a pad is being struck. This will grow and get better as well, we can use custom images etc. And i'll get the device select menu and the patch group presets all on here as well. We'll probably also get a 2nd drumkit to add. All you need to do there is duplicate the entire patch and make sure the 2nd one uses the 2nd drumkit.
When it's all done I can compile it as a program that he can install on his laptop. At which point he just needs to make sure he has enough USB ports and a decent laptop soundcard, Then we can use it at shows.
What do you think? Am I way too nerdy for my own good?
Pics soon, and videos, I promise!!
also If anybody is interested I'll share my program