I'm Seb Mondet:
atdgen
).What's the need?
This is not:
We want to …
Why on earth spend time writing software instead of just playing music …
Keyword: Flexibility
git
.Music on GNU/Linux → JACK .
Locoseq, 2007/2008.
smondet/locoseq
Ten (10!) years later: code relatively easy to understand/reuse.
Too complex for graphical apps → EDSLs
The vecosek-scene
library, a.k.a. the very low-level “EDSL:”
Single Window Customizable GUI
Tempo Ramp
let tempos =
make_tempo_list ~start:176 ~stop:to_bpm ~length:14 @ [to_bpm; to_bpm]
in
List.mapi tempos (fun idx bpm ->
let drum_choice =
if 0 <= idx && idx < 8 then 1 else if idx < 12 then 2 else 3 in
let msg =
sprintf "BF slow down (%d BPM, [%d/%d], D%d)" bpm (idx + 1)
(List.length tempos) drum_choice in
let next, with_break =
if idx + 1 = List.length tempos then ("BASS TONE", `Default)
else ("slow down", `None) in
let drum_part =
bar_display_part 2 ++ multiply 2 (base drum_choice)
++ if idx mod 4 = 3 then concat [empty_44; brk drum_choice] else empty_44
in
list [tempo bpm; one ~next msg drum_part] )
Q Rational-ish Numbers → precise/consistent MIDI “Ticks”
module Q: sig
type t = Fraction of int * int | Plus of t * t | Times of int * t | Minus of t
val q : int -> int -> t
val ( / ) : int -> int -> t
val i : int -> t
val one : t
val ( + ) : t -> t -> t
val ( * ) : int -> t -> t
val minus : t -> t
val ( - ) : t -> t -> t
val half : t
val third : t
val quarter : t
val to_float : t -> float
val to_ticks : ppqn:int -> t -> int
(* ... *)
end
With duration estimations:
Total length: `01:02.62822`
- **No Moment**
- `00:00.000`: **Video Demo 0.1** (200 bpm) → `00:02.2399`
- ∞ Hello (length: ((1 + 8) + (- 1))) (next: Some 4/4 riff)
- `00:02.2399`: **Video Demo: Master of Puppies** (200 bpm) → `00:19.19184`
- ∞ Famous 4/4, master of pups, looping (length: (8 × 4)) (next: Famous 7/4)
- `00:21.21583`: **Video Demo: Money 7/4** (100 bpm) → `00:35.35938`
- ∞ Some Drum'n'Bass (length: (4 × 4))
- ∞ Famous 7/4 (length: 7) (next: Drum'n'Baaaaasss)
Improve documentation and:
vi
-like event sequences).Any questions?
Ask NOW!
Cf. also:
URL: https://wiki.haskell.org/Haskore
URL: https://wiki.haskell.org/Hommage
https://dvde.biz/projects/haskellommage
is 404 now.URL: http://hackage.haskell.org/package/HarmTrace
URL: http://hackage.haskell.org/package/mezzo
https://github.com/tidalcycles