;
;
; :BAR and :BEAT macros
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;; EXAMPLE
; (let ((beat (*metro* 'get-beat)))
; (:bar 8
; (:beat '(0 4) (play c3 90 1 1))
; (:beat '(0 1 5) (play g3 90 1 1))
; (:beat '(2 6) (play a3 90 1 1))
; (:beat '(3 7) (play f3 90 1 1))
; )
; )
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(impc:aot:do-or-emit
(define-macro (:beat y . args)
`(for-each (lambda (step)
(if (equal? (modulo beat *denom*) step)
(begin ,@args)))
(if (list? ,y)
,y
(list ,y))))
)