Sunday, January 22, 2012

A few changes and an exciting future

Tomorrow morning I will begin a new job and more importantly, a different direction in my career.

As you can tell from the history of this blog I have always had a passion for robotics and other embedded hardware systems. Graduating with a Bachelor of Computing, instead of Engineering, has obviously limited my job prospects in these more hardware-oriented fields. As a consequence, for the last five or so years I have been employed primarily as a web application developer with occasional forays into desktop application and embedded hardware development.

This all changed four weeks ago when I received an offer of employment at a local electricity generation business. I will taking on a role assisting with developing, administering and supporting their Energy Management System. This will involve working with complex hardware-oriented SCADA systems. I am extremely excited about this new role and the learning opportunities it will offer and I have decided it is time to adjust my non-employment priorities too.

These adjustments will have the greatest effect on my Android application development. I will still continue to bug-fix existing applications and I may even develop a few more new applications, but this will now be a low priority - a couple of hours a month. I've enjoyed working with this platform greatly but, frankly, I am not willing (with this new role) to put the time and effort in to turn this into a self-supporting business, and it doesn't make enough money to continue in a half-hearted manner.

The good news is that as a consequence of the above I intend to spend a lot more time on my embedded hardware/hobby-robotics projects. I've already been working on some as-yet undocumented projects and I would like to blog about these as they reach milestones and conclusions.

Thank you for indulging me in a personal post, I look forward to a picture of a robot leading my next one! :)

Thursday, December 22, 2011

Video review of Sythe by content3300

I just came across this video by the YouTube user content3300, showing Sythe in action. It appears to be an entry for a competition, but it shows all the features quiet well. Thanks content3300!

Sunday, December 4, 2011

Distributed tournaments for the Google AI Challenge

As I noted a couple of posts ago, I am taking part in the Google AI Challenge again this year (my entry). The challenge this year is Ants, a game which requires entries (agents) to control a number of ants in an environment made up of land, water, food and enemy ants.

The design of my agent is fairly simple and has a large number of parameters that are a adjustable (e.g. distance between an enemy ant and my base that is considered a "threat"). This made it a perfect candidate for trialling out some Genetic Algorithms (GA) theory to tune those parameters, as well as to evalute some algorithmic design decisions.

To start using GA one must generate an initial batch of solutions to the problem. This is currently in the form of 12 versions of my agent.

Once an initial set of solutions has been generated, the next step is the evaluation of the fitness of each solution. Each agent I design is a different "solution" to the problem of being the best agent - the best agent is the fittest.

I decided the simplest way to evaluate the fitness of each agent is for it to compete against other agents that I have made, and sample agents, in the standard game format that is used on the official servers.

As I have a number of laptops and computers, none of which super-powerful, I decided to try and make a distributed tournament system so that I could play as many games as possible to get the best idea of fitness - my setup is as follows.

  • Each machine is running Ubuntu 11.10, with Dropbox installed. The game's Dropbox folder contains the game engine, maps and all the agents that are currently being tested.
    • This allows for new agents to be added at any point and all machines to be immediately updated.
  • Each machine continuously:
    1. Selects a random map
    2. Selects a random set of agents to play on that map
    3. Plays the game
    4. Writes the score to a file based on it's host name - eg "log-ubuntubox.txt". These files are also in the Dropbox folder.
  • Any machine can run a shared script that aggregates the results from all log-*.txt files, computing the average points/game for each agent. This is used as the fitness.
Because I am using Python 2.7 (installed by default on Ubuntu 11.10) for the game engine, agents and extra scripting the provisioning of a new machine is this simple:
  1. Install Ubuntu
  2. Install Dropbox
  3. Run "python play.py"
So far this is working quiet well with quiet dramatic and unexpected performance differences between some nearly identical agents. Once each agent has played at least 30 games I will remove some of the lowest scoring agents and add some new versions based on combining the traits that are the most successful.

With any luck this should result in a pretty competitive entry in this year's Challenge - I will keep you posted!

Thursday, December 1, 2011

Milestones

I just had a look at my Market stats and I've just hit a couple of milestones:
  • More than 100 ratings of Sythe Free (average 4.3/5)
  • More than 10,000 active users of Sythe Free
  • More than 25,000 downloads of Sythe Free
If only the paid version was going so well... :-)

Wednesday, November 30, 2011

Sythe update released

Just a quick one - I've just released an update to Sythe to fix:
  • Never-ending playback after closing Sythe
  • Incorrect step between octaves
  • Incorrect octave start/finish
  • Mis-match between note and frequency when switching modes
