soundscrape

A programmatic framework for modular synthesis:
Scheme in the front, C in the back!
< | ^ | > | :>

positional and keyword arguments

Take a look at the help file for sine. The inputs listed there are frequency, mul, and add. In that order, they are the arguments to audio and control:

(play (audio sine
             800 ;; frequency: 800 Hz
             1   ;; mul (multiplication factor to apply to output): 1.0
             0)) ;; add (amount to add to output): 0
;; that's a nasty sound!

It gets a bit tedious to remember whether an argument is first, second, etc., so you can pass arguments by keyword as well. Keywords are made by prefixing the argument name with a colon (:). Keyword-style arguments can appear in any order. Positional arguments have to appear in order, which is why they are called positional.

;; Here we use keywords to pass arguments in an arbitrary order.
(play (audio sine
             :mul 1
             :frequency 800
             :add 0))

;; You can mix the styles freely, even in the same function call:
(play (audio sine
             800 ;; no keyword, defaulting to the first argument,
                 ;; frequency
             :add 0 ;; here we have a keyword, that's cool
             :mul 1) ;; you can't have positional arguments after
                     ;; keyword arguments
< | ^ | > | :>