2.5. cl-collider

cl-collider ist ein lisp package, das die Funktionalität der SuperCollider Sprache 'sclang' in common lisp realisiert. Der Package Name ist allerdings nicht 'cl-collider', sondern 'sc'.

Die gesamte Audioverarbeitung geschieht im SCsynth, die Sprache dient vor allem folgenden Zwecken:

  • Definieren von dsp Algorithmen (einer 'synthdef'), die auf der Lisp Seite in das Binärformat von SuperCollider kompiliert werden und dann dem Server über OSC gesendet werden,
  • Verwaltung von Bussen (Audio und Control)
  • Aufruf/Löschen von Synths
  • Scheduling von Ereignissen

Wie auch in der Supercollider Sprache (sclang) ist das Scheduling von cl-collider nicht sehr präzise. Das Ersetzen des scheduling durch incudine ist jedoch problemlos möglich und führt zu hervorragenden Ergebnissen.

Laden des Pakets:

CL-USER> (ql:quickload "sc")
....
("sc")
CL-USER> (in-package :sc)
#<package "SC">
sc>

Einige Voreinstellungen:

sc> (setf *sc-synth-program* "/usr/bin/scsynth")
"/usr/bin/scsynth"
sc> (setf *sc-synthdefs-path* "~/.local/share/SuperCollider/synthdefs")
"~/.local/share/SuperCollider/synthdefs"
sc> (push "/usr/lib/SuperCollider/plugins/" *sc-plugin-paths*)
("/usr/lib/SuperCollider/plugins/")
sc> (push "/usr/share/SuperCollider/Extensions/SC3plugins/" *sc-plugin-paths*)
("/usr/share/SuperCollider/Extensions/SC3plugins/"
 "/usr/lib/SuperCollider/plugins/")
sc> (defparameter *s* (setf *s* (make-external-server "localhost"
                                                      :port 57110
                                                      :just-connect-p t)))
*s*
sc>

HINWEIS: Bevor der nachfolgende Code eine Verbindung zu einer externen scsynth Instanz herstellt, muss diese 'vor' seiner Evaluation gestartet sein:

(server-boot *s*)

Definitionen und Aufrufe der Synths:

;;; Synth Definition

(defsynth my-sine ((freq 440) (amp 0.2))
  (let* ((sig (* amp (sin-osc.ar [freq (+ freq 2)] 0 .2))))
    (out.ar 0 sig)))

;;; Das Gleiche ohne let* Bindung:

(defsynth my-sine ((freq 440) (amp 0.2))
  (out.ar 0 (* amp (sin-osc.ar [freq (+ freq 2)] 0 .2))))

;;; Aufruf des Synths

(defparameter *synth* (my-sine))

;;; Veränderung von Variablen

(ctrl *synth* :freq 330)

;;; Instanz abschalten ("free")
(bye *synth*)
;;; FM-Synth Definition

(defsynth fm-synth ((freq 440) (amp 0.2) (ratio 10) (idx 10))
  (let* ((sig (* amp (sin-osc.ar (+ freq (sin-osc.ar (* freq ratio) 0 idx))
                      0 .2))))
    (out.ar 0 sig)))

;;; FM-Synth Aufruf
(defparameter *fm-synth* (fm-synth :freq 440 :ratio 1.3 :idx 4000))

;;; FM-Synth Definition
(ctrl *fm-synth* :idx 1)

;;; free synth
(bye *fm-synth*)

Verbindung zum Server trennen:

(server-quit *s*)

results matching ""

    No results matching ""