Myself (@davidjrice) and @kierangraham sat down recently to play with these and had so much fun I wanted to share with you all. Hopefully you find it interesting and maybe gives someone ideas for future hacking.
I'd like to quickly point out that yes, the readability of my blog sucks. I'm workign on it, but till then here's a gist of the article
We took them out of the boxes and started trying to get something working. We were worried the units weren't working at all, but it actually had just been so long since they shipped to me they'd ran out of battery. So we realised you needed to plug them in via USB first to charge thankfully that was quite a quick realisation, however we were pretty perplexed when still, nothing would happen.
A wee LED being on is getting somewhere though so we weren't put off. We then realised you can't charge the blocks and run them (play audio) at the same time. A-ha! Took quite a bit of digging but we found a forum thread indicating that. (TODO: find that article and link up!)
Up and Running
So we needed an idea, what would be a cool wee project but actually, first. Hold on. What's actually possible with these wee yokes? So we decided to check out some other patches people had done. http://patchblocks.com/patches and we made sure to sort them by rating. sorry I can't link you directly to that as it's sorted client-side!
Right up near the top a few caught our attention but the first ones were definitely dubsiren and Party Starter we came here to make noise right? So those seemed like obvious first choices to... ermahgerd these are awesome.
At some point during getting these to work and starting to understand the patchblocks software and UI we fully realised the amazing-ness of what they were, we hadn't even made a noise yet well, other than some "general excited noises" probably more akin to a pair of highschoolers and that gradually increased until it was deafened out completely by awesome dubstep noises. Yes!
Although that youthful feeling was dampened slightly by as we were quickly reminded by some gurgles from Kieran's wee baby that it turns out babies don't like loud noises while they're sleeping. Jury's out wether he like's dubstep or not but we'll see. Here, can we use the baby monitor as an input... hah.
This was great but we had a few other general problems getting setup later as we were constantly reconfiguring and swapping our blocks around.
- we constantly had orientation problems and having to remember which way is out
- also having to turn the device off and on again after having it connected to the USB. Having a separate indicator for on and charging states and moving the power switch to be a button would solve this I believe.
We then took some time to try and understand the UI we really found the help option (up there under "View" in the menu bar) crazy useful and should be on by default! we started just following lines and deconstructing the patches we'd managed to load to see how they worked. The next big thing was finding out there were tooltips on input/output blocks if you hover over them. At this point we totally knew what was going on and now the real fun could begin.
So back to the question, what's cool? Well we hadn't seen much info about using two blocks together wait? I thought it could do that, can it not do that? well let's find out. Spoiler alert: it can. Anyway, we were confused when we had two cool sound blocks seperately but when plugging them together nothing happened damn!
Looking into it further we realised that the digital and analogue audio outputs are independent. Awesome. Hmm, so how do we go about using two blocks together though?
So we then figured out we need to think of the entire block (physical) as just an input/output block (like in the editor UI) exept at a higher level. But the question still remained, why didn't our two blocks work together? Turns out it was because the patches we downloaded just didn't send audio to both analogue and digital outputs, just analogue in the ones we tried.
So we then modified both of our patches to just split the audio signals and send to both. That was easy. This stuff is not just cool, it's easy. That's even cooler!
but that wasn't all we needed. We need to then get the signal into the other block, turns out that was easy to it just needed us to think a bit differently. Using a mixer block we were able to just take all our effect logic and drag it to one side and then added handling for the audio input as it turned out, in both of our patches nothing was being done with it, yet.
So having done that we plugged the boxes together and, yes it was a magical experience and many high-fives were had all around. I'd love to say it worked first time but we actually had it plugged in the wrong way. Haha.
Mixing it up
Having two blocks that generate noise isn't really that cool though so we decieded to think of one of the blocks as a source and the other as a kind of pass-through effect / mixer. We also realised we could then apply the same principle to the noise generator block (dubsiren) and allow it to take input on the line in (from one of our macs) so we could get some backing music to play with.
I then created a wee patch using the delay effect, mapping the controls to the variables available (in the editor) for the delay block and also taking an audio signal in from both the digital and analogue inputs.
Much hacking, one beer and many high-fives later we had it all working.
The Future Editor
So I have quite a few general thoughts on some of the editor and UI, here goes.
- would be good to see inputs/outputs or the "potential" of the device not being used by a given patch
- sharing patches isn't yet optimal, binary files are awkward and hard to collaborate on, how can we improve this. I would suggest bringing github into the mix and being able to use a git repository for a patch (or multiple patces). Plaintext is the future and I'm sure there's a way we can do this.
- make the "help" mode on by default, at least until more information is visible in the UI to allow it to not exist!
- for example, visible labels or iconography for the input/output boxes (not having to hover to remember which one it is)
- being able to group parts of a patch into a larger thing that takes input/output. Allowing us to hide implementation and make complex patches simple to delve in and understand
- the editor could be able to pull a list / browse view and install patches right there in the editor (this would be great to be able to see what kinds of things each patch does)
- categorising patches (probably automatically) to see what kind of patch it is would be a great thing and allow for people to go get inspiration from similar patches
Probably more ideas but I'm running out of steam tonight, I'll try to add more as I think of them :) Someone from patchblocks should definitely reach out to GitHub as I know this would really interest them and they would love to help you use gh. I like to think of them as not just somewhere to put my code but as infrastructure for a lot of the software I build today.
Hardware / Audio quality
So, not sure if it's just the dirtyness of the delay effect I was using (or the fact I have dropped it several times, doh) that the sound is a bit flakey. Perhaps I haven't boosted the audio out levels enough or something. I'd love to get some feedback at some point (TODO: I'll need to upload these patches we made and hopefully you can review them).
Otherwise yeah, we need to figure out how to make these less droppable, or more drop friendly. I was flipping it so much to remember which was the IO analogue in that dropping it became a regular occurance. Which was fine over at Kieran's cause he has carpet but the blocks do NOT like my wooden floor.
I think you get the picture, I love these wee things and I've only got to spend a few hours one evening figuring this stuff out but it was all the easier and more fun working on this with a good mate and I think we actually learned a lot while playing with these (even though me and Kieran do or at least should know a thing or two about these technology things).
I actually think the style of node-based style of programming and constraints of the editor forced us to think of new ways of solving problems that I already know how to apply in my day job and for that I am grateful to you for that (and why I have taken the time to write this) as I also want to share these with the rest of our team at Rumble and hope they have a similar experience.
As such I really think these are not only fun but great learning tools and with a bit more robustness and user friendly-ness could appeal to not just musically minded geeks like me but as a great teaching tool for children. Or anyone interested in programming or learning programming. Having some sort of fun stimulous as the output of your work really helps to keep attention and deliver immediate results and happiness!
After writing this I'm really excited about playing more with these in the future (even more than after mucking about with them that nigth) but I just realised I've been so passionate about them I've lent all mine to friends to have a go with. Thankfully, being slightly compulsive about things I'm glad I have.