When I started playing with Propellerheads’ Figure app recently, I had a case of rhythmic déjà vu. I heard highly syncopated rhythms somewhat like the bell and clave patterns of African and Latin music but also some stranger and more modern timelines. Figure is an electronic music making app, so the patterns were rendered in the sonic vocabulary of techno and house music, but the spiraling, endlessly-forward-falling clave rhythms were unmistakable. The Aka pygmies of Central Africa were in the club. (more…)
I’m giving a talk about custom MIDI controllers with Arduino at Code 42 today at 6 PM. Late notice, I know, but I’ll put my slides up tomorrow. For now, you can check out the Arduino code for the MegaNome here: https://docs.google.com/open?id=0B_KTeGhE8i6HUW9DajNGZ1Vrd2c
Here’s the slideshow for the talk: https://docs.google.com/presentation/d/1o2I8dQnhTKCgiakCF5px4p4KY_yonwDm-MazNML9Qq0/edit
Filed under: Software
Releasing four videos in the past three weeks gave Voloco, my Android voice processing app, a jolt of attention that boosted downloads. That’s mostly good, as it allowed thousands of people to sound like a cross between Roger Troutman and the Terminator while moving about with their hands free, which we can all agree is a real contribution to society. Unfortunately, the app didn’t function properly for certain folks who did not hesitate to report their displeasure to the app’s comments page. I understand their frustration, but what is particularly frustrating for me is seeing reports that the app doesn’t work on devices that I actually tested it on. One user reported that the app crashes on a Nexus One, which of course is the Android development phone–the same phone that I have used Voloco on for hours without a crash. This user was using a non-standard version of Android, but it still grates. Fudge.
I may opt to revisit iOS for my next app. I hate their development tools, but the test matrix is four devices and three versions of the OS instead of 300+ devices and who knows how many flavors of the OS. If you have downloaded Voloco, and it works or doesn’t work (and I believe it works for a solid majority of users), please do one of the following: If it works, write a thoughtful, honest review that makes copious use of words like “MAGISTERIAL,” “MIND-MELTING,” and “APOCALYPTICALLY AWESOME.” If it doesn’t work, send me an email that mentions the device model, Android version, and the nature of the problem. Actually, if it works and you want to suggest improvements, write a review along the guidelines specified above and then email your suggestions.
In other news, I hooked up the wobble machine to a wah wah pedal tonight, mic’ed the drums, and rocked several hours of acoustic dubstep and electro insanity. I stopped when the tendons in my hand got sore. That’s a good practice session. The video shoot and recording session is two weeks from tomorrow, and it will be a crunch to put two tracks together before then, but I’m confident something ridiculous will fall out of it. If you want to be in the fallout zone when the videos drop, hit the Facebook Like button at right.
Some people think that the fossil record offers solid proof that humans evolved from apes, and I’ll admit that with the right diet and some electrolysis, Lucy could look halfway decent. But if you really want to clinch the case, read the comment threads on a gadget blog. Any post that compares an egoDevice to a Botroid will spark chest-thumping tribal warfare that would make Jane Goodall blanch. One suspects that our tech media overlords know exactly what they’re doing when they throw side-by-side feature comparisons to the howling commenter troops, and while I want to avert my eyes, I think I could learn something from them. If my career ever needs a booster shot of maximal controversy, I’m going to publish a cartoon of the Prophet Muhammad using a Motorola Xoom.
With that preamble out of the way (call me Jefferson), I’m going to make a few value judgments. When I first began toying with the idea of turning the algorithms I use in my music into apps, I started teaching myself iOS because the iPhone was and remains a more profitable platform for app developers than Android, although the gap is closing. I bought books, watched youtube tutorials, and experimented with example code that I ran on my own iThing. After a couple of months, I gave up. Part of the problem was unfamiliarity with objective C, the language used to code for iOS, but the other problem, which seemed less tractable and more discouraging, was a patronizing and somewhat authoritarian attitude embedded in the way the iOS development tools control the process of creating an app. These tools and the pedagogical materials that explain them almost mandate certain design patterns that structure how applications are put together. These patterns make sense for a lot of apps, I’m sure, but they didn’t make sense for my app. I knew how I wanted to structure my app, and trying to contort it into one of Apple’s design templates appeared unnatural and frustrating, so I began looking at Android as an alternative.
Getting started with Android was easy. There was some new terminology to learn, and there were rules to follow, but I felt that Android struck the right balance between preordained structure and flexibility. Equipped with a flexible development environment, I dove into teaching myself the basics of UI design and Android audio programming. In short order I had a test app that would simply take audio input from the microphone and play it back out the speaker or headphones in real time.
The disappointment began when I pressed Play and started speaking. “Test one, test” went into the phone, kicked off its shoes, had a bite to eat, checked the sports page, and ambled out of the speaker about 250 milliseconds after arriving. (more…)
I’ve just released my first Android app, VOLOCO, to the Android Market. The app lets users apply a variety of effects, including automatic tuning, pitch-shifting, and vocoding to speech sounds in real time. One particular effect, voice-controlled vocoding, allows the user to control the pitch of a synthesizer tone with his or her voice, and then vocodes the synthesizer and speech signals. Typically, vocoding requires playing a synth with a keyboard while singing. Voice-controlled vocoding is an easier and more expressive way to achieve the robot voice we’ve come to know and love from Kraftwerk and an array of pop singers over the decades. And as far as I know, this is the first software implementation of voice-controlled vocoding. There is a hardware device called HardTune that will do the same for $300. Voloco is ad-supported and free.
I would be grateful for any feedback readers could offer about Voloco–what you like, what you don’t, what features you’d like to see in future versions, and of course, bug reports. The app is computationally intensive, and requires Android 2.2, aka Froyo. If you like the app, please share the robot love in a review on the Android Market. If something goes wrong, email me.
A few tips and instructions:
- You need to use headphones or an external speaker. (Voloco won’t output sound through a phone’s earpiece). Although using an external speaker is a little extra work because you need to plug a mini-jack to RCA cable into your phone, you can get some cool reverberation effects going with the speaker. Try it if you can!
- In the touchscreen-control modes, you switch scale and key via the Menu.
- Recording is also controlled by via the Menu.
- The mic on the headphones that comes with most devices is pretty bad. You’ll get better results by using a pair of normal headphones (or an external speaker) and the mic on the phone.
- Keep the mic close to your mouth but avoid breathing directly on it, which will cause distortion.
One topic deserves special treatment: latency. The Android operating system imposes a ridiculous amount of latency on a real-time audio processing–about 250 milliseconds on my Nexus One. On top of this Voloco adds about 23 msecs. The delay makes real-time performance difficult, to say the least. If you want to automatically tune a vocal performance, I would suggest not listening to yourself while you sing. Alternatively, you can work with the delay by rhythmically syncing your performance to it, or you could just go for low, growling, vocoded washes of sound, which are fun. Google claims that latency improvements are forthcoming in Gingerbread, but it’s uncertain when they’ll arrive.
What does this have to do with Jazari? At some point, probably after I’ve resumed serious drinking, I’m going to start using the voice processing algorithms behind Voloco in my live performances. Chances are, you will never hear my unaltered voice singing into a microphone, ever. But if I could control a vocoder with the pitch of my (retuned) voice, and then use DSP and generative algorithms to resample the output and create a densely-woven fugue of robot voices, that’s what I’m going to do.
In advance of my performance and talk at the University of Michigan Ann Arbor on Friday, I’m publishing some of the source code I use to control the machines. This piece of Java code and an accompanying XML file are used to construct a Java external in MAX/MSP that parses OSC instructions from the Wiimote by walking a tree data structure. To make this work, you’ll need to pick up the third-party software OSCulator, which translates the Wii’s BlueTooth signal into OSC commands and publishes them to a local port. OSCulator is available here.
More generally, you could modify this code and the template of the XML to use any OSC message to walk an XML document. I’ll add more explanation as time allows, but for now, here’s the code:
I’m releasing both pieces of code under the Wide Open License (WOL), which allows you to do pretty much whatever you want with them, including commercial applications, provided you retain the copyright notice in all source copies. Also, if you haven’t already, hit the Facebook Like button in the sidebar at right; I’ll be releasing more code and music over the coming months, and the Jazari FB page is the best place to follow Jazari developments.
Filed under: Software