Google’s Android has been a relatively slow starter for mobile music software, but a gem like Adam Smith’s free Ethereal Dialpad proves it’s a viable option, and the app is an inspiring musical toy, to boot. Perhaps more important than that, behind the scenes, Adam is employing a really beautifully audio engine of his own design with an elegant approach to coding sound.

Ethereal Dialpad features a set of basic modules for using touch to produce synthesized sound with real-time effects. The concept isn’t new – Adam says he was inspired by the pitch mapping on KORG’s Kaossilator – but it’s nicely executed, and the software is fun and responsive. I’ve tested it with some non-musician Android owners, and they were simply delighted. And yes, you can plug it into external effects and go absolutely wild – see the video below for one example.

Of course, these sorts of applications are relative commonplace on the iPhone, but few and far between on Android. So it seemed the perfect time to ask Adam to share his thoughts on developing for the platform.

Along the way, Adam has some great thoughts on live coding and sharing in the development community that go well beyond any one platform.

Mobile applications in general have often been self-contained, limited-lifespan creations; the simpler ones are almost like bubblegum – suck out the sugar and move on. But by sharing code, these simpler applications can have a greater life, as they’re extended and incorporated into other projects. That could suggest greater longevity over time for unusual interactive musical software creations in general. And with this application fitting into just 35K – yes, amazingly, even with all the packaged Android assets and Java code – the emerging landscape could even begin to resemble the demoscene of old.

Adam writes with some of the behind-the-scenes details of coding audio on Android:

The whole Ethereal Dialpad project started as an experiment with the AudioTrack api in the Android framework and, without any real planning, it evolved into a reimplementation of one of the presets on Korg’s Kaossilator synth toy (which I’ve enjoyed playing in the past). At one point, I was thinking of adding more Kaossilator-like features (loop recording, more synths, etc.), but interest in starting new projects instead of improving old ones won out.

The synthesis core of the app is hand written in Java. You can see an example of working with my DSP library edited down from the real source here: http://gist.github.com/376028#file_usage.java The design of the library was strongly inspired by that in ChucK, a programming language for musical livecoding that I’ve used for a few other silly projects (http://chuck.cs.princeton.edu/). Using the library, the app sets up a little modular synthesizer on startup and uses touch events to tweak parameters. It is possible for the synthesizer to be reconfigured a run-time (adding or rewiring components), but I didn’t end up using this functionality anywhere in Ethereal Dialpad. Perhaps someday I could expose the live synth construction process to users with some graphical interface — right now you have to edit the source to change the synth.

