A Clojure/ClojureScript library for music composition using sequences of note maps and functional transformations.
Leipzig is a music composition library for Clojure and ClojureScript that enables programmatic music creation through functional programming. It models music as sequences of note maps with properties like pitch, time, and duration, which can be transformed using Clojure's sequence functions. The library provides tools for melody generation, scale and chord manipulation, and integration with synthesis engines like Overtone for playback.
Clojure and ClojureScript developers interested in algorithmic music composition, creative coding, or building interactive audio applications. It's particularly suited for those who want to apply functional programming patterns to music creation.
Developers choose Leipzig for its elegant integration with Clojure's sequence abstraction, allowing them to compose music using familiar functional transformations. Unlike rigid DAWs or music frameworks, it offers a flexible, data-oriented approach where music is just another Clojure data structure that can be manipulated with standard library functions.
A music composition library for Clojure and Clojurescript.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Models music as plain Clojure maps with keys like :time and :pitch, enabling easy manipulation using standard sequence functions like map and filter, as shown in the design section.
Functions like where and phrase are threadable with Clojure's ->> macro, allowing clean, composable transformations of melodies, exemplified in the get-started examples.
Works in both Clojure and ClojureScript, so compositions can run in JVM environments or browsers via Web Audio API, noted in the Clojurescript section with Klangmeister as an example.
Organized into namespaces for melody, scales, chords, and temperament, facilitating focused development and easy integration of custom transformations, as highlighted in the philosophy.
Live playback relies on Overtone, which has known problems on 64-bit Windows and requires setting up Supercollider, adding setup complexity as mentioned in the issues section.
Deeply integrated with Clojure's idioms and functional programming, making it inaccessible to developers without Clojure experience or those in other language ecosystems.
Focuses on note sequencing and composition; for advanced synthesis, effects, or real-time MIDI control, users must integrate external libraries or write custom code, as seen in the playback examples.