'98 Fall MUS 149 Final Project

A Study on Sweeping Sound

Unjung Nam

The Logic

The formula which I used in this study is y=220 * x^bow. Here, the coefficient 220 is the fundamental frequency, x is the partial numbers, 'bow' is the distortion factor. The value of 'bow'changes from 1.0 to 9 in which they are 1.1, 1.3, 1.5, 1.7,..etc. In other words, I have taken the following formulas to assign them for each one of the partials in the composite sweeping sound: y=220*x^1 y=220*x^1.1 y=220*x^1.3 y=220*x^1.5 y=220*x^1.7 y=220*x^2 y=220*x^2.1 y=220*x^2.3 y=220*x^2.5 y=220*x^2.7 y=220*x^3 y=220*x^3.1 y=220*x^3.3 y=220*x^3.5 y=220*x^3.7 y=220*x^4 y=220*x^4.1 y=220*x^4.3 y=220*x^4.5 y=220*x^4.7 y=220*x^5 y=220*x^5.1 y=220*x^5.3 y=220*x^5.5 y=220*x^5.7 y=220*x^6 y=220*x^6.1 y=220*x^6.3 y=220*x^6.5 y=220*x^6.7 y=220*x^7 y=220*x^7.1 y=220*x^7.3 y=220*x^7.5 y=220*x^7.7 y=220*x^8 y=220*x^8.1 y=220*x^8.3 y=220*x^8.5 y=220*x^8.7 y=220*x^9 They can be represented in graphs as follows:

The instruments: sweep.ins ; csweep.ins

;;;Frequency sweeping sine wave instrument (taken from MUS 220A) (definstrument sweep (start-time duration minfreq maxfreq amplitude &key (bow 5.0)) (multiple-value-bind (beg end) (get-beg-end start-time duration) (let ((s (make-oscil :frequency 0)) (f (make-env :base bow :envelope '(0 0 1 1) :duration duration :offset minfreq :scaler (- maxfreq minfreq)))) (run (loop for i from beg to end do (setf (frequency s) (env f)) (outa i (* amplitude (oscil s)))))))) ;;; Sample calls ;;; 20-20KHz sweep... ;;; (with-sound(:srate 44100)(sweep 0 10 10 20000 0.03 :bow 5)) ;;; 20-20KHz sweep with aliasing... ;;; (with-sound(:srate 22050)(sweep 0 10 10 20000 0.03 :bow 5)) ;;; 20-20KHz sweep with a lot of aliasing... ;;; (with-sound(:srate 8192)(sweep 0 10 10 20000 0.03 :bow 5)) ;;;change of 'base' (taken from CLM MANUAL) "Base determines how the break-points are connected. If it is 1.0 (the default), you get straight line segments. Base = 0.0 gives a step function (the envelope changes its value suddenly to the new one without any interpolation). Any other positive value becomes the exponent of the exponential curve connecting the points(for an explicit example see env.lisp). Base < 1.0 gives convex curves (i.e. bowed out), and Base > 1.0 gives concave curves (i.e. sagging). To get arbitrary connecting curves between the break points, treat the output of env as input to the connecting function." First of all, I made a sound constructed based on y=220 *x^ bow, which takes x values from 1 to 300. As x gets increased and the number in bow gets higher, the sound appears to be a lot aliased. The followings are the instrument and with-sound call. ;;;csweep.ins ;;;this instrument takes minimum frequency and makes a sweeping sound to the ;;;(*minfreq (expt 300 bow) which appears to be maximum frequency. ;;;high frequencies are aliased. (definstrument csweep (start-time duration minfreq amplitude &key (bow 5.0)) (multiple-value-bind (beg end) (get-beg-end start-time duration) (let ((s (make-oscil :frequency 0)) (f (make-env :base bow :envelope '(0 0 1 1) :duration duration :offset minfreq :scaler (- (* minfreq (expt 300 bow)) minfreq)))) (run (loop for i from beg to end do (setf (frequency s) (env f)) (outa i (* amplitude (oscil s))))))))

The Sounds