Devices like the G1 I was working with have terrible floating point performance (improved none by running code in a virtual machine!), but going ahead with the simplest solution turned out to work just fine. In another free Android app, Iteration, I used fixed-point arithmetic in C via the NDK to get the performance I wanted (http://github.com/rndmcnlly/iteration/blob/master/jni/iteration.c#L279). At one point I was having trouble with the audio stream in Ethereal Dialpad when some background processing (such as Twidroid waking up to refresh tweets) took too much processor time, but simply cutting the audio sample rate in half was an effective fix (with little effect on my output which didn’t have too much in the high frequencies at the time).

I suppose it would normally be overkill to build a synthesizer from scratch like this to get the output I did. If I knew I were really going for what Ethereal Dialpad is now from the start, I could have simply embedded a fixed set of pre-recorded tones and not mucked about with sines and cosines. One fun result of doing it the hard way is that the package you download is only 35KB (with a lot of that space dedicated to the silly icons for each dialpad). Doing as much as possible with code instead of bulk data is in line with the demoscene aesthetic which I’ve enjoyed for a long time. Generative art has long been a passion of mine, but playing with real electronic music hardware during the past few years has convinced me to try more tangible projects, exploiting the touchscreen in this case.

As an aside, there seems to be a really positive, sharing-oriented culture in the hobbyist Android programmers that I have run into. I got the idea to make Ethereal Dialpad (or at least play around with audio on Android) after seeing the Synthesizer 2 application. I could tell, just by using the application, that the developer must have been using some API for live streaming that I hadn’t noticed in the documentation yet. In response to a email to the developer I got a pointer to the exact API I was seeking, and we’ve sent Java snippets back and forth since. Another developer emailed me to figure out how my app worked and, several source-filled emails later, Ethereal Dialpad contains the “Moonblink’s Grid” dialpad, a volunteered submission.

I asked for some reflections on Android, in general, as a platform, as well, although that discussion quickly turns more generally to tools for quickly coding creative sound on computer platforms, too.

Regarding inspiring Android music apps, it was actually the (I suppose I’m qualified to say this) disappointing experience I had with Synthesizer 2 that really pushed me to think “Man, I could make something that sounds better (after I ask him how he pushed an array of floats through the speakers, that is).” After finding the right API, it was just one dusk-till-dawn hacksession before I produced CurveSlinger (http://adamsmith.as/typ0/k/CurveSlinger.apk), which is essentially the core of audio Ethereal Dialpad with no graphics. The idea of mapping both axes of the touchpad to two synths was lifted directly from the L.12 patch on the Kaossilator. I didn’t think to attempt to bolting on a pluggable GUI system for another month perhaps. Plug-ins are a whole story of their own — turns out there is a section of the Android userbase that universally ignores update notifications. [Ed.: If rumored "auto-update" features finally get baked into Market apps, I would expect that situation to improve, though it hasn't happened yet. -PK]

In the larger context, the drive to create a synth toy from scratch was inspired by participating in the culture around livecoding languages like ChucK, Impromptu [Mac audiovisual livecoding environment], and Pd (TOPLAP is the name I feel compelled to drop here). In livecoding I can bridge the gap between the otherwise sometimes cold, engineering practice of programming and the artistic, improvisational practice of live music performance. I’m overwhemled by how easy it was to make a mini trance sequencer (http://www.youtube.com/watch?v=lVOtH5Uiatc), a tangible controller for wave playback (http://www.youtube.com/watch?v=DhDeYxhnKkY), and an infinite random claim generator (http://www.toplap.org/index.php/User:Adamsmith#.22endless_interesting_claim_generator.22http://adamsmith.as/typ0/k/voxbox/claims.html). How can I convince the general population that being a healthy consumer is not a healthy state of being and that programming is an amazingly underappreciated approach to being a creative producer? Well, I’ll hack something nifty stuff really quick and tag a note onto the app description: “Like what you feel? Consider learning to program. It’s some serious magic.”. I’ve gotten maybe 15 email responses to this last note, but it is hard to get people who have no experience into a position where they can do the same thing.

The drive to use the touchpad for something interesting draws directly from playing the Korg EMX-1 which uses a linear touch sensor to control the arpeggiator. Sure, I’ve fun with Kaossilator, but that two inch strip on the EMX-1 sucked me in for hours at a time. It was magical, and I wanted to make that kind of magic too.

I suppose I have to acknowledge the Internet at large as a major, implicit inspiration. It is impossible to remember which video here or there lead to this or that other idea. I’m sure, running your site (which I didn’t know of until you contacted me), you experience the same thing.

For your viewing pleasure, here are two of those quick audio creations. At top is a demo of livecoding in Pd (Pure Data). At bottom, in what must be a geek singularity powerful enough to actually create a depression in the fabric of space time, “a YTMND dramatic reading of some Half-Life fan fiction” with a Nintendo 64 controller and the rapid audio coding environment ChucK.

Android I think is overdue for a round-up of available audio software. (Honestly, I had put it off partly because the landscape was somewhat scarce.) Candidates so far include Sonorox, Beatpad, Uloops, Musical, and FingerPlay. Got nominees? Let us know in comments.

The “killer” apps for Android may turn out to be in-progress ports of Pd and SuperCollider. More on that topic soon; if you’re interested in contributing, or in learning more about Android music software development, you should check out the Android Music Developers Google Group.

And since so much geektastic material comes up in the interview, let Adam know if you have other questions for him.

  • cebec

    Thanks for this article. I'm very much interested in music apps, especially SC and PD on the Android platform.

  • http://abletonlife.com Ryan

    I have had this app for the longest time now. I love it, but never knew who made it, or what the support was like behind it. I am glad to see someone who is dedicated to furthering music apps on other platforms.

    -Ryan

  • http://www.patternmusic.com RichardL@PatternMusi

    Thing I'd like to see emerge on Android is standard protocols interoperability such as for "plug in" instruments (a la VSTi) and reWire-like routing. That combined with the platform's great potential as a host for OSS projects might allow Android to take on a life of its own and thrive in the shadow of the greater volume of self-contained typically proprietary music apps on that other platform. Android music needs to embrace the possibilities that synergy would enable. I find the potential really exciting.

  • http://www.createdigitalmusic.com Peter Kirn

    @Richard: Interesting. I don't see why you couldn't do that. You'd just publish the audio buffer in one app and consume it in another. In fact, you wouldn't really need much for a standard – there are already standard ways of binding data between activities. I just can't imagine doing that on current-generation hardware, somehow; it's hard enough to run one app reliably. But if you didn't mind increased buffer sizes and latency, it'd be doable, it'd work with lightweight audio tasks, and it could be more interesting on tablets running Android.

    One thing that is happening is definitely OSC communication between apps. SuperCollider actually needs to be able to do this, but if we can (cough) actually get Pd to work, this would be trivial to add. And we could definitely do a version of these apps that just runs as a Service and lets other apps talk to the audio engine.

  • Wilbo

    I got a Droid not too long ago, and was pretty disappointed with the music software selection as well. But Ethereal Dialpad was a real gem and I'm really glad to get a little more insight on how it was made. Maybe I'll push ahead and learn how to develop for android myself.

  • http://pourquoi-quoi.blogspot.com/ berbert-pk

    It's a nice begining!!

    Please, I need music apps^^!

  • http://www.PatternMusic.com RichardL@PatternMusi

    @Peter Maybe OSC is a better backbone to do this sort of interoperability. I'm envisioning a virtual instrument or sequencer on your Android device with the ability to use a locally hosted lightweight synth service when on the go. Then maybe plugging into a more powerful synth back at home. That sort of thing should be very possible with Android.

  • Evan

    I think its more the availability of whats in the provided sdk thats the issue right now. Im hoping to grab an evo whenever it comes out so I started looking into programming on it and seeing what kind of available interfaces there are for the audio and the options really arent that good. I think if the audio options in the sdk were better you would see a flood of these but as it is now there is only one really good option for doing sound in a way that would be useful for some sort of synthesis/audio app and its supposed to be pretty unreliable.

  • Damon

    CreateDigitalMusic.com has taught me the phrase "elegant solution."

  • Adam M. Smith

    For those who are interested, I made a free live wallpaper version of the Swarm dialpad demonstrated in the first video above.

    I'm really looking forward to using things like pdportable as a way to get algorithmic audio ideas onto devices out in the wild. Android development isn't too hard, but packaging up an app for every idea sounds overkill. Perhaps a common player/environment (unmentioned: RjDjroid) would lower the barriers for both creative developers to toy around and curious listeners to try things out enough to jumpstart a reactive/algorithmic music ecosystem for mobile devices. In such a world, I'd be happy to have Ethereal Dialpad be just one of thousands of throw away patches that people might collect and tweak.

  • Pingback: Android???????(Ethereal Dialpad) : monogocoro ?????

  • Pingback: Ethereal Dialpad Touch App, Development Experience on Android and Beyond | VJ Heaven

  • Emile V

    Hi, first time commenting on this blog (I think), but following it for a few months now. It's probably the best on its subject, the depth of the articles/entries is much above average imho, thx a lot for that.

    There seems to be an issue with the current audiodrivers, or the audio api android provides to its developers that is causing frustration.

    If I (without any android development experience or knowledge) understand correctly, there is no ASIO or JACK type like driver/interface, only a DirectX/MME type like, and that is a major issue for development of serious audio apps, where low latency and guarantied timing/behavior are vital.

    http://code.google.com/p/android/issues/detail?id

    So plz, if you care about this, join in and “star” this issue.

    So maybe android system developers notice it and put a higher priority on this. From the looks of it, potential developers feel very much discouraged by this.

    I wonder how Adam M. Smith feels/thinks about this issue?

  • http://www.createdigitalmusic.com Peter Kirn

    Emile: That's not quite correct. Android devices currently all appear to have ALSA drivers. It's apples to oranges, but suffice to say that there is no real comparison to be made to DirectX or MME (which are two different things, by the way).

    JACK isn't an audio driver per se; it's a higher level API with a driver underneath.

    Anyway, this could start a very long discussion, so here's the shorter one:

    Developers are complaining because they don't have native code access to the audio driver, only Java access. There's a lot of misinformation in that bug report (a *lot*), but that part of it is correct. That means if you write native DSP code, you have to pass a buffer back to the Java code and use Java to output to the audio interface. The audio API itself, though, is also native, so Java is just a wrapper.

    Latency is its own issue; the question there is how big you have to make the buffer to avoid issues. And generally, *all* mobile devices are likely to present a greater challenge here, even more so once you start contending with background tasks, etc.

    It is possible to get reasonably low latencies on Android, though.

    I do suggest starring that issue, because it lets Google know that audio is important, and I think native audio access in the NDK isn't a bad idea.

    But it's one of a number of issues to be addressed on this and other platforms. In a way, it'd be better just to see improvements in the way Android's audio API works and how it prioritizes its output tasks. Using Java isn't the problem.

  • sean

    Adam, I love the dialpad. I can noodle away for hours and hours.

    I have also been happy with Electrum by Niko Twenty. Simple interface with good libraries and the ability to sample from the phone's mic input and manipulate.

    We need more Android music-making machines! If I knew how to do it, I would. Thanks foryour hard work!

  • Bakh Inamov

    can't seem to find beatpad in the android market on my n1 :(

  • Pingback: New Urban Music Blog

  • Pingback: Sintetizador tipo Bebot

  • Pingback: Why You Probably Won’t See An AutoTune App For Android | OzTech

  • Pingback: Adam Smith: Pioneer of Game Design Discovery System | HOT DEVz

  • Pingback: Useful Music Tools for Your Android Phone, and a New Sketchpad Joins Groovebox

  • Pingback: An All-Android Hip-hop Album, and the Tools Used to Create It

  • Pingback: An All-Android Hip-hop Album, and the Tools Used to Create It - machine quotidienne

  • Pingback: Fazendo música com o Android | rodrigostoledo.com

  • https://market.android.com/details?id=com.monadpad.le&hl=en Mike the Matrix

    FYI, I made a version of Ethereal Dialpad that does auto-looping and overdubbing. You can even make unique one of a kind ringtones.

    Look for "MonadPad"