Figured this might be of some interest to someone around here - and either way, it's all done on Linux, and it will be released on Linux. ;-)
(Original announcement post at the end!) ------------------------------------------------------------------------- The whole game engine will probably go Free/Open Source eventually; older versions of parts of it already are. The synth engine will be JACKified and open sourced as soon as I get around to it! Going to support JACK in the game as well, as I use it on my devsystem all the time anyway. No idea if anyone will ever understand or care for this strange beast of a sound engine, but anyway... :-D For your amusement, here's the "lead synth" used for the theme and some other melodic features in the song: CuteSaw(P V=1) { !P0 sp, +P sp, w saw, p P, a 0, !er .05, !vib 0, !tvib .01 .rt wg (V + a - .001) { sp (vib * 6 + rand .01) 12 { -sp vib, +p (P - p * .8), +a (V - a * er), d 5 } 12 { +sp vib, +p (P - p * .8), +a (V - a * er), d 5 } +vib (tvib - vib * .1) } a 0, d 5 1(NV) { V NV if NV { vib .005, tvib .005, er .05, wake rt } else { tvib .02, er .02 } } 2(NP) { P (P0 + NP), p P } } Yeah, I was in a neurotically minimalistic kind of mood when I designed that language... But, it Works For Me(TM)! Less typing ==> quicker editing. ;-) (The original version of ChipSound, with a more assembly-like scripting language, was less than 2000 lines of C code. It's slightly below 4500 lines now, compiler included.) When playing a note, a voice with its own VM is started, and set to run this script. The VM runs in unison with the voice, alternating between audio processing and code execution. Thus, timing is sub-sample accurate, allowing the implementation of hardsync, granular synthesis and the like without specific engine support. Timing commands can deal in milliseconds or musical ticks, making it easy to implement rhythm effects, or even writing the music in the same language, as I've done here. Voices (microthreads) are arranged in a tree structure, where each voice can spawn any number of sub-voices it needs. Messages can be sent to these voices (broadcast or single voice), allowing full real time control. Oscillators currently available are wavetable (mipmapping, Hermite interpolating, arbitrary waveform length sampleplayers) and "SID style" S&H noise. It's possible to use arbitrary sampled sounds and waveforms, but so far I've only been using the pre-defined sine, triangle, saw and square waveforms, and the noise generator. ------------------------------------------------------------------------- Kobo II: Another song WIP ------------------------- "Yesterday, I started playing around with a basic drum loop made from sound effects from the game. The usual text editor + ChipSound exercise, using only basic waveforms. I sort of got caught in the groove, and came up with this: [...]" Full story: http://olofsonarcade.com/2011/11/06/kobo-ii-another-song-wip/ Direct download: http://www.olofson.net/music/K2Epilogue.mp3 -- //David Olofson - Consultant, Developer, Artist, Open Source Advocate .--- Games, examples, libraries, scripting, sound, music, graphics ---. | http://consulting.olofson.net http://olofsonarcade.com | '---------------------------------------------------------------------' _______________________________________________ Linux-audio-dev mailing list Linux-audio-dev@lists.linuxaudio.org http://lists.linuxaudio.org/listinfo/linux-audio-dev