;;;Here is the with-sound call of the instrument. ;;;up to 41 partials of the composite sweeping sound. (with-sound (:srate 44100 :output "/user/u/unjung/mus149/sweep1.snd") (csweep 0 15 220 0.03) (csweep 0 15 220 0.03 :bow 1.1) (csweep 0 15 220 0.03 :bow 1.3) (csweep 0 15 220 0.03 :bow 1.5) (csweep 0 15 220 0.03 :bow 1.7) (csweep 0 15 200 0.03 :bow 2) (csweep 0 15 200 0.03 :bow 2.1) (csweep 0 15 220 0.03 :bow 2.3) (csweep 0 15 220 0.03 :bow 2.5) (csweep 0 15 220 0.03 :bow 2.7) (csweep 0 15 220 0.03 :bow 3) (csweep 0 15 220 0.03 :bow 3.1) (csweep 0 15 220 0.03 :bow 3.3) (csweep 0 15 220 0.03 :bow 3.5) (csweep 0 15 220 0.03 :bow 3.7) (csweep 0 15 220 0.03 :bow 4) (csweep 0 15 220 0.03 :bow 4.1) (csweep 0 15 220 0.03 :bow 4.3) (csweep 0 15 220 0.03 :bow 4.5) (csweep 0 15 220 0.03 :bow 4.7) (csweep 0 15 220 0.03 :bow 5) (csweep 0 15 220 0.03 :bow 5.1) (csweep 0 15 220 0.03 :bow 5.3) (csweep 0 15 220 0.03 :bow 5.5) (csweep 0 15 220 0.03 :bow 5.7) (csweep 0 15 220 0.03 :bow 6) (csweep 0 15 220 0.03 :bow 6.1) (csweep 0 15 220 0.03 :bow 6.3) (csweep 0 15 220 0.03 :bow 6.5) (csweep 0 15 220 0.03 :bow 6.7) (csweep 0 15 220 0.03 :bow 7) (csweep 0 15 220 0.03 :bow 7.1) (csweep 0 15 220 0.03 :bow 7.3) (csweep 0 15 220 0.03 :bow 7.5) (csweep 0 15 220 0.03 :bow 7.7) (csweep 0 15 220 0.03 :bow 8) (csweep 0 15 220 0.03 :bow 8.1) (csweep 0 15 220 0.03 :bow 8.3) (csweep 0 15 220 0.03 :bow 8.5) (csweep 0 15 220 0.03 :bow 8.7) (csweep 0 15 220 0.03 :bow 9)) ;;;The previous sound made too much distortions, so I took only up to 4th partials. (with-sound (:srate 44100 :output "/user/u/unjung/mus149/sweep2.snd") (csweep 0 15 220 0.03) (csweep 0 15 220 0.03 :bow 1.1) (csweep 0 15 220 0.03 :bow 1.3) (csweep 0 15 220 0.03 :bow 1.5)) ;;;After this experiment, I decided to control over the maximum frequency of the sweep ;;;of the each partial. So, in this instrument (sweep.ins--shown in the beginnig), ;;;each partial can sweep only up to the maximum frequency designated. ;;;Always starts at 220 hz. (with-sound (:srate 44100 :output "/user/u/unjung/mus149/sweep3.snd") (sweep 0 15 220 220 0.03) (sweep 0 15 220 348.96 0.03 :bow 1.1) (sweep 0 15 220 1091.22 0.03 :bow 1.3) (sweep 0 15 220 341.22 0.03 :bow 1.5) (sweep 0 15 220 1067.04 0.03 :bow 1.7) (sweep 0 15 200 20000 0.03 :bow 2) (sweep 0 15 200 1043.4 0.03 :bow 2.1) (sweep 0 15 220 326.28 0.03 :bow 2.3) (sweep 0 15 220 1020.30 0.03 :bow 2.5) (sweep 0 15 220 319.05 0.03 :bow 2.7) (sweep 0 15 220 1764.24 0.03 :bow 3) (sweep 0 15 220 311.97 0.03 :bow 3.1) (sweep 0 15 220 975.57 0.03 :bow 3.3) (sweep 0 15 220 305.07 0.03 :bow 3.5) (sweep 0 15 220 953.94 0.03 :bow 3.7) (sweep 0 15 220 527.52 0.03 :bow 4) (sweep 0 15 220 932.82 0.03 :bow 4.1) (sweep 0 15 220 2916.96 0.03 :bow 4.3) (sweep 0 15 220 912.15 0.03 :bow 4.5) (sweep 0 15 220 2852.31 0.03 :bow 4.7) (sweep 0 15 220 1577.25 0.03 :bow 5) (sweep 0 15 220 2789.13 0.03 :bow 5.1) (sweep 0 15 220 872.16 0.03 :bow 5.3) (sweep 0 15 220 2727.33 0.03 :bow 5.5) (sweep 0 15 220 852.84 0.03 :bow 5.7) (sweep 0 15 220 471.6 0.03 :bow 6) (sweep 0 15 220 833.94 0.03 :bow 6.1) (sweep 0 15 220 2607.78 0.03 :bow 6.3) (sweep 0 15 220 814.56 0.03 :bow 6.5) (sweep 0 15 220 2550 0.03 :bow 6.7) (sweep 0 15 220 1410.09 0.03 :bow 7) (sweep 0 15 220 2493.51 0.03 :bow 7.1) (sweep 0 15 220 779.73 0.03 :bow 7.3) (sweep 0 15 220 2438.25 0.03 :bow 7.5) (sweep 0 15 220 762.45 0.03 :bow 7.7) (sweep 0 15 220 421.62 0.03 :bow 8) (sweep 0 15 220 745.56 0.03 :bow 8.1) (sweep 0 15 220 2331.39 0.03 :bow 8.3) (sweep 0 15 220 729.03 0.03 :bow 8.5) (sweep 0 15 220 2279.73 0.03 :bow 8.7) (sweep 0 15 220 1260.63 0.03 :bow 9)) ;;;Starting from their own starting value and sweeping to the maximum freuqnecy designated. (with-sound (:srate 44100 :output "/user/u/unjung/mus149/sweep4.snd") (sweep 0 15 220 220 0.03) (sweep 0 15 66.00 348.96 0.03 :bow 1.1) (sweep 0 15 66.00 1091.22 0.03 :bow 1.3) (sweep 0 15 66.00 341.22 0.03 :bow 1.5) (sweep 0 15 6.60 1067.04 0.03 :bow 1.7) (sweep 0 15 220 20000 0.03 :bow 2) (sweep 0 15 6.60 1043.4 0.03 :bow 2.1) (sweep 0 15 6.60 326.28 0.03 :bow 2.3) (sweep 0 15 6.60 1020.30 0.03 :bow 2.5) (sweep 0 15 0.6 319.05 0.03 :bow 2.7) (sweep 0 15 220 1764.24 0.03 :bow 3) (sweep 0 15 0.6 311.97 0.03 :bow 3.1) (sweep 0 15 0.6 975.57 0.03 :bow 3.3) (sweep 0 15 0.6 305.07 0.03 :bow 3.5) (sweep 0 15 0.6 953.94 0.03 :bow 3.7) (sweep 0 15 220 527.52 0.03 :bow 4) (sweep 0 15 0.6 932.82 0.03 :bow 4.1) (sweep 0 15 0.6 2916.96 0.03 :bow 4.3) (sweep 0 15 0.6 912.15 0.03 :bow 4.5) (sweep 0 15 0 2852.31 0.03 :bow 4.7) (sweep 0 15 220 1577.25 0.03 :bow 5) (sweep 0 15 300 2789.13 0.03 :bow 5.1) (sweep 0 15 0 872.16 0.03 :bow 5.3) (sweep 0 15 0 2727.33 0.03 :bow 5.5) (sweep 0 15 0 852.84 0.03 :bow 5.7) (sweep 0 15 0 471.6 0.03 :bow 6) (sweep 0 15 220 833.94 0.03 :bow 6.1) (sweep 0 15 0 2607.78 0.03 :bow 6.3) (sweep 0 15 0 814.56 0.03 :bow 6.5) (sweep 0 15 0 2550 0.03 :bow 6.7) (sweep 0 15 0 1410.09 0.03 :bow 7) (sweep 0 15 0 2493.51 0.03 :bow 7.1) (sweep 0 15 0 779.73 0.03 :bow 7.3) (sweep 0 15 0 2438.25 0.03 :bow 7.5) (sweep 0 15 0 762.45 0.03 :bow 7.7) (sweep 0 15 0 421.62 0.03 :bow 8) (sweep 0 15 0 745.56 0.03 :bow 8.1) (sweep 0 15 0 2331.39 0.03 :bow 8.3) (sweep 0 15 0 729.03 0.03 :bow 8.5) (sweep 0 15 0 2279.73 0.03 :bow 8.7) (sweep 0 15 0 1260.63 0.03 :bow 9)) ;;;The prvious sound sweep2.snd sounds like ending a little less dramatically. ;;;I put some 10000 and 20000 values on some of the partials for maximum frequencies. (with-sound ( :srate 44100 :output "/user/u/unjung/mus149/sweep5.snd") (sweep 0 15 220 220 0.03) (sweep 0 15 66.00 348.96 0.03 :bow 1.1) (sweep 0 15 66.00 1091.22 0.03 :bow 1.3) (sweep 0 15 66.00 10000 0.03 :bow 1.5) (sweep 0 15 6.60 1067.04 0.03 :bow 1.7) (sweep 0 15 220 20000 0.03 :bow 2) (sweep 0 15 6.60 1043.4 0.03 :bow 2.1) (sweep 0 15 6.60 326.28 0.03 :bow 2.3) (sweep 0 15 6.60 10000 0.03 :bow 2.5) (sweep 0 15 0.6 319.05 0.03 :bow 2.7) (sweep 0 15 220 1764.24 0.03 :bow 3) (sweep 0 15 0.6 311.97 0.03 :bow 3.1) (sweep 0 15 0.6 975.57 0.03 :bow 3.3) (sweep 0 15 0.6 10000 0.03 :bow 3.5) (sweep 0 15 0.6 953.94 0.03 :bow 3.7) (sweep 0 15 220 527.52 0.03 :bow 4) (sweep 0 15 0.6 932.82 0.03 :bow 4.1) (sweep 0 15 0.6 2916.96 0.03 :bow 4.3) (sweep 0 15 0.6 10000 0.03 :bow 4.5) (sweep 0 15 0 2852.31 0.03 :bow 4.7) (sweep 0 15 220 1577.25 0.03 :bow 5) (sweep 0 15 300 2789.13 0.03 :bow 5.1) (sweep 0 15 0 872.16 0.03 :bow 5.3) (sweep 0 15 0 10000 0.03 :bow 5.5) (sweep 0 15 0 852.84 0.03 :bow 5.7) (sweep 0 15 0 471.6 0.03 :bow 6) (sweep 0 15 220 833.94 0.03 :bow 6.1) (sweep 0 15 0 2607.78 0.03 :bow 6.3) (sweep 0 15 0 10000 0.03 :bow 6.5) (sweep 0 15 0 2550 0.03 :bow 6.7) (sweep 0 15 0 1410.09 0.03 :bow 7) (sweep 0 15 0 2493.51 0.03 :bow 7.1) (sweep 0 15 0 779.73 0.03 :bow 7.3) (sweep 0 15 0 10000 0.03 :bow 7.5) (sweep 0 15 0 762.45 0.03 :bow 7.7) (sweep 0 15 0 421.62 0.03 :bow 8) (sweep 0 15 0 745.56 0.03 :bow 8.1) (sweep 0 15 0 2331.39 0.03 :bow 8.3) (sweep 0 15 0 10000 0.03 :bow 8.5) (sweep 0 15 0 2279.73 0.03 :bow 8.7) (sweep 0 15 0 1260.63 0.03 :bow 9))

