Skip to content

Instantly share code, notes, and snippets.

@philandstuff
Created February 14, 2012 07:28
Show Gist options
  • Save philandstuff/1824500 to your computer and use it in GitHub Desktop.
Save philandstuff/1824500 to your computer and use it in GitHub Desktop.
Composable insts
(ns definst2.core
(:use [overtone.core]))
(defmacro definst* [name params & form]
(let [cgen-name (symbol (str name "-cgen"))
param-list (partition 2 params)
cgen-params (vec (mapcat (fn [[name default-val]] [name {:default default-val :doc ""}]) param-list))]
`(do
(definst ~name ~params ~@form)
(defcgen ~cgen-name ~cgen-params
(:ar ~@form)
(:default :ar))
(def ~name (assoc ~name :cgen ~cgen-name)))))
(definst* sin1 [freq 5]
(sin-osc freq))
(definst* sin2 []
(sin-osc (+ 440 (* 50 ((:cgen sin1))))))
(definst* sin3 []
(sin-osc (+ 440 (* 50 ((:cgen sin1) 2))))) ; set sin1's freq param
(comment
(sin2)
(sin3)
(stop)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment