ckv: an audio language based on Lua, inspired by ChucK

It's a strongly-timed, dynamic language that makes cool sounds.

In early, heavy development. Well-tested on OS X 10.6, but nowhere else. Probably works on Linux. Do you know how to install stuff from source?

ckv is my attempt to create an audio language based on my favorite parts of ChucK, with a much more comprehensible implementation. Being built on top of Lua automatically provides several features ChucK currently lacks, most importantly garbage collection, flexible global name-spacing, global class redefinition, and dynamic typing (a feature if you're into that kind of thing). ckv has pet features I'm personally excited about like the ability to define custom unit generators in the language and read any compressed audio format supported by ffmpeg.

ckv is currently only a few thousand lines of ANSI C and C++, but it is missing some very important functionality like a comprehensive library of unit generators, MIDI, OSC, HID, and multi-channel audio support. As I add these features, I aspire to keep the code clear, clean, and concise to keep the barrier to entry low for people interested in contributing.


The ckv tutorial walks you through installation and usage of ckv. Unlike many tutorials, it's very good! I think you should read it. :)

Once you have finished that, find plenty more examples and goodies in language reference.

Get It

ckv is known to work on OS X 10.6 right now, but it really oughta work on Linux as well. Windows? If you find a way to build it.

Source code and bug/feature tracker are hosted on GitHub:

The binaries will be slightly out-of-date as I make them by hand, but hopefully they'll keep up.


For Lua reference, the Lua manual is great. To learn Lua, see the “Introduction to Lua” section on the Lua wiki.

For now, the best introduction to ckv's additions to Lua is the tutorial, but additional example code is provided in the README (./ckv README) and in the ckv/ex/ directory named *.ckv (./ckv ex/01.ckv).


Mailing lists: for users of ckv, for discussion of ckv development. To subscribe, just send an e-mail. The first one will not be posted, and you'll receive confirmation of your subscription.

Mailing list archives are available. Hosting the archives on this site is planned, but not a high priority.


I write ckv to be as easy to understand and modify as I can. Where optimization is necessary, I look first to make large changes that maintain the cleanliness of the code but make use of more efficient algorithms. This leaves lots of room for optimization, but results in code that is usually fast enough. Where ugliness can't be avoided (for example, interfacing with RtAudio's C++ library, or ffmpeg, when the rest of ckv is ANSI C), I take measures to insulate the rest of ckv from the grime.

I write ckv to be easily embedded, like Lua itself. ckv.c, ckv's entry point, is essentially a client of the ckv VM (CKVM) library in ckvm.c, which knows nothing of ckv's audio libraries and can be used completely independently of them.

Along those lines, I write ckv to be modular. Though by default it includes a full unit generator audio processing suite, a silent-mode-only version of ckv could be created by deleting the audio/ directory and making a few changes in ckv.c. Other extensions, such as for processing video, could be easily added, and are planned.


Join the mailing lists, check out the source, and start coding something on the issues list!