Thanks for the patience with this one guys, I've gotten totally bogged down in the 2011 Google AI Challenge (a greater time-sink than Skyrim...)

Sythe 1.3 is now available on the Android Market for free or very, very cheap.

Thursday, October 6, 2011

Sneak peek


You are looking at the main screen of an early version of my next app - a high-quality drum synthesiser. Currently it mixes 3 sine-wave sources with independent frequencies, amplitudes and ADSR envelopes.

Oh, and yes, it'll use my minimalist red-on-black UI again :-)

Saturday, September 24, 2011

Warm fuzzy feelings

As I mentioned a little while ago, my last update to Sythe was released into two apps - one free and one for the lowest price available in each currency.

With the exception of their names, the difference between these two apps is zero. I didn't even employ any tricky marketing; both apps openly refer to each other and both clearly state that they are the same app.

And you know what, people have bought the paid version!

Thanks guys, you've re-inspired me and I am already working on some new Android apps - watch this space...

Saturday, September 10, 2011

Sythe 1.2 released!


Sythe 1.2 has been released onto the Android Market. This release brings:
  • A 3-octave "Grid" mode
  • Faster and more refined user interface
  • Some German localisation
Get it from the Market for free or if you'd like to support my work you can buy it for the cheapest price allowed in your currency.

Thank you for all the feedback you've given me so far, I will continue to integrate your ideas into Sythe as long as you give them to me!

Friday, July 29, 2011

Hiatus, features and a thank you

Well, that was a longer "week or so" than I initially expected. The short version is that since my last post my partner and I became home-owners (Yay!) and I simply didn't have the time to push out a serious update to Sythe. I also found a number of problems with the new UI - something that will be left on the back-burner for a little while.

The good news is I can now show you screenshots of some new functionality:



Firstly, I have added an toggleable Pad note grid that you can lock the synth to, with the input screen able to show a one or two octave span. The X/Y marker can still move freely but the current note is highlighted on the grid.

I have also added a Pad "Tilt" mode (toggled via the "+" button) where you can control the pitch and Sine/Saw mix by tilting the phone left, right, forwards and backwards. This allows you to change other parameters while still controlling the Pad behind the scenes.

The addition of this grid was suggested by a number of reviewers on Sythe's market page and I would like to take this opportunity to thank everyone who has given me feedback on Sythe so far. Your feedback has been both positive and filled with excellent feature suggestions.

These features will hit the market shortly, along with some internationalisation, reliability updates and background playback. 

Friday, April 29, 2011

Sneak peak of the new Sythe UI

I didn't mention this in my last post on Sythe's future because it was only an idea then, but the new UI has progressed far quicker than expected so here is a sneak-peak:

Click for a larger, clearer version
The design will evolve of course, but this is the general idea. The new UI will make its way into the next update, coming within then next week or so I hope!

Friday, April 22, 2011

What's next for Sythe

Just a quick update on what's coming out with the next version of Sythe Free:
  • German Localisation - Germany makes up 10% of my active users and is the largest non-English user-base.
  • Background Playback - so you can use multiple applications at once.
  • Higher reliability - I've removed a ton of unhelpfully-buggy code, and thanks to the help of one of this blog's followers, dcp, I think I've fixed a rather nasty glitch sound that's triggerable by a certain combination of inputs. Thanks, dcp!
The rest of my energy has been going into developing the first release of the full version of Sythe - so far I have implemented about 30% of the record-loop functionality. The good news is that I have the next 10 days off work so it shouldn't be too far away!

Monday, April 11, 2011

Milestones

Just a quick update - here are some milestones I have reached in the last week:

Downloads of Beat Dialer Lite: 6000
Downloads of Beat Dialer full: 100
Downloads of Sythe Free: 800
Active installs of Sythe Free: 500
5-star ratings of Sythe Free: 5

Sythe Free is the highest rated app that I have released with 4 stars average from 13 ratings - I must be doing something right! :)

Sunday, April 3, 2011

Sythe update released

The main input screen, showing the two new buttons

Turning on the "loop" button allows you to try out the effects in real-time
I've just released a new version of Sythe Free - the main changes are the addition of a button to keep the sound on whilst you are changing settings as well as the movement of the settings button from the menu to the main screen. Behind the scenes there are a few tiny tweaks to improve the synthesiser's performance.

As before, Sythe Free is available on the Android Market right now!

Sunday, March 20, 2011

Managing multiple versions of an Android app

