這几天在研究如何通過编程作曲。看到了 Opusmodus 這個用 Common Lisp 编曲的软件,然而实在太貴了,就算是 Academic License 也有 £149(≈$208),和未打折的 Logic Pro X ($199.9)一樣貴。
有一個功能大副度缩水的 Common Lisp Music,我正在整理。
然後发現了一個好玩的東西:Live Coding。实時编程作曲,現場表演。
用的是专门用于 Live Coding 的语言 Extempore。這是 Scheme 和一種靜態类型语言 (xtlang) 的混合。
Scheme 用于动态修改程序,上面视频的主要邏輯就是用 Scheme 调用一个尾递归 procedure 形成一個 loop,然后在不中断 loop 的前提下通过直接修改 procedure 定义变曲调。靜態类型语言会通過 LLVM JIT 成比较高效的 native code,供 Scheme 调用。其解釋器是个监听端口的 Daemon,在编辑器中写好代碼就会发到解釋器运行。
(define scheme-closure
(lambda (a b)
(let ((result (* a b)))
(print "result = " result)
result)))
(bind-func xtlang_closure
(lambda (c:double d:i64)
(let ((result (* c (i64tod d))))
(printf "result = %f\n" result)
result)))
extempore-mode 現已加入 Melpa。