Installing FunkeySynth to your MeeGo device

After pushing the code to Gitorious I decided to wrap the application into an RPM so people can try it out themselves.

Installing FunkeySynth with Zypper:

Alternatively, you can download the portaudio & funkeysynth RPMs from here

and install the app with

  • rpm -i <portaudio.rpm>
  • rpm -i <funkeysynth.rpm>

Have fun!

Presenting: FunkeySynth

It’s online! \o/

Code for the synthesizer can be found here:

The synth should compile out-of-teh box for any platform having Qt/QML and PortAudio available. So far i’ve tried with Ubuntu 10.10,
MeeGo and OS X. For compiling this into your MeeGo device, take PortAudio RPMs from here:

For other platforms, take PortAudio from and build it from sources, or install it using the usual methods of your OS.

Packaging the synth for MeeGo is on the TODO list. The list of new nice-to-have features for the software includes e.g. these:

  • Multi-touch support -> polyphonic audio support (done)
  • Having support for presets (loading and saving)
  • More effects (delay, reverb, phaser, flanger)
  • Additional synthesis methods (additive, subtractive, wavetables, etc)
  • More combinations for the routing audio signals inside the synthesiser -> two operators in parallel + two modulating etc

Demo clip of the latest version:

Smoothing the synth

I’d like to give about a million thanks to Chris Dumez! Thanks to his blog post, found out what was needed to make the QML UI run smoothly. Probably old news to any coder more familiar with QML, but quoting Chris:

“A recommended configuration for embedded X11-based devices is to use a raster graphics system with a QGLWidget for the viewport of your QDeclarativeView. ”

So, now the synthesizer has a smooooth UI (though the look of it is still an R&D-one : ). Also added a couple of sound effects. I’m going to give a small demo of the app in the next Tampere MeeGo Network meetup on Tue 31st. The plan in the near future is to clean up the code, add the appropriate licensing text & stuff, and then push the code all the way to the open so other people can join coding this forward. Currently it has been a bit too early to release any code, because most of the development periods have consisted of changing almost every single file on the project and doing a couple of big refactoring rounds,  so it’s better to release it once things are a bit more stable.

Latest demo video:

More real-time sound synthesis


The synth project has been going forward in a nice pace regarding how few days have been actually spent for the sketching&coding.
I’m quite impressed with the speed of doing the UI in QML. Had an even-worse-than-now -looking quick hack UI together, after 5min
of QML tweaking it started to look like the current “decent for R&D” UI.

The latest version of the synth has got four oscillators in it, each with configurable waveforms and envelopes. The technique that’s being used to generate the sound is called FM synthesis. If you’re interested in reading more about FM synthesis, check e.g. here, here, or a video tutorial here. Even though FM synthesis is a simple method, it can generate quite complex sounds. One example of a commercial FM synthesizer is the Yamaha DX7, released in the beginning of the 1980’s.

Next in the task list are things such as making the synthesizer more complete, adding effects and designing/polishing the UI for a better user experience. Anyways, enough for the talk, time for an actual demo clip:

Real-time sound synthesis on MeeGo


Glad that got my first tablet project going forward last weekend. The aim is to create a nice synthesizer for MeeGo tablets.

The UI will naturally be typed in QML, the engine/synthesis side will be in Qt/C++, and PortAudio is the audio interface towards the hardware. Eventually, i’m planning to add a nice boost to the synthesis by using Intel’s Integrated Performance Primitives. That’s the plan, let’s see how quickly the project will proceed : )

Now that there’s an initial skeleton ready for audio processing, it’s time to start
implementing a synthesis engine, effects, a nice UI et al. Here’s a short demo
of the result from Sunday coding:

Edit: The first clip had audio out-of-sync, here’s another clip to show it’s due to the camera, not the software having a big latency : P