Déclaratif, pas impératif
Décrivez une intention musicale : un rythme, une mélodie, un enchaînement de sections, sans jamais piloter d'horloge ni de scheduler. Lulalib s'occupe de la résolution temporelle.
(Lulalib) est un DSL déclaratif de composition musicale pour JavaScript et TypeScript.
Décrivez une intention musicale, exportez un Score exact et sérialisable, sans jamais piloter l'horloge.
import { song, section, bass, lead, drums } from "Lulalib"; const verse = section([ drums("909").kick("x---x---").hihat("xxxxxxxx"), bass("acid").notes("1 5 1 4").rhythm("x-x-x-x-"), lead("saw").notes("1 3 5 3").octave(5).rhythm("x-x-x-x-"),]); export default song({ bpm: 120, key: "Am" }) .arrange([verse, verse]) .export();Sous le capot
Décrivez une intention musicale : un rythme, une mélodie, un enchaînement de sections, sans jamais piloter d'horloge ni de scheduler. Lulalib s'occupe de la résolution temporelle.
Aucun moteur audio, aucun DOM. Le cœur de la lib tourne dans n'importe quel environnement JS/TS, du navigateur au serveur.
Chaque composition se compile en un objet Score plat, en JSON. Les durées sont des fractions : ce que vous écrivez est ce qui est joué.
section, song, track... chaque méthode retourne une nouvelle valeur. Réutilisez, composez, dupliquez vos patterns sans effet de bord.
Playground
import { song, section, bass, lead, drums } from "Lulalib"; const verse = section([ drums("909").kick("x---x---").hihat("xxxxxxxx"), bass("acid").notes("A2 E2 A2 D2").rhythm("x-x-x-x-"), lead("saw").notes("A4 C5 E5 C5").rhythm("x-x-x-x-"),]); export default song({ bpm: 120 }) .arrange([verse, verse]) .export();