What is a Buzz Jam?
Buzz Jam is a 36 hour event where coders were paired with up-and-coming music talent to invent a whole new instrument that the band could use to perform their latest and greatest track on.
The Idea
Now, I'll be honest, I didn't read the brief straight away. I never really do, I just let my mind wander about ideas for a little while to see what comes out. So my first thoughts for "music hack day with a band" was to make a Laser Guitar, because who doesn't want a guitar that shoots out lasers as you play it - (I'd actually done some of the leg work for a similar idea already) but I digress. I met up with Satvir and Dan of Chasing Cadence, the band I had been paired with, and we got to talking about what we could put together and what they could use in their setup.
Pretty quickly, we settled on the idea of making some sort of drum replacement. Because of the size of the performing space at Red Bull Studios, the guys weren't able to bring along their drum kit, which poses a bit of a problem for rock bands, so we sat down and started to think about how we can solve this problem. I had a few ideas, like:
- "Stomp Trousers" Trousers that play a sound and light up as you stomp
- "Music Sticks" Sticks you could wave in the air like a lightsaber to generate/trigger sounds
- "Slap Coat" Hit your arms and play a note (like the slap drums)
- "Tin Can Orchestra" A bunch of tin cans with a makey-makey that would have different samples assigned to each tin that you could turn on and off
- "Four Chord Instrument" A block of wood with four sensors, each would play a harmony to make up the song depending on a selected chord
Originally, we settled on getting a ton of those classic old sweet jars you used to be able to buy and turn them into a makeshift drumkit - but with lights to make it look a little showier. In fact, we parted with that idea as being the thing we were going to make, but before Satvir, Dan and I parted ways, we joked about how it would be quite funny to just reprogram one of the old dance mats (you know, like from Dance Dance Revolution) so that Alfie, the brave drummer who would have to perform with this newly realised instrument, would have to dance the tune out as the rest of the band did their stuff. That was a funny notion, but we didn't go anywhere with it. And we set off home.
About a week later (2 weeks before Buzz Jam took place) I got a call from Satvir who said that the band had talked things over and they quite liked the idea of the dance mat, but could we instead sew Alfie into it. Naturally, I said yeah, because it was the same premise as my "Slap Coat", so we immediately put in an order for a hoodie, some piezos and an Arduino Uno.
How it would work (in theory)
Straight of the bat, my thoughts on how to make all of this work was pretty simple. Wire some piezo sensors into an Arduino and, using a serial connection to my Macbook, I would have the Arduino communicate with a Web Audio app that would recieve the sensor readings and play sounds mapped to each sensor.
What worried me about the build?
Making a jacket with sensors wasn't an entirely new notion to me. Back in December 2014, I designed and created a cycling hoodie with gyroscopes in it that would light up your arms as you signalled. I'd learned a lot about how people moved and where was best to put electronics and how to wire them in, so that bit of the task wasn't too daunting.
I'd also made quite a few projects that would use serial communication and web sockets to communicate with a web app. The funniest one is probably Faces of Shame. So, getting data out of an Arduino and into a web app didn't worry me too much either.
Those two things might seem like the difficult bits to some people, but the thing that worried me the most was the web audio app. I knew that simply playing <audio> elements to play sounds wouldn't be fast enough to handle a professional drummer going nuts at it, but I wasn't sure that web audio would be fast enough either. Still it was the best solution as far as I could see. If it could be made to work in a browser, I'd be able to use all of the tools I was comfortable with to build the drum jacket. Also, sound is a nightmare to work with, even on modern OS - If I could make web audio work well, I'd have a truely portable, cross-platform bit of software to play drums with.
Preperation
Web Audio
So, seeing as the web audio was the thing that was worrying me, I had a crack at that first. About a week before the Buzz Jam event, I sat down and built a simple web audio app that would play a drum sound as I hit the 1 and 2 buttons on my keyboard. It worked great! It was super-fast and worked in both Chrome and Firefox. I was no longer worried about there being a great deal of latenecy between Alfie hitting the sensor and a sound being played (well, not worried about web audio being the cause of the latency, anyways).
The Sensors
As soon as we settled on the drum jacket as being the thing we were going to make, I knew I was going to use piezos as the hit sensors. They're very cheap, durable and available in Maplins almost everywhere. All I figured I had to check was that I could get a reasonably reliable reading out of them before we turn up to the hack day, otherwise we might have to spend a little more money on slightly more expensive force sensitive piezo strips. I popped down to Maplins and bought a pair of large, medium and small piezo sensors and wired them up. The Arduino Uno we were going to use (because I had one) has 6 analog inputs that we would use to get the readings from our sensors, so already I had the sensors we would need to make the jacket, the size of the piezos shouldn't affect the sensitivity right? (WRONG). So, I hooked up a large and small piezo sensor to my Arduino, wrote a little sketch that would constantly output the raw sensors readings to any device connected over the Arduino's serial port (my laptop) and checked that when I hit the sensor on my table I would get a signal that I could detect. I did, and I put everything away as I was sure it would all work.
The Build
So, we arrive on the day of Buzz Jam, eager and ready to go. I set up my desk as the band arrive. Before we started putting the sensors together, I started to write the Node.js and web audio code we'd need to connect to the Arduino and play sounds. That took about 2 hours to get up and running and wasn't too much trouble thanks to my earlier preperation.
Next, we talked about how Alfie plays the drums and what sort of movements were most natural to him. We couldn't replicate the motion of playing drums faithfully in the form of a jacket, but we figured the more familiar the actions were, the less Alfie would have to learn and the better the overall performance would be. This is where we started talking about the bass drum. The bass drum is the big drum you see at the front of a drum kit and it's played by a drummer putting their foot down on a pedal which hits it with a hammer. This was an interaction that Alfie really wanted to keep, hitting his foot on the floor to keep the beat, so, before we got into making the jacket, we started experimenting with putting piezo sensors on Alfie's shoes.
Long story short, it didn't work and resulted in a molten shoe.
On to the jacket! Before we sewed anything into the jacket, we wanted to let Alfie get a feel for where the different drums should be, so we crudely stuck the sensors to him with some masking tape in a 2x3 grid. The placement was fine, but we quickly came across a problem. The smaller piezos weren't senstive enough to detect a hit. On a hard surface, they would work fine, but a jacket and person is softer than a hard wood table, so when we hit the smaller piezos, they weren't being warped enough to make a decent signal that we could detect. There was no quick fix for this. First we put the sensors on cardboard to try and stiffen the surface that was being hit, and that helped, but it wasn't good enough for playing actual music with - which would be ok, if it wasn't the sole focus of the entire event.
Ultimately, despite endless tweaking, we switched out the smaller piezos for the bigger ones which were working great. This we were doing at 3 'o' clock on the second day, and the event finished at 5! Oh dear.
We didn't have enough time to sew the sensors into the jacket, but we could sew the Uno and Alfie into the hoodie. So we did that (and I added a couple of LEDs to make the whole thing look a little more low-budget futuristic). Done and dusted, a fully-functioning wearable drum jacket (even if it was 60% duct tape).
The Result
One of the caveats of using web audio + Arduino is that the Uno had to be connected to my computer which had to be wired into the sound system. I didn't have a Bluetooth module lying around, so we connected the Arduino with a 1m long USB cable - which meant I had to be on stage to hold the laptop as the band played. I didn't mind, but the pictures looked a bit weird. Ultimately, everything worked! Chasing Cadence played their track and it went down without a hitch. I don't have a video of the performance, but I do have a video of Alfie demoing the jacket shortly before our performance to BBC Radio 1's Newsbeat. We also got interviewed for BBC Radio 4's PM programme (starts at 24:08). That was pretty cool.
Can I make one?
Sure, all of the code I used on the day (and some tidied up code I've written since) are up on Github along with a circuit diagram. How you put all of the tech into a jacket is down to you.
What's Next?
No idea. Since Buzz Jam, I've designed a couple of different iterations of the wearble drums (which we've called the Alfabeat, by the way). The second version is just like the first, except it uses a battery and Bluetooth, which isn't too much of hassle because it works with the existing code already (serial connections FTW!). I've designed a third version which is less of a jacket and more of a removable harness that you can wear beneath any clothing rather than having a one-use one-size-fits-all hoodie.
It's always fun to explore these sort of things after you've done the hard work for something already, you can learn so much from adding small things incrementally to an already existing project. There's nothing to setup, you just enhance. This is the first time I've ever used BLE 4 in an Arduino project and I'm always eager to learn more about power management so this is a great little project to keep tinkering with. I've also gotten better at sewing too!
Would I do another Buzz Jam?
Absolutely. It's been the most enjoyable and memorable hack day I've ever attended. Every other hack day I've ever gone to has been with other coders, but going to a hack day where the people you're around know nothing about coding, but have an infinite enthusiasm for technology and for music opens up paths to ideas that neither coder nor musicians had ever considered before.
Will I make another instrument?
Definitely, I have a have dozen things designed already from the last couple of years. Just need to get the time to put them together! Also, this wasn't my first foray into making instruments with Arduino, I've made Bagpipes out of chop sticks, Web Audio and tin foil in the past. Music is a fun thing to work with.