Welcome to Kronos!

Kronos is a visual/textual programming language designed specifically for musical signals. You can try the visual patcher right away in your browser. Have fun!

Code Examples

You can also use your favourite text editor to write programs such as these;

Sinusoid from Scratch

Import Complex MyOsc(freq) { ; angular frequency w = Math:Pi * 2 * freq / Audio:Rate() ; rotation coefficient b = Complex:Unitary(w) ; rotate at audio rate y = z-1(#1 y * Audio:Signal(b)) ; output real part Complex:Real(y) } snd = MyOsc(440) * 0.5

Additive Wub Wub

Import Filter Use Algorithm[Map Expand] ; lambda to turn frequency into waveform voice = f => MyOsc(f) * MyOsc(Math:Sqrt(f) * 0.005) ; generate 100 detuned harmonic frequencies freqs = Expand(#100 (+ 55) 54) ; transform values into waveforms sound = Average(Map(voice freqs)) ; apply resonant lowpass filter fc = 440 - 400 * MyOsc(1.2) snd = Filter:Lowpass(sound fc 0.8)

See more code examples here.

Language Overview

ParadigmFunctional
Signal modelDiscrete reactive
TypesStatic, Generic
CompilationJiT, AoT
Memory ManagementNone, Static
Characteristics

Kronos excels at real-time audio. Because it compiles to deterministic native machine code or WebAssembly, anything you build can run at top speed, at the lowest latency the platform can provide.

Code or Patch

Kronos is a very small dataflow language. Its syntax is designed to coincide with the signal graph you build. That is why you can equally well write code in your favorite editor or patch up virtual sound worlds in Veneer.

Go with the Flow

Kronos is designed for the creative mind. We strive for interactivity and rapid response in all situations. The compiler has a turnaround time in the order of milliseconds, and the visual tools provide interfaces to tweak programs and parameters on the fly without interrupting your flow.

Generative Powers

Despite its simplicity, the Kronos language makes good use of polymorphic lambda calculus to build the signal graphs. Your program blueprints get specialized according to the signal types that are fed into them, which means they can automatically accommodate different channel counts, number types or even recombined on the fly with closures and higher order functions!

Get started!

Hit the ground running with our interactive tutorial. Alternatively, learn more about the technology in the article section, or get in touch!

Looking forward to hearing what you build!