;; CLM simple oscillator for use with adsyn instrument ;; ;; Programmer: Craig Stuart Sapp ;; Date: Mon Dec 18 17:26:52 PST 1995 ;; Filename: /user/craig/lm/instruments/adsyn/sinewave.clm ;; Syntax: Common-Lisp; Packages: common-music; clm ;; Lisp Image: /Lisp/next-m68k/acl/cm/cm; Lisp Image Date: 18 Dec 1995 (defcinstrument sinewave ( &key (start 0.0) ; start time in seconds (dur 1.0) ; duration in seconds (freq 440.0) ; frequency in Hz (amp 1.0) ; amplitude [0..1] (phase 0.0) ; phase in degrees (amp-env '(0 0 10 1 90 1 100 0)) ; amplitude envelope (freq-env '(0 0 100 0)) ; frequency envelope (freq-skew 0.0) ; frequency skew in delta Hz ) (let* ( ; figure out the starting sample and ending sample ; numbers for calculations in the run loop: (start-sample (floor (* start sampling-rate))) (end-sample (+ start-sample (floor (* dur sampling-rate)))) ; prevent clipping when amp is 1.0 (amp (* amp 0.9999)) (amp-env (make-env :envelope amp-env :scaler amp :start-time start :duration dur )) (gls-env (make-env :envelope freq-env :scaler (* two-pi (/ freq-skew sampling-rate)) :start-time start :duration dur )) (sine-wave (make-oscil :frequency freq :initial-phase (* phase 0.0174532925) )) ; convert to radians ) ; end of let* variable list (run (loop for i from start-sample to end-sample do (outa i (* (env amp-env) (oscil sine-wave (env gls-env)))) )) ) ; end of let* ) #| example calls to sinewave instrument: (with-sound () (sinewave)) (with-sound () (sinewave :amp 0.1)) (with-sound () (sinewave :amp 0.1) (sinewave :amp 0.1 :freq 660)) (with-sound () (sinewave :dur 4.5 :freq 100)) (with-sound () (sinewave :dur 4.5 :freq 220 :amp-env '(0 0 25 1 50 0 75 1 100 0)) ) (with-sound () (sinewave :dur 1.5 :amp 0.3 :freq 220 :freq-skew 220 :freq-env '(0 0 50 0 51 1 100 1) )) (with-sound () (sinewave :dur 1.5 :amp 0.3 :freq 220 :freq-skew 220 :freq-env '(0 0 50 0 51 1 100 1 101 0 150 0 151 -0.5 200 -0.5) )) |#