When developing an Android app you may find yourself in a situation where you want to publish two different versions - one basic version that is free and a fully-featured version that isn't.

The free version is the marketing "hook" to get people to buy your full version - this is the tactic I am taking with Sythe, and that I took with Beat Dialer.

The obvious problem is that you end up with two codebases that undoubtedly share the vast majority of their code - requiring error-prone double-entry of any changes to common code. Here is the technique I am using to help mitigate the effects of this problem.

Firstly - this is what you'll probably have in your Eclipse Package Explorer:

Two identical hierarchies of code, the differences between versions limited to a few files in the "src" directory.
The key thing here is that I have broken the code up into "common" and "tests" packages, separate from the main "free" or "full" packages. In the filesystem these packages are different folders - allowing me to use Symlinked folders to share the "common" and "tests" code between the two projects:

I've also Symlinked the "drawable-*" folders in "res"

Whilst I obviously still have to test each project after an update, I no longer have to re-enter the same code in each - a major reducer of errors.

I how this helps you out with you projects - let me know if you have any suggestions for working with cross-project share code.

Saturday, March 19, 2011

Free Sythe beta released

The title says it all - I've released a free version of Sythe to the Android Market - please try it out and let me know what you think.

The forthcoming paid version will have extra exciting features like sequencing and background playback, so stay tuned!

Sunday, March 13, 2011

Sythe sequencer layout

Here's a sneak preview of the in-progress sequencer's integration into Sythe:


The idea being that you can have a different setting for each parameter for each step in the sequencer - crossed-fingers that that's how it turns out!

Saturday, March 5, 2011

An update on Sythe

Sythe (the working title for my work-in-progress Android synthesiser) has taken a few more steps toward release with the re-writing of the audio engine and an updated UI design:

The "Pad" is used to generate the sounds - horizontal axis for frequency, vertical axis for sine/saw wave mix.


The other areas control the effects applied to the generated sound.

The sound is still the same as before with the exception of the AM LFO actually being time-correct.

I've decided to go ultra-minimal on the UI again, for two reasons. Firstly, the performance of the whole system very important and too much UI will lead to too much latency in the audio. Secondly, the input method is inspired by the look of the Korg Kaossilator which uses a big black square pad for input.

The pre-release TODOs are:
  • Save/Restore of configuration
  • Support for multiple audio output formats/rates
  • A few more LFOs to modulate the harmonics and "fatness"
  • A preferences screen for changing the colours and min/max "Pad" frequencies. 
For those interested in how it works, Sythe is essentially a wavetable synthesiser. When a touch event is registered, Sythe renders a single cycle of the mixed sine and saw waves, then applies effects to that rendered cycle. The AM LFO works by modifying the Android AudioTrack's volume hundreds of times a second following a sine wave shape.

Friday, February 11, 2011

Android application downloads update


  • Beat Dialer Lite: 96 downloads/day (up significantly from 2 weeks ago, probably due to the awesome Palm Sounds review)
  • Beat Dialer: 1.4 downloads/day (roughly the same as before)
  • Mozzy: 25 downloads/day (down significantly from 2 weeks ago, thankfully)
Oh, and as a side note, I've fixed the nearly invisible link styles...

Sunday, February 6, 2011

Synthesis

Today I built my first synthesiser. I've wanted to create one for a while, and considering that I now understand the Android audio system down to the bytes-in-the-buffer level, I thought a touch-driven Android synthesiser would be a good challenge.

Currently the synthesiser has:
  • A sine wave tone generator
  • A saw wave tone generator
  • A phase-shifted saw-wave tone generator (for "fatness")
  • A 0-20 layer sine wave harmonic control
  • A 0-20 layer saw wave harmonic control
  • A 1-20Hz amplitude modulator
All of these inputs are driven off x/y locations on the touch screen.

This is what is sounds like (after a day's work, clicks and SoundCloud transcoding muck included for free):

Sythe demo 1 by thisismyrobot

Enjoy!

Saturday, February 5, 2011

A great review and some updates

Beat Dialer has received its first review! Ashley from a fantastic mobile music site that I've been following for a while, Palm Sounds, said some wonderful things about Beat Dialer:

"Beat Dialer is a straightforward drum app for Android that has really good timing (and I've used quite a few that couldn't claim that), a different interface from more drum machines and good quality samples. I mean, what more could you ask for in a drum app?"

Thanks Ashley!

Site updates
I've also reworked this site a bit to better focus on my Android application development. Hopefully this will increase the visibility of the site in Google's eyes and help people find my applications.