Sneed synth is a genre of synthesizer music.

Sneed synth MUST be made using Nyquist and/or Sneedacity.

Musically, Sneed synth is a work in progress, and artists are welcome and invited to develop the genre.

It is customary to distribute Sneed synth with a permissive license of your choice, with the +NIGGER rider.

First Sneed

This is the first Sneed synth song to ever exist. Enjoy.

Getting Sneeded

Get nyquist, get an editor, and use the following starter code:

;; Nyquist library for Sneed synth creation.
;; Load it in your song creation scripts like so:
;; (load "relpath/to/this/file")

(load "reverb")

;;;; Instruments ;;;;

;; Future bass synthesizer.
(defun future-bass-note (pitch)
  (let* ((envelope (env 0.01 0.2 0.1 0.9 0.8 0.8))
         (contour (congen envelope 0.01 0.05))
         (saw-feedback 0.5)
           (scale 100.0
                  (sum (fmfb pitch saw-feedback 1.0)
                       (fmfb (+ pitch 0.03) saw-feedback 1.0)
                       (fmfb (- pitch 0.03) saw-feedback 1.0)
                       (fmfb (+ pitch 0.06) saw-feedback 1.0)
                       (fmfb (- pitch 0.06) saw-feedback 1.0)
                       (fmfb (+ pitch 0.12) saw-feedback 1.0)
                       (fmfb (- pitch 0.12) saw-feedback 1.0)
                       (fmfb (+ pitch 0.24) saw-feedback 1.0)
                       (fmfb (- pitch 0.24) saw-feedback 1.0)))
    (mult (reverb supersaw 0.4) contour)))

;; Wrapper for `bowed'.
(defun bowed-note (pitch)
  (bowed pitch (env 0.01 0.1 0.1 0.9 0.9 0.9)))
;; Wrapper for `flute'
(defun flute-note (pitch)
  (flute pitch (stk-breath-env 1.0 0.1 0.9)))

;;;; Utilities ;;;;

(setq sound-duration-max-samples 1000000)

;; Get the duration of a sound.
;; Raise the constant `sound-duration-max-samples' if needed.
(defun sound-duration (snd)
  (abs (apply '- (snd-extent snd sound-duration-max-samples))))

;; Load Adagio file (sheet music). Returns a `seq'.
(defun load-adagio (file)
  (let ((stream (open file :direction :input))
        (s (seq-create)))
    (seq-read s stream)
    (close stream)
;; This is a song synthesis script. It specifies what audio to
;; generate, what audio to import, and how to combine it into
;; the final song.

;; Substitute the path here with a relpath to the Sneed library
;; covered previously. It supplies some of the functions used
;; here.
(load "./lib/sneed")

;; Channels are specified in Adagio with the `V' directive.
;; Here, the channel is used to determine which instrument to use.
;; Add additional instruments in this conditional below.
;; Currently, channel 1 is a bowed instrument (cello, violin, etc.)
;;            channel 2 is mandolin
;;            channel 3 is flute
;;            all other channels are a generic plucked instrument.
;; Feel free to add more channels with different instruments. There
;; is no need to delete these three already here; Adagio supports
;; about 128 voices (channels)!
(defun sneed-note (chan pitch)
  (cond ((= chan 1) (bowed-note pitch))
        ((= chan 2) (scale 0.2 (mandolin pitch 1.0)))
        ((= chan 3) (scale 0.3 (flute-note pitch)))
        (t (scale 0.2 (pluck pitch)))))

(defun sneed-midi (s)
  (seq-midi s (note (chan pitch velocity) (sneed-note chan pitch))))

(defun sneed (file)
  (sneed-midi (load-adagio file)))

;; Here, we describe the song.
;; We write parts per-instrument, so that we can apply overall
;; effects to just one instrument at a time if we wish.
;; We then mix the parts of one song segment together, in order that
;; trailing rests aren't lost, and sequence the song segments
;; in the end for the final song.
;; The composition of `snd-normalize' and `sum' works well to mix
;; song parts together.
;; `seqrep' repeats a behavior (the result of `cue'; see docs),
;; enabling us to repeat song segments easily.
;; `seq' lays song parts end to end to make the final song.
(let* ((bass    (sneed "your/adagio/music.adg"))
       (chords  (sneed "your/adagio/music.adg"))
       (melody  (sneed "your/adagio/music.adg"))
       (segment (snd-normalize (sum bass chords melody)))
       (final (seq
               (seqrep (i 4) segment))))
  (s-save final))
;; By default, Nyquist saves to /tmp/$USER-temp.wav

You will compose parts in Adagio, which is more or less sheet music.

Adagio is well-documented in the Nyquist documentation, but here's a chord progression to get you started:

!TEMPO 100

D4 W V1, F4 W V1, A4 W V1
C4 W V1, E4 W V1, G4 W V1
A3 W V1, C4 W V1, E4 W V1
C4 W V1, E4 W V1, G4 W V1

Run the synthesis program (starter code above) with the ny interpreter, like so:

ny < synthesis.lsp

You must be in the proper directory that the relative paths in your code are valid.


Join the Sneedacity matrix room.