;; Building up to a glissando-ing sinewave instrument #| (definstrument simp (start-time duration frequency amplitude &key (amp-env '(0 0 50 1 100 0))) (let* ((beg (floor (* start-time *srate*))) (end (+ beg (* duration *srate*))) (s (make-oscil :frequency frequency)) (amp (make-env :envelope amp-env :scaler amplitude :duration duration))) (run (loop for i from beg to end do (outa i (* (env amp) (oscil s))))))) |# #| ;; manual computation of sine wave; no oscil unit generator (definstrument simp (start-time duration freq amplitude &key (amp-env '(0 0 50 1 100 0))) (let* ((beg (floor (* start-time *srate*))) (end (+ beg (* duration *srate*))) (amp (make-env :envelope amp-env :scaler amplitude :duration duration)) (phase 0)) (run (loop for i from beg to end do (outa i (* (env amp) (sin phase))) (setf phase (+ phase (* 2 pi (/ freq *srate*)))) )))) |# #| ;; Gliss with manual starting and ending frequencies (definstrument simp (start-time duration freq amplitude &key (amp-env '(0 0 50 1 100 0)) (freq-end 440) ) (let* ((beg (floor (* start-time *srate*))) (end (+ beg (* duration *srate*))) (amp (make-env :envelope amp-env :scaler amplitude :duration duration)) (phase 0) (delta-freq (/ (- freq-end freq) (* duration *srate*)))) (run (loop for i from beg to end do (outa i (* (env amp) (sin phase))) (setf phase (+ phase (* 2 pi (/ freq *srate*)))) (setf freq (+ freq delta-freq)))))) |# #| ;; Gliss with frequency envelope (definstrument simp (start-time duration freq-env amplitude &key (amp-env '(0 0 50 1 100 0))) (let* ((beg (floor (* start-time *srate*))) (end (+ beg (* duration *srate*))) (amp (make-env :envelope amp-env :scaler amplitude :duration duration)) (freq (make-env :envelope freq-env :duration duration)) (phase 0)) (run (loop for i from beg to end do (outa i (* (env amp) (sin phase))) (setf phase (+ phase (* 2 pi (/ (env freq) *srate*)))) )))) (with-sound () (simp 0 1 '(0 100 1 8000) 0.1 :amp-env '(0 0 1 1 1000 1 1001 0))) |# #| ;; Gliss with log frequency envelope the easy way that doesn't work (definstrument simp (start-time duration pitch-env amplitude &key (amp-env '(0 0 50 1 100 0))) (let* ((beg (floor (* start-time *srate*))) (end (+ beg (* duration *srate*))) (amp (make-env :envelope amp-env :scaler amplitude :duration duration)) (pitch (make-env :envelope pitch-env :duration duration)) (phase 0)) (run (loop for i from beg to end do (outa i (* (env amp) (sin phase))) (setf phase (+ phase (* 2 pi (/ (hertz (env pitch)) *srate*)))) )))) |# ;; Gliss with manual starting and ending frequencies, logarithmic (definstrument simp (start-time duration freq amplitude &key (amp-env '(0 0 50 1 100 0)) (freq-end 440) ) (let* ((beg (floor (* start-time *srate*))) (end (+ beg (* duration *srate*))) (amp (make-env :envelope amp-env :scaler amplitude :duration duration)) (phase 0) (log-freq (log freq)) (log-freq-end (log freq-end)) (delta-log-freq (/ (- log-freq-end log-freq) (* duration *srate*)))) (run (loop for i from beg to end do (outa i (* (env amp) (sin phase))) (setf phase (+ phase (* 2 pi (/ (exp log-freq) *srate*)))) (setf log-freq (+ log-freq delta-log-freq))))))