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!
Sign up for Updates
Here you can leave your e-mail address to join a confidential, low-volume mailing list on audio programming with Kronos.
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
Paradigm | Functional |
Signal model | Discrete reactive |
Types | Static, Generic |
Compilation | JiT, AoT |
Memory Management | None, Static |
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!