IPhone app – finishing it up!
I'm in the final stretch for the 1.0 version of my iphone drum machine / synthesizer app. I've settled on the final configuration as far as the synthesis capabilities. Doing 10 voices of 2 osc synths proved to be too much for the iphone's CPU to handle (BTW, I've seen info putting the Iphone 3G's cpu at 400 mhz, not the 666 mhz I originally thought). So, I settled for 4 2-osc "powerhouse" synths, 3 specialized bassdrum / FM synths, 1 specialized snare drum / clap synth, and 2 specialized hi-hat generators (modelled after oldschool 808 machines). Overall this gives you tons of possibilities and should enable people to make pretty decent electronic songs on their IPhone. There are no samples in this bad boy - everything is synthesized in realtime.
Realtime control is another thing that sets this app apart from other iphone apps. There is a performance page which lets you loop/remix portions of your tune using multitouch. Dual touchpads and mute / solo control is planned for this page. Another thing that would be awesome is an arpeggiator, but I dunno if that will make it into version 1.0. There is also a 'motion' page that will allow you to draw automation envelopes for one parameter for each part.
These features address what I see as the major shortcomings of the current crop of iphone music apps. Either they are simple 'instruments' which people will most likely use once or twice and then stop using. Or, they are mostly sample based which stifles creativity. Or they don't offer enough options or automation abilities to make an interesting sounding song. Another shortcoming is poor interface choices. Piano roll on a touchscreen = tedious. Iphone apps (or more generally, touch UI's) need to be based around taps and swipes. For taps, buttons need to be big enough to hit easily (I've found the 'magic size' to be about 80 pixels x 80 pixels.). Doing a piano roll on a 320 x 480 screen means that you will be trying to tap on stuff that's 10-20 pixels wide which is highly frustrating and a bane to good workflow.
My goal is to finish all the major pages and functionality this weekend and start implementing the final UI. Hopefully I'll be able to start posting some audio and video next week.
iPhone app
Just wanted to drop a post to say that my iphone app is coming along pretty well. I've put in a ton of time on it the last few weeks and it's starting to come together. I should be close to finishing it in another week or two.
The first few days with libnui were a little frustrating since I didn't quite understand how the layout widgets were sizing themselves (specifically the grid based widgets). I've been used to juce's more explicit (typically fixed size) layouts. Now that I've been working with them a while, I find them to be a more welcome addition and there are some nice things you can do with them that do save time. I am still a bit confused about how some of the CSS stuff works (mainly I think I need some more examples and documentation about how the different widgets can be styled..), though it's perfectly acceptable to eschew css and set up your widgets styles via code (which is what I've been doing). I'll avoid getting into too deep of a comparison between juce and libnui here because I want to do a full post on it later.
Now that i know my way around the framework I am pretty productive and the good news is that writing your own components is a pretty simple affair (just as easy as it is in juce).
Currently I have all the major synthesis modules written. I have most of the major 'pages' in the app written (only one or two left to go). I've had to scale back my planned # of voices due to CPU constraints. I'm still shooting for 10 voices, though i need to get each voice down to about 6.5% cpu in order to keep the GUI snappy and avoid audio breakups. Right now I think they are at 8% and I've already done a fair bit of optimization. Each voice is basically a 2-Osc synth + filter and several envelopes, so you can do some cool stuff with them. I always find it hard not to throw in the kitchen sink when it comes to making synthesizers. I like to have a lot of options. I also have some pretty cool 'live performance' oriented features (which make use of multitouch) that I think people are going to dig. I will post some screenshots soon. We will have a more finalized gui design soon. I also did some work on a logo.
One good benefit of the whole thing, is that I basically re-wrote my audio framework from scratch (this same framework is what I'm using in Genome). In doing so, I identified a bunch of optimizations and design improvements that I should be able to carry over to Genome. Re-writing things almost always yields a better product. Many parts of genome have been re-written several times by now. There is a big tendency for programmers not to want to touch old code and to just 'leave it as is' even if it's flawed. I prefer to start from scratch every once in a while just to clean out the skeletons.