(define-macro (make-instrument defname synthname . args)
(let* ((note (append (string->sexpr (string-append "(" (symbol->string synthname) "_note)")) args))
(fx (string->sexpr (string-append "(" (symbol->string synthname) "_fx)"))))
`(begin
(eval (bind-val ,defname INSTRUMENT (make_instrument ,note ,fx))
(interaction-environment))
(eval (define ,defname (call-as-xtlang-leaky ,defname))
(interaction-environment))
(print-with-colors 'default 'default #f (print 'New 'instrument 'bound 'as ""))
(print-with-colors 'green 'default #t (print ',defname ""))
(print-with-colors 'default 'default #f (println 'in 'both 'scheme 'and 'xtlang))
#t)))