More experiments

(with-sound (:srate 44100 :output "/user/u/unjung/mus149/sweep6.snd") (csweep 0 8 220 0.03) (csweep 0 8 200 0.03 :bow 2)) (with-sound (:srate 44100 :output "/user/u/unjung/mus149/sweep7.snd") (csweep 0 10 220 0.03) (csweep 0 10 220 0.03 :bow 1.1) (csweep 0 10 220 0.03 :bow 1.3)) (with-sound (:srate 44100 :output "/user/u/unjung/mus149/sweep8.snd") (sweep 0 15 220 220 0.03) (sweep 0 15 220 20000 0.03 :bow 2) (sweep 0 15 220 1764.24 0.03 :bow 3) (sweep 0 15 220 527.52 0.03 :bow 4) (sweep 0 15 220 1577.25 0.03 :bow 5) (sweep 0 15 220 471.6 0.03 :bow 6) (sweep 0 15 220 1410.09 0.03 :bow 7) (sweep 0 15 220 421.62 0.03 :bow 8) (sweep 0 15 220 1260.63 0.03 :bow 9)) (with-sound (:srate 44100 :output "/user/u/unjung/mus149/sweep9.snd") (sweep 0 15 220 220 0.03) (sweep 0 15 220 348.96 0.03 :bow 1.1) (sweep 0 15 220 1091.22 0.03 :bow 1.3) (sweep 0 15 220 341.22 0.03 :bow 1.5) (sweep 0 15 220 1067.04 0.03 :bow 1.7) (sweep 0 15 200 20000 0.03 :bow 2) (sweep 0 15 200 1043.4 0.03 :bow 2.1) (sweep 0 15 220 326.28 0.03 :bow 2.3) (sweep 0 15 220 1020.30 0.03 :bow 2.5) (sweep 0 15 220 319.05 0.03 :bow 2.7) (sweep 0 15 220 1764.24 0.03 :bow 3)
Please send any comments to unjung@ccrma.stanford.edu