Submitted by sudo in freeAsInFreedom

Perhaps you have played around with some of the synthesizers in LMMS, and have been disappointed when the sounds you've produced sound too "computer-y". Perhaps you've looked into soundfonts or sample libraries, but you're not satisfied with having repeated notes sound exactly the same. Perhaps you've experimented with the beast that is ZynAddSubFX, but couldn't find your way around the ornery user interface, or you made an instrument that sounds 90% organic, but still a little bit "off".

If you've encountered any of these problems, then I am here to deliver your saving grace: an obscure but extremely powerful synthesizer called Tao.

Tao isn't like any other synthesizer you've used. Instead of playing a recording of an instrument, or generating waveforms then modulating them with other waveforms, Tao creates a computer model of a vibrating string (or multiple strings, if you so desire), and uses that to generate sound. This results in extremely realistic sounds. As in, so realistic you'd mistake it for an actual recording. Don't believe me? Have a listen to this. That's a virtual "guitar" I modeled playing the first four measures of Bach's Prelude in D from his Cello Suite No. 1. (Here's the Tao script that produced it.)

Impressive, wouldn't you agree? Sure, it doesn't sound exactly like a real guitar, but it's very close. And I was able to make that within 24 hours of learning about Tao - certainly, with some fine-tuning, it could be made to sound even more organic.

Tao can do more than just simulate plucked strings. It can simulate vibrating meshes of various shapes, like rectangles, triangles, circles, or ellipses. These can be used to simulate drums, among other things. Tao also has classes for bows and hammers, which can be used to stroke or hit the instruments, respectively. But the most interesting and powerful feature is the ability to "connect" one part of an instrument to another instrument. This can form a sort of compound instrument, which can result in quite unique sounds.

Now, I do have to temper this praise with a bit of criticism. Despite its incredible power, Tao was developed as a personal project, and it shows. To use it, you have to write a Tao script that describes the instrument, and the notes you want to be played on it. Unfortunately, there is no piano roll feature - you have to describe (in code) how you want a note to be played, like this:

At 1.5 secs for 0.5 msecs:
    strings[3](0.2).applyForce(1);
    ...

And you have to do that for every note you want to play. Yes, it gives you a lot of fine control over how the note will be played, but it's also incredibly tedious. (Supposedly there is a C++ library for using Tao in other applications, so maybe someone could turn it into a plugin for LMMS, or something like that. Take the notes from the piano roll, convert them to a Tao script, have Tao render it, then output the result to a sample track. That would be incredible. Oh, I'm drooling on my keyboard just from the thought of that. (Ok, not really.))

Another annoying mis-feature is that Tao doesn't like file extensions. If you have a Tao script called foo.tao, you can't run it by typing tao foo.tao in your terminal; you have to say tao foo, and let Tao add the .tao extension on its own. Yeah. Your terminal's tab-autocomplete is useless, because you have to backspace out the file extension. Then, you need to do it again when you run taosf to convert the raw output of the tao script to a wav file. And that's another annoyance - you have to run 2 separate programs to actually get your instrument's output into a usable format. I understand why it's necessary to normalize the data after it's been rendered, but surely the main tao script could call taosf, instead of making me do it? I ended up writing a shell script that calls tao and then taosf, so it's not that big of a deal anymore, but if I need to write another script to make running your script easier, then your script's design sucks.

Lastly, Tao also has the interesting feature of using OpenGL to visualize your instrument as it's being played. This is really useful, because it lets you easily see if you've made a mistake in the script, aside from just being damn cool to watch. You can pan, rotate, and zoom the camera using your three mouse buttons (or just pan and rotate, if you don't have a middle mouse button). You can even control the placement of the different parts of your instrument in 3D space by calling certain methods from your script (this has no effect on the actual sound of your instrument; it's just for the visualization). But one annoying feature of the visualization is that there's no way to disable it, at least when you're running it from the tao program (read: every time you change your script, and tao recompiles it). The visualization starts out paused, so you have to press the right arrow key to get it started. Furthermore, if you want Tao to render the output of your script at full speed, and not at whatever speed the visualization window is displaying, you have to minimize the visualization. And you have to do this Every. Time. you change the script. It's worth it to get the sound quality Tao is capable of, but damn if it doesn't get annoying after a while.

So, overall, Tao is an amazing synthesizer capable of making shockingly realistic sounds, but it suffers in the user experience department. What it really needs is for a competent programmer to clean up the program and make it easier to work with. (The original author abandoned the project in the year 2000.) Then, it could go from an audio engineer's plaything to something truly feasible for music production. Maybe, if real life doesn't interfere with my hobbies again, this could be a project for me. Maybe.


Anyway, that's it for this Free Software Application of the... whenever I feel like writing one of these. Do you know of a synthesizer that's comparable in quality to Tao, or maybe of someone else's attempt to fork the project? Let me know in the comments. For anyone who wants to learn how to use Tao, take a look at the (mostly complete) user manual. You can download the source code here (it's licensed under the GPLv2), or alternatively install the taopm package if you have Debian.

6

Comments

You must log in or register to comment.

yaaqov wrote

This and you are amazing.

2