;;; animals.scm ;;; sources: ;;; "The Diversity of Animal Sounds", Cornell Lab of Ornithology ;;; Geoffrey Keller, "Bird Songs of California" (Cornell) ;;; Geoffrey Keller, "Bird Songs of Southeastern Arizona and Sonora, Mexico" (Cornell) ;;; Bret Whitney et al, "Voices of New World Parrots" (Cornell) ;;; Carlos Davidson, "Frog and Toad Calls of the Rocky Mountains" (Cornell) ;;; Geoffrey Keller, "Bird Songs of the Lower Rio Grande Valley" (Cornell) ;;; Vyn, Budney, "Voices of North American Owls" (Cornell) ;;; Roche and Chevereau, "Guide to the Sounds of the Birds of Europe" ;;; from Richard Mankin, Reference Library of Digitized Insect Sounds, http://www.ars.usda.gov/sp2UserFiles/person/3559/soundlibrary.html ;;; Lang Elliott, Donald and Lillian Stokes, "Stokes Field Guide to Bird Songs, Eastern Region" ;;; Lang Elliott "The Calls of Frogs and Toads" ;;; Lang Elliott and W Herschberger "The Songs of the Insects" ;;; Lang Elliott "Music of the Birds" ;;; Cocroft, Morales, McDiarmid "Frogs of Tambopata, Peru" (Cornell) ;;; Ross, Whitney, "Voices of Costa Rican Birds" (Cornell) ;;; Rebolledo, Ramirez, Cuervo, "A Guide to the Bird Sounds of the Colombian Andes" (Humboldt and Cornell) ;;; Emmons, Whitney, Ross, "Sounds of Neotropical Rainforest Mammals" (Cornell) ;;; Marantz, Zimmer, "Bird Voices of the Alta Floresta" (Cornell) ;;; "Voices of the Night" (Cornell) ;;; Keller, Vyn, "Bird Songs of the Pacific Northwest" (Cornell) ;;; -------- frogs and toads -------- ;;; Oak toad ;;; Knudsen's frog ;;; Southern cricket frog ;;; Northern leopard frog (2) ;;; Spring peeper ;;; Crawfish frog ;;; River frog ;;; Green tree-frog ;;; Pinewoods tree frog ;;; Squirrel tree frog ;;; Ornate chorus frog ;;; Bullfrog ;;; Texas toad ;;; American toad ;;; Plains spadefoot ;;; Barking tree-frog ;;; Western toad ;;; Southwestern toad ;;; Great Plains Narrow-mouthed toad ;;; Pacific chorus frog ;;; Red-spotted toad ;;; Green toad ;;; Little grass frog ;;; Sonoran desert toad ;;; Amargosa toad ;;; -------- mammals -------- ;;; Indri ;;; -------- insects -------- ;;; mosquito ;;; Long-spurred meadow katydid ;;; Handsome trig ;;; Dog-day cicada ;;; Linnaeus' cicada ;;; Lyric cicada ;;; Southern mole cricket ;;; Confused ground cricket ;;; Tinkling ground cricket ;;; Striped ground cricket ;;; Sphagnum ground cricket ;;; Southeastern field cricket ;;; Snowy tree cricket ;;; Pine tree cricket ;;; Davis's tree cricket ;;; Broad-winged tree cricket ;;; Fast-calling tree cricket ;;; Black-horned tree cricket ;;; Narrow-winged tree cricket ;;; Four-spotted tree cricket ;;; Marsh meadow grasshopper ;;; Carolina grasshopper ;;; Slightly musical conehead ;;; -------- birds -------- ;;; Fox sparrow ;;; White-throated sparrow ;;; Henslow's sparrow ;;; Field sparrow ;;; Savannah sparrow ;;; Chipping sparrow ;;; Bachman's sparrow ;;; Grasshopper sparrow ;;; Black-chinned sparrow ;;; Golden-crowned sparrow ;;; Cassin's sparrow ;;; Song sparrow ;;; Sage sparrow ;;; House sparrow ;;; Black-throated sparrow ;;; Dark-eyed junco ;;; Purple finch ;;; House finch ;;; Gray-crowned rosy-finch ;;; Eastern wood-pewee (2) ;;; Western wood-pewee (2) ;;; Greater pewee ;;; Tufted titmouse ;;; Oak titmouse ;;; Bushtit ;;; Wrentit ;;; California towhee ;;; Green-tailed towhee ;;; Carolina wren ;;; Warbling vireo ;;; Plumbeous vireo (2) ;;; Cassin's vireo ;;; Hutton's vireo ;;; Gray vireo (5) ;;; Yellow-green vireo ;;; Red-eyed vireo ;;; White-eyed vireo ;;; Philadelphia vireo ;;; Nashville warbler ;;; Orange-crowned warbler ;;; Yellow warbler ;;; Yellow-rumped warbler ;;; Lucy's warbler ;;; Macgillivray's warbler ;;; Wilson's warbler ;;; Magnolia warbler ;;; Chestnut-sided warbler ;;; Black-throated blue warbler ;;; Pine warbler ;;; Cape May warbler ;;; Kirtland's warbler ;;; Verdin ;;; Townsend's solitaire ;;; Cedar waxwing ;;; Western meadowlark ;;; Eastern meadowlark ;;; Ruby-crowned kinglet ;;; Least flycatcher ;;; Acadian flycatcher ;;; Vermillion flycatcher ;;; Ash-throated flycatcher ;;; Olive-sided flycatcher ;;; Willow flycatcher ;;; Hammond's flycatcher ;;; Pacific-slope flycatcher ;;; Dusky flycatcher ;;; Yellow-bellied flycatcher ;;; Great crested flycatcher ;;; Brown-crested flycatcher (2) ;;; Black phoebe ;;; Say's phoebe ;;; Northern beardless tyrannulet ;;; Great kiskadee ;;; Scrub euphonia ;;; Eastern bluebird ;;; Common yellowthroat ;;; Blue grosbeak ;;; Evening grosbeak ;;; Cardinal ;;; American robin ;;; Scott's oriole ;;; Swainson's thrush ;;; Varied thrush ;;; Hermit thrush ;;; Western tanager ;;; Summer tanager ;;; Chuck-will's-widow ;;; Whip-poor-will ;;; Lesser nighthawk ;;; Common pauraque ;;; Mourning dove ;;; Inca dove (2) ;;; White-tipped dove ;;; Bobwhite ;;; California quail ;;; Gambel's quail ;;; Scaled quail ;;; Montezuma quail ;;; Mountain quail ;;; Ruffed grouse ;;; Great-horned owl ;;; Barred owl ;;; Flammulated owl ;;; Burrowing owl ;;; Barn owl ;;; Long-eared owl ;;; Northern goshawk ;;; Red-shouldered hawk ;;; Zone-tailed hawk ;;; Bald eagle ;;; Crested caracara ;;; Pileated woodpecker ;;; White-headed woodpecker ;;; Acorn woodpecker ;;; Hairy woodpecker ;;; Red-breasted nuthatch ;;; White-breasted nuthatch ;;; Pygmy nuthatch ;;; Common loon (2) ;;; American crow ;;; Brown jay ;;; Steller's jay ;;; Pinyon jay ;;; Groove-billed ani ;;; Loggerhead shrike (2) ;;; Greater roadrunner ;;; Common Gull ;;; Willet ;;; Black-necked stilt ;;; Whooping crane ;;; Sandhill crane ;;; Trumpeter swan ;;; Canada goose ;;; Wood duck ;;; Black-crowned night heron ;;; Least bittern ;;; Black rail ;;; Virginia rail ;;; Sora ;;; Plain chacalaca ;;; Black-billed cuckoo ;;; Eared grebe ;;; Killdeer (provide 'snd-animals.scm) (require snd-generators.scm) ;; rk!cos blackman=polywave rcos rxycos (if (provided? 'snd) (require snd-ws.scm) (require sndlib-ws.scm)) (define-macro (define-animal args . body) (let ((name (car args)) (targs (cdr args))) `(begin (define (,name ,@targs) (if *clm-notehook* (*clm-notehook* (symbol->string ',name) ,@targs)) ,@body) ,@(if *definstrument-hook* (list (*definstrument-hook* name targs)) ())))) #| (define-macro (define-animal args . body) (let ((name (car args)) (targs (cdr args))) `(begin (define (,name ,@targs) (if *clm-notehook* (*clm-notehook* (symbol->string ',name) ,@targs)) (let ((start (get-internal-real-time))) ,@body (format () "~A: ~A~%" (- (get-internal-real-time) start) ,name))) ,@(if *definstrument-hook* (list (*definstrument-hook* name targs)) ())))) |# #| ;;; ================================================================================ ;;; useful settings and functions for this work (I have these in my init file): (define (clean-string e) ;; make the envelope lists look prettier (format #f "(~{~,3F~^ ~})" e)) (define (seldur) (list (/ (selection-framples) 44100.0) (selection-maxamp))) (define (sp) (* 22050 (spectrum-end 0 0))) ;;; save us some dialog setup (set! (show-transform-peaks) #t) (set! (transform-size) 512) (set! (fft-window) blackman10-window) (set! (colormap) 7) ; jet (set! (speed-control-style) speed-control-as-ratio) (set! (color-cutoff) .001) (set! (enved-clip?) #t) ;;; if click play button and there's a selection, play the selection ;;; otherwise if the file is long (like most bird recordings), play what's in the current window. ;;; This is mainly to cut out the ubiquitous and useless announcer. (if (null? (hook-functions start-playing-hook)) (hook-push start-playing-hook (lambda (hook) (let ((snd (hook 'snd))) (if (sound? snd) ; meaning not 123456 = temp-sound-index from View:Files play button (if (and (selection?) (selection-member? snd)) (begin (play (selection)) #t) (if (> (framples snd) (* 10 (srate snd))) (let ((chn (or (selected-channel) 0))) (with-temporary-selection (lambda () (play (selection))) (left-sample snd chn) (- (right-sample snd chn) (left-sample snd chn)) snd chn) #t) #f)) #f))))) ;;; precision window movements via arrow keys (define (move-one-pixel s c right) (let* ((ax (axis-info s c time-graph)) (lo (ax 0)) (hi (ax 1)) (lo-pix (ax 10)) (hi-pix (ax 12)) (samps-per-pixel (max 1 (round (/ (- hi lo) (- hi-pix lo-pix))))) (change (if right (- (min (+ hi samps-per-pixel) (framples s c)) hi) (- (max 0 (- lo samps-per-pixel)) lo)))) (set! (left-sample) (min (max 0 (+ lo change)) (framples s c))) keyboard-no-action)) (bind-key "Left" 0 (lambda () "move one pixel backward" (move-one-pixel (selected-sound) (selected-channel) #f))) (bind-key "Right" 0 (lambda () "move one pixel forward" (move-one-pixel (selected-sound) (selected-channel) #t))) (define (move-more-pixels s c right) (let* ((ax (axis-info s c time-graph)) (lo (ax 0)) (hi (ax 1)) (lo-pix (ax 10)) (hi-pix (ax 12)) (samps-per-pixel (* 8 (max 1 (round (/ (- hi lo) (- hi-pix lo-pix)))))) (change (if right (- (min (+ hi samps-per-pixel) (framples s c)) hi) (- (max 0 (- lo samps-per-pixel)) lo)))) (set! (left-sample) (min (max 0 (+ lo change)) (framples s c))) keyboard-no-action)) (bind-key "Left" 4 (lambda () "move some pixels backward" (move-more-pixels (selected-sound) (selected-channel) #f))) (bind-key "Right" 4 (lambda () "move some pixels forward" (move-more-pixels (selected-sound) (selected-channel) #t))) (define (zoom-one-pixel s c in) (let* ((ax (axis-info s c time-graph)) (lo (ax 0)) (hi (ax 1)) (lo-pix (ax 10)) (hi-pix (ax 12)) (samps-per-pixel (max 1 (round (/ (- hi lo) (- hi-pix lo-pix))))) (len (framples s c))) (if in (if (> (- hi-pix lo-pix) samps-per-pixel) (begin (set! (left-sample) (+ lo samps-per-pixel)) (set! (x-zoom-slider) (* 1.0 (/ (max samps-per-pixel (- hi lo (* 2 samps-per-pixel))) len))))) (begin (set! (left-sample) (max 0 (- lo samps-per-pixel))) (set! (x-zoom-slider) (* 1.0 (/ (min len (+ (- hi lo) (* 2 samps-per-pixel))) len))))) keyboard-no-action)) (bind-key "Up" 0 (lambda () "zoom out one pixel" (zoom-one-pixel (selected-sound) (selected-channel) #f))) ;up (bind-key "Down" 0 (lambda () "zoom in one pixel" (zoom-one-pixel (selected-sound) (selected-channel) #t))) ;down ;;; save the current window so that PageUp returns to it (bind-key "Page_Down" 0 (lambda () (let ((last-page-state (map (lambda (snd) (let ((data (list snd (file-name snd)))) (do ((i 0 (+ i 1))) ((= i (channels snd)) data) (set! data (append data (list (cons i (axis-info snd i)))))))) (sounds)))) (bind-key "Page_Up" 0 (lambda () (if last-page-state (for-each (lambda (lst) (let ((snd (lst 0)) (name (lst 1))) (if (and (sound? snd) (string=? (file-name snd) name)) (for-each (lambda (chan-data) (let ((chn (chan-data 0)) (x0 (chan-data 3)) (x1 (chan-data 5)) (y0 (chan-data 4)) (y1 (chan-data 6))) (set! (x-bounds snd chn) (list x0 x1)) (set! (y-bounds snd chn) (list y0 y1)))) (cddr lst))))) last-page-state))))))) ;;; "m" -> make enved amp display suitable for drawing the amp env (bind-key #\m 0 (lambda () (set! (y-bounds (selected-sound) (selected-channel)) (list 0 (selection-maxamp)))) #t) ;;; "C-m" returns to normal after "m" (bind-key #\m 4 (lambda () (set! (y-bounds (selected-sound) (selected-channel)) (list -1.0 1.0))) #t) |# ;;; ================================================================================ ;;; some of these need srate=44100 since various frequencies are (well) over 10KHz ;;; also, I have bare indices scattered around -- ideally these would be wrapped in hz->radians ;;; these were done more or less in the order they occur within a section ;;; ================ Frogs and Toads ================ ;;; ;;; ;;; Knudsen's frog (define-animal (a-frog beg dur freq amp amp-env gliss gliss-env pulse-dur pulse-env fm-index fm-freq) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (base (make-oscil freq)) (modm (make-oscil fm-freq)) (frqf (make-env (or gliss-env '(0 0 1 0)) :duration dur :base 32 :scaler (hz->radians gliss))) (pulse (make-pulsed-env pulse-env pulse-dur (/ 1.0 pulse-dur))) (ampf (make-env amp-env :duration dur :scaler amp)) (index (hz->radians (* fm-freq fm-index)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (pulsed-env pulse) (oscil base (+ (env frqf) (* index (oscil modm))))))))) (define (knudsens-frog beg amp) (a-frog beg .25 480 amp '(0 0 1 1 3 1 4 0) 50 '(0 0 .5 .2 .8 1 1 1) (/ .25 7) '(0 .1 .5 .4 .6 .75 1 .9 1.5 1 2 .9 2.3 .1) 1.75 40)) ; 0.01 here is about 1.75 as an fm index: (/ (radians->hz .01) 40) #| ;;; cricket-like: (with-sound (:play #t) (a-frog 0 .25 2000 .5 '(0 0 1 1 3 1 4 0) ; or 3000 6000 etc 50 '(0 0 .5 .2 .8 1 1 1) (/ .25 5) '(0 0 1 0 5 1 8 0 20 0) 0.01 40)) (with-sound (:play #t) (a-frog 0 .25 4000 .5 '(0 0 1 1 3 1 4 0) 0 #f (/ .25 10) '(0 0 1 1 2 1 4 0 10 0) 0.0 10)) ;;; frog-like (with-sound (:play #t) (a-frog 0 .25 2000 .5 '(0 0 1 1 3 1 4 0) 50 '(0 0 .5 .2 .8 1 1 1) (/ .25 10) '(0 0 1 1 2 1 3 0 4 0 5 1 7 1 8 0 20 0) 0.0 10)) |# (define-animal (a-cricket beg dur freq freq1 amp amp-env pulse-dur pulse-env) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (base (make-oscil freq)) (base1 (make-oscil freq1)) (pulse (make-pulsed-env pulse-env pulse-dur (/ 1.0 pulse-dur))) (ampf (make-env amp-env :duration dur :scaler amp))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (pulsed-env pulse) (+ (* .8 (oscil base)) (* .2 (oscil base1)))))))) ;; (with-sound (:play #t) (a-cricket 0 .12 4500 5400 .5 '(0 0 1 1 3 1 4 0) (/ .11 3) '(0 0 1 .8 5 1 6 0 15 0))) ;;; -------------------------------------------------------------------------------- ;;; ;;; Oak Toad ;;; might be slightly too much noise (the peep I worked on turned out to be a raspy one) (define-animal (oak-toad beg amp) (let ((dur .15) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 10 1 15 0) :base .3 :duration dur :scaler amp)) (gen1 (make-polywave 2150 '(1 .01 2 1.0 3 .001 4 .005 6 .02))) (frqf (make-env '(0 -.5 1 1 5 -1) :duration .15 :scaler (hz->radians (+ 50 (random 40))))) (noise (make-rand-interp 1000 (+ .01 (random .005))))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (rand-interp noise))))))))) #| (with-sound (:play #t) (let ((last-beg 0.0)) (do ((k 0 (+ k 1))) ((= k 12)) (let ((beg (+ last-beg .37 (random .08)))) (oak-toad beg (+ .25 (random .3))) (set! last-beg beg))))) |# ;;; (with-sound (:play #t) (oak-toad 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Southern cricket frog (define-animal (southern-cricket-frog beg amp) (let ((dur1 .03) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur1))) (ampf (make-env '(0 0 .75 1 5 1 10 0) :scaler amp :duration dur1)) (gen1 (make-oscil 3500)) (gen2 (make-oscil 6400)) (pulse (make-pulsed-env '(0 .1 1 .6 2 .8 3 1 6 .1 8 .1) (/ dur1 8) (/ 8 dur1))) (index (hz->radians 300)) (f1 (make-env '(0 .9 9 .9 10 0) :duration dur1)) (f2 (make-env '(0 .05 8 .1 10 .8 11 .1) :duration dur1)) (fm (make-oscil 150))) (do ((i start (+ i 1))) ((= i stop)) (let ((fm1 (* index (oscil fm)))) (outa i (* (env ampf) (pulsed-env pulse) (+ (* (env f1) (oscil gen1 fm1)) (* (env f2) (oscil gen2 (* 2 fm1))))))))))) ;; (with-sound (:play #t) (southern-cricket-frog 0 0.5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Northern leopard frog (2) (define-animal (northern-leopard-frog-1 beg amp) ;; this is slightly low-passed, and I don't quite have the vowel right at the end (let ((dur 4.2)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-oscil 440)) (gen2 (make-oscil 1030)) ; there's also a 1500 formant that follows the 1000 case -- looks a lot like FM index 1 ca 600Hz (gen3 (make-oscil 2600)) (pulsef1 (make-env '(0 0 .1 1 10 0) :duration .013 :base 32.0)) (pulsef2 (make-env '(0 0 4 1 10 0) :duration .013 :base 3.0)) (interpf (make-env '(0 0 6 1 8 1 10 .5) :duration dur)) (ampf (make-env '(0 0 3 1 9.5 1 10 0) :base .2 :duration dur :scaler amp)) (gen1f (make-env '(0 1 8 1 10 0) :duration dur :scaler .65 :base 3)) (gen2f (make-env '(0 0 8 0 10 1) :duration dur :scaler (hz->radians 90))) (gen3f (make-env '(0 1 6 1 10 0) :duration dur :offset (hz->radians 2200) :scaler (hz->radians 400))) (gen4f (make-env '(0 0 8 0 10 .02) :duration dur)) (gen5f (make-env '(0 0 5 0 10 -1) :duration dur :scaler (hz->radians 200))) (pulf (make-env (list 0.0 (/ 1.0 14.0) 2.0 (/ 1.0 11.0) 10.0 (/ 1.0 11.0)) :duration dur)) (gen6 (make-polywave 170 '(1 .075))) (pulse-samps (seconds->samples 0.013))) (let ((pulse-sep (seconds->samples (env pulf)))) (do ((i start (+ i pulse-sep))) ((>= i stop)) (let ((pstop (+ i pulse-samps))) (set! (mus-location interpf) (- i start)) (set! (mus-location ampf) (- i start)) (set! (mus-location gen1f) (- i start)) (set! (mus-location gen2f) (- i start)) (set! (mus-location gen3f) (- i start)) (set! (mus-location gen4f) (- i start)) (set! (mus-location gen5f) (- i start)) (let ((intrp (env interpf)) (gen1trp (env gen1f)) (gen2trp (env gen2f)) (gen3trp (env gen3f)) (gen4trp (env gen4f)) (gen5trp (env gen5f)) (pulse-amp (env ampf))) (let ((intrp-1 (- 1.0 intrp)) (gen1trp-1 (- 1.0 gen1trp)) (gen4trp-1 (- 1.0 gen4trp))) (do ((k i (+ k 1))) ((= k pstop)) (outa k (* pulse-amp (+ (* intrp (env pulsef1)) (* intrp-1 (env pulsef2))) (+ (* gen1trp (oscil gen2 gen5trp)) (* gen1trp-1 (+ (* gen4trp-1 (oscil gen1 gen2trp)) (* gen4trp (oscil gen3 (+ gen3trp (polywave gen6)))))))))))) (for-each mus-reset (vector pulsef1 pulsef2 gen1 gen2)) (set! (mus-location pulf) (- (+ i pulse-sep) start)) (set! pulse-sep (seconds->samples (env pulf))))))))) ;; (with-sound (:statistics #t :play #t) (northern-leopard-frog-1 0 .5)) (define-animal (northern-leopard-frog-2 beg amp) ;; rocky 57 2 (let ((start (seconds->samples beg)) (dur 1.53) (pulse-dur .03)) (let ((stop (seconds->samples (+ beg dur))) (pulse-samps (seconds->samples .045)) (pulse-out (seconds->samples pulse-dur)) (ampf (make-env '(0.000 0.108 0.118 0.596 0.167 0.719 0.357 0.827 0.604 0.838 0.745 0.912 0.860 1.000 0.929 0.962 0.984 0.831 1.000 0.000) :duration dur :scaler amp)) (frqf2 (make-env '(0.000 0.198 0.021 0.209 0.110 0.239 0.178 0.239 0.294 0.247 0.343 0.260 0.463 0.255 0.593 0.265 0.704 0.252 0.788 0.244 0.881 0.228 0.941 0.204 1.000 0.18) :duration dur :scaler 6100.0)) (frqf1 (make-env '(0.000 0.086 0.462 0.110 1.000 0.118) :duration dur :scaler 6100.0)) (frqf3 (make-env '(0.000 0.721 0.508 0.786 0.698 0.761 0.876 0.689 0.935 0.563 1.000 0.509) :duration dur :scaler 6100.0)) (frqf4 (make-env '(0 7200 .5 7600 .9 7000 1 5400) :duration dur)) (frm1 (make-formant 900 .995)) (frm2 (make-formant 1260 .99)) (frm3 (make-formant 4500 .99)) (frm4 (make-formant 7200 .9)) (ampfr1 (make-env '(0 .5 1 3) :duration dur :scaler (* 10 (sin (hz->radians 900))) :base 3)) (ampfr2 (make-env '(0 .25 .5 .4 1 1) :duration dur :scaler (* 10 (sin (hz->radians 1260))))) (ampfr4 (make-env '(0 0 .3 1 1 1) :duration dur :scaler (* 10 (sin (hz->radians 7200))))) (ampfr3 (* 10 (sin (hz->radians 4500)))) (gen1 (make-rk!cos 100 13.0)) (ampf1 (make-env '(0 1 1 0) :base 3 :duration dur)) (pulsef (make-env '(0.000 0.000 0.01 1 0.15 0.936 0.2 0.100 0.792 0.000 0.906 0.107 1.000 0.000) :duration pulse-dur)) (pulse-frqf (make-env '(0 0 1 .9 2 1 ) :base .1 :duration pulse-dur :scaler (hz->radians 100)))) (let ((fb (vector frm1 frm2 frm3 frm4)) (fs (float-vector 0.0 0.0 ampfr3 0.0)) (rk (make-float-vector pulse-out))) (set! fb (make-formant-bank fb fs)) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (set! (mus-location ampf1) (- i start)) (set! (mus-location ampfr1) (- i start)) (set! (mus-location ampfr2) (- i start)) (set! (mus-location ampfr4) (- i start)) (set! (mus-location frqf1) (- i start)) (set! (mus-location frqf2) (- i start)) (set! (mus-location frqf3) (- i start)) (set! (mus-location frqf4) (- i start)) (set! (mus-location ampfr1) (- i start)) (set! (mus-location ampfr2) (- i start)) (set! (mus-location ampfr4) (- i start)) (set! (mus-frequency frm1) (env frqf1)) (set! (mus-frequency frm2) (env frqf2)) (set! (mus-frequency frm3) (env frqf3)) (set! (mus-frequency frm4) (env frqf4)) (let ((reset-stop (min stop (+ i pulse-out))) (pulse-amp (env ampf)) (val-amp (env ampf1))) (set! (fs 0) (env ampfr1)) (set! (fs 1) (env ampfr2)) (set! (fs 3) (env ampfr4)) (do ((k 0 (+ k 1))) ((= k pulse-out)) (float-vector-set! rk k (rk!cos gen1 (env pulse-frqf)))) (do ((k i (+ k 1))) ((= k reset-stop)) (let ((val (* pulse-amp (env pulsef) (rk (- k i))))) ;(rk!cos gen1 (env pulse-frqf))))) (outa k (+ (* val val-amp) (formant-bank fb val))))) (set! (mus-phase gen1) (* -0.1 pi)) (mus-reset pulse-frqf) (mus-reset pulsef))))))) ;; (with-sound (:play #t :statistics #t) (northern-leopard-frog-2 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Green tree-frog (define-animal (green-tree-frog beg amp) (let ((dur 0.2) (pitch 277) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 8 1 12 0) :scaler (* .333 amp) :duration dur)) (gen2770 (make-oscil (* 10 pitch) (* 0.5 pi))) (mod277 (make-oscil pitch (* 0.5 pi))) (gen7479 (make-oscil (* pitch 27))) (poly (make-polywave pitch (list 3 (* .78 .3) 8 (* .78 .2) 9 (* .78 .2) 10 (* .78 .9) 11 0.78 12 (* .78 .5)))) (poly2 (make-polywave 860 (list 1 (* .25 .4) 2 (* .25 .1) 3 (* .25 .03) 4 (* .25 .3) 5 (* .25 .03)))) (index (hz->radians 277)) (frqf (make-env '(0 -.3 1 .3 2 0 5 0 6 -1) :duration dur :scaler (hz->radians 70))) (pulsef (make-pulsed-env '(0 .2 1 1 3 .7 5 .2) (/ 1.0 pitch) pitch))) (do ((i start (+ i 1))) ((= i stop)) (let ((md (* index (oscil mod277))) (frq (env frqf))) (outa i (* (env ampf) (pulsed-env pulsef frq) (+ (polywave poly frq) (* .2 (oscil gen2770 (* 10 (+ frq md)))) (* .02 (oscil gen7479 (* 27 (+ frq md)))) (polywave poly2 (* 3.0 frq)))))))))) ;; (with-sound (:play #t) (green-tree-frog 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Pinewoods tree-frog (define-animal (pinewoods-tree-frog beg dur amp) (let ((pitch 205.0) (pulse-dur .009) (start (seconds->samples beg)) (stop (seconds->samples (+ beg dur)))) (let ((pulsef (make-env '(0.000 0.000 0.065 0.5 0.117 0.85 0.179 1.0 0.236 0.9 0.503 0.4 0.606 0.2 1.000 0.000) :duration pulse-dur)) (pulses (if (> (random 1.0) .6) 5 4)) (pulse-amps (apply vector (map (lambda (x) (* amp x)) '(.7 .9 1.0 .9 .6)))) (gen1 (make-oscil (* pitch 10) (* 0.5 pi))) (gen3 (make-oscil (* pitch 18) (* 0.5 pi))) (gen4 (make-oscil (* pitch 28) (* 0.5 pi))) (pulse-samps (seconds->samples pulse-dur)) (pulse-sep (seconds->samples 0.078)) (rnd (make-rand-interp (* 10 pitch) (hz->radians (* 3 pitch))))) ; not sure this actually helps (do ((i start (+ i pulse-sep))) ((>= i stop)) (do ((pulse 0 (+ pulse 1)) (pulse-start i (+ pulse-start pulse-samps))) ((= pulse pulses)) (let ((pulse-amp (pulse-amps pulse)) (pulse-stop (+ pulse-start pulse-samps))) (set! (mus-frequency gen1) (* pitch (if (< pulse 3) 10 11))) (do ((k pulse-start (+ k 1))) ((= k pulse-stop)) (let ((noise (rand-interp rnd))) (outa k (* pulse-amp (env pulsef) (+ (* .9 (oscil gen1 (* .1 noise))) (* .08 (oscil gen3 (* .18 noise))) (* .02 (oscil gen4 (* .28 noise))))))))) (mus-reset pulsef) (set! (mus-phase gen1) (* 0.5 pi)) (set! (mus-phase gen3) (* 0.5 pi)) (set! (mus-phase gen4) (* 0.5 pi))) (set! pulses (if (> (random 1.0) .6) 5 4)))))) ;; (with-sound (:play #t) (pinewoods-tree-frog 0 1 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Squirrel tree frog (define-animal (squirrel-tree-frog beg dur amp) (let ((pitch 120) (pulse-dur 0.24)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-blackman pitch 4)) (gen2 (make-oscil (* 10 pitch))) (gen3 (make-oscil (* 24 pitch))) (gen4 (make-polywave pitch (list 1 (hz->radians .1)))) (gen5 (make-oscil (* 14 pitch))) (gen6 (make-oscil (* 6 pitch))) (rnd (make-rand-interp 100 (hz->radians 5))) (frqf (make-env '(0 0 .2 0 .4 .75 .8 1 1.0 .5) :duration pulse-dur :scaler (hz->radians 15))) (pulsef (make-env '(0 0 .5 .7 2 1 3.5 .7 4 0) :duration pulse-dur :scaler amp)) (pulse-samps (seconds->samples 0.52)) (pulse-out (seconds->samples pulse-dur)) (indf (make-env '(0 .3 1 .5 2 .5 3 0) :duration pulse-dur)) (indf-1 (make-env '(0 .3 1 .5 2 .5 3 0) :offset 1.0 :scaler -1.0 :duration pulse-dur))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-out)))) (do ((k i (+ k 1))) ((= k reset-stop)) (let ((ind (+ (env frqf) (polywave gen4) (rand-interp rnd)))) (outa k (* (env pulsef) (blackman gen1) (+ (* (env indf) (oscil gen2 (* 10.0 ind))) (* (env indf-1) (oscil gen3 (* 24.0 ind))) (* .1 (oscil gen5 (* 14.0 ind))) (* .1 (oscil gen6 (* 6.0 ind)))))))) (for-each mus-reset (vector frqf pulsef indf-1 indf))))))) ;;; (with-sound (:play #t) (squirrel-tree-frog 0 1.0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Ornate chorus frog (define-animal (ornate-chorus-frog beg dur amp) (let ((pulse-dur 0.024) (pitch 1210) (start (seconds->samples beg)) (stop (seconds->samples (+ beg dur)))) (let ((pulsef (make-env '(0.000 0.000 0.057 0.445 0.124 0.797 0.220 0.977 0.337 1.000 0.477 0.987 0.634 0.907 0.760 0.791 0.828 0.475 0.913 0.206 1.000 0.000) :scaler amp :duration pulse-dur)) (gen1 (make-polywave pitch '(1 .02 2 .95 3 .01 4 .02 5 .01 6 .04 7 .01 8 .02))) (next-pulse (seconds->samples .4)) (pulse-samps (seconds->samples pulse-dur))) (do ((i start (+ i next-pulse))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-samps)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (polywave gen1)))) (mus-reset pulsef) (set! next-pulse (seconds->samples (if (> (random 1.0) .8) (+ .25 (random .3)) .4)))))))) ;; (with-sound (:play #t) (ornate-chorus-frog 0 4 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Spring peeper (define-animal (spring-peeper beg amp) (let ((dur 0.17) (pause 0.23) (index (hz->radians (* 0.1 2900)))) ;; first note (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 .25 .6 8 1 10 .8 10.5 0) :scaler amp :duration dur :base .03)) (gen1 (make-oscil 2400)) (gen2 (make-oscil 1200)) (gen2a (make-oscil 2400)) (frqf (make-env '(0 0 1 1) :scaler (hz->radians 600) :duration dur :base 30.0))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (oscil gen1 (+ frq (* index (+ (* 0.2 (oscil gen2 (* 0.5 frq))) (* 1.5 (oscil gen2a frq)))))))))) ; end is not quite right (original has a catch) ;; second note (let ((start2 (+ stop (seconds->samples pause))) (dur2 .13)) (let ((stop2 (+ start2 (seconds->samples dur2))) (ampf2 (make-env '(0 0 .125 .8 1 .9 2 .7 4 1 10 0) :base .1 :duration dur2 :scaler (* .4 amp))) (frqf2 (make-env '(0 0 2 1 3 .75) :duration dur2 :base .03 :scaler (hz->radians 300))) (gen3 (make-oscil 2900)) (gen4 (make-oscil 1450))) (do ((i start2 (+ i 1))) ((= i stop2)) (let ((frq (env frqf2))) (outa i (* (env ampf2) (oscil gen3 (+ frq (* index (oscil gen4 (* 0.5 frq)))))))))))))) ;; (with-sound (:play #t) (spring-peeper 0 .5)) ;;;-------------------------------------------------------------------------------- ;;; ;;; Crawfish frog (define-animal (crawfish-frog beg amp) (let ((dur 0.6) (pitch 58)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 4 1 8 1 9 .7 10 0) :scaler amp :duration dur)) (pulse-samps (seconds->samples (/ 1.0 pitch))) (pulsef (make-env '(0 0 1 1 10 0) :base 32.0 :duration (/ 1.0 pitch))) (fmd (make-oscil pitch)) (gen1 (make-oscil (* pitch 15))) (frqf (make-env '(0 .5 .2 0 1 1) :scaler (hz->radians pitch) :base 10.0 :duration dur)) (index (hz->radians pitch)) (poly1 (make-polywave (* pitch 6) '(1 .5 2 1 5 .5))) (poly2 (make-polywave (* pitch 6) '(2 .5 3 1 7 .25))) (intrp (make-env '(0 1 1 0) :duration dur :scaler .2 :base 4)) (intrp-1 (make-env '(0 0 1 1) :duration dur :scaler .2 :base .25))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-samps))) (pulse-amp (env ampf))) (do ((k i (+ k 1))) ((= k reset-stop)) (let ((frq (env frqf))) (outa k (* pulse-amp (env pulsef) (+ (* .5 (oscil gen1 (+ frq (* index (oscil fmd (* frq .067)))))) (* (env intrp) (polywave poly1 frq)) (* (env intrp-1) (polywave poly2 frq)))))))) (mus-reset pulsef) (mus-reset gen1) (mus-reset fmd))))) ;; (with-sound (:play #t) (crawfish-frog 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; River frog ;;; ;;; original formants were much sharper, but using rxyk!cos to sharpen ours didn't seem to help ;;; animal seems to group these in 3's (define-animal (river-frog beg amp) (let ((dur 1.85) (pulse-pitch 42) (mid-pitch 185) (mid-pitch-change 10)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 2 1 7 .9 10 0) :scaler amp :duration dur :base .1)) (pulsef #f) (pulse-samps (seconds->samples (/ 1.0 pulse-pitch))) (frqf (make-env '(0 .1 .2 -.02 .5 0 .65 0 1 1) :scaler (hz->radians mid-pitch-change) :duration dur)) (vib (make-rand-interp 100 (hz->radians 10.0))) (fm (make-polywave pulse-pitch (list 1 (hz->radians pulse-pitch)) mus-chebyshev-second-kind)) ;; cheb2 is needed here to match the original code which used (* index (oscil fm)) ;; if cheb1, the main sideband is below rather than above, giving the frog a deeper call ;; does this make any sense?!? (poly1 (make-polywave mid-pitch (normalize-partials '(2 1.2 4 .1 7 0.75 8 .1 10 .5)))) (poly2 (make-polywave mid-pitch (normalize-partials '(2 1.0 7 .5 9 .7 12 .01)))) (interpf (make-env '(0 0 2 0 5 1 7 1) :duration dur)) (interpf-1 (make-env '(0 0 2 0 5 1 7 1) :duration dur :offset 1.0 :scaler -1.0))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-samps))) (pulse-amp (env ampf))) (set! pulsef (make-env '(0 .1 3 .1 3.1 1 4 1 6 .1 9 .1) :scaler pulse-amp :duration (/ 1.0 pulse-pitch))) (do ((k i (+ k 1))) ((= k reset-stop)) (let ((frq (+ (env frqf) (rand-interp vib) (polywave fm)))) (outa k (* (env pulsef) (+ (* (env interpf-1) (polywave poly1 frq)) (* (env interpf) (polywave poly2 frq)))))))))))) ;;; pulsed-env here was basically the same speed as using the nested do loop ;;; pulsed-env doesn't buy us anything if there's no run-time modulation ;; (with-sound (:play #t :statistics #t) (river-frog 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Bullfrog (define-animal (bullfrog beg amp) (let ((start (seconds->samples beg)) (dur 0.81)) (let ((stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 2 1 3 0) :duration dur :scaler amp :base 10)) (frqf (make-env '(0 0 1 6 2 0) :duration dur :scaler (hz->radians 1.0))) (f1 (make-rxyk!cos 200 1/2 0.6)) (f2 (make-rxyk!cos 230 10/23 1.2)) (f3 (make-rxyk!cos 600 1/6 8.0)) (f4 (make-rxyk!cos 630 10/63 8.0)) (rnd (make-rand-interp 4000 .2)) (rnd1 (make-rand-interp 200 (hz->radians 2))) (frm1 (make-formant 400 .99)) (frm2 (make-formant 1200 .98)) (frm3 (make-formant 5000 .97)) (frm1f (* 14 (sin (hz->radians 400)))) (frm2f (* 28 (sin (hz->radians 1200)))) (frm3f (* 8 (sin (hz->radians 5000)))) (intrpf (make-env '(0 1 .6 0 1 1) :offset 1000.0 :scaler 200.0 :duration dur))) (let ((fb (vector frm1 frm2 frm3)) (fs (float-vector frm1f frm2f frm3f))) (set! fb (make-formant-bank fb fs)) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd1)))) (mus-set-formant-frequency frm2 (env intrpf)) (outa i (formant-bank fb (* (env ampf) (+ .8 (rand-interp rnd)) (+ (rxyk!cos f1 (* 2.0 frq)) (* .5 (rxyk!cos f2 (* 2.3 frq))) (* .1 (rxyk!cos f3 (* 6.0 frq))) (* .1 (rxyk!cos f4 (* 6.3 frq))))))))))))) ;; (with-sound (:statistics #t) (bullfrog 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Texas toad (define (texas-toad beg1 dur1 amp1) (define-animal (texas-toad-1 beg dur amp) (let ((pulse-dur .0173)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen (make-polywave 2460 '(1 .9 2 .01 3 .05 4 .005 5 .01))) (pulsef (make-env '(0 0 1 1 3 1 4 0) :duration pulse-dur :scaler amp)) (pulse2 (make-blackman (/ 4.0 pulse-dur) 2)) (pulse-samps (seconds->samples .02666)) (pulse-out (seconds->samples pulse-dur)) (rnd (make-rand-interp 4000 (hz->radians 200)))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (+ i pulse-out))) (if (<= reset-stop stop) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (blackman pulse2) (polywave gen (rand-interp rnd)))))) (mus-reset pulsef) (mus-reset pulse2)))))) (let ((last-dur 0.0) (last-call (+ beg1 dur1 -0.4))) (do ((call-beg beg1 (+ call-beg last-dur 0.3 (random 0.2)))) ((>= call-beg last-call)) (set! last-dur (+ .6 (random .25))) (texas-toad-1 call-beg last-dur amp1)))) ;; (with-sound (:play #t) (texas-toad 0 2.0 0.5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; American toad (define-animal (american-toad beg dur amp) (let ((pulse-dur .024) (pulse-sep .045) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (pulse-samps (seconds->samples pulse-sep)) (pulse-out (seconds->samples pulse-dur)) (ampf (make-env '(0 0.05 4 1 20 1 21 0) :duration dur :scaler amp)) (gen1 #f) (frqf (make-env '(0 150 .1 250 .5 300 .9 200 1 0) :duration pulse-dur :scaler (hz->radians 1.0))) (pulsef (make-env '(0.000 0.000 0.147 0.700 0.261 0.968 0.405 0.996 0.601 0.830 0.878 0.198 1.000 0.000) :duration pulse-dur)) (pulse-frqf (make-env (list 0 1100 .4 1300 dur (- 1300 (* dur 8))) :duration dur :scaler (hz->radians 1.0)))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out)))) (let ((pulse-amp (env ampf))) (set! gen1 (make-polywave 0.0 (list 1 (* pulse-amp .94) 2 (* pulse-amp .03) 3 (* pulse-amp .01) 4 (* pulse-amp .003) 5 (* pulse-amp .005) 7 (* pulse-amp .002))))) (set! (mus-location ampf) (- i start)) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (polywave gen1 (+ (env frqf) (env pulse-frqf)))))) (mus-reset pulsef) (mus-reset frqf)))))) ;; (with-sound (:play #t) (american-toad 0 2 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Plains spadefoot (define-animal (plains-spadefoot beg amp) (let ((dur 0.73) (pulse-dur .019) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (pulse-samps (seconds->samples pulse-dur)) (ampf (make-env '(0.000 0.000 0.098 0.423 0.310 0.747 0.630 0.929 0.785 0.830 0.902 0.553 1.000 0.000) :scaler amp :duration dur)) (gen1 (make-oscil)) (gen2 #f) (ampf2 (make-env '(0 0 .3 0 .8 1 1 1) :duration dur :scaler 0.4)) (frqf (make-env '(0 1520 .4 1650 1 1630) :duration dur :scaler (hz->radians 1.0))) (pulsef #f) (rnd (make-rand-interp 100 (hz->radians 100)))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (set! (mus-location frqf) (- i start)) (set! (mus-location ampf2) (- i start)) (let ((reset-stop (min stop (+ i pulse-samps))) (pulse-amp (env ampf)) (pulse-amp2 (env ampf2)) (pulse-frq (env frqf))) (set! gen2 (make-polywave 0.0 (if (= pulse-amp2 0.0) (list 1 0.0) (list 1 (* pulse-amp2 .01) 2 (* pulse-amp2 .01) 6 (* pulse-amp2 .01) 8 (* pulse-amp2 .1) 10 (* pulse-amp2 .01))))) (set! pulsef (make-env (list 0.000 0.000 0.03 pulse-amp 0.08 pulse-amp 0.160 (* pulse-amp 0.486) 0.304 (* pulse-amp 0.202) 0.508 (* pulse-amp 0.087) 1.000 0.000) :duration pulse-dur)) (do ((k i (+ k 1))) ((= k reset-stop)) (let ((frq (+ pulse-frq (rand-interp rnd)))) (outa k (* (env pulsef) (+ (oscil gen1 frq) (polywave gen2 (* 0.25 frq)))))))))))) ;; (with-sound (:play #t) (plains-spadefoot 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Barking tree-frog (define-animal (barking-tree-frog beg amp) (let ((dur 0.165)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.015 0.131 0.038 0.110 0.066 0.621 0.078 0.488 0.090 0.977 0.104 0.423 0.108 0.013 0.113 0.504 0.122 0.005 0.129 0.979 0.138 0.337 0.142 0.470 0.152 0.008 0.156 0.561 0.160 0.008 0.165 1.000 0.177 0.535 0.183 0.744 0.189 0.290 0.193 0.731 0.200 0.381 0.209 0.977 0.217 0.499 0.237 0.846 0.247 0.896 0.260 0.898 0.464 0.846 0.623 0.689 0.801 0.305 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 480 .3 430 1 425) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 (normalize-partials '(1 .9 2 .06 3 .25 4 .79 5 .18 6 .03 7 .02 8 .03 9 .01 10 .02 11 .005 12 .005)))) (rnd (make-rand-interp 1000 (hz->radians 10))) (gen2 (make-oscil)) (frqf2 (make-env '(0 4750 .2 4790 .5 4710 1 4300) :duration dur :scaler (hz->radians 1.0))) (attack (make-rand-interp 4000 (hz->radians 400))) (gen3 (make-oscil 1720)) (attackf (make-env '(0.000 0.000 0.068 0.000 0.093 0.614 0.098 0.000 0.114 0.000 0.120 0.969 0.131 0.000 0.155 0.000 0.159 0.997 0.175 0.000 0.198 0.000 0.2 1.000 0.224 0.000 0.241 0.000 0.243 0.984 0.260 0.000 1.000 0.000) :duration dur :scaler amp))) (do ((i start (+ i 1))) ((= i stop)) (outa i (+ (* (env ampf) (+ (polywave gen1 (+ (env frqf) (rand-interp rnd))) (* .02 (oscil gen2 (env frqf2))))) (* (env attackf) (oscil gen3 (rand-interp attack))))))))) ;; (with-sound (:play #t) (barking-tree-frog 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Western toad (define-animal (western-toad beg dur amp) (do ((stop (seconds->samples (+ beg dur))) (gen (make-polywave 0.0 '(1 .95 2 .02 3 .03 4 .005))) (cur-start (seconds->samples beg)) (cur-is-long #t)) ((>= cur-start stop)) (let ((pulse-samps (seconds->samples (if cur-is-long (+ 0.04 (random .04)) (+ .01 (random .02)))))) (let ((pulse-ampf (make-env (vector 0 0 (if cur-is-long (values .1 .5 2 1 3 0) (values 1 1 1.5 .3 2 0))) :scaler (* amp (if cur-is-long (+ .6 (random .4)) (+ .1 (random .7)))) :length pulse-samps :base (if cur-is-long 6.0 3.0))) (pulse-frqf (make-env (if cur-is-long '(0 -.5 .5 0 1 -.3) '(0 -1 .1 0 1 0)) :length pulse-samps :base .1 :offset (hz->radians (if cur-is-long (if (> (random 1.0) .6) 1340 1260) 1200)) :scaler (hz->radians (random 500.0)))) (cur-end (+ cur-start pulse-samps))) (do ((i cur-start (+ i 1))) ((= i cur-end)) (outa i (* (env pulse-ampf) (polywave gen (env pulse-frqf))))) (set! cur-start (+ cur-end (seconds->samples (if cur-is-long (+ .015 (random (if (> (random 1.0) .8) .15 .04))) (+ .01 (random .01)))))) (set! cur-is-long (or (not cur-is-long) (> (random 1.0) .3))))))) ;; (with-sound (:play #t) (western-toad 0 2 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Southwestern toad (define-animal (southwestern-toad beg dur amp) (let ((pulse-dur 0.0135) (pulse-space 0.0236) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (pulse-samps (seconds->samples pulse-space)) (pulse-out (seconds->samples pulse-dur)) (ampf (make-env (list 0 0 1.3 1 dur 1 (* 1.01 dur) 0) :duration dur :scaler amp :base .3)) (frqf (make-env (list 0 940 1 1230 dur 1230) :base 3.0 :duration dur :scaler (hz->radians 1.0) :offset (hz->radians -300))) (gen1 #f) (rnd (make-rand-interp 4000 (hz->radians 80))) (pulse-ampf (make-env '(0 0 1 1 1.5 1 2 .5 3 0) :base .3 :duration pulse-dur)) (pulse-frqf (make-env '(0 0 .3 .8 1.5 1 2.7 .8 3 .3) :duration pulse-dur :scaler (hz->radians 300)))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out))) (pulse-amp (env ampf))) (set! (mus-location ampf) (- i start)) (set! (mus-location frqf) (- i start)) (set! gen1 (make-polywave 0.0 (list 1 (* pulse-amp .95) 2 (* pulse-amp .02) 3 (* pulse-amp .03)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulse-ampf) (polywave gen1 (+ (env frqf) (env pulse-frqf) (rand-interp rnd)))))) (mus-reset pulse-ampf) (mus-reset pulse-frqf)))))) ;; (with-sound (:play #t) (southwestern-toad 0 2 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Great Plains Narrow-mouthed toad (define-animal (great-plains-narrow-mouthed-toad beg dur1 amp) ;; rocky 75 28 (let ((attack-dur 0.155)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg (max dur1 0.3)))) ;; attack portion (attack-stop (seconds->samples (+ beg attack-dur))) (attack-ampf (make-env '(0.000 0.000 0.015 0.078 0.020 0.289 0.042 0.000 0.057 0.000 0.069 0.409 0.093 0.425 0.101 0.520 0.113 0.588 0.141 0.218 0.159 0.537 0.182 0.695 0.221 0.140 0.223 0.640 0.233 0.872 0.253 0.602 0.269 0.000 0.280 0.000 0.292 0.915 0.319 0.520 0.322 0.000 0.333 0.000 0.347 0.912 0.359 0.777 0.371 0.509 0.381 0.000 0.391 0.000 0.399 0.611 0.407 0.948 0.428 0.475 0.433 0.000 0.448 0.000 0.468 0.905 0.491 0.206 0.504 0.000 0.513 0.000 0.528 0.909 0.537 0.583 0.543 0.125 0.554 0.000 0.572 0.911 0.578 0.957 0.597 0.132 0.611 0.000 0.619 0.000 0.639 0.803 0.648 0.643 0.655 0.108 0.660 0.000 0.677 0.000 0.683 0.629 0.693 0.902 0.706 0.186 0.716 0.000 0.731 0.000 0.736 0.568 0.747 0.985 0.767 0.000 0.790 0.000 0.791 0.358 0.804 0.666 0.818 0.145 0.825 0.000 0.842 0.000 0.848 0.408 0.857 0.768 0.878 0.000 0.898 0.000 0.904 0.511 0.915 0.883 0.929 0.000 0.952 0.000 0.970 0.688 0.977 0.280 0.988 0.052 1.000 0.000) :duration attack-dur :scaler amp)) (attack-frqf (make-env '(0.000 0.124 0.037 0.145 0.060 0.205 0.067 0.152 0.091 0.132 0.107 0.145 0.126 0.175 0.147 0.150 0.166 0.173 0.190 0.173 0.206 0.137 0.219 0.179 0.232 0.192 0.245 0.177 0.260 0.158 0.274 0.177 0.288 0.203 0.298 0.186 0.312 0.167 0.325 0.147 0.336 0.190 0.347 0.207 0.362 0.184 0.377 0.158 0.393 0.190 0.403 0.220 0.421 0.190 0.434 0.158 0.453 0.197 0.465 0.229 0.480 0.199 0.496 0.169 0.515 0.197 0.525 0.218 0.532 0.194 0.544 0.171 0.558 0.197 0.573 0.222 0.584 0.197 0.606 0.177 0.623 0.201 0.633 0.222 0.645 0.203 0.661 0.182 0.676 0.209 0.690 0.222 0.700 0.203 0.717 0.177 0.735 0.207 0.749 0.207 0.771 0.179 0.791 0.205 0.805 0.203 0.814 0.179 0.846 0.209 0.862 0.212 0.869 0.186 0.912 0.207 0.969 0.220 1.000 0.218) :duration attack-dur :scaler (hz->radians 8900.0))) (attack-gen1 (make-polywave 0.0 '(1 .92 2 .05 3 .02 4 .01)))) (do ((i start (+ i 1))) ((= i attack-stop)) (outa i (* (env attack-ampf) (polywave attack-gen1 (env attack-frqf))))) ;; main portion (let ((dur (- dur1 attack-dur))) (let ((ampf (make-env '(0 1 1 1 10 1 11 0) :duration dur :scaler amp)) (frqf (make-env '(0 2000 .9 2000 1 1700) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .92 2 .05 3 .02 4 .01))) (frqf2 (make-env '(0 0 .1 25 4 20) :duration dur :scaler (hz->radians 1.0))) (gp (make-polywave 100 '(4 1 9 1))) (low-ampf (make-env (list 0 0 .2 1 dur 1) :duration dur :scaler .15)) (pulser (make-pulse-train 100)) (pulse-ampf (make-env '(0.000 0.000 0.227 0.057 0.319 0.164 0.407 0.946 0.554 0.706 0.707 0.036 0.839 0.031 0.930 0.097 1.000 0.000) :duration .008)) (rnd (make-rand-interp 20 (hz->radians 3))) (pulse-amp amp) (saved-frq (make-float-vector (floor (* .03 *clm-srate*)))) ; 100 hz in pulser, so this is 3 times bigger than expected (last-stop attack-stop)) (pulse-train pulser 0.0) ; flush the startup pulse (do ((i attack-stop (+ i 1)) (j 0 (+ j 1))) ((= i stop)) (if (> (pulse-train pulser (float-vector-set! saved-frq j (+ (env frqf2) (rand-interp rnd)))) 0.1) (begin (do ((k 0 (+ k 1)) (n last-stop (+ n 1))) ((= k j)) (outa n (* pulse-amp (env pulse-ampf) (+ (* (env low-ampf) (polywave gp (float-vector-ref saved-frq k))) (polywave gen1 (env frqf)))))) (mus-reset pulse-ampf) (set! (mus-location ampf) (- i attack-stop)) (set! pulse-amp (env ampf)) (set! (mus-phase gen1) (* pi .75)) (set! last-stop i) (set! j 0))))))))) ;; (with-sound (:play #t) (great-plains-narrow-mouthed-toad 0 2 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Pacific chorus frog (define-animal (pacific-chorus-frog beg amp) (let ((dur 0.25)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.011 0.147 0.023 0.131 0.028 0.034 0.059 0.000 0.063 0.153 0.067 0.113 0.072 0.391 0.081 0.095 0.088 0.052 0.102 0.025 0.124 0.000 0.131 0.452 0.139 0.327 0.144 0.099 0.156 0.097 0.160 0.048 0.186 0.000 0.194 0.438 0.200 0.366 0.201 0.156 0.211 0.063 0.247 0.000 0.256 0.628 0.268 0.154 0.274 0.190 0.285 0.027 0.296 0.059 0.309 0.031 0.312 0.481 0.322 0.939 0.331 0.314 0.351 0.061 0.363 0.099 0.374 0.056 0.377 0.438 0.389 0.858 0.394 0.467 0.403 0.241 0.414 0.197 0.415 0.127 0.425 0.075 0.436 0.090 0.441 0.526 0.454 0.869 0.471 0.239 0.490 0.029 0.503 0.117 0.505 0.485 0.514 0.811 0.528 0.415 0.538 0.088 0.552 0.056 0.561 0.106 0.580 0.075 0.597 0.000 0.776 0.000 0.777 0.573 0.786 0.145 0.801 0.054 0.826 0.000 0.827 0.632 0.844 1.000 0.856 0.524 0.866 0.031 0.883 0.074 0.891 0.136 0.896 0.745 0.907 0.424 0.915 0.765 0.934 0.059 0.951 0.048 0.962 0.079 0.970 0.436 0.986 0.266 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.220 0.074 0.249 0.133 0.249 0.194 0.240 0.258 0.252 0.324 0.264 0.389 0.267 0.456 0.270 0.520 0.264 0.847 0.270 0.920 0.273 1.000 0.279) :duration dur :scaler (hz->radians (* 0.5 0.205 22050.0)))) (gen1 (make-polywave 0.0 '(2 .35 3 .1 4 .8 5 .01 6 .03 8 .005))) (rnd (make-rand-interp 600 (hz->radians 50)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (rand-interp rnd))))))))) ;; (with-sound (:play #t) (pacific-chorus-frog 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Red-spotted toad (define-animal (red-spotted-toad beg dur amp) ;; rocky 23 1 (let ((pulse-dur 0.0138) (pulse-space 0.0234) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (pulse-samps (seconds->samples pulse-space)) (pulse-out (seconds->samples pulse-dur)) (ampf (make-env '(0 0 .5 .8 .8 .8 .9 1 .98 1 1 0) :duration dur :scaler amp)) (frqf (make-env '(0 1900 .2 2200 .4 2250 .9 2200 1 2100) :duration dur :scaler (hz->radians 1.0))) (rnd (make-rand-interp 1000 (hz->radians 40))) (gen1 #f) (pulse-ampf (make-env '(0 0 1 1 1.25 1 2 .5 3 0) :base .3 :duration pulse-dur))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out)))) (let ((pulse-amp (env ampf))) (set! gen1 (make-polywave 0.0 (list 1 (* pulse-amp .99) 3 (* pulse-amp .005))))) (set! (mus-location ampf) (- i start)) (set! (mus-location frqf) (- i start)) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulse-ampf) (polywave gen1 (+ (env frqf) (rand-interp rnd)))))) (mus-reset pulse-ampf)))))) ;; (with-sound (:play #t) (red-spotted-toad 0 4 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Green toad (define-animal (green-toad beg dur amp) ;; rocky 31 1 ;; (an experiment with wave-train in place of pulsed env) (let ((pulse (let ((wave-len 256)) (do ((v (make-float-vector wave-len)) (pulse-ampf (make-env '(0.000 0.000 0.063 0.312 0.277 0.937 0.405 1.000 0.617 0.696 0.929 0.146 2.000 0.000) :length wave-len)) (i 0 (+ i 1))) ((= i wave-len) v) (set! (v i) (env pulse-ampf)))))) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env (list 0 0 .2 .9 .3 .7 .4 1 (max .5 (- dur .01)) 1 (max .51 dur) 0) :duration dur :scaler amp)) (frqf (make-env (list 0 2540 .2 3250 (max .5 dur) 3200) :base 10 :duration dur :scaler (hz->radians 1.0))) (pulse1 (make-wave-train 56.0 :wave pulse)) (pulse2 (make-delay (seconds->samples .0078))) ; pulses come in pairs (gen1 (make-polywave 0.0 '(1 .95 2 .04 3 .01))) (rnd (make-rand-interp 100 (hz->radians 2.0))) (rnd1 (make-rand-interp 1000 (hz->radians 80)))) (do ((i start (+ i 1))) ((= i stop)) (let ((val (wave-train pulse1 (rand-interp rnd)))) (outa i (* (env ampf) (+ val (delay pulse2 val)) (polywave gen1 (+ (env frqf) (rand-interp rnd1)))))))))) ;; (with-sound (:play #t) (green-toad 0 1 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Little grass frog (define-animal (little-grass-frog beg amp) ;; frogs 26 8.5 (let ((dur .032)) ;; initial note (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.061 0.739 0.124 0.998 0.358 0.902 0.630 0.419 0.727 0.469 0.813 0.391 0.857 0.046 0.884 0.256 0.918 0.121 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.289 0.534 0.302 0.793 0.299 1.000 0.307) :duration dur :scaler (hz->radians (* 0.5 21900.0)))) (gen1 (make-polywave 0.0 '(1 .005 2 .97 3 .02 4 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))) ;; 4 tinks (let ((begs (vector 0.085 0.118 0.141 0.162)) (amps (vector 1.0 1.0 .8 .6)) (frqs (vector 6840 6940 6890 6940))) (do ((call 0 (+ call 1))) ((= call 4)) (let ((start (seconds->samples (+ beg (begs call)))) (dur .01)) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.082 0.967 0.149 1.000 0.183 0.977 0.299 0.529 0.334 0.595 0.451 0.312 0.520 0.176 0.639 0.155 0.753 0.077 1.000 0.000) :duration dur :scaler (* amp (amps call)))) (frq (hz->radians (* 0.5 (frqs call)))) (gen1 (make-polywave 0.0 '(1 .005 2 .97 3 .02 4 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 frq)))))))))) ;; (with-sound (:play #t) (little-grass-frog 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Sonoran desert toad (define-animal (sonoran-desert-toad beg dur amp) ;; rocky 13 1 (let ((start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.011 0.201 0.193 0.704 0.338 0.878 0.593 0.986 0.865 0.972 0.954 0.895 0.970 0.645 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.360 0.069 0.387 0.144 0.411 0.500 0.428 0.649 0.432 0.746 0.425 0.877 0.435 0.974 0.418 1.000 0.291) :duration dur :scaler (hz->radians 2800.0))) (gen1 (make-oscil)) (gen2 (make-oscil)) (ampf2 (make-env (list 0 .1 .05 1 .2 .1 .3 .01 (- dur .1) .1 dur 1) :duration dur :scaler .2)) (gen3 (make-polywave 0.0 '(3 .5 4 .2 5 .1 6 .08 7 .05 9 .03))) (ampf3 (make-env (list 0 .2 .1 1 (- dur .2) 1 dur .5) :duration dur :scaler .1)) (rnd (make-rand-interp 4000 (hz->radians 200))) (env1 (vector 0 0 .6 1 1 0)) (env2 (vector 0 0 .3 .7 .5 1 .8 .9 1 0)) (env3 (vector 0 0 .2 .7 .3 .1 .5 1 .7 .8 1 0)) (next-pulse start) (pulse-samps 0) (pulse-ampf #f)) (do ((i start (+ i pulse-samps))) ((>= i stop)) (if (>= i next-pulse) (let ((pulse-dur (+ .01 (random .003))) (env-choice (random 3))) (set! pulse-ampf (make-env (case env-choice ((0) env1) ((1) env2) (else env3)) :duration pulse-dur :scaler (+ .7 (random .3)))) (set! pulse-samps (seconds->samples (+ pulse-dur (random 0.005)))) (set! next-pulse (+ next-pulse pulse-samps)))) (set! (mus-location ampf) (- i start)) (set! (mus-location frqf) (- i start)) (let ((pulse-end (+ i pulse-samps)) (pulse-amp (env ampf)) (pulse-frq (env frqf))) (do ((k i (+ k 1))) ((= k pulse-end)) (let ((frq (+ pulse-frq (rand-interp rnd)))) (outa k (* pulse-amp (env pulse-ampf) (+ (* .7 (oscil gen1 frq)) (* (env ampf2) (oscil gen2 (* 2.0 frq))) (* (env ampf3) (polywave gen3 frq)))))))))))) ;; (with-sound (:play #t) (sonoran-desert-toad 0 .8 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Amargosa toad (define (amargosa-toad beg1 amp1) ;; rocky 17 0 (define-animal (amargosa-toad-1 beg dur frqscl frqenv ampscl ampenv) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env ampenv :duration dur :scaler ampscl)) (frqf (make-env frqenv :duration dur :scaler (hz->radians frqscl))) (gen1 (make-polywave :partials (normalize-partials '(1 1 2 .18 3 .19 4 .04 5 .03 6 .04 8 .01 9 .01 10 .005 11 .01 12 .005))))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) (let ((begs (vector 0.0 0.15 0.325 0.47 0.61)) (durs (vector 0.027 0.06 0.065 0.042 0.05)) (amps (vector 0.9 1.0 1.0 0.4 0.1)) (frqs (vector 14800 14020 14800/3 14800 7400)) (ampenvs (vector '(0.000 0.000 0.085 0.906 0.117 1.000 0.328 0.909 0.715 0.464 0.892 0.118 1.000 0.000) '(0.000 0.000 0.025 1.000 0.056 0.201 0.121 0.848 0.151 0.503 0.217 0.395 0.441 0.556 0.602 0.868 0.642 0.870 0.734 0.726 0.808 0.456 0.964 0.141 1.000 0.000) '(0.000 0.000 0.026 0.053 0.047 1.000 0.063 0.809 0.079 0.181 0.106 0.637 0.151 0.442 0.180 0.604 0.346 0.507 0.463 0.511 0.582 0.694 0.641 0.663 0.697 0.519 0.744 0.331 0.806 0.087 1.000 0.000) '(0.000 0.000 0.037 0.108 0.070 1.000 0.090 0.700 0.117 0.067 0.144 0.462 0.166 0.523 0.209 0.168 0.234 0.410 0.639 0.278 0.823 0.373 1.000 0.000) '(0.000 0.000 0.091 0.302 0.184 0.083 0.243 0.639 0.286 0.120 0.364 0.465 0.570 0.187 0.739 0.434 1.000 0.000))) (frqenvs (vector '(0.000 0.075 0.317 0.073 1.000 0.065) '(0.000 0.076 0.031 0.106 0.064 0.085 0.098 0.073 0.158 0.079 0.821 0.076 1.000 0.067) '(0.000 0.201 0.050 0.209 0.090 0.213 0.257 0.217 0.377 0.215 0.486 0.221 0.548 0.231 0.669 0.233 0.751 0.225 0.852 0.215 1.000 0.227) '(0.000 0.071 0.063 0.081 0.097 0.083 0.155 0.073 0.195 0.069 0.832 0.069 1.000 0.053) '(0.000 0.120 0.132 0.128 0.218 0.126 0.272 0.120 0.326 0.120 0.513 0.120 0.730 0.118 1.000 0.096)))) (do ((call 0 (+ call 1))) ((= call 5)) (amargosa-toad-1 (+ beg1 (begs call)) (durs call) (frqs call) (frqenvs call) (* amp1 (amps call)) (ampenvs call))))) ;; (with-sound (:play #t) (amargosa-toad 0 .5)) ;;; ================ Mammals ================ ;;; ;;; ;;; Indri ;;; ;;; close in spectrum, amp, freq, but the original has what sounds like a ton of reverb ;;; if I add the reverb, it's close -- is this really what this animal sounds like? (define-animal (indri beg amp) (let ((pitch 900) (dur 1.5)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-polywave (* 2 pitch) '(1 .9))) (gen4 (make-polywave pitch '(1 .125))) (gen2 (make-polywave (* 8 pitch) '(1 .1))) (gen3 (make-polywave pitch '(1 .2))) (ampf (make-env '(0.0 0.0 0.05 0.4 0.1 0.65 0.2 0.5 0.27 1.0 0.4 0.43 0.43 0.53 0.5 0.5 0.53 0.36 0.6 1.0 0.64 0.99 0.69 0.6 0.7 0.3 0.77 0.15 0.8 0.04 1.0 0.0) :duration dur :scaler amp)) (frqf (make-env '(0 1 2 0 6 0 7 3 9 3) :scaler (hz->radians 60) :duration dur)) (vib (make-polywave 2 (list 1 (hz->radians 10))))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (polywave vib)))) (outa i (* (env ampf) (+ (polywave gen1 (+ (* 2.0 frq) (polywave gen4 frq))) (polywave gen2 (+ (* 8.0 frq) (polywave gen3 frq))))))))))) ;; (with-sound (:play #t) (indri 0 .5)) ;;; ================ Insects ================ ;;; ;;; ;;; mosquito ;;; ;;; need to make freq env flicks at call time (is there a comb-filter effect as it gets near?) (define-animal (mosquito beg dur freq amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (carrier (make-oscil freq)) (modulator1 (make-polywave (* freq 2) '(1 .6))) ; or 1 (but leave lower mult at 2??) (modulator3 (make-polywave (* freq 3) '(1 .3))) (modulator2 (make-polywave (* freq 8) '(1 .1))) ; or 9 (ampf (make-env '(0 0 .2 .5 1 .5 2 .5 3 1 4 .5 5 .5 5.1 0) :scaler amp :duration dur :base 32)) (frqf (make-env '(0 0 1 0 1.01 0.1 1.03 -0.1 1.05 0.0 3 0 3.02 .05 3.03 -0.1 3.1 0 5 0.0) :duration dur :scaler (hz->radians freq))) (vib (make-rand-interp 10.0 (hz->radians 10))) (indf (make-rand-interp 1 .5)) (index2 (hz->radians (* freq 1.0))) (index3 (hz->radians (* freq 0.5))) (hfreq (hz->radians freq))) (do ((i start (+ i 1))) ((= i stop)) (let* ((frq (+ (env frqf) (rand-interp vib))) (pitch (oscil carrier frq))) (outa i (* (env ampf) (+ (polywave modulator1 (+ (* 2.0 frq) (* hfreq pitch (+ 1.0 (rand-interp indf))))) (polywave modulator3 (+ (* 3.0 frq) (* index3 pitch))) (polywave modulator2 (+ (* 8.0 frq) (* index2 pitch)))))))))) ;; (with-sound (:play #t) (mosquito 0 5 560 .2) (mosquito 1 3 880 .05)) ;; (with-sound () (mosquito 0 1 560 .1)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Southern mole cricket (define-animal (southern-mole-cricket beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-oscil 2700)) (gen2 (make-oscil (* 2700 2.4))) (gen3 (make-oscil 60)) (gen5 (make-polywave 360 '(0 .035 1 .015))) (gen4 (make-oscil (* 2700 3.2))) (gargle (make-rand-interp 360 (hz->radians (* .25 360))))) (do ((i start (+ i 1))) ((= i stop)) (let ((pval (oscil gen3)) (noise (rand-interp gargle))) (outa i (* amp (+ (* (polywave gen5) (- 1.0 pval) (oscil gen2 (* 2.4 noise))) (* (max 0.0 pval) (+ (* .95 (oscil gen1 noise)) (* .05 (oscil gen4 noise))))))))))) ;; (with-sound (:play #t) (southern-mole-cricket 0 3 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Broad-winged Tree cricket (define-animal (broad-winged-tree-cricket beg dur amp) (let ((freq 1700)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gp (make-polywave freq '(1 .7 2 .05 3 .04))) (gb (make-polywave freq '(4 .02 5 .02))) (ampmod (make-triangle-wave 155 :amplitude .07)) (ampf (make-env '(0 0 8 1 20 1 21 0) :duration dur :scaler amp)) (frqf (make-env '(0 1 1 -1 2 -1) :duration .06 :base 10.0 :scaler (hz->radians 40.0))) (pulsef #f) (pulse-samps (seconds->samples .06)) (indf (make-env '(0 0 10 0 18 1 23 1 26 0 30 0) :duration .06)) (noise (make-rand-interp 1000 .005))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-samps))) (pulse-amp (env ampf))) (set! pulsef (make-env '(0 0 1 .1 6 .2 7 0 8 .3 10 1 18 .9 21 .1 23 .3 28 .1 30 0) :scaler pulse-amp :duration .06 :base .1)) (do ((k i (+ k 1))) ((= k reset-stop)) (let ((buzz (+ (env frqf) (rand-interp noise)))) (outa k (* (env pulsef) (+ .93 (triangle-wave ampmod)) (+ (polywave gp buzz) (* (env indf) (polywave gb buzz)))))))) (mus-reset pulsef) (mus-reset frqf) (mus-reset indf))))) ;; (with-sound (:play #t) (broad-winged-tree-cricket 0 1.0 0.3)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Long-spurred meadow katydid ;;; ;;; I can barely hear this at its true pitch, so the match was ;;; done down one or two octaves -- I think the recording has cut off high info (above 20Khz) -- ;;; need much higher srate to see what this guy is really doing. This is not very good... (define-animal (long-spurred-meadow-katydid beg amp) (let ((dur 10.1) ; overall duration (slow-start 2.2)) ; buzz at start (let ((soft-end (+ slow-start 4.0))) ; softer section, rest is full vol (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) ;; looks like the same basic pulse throughout, almost same speed at start but every other one is squelched ;; slow startup pulse starts much faster (.06 mid-pulse duration, .0013 base pulse) (carrier (make-polywave 400 (list 33 .36 35 (* .36 .7) 37 (* .36 .49) 39 (* .36 .343) 41 (* .36 .242)))) (modulator (make-polywave 1500 '(1 .003))) ; cos^2 = 1/2(cos 2x + 1), but polywave has constant term via partial 0 (modulator1 (make-polywave 3000 '(0 .5 1 .5))) (noise (make-rand-interp 5000 .003)) (peep (make-pulsed-env '(0 0 1 0 2 .2 3 0 5 .75 8 1 10 0 11 0) .06 (/ 1.0 .06))) (ampf (make-env (list 0 0 .5 .5 slow-start .4 soft-end .4 (+ soft-end .5) 1 (- dur 1) 1 dur 0.0) :duration dur :scaler amp)) (pulsef (make-env (list 0 -1 slow-start -1 (+ slow-start .03) 0 dur 0) :duration dur :scaler (hz->radians 8))) (pulsef1 (make-env (list 0 -1 slow-start -1 (+ slow-start .03) 0 dur 0) :duration dur :scaler (hz->radians (* 24.75 8))))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave modulator1) (pulsed-env peep (env pulsef)) (polywave carrier (+ (env pulsef1) (rand-interp noise) (polywave modulator)))))))))) ;; (with-sound (:statistics #t) (long-spurred-meadow-katydid 0 .5)) #| (define-animal (long-spurred-meadow-katydid beg amp) (let ((dur 10.1) ; overall duration (slow-start 2.2)) ; buzz at start (let ((soft-end (+ slow-start 4.0))) ; softer section, rest is full vol (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) ;; looks like the same basic pulse throughout, almost same speed at start but every other one is squelched ;; slow startup pulse starts much faster (.06 mid-pulse duration, .0013 base pulse) (carrier (make-nrxysin 13200 (/ 800 13200) 4 .7)) (modulator (make-oscil 1500 (* 0.5 pi))) (noise (make-rand-interp 5000 .1)) (nrx 0.0) (peep (make-pulsed-env '(0 0 1 0 2 .2 3 0 5 .75 8 1 10 0 11 0) .06 (/ 1.0 .06))) (ampf (make-env (list 0 0 .5 .5 slow-start .4 soft-end .4 (+ soft-end .5) 1 (- dur 1) 1 dur 0.0) :duration dur :scaler amp)) (pulsef (make-env (list 0 -1 slow-start -1 (+ slow-start .03) 0 dur 0) :duration dur :scaler (hz->radians 8)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env pulsef)) (md (oscil modulator))) (set! nrx (nrxysin carrier (+ (* 825.0 frq) ; (/ 13200 16)) (rand-interp noise) (* .1 md)))) (set! md (* md md nrx (pulsed-env peep frq))) (outa i (* md (env ampf))))))))) |# #| ;; this is slower! (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env pulsef)) (md (oscil modulator))) (outa i (* md md (nrxysin carrier (+ (* 825.0 frq) ; (/ 13200 16)) (rand-interp noise) (* .1 md))) (pulsed-env peep frq) (env ampf))))))))) |# ;;; -------------------------------------------------------------------------------- ;;; ;;; Handsome trig (define-animal (handsome-trig beg dur amp) (let ((freqs (apply float-vector (map hz->radians '(6439 6585 6860 6940 7090 7266 7362)))) (amps (float-vector 0.355 0.355 0.089 0.060 0.071 0.035 0.035)) (pulse-dur .02)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (pulsef (make-env '(0.0 0.0 0.05 1.0 0.13 1.0 0.4 0.1 1.0 0.0) :scaler amp :duration pulse-dur)) (pulse-samps (seconds->samples pulse-dur)) (pulse-sep (seconds->samples pulse-dur)) (pulses 0) (obank (make-oscil-bank freqs (make-float-vector 7) amps #t))) (do ((i start (+ i pulse-sep))) ((>= i stop)) (let ((pulse-stop (+ i pulse-samps))) (do ((k i (+ k 1))) ((= k pulse-stop)) (outa k (* (env pulsef) (oscil-bank obank))))) (set! pulses (+ pulses 1)) ;; count pulses in current group -- at least 2, at most 4, if 2 or 3, possibly and if 4 definitely insert a space (if (or (= pulses 4) (and (= pulses 2) (> (random 1.0) 0.6)) (and (= pulses 3) (> (random 1.0) 0.3))) (begin (set! pulse-sep (+ pulse-samps (seconds->samples (+ .015 (random .005))))) (set! pulses 0)) (set! pulse-sep pulse-samps)) (mus-reset pulsef) (mus-reset obank))))) ;; (with-sound (:play #t :statistics #t) (handsome-trig 0 2 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Fast calling tree cricket ;;; ;;; (use fm for noise to get the burble right, and pm for spectrum) (define-animal (fast-calling-tree-cricket beg dur amp) (let ((pulse-dur .0167)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (pulsef (make-env '(0.0 0.0 0.05 0.07 0.08 0.4 0.2 0.7 0.37 0.93 0.52 1.0 0.6 0.4 0.67 0.2 0.84 0.16 0.88 0.06 0.96 0.03 1.0 0.0) :scaler amp :duration pulse-dur)) (pulse-samps (seconds->samples (/ 1.0 55))) (pulse-out (seconds->samples pulse-dur)) (gen1 (make-oscil 4100)) (md (make-oscil 4100)) (md1 (make-oscil 205)) (rnd (make-rand-interp 180 .01))) ;; 1.0 .04 .007 (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-out)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (oscil gen1 (rand-interp rnd) (+ (* .1 (oscil md)) (* .2 (oscil md1))))))) (mus-reset pulsef)))))) ;; (with-sound (:play #t) (fast-calling-tree-cricket 0 2 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Dog-day cicada (define-animal (dog-day-cicada beg dur amp) ; dur ca 10 ..15 secs (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.0 0.0 0.1 0.03 0.2 0.2 0.3 0.6 0.34 0.8 0.44 1.0 0.5 0.83 0.55 0.92 0.6 0.86 0.66 1.0 0.7 0.7 0.88 0.25 0.91 0.24 0.93 0.02 1.0 0.0) :duration dur :scaler (* 0.5 amp))) (gen1 (make-oscil 7500)) (gen2 (make-polywave 200 '(1 .15))) (rnd (make-rand-interp 200)) (rndf (make-env '(0 .3 .7 .3 .8 1 1 0) :duration dur :scaler (hz->radians 120))) (frqf (make-env '(0 -.5 .2 0 .85 0 1 -1) :scaler (hz->radians 400) :duration dur)) (rx (make-rxyk!cos 4000 3/20 8.0))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ (oscil gen1 (+ (env frqf) (* (env rndf) (rand-interp rnd)) (polywave gen2))) (rxyk!cos rx))))))) ;; (with-sound (:play #t) (dog-day-cicada 0 2 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Linnaeus' Cicada (define-animal (linnaeus-cicada beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 .8 10 1 11 0) :duration dur :scaler amp)) (frqf (make-env '(0 0 3 .02 6 0 8 .03 9.8 0 10.6 -1 11 -1) :scaler (hz->radians 450) :duration dur :base 32)) (gp1 (make-polywave 1280 '(1 .8 2 .02 3 .02))) (gp2 (make-polywave 1100 '(1 .15))) (gp3 (make-polywave 1460 '(1 .07))) (rnd (make-rand-interp 1280 .014)) (saw (make-sawtooth-wave 180 .5))) (do ((i start (+ i 1))) ((= i stop)) (let ((sw (sawtooth-wave saw)) (md (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ .75 (* sw sw)) (+ (polywave gp1 md) (polywave gp2 (* 0.8593 md)) ;(/ 1100 1280) (polywave gp3 (* 1.1406 md))))))))) ;(/ 1460 1280) ;; (with-sound (:statistics #t) (linnaeus-cicada 0 2 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Lyric cicada (define-animal (lyric-cicada beg dur amp) (let ((p0 400)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (pulsef (make-pulsed-env '(0.0 0.0 0.038 0.16 0.044 0.6 0.07 0.6 0.08 0.26 0.1 0.09 0.12 0.43 0.14 0.19 0.18 0.07 0.22 0.048 0.23 0.65 0.25 0.65 0.26 0.23 0.28 0.044 0.3 0.55 0.31 0.31 0.35 0.05 0.38 0.01 0.39 1.0 0.41 0.36 0.42 0.16 0.44 0.02 0.46 0.7 0.48 0.23 0.5 0.1 0.55 0.01 0.56 0.97 0.6 0.12 0.612 0.02 0.63 0.61 0.65 0.18 0.69 0.07 0.7 0.61 0.72 0.16 0.76 0.05 0.78 0.37 0.790 0.13 0.82 0.02 0.83 0.4 0.85 0.12 0.9 0.01 0.92 0.29 0.95 0.2 0.96 0.08 1.0 0) .02 50.0)) (gen1 (make-oscil (* p0 16))) (gen2 (make-polywave p0 '(1 .15))) (rnd (make-rand-interp p0 (hz->radians 800))) (ampf (make-env '(0 0 1 1 10 1 11 0) :duration dur :scaler amp))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (pulsed-env pulsef) (oscil gen1 (+ (polywave gen2) (rand-interp rnd))))))))) ;; (with-sound (:play #t) (lyric-cicada 0 2 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Confused ground cricket (define-animal (confused-ground-cricket beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-oscil 5700)) (gen2 (make-polywave 5700 '(1 .01))) (rnd (make-rand-interp 600 (hz->radians 166))) (songf (make-env '(0.0 0.0 0.02 0.5 0.18 0.5 0.24 0.28 0.28 0.27 0.45 0.8 0.65 1.0 0.93 0.94 1.0 0.0) :duration .4)) (pulsef #f) (pulse-samps (seconds->samples .01)) (song-samps (seconds->samples .4))) (do ((i start (+ i (seconds->samples (+ .5 (random .2)))))) ((>= i stop)) (let ((song-stop (min stop (+ i song-samps)))) (do ((k i (+ k (seconds->samples (+ .01 (random .006)))))) ((>= k song-stop)) (set! (mus-location songf) (- k i)) (let ((pstop (+ k pulse-samps)) (pulse-amp (env songf))) (set! pulsef (make-env '(0.0 0.0 0.16 0.0 0.23 0.57 0.36 0.57 0.42 0.83 0.56 1.0 0.64 0.81 0.75 0.2 0.86 0.02 1.0 0.0) :scaler (* pulse-amp amp) :duration .01)) (do ((j k (+ j 1))) ((= j pstop)) (outa j (* (env pulsef) (oscil gen1 (+ (polywave gen2) (rand-interp rnd)))))))) (mus-reset songf))))) ;; (with-sound (:play #t) (confused-ground-cricket 0 3 .3)) ;;; ------------------------------------------------------------------------------------------ ;;; ;;; Tinkling ground cricket ;;; ;;; There's a secondary (slower) peep -- is this part of our cricket's song, or another cricket in the background? (define-animal (tinkling-ground-cricket beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-oscil 7200)) (gp (make-polywave 80 '(1 .01))) (pulser (make-env '(0.0 0.0 0.07 0.5 0.28 0.86 0.42 0.97 0.55 1.0 0.63 0.88 0.71 0.6 0.85 0.14 0.9 0.1 0.94 0.02 1.0 0.0) :scaler amp :duration .03)) (pulse-samps (seconds->samples .15)) (pulse-out (seconds->samples .03))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-out)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulser) (oscil gen1 (polywave gp))))) (mus-reset pulser))))) ;; (with-sound (:play #t) (tinkling-ground-cricket 0 3 .3)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Marsh meadow grasshopper ;;; ;;; this is just a random number generator with an elaborate amplitude envelope (define-animal (marsh-meadow-grasshopper beg amp) (let ((dur 4.8)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 .2 .6 .65 1.0 .87 .87 1.0 0) :duration dur :scaler amp)) (pulsef (make-env '(0.000 0.000 0.070 0.086 0.176 0.083 0.311 0.170 0.432 0.173 0.470 0.321 0.487 0.021 0.503 0.021 0.504 0.304 0.540 0.298 0.553 0.435 0.600 0.193 0.614 0.458 0.652 0.315 0.665 0.024 0.689 0.018 0.699 0.638 0.725 0.582 0.727 0.027 0.790 0.009 0.799 0.819 0.824 0.635 0.833 0.036 0.926 0.015 0.941 0.866 0.949 0.053 0.968 0.570 1.000 0.000) :duration .19)) (pulse-samps (seconds->samples (+ .19 .02))) (pulse-out (seconds->samples .19)) (r (make-rand 20000.0 1.0)) (oz (make-one-zero -1.0 1.0))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out))) (pulse-amp (env ampf))) (set! (mus-scaler r) pulse-amp) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (one-zero oz (* (env pulsef) (rand r))))) (mus-reset pulsef)))))) ;; (with-sound (:play #t :statistics #t) (marsh-meadow-grasshopper 0 .3)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Carolina grasshopper ;;; ;;; tricky! spikes are at 48 Hz, but the sound they make requires 24 Hz pulse -- I presume ;;; I'm seeing the 2 or 4 wings alternating? (define-animal (carolina-grasshopper beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env ;'(0.000 0.000 0.032 0.115 0.151 0.044 0.181 0.485 0.254 0.841 0.620 0.431 0.731 0.051 0.757 0.292 0.898 0.620 0.984 0.380 1.000 0.000) '(0.000 0.000 0.031 0.122 0.076 0.054 0.148 0.010 0.177 0.512 0.199 0.366 0.246 0.868 0.291 0.336 0.320 0.644 0.386 0.244 0.450 0.553 0.535 0.142 0.583 0.424 0.611 0.427 0.727 0.081 0.778 0.315 0.835 0.319 0.899 0.600 0.972 0.356 1.000 0.000) :duration dur :scaler (* 3 amp))) (spikes1 (make-nsin 24 250)) (spikes1a (make-nsin 24 250)) (spikes2 (make-nsin 48 140)) (spikes3 (make-nsin 48 120)) (rnd (make-rand-interp 100 .0001)) ; perhaps this is too much -- it clobbers the comb filter (frqf (make-env '(0 0 1 -.4 2 0 3 -.2 4 .3 6 -1.0) :scaler (hz->radians .4) :duration dur)) (oz (make-one-zero 1.0 -1.0))) (set! (mus-phase spikes1a) pi) (set! (mus-phase spikes2) .7) (set! (mus-phase spikes3) 1.4) (do ((i start (+ i 1))) ((= i stop)) (let* ((noi (rand-interp rnd)) (frq (+ noi (env frqf)))) (outa i (one-zero oz (* (env ampf) (+ (* .6 (nsin spikes1 noi)) (* .6 (nsin spikes1a noi)) (* .4 (nsin spikes2 frq)) (* .3 (nsin spikes3 frq)))))))))) ;; (with-sound (:play #t) (carolina-grasshopper 0 1.5 1.0)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Striped ground cricket (define-animal (striped-ground-cricket beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-oscil 13200)) ;(* 2 6600))) (gen2 (make-oscil 132 (* 0.5 (+ pi (hz->radians 132))))) (gen3 (make-oscil 6600)) (gen4 (make-oscil 66 (* 0.5 (+ pi (hz->radians 66))))) (pulsef (make-env '(0.000 0.000 0.041 0.466 0.144 0.775 0.359 1.0 0.484 0.858 1.000 0.000) :scaler amp :duration .012)) (pulsef1 (make-env '(0.000 0.000 0.041 0.466 0.144 0.775 0.359 1.0 0.484 0.858 1.000 0.000) :scaler (* 0.5 amp) :duration .012)) (pulse-samps (seconds->samples 0.012)) (pulse-sep (seconds->samples 0.015)) (long-pulse-samps (seconds->samples .54)) (rnd (make-rand-interp 198 .04))) ; (* 3 66) (do ((i start (+ i long-pulse-samps))) ((>= i stop)) ;; do the first 0.5 amp pulse (let ((pstop (+ i pulse-samps)) (next-start i) (pulses (+ 8 (random 3)))) (do ((j i (+ j 1))) ((= j pstop)) (outa j (* (env pulsef1) (+ (* .2 (oscil gen1 (* .075 (oscil gen2)))) (* .8 (oscil gen3 (+ (* .0125 (oscil gen4)) (rand-interp rnd)))))))) (mus-reset pulsef1) ;; now the remaining pulses (do ((k 1 (+ k 1))) ((= k pulses)) (set! next-start (+ next-start pulse-sep)) (set! pstop (+ next-start pulse-samps)) (do ((j next-start (+ j 1))) ((= j pstop)) (outa j (* (env pulsef) (+ (* .2 (oscil gen1 (* .075 (oscil gen2)))) (* .8 (oscil gen3 (+ (* .0125 (oscil gen4)) (rand-interp rnd)))))))) (mus-reset pulsef)))))) ;; (with-sound (:play #t) (striped-ground-cricket 0 3 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Sphagnum ground cricket (define-animal (sphagnum-ground-cricket beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-oscil 8850)) (gen2 (make-oscil 17700)) ;(* 8850 2))) (rnd1 (make-rand-interp 885 .03)) (rnd2 (make-rand-interp 885 .1)) (ampf (make-env '(0 0 1 1 10 1 11 0) :duration dur :scaler amp)) (pulsef (make-env '(0.000 0.000 0.041 0.5 0.250 0.7 0.4 1.0 0.5 0.9 0.8 0.3 1.000 0.000) :duration .013)) (pulse-samps (seconds->samples .019)) (pulse-out (seconds->samples .013))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out))) (pulse-amp (env ampf))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* pulse-amp (env pulsef) (+ (* .9 (oscil gen1 (rand-interp rnd1))) (* .1 (oscil gen2 (rand-interp rnd2))))))) (mus-reset pulsef))))) ;; (with-sound (:play #t) (sphagnum-ground-cricket 0 2 .3)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Southeastern field cricket (define-animal (southeastern-field-cricket beg dur amp) (let ((pulse-dur 0.027)) ; occasionally a hicccup = .039, 30..100 pulses per song (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-polywave 4730 '(1 .8 2 .1 3 .1))) (rnd (make-rand-interp 946 1)) ; (* 2 473) (oz (make-one-zero 1.0 -1.0)) (ampf (make-env '(0 0 1 1 10 1 11 0) :duration dur :scaler amp)) (pulsef (make-env '(0.0 0.0 0.05 0.38 0.14 0.77 0.26 0.95 0.47 1.0 0.57 0.9 0.81 0.5 0.85 0.3 1.0 0.0) :duration .014)) (pulses (+ 30 (random 70))) (pulse-samps (seconds->samples pulse-dur)) (current-pulse-samps (seconds->samples pulse-dur))) (do ((i start (+ i current-pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-samps))) (pulse-amp (env ampf))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* pulse-amp (env pulsef) (polywave gen1 (one-zero oz (rand-interp rnd))))))) (mus-reset pulsef) (set! pulses (- pulses 1)) (if (<= pulses 0) (begin (set! current-pulse-samps (+ pulse-samps (seconds->samples (+ .2 (random .1))))) (set! pulses (+ 30 (random 70)))) (begin (set! pulse-samps (seconds->samples (if (> (random 1.0) .95) (+ pulse-dur .005 (random .01)) pulse-dur))) (set! current-pulse-samps pulse-samps))))))) ;; (with-sound (:play #t) (southeastern-field-cricket 0 5 .3)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Snowy tree cricket (define-animal (snowy-tree-cricket beg dur amp) (let ((pitch 1690)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gp (make-polywave pitch '(1 .9 2 .05 3 .05))) (rnd (make-rand-interp 1000 .014)) (pulsef (make-env '(0.0 0.0 0.04 0.79 0.08 0.09 0.11 0.02 0.14 0.83 0.15 0.95 0.21 0.05 0.26 0.02 0.29 0.79 0.31 0.89 0.35 0.07 0.38 0.04 0.39 0.79 0.42 0.94 0.45 0.08 0.48 0.05 0.50 0.80 0.52 0.96 0.59 0.02 0.64 0.01 0.66 0.78 0.68 0.95 0.72 0.06 0.75 0.04 0.76 0.70 0.79 0.96 0.83 0.07 0.85 0.02 0.88 0.80 0.90 1.0 0.95 0.12 0.97 0.04 1.00 0.00) :scaler amp :duration .352 :base .1)) (frqf (make-env '(0.0 0.0 0.04 1.0 0.08 0.0 0.11 0.0 0.14 1.0 0.15 0.0 0.21 0.0 0.26 0.0 0.29 1.0 0.31 0.0 0.35 0.0 0.38 0.0 0.39 1.0 0.42 0.0 0.45 0.0 0.48 0.0 0.50 1.0 0.52 0.0 0.59 0.0 0.64 0.0 0.66 1.0 0.68 0.0 0.72 0.0 0.75 0.0 0.76 1.0 0.79 0.0 0.83 0.0 0.85 0.0 0.88 1.0 0.90 0.0 0.95 0.0 0.97 0.0 1.00 0.0) :duration .352 :scaler (hz->radians 60))) (reset-samps (seconds->samples .85)) (on-samps (seconds->samples .36))) ; else ampf is 0.0 (do ((i start (+ i reset-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i on-samps)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (polywave gp (+ (env frqf) (rand-interp rnd)))))) (mus-reset pulsef) (mus-reset frqf)))))) ;; (with-sound (:play #t) (snowy-tree-cricket 0 2 .3)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Slightly musical conehead ;;; ;;; this could use some work (define-animal (slightly-musical-conehead beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-oscil 11000)) (gp (make-polywave 1100 '(1 .1 5 .05))) (rnd1 (make-rand-interp 1100 .05)) (rnd2 (make-rand-interp 1100 .4)) (pulse-samps (seconds->samples .36)) (pulse-out (seconds->samples .146)) (pulsef (make-env '(0.00 0.00 0.02 0.29 0.04 0.55 0.07 0.37 0.08 0.06 0.11 0.48 0.14 0.13 0.15 0.69 0.18 0.31 0.20 0.07 0.22 0.77 0.23 0.52 0.25 0.77 0.26 0.21 0.28 0.70 0.30 0.12 0.34 0.80 0.38 0.17 0.39 0.79 0.42 0.08 0.44 0.54 0.48 0.53 0.50 0.85 0.53 0.11 0.55 0.51 0.58 0.79 0.60 0.22 0.62 0.84 0.65 0.09 0.67 0.56 0.70 0.91 0.74 0.81 0.77 0.10 0.79 0.70 0.83 0.51 0.85 0.90 0.88 0.03 0.90 0.55 0.93 0.60 0.95 0.11 0.97 0.97 1.0 0.00) :scaler amp :duration .146))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-out)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (+ .6 (rand-interp rnd2)) (oscil gen1 (polywave gp (rand-interp rnd1)))))) (mus-reset pulsef))))) ;; (with-sound (:play #t) (slightly-musical-conehead 0 2 .4)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Pine tree cricket (define-animal (pine-tree-cricket beg dur amp) (let ((pulse-dur .014)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (pulsef (make-env '(0.000 0.000 0.027 0.196 0.104 0.448 0.236 0.773 0.341 0.910 0.416 0.975 0.532 1.0 0.671 0.868 0.751 0.711 0.833 0.504 0.926 0.160 1.000 0.000) :scaler amp :duration pulse-dur)) (gp (make-polywave 3580 '(1 .97 3 .03))) (frqf (make-env '(0 1 1 0) :scaler (hz->radians 100) :duration pulse-dur)) (pulse-samps (seconds->samples .022)) (pulse-out (seconds->samples pulse-dur)) (rnd (make-rand-interp 100 .004))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-out)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (polywave gp (+ (env frqf) (rand-interp rnd)))))) (mus-reset frqf) (mus-reset pulsef)))))) ;; (with-sound (:play #t) (pine-tree-cricket 0 2 .25)) ;;;-------------------------------------------------------------------------------- ;;; ;;; Davis's tree cricket (define-animal (davis-tree-cricket beg dur amp) (let ((pulse-dur .013) (pitch 2420)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (pulse-samps (seconds->samples 0.014)) (pulse-out (seconds->samples pulse-dur)) (pulsef (make-env '(0.000 0.000 0.079 0.395 0.245 0.925 0.410 1.000 0.470 0.874 0.554 0.549 0.614 0.312 0.728 0.170 1.000 0.000) :scaler amp :duration pulse-dur)) (gp (make-polywave pitch '(1 .93 2 .07))) (rnd (make-rand-interp 150 .004))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-out)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (polywave gp (rand-interp rnd))))) (mus-reset pulsef)))))) ;; (with-sound (:play #t) (davis-tree-cricket 0 2 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Black-horned tree cricket (define-animal (black-horned-tree-cricket beg dur amp) (let ((pulse-dur 0.0173) (pulse-space 0.0219) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (pulse-samps (seconds->samples pulse-space)) (pulse-out (seconds->samples pulse-dur)) (ampf (make-env '(0 0 .05 1 .95 1 1 0) :duration dur :scaler amp)) (gen1 #f) (rnd (make-rand-interp 1000 (hz->radians 50))) (pulse-ampf (make-env '(0.000 0.000 0.076 0.443 0.277 0.866 0.454 0.925 0.603 0.771 0.690 0.573 0.726 0.304 1.000 0.000) :duration pulse-dur))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out))) (pulse-amp (env ampf))) (set! gen1 (make-polywave 3680.0 (list 1 (* pulse-amp .94) 2 (* pulse-amp .04) 3 (* pulse-amp .01) 4 (* pulse-amp .005) 5 (* pulse-amp .003)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulse-ampf) (polywave gen1 (rand-interp rnd))))) (mus-reset pulse-ampf)))))) ;; (with-sound (:play #t) (black-horned-tree-cricket 0 2 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Narrow-winged tree cricket (define-animal (narrow-winged-tree-cricket beg dur amp) ;; insects 18 4 (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 .1 1 20 1 20.1 0) :duration dur :scaler amp)) (pulser (make-wave-train-with-env 43.0 '(0.000 0.000 0.144 0.332 0.269 0.715 0.361 0.838 0.459 0.866 0.609 0.727 0.652 0.530 0.780 0.194 1.000 0.000) (seconds->samples .0185))) (gen1 (make-polywave 1900 '(1 .8 2 .07 3 .13))) (rnd (make-rand-interp 150 (hz->radians 20)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (wave-train pulser) (polywave gen1 (rand-interp rnd))))))) ;; (with-sound (:play #t) (narrow-winged-tree-cricket 0 2 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Four-spotted tree cricket (define-animal (four-spotted-tree-cricket beg dur amp) ;; insects 16 4 (let ((index (hz->radians 400))) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 .3 1 20 1 20.3 0) :duration dur :scaler amp)) (amp-pulser (make-table-lookup-with-env 40.0 '(0.000 0.000 0.071 0.518 0.174 0.783 0.315 0.885 0.492 0.727 0.579 0.466 0.625 0.186 0.671 0.028 0.755 0.083 0.848 0.024 0.935 0.126 1.000 0.000 1.5 0) (seconds->samples .025))) (frq-pulser (make-table-lookup-with-env 40.0 (list 0 index 1 0 2 0) (seconds->samples .025))) (gen1 (make-polywave 3220 '(1 .92 2 .07 3 .01))) (gen2 (make-oscil 5000)) (gen3 (make-oscil 2200)) (rnd1 (make-rand-interp 8000 (hz->radians 2000))) (rnd (make-rand-interp 200 (hz->radians 30)))) (do ((i start (+ i 1))) ((= i stop)) (let ((noise (rand-interp rnd1))) (outa i (* (env ampf) (+ (* (table-lookup amp-pulser) (polywave gen1 (+ (rand-interp rnd) (table-lookup frq-pulser)))) (* .05 (+ (oscil gen2 noise) (* .2 (oscil gen3 (* .2 noise))))))))))))) ;; (with-sound (:play #t) (four-spotted-tree-cricket 0 1 .5)) ;;; ================ Birds ================ ;;; ;;; ;;; Fox sparrow (define-animal (fox-sparrow beg dur amp) (let ((begs (vector 0.0 0.3 0.6 0.93 1.23 1.49 1.74 1.98 2.12 2.29 3.0)) (ends (vector 0.12 0.46 0.85 1.17 1.44 1.7 1.95 2.08 2.26 2.45)) (low-frqs (vector 4260 4010 3910 4970 3360 3160 2810 2310 2700 2700)) (high-frqs (vector 5120 4170 5420 5520 4220 3410 5470 2460 3710 3710)) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (amp-envs (make-vector 10 #f)) (frq-envs (make-vector 10 #f)) (gen1 (make-oscil)) (gen2 (make-oscil)) (durs (let ((v (make-vector 10 0.0))) (do ((i 0 (+ i 1))) ((= i 10)) (set! (v i) (- (ends i) (begs i)))) v)) (rnd (make-rand-interp 100 .01))) (let ((scls (vector .09 .19 .22 .19 .27 .23 .21 .04 .17 .17)) (amps (vector '(0.000 0.000 0.17 0.13 0.38 0.67 0.64 1.0 0.78 0.79 0.9 0.04 1.0 0.0) '(0.000 0.000 0.15 0.15 0.27 0.67 0.37 0.89 0.69 1.0 0.79 0.6 0.8 0.05 1.0 0.0) '(0.000 0.000 0.11 0.28 0.18 0.66 0.35 0.98 0.90 0.92 1.0 0.0) '(0.000 0.000 0.11 0.28 0.14 0.70 0.32 0.98 0.85 0.84 1.0 0.0) '(0.000 0.000 0.11 0.28 0.14 0.70 0.32 0.98 0.85 0.84 1.0 0.0) '(0.000 0.000 0.15 0.86 0.24 1.00 0.63 0.64 0.89 0.61 1.0 0.0) '(0.000 0.000 0.27 0.80 0.37 1.00 0.63 0.64 0.88 0.51 1.0 0.0) '(0.000 0.000 0.08 0.48 0.37 1.00 0.88 0.76 1.00 0.0) '(0.000 0.000 0.12 0.43 0.24 1.00 0.59 0.72 0.88 0.35 1.0 0.0) '(0.000 0.000 0.12 0.43 0.24 1.00 0.59 0.72 0.88 0.35 1.0 0.0))) (frqs (vector '(0 1 1 0) '(0 0 1 .5 8 .6 9 1.0) '(0 1 1 .5 2 .2 3 0) '(0 1 1 0 5 0) '(0 1 1 .3 2 0) '(0 1 1 1) '(0 1 2 .2 3 0) '(0 0 1 .9 2 1) '(0 1 1 .4 2 0) '(0 1 1 .3 2 0)))) (do ((i 0 (+ i 1))) ((= i 10)) (set! (amp-envs i) (make-env (amps i) :scaler (/ (* amp (scls i)) .27) :duration (durs i))) (set! (frq-envs i) (make-env (frqs i) :scaler (hz->radians (- (high-frqs i) (low-frqs i))) :offset (hz->radians (low-frqs i)) :duration (durs i))))) (call-with-exit (lambda (done) (let ((peep 0) (peep-dur (seconds->samples (durs 0))) (peep-start (+ start (seconds->samples (begs 0))))) (do ((i peep-start peep-start)) ((>= i stop)) (let ((fe (frq-envs peep)) (ae (amp-envs peep)) (reset-stop (min stop (+ i peep-dur)))) (do ((k i (+ k 1))) ((= k reset-stop)) (let ((frq (+ (env fe) (rand-interp rnd)))) (outa k (* (env ae) (oscil gen1 frq (* .03 (oscil gen2 (* 2.0 frq))))))))) (set! peep (+ peep 1)) (if (>= peep 10) (done)) (set! peep-start (+ start (seconds->samples (begs peep)))) (set! peep-dur (seconds->samples (durs peep)))))))))) ;; (with-sound (:play #t) (fox-sparrow 0 3 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; White-throated sparrow ;;; ;;; probably music of birds 14, first song (define-animal (white-throated-sparrow beg amp) (let ((dur (+ 3.25 (random .2))) (pitch 3800)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.00 0.00 0.04 0.44 0.09 0.59 0.12 0.59 0.16 0.75 0.17 0.00 0.22 0.00 0.25 0.76 0.28 0.89 0.29 0.14 0.31 0.93 0.34 0.87 0.35 0.14 0.36 0.85 0.37 0.84 0.38 0.00 0.42 0.00 0.44 0.86 0.46 0.83 0.47 0.91 0.51 0.92 0.52 0.87 0.53 0.00 0.57 0.00 0.58 0.65 0.60 0.88 0.61 0.14 0.62 0.95 0.63 0.94 0.64 0.20 0.66 0.99 0.67 0.88 0.68 0.00 0.72 0.00 0.73 0.65 0.75 0.82 0.76 0.13 0.77 0.78 0.78 0.88 0.79 0.83 0.797 0.12 0.803 0.12 0.81 0.79 0.82 0.87 0.83 0.00 0.87 0.00 0.89 0.58 0.91 0.75 0.917 0.13 0.923 0.13 0.93 0.73 0.94 0.84 0.95 0.77 0.957 0.12 0.963 0.12 0.97 0.81 0.98 0.79 1.00 0.00) :duration dur :scaler amp)) (frqf (make-env '(0 0 .17 0.0 .21 1 0.22 1.5 0.23 1 0.41 1 0.42 1.25 0.43 1 0.56 1 0.57 1.25 0.58 1 0.71 1 0.72 1.25 0.73 1 0.86 1 0.87 1.25 0.88 1 1 1) :scaler (hz->radians 720) :duration dur)) (gen1 (make-polywave pitch :partials '(1 .9 2 .025 3 .075))) (rnd (make-rand-interp 30 .005))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (mus-random 0.001) (rand-interp rnd))))))))) ;; (with-sound (:play #t) (white-throated-sparrow 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Henslow's sparrow (define-animal (henslows-sparrow beg amp) ;; "the poorest vocal effort of any bird" -- R T Peterson (let ((dur 0.24)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.00 0.00 0.05 0.42 0.08 0.03 0.10 0.30 0.12 0.02 0.21 0.00 0.22 0.69 0.23 0.34 0.24 0.84 0.26 0.64 0.28 0.04 0.29 0.11 0.30 0.47 0.32 0.00 0.46 0.00 0.48 0.04 0.52 1.00 0.53 0.97 0.54 0.44 0.55 0.80 0.57 0.02 0.58 0.07 0.59 0.72 0.60 0.45 0.61 0.79 0.62 0.66 0.63 0.81 0.66 0.05 0.67 0.16 0.73 0.50 0.75 0.52 0.78 0.04 0.81 0.03 0.82 0.08 0.85 0.47 0.87 0.22 0.88 0.39 0.90 0.09 0.91 0.36 0.96 0.39 0.98 0.07 1.00 0.00) :duration dur :scaler amp)) (gen1 (make-oscil)) (frqf (make-env '(0.00 9310 0.05 9560 0.08 9480 0.10 9900 0.11 8140 0.12 9900 0.21 9980 0.22 8630 0.23 8800 0.24 8400 0.26 8800 0.28 8600 0.29 8800 0.30 8300 0.32 8100 0.46 8100 0.48 5600 0.49 5200 0.52 6200 0.54 4800 0.55 6600 0.57 5800 0.58 5800 0.59 6200 0.60 6200 0.62 5800 0.66 3600 0.67 4400 0.73 3900 0.78 3100 0.85 4900 0.88 3600 0.90 3900 0.91 4400 1.00 3900) :duration dur :scaler (hz->radians 1.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (env frqf)))))))) ;; (with-sound (:play #t) (henslows-sparrow 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Eastern wood-pewee (define-animal (eastern-wood-pewee-1 beg amp) ;; probably east 39 3 (let ((dur 1.07)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.037 0.894 0.045 0.711 0.061 0.845 0.072 0.760 0.076 0.912 0.084 0.838 0.099 0.982 0.111 0.729 0.124 0.879 0.142 0.011 0.15 0.01 0.165 0.778 0.172 0.601 0.180 0.706 0.212 0.441 0.258 0.227 0.298 0.325 0.312 0.564 0.334 0.312 0.365 0.399 0.416 0.260 0.475 0.196 0.555 0.356 0.631 0.363 0.712 0.294 0.746 0.464 0.753 0.369 0.776 0.508 0.799 0.425 0.825 0.479 0.869 0.485 0.877 0.567 0.907 0.541 0.918 0.459 0.942 0.513 0.977 0.366 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .905 2 .025 3 .025))) (frqf (make-env '(0 3370 .03 4300 .1 4600 .14 3400 0.15 4400 .16 3700 .18 4400 .24 4700 .3 4600 .34 3600 .4 3700 .6 3800 .8 4000 1.0 3900) :duration dur :base .1 :scaler (hz->radians 1.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (eastern-wood-pewee-1 0 .25)) (define-animal (eastern-wood-pewee-2 beg amp) ;; probably east 39 14 (let ((dur 1.07)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.055 0.665 0.081 0.657 0.101 0.456 0.140 0.572 0.165 0.477 0.219 0.564 0.288 0.526 0.306 0.668 0.328 0.613 0.387 0.830 0.402 1.000 0.434 0.768 0.455 0.214 0.470 0.173 0.484 0.387 0.499 0.631 0.512 0.229 0.559 0.142 0.582 0.165 0.698 0.085 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-oscil)) (gen2 (make-oscil)) (gen3 (make-oscil)) (frqf (make-env '(0 3250 .1 4400 .2 4800 .3 4800 .47 4000 .49 6300 .51 3600 1.0 2800) :duration dur :base .03 :scaler (hz->radians 1.0))) (indf (make-env '(0 0 .35 0 .55 1 1 1) :duration dur :scaler 0.1)) (indf-1 (make-env '(0 0 .35 0 .55 1 1 1) :duration dur :offset 1.0 :scaler -1.0))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* .9 (oscil gen1 frq)) (* (env indf) (oscil gen2 (* 2.0 frq))) (* (env indf-1) .075 (oscil gen3 (* 3.0 frq))))))))))) ;; (with-sound (:play #t) (eastern-wood-pewee-2 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Field sparrow (define-animal (field-sparrow beg amp) (let ((dur 2.92)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.025 0.201 0.095 0.307 0.113 0.235 0.122 0.005 0.146 0.000 0.167 0.696 0.201 0.430 0.241 0.325 0.243 0.000 0.265 0.000 0.287 0.840 0.300 0.791 0.312 0.567 0.354 0.369 0.365 0.000 0.388 0.000 0.405 0.853 0.430 0.621 0.449 0.387 0.470 0.314 0.477 0.000 0.493 0.000 0.511 0.887 0.529 0.796 0.552 0.402 0.566 0.327 0.578 0.000 0.594 0.000 0.614 0.966 0.629 0.446 0.645 0.273 0.649 0.000 0.65 0.0 0.664 0.026 0.673 1.0 0.690 0.459 0.706 0.000 0.714 0.031 0.719 0.892 0.74 0.0 0.747 0.000 0.755 0.851 0.773 0.0 0.781 0.000 0.790 0.869 0.81 0.0 0.814 0.000 0.827 0.827 0.845 0.0 0.849 0.000 0.861 0.786 0.878 0.0 0.882 0.000 0.894 0.716 0.912 0.0 0.918 0.000 0.925 0.711 0.943 0.0 0.949 0.000 0.959 0.657 0.97 0.0 0.975 0.000 0.984 0.536 0.993 0.149 1.000 0.000) :duration dur :scaler amp)) (gp (make-polywave 0.0 '(1 .99 2 .01))) (frqf (make-env '(0.000 4300 0.025 4300 0.1 3300 0.122 3300 0.146 4300 0.18 4300 0.23 3300 0.243 3300 0.265 4300 0.3 4300 0.35 3300 0.365 3300 0.388 4300 0.42 4300 0.46 3300 0.477 3300 0.493 4300 0.52 4300 0.56 3300 0.578 3300 0.594 4300 0.61 4300 0.63 3300 0.649 3300 0.65 4300 0.664 4300 0.68 4300 0.714 3300 0.716 4300 0.74 3200 0.747 4300 0.75 4300 0.773 3200 0.781 4300 0.785 4300 0.81 3200 0.814 4300 0.82 4300 0.845 3200 0.849 4300 0.85 4300 0.878 3200 0.882 4300 0.89 4300 0.912 3200 0.918 4300 0.92 4300 0.943 3200 0.949 4300 0.95 4300 0.97 3200 0.975 4300 0.98 4300 0.993 3200 1.000 3300) :duration dur :scaler (hz->radians 1.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gp (env frqf)))))))) ;; (with-sound (:play #t) (field-sparrow 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Tufted titmouse (define-animal (tufted-titmouse beg amp) (let ((dur 1.0)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.00 0.034 0.637 0.060 0.591 0.074 0.458 0.095 0.872 0.119 0.473 0.185 0.033 0.211 0.102 0.233 0.00 0.384 0.00 0.425 0.926 0.447 0.898 0.461 0.665 0.471 1.0 0.497 0.578 0.529 0.422 0.565 0.054 0.594 0.107 0.616 0.00 0.755 0.00 0.807 0.905 0.829 0.870 0.837 0.675 0.847 0.992 0.867 0.739 0.891 0.486 0.942 0.056 0.970 0.130 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.0 3730 .04 3900 .07 3770 .09 2800 .17 2470 .19 2050 .21 2320 .23 2100 .38 3730 .42 3900 .45 3770 .46 2760 .53 2470 .55 2050 .58 2320 .6 2100 .75 3730 .79 3900 .83 3770 .84 2720 .91 2470 .94 2050 .96 2320 1.0 2100) :duration dur :base .1 :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (tufted-titmouse 0 .3)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Savannah sparrow ;;; ;;; 8 separate calls make up a song (define-animal (savannah-sparrow beg amp) (define (savannah-1 beg amp) ;; peeps (let ((dur .05) (hi-pitch 9000) (lo-pitch 7460)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 2 0) :duration dur :scaler amp)) (frqf (make-env '(0 1 1 0) :duration dur :scaler (hz->radians (- hi-pitch lo-pitch)) :offset (hz->radians lo-pitch))) (gp (make-polywave 0.0 '(1 .98 2 .02))) (gen3 (make-oscil 80))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .8 (* .2 (abs (oscil gen3)))) (polywave gp (env frqf)))))))) (define (savannah-2 beg amp pitch) ;; buzz (let ((dur .008) (hi-pitch (+ pitch 400)) (lo-pitch pitch)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.094 0.228 0.148 0.832 0.248 1.000 0.364 0.695 0.522 0.586 0.634 0.284 0.801 0.558 0.891 0.102 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 1 1 0) :duration dur :scaler (hz->radians (- hi-pitch lo-pitch)) :offset (hz->radians lo-pitch))) (gen1 (make-oscil)) (rnd (make-rand-interp 300 .03))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (+ (env frqf) (rand-interp rnd))))))))) (define (savannah-3 beg amp) ;; ticks (let ((dur .004)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (rnd (make-rand 4000 .4)) (gen1 (make-oscil 8000)) (ampf (make-env '(0 0 1 1 2 .3 10 0) :duration dur :base 32 :scaler amp))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (rand rnd)))))))) (define (savannah-4 beg amp) (let ((dur .034)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (rnd (make-rand 12000 .1)) (gen1 (make-oscil 6400)) (frqf (make-env '(0 .5 1 0 2 1 4 1) :scaler (hz->radians 400) :duration dur)) (ampf (make-env '(0.000 0.000 0.045 0.018 0.067 0.196 0.096 0.004 0.166 0.032 0.196 0.207 0.209 0.116 0.239 0.575 0.249 0.639 0.280 0.063 0.297 0.032 0.312 0.070 0.339 0.021 0.372 0.049 0.378 0.544 0.391 0.088 0.437 0.211 0.441 0.611 0.455 0.218 0.480 0.140 0.498 0.253 0.506 0.593 0.516 0.228 0.532 0.098 0.551 0.200 0.569 0.544 0.593 0.253 0.630 0.540 0.660 0.133 0.684 0.540 0.722 0.158 0.748 0.604 0.760 0.779 0.787 0.260 0.824 1.000 0.847 0.249 0.878 0.874 0.917 0.204 0.976 0.056 1.000 0.000) :duration dur :scaler amp))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (+ (env frqf) (rand rnd))))))))) (define (savannah-5 beg amp) (let ((dur .071)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (rnd (make-rand 12000 .1)) (gen1 (make-oscil 8500)) (ampf (make-env '(0.000 0.000 0.067 0.060 0.084 0.432 0.098 0.414 0.111 1.000 0.123 0.267 0.148 0.028 0.160 0.877 0.181 0.151 0.189 0.007 0.305 0.007 0.316 0.347 0.331 0.225 0.341 1.000 0.353 0.382 0.360 0.137 0.374 0.039 0.388 0.053 0.398 0.919 0.404 0.688 0.415 0.196 0.438 0.000 0.530 0.000 0.542 0.502 0.561 0.151 0.573 0.958 0.586 0.218 0.599 0.035 0.616 0.067 0.623 0.811 0.642 0.144 0.661 0.000 0.767 0.000 0.785 0.225 0.799 0.923 0.822 0.000 0.853 0.000 0.861 0.674 0.880 0.053 0.906 0.000 1.000 0.000) :duration dur :scaler amp))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (rand rnd)))))))) (define (savannah-6 beg amp) (let ((dur .023)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (rnd (make-rand 3500 .15)) (gen1 (make-oscil 3600)) (ampf (make-env '(0.000 0.000 0.297 0.323 0.339 0.547 0.388 0.891 0.439 1.000 0.553 0.975 0.591 0.295 0.615 0.168 0.678 0.011 0.731 0.105 0.758 0.709 0.800 0.312 0.884 0.077 1.000 0.000) :duration dur :scaler amp))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (rand rnd)))))))) (define (savannah-7 beg amp) (let ((dur .053) (hi-pitch 8250) (lo-pitch 6900)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 2 1 3 0) :duration dur :scaler amp)) (frqf (make-env '(0 0 1 1) :duration dur :scaler (hz->radians (- hi-pitch lo-pitch)) :offset (hz->radians lo-pitch))) (gen1 (make-oscil)) (gen2 (make-oscil 220))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .25 (* .75 (abs (oscil gen2)))) (oscil gen1 (env frqf)))))))) (define (savannah-8 beg amp) (let ((dur .023)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-oscil 3800)) (gen2 (make-oscil 150)) (ampf (make-env '(0.000 0.000 0.138 0.098 0.199 0.218 0.258 0.018 0.367 0.404 0.422 0.361 0.462 0.011 0.549 0.782 0.639 0.519 0.665 0.000 0.678 0.379 0.707 1.000 0.801 0.551 0.835 0.165 0.850 0.337 1.000 0.000) :duration dur :scaler amp))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 0.0 (* 2.0 (oscil gen2))))))))) ;; -------- (savannah-1 beg (* amp .21)) (savannah-1 (+ beg .35) (* amp .45)) (savannah-1 (+ beg .63) (* amp .51)) (savannah-1 (+ beg .87) (* amp .64)) (savannah-1 (+ beg 1.13) amp) (savannah-1 (+ beg 1.3) amp) (savannah-4 (+ .97 beg) (* amp .21)) (do ((i 0 (+ i 1))) ((= i 6)) (savannah-3 (+ beg 1.02 (* i .014)) (* amp .12))) (savannah-5 (+ beg 1.19) (* amp .2)) (savannah-5 (+ beg 1.36) (* amp .2)) (savannah-6 (+ beg 1.46) (* amp .15)) (savannah-6 (+ beg 1.5) (* amp .15)) (let* ((repeats 20) (af-incr (/ .6 repeats))) (do ((i 0 (+ i 1)) (beg2 0.0 (+ beg2 .004)) (af af-incr (+ af af-incr))) ((= i repeats)) (savannah-2 (+ beg 1.58 beg2) (* amp af) 5250))) (let ((af .24)) (do ((i 0 (+ i 1))) ((= i 40)) (savannah-2 (+ beg 1.29 .36 (* i .0145)) (* amp af) 5600) (set! af ((if (< i 20) + -) af 0.004)))) (savannah-7 (+ beg 2.27) (* .4 amp)) (do ((dist 0.01) (i 0 (+ i 1)) (beg2 (+ beg 2.36) (+ beg2 dist)) (af .1 (* af .85))) ((= i 20)) (savannah-8 beg2 (* amp af)) (set! dist (+ dist .001)))) ;; (with-sound (:play #t) (savannah-sparrow 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Chipping sparrow (define-animal (chipping-sparrow beg amp) (let ((dur .055) (repeats (+ 20 (random 25)))) (let ((start (seconds->samples beg)) (total-dur (* repeats .068))) (let ((stop (+ start (seconds->samples total-dur))) (ampf (make-env '(0 0 1 .7 2 1 10 1 11 0) :duration total-dur :scaler amp)) (pulsef (make-env '(0.000 0.000 0.049 0.091 0.179 0.636 0.253 0.186 0.293 0.518 0.361 0.170 0.413 0.079 0.503 0.253 0.609 0.976 0.660 0.937 0.742 0.688 0.783 0.292 0.853 0.043 0.913 0.119 1.000 0.000) :duration dur)) (frqf (make-env '(0 7600 .1 7900 .18 8700 .2 9000 .23 8300 .32 5300 .4 4300 .5 4800 .6 5600 0.8 6400 1.0 5400) :duration dur :base 32 :scaler (hz->radians 1.0))) (gen1 #f) (pulse-samps (seconds->samples .068)) (pulse-out (seconds->samples dur)) ; pulsef and frqf dur (rnd (make-rand-interp 100 .02))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out))) (pulse-amp (env ampf))) (set! gen1 (make-polywave 0.0 (list 1 pulse-amp))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (polywave gen1 (+ (env frqf) (rand-interp rnd))))))) (mus-reset pulsef) (mus-reset frqf)))))) ;; (with-sound (:play #t) (chipping-sparrow 0 .3)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Least flycatcher (define-animal (least-flycatcher beg amp) (let ((call1-dur .032) (pause .065) (call2-dur .04) (start (seconds->samples beg))) (let ((stop1 (+ start (seconds->samples call1-dur))) (ampf1 (make-env '(0.000 0.000 0.223 0.158 0.386 0.379 0.617 1.0 0.679 0.929 0.810 0.458 1.000 0.000) :duration call1-dur :scaler amp)) (gen1 (make-oscil)) (gen11 (make-oscil)) (frqf1 (make-env '(0 3000 .4 6250 .5 6400 1.0 6000) :duration call1-dur :scaler (hz->radians 1.0))) (start2 (+ start (seconds->samples pause)))) (let ((stop2 (+ start2 (seconds->samples call2-dur))) (ampf2 (make-env '(0.000 0.000 0.088 0.124 0.157 0.258 0.198 0.202 0.237 0.264 0.273 0.823 0.286 0.419 0.328 0.814 0.343 1.000 0.360 0.329 0.409 0.413 0.435 0.935 0.448 0.295 0.481 0.183 0.539 0.901 0.563 0.444 0.619 0.373 0.644 0.944 0.662 0.311 0.724 0.053 0.756 0.186 0.782 0.432 0.823 0.512 0.865 0.174 0.886 0.230 1.000 0.000) :duration call2-dur :scaler (* .5 amp))) (gen2 (make-oscil 4600)) (gen21 (make-oscil 5600)) (gen22 (make-rand-interp 2000 (hz->radians 1000)))) (do ((i start (+ i 1))) ((= i stop1)) (let ((frq (env frqf1))) (outa i (* (env ampf1) (+ (* .9 (oscil gen1 frq)) (* .1 (oscil gen11 (* 2.0 frq)))))))) (do ((i start2 (+ i 1))) ((= i stop2)) (let ((noise (rand-interp gen22))) (outa i (* (env ampf2) (+ (* .7 (oscil gen2 noise)) (* .3 (oscil gen21 noise))))))))))) ;; (with-sound (:play #t) (least-flycatcher 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Acadian flycatcher (define-animal (acadian-flycatcher beg amp) (let ((dur 0.3)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.102 0.301 0.221 0.705 0.287 0.332 0.357 0.801 0.406 0.385 0.45 0 0.55 0 0.567 0.298 0.623 1.0 0.706 0.727 0.729 0.292 0.860 0.239 0.885 0.484 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .95 2 .05))) (frqf (make-env '(0 2800 .075 3600 .11 4200 .22 4900 .28 3200 .35 5400 .45 4200 .47 4000 .55 4900 .62 5000 .7 5500 .75 5200 .8 5500 .87 5400 1.0 2800) :duration dur :scaler (hz->radians 1.0) :base 32))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (acadian-flycatcher 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Swainson's thrush ;;; ;;; are there really multiphonics in this birdsong? ;;; also, is this a song that uses both parts of the syrinx? -- I think the doubled stuff is reverb (define-animal (swainsons-thrush beg amp) (let ((dur 2.0)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.058 0.146 0.075 0.127 0.085 0.000 0.113 0.000 0.143 0.481 0.150 0.516 0.227 0.735 0.238 0.000 0.260 0.000 0.289 0.474 0.311 0.423 0.316 0.000 0.337 0.000 0.350 0.559 0.355 0.805 0.367 0.895 0.413 0.990 0.427 0.598 0.446 0.373 0.452 0.066 0.460 0.103 0.470 0.651 0.492 0.828 0.510 0.502 0.531 0.457 0.541 0.000 0.568 0.000 0.569 0.424 0.587 0.548 0.603 0.553 0.613 0.061 0.645 0.633 0.686 0.760 0.703 0.000 0.726 0.000 0.727 0.236 0.735 0.037 0.793 0.301 0.815 0.125 0.835 0.130 0.847 0.000 0.868 0.000 0.931 0.180 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 0.96 2 0.01 3 0.02 4 0.001 5 .005))) (gen2 (make-oscil)) ; eschew aliasing (intrpf (make-env '(0 1 .7 1 .75 0 1 0) :duration dur)) (intrpf-1 (make-env '(0 1 .7 1 .75 0 1 0) :duration dur :offset 1.0 :scaler -1.0)) (frqf (make-env '(0.000 0.000 0.01 0.175 0.015 0.264 0.02 0.172 0.025 0.263 0.03 0.171 0.035 0.260 0.04 0.172 0.045 0.263 0.05 0.172 0.055 0.265 0.06 0.171 0.065 0.263 0.07 0.170 0.077 0.267 0.08 0.174 0.085 0.266 0.09 0.170 0.095 0.265 0.1 0.171 0.105 0.266 0.107 0.186 0.128 0.172 0.141 0.240 0.155 0.238 0.164 0.280 0.170 0.180 0.178 0.330 0.181 0.177 0.190 0.322 0.196 0.185 0.201 0.326 0.207 0.288 0.242 0.283 0.272 0.238 0.276 0.238 0.288 0.238 0.318 0.238 0.342 0.240 0.344 0.270 0.355 0.325 0.365 0.376 0.370 0.325 0.378 0.376 0.383 0.325 0.390 0.376 0.395 0.309 0.401 0.426 0.410 0.502 0.424 0.305 0.433 0.280 0.436 0.238 0.447 0.241 0.453 0.199 0.466 0.378 0.471 0.431 0.482 0.391 0.494 0.384 0.504 0.350 0.516 0.334 0.532 0.334 0.558 0.330 0.564 0.412 0.569 0.477 0.578 0.511 0.582 0.568 0.590 0.429 0.596 0.553 0.604 0.416 0.620 0.735 0.629 0.653 0.641 0.617 0.647 0.572 0.656 0.542 0.662 0.510 0.681 0.436 0.689 0.379 0.694 0.293 0.719 0.395 0.723 0.510 0.734 0.555 0.743 0.807 0.765 0.786 0.783 0.637 0.797 0.875 0.806 0.902 0.812 0.957 0.832 0.981 0.85 .9 0.868 0.416 0.895 0.814 0.900 0.788 0.903 0.735 0.917 0.635 0.922 0.686 0.931 0.855 0.949 0.952 0.965 0.939 1.000 .9) :duration dur :scaler (hz->radians 8200)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env intrpf) (polywave gen1 frq)) (* (env intrpf-1) (oscil gen2 frq)))))))))) ;; (with-sound (:play #t) (swainsons-thrush 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Carolina wren (define-animal (carolina-wren beg amp) (let ((dur 1.84) (pulse-dur 0.25)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (pulsef (make-env '(0.000 0.000 0.027 0.031 0.049 0.185 0.065 0.749 0.121 0.508 0.137 0.339 0.146 0.270 0.195 0.571 0.247 0.806 0.270 0.994 0.311 0.837 0.325 0.129 0.335 0.373 0.354 0.000 0.512 0.000 0.525 0.677 0.548 0.831 0.560 0.737 0.594 0.082 0.602 0.000 0.618 0.223 0.635 0.313 0.657 0.712 0.698 0.649 0.716 0.517 0.741 0.006 0.775 0.094 0.791 0.467 0.808 0.373 0.838 0.480 0.885 0.414 0.917 0.160 0.930 0.031 1.000 0.000) :duration pulse-dur)) (frqf (make-env '(0.000 0.3 0.06 0.209 0.079 0.204 0.084 0.158 0.171 0.160 0.260 0.175 0.310 0.185 0.495 0.153 0.582 0.155 0.621 0.145 0.653 0.125 0.738 0.121 0.794 0.125 0.805 0.109 0.835 0.104 1.000 0.102) :duration pulse-dur :scaler (hz->radians 22050))) (ampf (make-env '(0 0 1 .5 16 1 18 .8 20 0) :duration dur :scaler amp)) (gen1 #f) (pulse-samps (seconds->samples (/ 1.6 6.0)))) ; .26 (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-samps))) (pulse-amp (env ampf))) (set! gen1 (make-polywave 0.0 (list 1 (* pulse-amp .95) 2 (* pulse-amp .015) 3 (* pulse-amp .025) 3 (* pulse-amp .01)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (polywave gen1 (env frqf)))))) (mus-reset pulsef) (mus-reset frqf))))) ;; (with-sound (:play #t) (carolina-wren 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Bachman's sparrow (define-animal (bachmans-sparrow beg amp) ;; two pieces -- initial steady tone, then 10 repetitions of 2nd call (let ((call1-dur .576) (call2-dur .172) (start (seconds->samples beg))) (let ((stop1 (+ start (seconds->samples call1-dur))) (ampf1 (make-env '(0.000 0.000 0.684 0.978 0.863 1.0 0.962 0.773 1.000 0.000) :duration call1-dur :scaler (* .5 amp))) (gen1 (make-polywave 0.0 '(1 .98 3 .02))) ; first section uses ampf1 for amp scaling (.5) (frqf1 (make-env '(0 4970 1 4850) :duration call1-dur :scaler (hz->radians 1.0))) (pulse-samps (seconds->samples .184)) (pulse-out (seconds->samples call2-dur)) (stop2 (+ start (seconds->samples 2.4))) (ampf2 (make-env '(0.000 0.000 0.070 0.025 0.239 0.430 0.331 0.404 0.381 0.000 0.422 0.007 0.495 0.560 0.541 0.596 0.552 0.466 0.578 0.469 0.592 1.000 0.616 0.798 0.642 0.751 0.75 0 0.786 0.000 0.834 0.267 0.859 0.227 0.902 0.043 1.000 0.000) :duration call2-dur :scaler amp)) ;; these two envs may not be aligned correctly -- maybe backup the frq slightly? (frqf2 (make-env '(0.000 0.252 0.129 0.266 0.210 0.291 0.282 0.293 0.336 0.293 0.442 0.404 0.473 0.416 0.515 0.416 0.556 0.447 0.576 0.6 0.598 0.443 0.607 0.386 0.638 0.342 0.688 0.332 0.784 0.338 0.796 0.340 0.886 0.57 0.948 0.697 1 .7) :duration call2-dur :scaler (hz->radians 10000))) (ampf (make-env '(0 1 1.78 1 1.79 0 1.82 0) :duration 1.82))) (do ((i start (+ i 1))) ((= i stop1)) (outa i (* (env ampf1) (polywave gen1 (env frqf1))))) (do ((i stop1 (+ i pulse-samps))) ((>= i stop2)) (set! (mus-location ampf) (- i stop1)) (let ((reset-stop (min stop2 (+ i pulse-out))) (pulse-amp (env ampf))) (set! gen1 (make-polywave 0.0 (list 1 (* pulse-amp .98) 3 (* pulse-amp .02)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env ampf2) (polywave gen1 (env frqf2)))))) (mus-reset ampf2) (mus-reset frqf2))))) ;; (with-sound (:play #t) (bachmans-sparrow 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Grasshopper sparrow (define-animal (grasshopper-sparrow beg amp) ;; 2 portions -- simple tones, then a buzz (calif case has much tighter (faster) buzz) (let ((start (seconds->samples beg)) (begs (vector 0.0 .24 .36 .44 .55)) (durs (vector 0.019 0.020 0.011 0.021 1.09)) (amps (vector .48 .54 .07 .22 1.0)) (frqs (vector 8500 7240 9730 4920 8000)) (starts (make-vector 4 0)) (stops (make-vector 4 0)) (ampfs (make-vector 4 #f)) (gen1 (make-oscil))) (let ((buzz-start (+ start (seconds->samples (begs 4))))) (let ((buzz-end (+ buzz-start (seconds->samples (durs 4)))) (buzz-ampf (make-env '(0.000 0.000 0.095 0.953 0.114 0.182 0.158 0.822 0.236 0.996 0.332 1.000 0.848 0.589 0.957 0.372 1.000 0.000) :duration (durs 4) :scaler amp)) (buzzer (make-nrxysin 40 :n 5 :r .5)) ; sawtooth not great here due to broad spectrum (buzzer-index (hz->radians 2000)) (buzzer-amp (make-triangle-wave 40 0.8))) (do ((i 0 (+ i 1))) ((= i 4)) (set! (ampfs i) (make-env '(0 0 1 .8 1.5 1 2 .8 3 0) :duration (durs i) :scaler (* amp (amps i)))) (set! (starts i) (+ start (seconds->samples (begs i)))) (set! (stops i) (+ (starts i) (seconds->samples (durs i))))) ;; first the 4 tones (do ((tone 0 (+ 1 tone))) ((= tone 4)) (set! (mus-frequency gen1) (frqs tone)) (let ((ampf (ampfs tone)) (start (starts tone)) (end (stops tone))) (do ((i start (+ i 1))) ((= i end)) (outa i (* (env ampf) (oscil gen1)))))) ;; then the buzz (set! (mus-frequency gen1) 8000.0) (do ((i buzz-start (+ i 1))) ((= i buzz-end)) (outa i (* (env buzz-ampf) (+ 0.2 (abs (triangle-wave buzzer-amp))) (oscil gen1 (* buzzer-index (nrxysin buzzer)))))))))) ;; (with-sound (:play #t) (grasshopper-sparrow 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; American robin (define-animal (american-robin beg amp) (let ((start (seconds->samples beg)) (ampfs (make-vector 4 #f)) (frqfs (make-vector 4 #f)) (starts (make-vector 4 0)) (stops (make-vector 4 0)) (begs (vector 0.0 0.6 1.3 1.8)) (durs (vector 0.34 0.25 0.16 0.39)) (amps (vector 0.6 1.0 0.7 0.95)) (gen1 (make-polywave 0.0 '(1 .95 2 .03 3 .01 4 .01))) (amp-envs (vector '(0.000 0.000 0.085 0.847 0.117 0.555 0.125 0.731 0.137 0.505 0.158 0.635 0.178 0.595 0.200 0.449 0.224 0.578 0.241 0.395 0.274 0.515 0.372 0.415 0.409 0.243 0.434 0.266 0.445 0.000 0.463 0.166 0.489 0.080 0.527 0.272 0.535 0.150 0.559 0.777 0.594 0.967 0.632 0.811 0.650 0.897 0.692 0.718 0.710 0.525 0.726 0.588 0.743 0.000 0.746 0.661 0.764 0.748 0.782 0.711 0.799 0.528 0.824 0.678 0.834 0.615 0.864 0.721 0.883 0.548 0.904 0.625 0.940 0.458 0.957 0.505 1.000 0.000) '(0.000 0.000 0.117 0.734 0.200 0.934 0.220 0.814 0.233 0.900 0.254 0.864 0.268 0.538 0.280 0.718 0.302 0.063 0.328 0.439 0.340 0.445 0.356 0.070 0.401 0.123 0.437 0.000 0.529 0.000 0.543 0.372 0.566 0.512 0.579 0.369 0.630 0.449 0.654 0.402 0.704 0.555 0.794 0.515 0.814 0.442 0.822 0.213 0.838 0.654 0.947 0.502 1.000 0.000) '(0.000 0.000 0.013 0.282 0.085 0.568 0.140 0.522 0.174 0.678 0.217 0.960 0.232 1.000 0.258 0.718 0.277 0.877 0.310 0.970 0.361 0.927 0.429 0.864 0.487 0.641 0.513 0.382 0.565 0.425 0.586 0.166 0.611 0.040 0.647 0.319 0.692 0.784 0.806 0.947 0.846 0.671 0.875 0.462 0.905 0.605 0.959 0.508 1.000 0.000) '(0.000 0.000 0.059 0.282 0.107 0.711 0.154 0.711 0.176 0.588 0.221 0.525 0.289 0.475 0.386 0.445 0.415 0.199 0.438 0.286 0.451 0.060 0.455 0.269 0.479 0.090 0.493 0.196 0.577 0.924 0.674 0.924 0.699 0.608 0.710 0.831 0.762 0.571 0.778 0.645 0.842 0.425 0.899 0.372 0.933 0.415 1.000 0.000))) (frq-envs (vector '(0.000 0.491 0.026 0.502 0.083 0.509 0.098 0.456 0.132 0.428 0.165 0.428 0.190 0.442 0.350 0.436 0.367 0.419 0.440 0.415 0.450 0.606 0.485 0.608 0.502 0.634 0.583 0.636 0.607 0.677 0.658 0.684 0.663 0.562 0.687 0.564 0.703 0.546 0.725 0.546 0.773 0.564 0.793 0.560 0.808 0.555 1.000 0.555) '(0.000 0.634 0.074 0.647 0.094 0.666 0.113 0.671 0.130 0.663 0.147 0.625 0.172 0.620 0.189 0.601 0.219 0.601 0.229 0.627 0.251 0.622 0.265 0.601 0.329 0.597 0.481 0.601 0.508 0.602 0.514 0.504 0.556 0.502 0.625 0.473 0.722 0.477 0.729 0.583 0.825 0.572 0.852 0.553 0.892 0.555 1.000 0.578) '(0.000 0.509 0.075 0.518 0.124 0.560 0.150 0.640 0.192 0.663 0.223 0.654 0.271 0.551 0.313 0.539 0.354 0.551 0.389 0.583 0.433 0.601 0.542 0.606 0.595 0.564 0.669 0.558 0.736 0.557 0.749 0.610 0.788 0.655 0.821 0.678 0.857 0.680 0.874 0.611 0.907 0.595 1.000 0.580) '(0.000 0.481 0.032 0.491 0.084 0.530 0.098 0.595 0.113 0.592 0.118 0.458 0.186 0.436 0.229 0.445 0.313 0.442 0.330 0.452 0.346 0.440 0.386 0.442 0.464 0.428 0.504 0.560 0.529 0.641 0.573 0.636 0.605 0.647 0.657 0.661 0.690 0.680 0.705 0.558 0.758 0.549 0.787 0.555 0.821 0.544 0.849 0.532 0.913 0.535 0.939 0.548 1.000 0.537)))) (do ((i 0 (+ i 1))) ((= i 4)) (set! (ampfs i) (make-env (amp-envs i) :duration (durs i) :scaler (* amp (amps i)))) (set! (frqfs i) (make-env (frq-envs i) :duration (durs i) :scaler (hz->radians 5000))) (set! (starts i) (+ start (seconds->samples (begs i)))) (set! (stops i) (+ (starts i) (seconds->samples (durs i))))) (do ((tone 0 (+ 1 tone))) ((= tone 4)) (let ((ampf (ampfs tone)) (frqf (frqfs tone)) (start (starts tone)) (end (stops tone))) (do ((i start (+ i 1))) ((= i end)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))))) ;; (with-sound (:play #t) (american-robin 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Common loon (define-animal (common-loon-1 beg amp) (let ((dur 2.5)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.049 0.134 0.122 0.131 0.174 0.070 0.178 0.244 0.522 0.954 0.649 0.922 0.736 1.0 0.860 0.962 0.957 0.839 .98 .5 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .85 2 .1 3 .02 4 .05 5 .01 7 .003 9 .001))) (frqf (make-env '(0.000 0.330 0.030 0.388 0.087 0.395 0.155 0.509 0.158 0.609 0.204 0.633 0.346 0.685 0.35 0.852 0.469 0.882 0.585 0.886 0.780 0.888 0.896 0.878 0.961 0.869 .98 .8 1.000 0.76) :duration dur :scaler (hz->radians 1000.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (common-loon-1 0 .25)) (define-animal (common-loon-2 beg amp) (let ((dur 0.63)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.021 0.270 0.045 0.253 0.088 0.103 0.141 0.416 0.165 0.251 0.179 0.107 0.192 0.403 0.211 0.399 0.222 0.208 0.242 0.206 0.286 0.895 0.303 0.882 0.327 0.672 0.350 0.324 0.362 0.150 0.378 0.236 0.389 0.268 0.423 0.991 0.447 0.923 0.459 0.785 0.488 0.242 0.506 0.200 0.531 0.245 0.540 0.371 0.556 0.785 0.566 0.792 0.573 0.981 0.579 0.873 0.585 0.931 0.600 0.811 0.622 0.354 0.636 0.191 0.652 0.120 0.663 0.148 0.674 0.099 0.687 0.163 0.707 0.489 0.720 0.631 0.731 0.624 0.765 0.339 0.778 0.170 0.810 0.056 0.842 0.116 0.863 0.227 0.899 0.240 0.907 0.189 0.965 0.122 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .85 2 .02 3 .008 4 .01 5 .006))) (frqf (make-env '(0.000 0.267 0.029 0.354 0.131 0.349 0.188 0.414 0.202 0.534 0.232 0.453 0.250 0.427 0.267 0.455 0.279 0.505 0.296 0.540 0.312 0.549 0.332 0.532 0.365 0.442 0.380 0.427 0.395 0.443 0.417 0.512 0.430 0.544 0.446 0.558 0.465 0.542 0.503 0.436 0.521 0.421 0.535 0.440 0.558 0.510 0.570 0.534 0.588 0.544 0.608 0.525 0.625 0.479 0.646 0.425 0.669 0.410 0.690 0.432 0.715 0.514 0.733 0.532 0.753 0.514 0.801 0.423 0.817 0.421 0.830 0.304 0.866 0.343 0.891 0.354 0.913 0.338 0.950 0.312 1.000 0.304) :duration dur :scaler (hz->radians 2000.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (common-loon-2 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Hermit thrush (define-animal (hermit-thrush beg amp) (let ((start (seconds->samples beg)) (ampfs (make-vector 3 #f)) (frqf1s (make-vector 3 #f)) (frqf2s (make-vector 3 #f)) (starts (make-vector 3 0)) (stops (make-vector 3 0)) (begs (vector 0.0 0.42 0.84)) (durs (vector 0.34 0.35 0.56)) (amps (vector 0.6 0.8 1.0)) (gen1 (make-polywave 0.0 (list 1 (* .55 .95) 2 (* .55 .01) 3 (* .55 .03)))) (gen2 (make-polywave 0.0 (list 1 (* .45 .95) 2 (* .45 .01) 3 (* .45 .03)))) (amp-envs (vector '(0.000 0.000 0.117 0.054 0.301 0.269 0.518 0.605 0.608 0.620 0.703 0.783 0.779 0.900 0.804 0.857 0.863 0.987 0.912 0.959 0.943 1.000 0.967 0.900 1.000 0.000) '(0.000 0.000 0.028 0.109 0.037 0.059 0.056 0.223 0.066 0.000 0.094 0.252 0.104 0.488 0.136 0.605 0.151 0.770 0.154 0.000 0.162 0.857 0.175 0.727 0.187 0.000 0.198 0.505 0.217 0.280 0.229 0.427 0.240 0.291 0.249 0.479 0.266 0.369 0.277 0.518 0.289 0.380 0.297 0.503 0.310 0.380 0.321 0.495 0.334 0.000 0.343 0.584 0.376 0.545 0.398 0.649 0.412 0.605 0.423 0.642 0.445 0.607 0.456 0.651 0.493 0.638 0.516 0.586 0.532 0.000 0.541 0.386 0.570 0.579 0.577 0.210 0.603 0.885 0.627 0.704 0.645 0.000 0.647 0.482 0.659 0.584 0.673 0.148 0.683 0.573 0.698 0.432 0.708 0.649 0.722 0.529 0.735 0.701 0.754 0.586 0.764 0.709 0.777 0.575 0.791 0.716 0.802 0.568 0.819 0.681 0.837 0.601 0.872 0.783 0.933 0.967 0.978 0.902 1.000 0.000) '(0.000 0.000 0.006 0.202 0.014 0.082 0.023 0.349 0.057 0.605 0.064 0.581 0.071 0.367 0.105 0.184 0.107 0.000 0.152 0.421 0.171 0.538 0.183 0.443 0.210 0.000 0.230 0.150 0.250 0.707 0.264 0.716 0.276 0.579 0.280 0.499 0.306 0.712 0.328 0.711 0.340 0.852 0.356 0.850 0.367 0.957 0.391 0.904 0.412 0.616 0.420 0.000 0.446 0.516 0.452 0.482 0.456 0.391 0.457 0.256 0.487 0.000 0.511 0.247 0.554 0.213 0.572 0.106 0.606 0.000 0.645 0.340 0.668 0.167 0.706 0.000 0.725 0.273 0.736 0.267 0.753 0.000 0.779 0.364 0.799 0.347 0.823 0.256 0.847 0.132 0.853 0.000 0.877 0.160 0.887 0.078 0.924 0.000 0.948 0.095 1.000 0.000))) (frq1-envs (vector '(0.000 0.352 1.000 0.345) '(0.000 0.485 0.037 0.482 0.058 0.511 0.068 0.482 0.085 0.523 0.102 0.489 0.112 0.562 0.200 0.549 0.215 0.490 0.233 0.510 0.243 0.487 0.256 0.508 0.265 0.484 0.281 0.508 0.293 0.482 0.302 0.499 0.318 0.489 0.528 0.492 0.544 0.516 0.557 0.487 0.572 0.492 0.576 0.518 0.578 0.549 0.675 0.542 0.680 0.496 0.691 0.485 0.704 0.508 0.712 0.487 0.728 0.506 0.743 0.480 0.755 0.503 0.770 0.482 0.782 0.497 0.794 0.478 0.805 0.492 0.827 0.490 0.851 0.397 1.000 0.392) '(0.000 0.499 0.018 0.497 0.029 0.563 0.061 0.563 0.074 0.553 0.086 0.487 0.098 0.513 0.105 0.492 0.116 0.510 0.127 0.612 0.137 0.641 0.190 0.641 0.202 0.510 0.213 0.487 0.224 0.548 0.235 0.510 0.244 0.567 0.268 0.553 0.277 0.501 0.286 0.489 0.314 0.504 0.323 0.449 0.423 0.442 0.432 0.553 0.446 0.567 0.457 0.503 0.467 0.487 0.481 0.497 0.506 0.563 0.526 0.553 0.533 0.510 0.544 0.496 0.555 0.510 0.582 0.556 0.583 0.624 0.591 0.645 0.649 0.643 0.662 0.515 0.674 0.489 0.708 0.551 0.722 0.553 0.740 0.490 0.761 0.487 0.793 0.506 0.820 0.556 0.859 0.560 0.889 0.490 0.926 0.494 0.928 0.556 0.946 0.555 0.972 0.489 1.000 0.487))) (frq2-envs (vector '(0.000 0.352 1.000 0.345) '(0.000 0.000 0.001 0.352 0.025 0.440 0.034 0.388 0.051 0.438 0.064 0.380 0.088 0.425 0.098 0.383 0.120 0.350 0.146 0.357 0.193 0.336 0.207 0.409 0.219 0.381 0.231 0.418 0.243 0.388 0.259 0.421 0.268 0.388 0.279 0.426 0.293 0.388 0.307 0.426 0.316 0.397 0.336 0.428 0.345 0.402 0.364 0.430 0.371 0.397 0.372 0.492 0.534 0.494 0.549 0.402 0.565 0.386 0.585 0.347 0.614 0.355 0.663 0.336 0.672 0.354 0.678 0.395 0.697 0.388 0.707 0.406 0.735 0.407 0.758 0.406 0.804 0.397 0.830 0.400 0.846 0.397 1.000 0.395) '(0.000 0.409 0.018 0.392 0.034 0.364 0.069 0.343 0.080 0.400 0.092 0.357 0.100 0.399 0.114 0.354 0.136 0.347 0.157 0.315 0.195 0.399 0.206 0.376 0.218 0.399 0.231 0.348 0.257 0.345 0.270 0.393 0.286 0.400 0.293 0.440 0.312 0.447 0.410 0.445 0.424 0.350 0.434 0.340 0.449 0.393 0.462 0.393 0.476 0.406 0.489 0.366 0.504 0.348 0.516 0.360 0.530 0.404 0.538 0.380 0.551 0.397 0.569 0.348 0.589 0.350 0.615 0.324 0.643 0.357 0.653 0.400 0.678 0.400 0.685 0.376 0.694 0.352 0.716 0.350 0.730 0.404 0.748 0.411 0.757 0.447 0.830 0.447 0.851 0.350 0.873 0.400 0.901 0.406 0.917 0.360 0.946 0.357 1.000 0.447)))) (do ((i 0 (+ i 1))) ((= i 3)) (set! (ampfs i) (make-env (amp-envs i) :duration (durs i) :scaler (* amp (amps i)))) (set! (frqf1s i) (make-env (frq1-envs i) :duration (durs i) :scaler (hz->radians 10000))) (set! (frqf2s i) (make-env (frq2-envs i) :duration (durs i) :scaler (hz->radians 10000))) (set! (starts i) (+ start (seconds->samples (begs i)))) (set! (stops i) (+ (starts i) (seconds->samples (durs i))))) (do ((tone 0 (+ 1 tone))) ((= tone 3)) (let ((ampf (ampfs tone)) (frqf1 (frqf1s tone)) (frqf2 (frqf2s tone)) (start (starts tone)) (end (stops tone))) (do ((i start (+ i 1))) ((= i end)) (outa i (* (env ampf) (+ (polywave gen1 (env frqf1)) (polywave gen2 (env frqf2)))))))))) ;; (with-sound (:play #t) (hermit-thrush 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Chuck-will's-widow (define-animal (chuck-wills-widow beg amp) (let ((dur 1.05)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.017 0.656 0.026 0.136 0.048 0.000 0.289 0.000 0.328 0.154 0.353 0.405 0.361 0.961 0.369 0.667 0.381 0.918 0.394 0.269 0.402 0.204 0.425 0.333 0.440 0.570 0.466 0.444 0.515 0.470 0.592 0.294 0.65 0.000 .68 0.0 .7 .1 .74 0 0.762 0.000 0.791 0.305 0.818 0.337 0.832 1.000 0.844 0.699 0.857 0.903 0.867 0.405 0.883 0.398 0.895 0.853 0.907 0.853 0.921 0.297 0.953 0.294 0.981 0.140 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .97 3 .02 4 .01))) (rnd (make-rand-interp 100 .25)) (frqf (make-env '(0.000 0.702 0.014 0.637 0.023 0.478 0.048 0.343 0.298 0.385 0.335 0.389 0.353 0.459 0.362 0.546 0.371 0.687 0.376 0.715 0.383 0.687 0.388 0.635 0.391 0.565 0.398 0.474 0.417 0.370 0.455 0.561 0.490 0.389 0.504 0.465 0.523 0.483 0.541 0.461 0.552 0.413 0.605 0.409 0.610 0.370 0.781 0.380 0.804 0.417 0.823 0.457 0.837 0.517 0.851 0.693 0.858 0.737 0.867 0.702 0.871 0.572 0.878 0.496 0.889 0.430 0.904 0.535 0.914 0.630 0.924 0.554 0.933 0.457 0.951 0.380 1.000 0.354) :duration dur :scaler (hz->radians 3000.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .75 (abs (rand-interp rnd))) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (chuck-wills-widow 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; California towhee (define-animal (california-towhee beg amp) (let ((dur 1.17) ;; peep pitch changes (amps (vector .5 .8 .85 .9 .95 1.0)) (begs (vector 0.0 0.39 0.67 0.86 0.96 1.09)) (frqs (vector 4750 4950 4880 4920 5210 5140)) (starts (make-vector 7 0)) (peep-dur 0.055) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.141 0.119 0.220 0.652 0.329 0.968 0.495 0.830 0.603 0.399 0.715 0.178 1.000 0.000) :duration peep-dur :scaler amp)) (gen1 #f) (frqf (make-env '(0 .5 .1 3 .2 1 .4 0 1 .2) :duration peep-dur :scaler (hz->radians 800))) (peep-samps (seconds->samples peep-dur)) (peep-amp 1.0) (peep-ctr 0)) (do ((i 0 (+ i 1))) ((= i 6)) (set! (starts i) (+ start (seconds->samples (begs i))))) (set! (starts 6) (+ 1 stop)) (do ((i start start)) ((>= i stop)) (set! peep-amp (amps peep-ctr)) (set! gen1 (make-polywave (frqs peep-ctr) :partials (list 1 (* peep-amp .97) 2 (* peep-amp .02) 3 (* peep-amp .01)))) (set! peep-ctr (+ peep-ctr 1)) (let ((reset-stop (min stop (+ i peep-samps)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env ampf) (polywave gen1 (env frqf)))))) (set! start (starts peep-ctr)) (mus-reset ampf) (mus-reset frqf))))) ;; (with-sound (:play #t) (california-towhee 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Black-chinned sparrow (define-animal (black-chinned-sparrow beg amp gliss-up) (let ((initial-dur .36) (initial-pitch 6800) (initial-amp .05) (buzz-dur 2.62) (buzz-frq0 (/ 1.0 (* 2 .34))) (buzz-frq1 (/ 1.0 .02)) (buzz-frqmid (/ 1.0 .15)) (buzz-size 128) (buzz-low 3000) (buzz-high 8500) (buzz-mid 4000) (start (seconds->samples beg))) (let (;; initial stable pitch, then the gliss->buzz with frq going either up or down (initial-stop (+ start (seconds->samples initial-dur))) (initial-ampf (make-env '(0 0 1 1 10 1 11 0) :duration initial-dur :scaler (* amp initial-amp))) (initial-gen (make-oscil initial-pitch)) (buzz-frq-table (let ((v (make-float-vector buzz-size)) (bfrqf (make-env (vector 0 (if gliss-up (values buzz-low .5 buzz-mid 1 buzz-high) (values buzz-high .5 buzz-mid 1 buzz-low))) :length buzz-size :scaler (hz->radians 1.0)))) (do ((i 0 (+ i 1))) ((= i buzz-size)) (set! (v i) (env bfrqf))) v)) (buzz-amp-table (let ((v (make-float-vector buzz-size)) (bampf (make-env (if gliss-up '(0 0 1 1 2.5 .7 3 0 3.5 0) '(0 0 .5 1 2 1 3 0 3.5 0)) :length buzz-size))) (do ((i 0 (+ i 1))) ((= i buzz-size)) (set! (v i) (env bampf))) v))) (let ((buzz-stop (+ initial-stop (seconds->samples buzz-dur))) (buzz-amp (make-env '(0.000 0.000 0.035 0.190 0.082 0.336 0.168 0.625 0.348 0.743 0.467 0.763 0.530 0.723 0.628 0.818 0.668 1.000 0.728 0.913 0.777 0.506 0.818 0.174 1.000 0.000) :duration buzz-dur :scaler amp)) (buzz-frq (make-env (list 0 buzz-frq0 .5 buzz-frqmid 1 buzz-frq1) :duration buzz-dur :scaler (hz->radians 1.0))) (buzz-frqf (make-table-lookup buzz-frq0 :wave buzz-frq-table)) (buzz-ampf (make-table-lookup buzz-frq0 :wave buzz-amp-table)) (buzz-gen (make-polywave 0.0 '(1 .98 2 .005 3 .01)))) (do ((i start (+ i 1))) ((= i initial-stop)) (outa i (* (env initial-ampf) (oscil initial-gen)) )) (do ((i initial-stop (+ i 1))) ((= i buzz-stop)) (let ((frq (env buzz-frq))) (outa i (* (env buzz-amp) (table-lookup buzz-ampf frq) (polywave buzz-gen (table-lookup buzz-frqf frq)))))))))) ;; (with-sound (:play #t) (black-chinned-sparrow 0 .25 #t)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Mourning dove (define-animal (mourning-dove beg amp) (let ((dur 4.1)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (rnd (make-rand-interp 2000 (hz->radians 200.0))) (rndf (make-env '(0 1 2 .3 5 .3) :duration dur :scaler .1)) (gen2 (make-oscil 620)) (gen1 (make-polywave 0.0 (list 1 (* .95 .95) 2 (* .95 .05) 3 (* .95 .005)))) (ampf (make-env '(0.000 0.000 0.012 0.256 0.032 0.247 0.048 0.188 0.197 0.156 0.224 0.988 0.238 0.844 0.256 0.881 0.309 0.000 0.390 0.000 0.414 0.881 0.441 0.819 0.494 0.394 0.564 0.175 0.579 0.000 0.647 0.000 0.678 0.725 0.703 0.659 0.786 0.000 0.856 0.000 0.879 0.631 0.892 0.675 0.920 0.494 0.986 0.162 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.395 0.019 0.449 0.065 0.439 0.159 0.439 0.198 0.427 0.217 0.493 0.229 0.621 0.236 0.658 0.270 0.642 0.298 0.555 0.309 0.495 0.414 0.487 0.432 0.499 0.477 0.497 0.537 0.484 0.577 0.468 0.588 0.427 0.674 0.480 0.698 0.493 0.729 0.487 0.771 0.472 0.877 0.468 0.903 0.493 0.960 0.478 1.000 0.462) :duration dur :scaler (hz->radians 1000.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ (polywave gen1 (env frqf)) (* (env rndf) (oscil gen2 (rand-interp rnd)))))))))) ;; (with-sound (:play #t) (mourning-dove 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Bobwhite (define-animal (bobwhite beg amp) (let ((call1-dur .32) (call1-amp .07) (call2-beg .80) (call2-dur .20) (call2-amp .35) (call3-beg 1.43) (call3-dur .22) (call3-amp 1.0) (call1-start (seconds->samples beg))) (let ((call1-gen (make-oscil 1450)) (call1-ampf (make-env '(0 0 1 1 8 1 9 0) :duration call1-dur :scaler (* amp call1-amp))) (call1-frqf (make-env '(0 1 1 0) :duration call1-dur :scaler (hz->radians 80))) (call1-stop (+ call1-start (seconds->samples call1-dur))) (call2-gen (make-polywave 1320 '(1 .95 2 .04 3 .01 4 .02 5 .01))) (call2-ampf (make-env '(0 0 1 1 4 1 5 0) :duration call2-dur :scaler (* amp call2-amp))) (call2-frqf (make-env '(0 0 1 1 4 1 5 .5) :duration call2-dur :scaler (hz->radians 430))) (call2-start (+ call1-start (seconds->samples call2-beg)))) (let ((call2-stop (+ call2-start (seconds->samples call2-dur))) (call3-gen (make-polywave 0.0 '(1 .95 2 .04 4 .01))) (call4-gen (make-polywave 0.0 '(1 .05 2 .6 3 .2 4 .1 5 .01 6 .005))) (call3-ampf (make-env '(0 0 .5 1 .75 .2 1 0) :duration call3-dur :scaler (* amp call3-amp))) (call3-frqf (make-env '(0.000 0.245 0.135 0.304 0.399 0.335 0.439 0.345 0.491 0.384 0.551 0.434 0.591 0.485 0.65 0.65 .67 .5 1 .3) :duration call3-dur :scaler (hz->radians 6000.0))) (call3-f1 (make-env '(0 1 .6 1 .75 0 1 0) :duration call3-dur)) (call3-f2 (make-env '(0 0 .6 0 .64 1 1 1) :duration call3-dur)) (call3-start (+ call1-start (seconds->samples call3-beg)))) (let ((call3-stop (+ call3-start (seconds->samples call3-dur)))) (do ((i call1-start (+ i 1))) ((= i call1-stop)) (outa i (* (env call1-ampf) (oscil call1-gen (env call1-frqf))))) (do ((i call2-start (+ i 1))) ((= i call2-stop)) (outa i (* (env call2-ampf) (polywave call2-gen (env call2-frqf))))) (do ((i call3-start (+ i 1))) ((= i call3-stop)) (let ((frq (env call3-frqf))) (outa i (* (env call3-ampf) (+ (* (env call3-f1) (polywave call3-gen frq)) (* (env call3-f2) (polywave call4-gen (* 0.5 frq))))))))))))) ;; (with-sound (:play #t) (bobwhite 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Warbling vireo (define-animal (warbling-vireo beg amp) (let ((dur 2.25)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.018 0.042 0.046 0.000 0.074 0.113 0.091 0.111 0.096 0.000 0.113 0.000 0.129 0.124 0.144 0.089 0.148 0.026 0.164 0.000 0.187 0.108 0.209 0.000 0.220 0.000 0.222 0.103 0.235 0.218 0.245 0.205 0.258 0.000 0.268 0.000 0.279 0.087 0.305 0.089 0.316 0.000 0.338 0.000 0.345 0.216 0.379 0.726 0.402 0.000 0.411 0.000 0.414 0.324 0.437 0.155 0.455 0.139 0.461 0.000 0.473 0.000 0.482 0.126 0.492 0.126 0.497 0.321 0.509 0.139 0.520 0.003 0.536 0.308 0.552 0.187 0.565 0.250 0.572 0.000 0.587 0.000 0.596 0.737 0.619 0.966 0.646 0.501 0.661 0.000 0.670 0.000 0.679 0.266 0.697 0.097 0.703 0.711 0.719 0.000 0.736 0.000 0.746 0.997 0.756 0.282 0.775 0.392 0.787 0.000 0.804 0.000 0.813 0.811 0.826 0.463 0.836 0.411 0.847 0.000 0.862 0.000 0.873 0.284 0.893 0.192 0.899 0.066 0.912 0.329 0.921 0.000 0.931 0.000 0.934 0.303 0.947 0.466 0.960 0.418 0.980 0.258 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-oscil)) (frqf (make-env '(0.000 0.184 0.010 0.214 0.026 0.214 0.036 0.197 0.057 0.197 0.066 0.233 0.085 0.266 0.099 0.260 0.113 0.255 0.124 0.274 0.125 0.222 0.134 0.249 0.146 0.227 0.165 0.227 0.169 0.178 0.179 0.184 0.191 0.192 0.209 0.175 0.221 0.186 0.226 0.312 0.227 0.258 0.233 0.285 0.234 0.236 0.242 0.274 0.245 0.241 0.252 0.230 0.268 0.227 0.272 0.203 0.284 0.225 0.295 0.216 0.306 0.208 0.316 0.219 0.346 0.233 0.357 0.282 0.359 0.252 0.366 0.296 0.369 0.252 0.373 0.304 0.376 0.255 0.382 0.301 0.385 0.263 0.390 0.301 0.412 0.279 0.418 0.321 0.421 0.247 0.424 0.279 0.427 0.233 0.441 0.211 0.450 0.208 0.457 0.178 0.480 0.197 0.484 0.238 0.488 0.205 0.492 0.241 0.495 0.200 0.499 0.247 0.506 0.241 0.512 0.186 0.529 0.192 0.530 0.255 0.548 0.238 0.557 0.214 0.568 0.241 0.582 0.230 0.591 0.299 0.599 0.307 0.609 0.301 0.615 0.274 0.627 0.342 0.645 0.359 0.648 0.329 0.670 0.332 0.672 0.247 0.700 0.227 0.705 0.304 0.715 0.249 0.722 0.244 0.738 0.247 0.749 0.307 0.753 0.425 0.762 0.422 0.770 0.468 0.774 0.392 0.786 0.342 0.808 0.326 0.821 0.255 0.832 0.285 0.843 0.266 0.866 0.263 0.891 0.197 0.915 0.247 0.935 0.285 0.942 0.345 0.945 0.290 0.947 0.441 0.950 0.353 0.953 0.411 0.957 0.367 0.960 0.405 0.964 0.370 0.967 0.405 0.973 0.373 0.979 0.373 0.990 0.296 1.000 0.255) :duration dur :scaler (hz->radians 11900)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (env frqf)))))))) ;; (with-sound (:play #t) (warbling-vireo 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Great-horned owl (define-animal (great-horned-owl beg amp) (let ((begs (vector 0.0 0.26 1.42 2.16)) (durs (vector 0.14 0.40 0.43 0.37)) (amps (vector .75 .9 .95 1.0))) (do ((call 0 (+ call 1))) ((= call 4)) (let ((start (seconds->samples (+ beg (begs call))))) (let ((stop (+ start (seconds->samples (durs call)))) (gen (make-polywave 0.0 '(1 .9 2 .12 3 .007 7 .003))) (rnd (make-rand-interp 30 (hz->radians 5))) (ampf (make-env '(0 0 1 1 4 .9 5 0) :duration (durs call) :scaler (* amp (amps call)))) (frqf (make-env '(0 1.25 .5 2 4.4 1.95 5 1) :base .1 :duration (durs call) :scaler (hz->radians (* 0.5 328))))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen (+ (env frqf) (rand-interp rnd))))))))))) ;; (with-sound (:play #t) (great-horned-owl 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Western tanager (define-animal (western-tanager beg amp) (let ((gen (make-polywave 0.0 '(1 .98 2 .02))) (begs (vector 0.0 0.7 1.4 2.0)) (durs (vector 0.27 0.32 0.25 0.24)) (amps (vector 0.32 0.85 1.0 0.65))) (let ((ampfs (vector (make-env '(0.000 0.000 0.086 0.398 0.247 0.610 0.363 0.000 0.416 0.000 0.513 0.603 0.610 0.603 0.708 0.507 0.733 0.232 0.798 0.895 0.848 1.000 0.898 0.927 1.000 0.000) :duration (durs 0) :scaler (* amp (amps 0))) (make-env '(0.000 0.000 0.060 0.735 0.303 1.000 0.394 0.408 0.503 0.318 0.617 0.879 0.912 0.258 0.939 0.055 1.000 0.000) :duration (durs 1) :scaler (* amp (amps 1))) (make-env '(0.000 0.000 0.098 0.837 0.183 0.704 0.395 1.000 0.469 0.185 0.553 0.086 0.731 0.841 0.785 0.834 1.000 0.000) :duration (durs 2) :scaler (* amp (amps 2))) (make-env '(0.000 0.000 0.047 0.837 0.117 0.172 0.167 0.157 0.234 0.993 0.296 0.826 0.319 0.609 0.431 0.781 0.567 0.506 0.642 0.166 0.673 0.757 0.769 0.874 0.873 0.766 0.919 0.605 0.956 0.230 1.000 0.000) :duration (durs 3) :scaler (* amp (amps 3))))) (frqfs (vector (make-env '(0.000 0.437 0.056 0.561 0.075 0.558 0.094 0.459 0.109 0.536 0.128 0.411 0.142 0.521 0.156 0.435 0.172 0.532 0.190 0.450 0.214 0.556 0.226 0.459 0.239 0.556 0.350 0.318 0.409 0.313 0.491 0.461 0.614 0.461 0.665 0.428 0.702 0.340 0.718 0.406 0.739 0.331 0.756 0.470 0.772 0.336 0.803 0.510 0.818 0.353 0.845 0.536 0.862 0.415 0.886 0.545 0.903 0.470 0.924 0.534 0.945 0.442 1.000 0.395) :duration (durs 0) :scaler (hz->radians 6000)) (make-env '(0.000 0.587 0.045 0.543 0.064 0.459 0.088 0.563 0.105 0.481 0.127 0.600 0.141 0.514 0.172 0.620 0.185 0.532 0.212 0.640 0.233 0.567 0.251 0.629 0.266 0.589 0.374 0.448 0.440 0.404 0.528 0.406 0.557 0.450 0.583 0.466 0.604 0.517 0.618 0.481 0.648 0.552 0.667 0.499 0.691 0.556 0.710 0.517 0.739 0.561 0.758 0.519 0.791 0.561 0.814 0.510 0.833 0.534 0.975 0.483 1.000 0.488) :duration (durs 1) :scaler (hz->radians 6000)) (make-env '(0.000 0.247 0.059 0.539 0.073 0.556 0.131 0.490 0.150 0.444 0.172 0.501 0.199 0.402 0.222 0.512 0.249 0.430 0.279 0.552 0.304 0.464 0.340 0.600 0.360 0.479 0.383 0.567 0.496 0.311 0.611 0.320 0.635 0.470 0.655 0.331 0.680 0.492 0.703 0.349 0.742 0.534 0.770 0.373 0.797 0.536 0.823 0.419 0.856 0.536 0.881 0.433 0.910 0.506 0.950 0.397 0.978 0.508 1.000 0.514) :duration (durs 2) :scaler (hz->radians 6000)) (make-env '(0.000 0.614 0.031 0.607 0.046 0.514 0.072 0.430 0.145 0.307 0.168 0.380 0.191 0.536 0.205 0.453 0.223 0.570 0.239 0.457 0.261 0.547 0.282 0.426 0.297 0.503 0.318 0.426 0.341 0.453 0.449 0.468 0.580 0.435 0.635 0.419 0.652 0.353 0.674 0.494 0.687 0.545 0.706 0.455 0.732 0.556 0.754 0.457 0.783 0.547 0.807 0.455 0.840 0.558 0.858 0.453 0.885 0.539 0.914 0.439 0.938 0.541 0.965 0.433 1.000 0.472) :duration (durs 3) :scaler (hz->radians 6000))))) (do ((call 0 (+ call 1))) ((= call 4)) (let ((ampf (ampfs call)) (frqf (frqfs call)) (start (seconds->samples (+ beg (begs call))))) (let ((stop (+ start (seconds->samples (durs call))))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen (env frqf))))))))))) ;; (with-sound (:play #t) (western-tanager 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Pileated woodpecker (define-animal (pileated-woodpecker beg amp) (let ((dur 2.28) (pulse-space .137) (pulse-dur .06) (start (seconds->samples beg))) (let ((gen #f) (partials '(1 .06 2 1.0 3 .1 4 .13 5 .07 6 .01 7 .015 8 .01 9 .017 10 .006)) ; .705 is scaling (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 .5 4 1 15 1) :duration dur :scaler (* .705 amp))) (pulse-ampf (make-env '(0.000 0.000 0.20 0.625 0.511 0.985 0.663 1.000 0.802 0.940 0.906 0.731 0.961 0.157 1.000 0.000) :duration pulse-dur)) (pulse-frqf (make-env '(0 0 .3 .9 .6 1 .8 1 1 .75) :duration pulse-dur :scaler (hz->radians 300))) (pulse-off (make-env '(0 1120 .25 1140 .4 1190 .9 1150) :length 18)) (pulse-samps (seconds->samples pulse-space)) (pulse-out (seconds->samples pulse-dur))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out)))) (let ((pulse-amp (env ampf))) (set! gen (make-polywave :partials (let ((xcoord #f)) (map (lambda (x) (set! xcoord (not xcoord)) (if xcoord x (* x pulse-amp))) partials))))) (set! (mus-frequency gen) (- (env pulse-off) 300.0)) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulse-ampf) (polywave gen (env pulse-frqf))))) (mus-reset pulse-ampf) (mus-reset pulse-frqf)))))) ;; (with-sound (:play #t) (pileated-woodpecker 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Whip-poor-will (define-animal (whip-poor-will beg amp) (let ((dur 0.75)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.043 0.172 0.063 0.341 0.093 0.256 0.188 0.159 0.209 0.000 0.466 0.000 0.527 0.097 0.558 0.081 0.626 0.309 0.650 0.288 0.657 0.140 0.674 0.142 0.708 0.322 0.750 0.343 0.765 0.121 0.787 0.201 0.805 0.381 0.826 0.470 0.861 0.144 0.867 0.451 0.877 0.106 0.890 0.964 0.914 0.117 0.919 0.377 0.926 0.233 0.931 0.324 0.949 0.244 0.977 0.377 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .01))) (frqf (make-env '(0 1170 .093 1680 .2 1640 .46 1170 .558 1170 .626 1450 .650 1530 .66 1290 .707 1480 .750 1480 .765 1290 .78 1320 .8 1600 .81 1300 .82 1900 .83 1500 .84 2100 .85 1700 .86 2150 .87 1900 .89 2460 .914 2160 .93 1680 1.0 1600) :duration dur :scaler (hz->radians 1.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (whip-poor-will 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Varied thrush (define-animal (varied-thrush beg amp) (let ((dur 1.02)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.052 0.100 0.130 0.538 0.261 0.845 0.438 0.983 0.580 0.917 0.738 0.720 0.860 0.475 0.941 0.172 1.000 0.000) :duration dur :scaler (/ amp 2.25))) (gen1 (make-rxyk!cos 3360 -5/84 0.7)) ; (/ 200 3360) (gen2 (make-rxyk!cos 3760 5/94 0.3)) ; (/ 200 3760) (gen3 (make-polywave 3660 (list 1 (* .25 .98) 2 (* .25 .02)))) (frqf (make-env '(0 1 .1 0 .95 0 1.0 -.1) :duration dur :scaler (hz->radians 10.0))) (rnd (make-rand-interp 100 (hz->radians 3)))) (do ((i start (+ i 1))) ((= i stop)) (let ((fm (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (rxyk!cos gen1 (* 16.8 fm)) (rxyk!cos gen2 (* 18.8 fm)) (polywave gen3 fm))))))))) ;; (with-sound (:play #t) (varied-thrush 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Nashville warbler (define-animal (nashville-warbler beg amp) (define (nashville-warbler-1 beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.111 0.837 0.169 0.995 0.328 1.000 0.430 0.905 0.561 0.333 0.595 0.000 0.61 0.0 0.62 0.154 0.715 0.675 0.806 0.959 0.969 0.908 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 7200 .1 5500 .3 4800 .56 4400 .59 4500 .62 7200 .72 7200 .8 6800 .83 6700 .85 6700 .87 6600 .9 6600 .92 6500 .96 6500 1 6520) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .005 3 .03)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) (define (nashville-warbler-2 beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.049 0.165 0.082 0.591 0.123 0.561 0.139 0.434 0.219 0.981 0.325 0.984 0.374 0.100 0.438 0.100 0.484 0.415 0.552 0.818 0.618 0.995 0.753 0.748 0.888 0.439 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 3450 .1 5000 .14 4800 .37 5600 .44 8600 .55 6600 .61 5300 1 3200) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .005 3 .03)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) (define (nashville-warbler-3 beg amp) (let ((dur .1)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 3 1 4 0) :duration dur :scaler amp)) (frqf (make-env '(0 7580 .6 5100 1 5000) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .005 3 .03)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define (nashville-warbler-4 beg amp) (let ((dur 0.07)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.129 0.201 0.182 0.382 0.197 1.000 0.243 0.350 0.342 0.520 0.393 0.759 0.485 0.878 0.647 0.694 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 3300 .195 4800 .24 5500 .26 5500 .4 4500 .7 3460 1 3000) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .96 2 .03 3 .005 4 .004)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (let ((amps1 (vector .2 .5 .7 .9 1.0 1.0))) (do ((call 0 (+ call 1))) ((= call 6)) (nashville-warbler-1 (+ beg (* .21 call)) (+ .15 (random .02)) (* amp (amps1 call))))) (do ((call 0 (+ call 1))) ((= call 3)) (nashville-warbler-2 (+ beg 1.26 (* .17 call)) (+ .13 (random .02)) amp)) (nashville-warbler-3 (+ beg 1.8) amp) (nashville-warbler-4 (+ beg 1.94) (* 0.4 amp))) ;; (with-sound (:play #t) (nashville-warbler 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Ruffed grouse (define-animal (ruffed-grouse beg amp) (let ((dur 10.33) (bump-dur 0.27)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.006 0.097 0.045 0.135 0.091 0.244 0.141 0.223 0.219 0.552 0.301 0.682 0.360 0.689 0.503 0.766 0.696 0.619 0.751 0.622 0.806 0.705 0.820 0.552 0.829 0.787 0.849 0.687 0.867 1.1000 0.910 0.494 0.929 0.559 0.944 0.527 0.969 0.339 1.000 0.000) :duration dur :scaler (* 3 amp))) (frqf (make-env (list 0 (/ 1.0 .45) .18 (/ 1.0 .45) .19 (/ 1.0 .8) .22 (/ 1.0 .8) .25 (/ 1.0 .6) .5 (/ 1.0 .4) .74 (/ 1.0 .15) .9 (/ 1.0 .08) 1 (/ 1.0 .4)) :duration dur :scaler (hz->radians 1.0))) (bump-samps (seconds->samples bump-dur)) (bump (make-env '(0.000 0.499 0.040 0.499 0.063 0.506 0.089 0.492 0.108 0.499 0.122 0.523 0.134 0.506 0.143 0.462 0.153 0.425 0.164 0.457 0.171 0.508 0.173 0.580 0.176 0.647 0.181 0.691 0.186 0.650 0.195 0.404 0.197 0.355 0.202 0.311 0.208 0.362 0.222 0.657 0.229 0.696 0.235 0.661 0.258 0.350 0.263 0.311 0.271 0.297 0.283 0.343 0.311 0.661 0.316 0.703 0.322 0.733 0.333 0.698 0.340 0.643 0.375 0.343 0.379 0.304 0.389 0.278 0.404 0.353 0.443 0.624 0.458 0.661 0.473 0.631 0.494 0.508 0.517 0.434 0.537 0.394 0.557 0.436 0.589 0.520 0.618 0.564 0.644 0.538 0.679 0.490 0.703 0.473 0.736 0.483 0.794 0.510 0.831 0.510 0.909 0.494 1.000 0.499) :duration bump-dur :offset -0.5))) (let ((bump-wave (make-float-vector bump-samps))) (do ((i 0 (+ i 1))) ((= i bump-samps)) (set! (bump-wave i) (env bump))) (let ((wt (make-wave-train 0.0 0.0 bump-wave))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (wave-train wt (env frqf)))))))))) #| ;; old form: (do ((i start (+ i 1))) ((= i stop)) (if (> (pulse-train pulser (env frqf)) .1) (let ((bump-stop (+ i bump-samps))) (set! (mus-location ampf) (- i start)) (let ((vol (env ampf))) (mus-reset bump) (do ((k i (+ k 1))) ((= k bump-stop)) (outa k (* vol (env bump))))))))))) |# ;; (with-sound (:play #t) (ruffed-grouse 0 0.5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Plumbeous vireo (define-animal (plumbeous-vireo-1 beg amp) (let ((dur 0.34)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 .02 .1 0.124 0.146 0.142 0.370 0.251 1.000 0.277 0.373 .29 .1 0.393 0.326 0.419 0.731 0.568 0.407 0.713 0.286 0.885 0.351 0.947 0.311 0.967 0.123 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .98 3 .01 5 .004))) (ampf1a (make-env '(0 .2 .15 .25 .2 .01 .24 .02 .25 .1 .32 .1 .34 .005 .37 .001 .4 .05 .6 .03 1 0) :duration dur)) (gen1a (make-oscil)) (frqf (make-env '(0.000 0.181 0.054 0.175 0.072 0.187 0.087 0.156 0.097 0.177 0.118 0.154 0.151 0.259 0.201 0.320 0.243 0.293 0.256 0.261 0.275 0.202 0.295 0.162 0.316 0.204 0.328 0.314 0.339 0.446 0.359 0.489 0.382 0.454 0.394 0.352 0.425 0.286 0.449 0.277 0.467 0.246 0.494 0.238 0.507 0.211 0.525 0.234 0.551 0.166 0.570 0.215 0.586 0.207 0.595 0.161 0.617 0.211 0.633 0.203 0.642 0.159 0.657 0.207 0.692 0.168 0.711 0.231 0.728 0.227 0.742 0.188 0.750 0.257 0.795 0.218 0.802 0.283 0.845 0.234 0.856 0.296 0.897 0.229 0.909 0.292 0.958 0.227 0.969 0.261 1.000 0.252) :duration dur :scaler (hz->radians 10000.0))) (gen2 (make-polywave 0.0 '(1 .05 2 .1 3 .2 4 .3 5 .2 6 .1 7 .05))) (ampf2 (make-env '(0 1 .15 0 1 0) :duration dur :scaler (* .5 amp))) (frqf2 (make-env '(0 850 1 700) :duration dur :scaler (hz->radians 1.0))) (rnd (make-rand-interp 1000 (hz->radians 50))) (buzz (make-rand-interp 1000 (hz->radians 40)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf1a) (oscil gen1a (* 2.0 frq))) (* (env ampf2) (polywave gen2 (+ (env frqf2) (rand-interp buzz)))))))))))) ;; (with-sound (:play #t) (plumbeous-vireo-1 0 .25)) (define-animal (plumbeous-vireo-2 beg amp) (let ((dur 0.455)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.106 0.184 0.148 0.082 0.169 0.156 0.183 0.441 0.199 0.484 0.216 0.379 0.234 0.770 0.244 0.748 0.252 0.527 0.261 0.992 0.320 0.961 0.343 0.742 0.360 0.832 0.395 0.916 0.411 0.145 0.416 0.559 0.421 0.126 0.424 0.577 0.435 0.791 0.448 0.529 0.452 0.089 0.460 0.639 0.472 0.777 0.485 0.181 0.495 0.656 0.499 0.319 0.506 0.854 0.515 0.668 0.516 0.186 0.523 0.559 0.535 0.933 0.540 0.599 0.545 0.923 0.554 0.282 0.562 0.795 0.569 0.609 0.574 0.988 0.579 0.908 0.588 0.772 0.593 0.161 0.597 0.646 0.604 0.879 0.612 0.931 0.625 0.800 0.630 0.267 0.634 0.782 0.644 0.926 0.649 0.812 0.652 0.423 0.658 0.955 0.664 0.718 0.670 0.973 0.675 0.235 0.682 0.752 0.691 1.000 0.698 0.938 0.706 0.153 0.712 0.889 0.720 0.693 0.735 0.906 0.745 0.661 0.750 0.228 0.754 0.594 0.757 0.683 0.763 0.411 0.767 0.621 0.779 0.797 0.793 0.693 0.797 0.532 0.802 0.564 0.810 0.386 0.814 0.653 0.839 0.535 0.840 0.092 0.843 0.495 0.851 0.572 0.862 0.627 0.870 0.490 0.873 0.592 0.882 0.416 0.888 0.054 0.889 0.359 0.896 0.465 0.901 0.379 0.908 0.543 0.919 0.413 0.926 0.443 0.931 0.218 0.949 0.516 0.959 0.423 0.979 0.151 1.000 0.000 ) :duration dur :scaler amp)) (frqf (make-env '(0.030 0.200 0.053 0.223 0.086 0.262 0.135 0.262 0.179 0.225 0.200 0.215 0.210 0.257 0.222 0.374 0.235 0.441 0.266 0.396 0.293 0.376 0.332 0.401 0.345 0.418 0.353 0.450 0.365 0.413 0.382 0.465 0.397 0.428 0.413 0.505 0.427 0.433 0.446 0.537 0.461 0.438 0.480 0.550 0.494 0.446 0.508 0.525 0.533 0.386 0.546 0.473 0.565 0.371 0.581 0.455 0.607 0.344 0.618 0.426 0.646 0.324 0.658 0.391 0.687 0.300 0.704 0.364 0.730 0.302 0.747 0.359 0.773 0.297 0.789 0.347 0.815 0.290 0.832 0.342 0.861 0.285 0.883 0.347 0.907 0.285 0.923 0.332 1.000 0.252) :duration dur :scaler (hz->radians 8100.0))) (gen1 (make-polywave 0.0 '(1 .99 3 .005))) (gen2 (make-oscil)) (gen3 (make-oscil)) (ampf2 (make-env '(0 .2 .1 1 .13 0 1 0) :duration dur :scaler .5)) (ampf3 (make-env '(0 .3 .1 .3 .16 1 .19 0 1 0) :duration dur :scaler 1)) (rnd (make-rand-interp 1000 (hz->radians 50)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (oscil gen2 (* 1.5 frq))) (* (env ampf3) (oscil gen3 (* 2.0 frq))))))))))) ;; (with-sound (:play #t) (plumbeous-vireo-2 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Least bittern (define-animal (least-bittern beg amp) (let ((dur 1.25) (pulse-dur .09)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.100 0.123 0.388 0.454 0.884 0.649 0.995 0.754 0.776 1.000 0.100) :duration dur :scaler amp)) (frqf (make-env '(0 .6 1 .75 2 1 3 .40) :duration dur :scaler (hz->radians 90))) (gen1 #f) (rnd (make-rand-interp 200 (hz->radians 40))) (pulse-samps (seconds->samples .13)) (pulse-out (seconds->samples pulse-dur)) (pulse-ampf (make-env '(0.000 0.000 0.119 0.698 0.258 1.000 0.355 0.310 0.564 0.1 0.7 0.070 1.3 0) :duration pulse-dur)) (pulse-frqf (make-env '(0 150 .3 300 1 250 2 200 3 200 3.5 150 4 230) :duration pulse-dur :scaler (hz->radians 1.0))) (pulse-rnd #f)) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out))) (pulse-amp (env ampf))) (set! (mus-location frqf) (- i start)) (set! gen1 (make-polywave 0.0 (list 1 (* pulse-amp .25) 2 (* pulse-amp .6) 3 (* pulse-amp .2) 4 (* pulse-amp .01) 5 (* pulse-amp .01)))) (set! pulse-rnd (make-rand-interp 4000 (* pulse-amp .2))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulse-ampf) (+ (polywave gen1 (+ (env frqf) (env pulse-frqf) (rand-interp rnd))) (rand-interp pulse-rnd))))) (mus-reset pulse-ampf) (mus-reset pulse-frqf)))))) ;; (with-sound (:play #t) (least-bittern 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; American crow (define (nrcos->polywave n r scl) (if (not (< 0 n 8192)) (error 'out-of-range "nrcos->polywave: too many partials") (let ((lst ()) (total (polynomial (make-float-vector n 1.0) r))) (set! scl (/ scl total)) (do ((i 0 (+ i 1))) ((= i n) (reverse lst)) (set! lst (cons (* scl (expt r i)) (cons (+ i 1) lst))))))) (define-animal (american-crow beg amp) (let ((dur 0.27)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 .02 .1 .04 .01 .06 0.056 0.110 0.700 0.258 1.000 0.344 0.970 0.369 0.677 .7 .3 1.000 0.000) :duration dur :scaler (* 2 amp))) (frqf (make-env '(0.000 0.360 0.038 0.362 0.052 0.396 0.076 0.403 0.095 0.445 0.129 0.445 0.153 0.493 0.201 0.495 0.231 0.501 0.260 0.490 0.297 0.503 0.317 0.499 0.346 0.473 0.407 0.473 0.435 0.424 0.495 0.439 0.528 0.392 0.589 0.405 0.621 0.362 0.677 0.373 0.704 0.332 0.767 0.325 0.791 0.281 0.832 0.278 0.859 0.251 0.890 0.225 0.912 0.255 0.950 0.263 1.000 0.26) :duration dur :scaler (hz->radians 1250.0))) (frm1 (make-formant 1400 .995)) (frm2 (make-formant 5500 .98)) (frm3 (make-formant 3800 .98)) (fr1 (* 40 (sin (hz->radians 1400)))) (fr2 (* 2 (sin (hz->radians 5500)))) (fr3 (* 4 (sin (hz->radians 3800)))) (gen (make-polywave 0.0 (nrcos->polywave 15 .75 1.0))) (rnd (make-rand-interp 5000 .007))) (let ((fb (vector frm1 frm2 frm3)) (fs (float-vector fr1 fr2 fr3))) (set! fb (make-formant-bank fb fs)) (do ((i start (+ i 1))) ((= i stop)) (outa i (formant-bank fb (* (env ampf) (polywave gen (+ (env frqf) (rand-interp rnd))))))))))) ;; (with-sound (:play #t) (american-crow 0 .5)) (define-animal (american-crow-no-formants beg amp) ; this is for sndclm.html (let ((dur 0.27)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 .02 .1 .04 .01 .06 0.056 0.110 0.700 0.258 1.000 0.344 0.970 0.369 0.677 .7 .3 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.360 0.038 0.362 0.052 0.396 0.076 0.403 0.095 0.445 0.129 0.445 0.153 0.493 0.201 0.495 0.231 0.501 0.260 0.490 0.297 0.503 0.317 0.499 0.346 0.473 0.407 0.473 0.435 0.424 0.495 0.439 0.528 0.392 0.589 0.405 0.621 0.362 0.677 0.373 0.704 0.332 0.767 0.325 0.791 0.281 0.832 0.278 0.859 0.251 0.890 0.225 0.912 0.255 0.950 0.263 1.000 0.26) :duration dur :scaler (hz->radians 1250.0))) (gen (make-polywave 0.0 (nrcos->polywave 15 .75 1.0) mus-chebyshev-second-kind)) (rnd (make-rand-interp 5000 .007))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen (+ (env frqf) (rand-interp rnd))))))))) ;;; -------------------------------------------------------------------------------- ;;; ;;; Orange-crowned warbler (define-animal (orange-crowned-warbler beg amp) (let ((dur 1.5) (pulse-dur 0.045) (call2-dur 0.13) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.05 0.347 1.000 0.838 0.831 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-oscil)) (frqf (make-env '(0 0 7 1 10 0) :duration dur :scaler (hz->radians 600.0))) (pulse-ampf1 (make-env '(0.000 0.000 0.038 0.152 0.062 0.115 0.148 0.468 0.211 0.530 0.228 0.290 0.266 0.642 0.313 0.873 0.362 0.623 0.401 0.918 0.443 0.054 0.475 0.983 0.490 0.901 0.501 0.290 0.525 0.668 0.576 0.189 0.605 0.155 0.621 0.313 0.656 0.082 0.679 0.259 0.703 0.118 0.730 0.177 0.752 0.062 0.775 0.155 0.798 0.048 0.812 0.099 0.831 0.059 0.885 0.096 0.922 0.048 0.947 0.087 1.000 0.000) :duration pulse-dur)) (pulse-frqf1 (make-env '(0 3700 .2 4500 .3 4500 .45 4000 .8 4000 1 4300) :duration pulse-dur :scaler (hz->radians 1.0))) (pulse-samps (seconds->samples pulse-dur)) (call1-stop (+ start (seconds->samples 1.35))) (call2-start (+ start (seconds->samples 1.36))) (pulse-ampf2 (make-env '(0.000 0.000 0.074 0.994 0.135 0.375 0.184 0.637 0.238 0.721 0.290 0.411 0.381 0.003 0.537 0.000 0.591 0.186 0.704 0.121 0.737 0.437 0.843 0.358 0.880 0.045 0.908 0.225 1.000 0.000) :duration call2-dur :scaler (* 0.5 amp))) (pulse-frqf2 (make-env '(0 4800 .1 3950 .15 3820 .22 3950 .4 4800 .6 4600 .7 3480 .75 3940 .86 5200 1 5150) :duration call2-dur :scaler (hz->radians 1.0)))) ;; 30 repetitions, then 2 special end tones (do ((i start (+ i pulse-samps))) ((>= i call1-stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min call1-stop (+ i pulse-samps))) (pulse-amp (env ampf))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* pulse-amp (env pulse-ampf1) (oscil gen1 (+ (env frqf) (env pulse-frqf1)))))) (mus-reset pulse-ampf1) (mus-reset pulse-frqf1))) (do ((i call2-start (+ i 1))) ((= i stop)) (outa i (* (env pulse-ampf2) (oscil gen1 (env pulse-frqf2)))))))) ;; (with-sound (:play #t) (orange-crowned-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Loggerhead shrike (define-animal (loggerhead-shrike-1 beg amp) (let ((dur 0.65) (open-dur .036) (pulse-dur .008) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 .01 1 .99 1 1 0) :duration dur :scaler amp)) (gen1 (make-oscil)) (frqf (make-env '(0 0 1 1) :duration dur :scaler (hz->radians 100.0))) (open-samps (seconds->samples open-dur))) (let ((open-stop (+ start open-samps)) (open-ampf (make-env '(0.000 0.000 0.158 0.063 0.280 0.162 0.386 0.775 0.418 0.644 0.465 0.000 0.573 0.000 0.592 0.921 .62 .1 0.633 0.866 0.726 0.000 0.788 0.000 0.829 0.399 0.889 0.154 1.000 0.000) :duration open-dur :scaler .75)) (open-frqf (make-env '(0 4200 .35 3900 .46 3800 .57 3600 .6 3900 .61 5100 .72 5100 .8 3400 .83 4200 1 4200) :duration open-dur :scaler (hz->radians 1.0))) (pulse-samps (seconds->samples pulse-dur)) (pulse-ampf (make-env '(0 0 .05 1 .3 1 .8 .1 1 0) :duration pulse-dur)) (pulse-frqf (make-env '(0 3600 .2 4800 .5 5000 .85 4000 1 3700) :duration pulse-dur :scaler (hz->radians 1.0))) (trem (make-oscil 160)) (rnd (make-rand-interp 500 .04)) (rnd1 (make-rand-interp 100 .01))) ;; special starting call, then the buzz (do ((i start (+ i 1))) ((= i open-stop)) (outa i (* (env open-ampf) (env ampf) (oscil gen1 (+ (env frqf) (env open-frqf)))))) (do ((i open-stop (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-samps))) (pulse-amp (env ampf))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* pulse-amp (* (env pulse-ampf) (+ .5 (* .5 (abs (oscil trem (rand-interp rnd1))))) (oscil gen1 (+ (env frqf) (env pulse-frqf) (rand-interp rnd)))))))) (mus-reset pulse-ampf) (mus-reset pulse-frqf)))))) ;; (with-sound (:play #t) (loggerhead-shrike-1 0 .5)) (define-animal (loggerhead-shrike-2 beg amp) (let ((dur 0.4) (pulse-dur .08) (frqs (vector .9 .95 .95 1.0 1.0 1.0)) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (pulse-samps (seconds->samples pulse-dur)) (pulse-ampf (make-env '(0.000 0.000 0.114 0.077 0.153 0.943 0.191 0.960 0.291 0.510 0.320 0.114 0.342 0.647 0.373 0.191 0.400 0.490 0.419 0.066 0.456 0.291 0.728 0.288 0.769 0.479 0.792 0.407 0.812 0.003 1.000 0.000) :duration pulse-dur :scaler amp)) (frqf1 (make-env '(0.000 0.229 0.310 0.231 0.325 0.271 0.345 0.273 0.377 0.237 0.397 0.240 0.615 0.235 0.7 0.235 1.000 0.235) :duration pulse-dur :scaler (hz->radians 10500.0))) (frqf2 (make-env '(0.000 0.13 .6 .13 0.7 0.15 .9 .15 1.000 0.1) :duration pulse-dur :scaler (hz->radians 10500.0)))) (let ((ampf1 (make-env '(0 1 .8 1 1 0) :duration pulse-dur)) (ampf2 (make-env '(0 0 .6 0 .7 1 1 1) :duration pulse-dur)) (gen1 (make-polywave 0.0 '(1 .95 2 .04 3 .005))) (gen2 (make-polywave 0.0 '(1 .5 2 .5 4 .01))) (pulse-frq (frqs 0)) (pulse-ctr 1) (rnd (make-rand-interp 500 .02))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-samps)))) (do ((k i (+ k 1))) ((= k reset-stop)) (let ((noise (rand-interp rnd))) (outa k (* (env pulse-ampf) (+ (* (env ampf1) (polywave gen1 (* pulse-frq (+ noise (env frqf1))))) (* (env ampf2) (polywave gen2 (* pulse-frq (+ noise (env frqf2))))))))))) (set! pulse-frq (frqs pulse-ctr)) (set! pulse-ctr (+ pulse-ctr 1)) (for-each mus-reset (vector pulse-ampf ampf1 ampf2 frqf1 frqf2))))))) ;; (with-sound (:play #t) (loggerhead-shrike-2 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; California Quail (define-animal (california-quail beg amp) (let ((durs (vector .075 .23 .16)) (begs (vector 0.0 .21 .58)) (ampfs (make-vector 3 #f)) (frqfs (make-vector 3 #f)) (gens (make-vector 3 #f)) (starts (make-vector 3 0)) (stops (make-vector 3 0)) (frm1 (make-formant 1000 .995)) (frm2 (make-formant 1700 .99)) (frm3 (make-formant 5600 .98)) (fr1 (* 10 (sin (hz->radians 1000)))) (fr2 (* 30 (sin (hz->radians 1700)))) (fr3 (* 10 (sin (hz->radians 5600))))) (let ((fb (make-formant-bank (vector frm1 frm2 frm3) (float-vector fr1 fr2 fr3)))) (do ((i 0 (+ i 1))) ((= i 3)) (set! (starts i) (seconds->samples (+ beg (begs i)))) (set! (stops i) (+ (starts i) (seconds->samples (durs i))))) (set! (gens 0) (make-nrxysin 530 1.0 8 .5)) (set! (gens 1) (make-nrxysin 450 1.0 15 .6)) (set! (gens 2) (make-nrxysin 400 1.0 8 .5)) (set! (ampfs 0) (make-env '(0 0 1.25 1 1.75 1 3 0) :base 10 :duration (durs 0) :scaler (* amp 0.25))) (set! (ampfs 1) (make-env '(0.000 0.000 0.208 0.719 0.292 0.965 0.809 0.869 0.928 0.682 1.000 0.000) :base 10 :duration (durs 1) :scaler (* 0.5 amp))) (set! (ampfs 2) (make-env '(0 0 1 1 3 1 6 0) :base 10 :duration (durs 2) :scaler (* amp .375))) (set! (frqfs 0) (make-env '(0 0 1.3 1 2 0) :duration (durs 0) :scaler (hz->radians 300))) (set! (frqfs 1) (make-env '(0 0 1.5 .8 2.5 1 4 .95 5 .25) :base .03 :duration (durs 1) :scaler (hz->radians 520))) (set! (frqfs 2) (make-env '(0 0 .2 .7 .3 1 1 .5) :duration (durs 2) :scaler (hz->radians 450.0))) (do ((k 0 (+ k 1))) ((= k 3)) (let ((start (starts k)) (stop (stops k)) (ampf (ampfs k)) (frqf (frqfs k)) (gen (gens k))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (formant-bank fb (nrxysin gen (env frqf))))))))))) ;; (with-sound (:play #t) (california-quail 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Vermillion flycatcher (define-animal (vermillion-flycatcher beg amp) (let ((dur 0.72)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.023 0.527 0.045 0.000 0.264 0.000 0.282 0.868 0.295 0.231 0.312 0.000 0.462 0.000 0.481 0.918 0.503 0.206 0.520 0.000 0.598 0.000 0.614 0.848 0.633 0.729 0.648 0.164 0.660 0.000 0.685 0.000 0.696 0.654 0.709 0.746 0.719 0.532 0.738 0.000 0.747 0.100 0.750 0.570 0.770 0.435 0.779 0.000 0.814 0.000 0.823 0.923 0.836 0.525 0.840 0.998 0.855 0.968 0.866 0.321 0.883 0.095 0.909 0.517 0.924 0.600 0.961 0.440 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .98 2 .015 3 .006))) (frqf (make-env '(0.000 0.378 0.022 0.474 0.032 0.400 0.266 0.378 0.278 0.496 0.297 0.402 0.462 0.351 0.469 0.466 0.482 0.526 0.504 0.398 0.602 0.378 0.607 0.486 0.617 0.546 0.637 0.490 0.643 0.398 0.686 0.402 0.689 0.510 0.709 0.582 0.721 0.560 0.736 0.558 0.744 0.406 0.752 0.562 0.767 0.679 0.793 0.394 0.810 0.394 0.827 0.851 0.836 0.633 0.849 0.564 0.856 0.478 0.871 0.448 0.887 0.480 0.902 0.506 0.924 0.510 0.950 0.500 0.973 0.466 1.000 0.470) :duration dur :scaler (hz->radians 8000.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (vermillion-flycatcher 0 .5)) ;;;-------------------------------------------------------------------------------- ;;; ;;; Cardinal (define-animal (cardinal beg amp) (let ((call1-dur 0.185) (call2-dur 0.19) (start (seconds->samples beg))) (let ((stop (+ start (seconds->samples 3.26))) (call 0) (next-call 0) (gen1 (make-polywave 0.0 (normalize-partials '(1 1 2 .08 3 .01 4 .05 5 .005 6 .01)))) (call1-ampf (make-env '(0.000 0.000 0.174 0.333 0.243 0.273 0.332 0.446 0.391 0.373 0.446 0.488 0.496 0.363 0.545 0.064 0.606 0.048 0.632 0.614 0.676 0.783 0.732 0.655 0.764 0.667 0.802 0.992 0.841 0.659 0.888 0.633 0.951 0.347 0.974 0.122 1.000 0.000) :duration call1-dur :scaler (* 0.5 amp))) (call1-frqf (make-env '(0.000 0.299 0.230 0.320 0.387 0.339 0.513 0.349 0.586 0.349 0.610 0.534 0.622 0.570 0.654 0.585 0.703 0.594 0.753 0.584 0.778 0.566 0.803 0.560 0.911 0.434 1.000 0.435) :duration call1-dur :scaler (hz->radians 6000.0))) (call2-ampf (make-env '(0.000 0.000 0.041 0.159 0.101 0.263 0.167 0.247 0.246 0.126 0.266 0.150 0.443 0.000 0.573 0.000 0.599 0.202 0.635 0.299 0.667 0.273 0.683 0.371 0.724 0.411 0.796 0.000 0.83 0.0 0.848 0.155 0.870 1.000 0.925 0.639 0.951 0.126 1.000 0.000) :duration call2-dur :scaler amp)) (call2-frqf (make-env '(0.000 0.138 0.032 0.173 0.063 0.187 0.215 0.176 0.403 0.140 0.542 0.117 0.590 0.214 0.659 0.218 0.750 0.250 0.794 0.244 0.832 0.618 0.843 0.518 0.876 0.352 0.909 0.335 0.954 0.323 1.000 0.311) :duration call2-dur :scaler (hz->radians 10000.0)))) (let ((call-ampf call1-ampf) (call-frqf call1-frqf) (call-samps (seconds->samples call1-dur))) (do ((i start next-call)) ((>= i stop)) (let ((call-stop (min stop (+ i call-samps)))) (do ((k i (+ k 1))) ((= k call-stop)) (outa k (* (env call-ampf) (polywave gen1 (env call-frqf)))))) (mus-reset call-ampf) (mus-reset call-frqf) (case call ((0) (set! next-call (+ start (seconds->samples 0.35)))) ((1) (set! next-call (+ next-call (seconds->samples (- 0.63 0.35)))) (set! call-samps (seconds->samples call2-dur)) (set! call-ampf call2-ampf) (set! call-frqf call2-frqf)) (else (set! next-call (+ next-call (seconds->samples 0.24))))) (set! call (+ call 1))))))) ;; (with-sound (:play #t) (cardinal 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Black phoebe (define-animal (black-phoebe beg amp) (let ((dur 0.36)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.082 0.899 0.098 0.957 0.118 0.892 0.142 0.396 0.181 0.000 0.287 0.000 0.367 0.661 0.396 0.000 0.440 0.778 0.458 0.739 0.479 0.300 0.507 0.636 0.532 0.558 0.555 0.380 0.588 0.535 0.807 0.325 0.926 0.181 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .9 2 .1 3 .006))) (frqf (make-env '(0.000 0.167 0.066 0.212 0.077 0.234 0.104 0.231 0.132 0.187 0.148 0.181 0.166 0.153 0.231 0.146 0.289 0.101 0.298 0.196 0.319 0.229 0.339 0.222 0.349 0.240 0.357 0.219 0.377 0.159 0.388 0.146 0.401 0.167 0.417 0.199 0.438 0.209 0.456 0.202 0.467 0.177 0.479 0.174 0.485 0.196 0.503 0.206 0.531 0.201 0.550 0.176 0.563 0.194 0.602 0.196 0.622 0.186 0.658 0.192 0.931 0.163 1.000 0.141) :duration dur :scaler (hz->radians 22050.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (black-phoebe 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Yellow warbler (define-animal (yellow-warbler beg amp) (let ((dur 1.38)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-oscil)) (ampf (make-env '(0.000 0.000 0.028 0.077 0.056 0.000 0.135 0.000 0.156 0.125 0.182 0.112 0.197 0.000 0.268 0.000 0.287 0.235 0.314 0.243 0.326 0.000 0.406 0.000 0.415 0.339 0.440 0.301 0.463 0.000 0.486 0.000 0.499 0.403 0.513 0.611 0.531 0.592 0.553 0.000 0.582 0.000 0.596 0.517 0.606 0.648 0.627 0.621 0.640 0.000 0.667 0.000 0.673 0.533 0.696 0.896 0.720 0.000 0.750 0.000 0.774 1.000 0.800 0.000 0.831 0.000 0.858 0.971 0.884 0.000 0.905 0.000 0.926 0.349 0.942 0.424 0.978 0.421 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.827 0.026 0.661 0.042 0.706 0.104 0.695 0.134 0.909 0.167 0.672 0.184 0.708 0.229 0.677 0.271 0.909 0.292 0.715 0.303 0.670 0.310 0.713 0.342 0.674 0.396 0.911 0.418 0.715 0.425 0.672 0.441 0.727 0.480 0.720 0.487 0.476 0.491 0.533 0.510 0.558 0.526 0.704 0.539 0.765 0.563 0.754 0.578 0.472 0.582 0.526 0.594 0.540 0.618 0.720 0.630 0.781 0.656 0.765 0.674 0.683 0.693 0.567 0.713 0.408 0.735 0.410 0.751 0.711 0.765 0.654 0.795 0.358 0.817 0.355 0.826 0.708 0.839 0.681 0.854 0.565 0.881 0.330 0.904 0.308 0.924 0.351 0.957 0.460 0.967 0.408 0.976 0.362 1.000 0.314) :duration dur :scaler (hz->radians 10000.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (env frqf)))))))) ;; (with-sound (:play #t) (yellow-warbler 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Barred owl (the "hoo-aw" call, not the more complex one -- I haven't succeeded with the latter yet) (define-animal (barred-owl-1 beg amp) (let ((dur 1.27) (owl-env '(0 0 .53 0 .54 1 1 1))) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.030 0.308 0.052 0.345 0.057 0.932 0.104 0.567 0.161 0.605 0.259 0.510 0.299 0.399 0.371 0.535 0.396 0.463 0.472 0.678 0.495 1.000 0.517 0.995 0.534 0.000 0.538 0.365 0.560 0.435 0.630 0.254 0.828 0.338 0.850 0.190 0.897 0.154 0.929 0.079 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.09 0.025 0.09 0.092 0.156 0.435 0.149 0.491 0.132 0.517 0.124 0.53 .124 0.536 0.088 0.830 0.061 1.000 0.013) :base .03 :duration dur :scaler (hz->radians 4060.0))) (gen1 (make-polywave 0.0 (nrcos->polywave 9 .5 1.0))) (rnd (make-rand-interp 300 (hz->radians 5))) (intrpf (make-env owl-env :duration dur)) (intrpf1 (make-env owl-env :offset (hz->radians 550.0) :scaler (hz->radians 80.0) :duration dur)) (intrpf2 (make-env owl-env :offset (hz->radians 1500.0) :scaler (hz->radians -400.0) :duration dur)) (intrpf3 (make-env owl-env :offset (hz->radians 2300.0) :scaler (hz->radians 150.0) :duration dur)) (rnd1 (make-rand-interp 1000 .1)) (frm1 (make-formant 730 .995)) (frm2 (make-formant 1090 .999)) (frm3 (make-formant 2240 .993)) (fr1 (* 30 (sin (hz->radians 730)))) (fr2 (* 2 (sin (hz->radians 1090)))) (fr3 (* 2 (sin (hz->radians 2240)))) (vib (make-polywave 12.0 (list 1 (hz->radians 7.0))))) (do ((i start (+ i 1))) ((= i stop)) (let ((val (* (+ .9 (rand-interp rnd1)) (polywave gen1 (+ (env frqf) (* (env intrpf) (+ (polywave vib) (rand-interp rnd)))))))) (outa i (* (env ampf) (+ (* fr1 (formant frm1 val (env intrpf1))) (* fr2 (formant frm2 val (env intrpf2))) (* fr3 (formant frm3 val (env intrpf3))))))))))) ;; (with-sound (:play #t :statistics #t) (barred-owl-1 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Say's phoebe (define-animal (says-phoebe beg amp) (let ((dur 0.64)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.017 0.223 0.039 0.372 0.056 0.000 0.101 0.000 0.122 0.132 0.145 0.000 0.192 0.000 0.214 0.639 0.232 0.507 0.324 0.981 0.415 0.402 0.496 0.413 0.610 0.317 0.771 0.287 0.970 0.179 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .98 2 .07 3 .08 4 .01 5 .003))) (frqf (make-env '(0.000 0.221 0.022 0.305 0.032 0.318 0.040 0.297 0.054 0.225 0.106 0.229 0.111 0.250 0.130 0.240 0.139 0.215 0.196 0.238 0.205 0.274 0.223 0.322 0.249 0.337 0.295 0.333 0.324 0.310 0.356 0.293 0.584 0.265 0.781 0.261 0.958 0.250 1.000 0.204) :duration dur :scaler (hz->radians 10040.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (says-phoebe 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Yellow-rumped warbler (define-animal (yellow-rumped-warbler beg amp) (let ((dur 1.6)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.009 0.038 0.022 0.220 0.028 0.000 0.037 0.152 0.048 0.000 0.079 0.000 0.088 0.218 0.094 0.000 0.109 0.132 0.122 0.488 0.127 0.363 0.128 0.000 0.133 0.303 0.141 0.381 0.147 0.000 0.178 0.000 0.196 0.296 0.201 0.000 0.216 0.432 0.227 0.515 0.231 0.000 0.242 0.601 0.250 0.000 0.269 0.000 0.290 0.187 0.298 0.040 0.305 0.227 0.311 0.000 0.316 0.486 0.327 0.579 0.331 0.000 0.336 0.407 0.343 0.459 0.345 0.000 0.371 0.000 0.376 0.085 0.386 0.122 0.393 0.399 0.397 0.000 0.405 0.194 0.412 0.045 0.419 0.470 0.428 0.505 0.431 0.000 0.444 0.630 0.446 0.100 0.458 0.000 0.474 0.000 0.477 0.114 0.488 0.169 0.496 0.412 0.500 0.000 0.505 0.207 0.509 0.100 0.516 0.265 0.524 0.748 0.530 0.599 0.537 0.000 0.541 0.613 0.545 0.819 0.551 0.000 0.577 0.000 0.584 0.151 0.591 0.200 0.601 0.577 0.607 0.004 0.610 0.319 0.614 0.111 0.618 0.283 0.621 0.132 0.626 0.993 0.637 0.924 0.642 0.000 0.644 0.621 0.652 0.855 0.655 0.000 0.681 0.000 0.687 0.156 0.696 0.214 0.706 0.613 0.709 0.000 0.711 0.187 0.719 0.120 0.726 0.902 0.733 0.494 0.737 0.955 0.749 0.000 0.753 0.673 0.768 0.000 0.784 0.000 0.810 0.768 0.821 0.227 0.829 0.000 0.849 0.592 0.855 0.281 0.863 0.000 0.874 0.354 0.875 0.000 0.901 0.000 0.913 0.430 0.931 0.517 0.941 0.000 0.948 0.000 0.965 0.454 0.971 0.169 0.975 0.120 0.987 0.225 0.993 0.045 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .99 2 .01 3 .005))) (frqf (make-env '(0.000 0.371 0.017 0.571 0.030 0.491 0.035 0.397 0.037 0.321 0.043 0.466 0.047 0.438 0.052 0.387 0.087 0.344 0.095 0.417 0.102 0.290 0.106 0.458 0.108 0.507 0.117 0.542 0.122 0.513 0.131 0.446 0.135 0.384 0.136 0.323 0.145 0.446 0.150 0.407 0.151 0.356 0.185 0.403 0.189 0.442 0.190 0.337 0.201 0.440 0.205 0.294 0.212 0.483 0.218 0.536 0.224 0.515 0.234 0.434 0.235 0.317 0.243 0.446 0.248 0.436 0.252 0.309 0.279 0.352 0.286 0.438 0.290 0.405 0.291 0.356 0.298 0.425 0.302 0.307 0.307 0.468 0.311 0.530 0.318 0.530 0.330 0.436 0.335 0.350 0.340 0.429 0.343 0.458 0.345 0.436 0.350 0.382 0.377 0.389 0.381 0.434 0.386 0.350 0.397 0.446 0.403 0.331 0.408 0.495 0.411 0.517 0.417 0.526 0.428 0.458 0.431 0.417 0.434 0.348 0.441 0.476 0.449 0.401 0.479 0.362 0.485 0.431 0.490 0.354 0.499 0.438 0.502 0.342 0.509 0.515 0.513 0.540 0.521 0.515 0.529 0.456 0.536 0.366 0.541 0.479 0.551 0.374 0.582 0.370 0.588 0.440 0.591 0.348 0.601 0.421 0.605 0.356 0.611 0.515 0.616 0.532 0.623 0.517 0.636 0.425 0.638 0.339 0.644 0.464 0.650 0.438 0.654 0.395 0.655 0.344 0.680 0.368 0.688 0.425 0.692 0.356 0.702 0.421 0.706 0.344 0.710 0.497 0.718 0.509 0.727 0.476 0.740 0.397 0.743 0.470 0.747 0.534 0.754 0.497 0.760 0.446 0.788 0.499 0.793 0.528 0.796 0.448 0.814 0.507 0.816 0.374 0.826 0.352 0.835 0.360 0.839 0.389 0.846 0.438 0.851 0.337 0.862 0.333 0.868 0.395 0.900 0.485 0.907 0.489 0.909 0.431 0.922 0.452 0.926 0.485 0.934 0.317 0.943 0.350 0.954 0.352 0.961 0.423 0.965 0.325 0.974 0.317 0.983 0.376 0.985 0.436 1.000 0.454) :duration dur :scaler (hz->radians 10125.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (yellow-rumped-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Purple finch (define-animal (purple-finch beg amp) (let ((dur 2.5)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.0000 0.0000 0.0150 0.0420 0.0210 0.0018 0.0291 0.0804 0.0355 0.1682 0.0402 0.0658 0.0428 0.2468 0.0449 0.0676 0.0505 0.1243 0.0522 0.0000 0.0651 0.0000 0.0702 0.1298 0.0741 0.0841 0.0766 0.1590 0.0848 0.0000 0.0890 0.0530 0.0950 0.2724 0.1006 0.2249 0.1032 0.1499 0.1057 0.3784 0.1104 0.2578 0.1143 0.0000 0.1259 0.0000 0.1284 0.1901 0.1323 0.1079 0.1361 0.2358 0.1417 0.0000 0.1468 0.0000 0.1507 0.2486 0.1558 0.2888 0.1614 0.1207 0.1648 0.5503 0.1678 0.2267 0.1691 0.3693 0.1717 0.0000 0.1858 0.0000 0.1896 0.1938 0.1931 0.0859 0.1952 0.2267 0.2016 0.0000 0.2063 0.0420 0.2149 0.4771 0.2188 0.4004 0.2209 0.1865 0.2256 0.6399 0.2265 0.2596 0.2295 0.4644 0.2354 0.0000 0.2436 0.0000 0.2491 0.2431 0.2513 0.1718 0.2568 0.3528 0.2616 0.0000 0.2748 0.0640 0.2868 0.4388 0.2967 0.4954 0.3018 0.0000 0.3215 0.0000 0.3318 0.1865 0.3339 0.1097 0.3412 0.7697 0.3438 0.3857 0.3450 0.7770 0.3472 0.4260 0.3485 0.7843 0.3502 0.3565 0.3528 0.7751 0.3566 0.0000 0.3669 0.0000 0.3716 0.5686 0.3737 0.2303 0.3776 0.9854 0.3801 0.3108 0.3840 0.3309 0.3857 0.5960 0.3908 0.1207 0.3934 0.5759 0.4003 0.0000 0.4127 0.0000 0.4199 0.2176 0.4234 0.1152 0.4272 0.5850 0.4281 0.2980 0.4324 0.5009 0.4345 0.3693 0.4379 0.4241 0.4405 0.2943 0.4452 0.5046 0.4533 0.1408 0.4568 0.5795 0.4606 0.0000 0.4735 0.0000 0.4837 0.8501 0.4842 0.6088 0.4880 0.7093 0.4893 0.6581 0.4923 0.9049 0.4953 0.1828 0.4974 0.7770 0.5009 0.0859 0.5060 0.8537 0.5132 0.0000 0.5256 0.0000 0.5321 0.7477 0.5368 0.3364 0.5420 0.6527 0.5454 0.2834 0.5488 0.2212 0.5518 0.0512 0.5552 0.6691 0.5634 0.0000 0.5766 0.0000 0.5775 0.3364 0.5809 0.0000 0.5826 0.4826 0.5860 0.0037 0.5920 0.6362 0.5963 0.5448 0.5967 0.6600 0.5993 0.5759 0.6002 0.6289 0.6040 0.5503 0.6100 0.9360 0.6160 0.0000 0.6271 0.0000 0.6280 0.3583 0.6322 0.0000 0.6327 0.4388 0.6366 0.0000 0.6430 0.7733 0.6468 0.6088 0.6481 0.7532 0.6528 0.7166 0.6541 0.4899 0.6563 0.8355 0.6648 0.0000 0.6777 0.0000 0.6781 0.2523 0.6817 0.0000 0.6832 0.2943 0.6870 0.0000 0.6952 0.5850 0.7033 0.4095 0.7098 0.6728 0.7145 0.0000 0.7286 0.0000 0.7295 0.1609 0.7334 0.0000 0.7359 0.3382 0.7380 0.0000 0.7483 0.4845 0.7539 0.5814 0.7624 0.0000 0.7748 0.0000 0.7783 0.2633 0.7811 0.0000 0.7825 0.2541 0.7869 0.0000 0.7958 0.4717 0.8031 0.5393 0.8116 0.0000 0.8271 0.0000 0.8288 0.2431 0.8315 0.0000 0.8339 0.0000 0.8399 0.2687 0.8433 0.1700 0.8446 0.3967 0.8506 0.4826 0.8600 0.0000 0.8754 0.0000 0.8767 0.1207 0.8796 0.0000 0.8818 0.2377 0.8844 0.0000 0.8951 0.3528 0.9114 0.0000 0.9255 0.0000 0.9285 0.1024 0.9322 0.0000 0.9336 0.1737 0.9388 0.0000 0.9439 0.0859 0.9482 0.2431 0.9521 0.1024 0.9546 0.2761 0.9636 0.0000 0.9850 0.0000 0.9927 0.0402 1.0000 0.0000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .005 4 .003))) (rnd (make-rand-interp 800 (hz->radians 200))) (frqf (make-env '(0.0000 0.2374 0.0125 0.1869 0.0192 0.1616 0.0250 0.1835 0.0370 0.3316 0.0388 0.2407 0.0419 0.3013 0.0450 0.2003 0.0473 0.2694 0.0513 0.2155 0.0646 0.2003 0.0727 0.2761 0.0728 0.2020 0.0798 0.2559 0.0852 0.1751 0.0936 0.2424 0.0994 0.3535 0.1025 0.2424 0.1048 0.3030 0.1074 0.2138 0.1110 0.2576 0.1271 0.2290 0.1315 0.2037 0.1355 0.2374 0.1404 0.3451 0.1453 0.1684 0.1587 0.3350 0.1605 0.2542 0.1632 0.3131 0.1658 0.2525 0.1690 0.2744 0.1868 0.2239 0.1935 0.3249 0.1979 0.2357 0.2069 0.1835 0.2167 0.3316 0.2207 0.2559 0.2225 0.3199 0.2269 0.2273 0.2300 0.2795 0.2341 0.2290 0.2461 0.2222 0.2479 0.2559 0.2514 0.2138 0.2555 0.2576 0.2595 0.2020 0.2662 0.1667 0.2853 0.2458 0.2951 0.2778 0.3027 0.2256 0.3255 0.2306 0.3290 0.1902 0.3388 0.2811 0.3433 0.3232 0.3455 0.2424 0.3486 0.3754 0.3513 0.2155 0.3522 0.3333 0.3549 0.2879 0.3691 0.3519 0.3749 0.2710 0.3785 0.3384 0.3807 0.2811 0.3848 0.2576 0.3870 0.3064 0.3923 0.2492 0.3941 0.2997 0.3968 0.2744 0.4155 0.1852 0.4222 0.2357 0.4289 0.2845 0.4391 0.2845 0.4463 0.2795 0.4525 0.2340 0.4579 0.2980 0.4610 0.2138 0.4753 0.2980 0.4819 0.3249 0.4864 0.3636 0.4900 0.4040 0.4931 0.3468 0.4962 0.2795 0.4993 0.3535 0.5029 0.2542 0.5051 0.3788 0.5087 0.3114 0.5127 0.2811 0.5145 0.2189 0.5310 0.3519 0.5372 0.2811 0.5408 0.3603 0.5439 0.2862 0.5515 0.2441 0.5582 0.2997 0.5631 0.2239 0.5778 0.3131 0.5809 0.5017 0.5863 0.3266 0.5934 0.3990 0.5961 0.3064 0.6054 0.3603 0.6135 0.2761 0.6291 0.3215 0.6349 0.5051 0.6371 0.2997 0.6433 0.3822 0.6469 0.3232 0.6540 0.3451 0.6603 0.2929 0.6643 0.2458 0.6799 0.3114 0.6830 0.4983 0.6906 0.2424 0.6973 0.3098 0.7044 0.3485 0.7107 0.3165 0.7156 0.2593 0.7321 0.3249 0.7356 0.5286 0.7445 0.2138 0.7477 0.3030 0.7543 0.3064 0.7633 0.2256 0.7793 0.2761 0.7864 0.5034 0.7900 0.2189 0.7954 0.2205 0.7967 0.2778 0.8038 0.3182 0.8123 0.1734 0.8292 0.2290 0.8324 0.4293 0.8377 0.2155 0.8444 0.2121 0.8471 0.2929 0.8533 0.2963 0.8613 0.2037 0.8823 0.2391 0.8850 0.4478 0.8903 0.1886 0.8939 0.2256 0.8979 0.2946 0.9015 0.3131 0.9104 0.2088 0.9309 0.2172 0.9358 0.5556 0.9403 0.2172 0.9456 0.2290 0.9563 0.3215 0.9666 0.2104 0.9924 0.1785 1.0000 0.1801) :duration dur :scaler (hz->radians 10035.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (rand-interp rnd))))))))) ;; (with-sound (:play #t) (purple-finch 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Northern goshawk (define-animal (northern-goshawk beg amp) (let ((dur 0.31)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.124 0.399 0.174 0.520 0.223 0.881 0.355 0.998 0.499 0.644 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .1 2 .8 3 .3 4 .05 5 .01 6 .005 7 .003))) (frqf (make-env '(0.000 0.137 0.126 0.138 0.237 0.144 0.314 0.142 0.400 0.140 1.000 0.130) :duration dur :scaler (hz->radians 9040.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (northern-goshawk 0 .25)) ;;;-------------------------------------------------------------------------------- ;;; ;;; Common Gull (define-animal (common-gull beg amp) (let ((dur 0.42)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 1.4 1 1.7 .8 1.8 .2 2 0) :duration dur :scaler amp)) (gen1 (make-rcos 1200 0.5)) (gen2 (make-rxycos 1800 (/ 1200 1800.0) 0.75)) (frqf (make-env '(0.000 0.326 0.057 0.599 0.075 0.602 0.102 0.637 0.140 0.618 0.255 0.626 0.378 0.607 0.401 0.589 0.441 0.584 0.491 0.562 0.591 0.544 0.628 0.557 0.675 0.541 0.733 0.538 0.756 0.523 0.809 0.501 0.853 0.469 0.887 0.390 1.000 0.325) :duration dur :offset (hz->radians -1200) :scaler (hz->radians 2000.0))) (intrpf (make-env '(0 1 .2 1 .5 0 1 0) :duration dur :scaler .3 :base 10)) (rnd (make-rand-interp 800 .2)) (attf (make-env '(0 1 .15 0 1 0) :duration dur :base 10)) (frm1 (make-formant 2300 .99)) (frm2 (make-formant 6100 .98)) (frm3 (make-formant 3800 .98)) (frm4 (make-formant 1800 .99)) (fr1 (* 10 (sin (hz->radians 2300)))) (fr2 (* 6 (sin (hz->radians 6100)))) (fr3 (* 10 (sin (hz->radians 3800)))) (fr4 (* 14 (sin (hz->radians 1800)))) (rnd2 (make-rand-interp 300 (hz->radians 15)))) (let ((fb (vector frm1 frm2 frm3 frm4)) (fs (float-vector fr1 fr2 fr3 fr4))) (set! fb (make-formant-bank fb fs)) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd2) (* (env attf) (rand-interp rnd))))) (outa i (* (env ampf) (formant-bank fb (+ (rcos gen1 frq) (* (env intrpf) (rxycos gen2 frq)))))))))))) ;; (with-sound (:play #t) (common-gull 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Ash-throated flycatcher (define-animal (ash-throated-flycatcher beg amp) (let ((dur 0.47)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.018 0.176 0.030 0.756 0.041 1.000 0.052 0.916 0.066 0.198 0.097 0.046 0.128 0.000 0.165 0.000 0.211 0.141 0.224 0.108 0.244 0.149 0.261 0.105 0.267 0.031 0.272 0.218 0.278 0.125 0.302 0.237 0.315 0.510 0.336 0.255 0.346 0.000 0.369 0.000 0.386 0.345 0.403 0.246 0.412 0.000 0.481 0.000 0.490 0.084 0.504 0.330 0.514 0.174 0.527 0.070 0.531 0.000 0.546 0.000 0.550 0.055 0.556 0.000 0.560 0.000 0.565 0.053 0.571 0.000 0.575 0.000 0.580 0.048 0.587 0.000 0.592 0.000 0.597 0.064 0.601 0.000 0.605 0.000 0.609 0.084 0.616 0.000 0.620 0.000 0.623 0.086 0.631 0.000 0.636 0.000 0.638 0.103 0.644 0.000 0.650 0.000 0.653 0.095 0.657 0.000 0.663 0.000 0.669 0.105 0.675 0.000 0.679 0.000 0.683 0.046 0.689 0.000 0.722 0.000 0.727 0.084 0.736 0.312 0.741 0.365 0.747 0.314 0.756 0.000 0.819 0.000 0.830 0.086 0.838 0.369 0.845 0.411 0.854 0.365 0.861 0.000 0.864 0.092 0.869 0.081 0.873 0.200 0.881 0.336 0.889 0.374 0.901 0.033 0.908 0.000 0.913 0.066 0.929 0.310 0.936 0.266 0.940 0.079 0.948 0.000 0.967 0.044 0.973 0.101 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .98 2 .02 4 .01))) (frqf (make-env '(0.000 0.317 0.013 0.368 0.029 0.464 0.048 0.485 0.062 0.469 0.100 0.310 0.176 0.320 0.224 0.389 0.242 0.395 0.270 0.370 0.280 0.492 0.284 0.304 0.292 0.363 0.305 0.411 0.322 0.464 0.347 0.306 0.376 0.269 0.386 0.368 0.396 0.398 0.407 0.366 0.415 0.290 0.485 0.288 0.520 0.405 0.536 0.315 0.690 0.313 0.728 0.267 0.733 0.350 0.743 0.375 0.756 0.345 0.759 0.281 0.827 0.285 0.834 0.349 0.850 0.375 0.868 0.312 0.878 0.358 0.886 0.375 0.897 0.352 0.910 0.297 0.923 0.342 0.932 0.361 0.942 0.342 0.960 0.283 0.968 0.327 0.978 0.350 0.989 0.335 1.000 0.290) :duration dur :scaler (hz->radians 6070.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (ash-throated-flycatcher 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; White-header woodpecker (define-animal (white-headed-woodpecker beg amp) ;; spectrum travels right off the top -- I wonder how high it actually goes (let ((dur 0.16)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.053 0.952 0.066 0.865 0.079 0.386 0.091 0.937 0.145 0.963 0.182 0.923 0.197 0.384 0.221 0.892 0.256 0.751 0.298 0.000 0.410 0.000 0.430 0.915 0.450 0.836 0.464 0.307 0.479 0.873 0.496 0.952 0.531 0.886 0.554 0.291 0.575 0.892 0.606 0.717 0.654 0.000 0.775 0.000 0.801 0.712 0.814 0.233 0.822 0.712 0.893 0.712 0.923 0.225 0.938 0.758 0.959 0.640 1.000 0.000 ) :duration dur :scaler amp)) (frqf1 (make-env '(0.000 0.106 0.051 0.119 0.063 0.177 0.087 0.230 0.198 0.228 0.211 0.175 0.236 0.153 0.282 0.122 0.427 0.103 0.465 0.156 0.483 0.214 0.542 0.220 0.563 0.159 0.588 0.146 0.615 0.095 0.767 0.122 0.8 0.2 0.851 0.2 0.871 0.16 0.903 0.148 0.939 0.143 .95 .14) :duration dur :scaler (hz->radians (/ 22050.0 3.0)))) (frqf2 (make-env '(0.000 0.230 0.061 0.262 0.088 0.341 0.152 0.323 0.206 0.341 0.219 0.265 0.237 0.235 0.450 0.220 0.459 0.317 0.514 0.302 0.558 0.354 0.605 0.246 0.772 0.246 0.838 0.323 0.857 0.278 0.864 0.325 0.914 0.222 .95 .22) :duration dur :scaler (hz->radians (/ 22050.0 5.0)))) (gen1 (make-polywave 0.0 (list 1 (* .8 .01) 2 (* .8 .1) 3 (* .8 .6) 4 (* .8 .02) 6 (* .8 .4) 7 (* .8 .05) 9 (* .8 .1) 10 (* .8 .1) 12 (* .8 .01)))) (gen2 (make-polywave 0.0 (list 5 (* .2 .9) 8 (* .2 .3) 11 (* .2 .1)))) (rnd (make-sawtooth-wave 700 .01)) (rndf (make-env '(0 0 .01 1 .08 .02 .25 .02 .3 1 .45 1 .47 .03 .64 .01 .65 1 .75 1 .77 .05 .92 .01 1 1) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((noise (* (env rndf) (sawtooth-wave rnd)))) (outa i (* (env ampf) (+ (polywave gen1 (+ (env frqf1) noise)) (polywave gen2 (+ (env frqf2) (* 10.0 noise))))))))))) ;; (with-sound (:play #t) (white-headed-woodpecker 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Phainopepla (define-animal (phainopepla beg amp) (let ((dur 0.26)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.063 0.073 0.119 0.181 0.142 0.290 0.178 0.617 0.192 0.525 0.236 0.288 0.255 0.000 0.272 0.557 0.285 0.178 0.296 0.095 0.393 0.088 0.501 0.000 0.522 0.108 0.538 0.634 0.647 0.000 0.663 0.000 0.681 0.484 0.704 0.211 0.777 0.643 0.850 0.961 0.880 0.998 0.899 0.974 0.958 0.277 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .9 2 .1 3 .01))) (frqf (make-env '(0.000 0.203 0.061 0.309 0.259 0.317 0.276 0.533 0.300 0.720 0.329 0.739 0.373 0.697 0.450 0.792 0.496 0.836 0.516 0.794 0.525 0.689 0.532 0.417 0.550 0.351 0.573 0.314 0.607 0.296 0.624 0.351 0.629 0.435 0.652 0.425 0.660 0.219 0.698 0.398 0.726 0.441 0.839 0.433 1.000 0.427) :duration dur :scaler (hz->radians 8040.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (phainopepla 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Golden-crowned sparrow (define-animal (golden-crowned-sparrow beg amp) (let ((dur 2.13)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.079 0.343 0.188 0.391 0.301 0.504 0.343 0.963 0.379 0.887 0.388 0.000 0.459 0.000 0.474 0.480 0.494 0.549 0.595 0.984 0.637 1.000 0.688 0.720 0.701 0.000 0.770 0.000 0.795 0.311 0.863 0.420 0.916 0.383 0.985 0.272 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .9 2 .01 3 .1))) (frqf (make-env '(0.000 0.814 0.028 0.730 0.064 0.690 0.122 0.549 0.156 0.551 0.178 0.573 0.207 0.544 0.272 0.556 0.296 0.580 0.320 0.549 0.343 0.501 0.377 0.468 0.452 0.446 0.467 0.475 0.488 0.470 0.523 0.477 0.529 0.561 0.535 0.480 0.572 0.473 0.589 0.494 0.612 0.477 0.655 0.456 0.672 0.482 0.691 0.463 0.767 0.413 0.819 0.394 0.861 0.396 0.865 0.449 0.873 0.408 0.894 0.401 0.930 0.401 0.975 0.396 1.000 0.329 ) :duration dur :scaler (hz->radians 8040.0))) (vib (make-rand-interp 50 (hz->radians 80)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (rand-interp vib))))))))) ;; (with-sound (:play #t) (golden-crowned-sparrow 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; House finch (define-animal (house-finch beg amp) (let ((dur 3.16)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.014 0.128 0.021 0.000 0.052 0.000 0.058 0.146 0.062 0.314 0.068 0.301 0.073 0.000 0.097 0.000 0.101 0.296 0.104 0.151 0.106 0.447 0.114 0.459 0.119 0.143 0.125 0.000 0.151 0.000 0.162 0.415 0.180 0.375 0.188 0.000 0.209 0.000 0.212 0.353 0.214 0.175 0.217 0.442 0.222 0.153 0.225 0.528 0.232 0.002 0.246 0.000 0.247 0.109 0.258 0.030 0.259 0.294 0.263 0.180 0.267 0.333 0.271 0.000 0.290 0.000 0.295 0.128 0.298 0.388 0.303 0.000 0.313 0.857 0.322 0.000 0.346 0.000 0.358 0.990 0.359 0.528 0.361 0.778 0.370 0.000 0.384 0.000 0.390 0.504 0.395 0.227 0.399 0.328 0.409 0.000 0.420 0.993 0.425 0.402 0.433 0.000 0.444 0.000 0.449 0.380 0.455 0.978 0.461 0.000 0.472 0.000 0.480 0.477 0.487 0.000 0.492 0.558 0.500 0.430 0.506 0.000 0.516 0.000 0.525 0.844 0.533 0.104 0.537 0.072 0.541 0.538 0.550 0.067 0.557 0.067 0.559 0.232 0.564 0.528 0.567 0.064 0.573 0.901 0.579 0.084 0.582 0.551 0.587 0.430 0.593 0.000 0.606 0.000 0.611 0.257 0.618 0.000 0.625 0.079 0.629 0.516 0.636 0.642 0.639 0.489 0.643 0.104 0.653 0.000 0.672 0.000 0.680 0.736 0.694 0.696 0.701 0.121 0.707 0.057 0.713 0.558 0.722 0.000 0.752 0.000 0.757 0.723 0.774 0.546 0.782 0.116 0.794 0.207 0.801 0.499 0.818 0.689 0.833 0.388 0.847 0.000 0.859 0.000 0.863 0.123 0.867 0.726 0.872 0.000 0.878 0.116 0.879 0.385 0.885 0.669 0.944 0.835 0.989 0.328 0.995 0.035 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.0000 0.3997 0.0085 0.4810 0.0103 0.3943 0.0166 0.4228 0.0573 0.4268 0.0605 0.4932 0.0663 0.4160 0.0708 0.4363 0.0985 0.4228 0.1008 0.2846 0.1066 0.4228 0.1146 0.3089 0.1187 0.3238 0.1339 0.3225 0.1487 0.4864 0.1617 0.4607 0.1769 0.4512 0.1818 0.3740 0.1948 0.3794 0.2100 0.4214 0.2114 0.2859 0.2172 0.4350 0.2248 0.3157 0.2293 0.3320 0.2427 0.5054 0.2512 0.4214 0.2557 0.3374 0.2584 0.4648 0.2620 0.5434 0.2665 0.3835 0.2888 0.4119 0.2942 0.3794 0.3014 0.5813 0.3032 0.3130 0.3081 0.4892 0.3144 0.3266 0.3193 0.3388 0.3395 0.4065 0.3462 0.4824 0.3542 0.4458 0.3605 0.3333 0.3645 0.3144 0.3820 0.2927 0.3842 0.2751 0.3887 0.3360 0.3932 0.4173 0.4017 0.5705 0.4035 0.4607 0.4107 0.3862 0.4187 0.3360 0.4263 0.2737 0.4438 0.3062 0.4456 0.3686 0.4478 0.4228 0.4541 0.3266 0.4635 0.3225 0.4720 0.2317 0.4765 0.3225 0.4814 0.3726 0.4828 0.4702 0.4877 0.4363 0.4913 0.3672 0.4922 0.3130 0.4993 0.2846 0.5204 0.3496 0.5280 0.2913 0.5311 0.2195 0.5361 0.4241 0.5428 0.3089 0.5567 0.2913 0.5584 0.4295 0.5625 0.3198 0.5665 0.5000 0.5723 0.4065 0.5808 0.3225 0.5902 0.2060 0.6064 0.2642 0.6117 0.3374 0.6122 0.2195 0.6189 0.1789 0.6296 0.3591 0.6444 0.1599 0.6458 0.4160 0.6771 0.4201 0.6950 0.4214 0.7026 0.2778 0.7112 0.2764 0.7228 0.1897 0.7394 0.4092 0.7546 0.4160 0.7721 0.4187 0.7895 0.3198 0.8343 0.3184 0.8616 0.2344 0.8634 0.3808 0.8697 0.2276 0.8804 0.3279 0.9149 0.3835 0.9472 0.4688 1.0000 0.8306) :duration dur :scaler (hz->radians 9130.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .01))) (gen2 (make-polywave 0.0 '(1 .98 2 .005))) (buzz (make-oscil 0)) (buzzsweep (make-nrxysin :n 5 :r .5)) (bsweep (hz->radians 500)) (buzzf (make-env '(0 0 .14 0 .15 1 .19 1 .20 0 .66 0 .67 1 1 1) :duration dur)) (buzzf-1 (make-env '(0 0 .14 0 .15 1 .19 1 .20 0 .66 0 .67 1 1 1) :duration dur :offset 1.0 :scaler -1.0)) (buzzfrqf (make-env '(0 110 .5 110 .6 70 .85 70 .86 130 1 130) :duration dur :scaler (hz->radians 1.0))) (rnd (make-rand-interp 400 (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf)) (bfrq (env buzzfrqf))) (outa i (* (env ampf) (+ (* (env buzzf-1) (polywave gen1 frq)) (* (env buzzf) (+ .1 (* .9 (abs (oscil buzz bfrq)))) (polywave gen2 (+ frq (* bsweep (nrxysin buzzsweep bfrq)) (rand-interp rnd)))))))))))) ;; (with-sound (:play #t) (house-finch 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Ruby-crowned kinglet (define-animal (ruby-crowned-kinglet beg amp) (let ((dur 2.17)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.017 0.053 0.025 0.000 0.034 0.000 0.044 0.088 0.053 0.076 0.057 0.000 0.112 0.000 0.133 0.298 0.151 0.060 0.167 0.158 0.179 0.000 0.214 0.000 0.232 0.496 0.247 0.100 0.265 0.745 0.275 0.000 0.310 0.000 0.318 0.601 0.326 0.714 0.344 0.169 0.361 0.334 0.372 0.000 0.401 0.000 0.417 1.000 0.433 0.115 0.450 0.979 0.459 0.000 0.496 0.000 0.506 0.745 0.516 0.778 0.526 0.322 0.537 0.236 0.546 0.258 0.553 0.212 0.559 0.000 0.599 0.000 0.613 0.967 0.631 0.189 0.647 0.933 0.656 0.000 0.697 0.000 0.706 0.726 0.714 0.589 0.719 0.714 0.729 0.236 0.737 0.160 0.743 0.241 0.754 0.198 0.761 0.000 0.808 0.000 0.826 0.752 0.839 0.098 0.856 0.599 0.862 0.558 0.868 0.000 0.921 0.000 0.932 0.470 0.941 0.511 0.951 0.179 0.976 0.229 0.980 0.057 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .004))) (frqf (make-env '(0.000 0.671 0.017 0.698 0.026 0.786 0.031 0.785 0.032 0.556 0.039 0.556 0.053 0.646 0.059 0.591 0.119 0.476 0.146 0.284 0.193 0.269 0.216 0.549 0.225 0.464 0.238 0.564 0.244 0.477 0.250 0.411 0.262 0.411 0.268 0.442 0.274 0.414 0.316 0.446 0.337 0.289 0.363 0.285 0.368 0.267 0.391 0.287 0.404 0.523 0.410 0.481 0.423 0.553 0.432 0.426 0.441 0.401 0.452 0.441 0.458 0.396 0.502 0.444 0.528 0.285 0.550 0.285 0.557 0.259 0.572 0.260 0.594 0.513 0.607 0.482 0.618 0.568 0.626 0.529 0.629 0.451 0.642 0.429 0.650 0.462 0.653 0.427 0.703 0.442 0.729 0.282 0.750 0.285 0.756 0.259 0.778 0.259 0.793 0.616 0.806 0.588 0.813 0.481 0.825 0.571 0.841 0.444 0.851 0.416 0.860 0.442 0.923 0.444 0.952 0.279 1.000 0.275) :duration dur :scaler (hz->radians 9060.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (ruby-crowned-kinglet 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Green-tailed towhee ;;; ;;; not very elegant, but a real test of the envelope editor (define-animal (green-tailed-towhee beg amp) (let ((dur 1.86)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.010 0.168 0.013 0.000 0.018 0.000 0.021 0.200 0.027 0.255 0.033 0.119 0.039 0.000 0.141 0.000 0.149 0.104 0.159 0.586 0.163 0.438 0.166 0.586 0.168 0.374 0.171 0.519 0.173 0.429 0.176 0.487 0.179 0.284 0.180 0.554 0.184 0.261 0.186 0.539 0.189 0.270 0.190 0.530 0.194 0.243 0.197 0.449 0.200 0.272 0.202 0.443 0.205 0.243 0.207 0.377 0.218 0.200 0.222 0.000 0.277 0.000 0.286 0.122 0.289 0.417 0.292 0.055 0.296 0.417 0.299 0.490 0.303 0.058 0.307 0.336 0.309 0.000 0.323 0.093 0.327 0.658 0.330 0.087 0.335 0.530 0.341 0.000 0.343 0.438 0.346 0.000 0.356 0.061 0.362 0.232 0.365 0.872 0.368 0.145 0.372 0.655 0.378 0.061 0.381 0.542 0.383 0.000 0.392 0.000 0.397 0.159 0.403 0.739 0.406 0.081 0.411 0.600 0.416 0.000 0.420 0.452 0.422 0.000 0.432 0.078 0.437 0.235 0.441 0.788 0.445 0.078 0.450 0.614 0.454 0.078 0.459 0.357 0.460 0.000 0.470 0.081 0.476 0.281 0.479 0.733 0.485 0.070 0.489 0.588 0.493 0.000 0.498 0.194 0.500 0.000 0.533 0.000 0.535 0.374 0.538 0.090 0.550 1.000 0.557 0.991 0.572 0.078 0.577 0.145 0.583 0.354 0.612 0.000 0.646 0.000 0.663 0.588 0.671 0.583 0.686 0.081 0.701 0.591 0.706 0.577 0.721 0.000 0.759 0.000 0.763 0.420 0.765 0.084 0.768 0.191 0.772 0.136 0.775 0.000 0.778 0.464 0.780 0.119 0.783 0.212 0.788 0.154 0.790 0.003 0.794 0.571 0.796 0.136 0.799 0.241 0.803 0.165 0.807 0.009 0.810 0.710 0.812 0.125 0.814 0.275 0.819 0.174 0.822 0.017 0.824 0.536 0.828 0.136 0.831 0.272 0.835 0.186 0.837 0.006 0.841 0.684 0.844 0.142 0.846 0.345 0.855 0.006 0.856 0.617 0.860 0.130 0.862 0.287 0.870 0.006 0.873 0.606 0.876 0.142 0.879 0.290 0.883 0.154 0.885 0.009 0.889 0.623 0.892 0.139 0.893 0.281 0.903 0.023 0.904 0.600 0.908 0.130 0.911 0.241 0.918 0.006 0.921 0.580 0.924 0.110 0.926 0.209 0.934 0.009 0.938 0.455 0.940 0.090 0.943 0.159 0.951 0.003 0.955 0.391 0.956 0.093 0.959 0.136 0.967 0.012 0.970 0.386 0.974 0.116 0.983 0.012 0.987 0.333 0.990 0.049 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-oscil)) (frqf (make-env '(0.0000 0.3575 0.0067 0.4860 0.0110 0.5475 0.0119 0.3203 0.0181 0.3911 0.0219 0.5438 0.0229 0.3389 0.0267 0.4860 0.0300 0.3948 0.0334 0.3259 0.1411 0.3315 0.1478 0.4953 0.1554 0.4413 0.1635 0.3296 0.1640 0.4376 0.1697 0.3315 0.1698 0.4302 0.1755 0.3389 0.1759 0.4153 0.1797 0.3296 0.1821 0.4358 0.1859 0.3240 0.1864 0.4078 0.1892 0.3575 0.1907 0.4358 0.1959 0.3240 0.1964 0.4134 0.2031 0.3128 0.2032 0.4376 0.2078 0.3035 0.2126 0.3166 0.2127 0.4246 0.2183 0.3464 0.2194 0.4320 0.2216 0.3669 0.2698 0.3892 0.2827 0.7318 0.2898 0.5214 0.2941 0.3054 0.2979 0.5978 0.3046 0.3091 0.3207 0.7745 0.3241 0.6685 0.3322 0.2868 0.3346 0.5512 0.3394 0.2626 0.3547 0.8209 0.3608 0.6462 0.3689 0.2756 0.3723 0.5196 0.3785 0.2868 0.3918 0.8425 0.3999 0.6331 0.4066 0.3110 0.4109 0.5568 0.4175 0.3147 0.4280 0.8541 0.4337 0.7263 0.4409 0.5531 0.4447 0.2961 0.4485 0.6555 0.4561 0.2607 0.4682 0.8375 0.4743 0.6853 0.4790 0.5661 0.4833 0.3315 0.4871 0.6089 0.4933 0.3315 0.4976 0.6462 0.5353 0.4860 0.5362 0.6872 0.5377 0.2849 0.5405 0.4488 0.5458 0.4860 0.5567 0.4600 0.5648 0.3464 0.5758 0.2458 0.5877 0.3240 0.6025 0.2495 0.6482 0.3222 0.6568 0.4860 0.6754 0.4618 0.6888 0.4823 0.6892 0.2775 0.7021 0.3315 0.7188 0.2682 0.7541 0.2793 0.7610 0.6542 0.7649 0.2737 0.7650 0.6574 0.7717 0.4097 0.7769 0.6499 0.7798 0.3222 0.7822 0.5791 0.7879 0.3743 0.7927 0.6480 0.7939 0.3003 0.7974 0.6034 0.8022 0.3799 0.8065 0.6518 0.8117 0.2961 0.8136 0.6425 0.8184 0.4041 0.8241 0.6499 0.8255 0.2896 0.8282 0.6167 0.8341 0.4004 0.8379 0.6610 0.8442 0.2857 0.8451 0.6145 0.8506 0.3969 0.8537 0.6491 0.8585 0.3066 0.8600 0.6269 0.8652 0.3816 0.8700 0.6422 0.8755 0.2760 0.8756 0.6238 0.8831 0.3697 0.8870 0.6499 0.8919 0.2794 0.8923 0.6145 0.8985 0.3526 0.9021 0.6405 0.9066 0.3408 0.9075 0.3066 0.9080 0.6071 0.9145 0.3748 0.9175 0.6388 0.9238 0.3135 0.9249 0.6065 0.9306 0.3714 0.9351 0.6303 0.9390 0.2998 0.9404 0.5791 0.9442 0.3855 0.9514 0.6294 0.9542 0.3575 0.9571 0.5791 0.9628 0.3724 0.9670 0.6235 0.9720 0.3152 0.9747 0.5680 0.9795 0.3594 0.9858 0.5963 0.9900 0.3520 1.0000 0.2777) :duration dur :scaler (hz->radians 10030.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (env frqf)))))))) ;; (with-sound (:play #t) (green-tailed-towhee 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Lucy's warbler (define-animal (lucys-warbler beg amp) (let ((dur 1.72)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.019 0.093 0.038 0.000 0.057 0.000 0.066 0.170 0.073 0.132 0.081 0.168 0.091 0.000 0.116 0.000 0.125 0.269 0.132 0.211 0.137 0.280 0.149 0.000 0.174 0.000 0.185 0.384 0.191 0.261 0.196 0.461 0.209 0.000 0.233 0.000 0.239 0.416 0.245 0.474 0.248 0.284 0.254 0.543 0.259 0.405 0.267 0.000 0.287 0.000 0.295 0.659 0.301 0.507 0.308 0.655 0.320 0.000 0.343 0.000 0.355 0.881 0.358 0.629 0.365 0.761 0.377 0.000 0.396 0.000 0.408 0.965 0.424 0.573 0.431 0.000 0.450 0.000 0.459 0.983 0.471 0.466 0.477 0.000 0.494 0.000 0.503 0.853 0.516 0.442 0.520 0.000 0.536 0.000 0.549 0.853 0.567 0.000 0.581 0.000 0.596 0.981 0.614 0.000 0.628 0.000 0.634 0.813 0.640 0.425 0.642 0.860 0.653 0.422 0.657 0.000 0.678 0.000 0.682 0.757 0.686 0.364 0.688 0.875 0.704 0.000 0.720 0.000 0.727 0.761 0.731 0.440 0.733 0.875 0.743 0.461 0.750 0.000 0.768 0.000 0.773 0.993 0.781 0.601 0.785 0.918 0.798 0.000 0.816 0.000 0.823 0.877 0.827 0.535 0.830 0.877 0.855 0.000 0.879 0.000 0.885 0.638 0.889 0.741 0.919 0.000 0.945 0.000 0.950 0.556 0.955 0.379 0.959 0.563 0.986 0.037 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .98 2 .015 3 .005))) (frqf (make-env '(0.000 0.651 0.018 0.637 0.040 0.401 0.049 0.361 0.055 0.658 0.072 0.644 0.087 0.526 0.098 0.358 0.106 0.340 0.110 0.677 0.130 0.665 0.136 0.595 0.146 0.509 0.155 0.361 0.161 0.342 0.175 0.628 0.191 0.602 0.202 0.536 0.212 0.394 0.219 0.361 0.229 0.648 0.244 0.623 0.254 0.590 0.263 0.500 0.271 0.382 0.278 0.354 0.285 0.627 0.302 0.611 0.315 0.536 0.322 0.391 0.328 0.356 0.333 0.661 0.357 0.644 0.369 0.547 0.379 0.387 0.390 0.363 0.396 0.630 0.415 0.613 0.425 0.543 0.432 0.394 0.442 0.351 0.449 0.724 0.462 0.708 0.474 0.538 0.475 0.418 0.488 0.365 0.491 0.774 0.502 0.743 0.513 0.613 0.519 0.438 0.528 0.389 0.533 0.821 0.544 0.800 0.551 0.688 0.562 0.526 0.565 0.387 0.577 0.354 0.579 0.807 0.588 0.795 0.597 0.701 0.606 0.595 0.612 0.384 0.621 0.339 0.624 0.797 0.634 0.773 0.648 0.627 0.657 0.385 0.663 0.333 0.664 0.809 0.678 0.799 0.686 0.696 0.695 0.575 0.701 0.389 0.709 0.345 0.714 0.825 0.724 0.797 0.736 0.630 0.746 0.432 0.748 0.373 0.759 0.325 0.760 0.813 0.770 0.780 0.785 0.623 0.789 0.507 0.793 0.405 0.802 0.342 0.803 0.837 0.818 0.795 0.829 0.630 0.836 0.535 0.854 0.372 0.864 0.309 0.868 0.826 0.878 0.802 0.884 0.727 0.888 0.618 0.915 0.373 0.930 0.314 0.931 0.819 0.944 0.792 0.951 0.670 0.963 0.563 0.977 0.448 0.981 0.387 1.000 0.318) :duration dur :scaler (hz->radians 8070.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (lucys-warbler 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Cassin's vireo (define-animal (cassins-vireo beg amp) (let ((dur 0.5)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.028 0.110 0.037 0.062 0.050 0.098 0.060 0.075 0.078 0.179 0.085 0.065 0.093 0.116 0.100 0.379 0.119 0.163 0.136 0.457 0.147 0.473 0.159 0.180 0.173 0.608 0.182 0.655 0.193 0.001 0.200 0.292 0.210 0.180 0.219 0.262 0.224 0.103 0.241 0.204 0.253 0.055 0.268 0.225 0.285 0.061 0.299 0.251 0.312 0.171 0.330 0.298 0.366 0.182 0.375 0.138 0.384 0.159 0.391 0.000 0.512 0.000 0.527 0.085 0.539 0.267 0.553 0.111 0.565 0.200 0.574 0.150 0.583 0.360 0.587 0.117 0.595 0.257 0.602 0.096 0.610 0.297 0.623 0.072 0.635 0.241 0.640 0.201 0.653 0.336 0.669 0.996 0.679 0.730 0.689 0.235 0.702 0.336 0.714 0.688 0.725 0.752 0.733 0.466 0.744 0.680 0.752 0.070 0.763 0.628 0.766 0.567 0.774 0.671 0.786 0.094 0.792 0.514 0.797 0.099 0.800 0.187 0.807 0.224 0.810 0.523 0.820 0.444 0.824 0.155 0.829 0.481 0.832 0.598 0.838 0.521 0.843 0.070 0.847 0.209 0.857 0.476 0.862 0.294 0.873 0.775 0.880 0.175 0.884 0.495 0.888 0.083 0.896 0.644 0.916 0.074 0.919 0.379 0.926 0.072 0.940 0.657 0.944 0.613 0.955 0.070 0.960 0.181 0.966 0.087 0.970 0.111 0.975 0.069 0.981 0.173 0.989 0.021 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.069 0.028 0.063 0.060 0.075 0.078 0.110 0.100 0.144 0.121 0.159 0.141 0.162 0.160 0.154 0.188 0.130 0.206 0.119 0.216 0.120 0.225 0.100 0.239 0.119 0.254 0.093 0.265 0.117 0.281 0.094 0.298 0.120 0.325 0.129 0.356 0.133 0.382 0.128 0.395 0.100 0.516 0.090 0.568 0.108 0.600 0.075 0.621 0.150 0.639 0.183 0.662 0.178 0.682 0.159 0.703 0.155 0.721 0.139 0.735 0.157 0.753 0.123 0.769 0.148 0.784 0.124 0.795 0.159 0.816 0.139 0.831 0.172 0.845 0.148 0.857 0.180 0.872 0.178 0.881 0.159 0.892 0.198 0.908 0.178 0.922 0.206 0.942 0.194 0.957 0.212 0.982 0.199 1.000 0.179) :duration dur :scaler (hz->radians 22050.0))) (gen1 (make-oscil)) (gen2 (make-oscil)) (gen3 (make-oscil)) (gen4 (make-oscil)) (gen5 (make-oscil)) (f1 (make-env '(0 .01 .06 .01 .1 1 .3 1 .5 .01 .65 .05 .67 1 1 1) :duration dur)) (f2 (make-env '(0 .25 .06 .5 .1 .01 .3 .01 .5 .75 .6 .5 .64 .01 1 .01) :duration dur)) (f3 (make-env '(0 1 .06 .5 .1 .01 .3 .01 .5 .01 .6 .3 .65 .01 .67 .01 1 .01) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env f1) (oscil gen1 frq)) (* (env f2) (oscil gen2 (* 2.0 frq))) (+ (* (env f3) (oscil gen3 (* 3.0 frq))) (* .005 (oscil gen4 (* 4.0 frq))) (* .005 (oscil gen5 (* 5.0 frq)))))))))))) ;;; formants sounded bad here, polywave worse ;; (with-sound (:play #t) (cassins-vireo 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Plain chacalaca ;;; ;;; the recording doesn't do this bird justice -- it actually does say "chacalaca" ;;; (and the mosquitos darken the skies) (define (plain-chacalaca beg1 amp) (define-animal (plain-chacalaca-1 beg dur amp frmfrq frqlst) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 2 1 4 1 6 0) :duration dur :scaler (* 0.5 amp))) (frqf (make-env frqlst :duration dur :scaler (hz->radians 1.0))) (frm1 (make-formant frmfrq .99)) (frm2 (make-formant 4200 .98)) (frm3 (make-formant 2800 .98)) (fr1 (* 40 (sin (hz->radians frmfrq)))) (fr2 (* 2 (sin (hz->radians 4200)))) (fr3 (* 16 (sin (hz->radians 2800)))) (gen (make-polywave 0.0 (nrcos->polywave 15 .75 1.0))) (rnd (make-rand-interp 5000 .03)) (rnd1 (make-rand-interp 1000 .15)) (vib (make-blackman 50 4)) (vib-index (hz->radians -100))) (let ((fb (vector frm1 frm2 frm3)) (fs (float-vector fr1 fr2 fr3))) (set! fb (make-formant-bank fb fs)) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (formant-bank fb (* (+ .85 (abs (rand-interp rnd1))) (polywave gen (+ (env frqf) (rand-interp rnd) (* vib-index (blackman vib)))))))))))) (plain-chacalaca-1 beg1 0.17 (* .7 amp) 1700 '(0 450 1 680)) (plain-chacalaca-1 (+ beg1 0.20) 0.12 amp 1400 '(0 500 1 680 2 660)) (plain-chacalaca-1 (+ beg1 0.35) 0.20 amp 1400 '(0 500 1 680 4 660))) ;; (with-sound (:play #t) (plain-chacalaca 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Black-billed cuckoo (define-animal (black-billed-cuckoo beg amp) (let ((dur 0.68)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.013 0.388 0.023 0.303 0.026 0.419 0.042 0.530 0.066 0.104 0.128 0.000 0.215 0.000 0.243 0.642 0.257 0.536 0.266 0.725 0.296 0.737 0.311 0.044 0.357 0.070 0.367 0.000 0.421 0.000 0.448 0.856 0.460 0.807 0.468 0.913 0.483 0.960 0.515 0.928 0.535 0.048 0.575 0.085 0.584 0.000 0.638 0.000 0.658 0.903 0.674 0.989 0.708 0.822 0.732 0.079 0.781 0.038 0.798 0.070 0.806 0.028 0.823 0.059 0.845 0.000 0.883 0.000 0.892 0.593 0.913 0.739 0.940 0.031 0.976 0.066 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .97 2 .005 3 .008 5 .005))) (rnd (make-rand-interp 400 (hz->radians 25))) (frqf (make-env '(0.000 0.568 0.057 0.568 0.078 0.399 0.203 0.315 0.218 0.632 0.252 0.557 0.314 0.553 0.340 0.350 0.410 0.337 0.426 0.667 0.469 0.557 0.528 0.559 0.548 0.381 0.616 0.352 0.624 0.617 0.659 0.544 0.721 0.544 0.748 0.350 0.840 0.297 0.851 0.615 0.889 0.540 0.926 0.542 0.948 0.416 1.000 0.419) :duration dur :scaler (hz->radians 1190.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (rand-interp rnd))))))))) ;; (with-sound (:play #t) (black-billed-cuckoo 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Eared grebe (define-animal (eared-grebe beg amp) ;; note #1 (let ((dur 0.3)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 9 1 10 0) :duration dur :scaler amp)) (frqf (make-env '(0 1050 1 1400) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-oscil)) (gen2 (make-oscil)) (gen3 (make-oscil)) (gen4 (make-oscil)) (gen5 (make-oscil)) (f1 (make-env '(0 .03 9 .144 10 .1) :duration dur)) (f2 (make-env '(0 .5 9 .844 10 .2) :duration dur)) (f3 (make-env '(0 .01 9 .03 10 .02) :duration dur)) (f4 (make-env '(0 0 1 .002 7 .003 10 0) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env f1) (oscil gen1 frq)) (* (env f2) (oscil gen2 (* 2.0 frq))) (+ (* (env f3) (oscil gen3 (* 3.0 frq))) (* (env f4) (oscil gen4 (* 4.0 frq))) (* .005 (oscil gen5 (* 5.0 frq))))))))))) ;; note #2 (let ((dur 0.085) (start (seconds->samples (+ beg 0.29)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0 0 1 1 2 .5 2.9 1 3 0) :duration dur :scaler amp)) (frqf (make-env '(0 2280 .25 2320 .6 2440 .65 3240 .8 3470 1 3260) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-oscil)) (gen2 (make-oscil)) (f1 (make-env '(0 .5 .6 1 .62 .05 .65 .5 1 .5) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env f1) (oscil gen1 frq)) (* .01 (oscil gen2 (* 2.0 frq)))))))))) ;; note #3 (let ((dur 0.02) (start (seconds->samples (+ beg 0.446)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0 0 1 1 2.5 0) :duration dur :scaler (* .5 amp))) (frqf1 (make-env '(0 1120 .5 1540 1 1100) :duration dur :scaler (hz->radians 1.0))) (frqf2 (make-env '(0 2400 .5 2520 1 2300) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-oscil)) (gen2 (make-oscil)) (gen3 (make-oscil)) (gen4 (make-oscil)) (f1 (make-env '(0 .9 .2 1 .6 1 .8 0 1 0) :duration dur)) (f2 (make-env '(0 .5 .2 1 .6 .01 1 0) :duration dur)) (f3 (make-env '(0 .1 .2 0 1 0) :duration dur)) (f4 (make-env '(0 0 .2 0 .7 .25 1 .1) :duration dur)) (rnd (make-rand-interp 3000 (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq1 (+ (env frqf1) (rand-interp rnd)))) (outa i (* (env ampf) (+ (* (env f1) (oscil gen1 (* 2.0 frq1))) (* (env f2) (oscil gen2 frq1)) (* (env f3) (oscil gen3 (* 3.0 frq1))) (* (env f4) (oscil gen4 (env frqf2))))))))))) ;; (with-sound (:play #t :statistics #t) (eared-grebe 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Brown jay (define-animal (brown-jay beg amp) (let ((dur 0.26)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.012 0.106 0.044 0.151 0.072 0.267 0.129 0.766 0.221 0.889 0.372 1.000 0.455 0.837 0.534 0.553 0.632 0.660 0.762 0.540 0.912 0.105 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .1 2 .9 3 .3 4 .07 5 .05 6 .2 7 .01 8 .005 9 .004 10 .003))) (gen2 (make-polywave 0.0 '( 2 .5 3 .1 4 .05))) (intrpf (make-env '(0 1 .5 1 .8 .6 1 0) :duration dur)) (intrpf-1 (make-env '(0 1 .5 1 .8 .6 1 0) :duration dur :offset 1.0 :scaler -1.0)) (frqf (make-env '(0.000 0.201 0.052 0.201 0.091 0.271 0.143 0.285 0.631 0.288 0.659 0.268 0.858 0.257 .93 .2 1.000 0.22) :duration dur :scaler (hz->radians 4060.0))) (rnd (make-rand-interp 500 (hz->radians 15)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (* (env intrpf) (polywave gen1 frq)) (* (env intrpf-1) (polywave gen2 frq)))))))))) ;; (with-sound (:play #t) (brown-jay 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Blue grosbeak (define-animal (blue-grosbeak beg amp) (let ((dur 2.26)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.010 0.029 0.019 0.110 0.032 0.024 0.055 0.260 0.058 0.003 0.062 0.034 0.071 0.282 0.078 0.000 0.119 0.000 0.124 0.057 0.129 0.335 0.134 0.410 0.138 0.035 0.143 0.464 0.146 0.430 0.150 0.034 0.156 0.593 0.162 0.513 0.167 0.355 0.172 0.319 0.175 0.000 0.213 0.000 0.222 0.279 0.223 0.099 0.226 0.224 0.228 0.055 0.232 0.087 0.238 0.503 0.249 0.663 0.253 0.025 0.255 0.060 0.256 0.435 0.261 0.468 0.274 0.000 0.315 0.000 0.326 0.426 0.333 0.046 0.342 0.499 0.349 0.658 0.351 0.090 0.355 0.868 0.360 0.677 0.367 0.000 0.390 0.000 0.399 0.673 0.400 0.270 0.403 0.949 0.406 0.934 0.418 0.002 0.429 0.072 0.442 0.240 0.449 0.528 0.455 0.585 0.458 0.533 0.464 0.000 0.484 0.000 0.487 0.323 0.491 0.187 0.495 0.439 0.505 0.683 0.513 0.000 0.526 0.000 0.534 0.784 0.541 0.648 0.545 0.781 0.548 0.160 0.553 0.734 0.569 0.077 0.572 0.097 0.580 0.532 0.583 0.505 0.589 0.000 0.620 0.000 0.627 0.520 0.631 0.543 0.637 0.071 0.641 0.402 0.653 0.846 0.656 0.075 0.662 1.000 0.674 0.000 0.696 0.000 0.702 0.155 0.703 0.361 0.705 0.046 0.710 0.491 0.719 0.133 0.723 0.091 0.730 0.074 0.735 0.110 0.744 0.406 0.753 0.467 0.758 0.053 0.760 0.007 0.765 0.029 0.771 0.481 0.774 0.539 0.781 0.000 0.820 0.000 0.823 0.168 0.825 0.045 0.827 0.005 0.830 0.050 0.831 0.360 0.834 0.047 0.837 0.017 0.843 0.441 0.844 0.086 0.848 0.036 0.854 0.437 0.857 0.085 0.860 0.231 0.864 0.626 0.869 0.136 0.873 0.324 0.880 0.081 0.883 0.344 0.888 0.076 0.890 0.045 0.893 0.235 0.899 0.000 0.932 0.000 0.942 0.091 0.946 0.007 0.951 0.035 0.956 0.104 0.963 0.319 0.970 0.424 0.973 0.065 0.976 0.011 0.977 0.058 0.980 0.244 0.992 0.059 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .97 2 .03 3 .01 4 .005))) (frqf (make-env '(0.0000 0.5530 0.0090 0.5109 0.0278 0.3367 0.0521 0.5167 0.0589 0.7257 0.0718 0.5675 0.0756 0.4949 0.1252 0.4717 0.1282 0.5501 0.1354 0.3120 0.1418 0.4775 0.1495 0.3222 0.1568 0.4761 0.1649 0.3962 0.1717 0.4557 0.1743 0.3919 0.2174 0.3266 0.2213 0.3904 0.2234 0.5559 0.2268 0.3033 0.2358 0.3861 0.2456 0.4833 0.2499 0.5457 0.2525 0.7083 0.2563 0.5225 0.2597 0.4441 0.2704 0.3367 0.2994 0.3367 0.3093 0.5849 0.3165 0.5835 0.3217 0.4833 0.3268 0.4180 0.3319 0.2917 0.3353 0.4935 0.3396 0.4441 0.3456 0.4688 0.3481 0.5109 0.3520 0.7547 0.3537 0.5602 0.3584 0.5094 0.3635 0.4630 0.3904 0.5167 0.3934 0.7010 0.3947 0.5065 0.3964 0.6546 0.3981 0.4659 0.3998 0.7242 0.4020 0.5007 0.4032 0.6168 0.4041 0.5399 0.4075 0.4833 0.4122 0.3904 0.4186 0.2467 0.4421 0.3759 0.4541 0.4296 0.4724 0.4282 0.4776 0.3077 0.484 0.3091 0.488 0.4146 0.4920 0.3120 0.4964 0.4209 0.5015 0.4601 0.5058 0.4238 0.5088 0.3062 0.5203 0.3048 0.5229 0.6067 0.5284 0.6081 0.5344 0.5138 0.5412 0.4630 0.5451 0.5181 0.5481 0.6923 0.5515 0.5733 0.5540 0.4702 0.5592 0.4078 0.5716 0.3106 0.5805 0.4282 0.6010 0.4282 0.6168 0.3672 0.6215 0.3687 0.6232 0.5704 0.6258 0.4398 0.6314 0.4267 0.6369 0.2903 0.6416 0.4369 0.6489 0.4644 0.6536 0.5327 0.6561 0.7983 0.6587 0.6038 0.6617 0.5472 0.6702 0.4514 0.6822 0.4485 0.6890 0.3425 0.6980 0.3440 0.7031 0.3890 0.7053 0.7286 0.7074 0.5152 0.7172 0.3498 0.7258 0.3048 0.7347 0.3396 0.7428 0.4035 0.7531 0.5007 0.7612 0.7257 0.7800 0.5007 0.8232 0.5936 0.8249 0.7837 0.8300 0.6734 0.8334 0.5646 0.8351 0.7576 0.8394 0.6415 0.8428 0.5094 0.8462 0.7460 0.8484 0.6299 0.8526 0.4586 0.8578 0.6386 0.8620 0.4151 0.8672 0.5631 0.8710 0.3701 0.8770 0.4848 0.8804 0.3527 0.8855 0.4761 0.8902 0.3295 0.8958 0.4964 0.8975 0.2874 0.9381 0.2903 0.9436 0.5036 0.9470 0.2642 0.9680 0.4731 0.9718 0.5559 0.9765 0.7881 0.9795 0.5414 0.9889 0.3657 1.0000 0.3033) :base 10 :duration dur :scaler (hz->radians 7190.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (blue-grosbeak 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Acorn woodpecker (define-animal (acorn-woodpecker beg1 amp1) (define (acorn-woodpecker-1 beg dur ampf frqf ampf2 ampf4 rndf) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (gen1 (make-polywave 0.0 '(1 .2 2 1 3 .01 4 .005))) (gen2 (make-polywave 0.0 '(3 .5 5 1 6 .05 7 .1))) (gen3 (make-polywave 0.0 (list 5 (* 2 .005) 6 (* 2 .01) 7 (* 2 .003) 8 (* 2 .005) 9 (* 2 .002) 10 (* 2 .005) 11 (* 2 .001) 13 (* 2 .003) 15 (* 2 .001)))) (gen4 (make-oscil)) (rnd (make-rand-interp 1000 (hz->radians 200)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (* (env rndf) (rand-interp rnd)))) (amp2 (env ampf2))) (outa i (* (env ampf) (+ (polywave gen1 (* 2.0 frq)) (* amp2 (polywave gen2 frq)) (* (- 1.0 amp2) (polywave gen3 (* 2.0 frq))) (* (env ampf4) (oscil gen4 (* 6.0 frq)))))))))) ;; note #1 (let ((dur1 0.36)) (acorn-woodpecker-1 beg1 dur1 (make-env '(0.000 0.000 0.046 0.257 0.248 0.331 0.371 0.745 0.564 1.000 0.738 0.970 0.909 0.442 1.000 0.000) :duration dur1 :scaler amp1) (make-env '(0.000 0.430 0.054 0.526 0.171 0.534 0.244 0.591 0.284 0.603 0.317 0.630 0.378 0.639 0.414 0.658 0.518 0.662 0.581 0.693 0.627 0.697 0.671 0.685 0.726 0.685 0.762 0.710 0.807 0.714 0.829 0.691 0.854 0.710 1.000 0.618) :duration dur1 :scaler (hz->radians (* 0.25 3030))) (make-env '(0 .2 .2 .2 .3 0 1 0) :duration dur1) (make-env '(0 1 .2 1 .25 0 .4 1 .5 0 .6 1 .7 0 .9 1 1 1) :duration dur1 :scaler .1) (make-env '(0 .03 .85 .03 1 1) :duration dur1))) ;; note #2 (let ((dur1 0.35)) (acorn-woodpecker-1 (+ beg1 0.55) dur1 (make-env '(0 0 .2 .1 .9 1 1 0) :duration dur1 :scaler amp1) (make-env '(0.000 0.466 0.088 0.497 0.202 0.513 0.319 0.585 0.386 0.596 0.747 0.632 0.835 0.671 0.882 0.661 1.000 0.350) :duration dur1 :scaler (hz->radians (* 0.25 3080))) (make-env '(0 0 .2 .1 .3 .1 .4 0 1 0) :duration dur1) (make-env '(0 1 .2 1 .25 0 .4 0 .6 1 .7 0 .9 1 1 1) :duration dur1 :scaler .2) (make-env '(0 .3 .05 .03 .8 .03 1 .3) :duration dur1 :base 10))) ;; note #3 (let ((dur1 0.34)) (acorn-woodpecker-1 (+ beg1 1.17) dur1 (make-env '(0 0 .2 .1 .8 1 .9 1 1 0) :duration dur1 :scaler amp1) (make-env '(0.000 0.310 0.076 0.331 0.118 0.388 0.184 0.422 0.239 0.484 0.336 0.544 0.720 0.549 0.831 0.581 0.896 0.570 0.920 0.630 0.938 0.604 1.000 0.448) :duration dur1 :scaler (hz->radians (* 0.25 3310))) (make-env '(0 0 .2 .1 .3 .1 .4 0 .5 0 .6 .1 .7 .1 .8 0 1 0) :duration dur1) (make-env '(0 1 .2 1 .25 0 .4 0 .6 1 .7 0 .8 1 .9 1 1 1) :duration dur1 :scaler .3) (make-env '(0 .1 .05 .03 .8 .03 1 .5) :duration dur1 :base 10)))) ;; (with-sound (:play #t) (acorn-woodpecker 0 .3)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Lesser nighhawk (define-animal (lesser-nighthawk beg dur amp) (let ((pulse-dur .021) (pulse-sep .047)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 2 1 10 1 11 0) :duration dur :scaler amp :base 10)) (gen1 #f) (pulsef (make-env '(0.000 0.000 .6 1 1 0) :base .1 :duration pulse-dur)) (pulse-samps (seconds->samples pulse-sep)) (pulse-out (seconds->samples pulse-dur)) (frqf (make-env (list 0 600 .5 620 (max .55 (- dur .5)) 620 (max .6 dur) 570) :duration dur :scaler (hz->radians 1.0)))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location ampf) (- i start)) (let ((reset-stop (min stop (+ i pulse-out))) (pulse-amp (env ampf)) (pulse-frq (env frqf))) (set! (mus-location frqf) (- i start)) (set! gen1 (make-polywave 0.0 (list 1 (* pulse-amp .94) 3 (* pulse-amp .04) 4 (* pulse-amp .01)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulsef) (polywave gen1 pulse-frq)))) (mus-reset pulsef)))))) ;; (with-sound (:play #t) (lesser-nighthawk 0 1 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Olive-sided flycatcher (define-animal (olive-sided-flycatcher beg amp) (let ((dur 1.08)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.021 0.129 0.035 0.369 0.053 0.250 0.064 0.000 0.352 0.000 0.381 0.674 0.394 0.483 0.407 0.834 0.418 0.852 0.425 0.795 0.440 0.898 0.457 0.931 0.489 0.922 0.506 0.878 0.534 0.991 0.548 0.988 0.577 0.717 0.593 0.834 0.615 0.000 0.690 0.000 0.704 0.698 0.710 0.436 0.712 0.610 0.726 0.395 0.736 0.483 0.756 0.545 0.773 0.795 0.786 0.583 0.808 0.919 0.816 0.843 0.826 0.898 0.837 0.797 0.844 0.659 0.860 0.640 0.879 0.334 0.975 0.176 0.989 0.034 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.175 0.020 0.235 0.035 0.269 0.041 0.311 0.070 0.224 0.356 0.209 0.377 0.309 0.402 0.352 0.449 0.360 0.549 0.348 0.574 0.339 0.588 0.354 0.596 0.330 0.603 0.354 0.612 0.235 0.691 0.213 0.702 0.313 0.725 0.380 0.743 0.397 0.765 0.354 0.794 0.328 0.844 0.299 0.876 0.277 0.975 0.254 1.000 0.198) :duration dur :scaler (hz->radians 10100.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .03 3 .01 4 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (olive-sided-flycatcher 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Red-shouldered hawk ;;; ;;; ending is not right (define-animal (red-shouldered-hawk beg amp) (let ((dur 0.475)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.071 0.704 0.128 0.964 0.168 0.593 0.383 0.356 0.399 0.798 0.446 0.901 0.492 0.628 0.595 0.771 0.677 0.700 0.693 0.439 0.715 0.593 0.750 0.715 0.872 0.648 0.894 0.360 0.938 0.360 0.984 0.213 1.000 0.000) :duration dur :scaler (* 0.2 amp))) (frqf (make-env '(0.000 0.083 0.027 0.094 0.035 0.129 0.103 0.143 0.116 0.180 0.370 0.167 0.381 0.13 0.66 .114 .72 .116 .8 .112 0.871 0.105 0.888 0.080 0.976 0.078 1.000 0.08) :base .1 :duration dur :scaler (hz->radians (* 0.5 9130.0)))) (histuff (make-polywave 0.0 '(1 .1 2 .75 3 .1 4 .1 5 .01 6 .01 7 .01 8 .02 9 .01 11 .005 ))) (lostuff (make-polywave 0.0 '(2 .1 3 .3 5 .03 7 .1 9 .01 13 .1 15 .1 17 .05 19 .03))) (midstuff (make-polywave 0.0 '(1 .3 3 .7))) (midf (make-env '(0 1 .3 1 .4 .1 1 0) :duration dur :scaler 1.0)) (oddf (make-env '(0 1 .1 1 .12 .01 .45 .01 .55 .75 1 0) :duration dur :scaler 0.7 :base 10)) (frm1 (make-formant 2300 .98)) (frm2 (make-formant 3200 .99)) (frm3 (make-formant 5300 .97)) (frm4 (make-formant 1600 .99)) (fr1 (* 20 (sin (hz->radians 2300)))) (fr2 (* 6 (sin (hz->radians 3200)))) (fr3 (* 10 (sin (hz->radians 5300)))) (fr4 (* 10 (sin (hz->radians 1600)))) (rnd (make-rand-interp 400 (hz->radians 10)))) (let ((fb (vector frm1 frm2 frm3 frm4)) (fs (float-vector fr1 fr2 fr3 fr4))) (set! fb (make-formant-bank fb fs)) (do ((i start (+ i 1))) ((= i stop)) (let* ((frq (+ (env frqf) (rand-interp rnd))) (val (* (env ampf) (+ (polywave histuff (* 2.0 frq)) (* (env oddf) (polywave lostuff frq)) (* (env midf) (polywave midstuff (* 2.0 frq))))))) (outa i (+ val (formant-bank fb val))))))))) ;; (with-sound (:play #t) (red-shouldered-hawk 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Common yellowthroat (define (common-yellowthroat beg1 amp1) (define-animal (common-yellowthroat-1 beg amp) (let ((dur .42)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.067 0.312 0.105 0.773 0.132 0.685 0.160 0.168 0.178 0.075 0.192 0.178 0.211 0.636 0.227 0.782 0.236 0.623 0.258 0.807 0.283 0.639 0.299 0.000 0.434 0.000 0.482 0.751 0.503 0.804 0.518 0.651 0.540 0.000 0.638 0.000 0.661 0.576 0.715 0.664 0.736 0.984 0.763 0.685 0.784 0.620 0.817 0.894 0.830 0.745 0.912 0.134 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.296 0.029 0.290 0.052 0.305 0.072 0.334 0.088 0.367 0.108 0.381 0.132 0.348 0.159 0.305 0.183 0.352 0.210 0.410 0.241 0.436 0.267 0.441 0.292 0.434 0.398 0.417 0.410 0.682 0.428 0.686 0.457 0.581 0.475 0.534 0.491 0.503 0.521 0.485 0.531 0.468 0.645 0.488 0.672 0.506 0.690 0.530 0.704 0.543 0.718 0.521 0.733 0.486 0.763 0.457 0.791 0.423 0.838 0.356 0.918 0.261 0.951 0.252 1.000 0.194) :duration dur :scaler (hz->radians 10150.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (common-yellowthroat-1 beg1 (* 0.4 amp1)) (common-yellowthroat-1 (+ beg1 0.44) amp1) (common-yellowthroat-1 (+ beg1 0.90) amp1) (common-yellowthroat-1 (+ beg1 1.36) (* 0.8 amp1))) ;; (with-sound (:play #t) (common-yellowthroat 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Cassin's sparrow (define (cassins-sparrow beg amp) ;; buzz1 (let ((dur 0.2) (pulse-dur .0064) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (gen1 (make-polywave 0.0 '(1 .95 2 .05))) (ampf (make-env '(0.000 0.000 0.139 0.174 0.302 0.577 0.492 0.601 0.720 0.415 0.853 0.628 0.962 0.945 1.000 0.000) :duration dur :scaler (* .3 amp))) (pulse-samps (seconds->samples pulse-dur)) (pulse-frqf (make-env '(0 0 1 200 3 0) :duration pulse-dur :scaler (hz->radians 1.0))) (frqf (make-env '(0 5850 .2 6200 .3 6000 1 6100) :duration dur :scaler (hz->radians 1.0))) (pulse-ampf (make-env '(0.000 0.2 0.435 0.356 0.701 0.925 0.785 0.984 0.880 0.779 0.973 0.395 1.000 0.2) :duration pulse-dur))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-samps)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env ampf) (env pulse-ampf) (polywave gen1 (+ (env pulse-frqf) (env frqf)))))) (mus-reset pulse-ampf) (mus-reset pulse-frqf))))) ;; buzz2 (let ((dur 0.22) (pulse-dur .022) (start (seconds->samples (+ beg .2)))) (let ((stop (+ start (seconds->samples dur))) (gen1 (make-polywave 0.0 '(1 .95 2 .05))) (pulse-samps (seconds->samples pulse-dur)) (pulse-frqf (make-env '(0 5400 1 6700) :duration pulse-dur :scaler (hz->radians 1.0))) (pulse-ampf (make-env '(0 0 .1 0 .7 1 1 0) :duration pulse-dur :base .1 :scaler (* .6 amp))) (rnd (make-rand-interp 600 (hz->radians 100)))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-samps)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env pulse-ampf) (polywave gen1 (+ (env pulse-frqf) (rand-interp rnd)))))) (mus-reset pulse-ampf) (mus-reset pulse-frqf))))) ;; buzz3 (let ((dur 0.51) (pulse-dur .051) (start (seconds->samples (+ beg .425)))) (let ((stop (+ start (seconds->samples dur))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .005))) (pulse-samps (seconds->samples 0.064)) (pulse-frqf (make-env '(0 5300 .1 5200 .2 5300 .3 6000 1 6000) :duration pulse-dur :scaler (hz->radians 1.0))) (pulse-ampf (make-env '(0 0 .1 .5 .2 0 .3 1 .4 .9 .8 1 1 0) :duration pulse-dur :scaler amp)) (frqf (make-env '(0 100 .6 0 1 50) :duration dur :scaler (hz->radians 1.0))) (ampf (make-env '(0 .6 1 1) :duration dur)) (rnd (make-rand-interp 600 (hz->radians 10)))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-samps)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (* (env ampf) (env pulse-ampf) (polywave gen1 (+ (env pulse-frqf) (env frqf) (rand-interp rnd)))))) (mus-reset pulse-ampf) (mus-reset pulse-frqf))))) ;; 4 long pitches (let ((dur 0.74) (start (seconds->samples (+ beg .95)))) (let ((stop (+ start (seconds->samples dur))) (gen1 (make-polywave 0.0 '(1 .99 2 .01))) (frqf (make-env '(0.000 0.446 0.014 0.403 0.054 0.385 0.121 0.376 0.248 0.374 0.274 0.367 0.290 0.198 0.308 0.166 0.339 0.159 0.418 0.162 0.545 0.162 0.674 0.162 0.714 0.164 0.718 0.458 0.735 0.451 0.743 0.415 0.761 0.403 0.847 0.387 1.000 0.387) :duration dur :scaler (hz->radians 22050.0))) (ampf (make-env '(0.000 0.000 0.025 0.833 0.062 0.951 0.087 0.882 0.120 1.000 0.172 0.961 0.226 0.849 0.238 0.666 0.253 0.000 0.299 0.000 0.319 0.689 0.329 0.679 0.346 0.000 0.409 0.000 0.450 0.593 0.478 0.689 0.537 0.767 0.649 0.626 0.666 0.469 0.679 0.000 0.737 0.000 0.771 0.816 0.784 0.698 0.795 0.911 0.828 0.895 0.853 0.774 0.882 0.734 0.942 0.603 0.979 0.475 0.992 0.325 1.000 0.000) :duration dur :scaler (* .9 amp)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) ;; last buzz (let ((dur 0.32) (start (seconds->samples (+ beg 1.73)))) (let ((stop (+ start (seconds->samples dur))) (gen1 (make-oscil 3100.0)) (ampf (make-env '(0 0 1 1 2 1 3 0) :base .3 :duration dur :scaler (* .4 amp))) (buzz (make-oscil 120)) (rnd (make-rand-interp 400 (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .25 (* .75 (abs (oscil buzz)))) (oscil gen1 (rand-interp rnd)))))))) ;; (with-sound (:play #t) (cassins-sparrow 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Steller's jay (define (stellers-jay beg1 amp1) (define-animal (stellers-jay-1 beg amp) (let ((dur .09)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.171 0.175 0.268 0.475 0.314 0.294 0.433 1.000 0.502 0.306 0.671 0.586 0.794 0.236 0.847 0.615 1.000 0.000) :duration dur :scaler amp)) (frqf1 (make-env '(0.000 0.393 0.343 0.411 0.423 0.366 0.478 0.405 0.542 0.508 0.582 0.526 0.683 0.414 0.849 0.417 0.957 0.218 1.000 0.196) :duration dur :scaler (hz->radians 6050.0))) (frqf2 (make-env '(0.000 0.405 0.213 0.405 0.277 0.311 0.391 0.290 0.497 0.275 0.558 0.242 0.635 0.242 0.729 0.190 0.868 0.205 1.000 0.160) :duration dur :scaler (hz->radians 6050.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .1 3 .1))) (gen2 (make-polywave 0.0 '(1 .95 2 .03 3 .01))) (ampf2 (make-env '(0 0 1 1 2 0) :duration dur :scaler .3)) (rnd (make-rand-interp 8000 )) (frm1 (make-formant 2460 .99)) (frm2 (make-formant 5200 .98)) (frm3 (make-formant 8200 .97)) (fr1 (* 10 (sin (hz->radians 2460)))) (fr2 (* 10 (sin (hz->radians 5200)))) (fr3 (* 4 (sin (hz->radians 8200)))) (frmaf (make-env '(0 0 .6 .3 .9 .8 1 .5) :duration dur)) (frmaf-1 (make-env '(0 0 .6 .3 .9 .8 1 .5) :duration dur :offset 1.0 :scaler -1.0)) (frmf (make-env '(0 5200 .7 4900 .9 2200 1 2000) :scaler (hz->radians 1.0) :duration dur)) (frmf3 (make-env '(0 8200 .7 8400 .9 4000 1 4000) :scaler (hz->radians 1.0) :duration dur)) (frmf1 (make-env '(0 2460 .7 2400 .9 1400 1 1500) :scaler (hz->radians 1.0) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let* ((val1 (* (env ampf) (+ (polywave gen1 (env frqf1)) (* (env ampf2) (polywave gen2 (env frqf2)))))) (frm-in (* val1 (rand-interp rnd)))) (outa i (+ (* 0.75 val1) (* fr1 (env frmaf-1) (formant frm1 frm-in (env frmf1))) (* fr2 (env frmaf) (formant frm2 frm-in (env frmf))) (* fr3 (formant frm3 frm-in (env frmf3)))))))))) (do ((beg beg1 (+ beg .15)) (i 0 (+ i 1))) ((= i 6)) (stellers-jay-1 beg amp1))) ;; (with-sound (:statistics #t) (stellers-jay 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Black rail (define-animal (black-rail beg amp) ;; notes 1 and 2 (let ((dur 0.2)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.015 0.069 0.029 0.738 0.083 0.868 0.133 0.868 0.230 0.725 0.267 0.501 0.324 0.000 0.694 0.000 0.716 1.000 0.778 0.975 0.850 0.906 0.898 0.814 0.939 0.585 0.981 0.081 1.000 0.000) :duration dur :scaler (* 0.9 amp))) (frqf (make-env '(0.000 0.484 0.028 0.458 0.210 0.456 0.296 0.444 0.324 0.404 0.700 0.461 0.728 0.453 0.916 0.453 1.000 0.390) :duration dur :scaler (hz->radians (* 0.5 8150.0)))) (gen1 (make-polywave 0.0 '(1 .09 2 1 3 .07 4 .003 5 .01 6 .03 7 .005 9 .003))) (buzz (make-oscil 240)) (buzz1 (make-oscil 240)) (scl (hz->radians 20))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .8 (* .2 (oscil buzz))) (polywave gen1 (+ (env frqf) (* scl (oscil buzz1))))))))) ;; note 3 (let ((dur 0.21) (start (seconds->samples (+ beg .254)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.031 0.980 0.106 0.725 0.141 0.811 0.182 0.567 0.225 0.779 0.272 0.473 0.318 0.648 0.375 0.292 0.410 0.585 0.467 0.212 0.507 0.335 0.550 0.192 0.585 0.301 0.643 0.155 0.678 0.261 0.721 0.152 0.756 0.201 0.811 0.172 0.845 0.052 0.879 0.140 0.924 0.066 1.000 0.000) :duration dur :scaler (* 0.4 amp))) (frqf (make-env '(0.000 0.000 0.003 0.366 0.027 0.469 0.047 0.516 0.086 0.478 0.107 0.516 0.130 0.537 0.155 0.507 0.178 0.472 0.201 0.510 0.227 0.528 0.249 0.501 0.273 0.463 0.291 0.496 0.317 0.516 0.342 0.484 0.364 0.437 0.386 0.484 0.413 0.504 0.439 0.460 0.461 0.422 0.482 0.466 0.507 0.493 0.528 0.451 0.547 0.398 0.569 0.434 0.599 0.469 0.619 0.431 0.642 0.383 0.661 0.425 0.678 0.454 0.707 0.410 0.731 0.372 0.774 0.422 0.815 0.336 0.867 0.372 0.905 0.319 1.000 0.304) :duration dur :scaler (hz->radians (* 0.25 8040.0)))) (gen1 (make-polywave 0.0 '(1 .1 2 1 3 .4 4 .1 5 .03 6 .005 7 .005 10 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (black-rail 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Pinyon jay (define-animal (pinyon-jay beg amp) (let ((dur 0.3)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.008 0.035 0.013 0.118 0.024 0.032 0.087 0.596 0.111 0.617 0.159 0.460 0.188 0.546 0.240 0.876 0.293 1.000 0.345 0.991 0.377 0.938 0.436 0.959 0.501 0.764 0.537 0.534 0.628 0.442 0.718 0.466 0.812 0.386 0.858 0.316 0.903 0.342 0.949 0.094 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.100 0.075 0.163 0.130 0.185 0.192 0.207 0.327 0.245 0.385 0.256 0.558 0.200 0.724 0.207 0.806 0.209 0.875 0.180 0.944 0.138 1.000 0.134) :base .1 :duration dur :scaler (hz->radians (* 0.5 8160)))) (gen1 (make-polywave 0.0 '(1 .03 2 .8 3 .05 4 .01 5 .03 6 .075 7 .03 8 .008 9 .005 10 .005 11 .003))) (gen2 (make-oscil 0.0 (* 0.5 pi))) (ampf2 (make-env '(0 .2 .1 .2 .2 0 .4 .05 .8 .02 .9 .2 1 0) :duration dur :scaler 3)) (rnd (make-rand-interp 1000 (hz->radians 10)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (oscil gen2 (* 3.0 frq))))))))))) ;; (with-sound (:play #t) (pinyon-jay 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Sora (define-animal (sora beg amp) (let ((dur 0.41)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.011 0.109 0.066 0.180 0.360 0.192 0.442 0.229 0.473 0.203 0.575 0.276 0.621 0.345 0.702 0.361 0.751 0.661 0.792 0.713 0.839 0.606 0.885 0.873 0.904 0.788 0.937 0.980 0.953 0.998 0.962 0.911 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.358 0.103 0.332 0.209 0.327 0.328 0.341 0.572 0.363 0.771 0.429 0.893 0.458 0.965 0.462 1.000 0.448) :duration dur :scaler (hz->radians (* 0.5 6020)))) (gen1 (make-polywave 0.0 '(1 .05 2 .9 3 .05 4 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (sora 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Killdeer (define-animal (killdeer beg amp) (let ((dur 0.88)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.015 0.477 0.028 0.499 0.054 0.172 0.078 0.107 0.184 0.199 0.212 0.177 0.245 0.249 0.275 0.291 0.364 0.688 0.388 0.714 0.416 0.944 0.436 0.906 0.451 0.998 0.478 0.000 0.535 0.000 0.551 0.976 0.564 1.000 0.582 0.981 0.610 0.838 0.634 0.908 0.661 0.782 0.682 0.000 0.732 0.000 0.735 0.562 0.746 0.709 0.798 0.554 0.814 0.579 0.825 0.472 0.837 0.000 0.910 0.000 0.915 0.392 0.920 0.554 0.947 0.458 0.962 0.341 0.978 0.370 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.373 0.013 0.471 0.029 0.487 0.052 0.449 0.074 0.422 0.244 0.442 0.319 0.453 0.353 0.456 0.412 0.458 0.454 0.464 0.471 0.442 0.477 0.389 0.537 0.378 0.539 0.436 0.551 0.464 0.586 0.460 0.649 0.462 0.673 0.444 0.684 0.404 0.736 0.373 0.742 0.422 0.758 0.440 0.820 0.440 0.835 0.416 0.839 0.382 0.911 0.353 0.912 0.393 0.924 0.420 0.941 0.409 0.959 0.404 0.982 0.413 1.000 0.396) :duration dur :scaler (hz->radians (* 0.25 10170.0)))) (gen1 (make-polywave 0.0 '(1 .04 2 1 3 .07 4 .04 5 .005))) (gen2 (make-polywave 0.0 '(1 .01 2 .05 3 .03 4 1 5 .12 6 .1 7 .01 8 .05 9 .005))) (ampf2 (make-env '(0 0 .53 0 .64 .7 .67 0 .73 .1 .9 0 .91 .07 .94 0 1 0) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (polywave gen1 (* 2.0 frq)) (* (env ampf2) (polywave gen2 frq)))))))))) ;; (with-sound (:play #t) (killdeer 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Oak titmouse (define (oak-titmouse beg1 amp1) (define-animal (oak-titmouse-1 beg amp) (let ((dur 0.117)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.019 0.149 0.034 0.099 0.058 0.121 0.067 0.041 0.099 0.032 0.117 0.061 0.147 0.510 0.170 0.537 0.182 0.138 0.195 0.066 0.228 0.058 0.247 0.086 0.258 0.151 0.269 0.701 0.290 0.382 0.305 0.537 0.319 0.128 0.341 0.041 0.363 0.077 0.383 0.173 0.400 0.989 0.412 0.613 0.433 0.545 0.443 0.475 0.452 0.631 0.461 0.139 0.477 0.061 0.501 0.086 0.516 0.149 0.530 0.979 0.548 0.601 0.558 0.504 0.576 0.524 0.589 0.183 0.606 0.080 0.633 0.094 0.648 0.180 0.671 0.979 0.686 0.549 0.705 0.815 0.718 0.214 0.731 0.131 0.757 0.100 0.773 0.146 0.788 0.315 0.805 0.876 0.822 0.606 0.834 0.503 0.849 0.544 0.865 0.120 0.888 0.079 0.910 0.121 0.924 0.182 0.940 0.542 0.959 0.430 0.972 0.183 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 7200 1 5200) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .97 2 .03))) (gen2 (make-oscil 63.5 (+ pi 1))) (vib-amp (hz->radians 1200))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (* vib-amp (oscil gen2)))))))))) (define-animal (oak-titmouse-2 beg amp) (let ((dur 0.14)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.027 0.067 0.088 0.113 0.129 0.322 0.175 0.718 0.244 0.987 0.283 0.941 0.315 0.710 0.344 0.322 0.374 0.450 0.388 0.351 0.450 0.220 0.565 0.118 0.673 0.062 0.725 0.070 0.789 0.126 0.836 0.209 0.870 0.177 0.892 0.233 0.908 0.475 .92 .1 1 0) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.125 .04 .125 0.070 0.214 0.1 0.296 0.146 0.333 0.2 0.329 0.263 0.300 0.322 0.264 0.407 0.218 0.514 0.196 0.660 0.183 0.746 0.190 0.822 0.212 0.873 0.252 0.902 0.254 0.926 0.212 1.000 0.207) :duration dur :scaler (hz->radians 10230.0))) (gen1 (make-polywave 0.0 '(1 .9 2 .05 3 .01 4 .01 5 .005))) (gen2 (make-polywave 0.0 '(2 1 3 .5 4 .1))) (ampf2 (make-env '(0 1 .1 0 .8 0 1 1) :duration dur :scaler .5))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (polywave gen2 frq)))))))))) (do ((amps (vector .5 1.0 1.0 .9)) (i 0 (+ i 1)) (bg beg1 (+ bg .35))) ((= i 4)) (oak-titmouse-1 bg (* amp1 (amps i))) (oak-titmouse-2 (+ bg .156) (* amp1 (amps i))))) ;; (with-sound (:play #t) (oak-titmouse 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Macgillivray's warbler (define (macgillivrays-warbler beg1 amp1) ;; much more complex than it sounds -- like the Hermit Thrush, this has 2 independent sources (define-animal (macgillivrays-warbler-1 beg amp) ;; 5 of these to start (let ((dur 0.137)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.066 0.200 0.208 0.310 0.228 0.400 0.259 0.403 0.331 0.175 0.370 0.377 0.414 0.166 0.462 0.639 0.475 0.149 0.495 0.648 0.612 0.992 0.647 0.924 0.700 0.473 0.710 0.138 0.720 0.654 0.770 0.352 0.815 0.848 0.829 0.724 0.840 0.837 0.864 0.625 0.891 0.715 0.937 0.687 0.989 0.456 1.000 0.000) :duration dur :scaler (* .75 amp))) (frqf1 (make-env '(0.000 0.515 0.096 0.506 0.193 0.475 0.287 0.421 0.358 0.362 0.470 0.346 0.495 0.588 0.532 0.593 0.567 0.607 0.625 0.635 0.680 0.711 0.711 0.739 0.735 0.800 0.762 0.800 0.785 0.645 0.808 0.565 0.851 0.551 1.000 0.544) :duration dur :scaler (hz->radians 8830.0))) (ampf1 (make-env '(0 1 .35 1 .356 0 .49 0 .494 1 .73 1 .735 .25 .8 .25 .81 1 1 1) :duration dur)) (gen1 (make-polywave 0.0 '(1 .97 2 .02 3 .005))) (frqf2 (make-env '(0.000 0.515 0.326 0.522 0.370 0.454 0.413 0.416 0.419 0.492 0.427 0.586 0.451 0.534 0.472 0.461 0.493 0.593 0.540 0.598 0.587 0.614 0.647 0.656 0.698 0.725 0.728 0.562 0.758 0.492 0.788 0.468 0.803 0.501 0.814 0.555 1.000 0.544) :duration dur :scaler (hz->radians 8830.0))) (ampf2 (make-env '(0 0 .324 0 .327 .5 .73 .5 .735 1 .8 1 .81 0 1 0) :duration dur)) (gen2 (make-polywave 0.0 '(1 .97 2 .02 3 .005))) (rnd (make-rand-interp 6000 .1))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .9 (rand-interp rnd)) (+ (* (env ampf1) (polywave gen1 (env frqf1))) (* (env ampf2) (polywave gen2 (env frqf2)))))))))) (define-animal (macgillivrays-warbler-2 beg amp) ;; 3 of these to end (let ((dur 0.135)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.031 0.052 0.184 0.078 0.275 0.254 0.311 0.285 0.327 0.461 0.377 0.635 0.455 0.216 0.521 0.426 0.533 0.605 0.601 0.991 0.619 0.951 0.628 0.584 0.674 0.318 0.711 0.440 0.732 0.680 0.771 0.581 0.806 0.315 0.857 0.256 0.892 0.132 0.949 0.108 1.000 0.000) :duration dur :scaler amp)) (frqf1 (make-env '(0.000 0.202 0.048 0.277 0.077 0.289 0.106 0.268 0.130 0.286 0.152 0.275 0.169 0.232 0.202 0.216 0.229 0.232 0.264 0.277 0.292 0.291 0.324 0.310 0.351 0.340 0.382 0.303 0.430 0.329 0.470 0.366 0.533 0.408 0.612 0.479 0.638 0.575 0.712 0.343 0.730 0.286 0.750 0.258 0.778 0.272 0.804 0.312 0.826 0.345 0.852 0.352 0.891 0.317 0.934 0.286 1.000 0.2) :duration dur :scaler (hz->radians 9140.0))) (ampf1 (make-env '(0 1 .1 .4 .3 .1 .5 .2 .63 .2 .64 0 .71 0 .72 .1 .8 1 1 1) :duration dur)) (gen1 (make-polywave 0.0 '(1 .6 2 .4 3 .005))) (frqf2 (make-env '(0.000 0.357 0.196 0.357 0.275 0.373 0.310 0.413 0.350 0.446 0.385 0.484 0.425 0.538 0.462 0.540 0.470 0.373 0.535 0.418 0.591 0.462 0.621 0.500 0.637 0.573 0.667 0.392 0.712 0.406 0.744 0.455 0.778 0.462 0.833 0.556 1.000 0.32) :duration dur :scaler (hz->radians 9140.0))) (ampf2 (make-env '(0 0 .19 0 .195 1 .45 .1 .46 0 .47 1 .63 1 .64 0 .67 0 .68 1 .82 1 .83 0 1 0) :duration dur)) (gen2 (make-polywave 0.0 '(1 .99 2 .01))) (rnd1 (make-rand-interp 600 (hz->radians 40))) (rnd (make-rand-interp 6000 .1))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .9 (rand-interp rnd)) (+ (* (env ampf1) (polywave gen1 (env frqf1))) (* (env ampf2) (polywave gen2 (+ (env frqf2) (rand-interp rnd1))))))))))) (do ((amps (vector .4 .6 .8 .9 1.0)) (note 0 (+ 1 note)) (bg beg1 (+ bg 0.18))) ((= note 5)) (macgillivrays-warbler-1 bg (* amp1 (amps note)))) (do ((amps (vector 1.0 .9 .7)) (note 0 (+ 1 note)) (bg (+ beg1 0.93) (+ bg 0.17))) ((= note 3)) (macgillivrays-warbler-2 bg (* amp1 (amps note))))) ;; (with-sound (:play #t) (macgillivrays-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Hutton's vireo (define-animal (huttons-vireo beg amp) (let ((dur 0.4)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.054 0.080 0.063 0.040 0.078 0.086 0.113 0.107 0.136 0.061 0.148 0.086 0.155 0.066 0.161 0.123 0.176 0.087 0.184 0.112 0.204 0.067 0.214 0.070 0.220 0.055 0.226 0.077 0.233 0.034 0.239 0.083 0.246 0.032 0.254 0.081 0.260 0.038 0.265 0.067 0.274 0.040 0.281 0.074 0.287 0.043 0.293 0.060 0.300 0.014 0.307 0.066 0.315 0.018 0.320 0.074 0.330 0.021 0.335 0.070 0.342 0.025 0.351 0.069 0.355 0.017 0.360 0.051 0.375 0.040 0.380 0.063 0.388 0.023 0.396 0.077 0.404 0.025 0.410 0.081 0.417 0.032 0.425 0.089 0.428 0.058 0.435 0.047 0.441 0.093 0.447 0.041 0.456 0.116 0.463 0.044 0.471 0.138 0.479 0.061 0.489 0.150 0.497 0.070 0.506 0.191 0.510 0.124 0.514 0.089 0.521 0.211 0.526 0.138 0.530 0.121 0.537 0.234 0.547 0.103 0.556 0.263 0.561 0.204 0.567 0.213 0.571 0.319 0.578 0.286 0.580 0.237 0.586 0.292 0.591 0.234 0.594 0.288 0.600 0.132 0.602 0.217 0.606 0.262 0.611 0.420 0.614 0.357 0.617 0.162 0.630 0.472 0.636 0.132 0.649 0.587 0.657 0.133 0.666 0.587 0.671 0.380 0.677 0.271 0.683 0.640 0.692 0.343 0.696 0.248 0.704 0.680 0.711 0.358 0.715 0.288 0.721 0.779 0.731 0.204 0.736 0.357 0.739 0.776 0.745 0.882 0.753 0.320 0.760 0.695 0.769 0.994 0.775 0.322 0.781 0.662 0.789 0.856 0.794 0.582 0.797 0.240 0.801 0.608 0.809 0.825 0.816 0.877 0.823 0.311 0.830 0.900 0.834 0.877 0.838 0.758 0.844 0.809 0.858 0.605 0.867 0.879 0.879 0.819 0.883 0.968 0.890 0.969 0.898 0.885 0.912 0.862 0.919 0.776 0.934 0.769 0.940 0.740 0.952 0.565 0.969 0.485 0.974 0.403 0.982 0.389 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.0000 0.4927 0.0133 0.5498 0.0177 0.6092 0.0275 0.8519 0.0276 0.5073 0.0413 0.8422 0.0428 0.4454 0.0624 0.5510 0.0954 0.5534 0.1264 0.5570 0.1391 0.5194 0.1632 0.5522 0.1750 0.4976 0.1912 0.5437 0.1996 0.4672 0.2055 0.5413 0.2134 0.4660 0.2207 0.5413 0.2266 0.4454 0.2335 0.5388 0.2380 0.4357 0.2458 0.5352 0.2522 0.4357 0.2596 0.5243 0.2635 0.4320 0.2699 0.5182 0.2788 0.4296 0.2842 0.5061 0.2935 0.4248 0.2999 0.5061 0.3068 0.4260 0.3147 0.5000 0.3210 0.4248 0.3289 0.4939 0.3358 0.4187 0.3422 0.4782 0.3500 0.4223 0.3569 0.4721 0.3658 0.4223 0.3736 0.4794 0.3800 0.4211 0.3884 0.4745 0.3948 0.4199 0.4036 0.4745 0.4105 0.4126 0.4174 0.4721 0.4258 0.4090 0.4341 0.4733 0.4410 0.4066 0.4489 0.4648 0.4577 0.4053 0.4656 0.4648 0.4730 0.3993 0.4823 0.4697 0.4887 0.3993 0.4990 0.4709 0.5059 0.4005 0.5143 0.4769 0.5236 0.3968 0.5339 0.4879 0.5393 0.3993 0.5521 0.4988 0.5590 0.4029 0.5674 0.5024 0.5777 0.4053 0.5870 0.5097 0.5954 0.4090 0.6057 0.5146 0.6121 0.4150 0.6229 0.5303 0.6332 0.4187 0.6416 0.5437 0.6529 0.4284 0.6618 0.5437 0.6711 0.4308 0.6814 0.5413 0.6868 0.4345 0.6986 0.5473 0.7065 0.4393 0.7183 0.5510 0.7281 0.4430 0.7404 0.5558 0.7557 0.4490 0.7630 0.5595 0.7763 0.4563 0.7861 0.5558 0.7984 0.4612 0.8117 0.5680 0.8265 0.5231 0.9641 0.5095 0.9754 0.3944 0.9823 0.4); 1 .4) :duration dur :scaler (hz->radians 7500.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .03 3 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (huttons-vireo 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Western meadowlark (define (western-meadowlark beg1 amp1) ;; first sequence of notes (define-animal (western-meadowlark-1 beg amp) (let ((dur 1.075)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.007 0.072 0.016 0.253 0.028 0.300 0.048 0.000 0.115 0.000 0.122 0.062 0.132 0.437 0.148 0.462 0.162 0.444 0.188 0.000 0.365 0.000 0.392 0.050 0.397 0.017 0.406 0.052 0.412 0.000 0.432 0.000 0.438 0.082 0.455 0.541 0.486 0.722 0.503 0.759 0.518 0.744 0.529 0.774 0.547 0.700 0.570 0.000 0.635 0.000 0.656 0.715 0.680 0.963 0.701 1.000 0.730 0.938 0.742 0.883 0.754 0.715 0.770 0.000 0.850 0.000 0.855 0.211 0.857 0.072 0.858 0.360 0.861 0.112 0.862 0.568 0.864 0.181 0.866 0.742 0.867 0.290 0.872 0.933 0.874 0.625 0.883 0.963 0.899 0.940 0.906 0.844 0.920 0.856 0.922 0.821 0.929 0.891 0.935 0.844 0.949 0.911 0.970 0.861 0.981 0.667 0.993 0.104 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.280 0.069 0.288 0.125 0.280 0.185 0.275 0.258 0.280 0.366 0.184 0.394 0.179 0.405 0.218 0.409 0.134 0.426 0.134 0.428 0.352 0.568 0.345 0.618 0.350 0.630 0.258 0.765 0.261 0.828 0.258 0.848 0.454 1.000 0.452) :duration dur :scaler (hz->radians 7470.0))) (gen1 (make-oscil))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (env frqf)))))))) ;; 2nd sequence of notes (define-animal (western-meadowlark-2 beg amp) (let ((dur 0.45)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.014 0.080 0.030 0.297 0.036 0.100 0.043 0.109 0.050 0.436 0.055 0.191 0.057 0.435 0.064 0.338 0.067 0.000 0.070 0.830 0.079 0.255 0.084 0.883 0.090 0.982 0.099 0.000 0.100 0.553 0.102 0.626 0.113 0.035 0.118 0.261 0.129 0.047 0.151 0.000 0.218 0.000 0.224 0.041 0.227 0.015 0.233 0.083 0.248 0.000 0.263 0.141 0.282 0.209 0.310 0.389 0.331 0.377 0.354 0.148 0.383 0.829 0.393 0.733 0.406 0.294 0.412 0.559 0.436 0.512 0.440 0.250 0.443 0.465 0.446 0.117 0.453 0.324 0.460 0.094 0.464 0.070 0.470 0.192 0.477 0.058 0.483 0.023 0.490 0.686 0.501 0.788 0.509 0.756 0.532 0.129 0.550 0.000 0.613 0.000 0.619 0.062 0.625 0.015 0.631 0.042 0.634 0.117 0.641 0.070 0.659 0.102 0.675 0.067 0.687 0.000 0.730 0.000 0.734 0.118 0.745 0.139 0.746 0.252 0.762 0.329 0.770 0.898 0.772 0.223 0.777 0.856 0.785 0.900 0.792 0.126 0.797 0.071 0.803 0.742 0.809 0.688 0.824 0.179 0.832 0.197 0.836 0.294 0.880 0.017 0.895 0.041 0.915 0.029 0.924 0.008 0.935 0.029 0.956 0.041 0.978 0.033 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.506 0.042 0.501 0.068 0.481 0.125 0.300 0.153 0.293 0.204 0.963 0.217 0.918 0.223 0.720 0.235 0.588 0.353 0.553 0.358 0.328 0.400 0.323 0.412 0.293 0.418 0.318 0.421 0.273 0.429 0.315 0.435 0.263 0.443 0.263 0.449 0.221 0.472 0.218 0.483 0.223 0.487 0.320 0.499 0.266 0.530 0.266 0.545 0.253 0.550 0.201 0.622 0.211 0.635 0.241 0.640 0.149 0.684 0.161 0.725 0.169 0.727 0.305 0.736 0.268 0.742 0.238 0.752 0.236 0.757 0.310 0.759 0.166 0.773 0.400 0.777 0.350 0.791 0.347 0.803 0.303 0.829 0.303 0.840 0.206 0.872 0.208 0.894 0.146 0.918 0.161 0.930 0.102 0.964 0.134 1.000 0.146) :duration dur :scaler (hz->radians 7470.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (western-meadowlark-1 beg1 (* 0.6 amp1)) (western-meadowlark-2 (+ beg1 1.125) amp1)) ;; (with-sound (:play #t) (western-meadowlark 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Northern beardless tyrannulet ;;; ;;; this should have used 4 calls on one note (define-animal (northern-beardless-tyrannulet beg amp) (let ((dur 1.91)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.013 0.124 0.018 0.713 0.038 0.303 0.052 0.469 0.065 0.236 0.079 0.685 0.084 0.483 0.089 0.666 0.094 0.545 0.101 0.638 0.107 0.542 0.113 0.671 0.123 0.531 0.132 0.590 0.157 0.879 0.167 0.784 0.173 0.410 0.177 0.646 0.182 0.228 0.192 0.587 0.203 0.000 0.238 0.000 0.240 0.010 0.248 0.843 0.255 0.404 0.266 0.952 0.281 1.000 0.331 0.963 0.350 0.702 0.358 0.784 0.375 0.534 0.391 0.778 0.406 0.000 0.444 0.000 0.446 0.010 0.457 0.899 0.464 0.334 0.473 1.000 0.492 0.854 0.499 0.610 0.506 0.730 0.525 0.652 0.552 0.801 0.560 0.553 0.570 0.865 0.582 0.534 0.583 0.626 0.590 0.483 0.595 0.570 0.611 0.000 0.649 0.000 0.651 0.010 0.662 0.899 0.671 0.654 0.679 0.969 0.698 0.787 0.704 0.843 0.711 0.772 0.726 0.910 0.768 0.643 0.780 0.680 0.803 0.000 0.845 0.000 0.847 0.010 0.856 0.770 0.863 0.492 0.866 0.860 0.873 0.890 0.883 0.680 0.889 0.817 0.901 0.722 0.915 0.823 0.934 0.534 0.953 0.576 0.972 0.435 0.977 0.562 0.990 0.101 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.396 0.021 0.439 0.188 0.431 0.197 0.340 0.247 0.375 0.256 0.447 0.268 0.437 0.396 0.426 0.400 0.394 0.402 0.358 0.457 0.369 0.461 0.426 0.469 0.447 0.484 0.437 0.599 0.418 0.607 0.394 0.611 0.345 0.658 0.361 0.663 0.426 0.669 0.456 0.682 0.429 0.786 0.415 0.795 0.407 0.801 0.345 0.856 0.372 0.861 0.420 0.865 0.450 0.875 0.431 0.982 0.407 0.990 0.361 1.000 0.278) :duration dur :scaler (hz->radians 9230.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .005 3 .02 4 .005 5 .003))) (noise (make-rand-interp 8000)) (noisef (make-env '(0 0 .011 1 .015 0 .236 0 .24 1 .245 0 .44 0 .445 1 .452 0 .647 0 .65 1 .657 0 .84 0 .845 1 .853 0 1 0) :duration dur :scaler .25))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (* (env noisef) (rand-interp noise)))))))))) ;; (with-sound (:play #t) (northern-beardless-tyrannulet 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Scott's oriole (define-animal (scotts-oriole beg amp) (let ((dur 1.83)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.020 0.103 0.030 0.113 0.038 0.099 0.062 0.000 0.142 0.000 0.150 0.050 0.160 0.326 0.170 0.333 0.178 0.309 0.200 0.050 0.207 0.076 0.218 0.282 0.238 0.018 0.255 0.353 0.265 0.415 0.276 0.392 0.292 0.000 0.318 0.000 0.328 0.442 0.331 0.090 0.335 0.408 0.339 0.279 0.342 0.545 0.357 0.000 0.405 0.000 0.413 0.250 0.419 0.281 0.424 0.250 0.436 0.058 0.442 0.072 0.462 0.511 0.471 0.500 0.477 0.000 0.484 0.000 0.487 0.980 0.505 0.514 0.521 0.304 0.530 0.000 0.601 0.000 0.616 0.559 0.622 0.599 0.637 0.581 0.646 0.507 0.661 0.000 0.676 0.000 0.678 0.239 0.680 0.094 0.682 0.424 0.687 0.096 0.689 0.374 0.693 0.000 0.702 0.000 0.716 0.698 0.725 0.763 0.735 0.000 0.746 0.000 0.753 0.396 0.758 0.423 0.760 0.399 0.771 0.054 0.777 0.095 0.783 0.207 0.786 0.227 0.800 0.142 0.823 0.072 0.828 0.000 0.851 0.000 0.853 0.243 0.856 0.087 0.857 0.351 0.862 0.147 0.863 0.300 0.870 0.000 0.877 0.000 0.892 0.888 0.911 0.000 0.920 0.000 0.926 0.353 0.933 0.406 0.943 0.059 0.948 0.025 0.962 0.167 0.970 0.174 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.560 0.023 0.489 0.052 0.487 0.079 0.487 0.138 0.556 0.150 0.556 0.162 0.487 0.181 0.473 0.202 0.473 0.212 0.415 0.234 0.415 0.241 0.491 0.252 0.442 0.267 0.431 0.285 0.438 0.319 0.455 0.322 0.533 0.328 0.634 0.332 0.467 0.338 0.775 0.348 0.839 0.354 0.810 0.366 0.737 0.392 0.415 0.409 0.411 0.421 0.386 0.440 0.397 0.472 0.438 0.477 0.531 0.485 0.607 0.495 0.507 0.508 0.408 0.527 0.406 0.587 0.406 0.607 0.491 0.624 0.462 0.637 0.458 0.654 0.467 0.658 0.422 0.679 0.393 0.682 0.585 0.684 0.482 0.686 0.643 0.690 0.420 0.700 0.576 0.706 0.621 0.710 0.583 0.730 0.612 0.751 0.413 0.766 0.406 0.789 0.362 0.819 0.359 0.852 0.388 0.856 0.645 0.858 0.491 0.861 0.621 0.864 0.435 0.867 0.576 0.873 0.565 0.879 0.600 0.887 0.576 0.896 0.596 0.903 0.654 0.924 0.420 0.940 0.395 0.973 0.359 1.000 0.353) :duration dur :scaler (hz->radians 5080.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .003 4 .007)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (scotts-oriole 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Wilson's warbler (define (wilsons-warbler beg1 amp1) ;; 3 different calls, 2(?) with 2 different tones (define-animal (wilsons-warbler-1 beg dur amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.101 0.169 0.138 0.169 0.179 0.297 0.226 0.377 0.269 0.092 0.318 0.513 0.340 0.651 0.359 0.156 0.372 0.654 0.387 0.156 0.428 0.700 0.491 0.808 0.607 0.721 0.659 0.923 0.747 0.995 0.909 0.813 0.965 0.528 1.000 0.000) :duration dur :scaler amp)) (frqf1 (make-env '(0.000 0.692 0.038 0.698 0.077 0.647 0.136 0.614 0.258 0.606 0.275 0.575 0.314 0.571 0.365 0.550 0.381 0.500 0.681 0.502 0.844 0.496 0.873 0.401 1.000 0.390) :duration dur :scaler (hz->radians 10210.0))) (gen1 (make-oscil)) (frqf2 (make-env '(0.000 0.692 0.038 0.698 0.077 0.647 0.136 0.614 0.258 0.606 0.275 0.575 0.314 0.571 0.365 0.550 0.376 0.394 0.490 0.353 0.594 0.347 0.681 0.392 0.740 0.418 0.818 0.416 0.886 0.399 1.000 0.390) :duration dur :scaler (hz->radians 10210.0))) (ampf1 (make-env '(0 1 .6 1 .8 0 1 0) :duration dur)) (gen2 (make-oscil)) (ampf2 (make-env '(0 .25 .35 .25 .36 0 .6 0 .7 1 1 1) :duration dur)) (rnd (make-rand-interp 4000 (hz->radians 300)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ (* (env ampf1) (oscil gen1 (+ (env frqf1) (rand-interp rnd)))) (* (env ampf2) (oscil gen2 (env frqf2))))))))) (define-animal (wilsons-warbler-2 beg dur frq amp) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.049 0.091 0.109 0.276 0.129 0.280 0.149 0.164 0.157 0.388 0.179 0.677 0.221 0.642 0.241 0.448 0.319 1.000 0.360 0.953 0.489 0.765 0.513 0.539 0.591 0.282 0.619 0.345 0.727 0.244 0.762 0.446 0.828 0.442 0.925 0.313 0.982 0.136 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.909 0.050 0.838 0.080 0.799 0.119 0.786 0.162 0.752 0.225 0.692 0.262 0.634 0.317 0.538 0.366 0.478 0.482 0.376 0.554 0.342 0.628 0.366 0.701 0.392 0.762 0.394 0.832 0.373 1.000 0.3) :duration dur :scaler (hz->radians (* frq 9780.0)))) (gen1 (make-oscil)) (rnd (make-rand-interp 4000 (hz->radians 200)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (+ (env frqf) (rand-interp rnd)))))))) (define-animal (wilsons-warbler-3 beg amp) (let ((dur 0.07)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.087 0.099 0.126 0.201 0.148 0.086 0.201 0.483 0.223 0.337 0.243 0.561 0.257 0.384 0.269 0.658 0.282 0.332 0.292 0.428 0.311 0.211 0.357 0.290 0.390 0.601 0.407 0.674 0.433 0.658 0.437 0.222 0.456 0.572 0.485 0.629 0.498 0.885 0.529 0.627 0.552 0.807 0.642 0.689 0.658 0.836 0.683 0.877 0.704 0.543 0.733 0.634 0.837 0.428 0.873 0.634 0.924 0.185 0.974 0.238 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.770 0.120 0.768 0.190 0.752 0.227 0.715 0.261 0.692 0.292 0.695 0.310 0.648 0.334 0.629 0.423 0.616 0.477 0.561 0.510 0.554 0.534 0.501 0.645 0.413 0.690 0.402 0.737 0.371 0.893 0.347 1.000 0.295) :duration dur :scaler (hz->radians 9780.0))) (gen1 (make-oscil)) (rnd (make-rand-interp 4000 (hz->radians 200)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (+ (env frqf) (rand-interp rnd))))))))) (wilsons-warbler-1 beg1 .046 (* .05 amp1)) (wilsons-warbler-1 (+ beg1 .147) .05 (* .1 amp1)) (let ((durs2 (vector 0.067 0.07 0.075 0.08 0.086 0.084 0.08 0.08 0.078)) (frqs2 (vector 1.0 1.0 0.95 0.93 1.0 1.0 1.0 1.0 0.95)) (amps2 (vector .2 .4 .7 1 1 .8 1 1 1))) (do ((i 0 (+ i 1))) ((= i 9)) (wilsons-warbler-2 (+ beg1 0.285 (* i .13)) (durs2 i) (frqs2 i) (* amp1 (amps2 i))))) (do ((i 0 (+ i 1))) ((= i 3)) (wilsons-warbler-3 (+ beg1 1.45 (* i 0.12)) (* amp1 .9)))) ;; (with-sound (:play #t) (wilsons-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Willow flycatcher (define-animal (willow-flycatcher beg amp) (let ((dur 0.65)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.016 0.054 0.026 0.142 0.033 0.292 0.043 0.228 0.056 0.240 0.088 0.162 0.107 0.218 0.125 0.105 0.130 0.019 0.196 0.012 0.208 0.053 0.215 0.031 0.221 0.086 0.223 0.711 0.228 0.828 0.231 0.760 0.237 0.978 0.242 0.679 0.245 0.966 0.250 0.272 0.253 0.177 0.262 0.131 0.264 0.000 0.405 0.000 0.417 0.069 0.426 0.174 0.431 0.402 0.435 0.301 0.445 0.338 0.452 0.240 0.460 0.000 0.501 0.000 0.504 0.159 0.509 0.069 0.519 0.096 0.521 0.228 0.524 0.000 0.536 0.000 0.539 0.336 0.541 0.103 0.547 0.449 0.550 0.157 0.554 0.000 0.557 0.086 0.560 0.419 0.562 0.169 0.565 0.000 0.567 0.066 0.568 0.174 0.569 0.419 0.572 0.123 0.574 0.027 0.576 0.167 0.577 0.537 0.582 0.056 0.583 0.237 0.584 0.564 0.588 0.211 0.590 0.051 0.592 0.232 0.594 0.515 0.595 0.179 0.597 0.041 0.599 0.177 0.601 0.426 0.603 0.153 0.606 0.029 0.609 0.172 0.612 0.395 0.614 0.029 0.617 0.169 0.620 0.412 0.623 0.024 0.625 0.148 0.628 0.375 0.631 0.022 0.634 0.148 0.636 0.336 0.640 0.031 0.644 0.150 0.646 0.348 0.650 0.041 0.654 0.165 0.655 0.338 0.659 0.039 0.664 0.165 0.665 0.336 0.668 0.058 0.671 0.260 0.674 0.162 0.677 0.321 0.680 0.218 0.682 0.343 0.684 0.167 0.696 0.265 0.702 0.348 0.708 0.326 0.716 0.385 0.720 0.520 0.727 0.451 0.731 0.561 0.738 0.267 0.745 0.321 0.750 0.108 0.772 0.118 0.782 0.167 0.792 0.282 0.802 0.409 0.811 0.257 0.816 0.083 0.833 0.069 0.852 0.103 0.863 0.152 0.867 0.250 0.877 0.047 0.929 0.091 0.938 0.054 0.953 0.027 0.986 0.039 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.174 0.042 0.324 0.074 0.339 0.111 0.390 0.130 0.453 0.190 0.831 0.210 0.780 0.225 0.605 0.227 0.504 0.240 0.489 0.248 0.453 0.251 0.346 0.262 0.165 0.412 0.155 0.422 0.230 0.430 0.288 0.435 0.334 0.448 0.337 0.456 0.395 0.458 0.467 0.503 0.402 0.506 0.235 0.513 0.213 0.520 0.240 0.524 0.443 0.537 0.441 0.540 0.298 0.544 0.262 0.547 0.298 0.553 0.443 0.558 0.453 0.561 0.324 0.563 0.508 0.570 0.324 0.573 0.511 0.577 0.329 0.581 0.482 0.585 0.332 0.590 0.479 0.594 0.332 0.598 0.467 0.602 0.320 0.606 0.453 0.611 0.300 0.615 0.443 0.620 0.291 0.623 0.450 0.628 0.262 0.631 0.438 0.637 0.259 0.640 0.436 0.646 0.264 0.649 0.436 0.655 0.257 0.659 0.438 0.664 0.247 0.668 0.407 0.673 0.264 0.679 0.400 0.683 0.291 0.702 0.298 0.716 0.334 0.721 0.397 0.728 0.370 0.733 0.402 0.738 0.438 0.742 0.375 0.748 0.249 0.755 0.232 0.766 0.264 0.785 0.295 0.797 0.310 0.801 0.354 0.803 0.426 0.808 0.361 0.815 0.203 0.824 0.184 0.834 0.225 0.852 0.254 0.861 0.293 0.867 0.349 0.881 0.157 0.889 0.155 0.895 0.184 0.913 0.206 0.926 0.257 0.930 0.310 0.946 0.136 0.956 0.123 0.969 0.169 0.987 0.208 1.000 0.262) :duration dur :scaler (hz->radians 10800.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .005 3 .01 4 .005))) (gen2 (make-oscil)) (ampf2 (make-env '(0 0 .68 0 .9 1 1 1) :duration dur :scaler .2))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (oscil gen2 (* 2.0 frq))))))))))) ;; (with-sound (:play #t) (willow-flycatcher 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Black-necked stilt (define-animal (black-necked-stilt beg amp) (let ((dur 0.085)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.034 0.133 0.121 0.287 0.210 0.586 0.358 0.950 0.419 1.000 0.514 1.000 0.611 0.912 0.819 0.251 0.893 0.204 0.962 0.105 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.246 0.073 0.252 0.107 0.294 0.131 0.276 0.160 0.300 0.269 0.334 0.345 0.350 0.451 0.361 0.548 0.359 0.692 0.352 0.765 0.328 0.803 0.300 0.832 0.318 0.865 0.285 1.000 0.266) :duration dur :scaler (hz->radians (* 1/3 10100.0)))) (gen1 (make-polywave 0.0 (normalize-partials '(1 .05 2 .25 3 1 4 .5 5 .2 6 .01 8 .03 9 .03 10 .01 11 .005 12 .005)))) (gen2 (make-polywave 0.0 '(3 .03 5 .05 7 .1 9 .03 11 .04 13 .015 15 .01 17 .005 19 .005 21 .005 23 .005))) (ampf2 (make-env '(0 1 .2 .1 .3 1 .5 0 .7 0 1 .5) :duration dur)) (rnd (make-rand-interp 4000 (hz->radians 500))) (rndf (make-env '(0 1 .2 0 .9 0 1 1) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (* (env rndf) (rand-interp rnd))))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (polywave gen2 (* 0.5 frq))))))))))) ;; (with-sound (:play #t) (black-necked-stilt 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Bushtit (define-animal (bushtit beg amp) (let ((dur 0.368) (pulse-dur .044) (start (seconds->samples beg))) (let ((stop (seconds->samples (+ beg dur))) (frqf (make-env '(0 0 1 -1) :duration dur :scaler (hz->radians 500))) (pulse-spacing (seconds->samples .064)) (pulse-samps (seconds->samples pulse-dur)) (pulse-ampf (make-env '(0.000 0.000 0.114 0.486 0.182 0.988 0.394 0.763 0.620 1.000 0.769 0.937 0.889 1.000 1.000 0.000) :duration pulse-dur :scaler amp)) (pulse-frqf (make-env '(0.000 0.230 0.109 0.291 0.212 0.322 0.298 0.343 0.410 0.348 0.654 0.357 0.821 0.354 0.889 0.337 0.952 0.304 1.000 0.231) :duration pulse-dur :scaler (hz->radians 22050.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01))) (gen2 (make-polywave 0.0 '(5 .9 7 .07 8 .02 9 .01 11 .02))) (pulse-ampf2 (make-env '(0 0 .65 0 .8 1 .9 1 1 0) :duration pulse-dur :scaler .4)) (pulse-frqf2 (make-env '(0 5400 .6 5400 .75 6300 1 5400) :duration pulse-dur :scaler (hz->radians 0.2) :base .1))) (let ((first-stop (+ start pulse-samps))) (do ((i start (+ i 1))) ((= i first-stop)) (outa i (* (env pulse-ampf) (polywave gen1 (+ (env pulse-frqf) (env frqf))))))) (set! start (+ start pulse-spacing)) (mus-reset pulse-ampf) (mus-reset pulse-frqf) (do ((i start (+ i pulse-spacing))) ((>= i stop)) (let ((reset-stop (min stop (+ i pulse-samps)))) (do ((k i (+ k 1))) ((= k reset-stop)) (outa k (+ (* (env pulse-ampf) (polywave gen1 (+ (env pulse-frqf) (env frqf)))) (* (env pulse-ampf2) (polywave gen2 (env pulse-frqf2)))))) (for-each mus-reset (vector pulse-ampf pulse-frqf pulse-ampf2 pulse-frqf2))))))) ;; (with-sound (:play #t) (bushtit 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Red-breasted nuthatch (define-animal (red-breasted-nuthatch beg amp) (let ((dur 0.287)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.084 0.402 0.289 0.914 0.400 0.957 0.501 0.957 0.530 0.895 0.600 0.988 0.680 1.000 0.786 0.926 0.860 0.984 0.912 0.969 0.962 0.855 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.257 0.029 0.306 0.061 0.322 0.101 0.318 0.965 0.361 1.000 0.316) :duration dur :scaler (hz->radians (* 0.2 7510.0)))) (gen1 (make-polywave 0.0 '(1 .95 2 .03 3 .03))) (mod1 (make-oscil)) (index (hz->radians (* 510 1.25))) (rnd (make-rand-interp 100 (hz->radians 6)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (polywave gen1 (+ (* 5.0 frq) (* index (oscil mod1 frq))))))))))) ;; (with-sound (:play #t) (red-breasted-nuthatch 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; White-breasted nuthatch (define-animal (white-breasted-nuthatch beg amp) (let ((dur 0.31)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.157 0.871 0.386 1.000 0.728 0.759 0.951 0.306 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.318 0.045 0.392 0.160 0.418 0.254 0.418 0.517 0.404 0.816 0.367 1.000 0.310) :duration dur :scaler (hz->radians (* 0.25 8900)))) (gen1 (make-polywave 0.0 '(1 .96 2 .02 3 .03))) (gen2 (make-polywave 0.0 '(4 .005 5 .01))) (ampf2 (make-env '(0 1 .65 1 .75 0 1 0) :duration dur)) (mod1 (make-oscil)) (index (hz->radians (* 800 0.4))) (rnd (make-rand-interp 100 (hz->radians 16))) (vib (make-oscil 40.0)) (vib-index (hz->radians 50))) (do ((i start (+ i 1))) ((= i stop)) (let* ((vb (oscil vib)) (frq (+ (env frqf) (rand-interp rnd) (* vib-index vb))) (mfrq (+ (* 3.0 frq) (* index (oscil mod1 frq))))) (outa i (* (env ampf) (+ .7 (* .3 (abs vb))) (+ (polywave gen1 mfrq) (* (env ampf2) (polywave gen2 mfrq)))))))))) ;; (with-sound (:play #t) (white-breasted-nuthatch 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Pygmy nuthatch (define-animal (pygmy-nuthatch beg amp) (let ((dur 0.12)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.096 0.247 0.148 0.591 0.206 0.767 0.244 0.995 0.260 0.470 0.385 0.406 0.406 0.240 0.425 0.370 0.475 0.244 0.488 0.324 0.511 0.326 0.528 0.258 0.544 0.336 0.594 0.331 0.638 0.256 0.689 0.288 0.720 0.279 0.769 0.299 0.795 0.249 0.818 0.272 0.841 0.242 0.856 0.292 0.865 0.205 0.876 0.304 0.897 0.304 0.932 0.126 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.096 0.063 0.174 0.090 0.199 0.127 0.205 0.25 0.210 0.26 0.237 0.733 0.222 0.865 0.210 0.890 0.195 0.912 0.159 0.930 0.145 1.000 0.138) :duration dur :scaler (hz->radians 21500.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .005 3 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (pygmy-nuthatch 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Flammulated owl (define-animal (flammulated-owl beg amp) (let ((dur 0.25)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.146 0.603 0.286 0.858 0.455 0.992 0.629 0.983 0.789 0.819 0.907 0.473 0.946 0.445 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 340 .1 400 .15 410 .9 420 1 380) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (flammulated-owl 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Song sparrow (define (song-sparrow beg1 amp1) (define-animal (song-sparrow-big-buzz beg amp) (let ((dur 0.25)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.106 0.826 0.190 0.996 0.418 0.818 0.688 0.458 0.897 0.447 0.962 0.348 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 4400 .4 4200 1 4300) :duration dur :scaler (hz->radians 1.0))) (gen-up (make-polywave 0.0 #(1 .95 2 .03 3 .02))) (gen-down (make-polywave 0.0 #(1 .95 2 .03 3 .02))) (mod-up (make-oscil 142.0)) (mod-down (make-oscil 142.0)) (pulse-samps (seconds->samples (/ 1.0 142.0))) (ampf-up (make-env '(0 .1 .23 .01 .27 .01 .6 .5 .75 1 .8 .4 1 .1) :duration (/ 1.0 142.0))) (ampf-down (make-env '(0 .1 .2 .6 .25 1 .6 .1 .75 .001 1 .1) :duration (/ 1.0 142.0))) (ampf2 (make-env '(0 1 1 0) :duration dur :scaler 0.7)) (rnd (make-rand-interp 6000 (hz->radians 300))) (h700 (hz->radians 700.0)) (h800 (hz->radians 800.0)) (h600 (hz->radians -600.0))) (do ((i start (+ i pulse-samps))) ((>= i stop)) (set! (mus-location frqf) (- i start)) (set! (mus-location ampf) (- i start)) (set! (mus-location ampf2) (- i start)) (let ((reset-stop (min stop (+ i pulse-samps))) (pulse-amp (env ampf)) (pulse-amp2 (env ampf2)) (pulse-frq (env frqf))) (do ((k i (+ k 1))) ((= k reset-stop)) (let ((frq (+ pulse-frq (rand-interp rnd)))) (outa k (* pulse-amp (+ (* (env ampf-up) (polywave gen-up (+ frq h700 (* h800 (oscil mod-up))))) (* pulse-amp2 (env ampf-down) (polywave gen-down (+ frq h600 (* h800 (oscil mod-down)))))))))) (mus-reset ampf-up) (mus-reset ampf-down)))))) (define-animal (song-sparrow-clear-tone beg frq amp) (let ((dur 0.062)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.054 0.208 0.138 0.327 0.162 0.292 0.306 0.659 0.352 0.698 0.400 0.835 0.468 0.894 0.507 0.808 0.548 0.906 0.593 0.833 0.623 0.939 0.668 0.902 0.710 0.971 0.735 0.678 0.759 0.937 0.777 1.000 0.792 0.820 0.800 0.922 0.847 0.806 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.203 0.043 0.253 0.118 0.276 0.446 0.263 0.575 0.251 0.707 0.226 0.883 0.187 1.000 0.153) :duration dur :scaler (hz->radians (* frq 22050.0)))) (gen1 (make-polywave 0.0 '(1 .98 2 .005 3 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (song-sparrow-sweep-tone beg amp) (let ((dur 0.036)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.048 0.158 0.098 0.474 0.201 0.574 0.235 0.206 0.357 0.206 0.419 0.366 0.468 0.331 0.489 0.173 0.519 0.579 0.567 0.639 0.604 0.972 0.647 0.556 0.697 0.391 0.75 0.0) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.358 0.033 0.355 0.060 0.321 0.078 0.240 0.098 0.214 0.120 0.257 0.153 0.364 0.187 0.420 0.242 0.428 0.289 0.418 0.348 0.390 0.465 0.381 0.531 0.360 0.571 0.338 0.609 0.306 0.668 0.246 0.75 0.223) :duration dur :scaler (hz->radians 22050.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .05)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (song-sparrow-sweep-caw beg amp) (let ((dur 0.025)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.155 0.364 0.185 0.154 0.242 0.542 0.283 0.526 0.321 0.660 0.386 0.846 0.451 0.292 0.481 1.000 0.546 0.881 0.584 0.676 0.636 0.798 0.685 0.269 0.755 0.640 0.791 0.316 0.957 0.115 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.210 0.170 0.232 0.187 0.164 0.453 0.212 0.462 0.159 0.668 0.201 0.699 0.147 0.905 0.181 1.000 0.164) :duration dur :scaler (* .5 (hz->radians 22050.0)))) (gen (make-polywave 0.0 '(2 .92 3 .02 4 .01 5 .005))) (rnd (make-rand-interp 4000 (hz->radians 500)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen (+ (env frqf) (rand-interp rnd))))))))) (define-animal (song-sparrow-little-buzz beg amp) (let ((dur 0.17)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 2 1 4 0) :duration dur :scaler amp)) (frqf (make-env '(0 0 1 1) :duration dur :scaler (hz->radians 20))) (gen (make-polywave 610.0 (normalize-partials '(3 .4 4 1 5 .01 6 .2 7 .03 8 .02 9 .01 10 .01 11 .01 12 .005)))) (rnd (make-rand-interp 4000 (hz->radians 50))) (tri (make-triangle-wave 60 0.6))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .4 (abs (triangle-wave tri))) (polywave gen (+ (env frqf) (rand-interp rnd))))))))) (define-animal (song-sparrow-sweep-down beg amp) (let ((dur 0.186)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.125 0.212 0.164 1.000 0.206 0.218 0.231 0.278 0.243 0.470 0.273 0.136 0.301 0.419 0.311 0.691 0.329 0.530 0.341 0.501 0.354 0.295 0.373 0.382 0.383 0.193 0.397 0.232 0.403 0.127 0.415 0.238 0.426 0.173 0.433 0.238 0.452 0.088 0.528 0.286 0.552 0.150 0.564 0.309 0.590 0.133 0.608 0.303 0.635 0.204 0.659 0.215 0.673 0.275 0.709 0.380 0.718 0.292 0.727 0.354 0.749 0.235 0.800 0.139 0.831 0.153 0.853 0.232 0.886 0.130 0.911 0.337 0.932 0.147 0.949 0.224 0.965 0.082 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 9000 .08 7900 .164 7385 .2 7000 1 6960) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .05)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (song-sparrow-sweep-up beg amp) (let ((dur 0.076)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 2 1 3 0) :base .1 :duration dur :scaler amp)) (frqf (make-env '(0 2260 .3 3000 .9 3100 1 3300) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .005 3 .01 4 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (song-sparrow-2nd-buzz beg amp) (let ((dur 0.053)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.101 0.110 0.174 0.229 0.206 0.229 0.220 0.153 0.231 0.285 0.263 0.449 0.293 0.424 0.315 0.698 0.374 0.661 0.416 0.884 0.554 0.785 0.587 0.661 0.600 0.037 0.608 0.859 0.685 0.554 0.692 0.034 0.705 0.734 0.729 0.602 0.741 0.079 0.753 0.695 0.787 0.737 0.803 0.110 0.813 0.520 0.841 0.757 0.868 0.085 0.882 0.398 0.899 0.514 0.922 0.172 0.952 0.280 0.962 0.150 0.993 0.198 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0 3100 .4 3430 1 3140) :duration dur :offset (hz->radians 40) :scaler (hz->radians 0.5))) (gen1 (make-polywave 0.0 '(1 .1 2 .5 3 .2 4 .1 6 .05 8 .03))) (vib (make-blackman 320 4)) (scl (hz->radians 200))) (do ((i start (+ i 1))) ((= i stop)) (let ((vb (blackman vib))) (outa i (* (env ampf) (+ .4 (* .6 vb)) (polywave gen1 (+ (env frqf) (* scl vb)))))))))) (define-animal (song-sparrow-chiff beg amp) (let ((dur 0.019)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 2 0) :duration dur :scaler amp)) (frqf (make-env '(0 4800 .4 5500 .6 6060 .9 4200 1 4100) :duration dur :scaler (hz->radians 0.32))) (gen1 (make-polywave 0.0 '(3 .7 4 .3 7 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (song-sparrow-little-buzz beg1 (* .25 amp1)) (song-sparrow-clear-tone (+ beg1 0.2) 1.0 (* 0.9 amp1)) (song-sparrow-little-buzz (+ beg1 .37) (* .4 amp1)) (song-sparrow-clear-tone (+ beg1 0.57) 1.0 amp1) (do ((amps (vector .14 .33 .37 .37 .30 .30 .30)) (i 0 (+ i 1)) (x 0.68 (+ x .1))) ((= i 7)) (song-sparrow-sweep-tone (+ beg1 x) (* (amps i) amp1)) (song-sparrow-sweep-caw (+ beg1 x .05) (* 0.5 amp1))) (song-sparrow-sweep-tone (+ beg1 1.37) (* .27 amp1)) (song-sparrow-big-buzz (+ beg1 1.44) (* 0.75 amp1)) (song-sparrow-2nd-buzz (+ 1.73 beg1) (* .25 amp1)) (song-sparrow-sweep-up (+ 1.8 beg1) (* .5 amp1)) (song-sparrow-chiff (+ 1.92 beg1) (* .3 amp1)) (song-sparrow-sweep-down (+ beg1 1.96) (* .3 amp1)) (song-sparrow-clear-tone (+ beg1 2.22) 0.86 (* .8 amp1))) ;; (with-sound (:play #t) (song-sparrow 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Burrowing owl (define-animal (burrowing-owl beg amp) (let ((dur 0.6)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.038 0.510 0.060 0.743 0.082 0.822 0.114 0.775 0.125 0.692 0.204 0.000 0.416 0.000 0.465 0.858 0.500 1.000 0.571 0.921 0.611 0.937 0.927 0.526 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.029 0.035 0.108 0.045 0.133 0.091 0.135 0.129 0.132 0.176 0.107 0.190 0.043 0.424 0.046 0.446 0.110 0.468 0.133 0.75 .133 0.8 .129 0.936 0.127 0.973 0.104 1.000 0.035) :duration dur :scaler (hz->radians 6800.0))) (rnd (make-rand-interp 200 (hz->radians 5))) (gen1 (make-polywave 0.0 '(1 .92 2 .08))) (gen2 (make-polywave 0.0 '(3 .01 4 .01 6 .005 7 .007 8 .002 9 .002 10 .002 12 .001))) (ampf2 (make-env '(0 0 .05 0 .09 1 .13 1 .2 0 .45 0 .5 1 .9 1 1 0) :duration dur)) (gen3 (make-oscil)) (ampf3 (make-env '(0 0 .08 0 .12 .4 .2 0 .46 0 .5 .5 .6 0 .65 0 .8 1 .9 1 1 0) :duration dur :scaler .015))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (polywave gen2 frq)) (* (env ampf3) (oscil gen3 (* 5.0 frq))))))))))) ;; (with-sound (:play #t) (burrowing-owl 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Gray vireo ;;; ;;; (I didn't really intend to do 5 of these calls) (define-animal (gray-vireo-1 beg amp) (let ((dur 0.23)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.059 0.052 0.078 0.132 0.085 0.076 0.099 0.100 0.108 0.260 0.125 0.102 0.134 0.280 0.143 0.254 0.146 0.306 0.158 0.197 0.184 0.403 0.193 0.403 0.201 0.180 0.208 0.239 0.217 0.375 0.222 0.000 0.229 0.232 0.237 0.158 0.254 0.800 0.263 0.846 0.307 0.785 0.322 0.850 0.334 1.000 0.350 0.731 0.357 0.822 0.369 0.599 0.378 0.711 0.384 0.375 0.389 0.688 0.393 0.315 0.396 0.657 0.410 0.291 0.419 0.414 0.491 0.412 0.566 0.258 0.593 0.06 0.659 0.01 0.754 0.06 0.772 0.245 0.854 0.523 0.892 0.330 0.932 0.436 0.947 0.182 0.957 0.228 0.981 0.063 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.203 0.033 0.198 0.051 0.218 0.064 0.189 0.085 0.226 0.101 0.187 0.116 0.214 0.133 0.183 0.199 0.172 0.216 0.186 0.242 0.288 0.256 0.330 0.297 0.330 0.324 0.316 0.441 0.243 0.506 0.215 0.556 0.206 0.690 0.107 0.721 0.104 0.739 0.136 0.769 0.215 0.796 0.266 0.833 0.282 1.000 0.29) :duration dur :scaler (hz->radians 10250.0))) (gen1 (make-oscil)) (gen2 (make-oscil)) (interpf (make-env '(0 .5 .2 .1 .25 .99 .6 .95 .7 .3 .75 .99 1 .99) :duration dur)) (interpf-1 (make-env '(0 .5 .2 .1 .25 .99 .6 .95 .7 .3 .75 .99 1 .99) :duration dur :offset 1.0 :scaler -1.0))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env interpf) (oscil gen1 frq)) (* (env interpf-1) (oscil gen2 (* 2.0 frq))))))))))) ;; (with-sound (:play #t) (gray-vireo-1 0 .5)) (define-animal (gray-vireo-2 beg amp) ;; probably calif2 18 4 (let ((dur 0.23)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.026 0.099 0.067 0.176 0.097 0.111 0.110 0.199 0.147 0.096 0.186 0.110 0.214 0.068 0.228 0.113 0.245 0.069 0.254 0.097 0.264 0.209 0.274 0.143 0.291 0.096 0.301 0.250 0.315 0.347 0.332 0.166 0.343 0.144 0.353 0.369 0.364 0.446 0.371 0.429 0.390 0.196 0.403 0.383 0.411 0.495 0.434 0.372 0.442 0.192 0.456 0.449 0.471 0.364 0.479 0.505 0.486 0.487 0.492 0.413 0.500 0.455 0.509 0.323 0.515 0.361 0.519 0.212 0.524 0.259 0.529 0.469 0.548 0.549 0.562 0.235 0.565 0.316 0.576 0.385 0.582 0.488 0.594 0.493 0.600 0.402 0.612 0.355 0.616 0.414 0.624 0.306 0.636 0.289 0.641 0.223 0.648 0.349 0.655 0.287 0.674 0.325 0.682 0.270 0.691 0.133 0.712 0.275 0.726 0.319 0.743 0.578 0.765 0.722 0.776 0.651 0.796 1.000 0.808 0.686 0.816 0.556 0.825 0.826 0.833 0.527 0.835 0.725 0.848 0.281 0.855 0.639 0.861 0.405 0.863 0.485 0.869 0.250 0.871 0.414 0.876 0.193 0.882 0.468 0.886 0.443 0.894 0.141 0.897 0.312 0.901 0.181 0.903 0.435 0.907 0.339 0.910 0.432 0.937 0.399 0.949 0.234 0.974 0.243 0.993 0.159 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.260 0.040 0.245 0.091 0.203 0.122 0.174 0.152 0.221 0.174 0.240 0.190 0.297 0.211 0.232 0.227 0.284 0.248 0.250 0.261 0.331 0.289 0.260 0.304 0.333 0.321 0.336 0.337 0.286 0.356 0.349 0.371 0.346 0.386 0.299 0.406 0.359 0.422 0.359 0.439 0.307 0.460 0.383 0.474 0.380 0.489 0.352 0.513 0.414 0.533 0.378 0.546 0.385 0.564 0.432 0.582 0.383 0.598 0.393 0.609 0.435 0.678 0.430 0.719 0.466 0.780 0.518 0.821 0.560 0.856 0.620 0.922 0.677 1.000 0.701) :duration dur :scaler (hz->radians 6030.0))) (gen1 (make-oscil)) (gen2 (make-oscil)) (gen3 (make-oscil)) (interpf (make-env '(0 .1 .2 .1 .3 .99 1 .99) :duration dur)) (interpf-1 (make-env '(0 .1 .2 .1 .3 .99 1 .99) :duration dur :offset 1.0 :scaler -0.5))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env interpf) (oscil gen1 frq)) (* (env interpf-1) (+ (oscil gen2 (* 2.0 frq)) (oscil gen3 (* 3.0 frq)))))))))))) ;; (with-sound (:play #t) (gray-vireo-2 0 .5)) (define-animal (gray-vireo-3 beg amp) ;; south 44 4 ;; part 1 -- I could not find a way to get this right short of brute force additive synthesis (let ((dur 0.1)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.167 0.561 0.210 0.243 0.245 0.298 0.272 0.793 0.437 0.171 0.572 0.296 0.604 0.202 0.734 0.599 0.759 0.597 0.829 0.425 0.881 0.843 1.000 0.000) :duration dur :scaler (* 0.2 amp))) (frqf (make-env '(0.000 0.260 0.060 0.301 0.100 0.371 0.151 0.442 0.191 0.465 0.251 0.447 0.313 0.365 0.381 0.266 0.458 0.228 0.546 0.231 0.632 0.243 0.708 0.275 0.792 0.310 0.855 0.339 0.899 0.389 0.934 0.404 0.964 0.398 1.000 0.363) :duration dur :scaler (hz->radians (* 1/3 11500.0)))) (ampfs (make-vector 5))) (set! (ampfs 0) (make-env '(0.000 0.000 0.061 0.000 0.201 0.997 0.278 0.997 0.441 0.000 0.662 0.000 0.783 0.456 0.864 0.459 0.970 0.000 1.000 0.000) :duration dur :scaler .1)) (set! (ampfs 1) (make-env '(0.000 0.000 0.153 0.639 0.307 0.639 0.457 0.109 0.617 0.107 0.739 1.000 0.913 1.000 1.000 0.298) :duration dur :scaler .4)) (set! (ampfs 2) (make-env '(0.000 0.000 0.190 0.842 0.266 0.514 0.297 1.000 0.456 0.257 0.599 0.260 0.670 0.702 0.707 0.579 0.739 0.710 0.808 0.325 0.865 0.519 1.000 0.402) :duration dur :scaler .2)) (set! (ampfs 3) (make-env '(0.000 0.000 0.064 0.077 0.157 0.653 0.255 0.699 0.311 0.995 0.352 0.615 0.389 0.986 0.458 0.178 0.667 0.363 0.750 0.000 1.000 0.000) :duration dur :scaler .07)) (set! (ampfs 4) (make-env '(0.000 0.000 0.159 0.995 0.314 0.997 0.598 0.000 1.000 0.000) :duration dur :scaler .01)) (let ((frqs (make-float-vector 5)) (amps (make-float-vector 5))) (let ((obank (make-oscil-bank frqs (make-float-vector 5) amps))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (do ((k 0 (+ k 1)) (f frq (+ f frq))) ((= k 5)) (set! (amps k) (env (vector-ref ampfs k))) (set! (frqs k) f)) (outa i (* (env ampf) (oscil-bank obank))))))))) ;; part 2 (let ((dur 0.137)) (let ((start (seconds->samples (+ beg 0.1))) (stop (seconds->samples (+ beg 0.1 dur))) (ampf (make-env '(0.000 0.000 0.042 0.123 0.086 0.399 0.155 0.626 0.176 0.169 0.190 0.691 0.205 0.877 0.224 0.552 0.246 0.828 0.274 0.978 0.319 0.937 0.356 0.893 0.410 0.866 0.461 0.956 0.565 0.784 0.622 0.311 0.648 0.423 0.671 0.279 0.688 0.096 0.705 0.328 0.713 0.284 0.725 0.096 0.807 0.254 0.844 0.134 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.493 0.034 0.542 0.048 0.550 0.066 0.515 0.102 0.485 0.151 0.463 0.168 0.431 0.181 0.455 0.198 0.450 0.216 0.436 0.232 0.439 0.444 0.439 0.572 0.444 0.703 0.463 0.800 0.472 1.000 0.458) :duration dur :scaler (hz->radians 7300.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .01 3 .02 4 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (gray-vireo-3 0 .5)) (define-animal (gray-vireo-4 beg amp) (let ((dur 0.23)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.081 0.163 0.123 0.184 0.185 0.447 0.204 0.081 0.230 0.626 0.245 0.607 0.271 0.398 0.293 0.130 0.305 0.347 0.326 0.444 0.339 0.279 0.349 0.382 0.366 0.751 0.388 0.347 0.405 0.965 0.417 0.783 0.435 0.992 0.452 0.737 0.471 0.916 0.523 0.702 0.534 0.526 0.543 0.770 0.563 0.496 0.581 0.558 0.625 0.393 0.646 0.439 0.712 0.388 0.761 0.455 0.832 0.141 0.845 0.081 0.875 0.106 0.911 0.068 0.959 0.154 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.534 0.054 0.509 0.089 0.480 0.128 0.447 0.168 0.477 0.195 0.531 0.224 0.661 0.240 0.507 0.278 0.350 0.304 0.295 0.319 0.333 0.334 0.409 0.352 0.369 0.370 0.442 0.398 0.431 0.414 0.504 0.485 0.493 0.563 0.458 0.621 0.431 0.697 0.423 0.814 0.409 1.000 0.420) :duration dur :scaler (hz->radians 6230.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .003 3 .007))) (ampf1 (make-env '(0 0 .22 0 .23 1 1 1) :duration dur)) (gen2 (make-polywave 0.0 '(1 .05 2 .9 3 .1 4 .07))) (ampf2 (make-env '(0 1 .2 1 .22 0 1 0) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env ampf1) (polywave gen1 frq)) (* (env ampf2) (polywave gen2 (* 0.5 frq))))))))))) ;; (with-sound (:play #t) (gray-vireo-4 0 .5)) (define-animal (gray-vireo-5 beg amp) (let ((dur 0.256)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.010 0.160 0.025 0.133 0.044 0.301 0.060 0.314 0.072 0.724 0.085 0.678 0.088 0.374 0.106 0.634 0.114 0.930 0.127 0.718 0.141 1.000 0.175 0.233 0.220 0.528 0.244 0.496 0.270 0.648 0.320 0.564 0.353 0.393 0.376 0.667 0.443 0.623 0.493 0.447 0.524 0.474 0.570 0.287 0.583 0.320 0.682 0.117 0.856 0.079 0.933 0.057 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.371 0.029 0.393 0.047 0.428 0.074 0.425 0.097 0.333 0.116 0.206 0.149 0.168 0.192 0.190 0.242 0.214 0.314 0.217 0.437 0.198 0.876 0.165 1.000 0.146) :duration dur :scaler (hz->radians 11150.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 4 .005))) (ampf1 (make-env '(0 1 .09 1 .14 .1 .2 1 .6 .8 .9 .8 1 1) :duration dur)) (gen2 (make-oscil)) (ampf2 (make-env '(0 0 .09 0 .14 1 .18 1 .23 0 .6 0 .7 .4 1 0) :duration dur :scaler .5)) (gen3 (make-oscil)) (ampf3 (make-env '(0 0 .2 0 .25 1 .5 1 .6 0 1 0) :duration dur :scaler .01))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env ampf1) (polywave gen1 frq)) (* (env ampf2) (oscil gen2 (* frq 2))) (* (env ampf3) (oscil gen3 (* frq 3))))))))))) ;; (with-sound (:play #t) (gray-vireo-5 0 .5)) (define (gray-vireo beg amp) (gray-vireo-3 beg amp) (gray-vireo-4 (+ beg 1.1) amp) (gray-vireo-5 (+ beg 2.1) amp)) ;; (with-sound (:play #t) (gray-vireo 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Bald eagle (define (bald-eagle beg amp) (define-animal (bald-eagle-1 beg amp) (let ((dur 0.153)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.016 0.145 0.042 0.773 0.084 0.471 0.097 0.265 0.112 0.124 0.123 0.297 0.134 0.937 0.151 0.665 0.166 0.810 0.194 0.733 0.228 0.218 0.244 0.059 0.269 0.373 0.280 0.621 0.292 0.597 0.314 0.681 0.368 0.241 0.389 0.332 0.411 0.688 0.431 0.674 0.447 0.539 0.477 0.452 0.517 0.572 0.534 0.550 0.555 0.455 0.576 0.457 0.597 0.494 0.613 0.391 0.630 0.073 0.648 0.164 0.671 0.119 0.680 0.014 0.700 0.077 0.737 0.045 0.757 0.075 0.803 0.024 0.817 0.065 0.855 0.028 0.866 0.063 0.906 0.033 0.973 0.042 1.000 0.000) :duration dur :scaler amp)) (frqf1 (make-env '(0.000 0.268 0.042 0.273 0.132 0.280 0.281 0.280 0.409 0.273 0.609 0.282 0.686 0.289 1.000 0.273) :duration dur :scaler (hz->radians 10000.0))) (frqf2 (make-env '(0.000 0.541 0.050 0.543 0.130 0.555 0.202 0.559 0.271 0.568 0.413 0.534 0.522 0.543 0.586 0.559 0.638 0.582 0.706 0.566 0.791 0.539 0.852 0.516 0.922 0.466 0.962 0.400 1.000 0.309) :duration dur :scaler (hz->radians 10000.0))) (gen1 (make-polywave 0.0 '(1 .98 3 .02))) (gen2 (make-polywave 0.0 '(1 .95 2 .05))) (intrpf (make-env '(0 .9 .6 .9 .7 .5 1 .5) :duration dur)) (intrpf-1 (make-env '(0 .9 .6 .9 .7 .5 1 .5) :duration dur :offset 1.0 :scaler -1.0)) (rnd (make-rand-interp 2000 )) (rndf (make-env '(0 0 .02 0 .04 1 .06 0 .13 0 .135 1 .14 0 .27 0 .276 1 .28 0 .4 0 .405 1 .41 0 .678 0 .682 1 1 1) :duration dur :offset (hz->radians 40) :scaler (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (let ((noise (* (env rndf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (* (env intrpf) (polywave gen1 (+ (env frqf1) noise))) (* (env intrpf-1) (polywave gen2 (+ (env frqf2) (* 2.0 noise)))))))))))) (define-animal (bald-eagle-2 beg amp) (let ((dur 0.074)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.045 0.084 0.073 0.223 0.176 0.395 0.207 1.000 0.245 0.616 0.276 0.093 0.301 0.325 0.349 0.316 0.396 0.211 0.445 0.075 0.643 0.145 0.777 0.170 0.804 0.291 0.848 0.164 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.752 0.065 0.617 0.116 0.597 0.140 0.513 0.158 0.420 0.177 0.273 0.255 0.285 0.351 0.285 0.393 0.285 0.467 0.287 0.518 0.293 0.582 0.301 0.638 0.163 0.690 0.225 0.752 0.282 0.800 0.262 0.875 0.268 1.000 0.290) :duration dur :scaler (hz->radians 10100.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01))) (rnd (make-rand-interp 2000)) (rndf (make-env '(0 0 .16 0 .25 1 1 .5) :duration dur :offset (hz->radians 100) :scaler (hz->radians 500)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (* (env rndf) (rand-interp rnd)))))))))) (define-animal (bald-eagle-3 beg amp) (let ((dur 0.074)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.048 0.225 0.130 0.273 0.170 0.507 0.190 1.000 0.204 0.775 0.259 0.761 0.318 0.349 0.361 0.501 0.447 0.045 0.476 0.375 0.539 0.476 0.560 0.679 0.593 0.670 0.613 0.583 0.668 0.028 0.684 0.177 0.727 0.068 0.741 0.400 0.766 0.504 0.784 0.372 0.826 0.400 0.857 0.318 0.879 0.085 0.937 0.045 0.979 0.073 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.449 0.076 0.410 0.122 0.325 0.150 0.195 0.190 0.195 0.255 0.198 0.371 0.198 0.436 0.198 0.465 0.215 0.521 0.203 0.745 0.198 1.000 0.195) :duration dur :scaler (hz->radians 14000.0))) (gen1 (make-polywave 0.0 '(1 .99 3 .01))) (gen2 (make-polywave 0.0 '(1 .9 2 .1))) (ampf2 (make-env '(0 0 .2 0 .25 1 .3 1 .35 0 .5 0 .55 1 .6 1 .65 0 .75 0 .8 .5 .9 0 1 0) :scaler .1 :duration dur)) (rnd (make-rand-interp 2000 (hz->radians 200)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (polywave gen2 (* 2.0 frq))))))))))) (define-animal (bald-eagle-4 beg frqscl amp) (let ((dur 0.056)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.079 0.116 0.125 0.198 0.154 0.867 0.190 0.994 0.214 0.743 0.260 0.867 0.282 0.802 0.315 0.825 0.330 0.636 0.371 0.678 0.423 0.825 0.468 0.734 0.504 0.542 0.549 0.619 0.595 0.960 0.637 0.686 0.669 0.130 0.772 0.418 0.823 0.147 0.890 0.056 0.929 0.090 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.215 0.035 0.243 0.060 0.285 0.086 0.268 0.121 0.198 0.135 0.137 0.154 0.167 0.218 0.186 0.880 0.181 1.000 0.192) :duration dur :scaler (hz->radians (* frqscl 13920)))) (gen1 (make-polywave 0.0 '(1 .96 2 .04 3 .007 4 .002))) (rnd (make-rand-interp 4000 (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (rand-interp rnd))))))))) (bald-eagle-1 beg (* amp .8)) (bald-eagle-2 (+ beg .195) (* amp .7)) (bald-eagle-3 (+ beg .32) (* amp .7)) (bald-eagle-4 (+ beg .47) 1.1 amp) (bald-eagle-4 (+ beg .63) 1.05 amp) (bald-eagle-4 (+ beg .806) 1.0 amp)) ;; (with-sound (:play #t) (bald-eagle 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Eastern meadowlark (define-animal (eastern-meadowlark beg amp) (let ((dur 1.65)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.011 0.304 0.022 0.310 0.032 0.162 0.039 0.000 0.121 0.000 0.136 0.148 0.145 0.138 0.152 0.184 0.170 0.430 0.188 0.406 0.213 0.556 0.244 0.700 0.273 0.999 0.280 0.992 0.293 0.000 0.335 0.000 0.341 0.169 0.356 0.786 0.369 0.941 0.389 0.689 0.399 0.622 0.430 0.515 0.480 0.426 0.494 0.000 0.518 0.000 0.524 0.383 0.528 0.017 0.540 0.446 0.549 0.000 0.585 0.000 0.591 0.113 0.610 0.134 0.631 0.175 0.644 0.261 0.656 0.212 0.665 0.282 0.680 0.196 0.691 0.233 0.702 0.182 0.715 0.226 0.726 0.281 0.733 0.268 0.747 0.370 0.753 0.328 0.760 0.450 0.767 0.402 0.770 0.469 0.777 0.412 0.795 0.714 0.812 0.515 0.825 0.444 0.839 0.250 0.843 0.015 0.852 0.295 0.856 0.254 0.858 0.045 0.863 0.008 0.867 0.075 0.870 0.279 0.878 0.304 0.891 0.189 0.910 0.115 0.932 0.068 0.960 0.034 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.197 0.051 0.192 0.097 0.437 0.129 0.421 0.201 0.371 0.285 0.332 0.325 0.343 0.341 0.358 0.386 0.269 0.410 0.245 0.481 0.231 0.524 0.229 0.533 0.214 0.557 0.214 0.576 0.231 0.579 0.725 0.588 0.710 0.594 0.635 0.606 0.596 0.644 0.509 0.724 0.439 0.756 0.397 0.800 0.297 0.825 0.264 0.851 0.271 0.870 0.275 0.892 0.214 0.925 0.194 1.000 0.197) :duration dur :scaler (hz->radians 10280.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .005 3 .01 4 .005 5 .002))) (buzz (make-oscil 350)) (buzzf (make-env '(0 0 .59 0 .6 1 .61 1 .64 0 1 0) :duration dur :scaler (hz->radians 300)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (* (env buzzf) (oscil buzz)))))))))) ;; (with-sound (:play #t) (eastern-meadowlark 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Yellow-green vireo (define-animal (yellow-green-vireo beg amp) ;; south 48 3.5 (let ((dur 0.22)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.054 0.070 0.083 0.403 0.109 0.142 0.137 0.558 0.155 0.682 0.173 0.408 0.183 0.915 0.213 0.879 0.236 1.000 0.290 0.938 0.309 0.257 0.311 0.800 0.321 0.384 0.329 0.607 0.337 0.117 0.345 0.930 0.357 0.155 0.390 0.329 0.395 0.486 0.418 0.359 0.436 0.274 0.493 0.384 0.518 0.363 0.529 0.276 0.542 0.471 0.567 0.490 0.573 0.361 0.587 0.618 0.595 0.380 0.600 0.722 0.609 0.365 0.622 0.845 0.652 0.193 0.665 0.913 0.715 0.713 0.731 0.837 0.745 0.486 0.753 0.826 0.764 0.713 0.780 0.204 0.787 0.437 0.799 0.053 0.816 0.255 0.859 0.501 0.885 0.735 0.910 0.378 0.924 0.724 0.958 0.098 0.966 0.197 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.310 0.043 0.321 0.074 0.470 0.095 0.523 0.113 0.544 0.138 0.513 0.170 0.451 0.224 0.413 0.291 0.418 0.314 0.451 0.330 0.392 0.348 0.340 0.369 0.298 0.392 0.278 0.442 0.262 0.515 0.266 0.574 0.295 0.617 0.338 0.647 0.380 0.672 0.418 0.692 0.439 0.738 0.454 0.793 0.464 0.843 0.464 0.890 0.477 0.923 0.490 0.955 0.494 0.978 0.475 1.000 0.433) :duration dur :scaler (hz->radians 10000.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .003 3 .02)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (yellow-green-vireo 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Magnolia warbler (define-animal (magnolia-warbler beg amp) ;; east 13 3 (let ((dur 0.96)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.018 0.030 0.034 0.085 0.060 0.000 0.071 0.040 0.087 0.058 0.105 0.137 0.110 0.027 0.118 0.000 0.176 0.000 0.211 0.076 0.226 0.218 0.229 0.366 0.240 0.419 0.252 0.088 0.261 0.000 0.300 0.000 0.321 0.391 0.325 0.340 0.330 0.490 0.336 0.516 0.338 0.482 0.342 0.620 0.344 0.364 0.346 0.600 0.357 0.562 0.365 0.000 0.370 0.059 0.384 0.542 0.387 0.484 0.393 0.626 0.406 0.788 0.422 0.000 0.458 0.000 0.474 0.186 0.490 0.246 0.498 0.275 0.511 0.541 0.513 0.475 0.526 0.917 0.536 0.633 0.539 0.698 0.554 0.000 0.593 0.000 0.610 0.414 0.613 0.794 0.617 0.689 0.619 0.847 0.625 0.942 0.628 0.480 0.631 0.904 0.636 0.814 0.653 0.000 0.657 0.083 0.671 0.768 0.675 0.655 0.679 0.801 0.686 0.999 0.695 0.818 0.704 0.000 0.734 0.000 0.750 0.657 0.756 0.797 0.762 0.750 0.768 0.581 0.772 0.970 0.778 0.869 0.783 0.710 0.789 0.573 0.796 0.549 0.805 0.251 0.807 0.524 0.816 0.199 0.823 0.257 0.831 0.541 0.841 0.565 0.847 0.847 0.852 0.653 0.856 0.511 0.861 0.429 0.866 0.472 0.871 0.285 0.876 0.463 0.882 0.216 0.887 0.387 0.891 0.311 0.895 0.369 0.902 0.301 0.905 0.359 0.912 0.326 0.915 0.410 0.919 0.369 0.924 0.394 0.925 0.357 0.932 0.398 0.952 0.277 0.973 0.064 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.530 0.020 0.591 0.048 0.447 0.055 0.754 0.073 0.660 0.101 0.579 0.108 0.519 0.180 0.349 0.196 0.348 0.212 0.359 0.223 0.440 0.233 0.499 0.243 0.414 0.258 0.268 0.287 0.268 0.297 0.523 0.306 0.532 0.317 0.558 0.328 0.575 0.341 0.512 0.353 0.458 0.365 0.773 0.379 0.660 0.392 0.606 0.411 0.543 0.455 0.353 0.495 0.353 0.524 0.486 0.540 0.386 0.553 0.272 0.571 0.274 0.588 0.471 0.605 0.518 0.620 0.551 0.642 0.425 0.650 0.739 0.673 0.628 0.687 0.562 0.700 0.536 0.740 0.433 0.768 0.527 0.800 0.702 0.804 0.636 0.811 0.516 0.821 0.421 0.833 0.490 0.845 0.532 0.855 0.621 0.870 0.702 0.875 0.638 0.888 0.455 1.000 0.301) :duration dur :scaler (hz->radians 10000.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .005 3 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (magnolia-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Eastern bluebird (define (eastern-bluebird beg1 amp1) ;; east 75 10 (define-animal (eastern-bluebird-1 beg amp) (let ((dur 0.285)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.067 0.103 0.083 0.145 0.134 0.636 0.152 0.615 0.197 0.872 0.238 1.000 0.272 1.000 0.298 0.842 0.340 0.889 0.415 0.820 0.455 0.194 0.464 0.400 0.500 0.243 0.559 0.267 0.589 0.229 0.635 0.274 0.687 0.835 0.712 0.896 0.805 0.811 0.926 0.759 0.972 0.225 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.103 0.049 0.138 0.119 0.200 0.198 0.229 0.251 0.234 0.317 0.247 0.422 0.250 0.540 0.250 0.643 0.235 0.722 0.229 0.902 0.217 0.936 0.207 0.970 0.150 1.000 0.136) :duration dur :scaler (hz->radians 10200.0))) (gen1 (make-polywave 0.0 '(1 .8 2 .01 3 .05 4 .01 5 .005))) (gen2 (make-polywave 0.0 '(1 .92 2 .01 3 .05 4 .01 5 .005))) (ampf2 (make-env '(0 1 .2 0 1 0) :duration dur)) (rnd (make-nrxysin 200 :n 2 :r .5)) (rndf (make-env '(0 0 .1 1 .25 0 .45 0 .5 1 .6 0 1 0) :duration dur :scaler (hz->radians 200))) (rndfrqf (make-env '(0 1 .45 1 .5 .2 .6 .2 1 0) :duration dur :scaler (hz->radians 200)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (* (env rndf) (nrxysin rnd (env rndfrqf)))))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (polywave gen2 (* 1.5 frq))))))))))) (define-animal (eastern-bluebird-2 beg amp) (let ((dur 0.33)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.023 0.324 0.046 0.438 0.089 0.551 0.136 0.994 0.248 0.978 0.470 0.452 0.506 0.432 0.556 0.479 0.629 0.197 0.681 0.211 0.746 0.330 0.791 0.161 0.814 0.180 0.828 0.127 0.916 0.291 0.959 0.102 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.195 0.019 0.246 0.042 0.294 0.066 0.308 0.093 0.294 0.122 0.254 0.202 0.246 0.554 0.237 0.604 0.206 0.643 0.175 0.673 0.184 0.707 0.206 0.743 0.220 0.791 0.201 0.832 0.167 0.856 0.198 0.879 0.212 0.918 0.234 0.942 0.209 0.960 0.186 1.000 0.158) :duration dur :scaler (hz->radians 10000.0))) (gen1 (make-polywave 0.0 '(1 .8 2 .01 3 .05 4 .01 5 .005))) (gen2 (make-polywave 0.0 '(2 .01 4 .7 5 .01 6 .01 7 .01 8 .05 9 .01 10 .01 11 .01 12 .005 13 .01 14 .10 15 .10 16 .01))) (frqf2 (make-env '(0.000 0.345 0.052 0.393 0.098 0.345 0.271 0.311 0.443 0.305 0.506 0.319 0.559 0.339 0.613 0.322 0.661 0.294 0.705 0.314 0.738 0.353 0.769 0.364 0.797 0.356 0.818 0.316 0.845 0.285 0.882 0.339 0.905 0.362 0.928 0.364 0.960 0.319 1.000 0.209) :duration dur :scaler (hz->radians 2500.0))) (ampf2 (make-env '(0 0 .1 0 .2 1 1 1) :scaler .3 :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ (polywave gen1 (env frqf)) (* (env ampf2) (polywave gen2 (env frqf2)))))))))) (eastern-bluebird-1 beg1 amp1) (eastern-bluebird-2 (+ beg1 0.33) amp1)) ;; (with-sound (:play #t) (eastern-bluebird 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Greater roadrunner (define-animal (greater-roadrunner beg amp) ;; south 13 3 (let ((dur 4.36)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.043 0.623 0.069 0.901 0.079 0.000 0.155 0.000 0.168 0.292 0.193 0.771 0.231 0.947 0.240 0.000 0.310 0.000 0.317 0.327 0.369 0.947 0.385 0.894 0.401 0.000 0.458 0.000 0.491 0.620 0.510 0.810 0.538 0.757 0.563 0.000 0.627 0.000 0.646 0.408 0.691 0.680 0.709 0.148 0.750 0.000 0.813 0.004 0.825 0.201 0.847 0.317 0.867 0.211 0.881 0.067 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.215 0.075 0.178 0.114 0.172 0.137 0.231 0.166 0.215 0.188 0.190 0.230 0.178 0.265 0.176 0.284 0.217 0.316 0.201 0.349 0.183 0.388 0.174 0.421 0.174 0.443 0.211 0.465 0.197 0.503 0.176 0.542 0.169 0.556 0.137 0.591 0.142 0.600 0.195 0.638 0.185 0.674 0.174 0.697 0.167 0.709 0.140 0.733 0.137 0.766 0.130 0.793 0.174 0.820 0.169 0.868 0.162 0.879 0.133 1.000 0.089) :duration dur :scaler (hz->radians 3000.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .03 3 .01 4 .005 5 .005 7 .005))) (rnd (make-rand-interp 200 .3))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .7 (abs (rand-interp rnd))) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (greater-roadrunner 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Evening grosbeak (define-animal (evening-grosbeak beg amp) ;; east 98 7.5 (let ((dur 0.17)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.050 0.121 0.068 0.000 0.081 0.000 0.097 0.329 0.109 0.000 0.125 0.451 0.135 0.344 0.144 0.462 0.162 0.000 0.171 0.058 0.177 0.688 0.188 0.558 0.208 0.477 0.220 0.283 0.246 0.373 0.265 0.373 0.277 0.566 0.303 0.775 0.328 0.824 0.360 0.711 0.383 0.838 0.405 0.835 0.413 0.711 0.443 0.939 0.514 0.948 0.576 1.000 0.626 0.942 0.658 0.951 0.707 0.864 0.742 0.728 0.777 0.682 0.820 0.610 0.926 0.260 0.949 0.072 0.978 0.107 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.196 0.021 0.259 0.038 0.355 0.055 0.322 0.066 0.276 0.096 0.255 0.116 0.287 0.124 0.371 0.134 0.390 0.146 0.325 0.158 0.371 0.181 0.386 0.203 0.397 0.227 0.449 0.262 0.451 0.283 0.437 0.465 0.388 0.599 0.374 0.701 0.350 0.834 0.327 1.000 0.243) :duration dur :scaler (hz->radians 10200.0))) (gen1 (make-polywave 0.0 '(1 .97 2 .01 3 .015 4 .004))) (vib (make-oscil 300)) (vibf (make-env '(0 0 .25 0 .3 1 1 1) :duration dur :scaler (hz->radians 200))) (emph (make-oscil)) (emphf (make-env '(0 0 .3 1 .4 0 1 0) :duration dur :scaler .2))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (* (env vibf) (oscil vib))))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env emphf) (oscil emph (* 2.0 frq))))))))))) ;; (with-sound (:play #t) (evening-grosbeak 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Dark-eyed junco (define (dark-eyed-junco beg1 amp1) ;; calif 49 3 (define-animal (dark-eyed-junco-1 beg amp) (let ((dur 0.11)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.042 0.085 0.115 0.572 0.161 0.288 0.192 0.604 0.214 0.661 0.241 1.000 0.289 0.085 0.316 0.748 0.345 0.950 0.387 0.307 0.413 0.082 0.431 0.497 0.459 0.481 0.486 0.133 0.552 0.078 0.710 0.382 0.777 0.236 0.795 0.291 0.872 0.156 0.899 0.169 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.578 0.069 0.569 0.119 0.535 0.173 0.427 0.175 0.575 0.204 0.566 0.235 0.536 0.273 0.473 0.299 0.401 0.304 0.535 0.327 0.547 0.358 0.513 0.404 0.416 0.415 0.555 0.445 0.549 0.482 0.493 0.520 0.396 0.549 0.367 0.695 0.369 0.846 0.330 0.934 0.297 1.000 0.243) :duration dur :scaler (hz->radians 10050.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (let ((amps (vector .3 .5 .8 .8 .8 .8 .8 1.0 .8 .8 .4))) (do ((call 0 (+ call 1))) ((= call 11)) (dark-eyed-junco-1 (+ beg1 (* call .122)) (* amp1 (amps call)))))) ;; (with-sound (:play #t) (dark-eyed-junco 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Groove-billed ani (define-animal (groove-billed-ani beg amp) ;; south 14 17 ;; first note (let ((dur 0.067)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.110 0.124 0.121 0.469 0.137 0.323 0.149 0.524 0.195 0.654 0.212 0.906 0.226 0.204 0.245 0.744 0.317 0.991 0.481 0.824 0.517 0.558 0.556 0.746 0.573 0.446 0.581 0.590 0.597 0.668 0.606 0.231 0.622 0.698 0.653 0.686 0.718 0.185 0.884 0.046 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.112 0.058 0.098 0.114 0.098 0.18 0.143 0.208 0.309 0.339 0.325 0.445 0.327 0.597 0.318 0.636 0.297 0.673 0.240 0.744 0.229 0.775 0.160 0.801 0.117 0.838 0.082 0.884 0.082 .95 0.059 ) :duration dur :scaler (hz->radians 17100.0))) (gen1 (make-polywave 0.0 '(1 .96 2 .04 3 .005))) (gen2 (make-polywave 0.0 '(1 .1 2 .7 3 .1 4 .005 5 .005 6 .002))) (ampf2 (make-env '(0 0 .025 1 .2 0 .7 0 .9 1 1 0) :duration dur)) (rnd (make-rand-interp 400 (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (polywave gen2 frq))))))))) ;; second note (let ((dur 0.265) (start (seconds->samples (+ beg 0.27)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.020 0.160 0.091 0.182 0.138 0.132 0.174 0.162 0.239 0.120 0.390 0.297 0.427 0.216 0.474 0.530 0.521 1.000 0.565 0.893 0.590 0.498 0.605 0.656 0.634 0.171 0.676 0.209 0.696 0.130 0.754 0.222 0.786 0.173 0.818 0.214 0.835 0.177 0.884 0.199 0.911 0.107 0.922 0.158 0.961 0.071 0.978 0.378 1.000 0.000) :duration dur :scaler (* .4 amp))) (frqf (make-env '(0.000 0.125 0.048 0.142 0.139 0.133 0.303 0.131 0.443 0.150 0.495 0.156 0.508 0.206 0.568 0.200 0.612 0.219 0.621 0.289 0.627 0.439 0.690 0.458 0.752 0.464 0.823 0.464 0.900 0.450 0.947 0.425 0.975 0.194 1.000 0.2 ) :duration dur :scaler (hz->radians 10300.0))) (gen1 (make-oscil)) (gen2 (make-oscil)) (gen3 (make-oscil)) (ampf1 (make-env '(0 1 .63 1 .65 .1 .94 .1 1 1) :scaler .95 :duration dur)) (ampf2 (make-env '(0 .5 .6 1 .9 1 1 .5) :scaler .1 :duration dur)) (ampf3 (make-env '(0 1 .59 1 .6 0 .65 0 .66 1 .8 1 .9 0 1 0) :scaler .05 :duration dur)) (rnd (make-rand-interp 400 (hz->radians 30)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (+ (* (env ampf1) (oscil gen1 frq)) (* (env ampf2) (oscil gen2 (* 2.0 frq))) (* (env ampf3) (oscil gen3 (* 3.0 frq))))))))))) ;; (with-sound (:play #t) (groove-billed-ani 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Common pauraque (define-animal (common-pauraque beg amp) ;; south 20 1.7 (let ((dur 0.65)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.134 0.124 0.181 0.079 0.203 0.169 0.275 0.160 0.341 0.494 0.390 0.850 0.443 0.561 0.462 0.783 0.502 0.768 0.535 1.000 0.587 0.795 0.742 0.802 0.821 0.702 0.856 0.458 0.884 0.263 0.926 0.241 1.000 0.000 ) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.168 0.175 0.190 0.328 0.225 0.399 0.237 0.472 0.310 0.504 0.342 0.539 0.345 0.572 0.326 0.594 0.294 0.644 0.275 0.731 0.259 0.797 0.244 0.832 0.231 0.868 0.212 1.000 0.155 ) :duration dur :scaler (hz->radians 7700.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .005 3 .015))) (vib (make-oscil 120)) (vibf (make-env '(0 0 .25 0 .4 .3 .5 .1 .6 1 1 0) :duration dur :scaler (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (* (env vibf) (oscil vib)))))))))) ;; (with-sound (:play #t) (common-pauraque 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Hammond's flycatcher (define-animal (hammonds-flycatcher beg amp) ;; calif2 5 8.2 (let ((dur 0.23)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.090 0.518 0.153 0.872 0.167 0.795 0.190 0.952 0.251 0.000 0.453 0.000 0.502 0.434 0.521 0.295 0.542 0.053 0.580 0.051 0.606 0.000 0.691 0.000 0.701 0.062 0.731 0.089 0.735 0.000 0.746 0.000 0.754 0.212 0.764 0.119 0.784 0.110 0.794 0.148 0.800 0.007 0.815 0.080 0.823 0.301 0.834 0.126 0.854 0.151 0.862 0.062 0.873 0.009 0.880 0.075 0.890 0.297 0.910 0.205 0.921 0.078 0.934 0.032 0.948 0.208 0.959 0.285 0.971 0.260 0.984 0.091 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.401 0.037 0.480 0.073 0.538 0.109 0.596 0.142 0.628 0.175 0.697 0.206 0.794 0.218 0.812 0.233 0.800 0.240 0.773 0.260 0.693 0.404 0.381 0.416 0.356 0.437 0.347 0.460 0.359 0.482 0.439 0.497 0.532 0.529 0.659 0.546 0.836 0.587 0.614 0.690 0.460 0.700 0.282 0.713 0.247 0.725 0.285 0.727 0.525 0.739 0.594 0.756 0.314 0.769 0.276 0.784 0.280 0.788 0.329 0.796 0.736 0.811 0.543 0.828 0.301 0.843 0.282 0.851 0.325 0.861 0.780 0.887 0.377 0.899 0.321 0.909 0.370 0.926 0.681 0.944 0.449 0.959 0.421 0.977 0.433 1.000 0.471) :duration dur :scaler (hz->radians 9000.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01 3 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (hammonds-flycatcher 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Barn owl ;;; ;;; not as good as some of the others -- ending slightly wrong, formants need tuning a bit, etc (define-animal (barn-owl beg amp) ;; calif 50 2.9 (let ((dur 0.9)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 20 1 21 0) :duration dur :scaler (* 0.5 amp) :base 3)) (ampf1 (make-env '(0 1 19 1 21 0 22 0) :base 10 :duration dur)) (gen1 (make-polywave 1110.0 '(2 .6 3 .2 4 .1 5 .1 6 .05 7 .1 9 .01))) (ampf2 (make-env '(0 0 19 0 20 .5 22 0) :base 10 :duration dur)) (frqf2 (make-env '(0 1550 18 1550 19 1200 20 1700 22 1500) :scaler (hz->radians 1.0) :duration dur :base 10)) (gen2 (make-polywave 0.0 '(1 .2 2 .01 3 .8 4 .3 5 .1 6 .01))) (rnd (make-rand-interp 10000 (hz->radians 400))) (rndf (make-env '(0 1 19 1 20 .1 22 .01) :duration dur)) (trem (make-rand-interp 120 .6)) (frm1 (make-formant 2800 .98)) (frm2 (make-formant 4400 .92)) (frm4 (make-formant 6000 .97)) (frm5 (make-formant 7500 .96)) (frm3 (make-formant 9000 .96)) (fr1 (* 14 (sin (hz->radians 2800)))) (fr2 (* 6 (sin (hz->radians 4400)))) (fr3 (sin (hz->radians 9000))) (fr4 (* 6 (sin (hz->radians 6000)))) (fr5 (* 2 (sin (hz->radians 7500))))) (let ((fb (vector frm1 frm2 frm3 frm4 frm5)) (fs (float-vector fr1 fr2 fr3 fr4 fr5))) (set! fb (make-formant-bank fb fs)) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (formant-bank fb (* (+ .4 (abs (rand-interp trem))) (+ (* (env ampf1) (polywave gen1 (* (env rndf) (rand-interp rnd)))) (* (env ampf2) (polywave gen2 (env frqf2))))))))))))) ;; (with-sound (:play #t :statistics #t) (barn-owl 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Long-eared owl (define-animal (long-eared-owl beg amp) (let ((dur 0.37)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.119 0.319 0.193 0.682 0.251 0.767 0.309 0.958 0.485 0.930 0.505 1.000 0.574 0.895 0.698 0.901 0.902 0.767 0.965 0.401 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.276 0.185 0.328 0.273 0.338 0.462 0.343 0.735 0.340 0.894 0.337 0.938 0.305 1.000 0.231) :duration dur :scaler (hz->radians 980.0))) (gen1 (make-polywave 0.0 '(1 1 2 .23 3 .034 4 .008 5 .005 7 .003)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (long-eared-owl 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Summer tanager (define (summer-tanager beg1 amp1) ;; calif 24 18 (define-animal (summer-tanager-1 beg dur amp ampl frq frql rndl) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env ampl :duration dur :scaler amp)) (frqf (make-env frql :duration dur :scaler (hz->radians frq))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .006 4 .008 5 .004))) (rndf (make-env rndl :duration dur)) (rnd (make-rand-interp 600))) (do ((i start (+ i 1))) ((= i stop)) (let ((rf (env rndf))) (outa i (* (env ampf) (- (+ 1.0 (* rf (rand-interp rnd))) rf) (polywave gen1 (env frqf)))))))) (summer-tanager-1 beg1 .29 (* .4 amp1) '(0.000 0.000 0.123 0.450 0.194 0.404 0.210 0.055 0.232 0.437 0.251 0.193 0.277 0.263 0.292 0.135 0.349 0.202 0.369 0.156 0.381 0.291 0.458 0.177 0.554 0.153 0.682 0.875 0.734 0.988 0.768 1.000 0.802 0.722 0.829 0.887 0.918 0.251 1.000 0.000) 6070 '(0.000 0.583 0.035 0.583 0.116 0.452 0.145 0.452 0.179 0.345 0.200 0.414 0.224 0.313 0.241 0.400 0.260 0.299 0.289 0.348 0.311 0.304 0.332 0.359 0.343 0.299 0.362 0.394 0.376 0.328 0.399 0.409 0.417 0.426 0.431 0.475 0.620 0.452 0.750 0.412 0.888 0.423 0.924 0.371 0.934 0.429 0.958 0.391 0.974 0.429 1.000 0.403) '(0 .3 .2 .3 .45 .8 .6 .1 1 .1)) (summer-tanager-1 (+ beg1 .56) .13 (* .6 amp1) '(0.000 0.000 0.105 0.113 0.172 0.052 0.243 0.128 0.449 0.980 0.485 0.980 0.518 0.855 0.603 0.983 0.671 0.745 0.708 0.858 0.786 0.041 0.885 0.203 1.000 0.000) 10800 '(0.000 0.300 0.302 0.269 1.000 0.273) '(0 .2 .3 .2 .4 0 1 0)) (summer-tanager-1 (+ beg1 .71) .24 (* .9 amp1) '(0.000 0.000 0.056 0.292 0.072 0.209 0.086 0.439 0.103 0.379 0.114 0.565 0.134 0.644 0.215 0.190 0.276 0.107 0.334 0.237 0.367 0.715 0.416 0.988 0.457 0.889 0.533 0.462 0.624 0.186 0.668 0.245 0.697 0.356 0.750 0.474 0.902 0.107 1.000 0.000) 6700 '(0.000 0.506 0.072 0.450 0.133 0.390 0.190 0.307 0.255 0.251 0.327 0.259 0.377 0.335 0.416 0.386 0.539 0.398 0.676 0.382 0.717 0.371 0.761 0.335 0.840 0.283 0.930 0.263 1.000 0.307) '(0 .3 .3 .3 .4 .1 .75 .1 .8 .8 1 .5)) (summer-tanager-1 (+ beg1 1.28) .25 amp1 '(0.000 0.000 0.043 0.092 0.098 0.442 0.163 0.622 0.204 0.649 0.271 0.562 0.289 0.398 0.306 0.295 0.316 0.371 0.340 0.191 0.371 0.414 0.420 0.363 0.437 0.610 0.449 0.442 0.460 0.745 0.485 0.641 0.522 0.777 0.531 0.534 0.558 1.000 0.583 0.713 0.631 0.801 0.646 0.462 0.661 0.773 0.669 0.510 0.677 0.733 0.688 0.335 0.699 0.494 0.711 0.514 0.716 0.299 0.735 0.653 0.758 0.546 0.786 0.562 0.808 0.227 0.825 0.386 0.845 0.367 0.878 0.096 1.000 0.000) 6160 '(0.000 0.333 0.056 0.369 0.097 0.452 0.160 0.448 0.238 0.401 0.284 0.389 0.365 0.381 0.394 0.476 0.439 0.508 0.491 0.536 0.555 0.548 0.615 0.552 0.733 0.484 0.853 0.464 1.000 0.464) '(0 0 .3 .1 .6 .1 .7 .3 1 .4)) (summer-tanager-1 (+ beg1 1.86) .27 (* .9 amp1) '(0.000 0.000 0.053 0.142 0.152 0.943 0.200 0.880 0.223 0.983 0.267 0.844 0.314 0.875 0.369 0.679 0.412 0.361 0.462 0.236 0.477 0.132 0.513 0.073 0.684 0.172 0.759 0.351 0.871 0.233 1.000 0.000) 6700 '(0.000 0.375 0.027 0.427 0.051 0.364 0.068 0.451 0.090 0.364 0.107 0.472 0.132 0.364 0.152 0.441 0.177 0.369 0.202 0.412 0.259 0.409 0.326 0.385 0.410 0.311 0.466 0.272 0.526 0.256 0.570 0.296 0.588 0.280 0.597 0.354 0.616 0.280 0.630 0.359 0.645 0.288 0.665 0.354 0.684 0.280 0.706 0.351 0.724 0.277 0.740 0.364 0.758 0.285 0.773 0.361 0.799 0.317 1.000 0.251) '(0 0 .3 0 .4 .3 .6 .3 .7 0 1 0)) (summer-tanager-1 (+ beg1 2.42) .11 (* .9 amp1) '(0.000 0.000 0.079 0.182 0.187 0.604 0.222 0.544 0.261 0.710 0.291 0.169 0.309 0.921 0.326 0.982 0.387 0.596 0.440 1.000 0.470 0.628 0.523 0.836 0.616 0.615 0.685 0.164 0.719 0.346 0.752 0.119 0.767 0.185 0.877 0.024 0.948 0.069 1.000 0.000) 6750 '(0.000 0.504 0.143 0.441 0.197 0.425 0.265 0.443 0.312 0.483 0.375 0.557 0.440 0.520 1.000 0.520) '(0 0 .3 0 .5 .4 .7 0 1 0)) (summer-tanager-1 (+ beg1 2.61) .16 (* .9 amp1) '(0.000 0.000 0.196 0.778 0.231 0.528 0.256 0.628 0.295 0.354 0.331 0.530 0.397 0.332 0.425 0.776 0.442 0.074 0.453 0.649 0.463 0.298 0.474 0.620 0.498 0.781 0.513 0.694 0.539 0.683 0.551 0.406 0.597 0.868 0.617 0.815 0.653 0.984 0.672 0.815 0.700 0.966 0.718 0.905 0.727 0.734 0.748 0.834 0.780 0.570 0.793 0.683 0.817 0.602 0.835 0.406 0.855 0.609 0.865 0.483 0.886 0.530 0.900 0.412 0.923 0.412 1.000 0.000) 6750 '(0.000 0.438 0.193 0.443 0.367 0.446 0.409 0.425 0.433 0.501 0.462 0.388 0.489 0.472 0.511 0.433 0.526 0.367 0.552 0.454 0.579 0.367 0.609 0.409 0.666 0.385 0.728 0.377 0.865 0.348 1.000 0.346) '(0 0 .5 .1 .9 .5 1 .4)) (summer-tanager-1 (+ beg1 3.14) .23 (* .9 amp1) '(0.000 0.000 0.268 0.594 0.365 0.153 0.412 0.040 0.520 0.475 0.578 0.918 0.614 0.736 0.629 0.491 0.654 0.997 0.682 0.794 0.693 0.660 0.716 0.887 0.740 0.786 0.762 0.897 0.827 0.792 0.890 0.446 1.000 0.000) 6750 '(0.000 0.306 0.025 0.322 0.048 0.425 0.079 0.325 0.101 0.375 0.131 0.314 0.156 0.346 0.269 0.369 0.388 0.369 0.427 0.456 0.465 0.449 0.510 0.464 0.623 0.427 0.768 0.420 1.000 0.4) '(0 0 .5 0 .6 .3 1 0)) (summer-tanager-1 (+ beg1 3.54) .18 (* .5 amp1) '(0.000 0.000 0.087 0.327 0.198 0.834 0.235 0.805 0.283 0.995 0.313 0.778 0.379 0.678 0.471 0.235 0.509 0.369 0.525 0.288 0.574 0.631 0.626 0.863 0.663 0.770 0.708 0.852 0.732 0.533 0.748 0.739 0.770 0.633 0.791 0.757 0.808 0.636 0.823 0.699 0.869 0.636 0.937 0.393 1.000 0.000) 6750 '(0.000 0.406 0.200 0.396 0.299 0.412 0.462 0.401 0.579 0.396 0.804 0.348 1.000 0.356) '(0 .1 1 .1))) ;; (with-sound (:play #t) (summer-tanager 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Whooping crane (define-animal (whooping-crane beg amp) ;; east 63 53 (is this 2 birds?) (let ((dur 0.68)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.036 0.069 0.052 0.000 0.115 0.000 0.127 0.343 0.137 0.254 0.143 0.400 0.162 0.000 0.184 0.000 0.191 0.524 0.202 0.772 0.224 0.131 0.241 0.392 0.259 0.770 0.274 0.699 0.305 0.692 0.362 0.852 0.432 0.768 0.449 0.985 0.484 1.000 0.604 0.969 0.640 0.783 0.672 0.489 0.687 0.752 0.725 0.290 0.742 0.376 0.801 0.281 0.906 0.197 0.928 0.128 0.943 0.192 0.950 0.365 0.977 0.086 1.000 0.000) :duration dur :scaler (* 0.33 amp))) (frqf1 (make-env '(0.000 0.158 0.120 0.175 0.137 0.227 0.145 0.180 0.190 0.173 0.204 0.249 0.219 0.230 0.324 0.237 0.428 0.242 0.585 0.240 0.655 0.232 0.689 0.215 0.958 0.205 0.966 0.128 1.000 0.123) :duration dur :scaler (hz->radians 5000.0))) (frqf2 (make-env '(0.000 0.104 0.342 0.121 0.376 0.136 0.435 0.128 0.447 0.175 0.498 0.173 1.000 0.170) :duration dur :scaler (hz->radians 5000.0))) (ampf1 (make-env '(0 1 .65 1 .70 0 1 0) :duration dur)) (ampf2 (make-env '(0 0 .32 0 .48 1 .68 1 .75 0 1 0) :duration dur)) (ampf3 (make-env '(0 0 .6 0 .65 1 1 1) :duration dur)) (gen1 (make-polywave 0.0 (normalize-partials '(1 .3 2 1 3 -.8 4 .25 5 .45 6 .22 7 .13 8 .05 9 .02 10 .005 11 .005)))) (gen2 (make-polywave 0.0 (normalize-partials '(1 .91 2 .17 3 -.77 4 .25 5 .2 6 .2 7 .18 8 .1 10 .01)))) (gen3 (make-polywave 0.0 (normalize-partials '(1 -1 2 .11 3 .45 4 .44 5 .62 6 .27 7 .02 8 .005)))) (rnd (make-rand-interp 2000 (hz->radians 200))) (rndf1 (make-env '(0 1 .2 1 .3 0 .65 0 .7 1 .8 0 1 0) :duration dur)) (rndf2 (make-env '(0 0 .32 0 .48 1 .5 0 .7 0 .75 1 .8 0 1 0) :duration dur)) (rndf3 (make-env '(0 0 .6 0 .65 1 .7 0 .9 0 1 1) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq1 (env frqf1)) (rn (rand-interp rnd))) (outa i (* (env ampf) (+ (* (env ampf1) (polywave gen1 (+ frq1 (* rn (env rndf1))))) (* (env ampf2) (polywave gen2 (+ (env frqf2) (* rn (env rndf2))))) (* (env ampf3) (polywave gen3 (+ frq1 (* rn (env rndf3))))))))))))) ;; (with-sound (:play #t) (whooping-crane 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Sandhill crane (define-animal (sandhill-crane beg amp) ;; calif 30 13 (let ((dur 0.64)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.042 0.100 0.130 0.108 0.175 0.155 0.183 0.052 0.200 0.000 0.230 0.000 0.240 0.052 0.244 0.681 0.252 0.545 0.260 0.602 0.264 0.000 0.269 0.397 0.277 0.845 0.288 0.547 0.292 0.734 0.304 0.624 0.313 0.453 0.320 0.215 0.324 0.373 0.328 0.359 0.335 0.143 0.344 0.282 0.371 0.291 0.380 0.256 0.386 0.333 0.390 0.773 0.404 0.428 0.409 0.577 0.417 0.612 0.424 0.374 0.427 0.562 0.433 0.405 0.436 0.452 0.442 0.285 0.446 0.417 0.460 0.034 0.468 0.319 0.480 0.036 0.485 0.852 0.493 0.606 0.498 0.636 0.503 0.526 0.519 0.471 0.525 0.980 0.532 0.134 0.535 0.467 0.546 0.236 0.550 0.044 0.561 0.069 0.565 0.276 0.576 0.739 0.584 0.581 0.592 0.797 0.605 0.168 0.606 0.268 0.613 0.076 0.620 0.145 0.631 0.035 0.635 0.164 0.639 0.080 0.643 0.939 0.656 0.508 0.664 0.623 0.672 0.165 0.678 0.040 0.681 0.157 0.687 0.187 0.695 0.038 0.700 0.293 0.704 0.155 0.709 0.719 0.715 0.701 0.720 0.420 0.724 0.559 0.728 0.249 0.737 0.069 0.741 0.168 0.748 0.103 0.751 0.051 0.757 0.072 0.758 0.196 0.763 0.129 0.769 0.666 0.778 0.515 0.785 0.126 0.791 0.108 0.800 0.029 0.809 0.087 0.821 0.016 0.826 0.327 0.832 0.135 0.840 0.084 0.848 0.025 0.858 0.440 0.866 0.168 0.873 0.123 0.878 0.033 0.886 0.055 0.900 0.008 0.907 0.593 0.918 0.102 0.923 0.463 0.930 0.361 0.940 0.343 0.947 0.182 0.953 0.236 0.964 0.025 0.967 0.061 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.063 0.163 0.065 0.171 0.092 0.182 0.063 0.238 0.090 0.244 0.115 0.251 0.094 0.267 0.092 0.285 0.094 0.381 0.096 0.387 0.129 0.398 0.092 0.427 0.094 0.438 0.069 0.445 0.094 0.473 0.092 0.483 0.100 0.492 0.092 0.523 0.096 0.559 0.094 0.571 0.104 0.581 0.092 0.618 0.096 0.633 0.096 0.645 0.100 0.661 0.085 0.673 0.096 0.708 0.096 0.723 0.085 0.768 0.090 0.791 0.090 0.824 0.075 0.850 0.083 0.853 0.117 0.863 0.094 0.888 0.094 0.906 0.115 0.920 0.110 0.931 0.085 1.000 0.087 ) :duration dur :scaler (hz->radians 8300.0))) (gen1 (make-polywave 0.0 '(1 .6 2 -.1 3 .01 4 .05 5 .03 6 .01 7 .01 8 .005))) (rnd (make-rand-interp 3000 (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (rand-interp rnd))))))))) ;; (with-sound (:play #t) (sandhill-crane 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Gray-crowned rosy-finch (define-animal (gray-crowned-rosy-finch beg amp) ;; calif 64 5.1 (let ((dur 0.15)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.339 0.937 0.454 0.992 0.609 0.860 0.807 0.575 1.000 0.000) :duration dur :scaler amp)) (ampf2 (make-env '(0 1 .5 1 .55 0 1 0) :duration dur :scaler .2)) (frqf1 (make-env '(0.000 0.000 0.004 0.271 0.031 0.299 0.085 0.313 0.167 0.318 0.227 0.317 0.243 0.326 0.281 0.296 0.299 0.318 0.309 0.299 0.325 0.299 0.338 0.285 0.356 0.321 0.369 0.301 0.387 0.294 0.396 0.280 0.415 0.313 0.430 0.282 0.452 0.283 0.462 0.263 0.483 0.304 0.497 0.280 0.517 0.288 0.534 0.249 0.550 0.293 0.568 0.254 0.587 0.285 0.611 0.222 0.627 0.274 0.647 0.238 0.662 0.263 0.677 0.247 0.696 0.203 0.708 0.219 0.715 0.250 0.734 0.230 0.755 0.246 0.781 0.198 0.800 0.250 0.811 0.228 0.834 0.250 0.869 0.191 0.893 0.252 0.915 0.220 0.939 0.244 0.967 0.220 1.000 0.222) :duration dur :scaler (hz->radians 13400.0))) (frqf2 (make-env '(0.000 0.328 0.086 0.397 0.158 0.441 0.219 0.446 0.232 0.420 0.258 0.430 0.281 0.387 0.307 0.419 0.330 0.400 0.344 0.369 0.357 0.395 0.382 0.397 0.396 0.365 0.416 0.398 0.442 0.402 0.460 0.354 0.480 0.397 0.504 0.384 0.526 0.329 0.550 0.294 1.000 0.288) :duration dur :scaler (hz->radians 13400.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .005))) (gen2 (make-oscil)) (rnd (make-rand-interp 400 .5)) (rnd1 (make-rand-interp 2000 (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (let ((rn (rand-interp rnd1))) (outa i (* (env ampf) (+ .5 (abs (rand-interp rnd))) (+ (polywave gen1 (+ rn (env frqf1))) (* (env ampf2) (oscil gen2 (+ rn (env frqf2)))))))))))) ;; (with-sound (:play #t) (gray-crowned-rosy-finch 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Virginia rail (define (virginia-rail beg amp) ;; calif 28 20 (define-animal (virginia-rail-1 beg amp) (let ((dur 0.048)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.021 0.076 0.040 0.233 0.058 0.307 0.075 0.254 0.099 0.000 0.118 0.213 0.131 0.118 0.180 0.935 0.217 0.207 0.224 0.315 0.253 0.142 0.274 1.000 0.290 0.956 0.305 0.247 0.321 0.203 0.332 0.070 0.362 0.896 0.376 0.706 0.384 0.237 0.402 0.292 0.417 0.556 0.431 0.607 0.438 0.767 0.469 0.858 0.480 0.729 0.492 0.080 0.503 0.355 0.510 0.256 0.539 0.706 0.549 0.641 0.574 0.104 0.591 0.285 0.637 0.004 0.670 0.154 0.683 0.146 0.699 0.087 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 2700 (list 1 (* .55 .98) 2 (* .55 .01) 3 (* .55 .05) 5 (* .55 .005)))) (gen2 (make-polywave 2400 (list 1 (* .45 .98) 2 (* .45 .01) 3 (* .45 .03) 5 (* .45 .005)))) (rnd (make-rand-interp 4000 (hz->radians 300)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ (polywave gen1 (rand-interp rnd)) (polywave gen2)))))))) (define-animal (virginia-rail-2 beg amp) (let ((dur 0.048)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.042 0.141 0.071 0.749 0.087 0.659 0.104 0.283 0.118 0.150 0.133 0.229 0.146 0.147 0.153 0.385 0.172 0.503 0.195 0.950 0.219 0.075 0.227 0.257 0.245 0.101 0.264 0.193 0.282 0.976 0.312 0.815 0.346 0.437 0.387 0.888 0.406 0.622 0.434 0.767 0.451 0.277 0.463 0.363 0.486 0.106 0.497 0.690 0.507 0.727 0.523 0.338 0.540 0.910 0.555 0.892 0.563 0.582 0.578 0.716 0.588 0.637 0.605 0.171 0.631 0.939 0.646 0.862 0.664 0.413 0.687 0.061 0.703 0.171 0.724 0.072 0.743 0.150 0.776 0.103 0.801 0.139 0.828 0.066 0.909 0.029 0.957 0.061 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 2700 (list 1 (* .45 .98) 2 (* .45 .01) 3 (* .45 .05) 5 (* .45 .005)))) (gen2 (make-polywave 2400 (list 1 (* .55 .98) 2 (* .55 .01) 3 (* .55 .05) 5 (* .55 .005)))) (rnd (make-rand-interp 4000 (hz->radians 200)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (rand-interp rnd))) (outa i (* (env ampf) (+ (polywave gen1 frq) (polywave gen2 frq))))))))) (define-animal (virginia-rail-3 beg amp) (let ((dur 0.048)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.062 0.158 0.095 0.921 0.127 0.411 0.237 0.954 0.260 0.382 0.294 0.993 0.315 0.473 0.326 0.583 0.353 0.217 0.406 0.991 0.428 0.437 0.449 0.769 0.498 0.305 0.526 0.883 0.548 0.367 0.562 0.892 0.578 0.347 0.597 0.316 0.612 0.890 0.637 0.717 0.665 0.235 0.696 0.545 0.711 0.233 0.754 0.754 0.818 0.099 0.854 0.123 0.910 0.033 0.940 0.117 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 2700 (list 1 (* .5 .98) 2 (* .5 .01) 3 (* .5 .05) 5 (* .5 .005)))) (gen2 (make-polywave 2500 (list 1 (* .4 .98) 2 (* .4 .01) 3 (* .4 .05) 5 (* .4 .005)))) (gen3 (make-polywave 3000 (list 1 (* .1 .98) 2 (* .1 .01) 3 (* .1 .05) 5 (* .1 .005)))) (rnd (make-rand-interp 4000 (hz->radians 300)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (rand-interp rnd))) (outa i (* (env ampf) (+ (polywave gen1 frq) (polywave gen2 frq) (polywave gen3 frq))))))))) (virginia-rail-1 beg amp) (virginia-rail-2 (+ beg .46) amp) (virginia-rail-3 (+ beg .55) amp) (virginia-rail-2 (+ beg .95) amp) (virginia-rail-3 (+ beg 1.03) amp) (virginia-rail-2 (+ beg 1.41) amp) (virginia-rail-3 (+ beg 1.48) amp) (virginia-rail-2 (+ beg 1.88) amp) (virginia-rail-3 (+ beg 1.97) amp) (virginia-rail-1 (+ beg 2.06) amp)) ;; (with-sound (:play #t) (virginia-rail 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Sage Sparrow ;;; ;;; this is one of the best so far (define-animal (sage-sparrow beg amp) ;; calif 39 4 ;; first 4 pure tones (let ((dur 0.23)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.038 0.048 0.075 0.162 0.185 0.000 0.262 0.000 0.284 0.118 0.333 0.592 0.363 0.526 0.429 0.000 0.502 0.000 0.528 0.184 0.579 0.912 0.613 0.846 0.665 0.140 0.688 0.000 0.766 0.000 0.786 0.250 0.831 1.000 0.871 0.961 0.933 0.276 1.000 0.000) :duration dur :scaler (* .7 amp))) (gen1 (make-polywave 3800.0 '(1 .995 2 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1)))))) ;; 3 buzzes (let ((dur 0.23) (start (seconds->samples (+ beg 0.264)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.055 0.118 0.071 0.099 0.079 0.329 0.107 0.208 0.114 0.248 0.125 0.568 0.153 0.202 0.159 0.224 0.173 0.532 0.200 0.199 0.213 0.226 0.226 0.467 0.255 0.128 0.270 0.348 0.299 0.106 0.313 0.138 0.351 0.000 0.454 0.000 0.464 0.052 0.471 0.021 0.481 0.046 0.485 0.138 0.496 0.058 0.502 0.104 0.507 0.322 0.515 0.163 0.523 0.124 0.534 0.584 0.537 0.350 0.544 0.230 0.549 0.411 0.555 0.825 0.560 0.439 0.569 0.323 0.573 0.421 0.579 1.000 0.591 0.348 0.603 0.981 0.612 0.433 0.618 0.235 0.628 0.981 0.636 0.425 0.643 0.301 0.649 0.432 0.653 0.799 0.666 0.185 0.671 0.286 0.680 0.660 0.691 0.061 0.698 0.139 0.704 0.334 0.719 0.093 0.769 0.038 0.805 0.026 0.838 0.060 0.854 0.139 0.865 0.046 0.872 0.201 0.880 0.004 0.891 0.174 0.899 0.042 0.907 0.201 0.918 0.029 0.926 0.113 0.936 0.019 0.943 0.068 0.957 0.013 0.960 0.074 0.971 0.021 1.000 0.000 ) :duration dur :scaler (* .4 amp))) (frqf (make-env '(0.000 0.609 0.026 0.606 0.056 0.316 0.060 0.568 0.080 0.455 0.096 0.309 0.101 0.574 0.128 0.451 0.144 0.300 0.150 0.563 0.176 0.451 0.194 0.281 0.199 0.549 0.223 0.465 0.244 0.295 0.256 0.506 0.274 0.435 0.289 0.291 0.307 0.487 0.335 0.284 0.456 0.373 0.467 0.584 0.480 0.435 0.490 0.604 0.507 0.426 0.512 0.606 0.529 0.416 0.532 0.510 0.537 0.597 0.551 0.412 0.554 0.508 0.560 0.597 0.576 0.426 0.579 0.519 0.586 0.600 0.598 0.442 0.608 0.584 0.623 0.449 0.633 0.588 0.649 0.442 0.655 0.570 0.673 0.453 0.681 0.563 0.700 0.396 0.706 0.570 0.819 0.469 0.829 0.307 0.835 0.471 0.847 0.307 0.854 0.515 0.865 0.323 0.871 0.522 0.881 0.314 0.886 0.398 0.889 0.531 0.904 0.304 0.909 0.494 0.920 0.311 0.925 0.499 0.942 0.284 0.943 0.428 0.957 0.371 0.958 0.513 1.000 0.508 ) :duration dur :scaler (hz->radians 4300.0) :offset (hz->radians 1000))) (gen1 (make-polywave 0.0 '(1 .99 2 .005 3 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) ;; next pure tone (overlaps next) (let ((dur (* 3 0.088)) (start (seconds->samples (+ beg 0.517)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.079 0.082 0.202 0.616 0.333 0.966 0.423 1.000 0.548 0.851 0.831 0.146 1.000 0.050 3 0) :duration dur :scaler amp)) (gen1 (make-polywave 3900.0 '(1 .985 2 .005 3 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1)))))) ;; another buzz (let ((dur 0.236) (start (seconds->samples (+ beg 0.627)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.020 0.352 0.045 0.261 0.068 0.462 0.086 0.256 0.109 0.295 0.130 0.506 0.152 0.151 0.176 0.705 0.192 0.359 0.202 0.169 0.230 0.666 0.247 0.293 0.263 0.190 0.282 0.652 0.307 0.124 0.323 0.259 0.343 0.723 0.353 0.364 0.368 0.167 0.384 0.293 0.397 0.785 0.405 0.380 0.421 0.128 0.437 0.256 0.452 0.762 0.466 0.300 0.481 0.112 0.490 0.245 0.507 0.826 0.522 0.334 0.529 0.165 0.539 0.103 0.563 0.762 0.575 0.309 0.593 0.192 0.608 0.318 0.617 0.945 0.645 0.098 0.663 0.256 0.677 0.906 0.691 0.384 0.707 0.092 0.721 0.334 0.736 1.000 0.757 0.316 0.760 0.144 0.769 0.080 0.777 0.297 0.794 0.771 0.825 0.108 0.837 0.277 0.854 0.867 0.864 0.263 0.881 0.085 0.899 0.204 0.913 0.753 0.944 0.098 0.958 0.130 0.974 0.563 1.000 0.000 ) :duration dur :scaler (* .125 amp))) (frqf (make-env '(0.000 0.403 0.030 0.502 0.034 0.369 0.067 0.433 0.084 0.556 0.087 0.375 0.104 0.386 0.121 0.457 0.131 0.512 0.135 0.345 0.147 0.372 0.168 0.437 0.184 0.509 0.189 0.362 0.214 0.416 0.238 0.505 0.242 0.358 0.265 0.403 0.290 0.509 0.295 0.352 0.317 0.396 0.345 0.509 0.350 0.345 0.377 0.416 0.401 0.509 0.404 0.362 0.428 0.403 0.456 0.505 0.461 0.362 0.482 0.406 0.508 0.509 0.513 0.355 0.524 0.354 0.539 0.399 0.563 0.505 0.568 0.358 0.581 0.364 0.624 0.505 0.627 0.352 0.638 0.354 0.652 0.399 0.682 0.495 0.687 0.355 0.699 0.371 0.715 0.416 0.741 0.512 0.745 0.352 0.757 0.361 0.772 0.403 0.797 0.495 0.802 0.354 0.814 0.364 0.834 0.416 0.858 0.519 0.862 0.358 0.884 0.406 0.914 0.498 0.923 0.369 0.940 0.381 0.955 0.435 0.976 0.493 0.982 0.361 1.000 0.364) :duration dur :scaler (hz->radians 6100))) (gen1 (make-polywave 0.0 '(1 .99 2 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) ;; 2 more buzzes (let ((dur 0.22) (start (seconds->samples (+ beg 0.897)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.024 0.034 0.032 0.018 0.042 0.059 0.047 0.029 0.057 0.101 0.062 0.043 0.072 0.146 0.079 0.016 0.087 0.183 0.095 0.031 0.103 0.194 0.109 0.050 0.117 0.241 0.125 0.031 0.132 0.268 0.140 0.038 0.148 0.335 0.155 0.050 0.164 0.351 0.170 0.068 0.182 0.401 0.187 0.151 0.194 0.511 0.203 0.187 0.212 0.531 0.218 0.273 0.227 0.662 0.233 0.473 0.242 0.775 0.249 0.604 0.268 0.919 0.279 0.878 0.289 1.000 0.301 0.795 0.313 0.775 0.331 0.563 0.341 0.561 0.375 0.236 0.407 0.124 0.426 0.108 0.436 0.000 0.591 0.000 0.618 0.052 0.626 0.032 0.649 0.122 0.657 0.076 0.676 0.270 0.687 0.205 0.704 0.469 0.713 0.360 0.721 0.442 0.728 0.227 0.735 0.585 0.751 0.518 0.757 0.272 0.768 0.694 0.780 0.592 0.790 0.324 0.799 0.712 0.811 0.680 0.821 0.286 0.833 0.718 0.840 0.687 0.850 0.216 0.861 0.656 0.874 0.592 0.881 0.194 0.892 0.477 0.901 0.468 0.914 0.153 0.924 0.349 0.939 0.085 1.000 0.000) :duration dur :scaler (* .8 amp))) (frqf (make-env '(0.000 0.600 0.214 0.619 0.258 0.609 0.298 0.534 0.391 0.427 0.629 0.483 0.646 0.613 0.660 0.513 0.678 0.623 0.694 0.508 0.708 0.628 0.724 0.529 0.737 0.642 0.753 0.527 0.769 0.634 0.783 0.527 0.800 0.642 0.814 0.521 0.831 0.648 0.845 0.523 0.862 0.644 0.876 0.536 0.893 0.640 0.908 0.531 0.923 0.642 1.000 0.563) :duration dur :scaler (hz->radians 5950))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .006 4 .004)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) ;; two tones (let ((dur 0.145) (start (seconds->samples (+ beg 1.123)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.060 0.075 0.110 0.186 0.159 0.285 0.209 0.328 0.268 0.305 0.384 0.002 0.461 0.000 0.497 0.144 0.572 0.851 0.631 1.000 0.661 0.989 0.712 0.835 0.768 0.540 0.822 0.136 0.861 0.061 0.915 0.044 0.942 0.069 1.000 0.000) :duration dur :scaler (* .6 amp))) (frqf (make-env '(0.000 0.313 0.164 0.305 0.379 0.289 0.421 0.292 0.432 0.411 0.642 0.398 1.000 0.401) :duration dur :scaler (hz->radians 7900))) (gen1 (make-polywave 0.0 '(1 .98 2 .005 3 .01 4 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) ;; last buzz (let ((dur 0.321) (start (seconds->samples (+ beg 1.25)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.011 0.132 0.016 0.059 0.027 0.220 0.034 0.078 0.044 0.323 0.051 0.080 0.059 0.561 0.065 0.103 0.072 0.674 0.085 0.028 0.094 0.072 0.102 0.654 0.108 0.088 0.118 0.922 0.139 0.031 0.145 0.109 0.149 0.579 0.156 0.134 0.165 0.917 0.173 0.770 0.179 0.222 0.185 0.023 0.189 0.096 0.196 0.690 0.201 0.039 0.209 0.961 0.217 0.842 0.225 0.031 0.238 0.067 0.244 0.566 0.249 0.129 0.257 0.904 0.262 0.801 0.270 0.147 0.278 0.049 0.283 0.140 0.288 0.612 0.294 0.036 0.301 0.979 0.309 0.925 0.318 0.124 0.329 0.052 0.334 0.432 0.339 0.041 0.348 0.718 0.354 0.879 0.366 0.065 0.377 0.080 0.380 0.494 0.387 0.103 0.401 0.817 0.413 0.054 0.423 0.088 0.429 0.447 0.434 0.057 0.446 0.824 0.450 0.708 0.459 0.070 0.470 0.059 0.473 0.279 0.478 0.044 0.489 0.760 0.494 0.726 0.507 0.072 0.514 0.044 0.520 0.276 0.527 0.052 0.535 0.506 0.539 0.592 0.552 0.054 0.559 0.078 0.564 0.245 0.573 0.052 0.584 0.633 0.589 0.483 0.596 0.088 0.605 0.065 0.611 0.258 0.616 0.067 0.625 0.488 0.628 0.545 0.642 0.054 0.653 0.085 0.656 0.227 0.665 0.049 0.670 0.401 0.674 0.468 0.679 0.416 0.687 0.062 0.696 0.072 0.701 0.147 0.708 0.078 0.715 0.444 0.719 0.514 0.734 0.052 0.741 0.031 0.748 0.142 0.753 0.065 0.764 0.442 0.780 0.065 0.787 0.052 0.794 0.147 0.801 0.054 0.811 0.370 0.815 0.331 0.825 0.054 0.834 0.041 0.840 0.140 0.846 0.049 0.858 0.362 0.863 0.279 0.870 0.044 0.882 0.034 0.885 0.109 0.892 0.052 0.897 0.072 0.902 0.209 0.908 0.269 0.916 0.044 0.930 0.021 0.934 0.085 0.942 0.026 0.958 0.129 0.972 0.039 1.000 0.000) :duration dur :scaler (* .25 amp))) (frqf (make-env '(0.000 0.592 0.013 0.550 0.023 0.615 0.035 0.548 0.043 0.612 0.054 0.530 0.063 0.646 0.071 0.556 0.098 0.545 0.103 0.654 0.113 0.558 0.143 0.550 0.150 0.664 0.155 0.550 0.178 0.556 0.185 0.641 0.191 0.556 0.227 0.563 0.234 0.643 0.238 0.550 0.270 0.553 0.276 0.630 0.280 0.553 0.310 0.550 0.317 0.620 0.322 0.550 0.356 0.548 0.363 0.612 0.367 0.548 0.402 0.550 0.407 0.628 0.413 0.553 0.445 0.550 0.449 0.607 0.453 0.537 0.485 0.540 0.492 0.615 0.497 0.545 0.529 0.543 0.537 0.612 0.542 0.537 0.572 0.532 0.579 0.581 0.583 0.537 0.613 0.537 0.617 0.597 0.623 0.522 0.656 0.525 0.662 0.589 0.668 0.535 0.703 0.535 0.706 0.597 0.712 0.530 0.742 0.530 0.747 0.581 0.757 0.540 0.786 0.540 0.791 0.602 0.797 0.537 0.832 0.537 0.836 0.605 0.843 0.532 0.859 0.587 0.891 0.491 0.901 0.594 1.000 0.545) :duration dur :scaler (hz->radians 5400))) (gen1 (make-polywave 0.0 '(1 .99 2 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (sage-sparrow 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Hairy woodpecker (define-animal (hairy-woodpecker beg amp) ;; calif 81 10 (let ((dur 0.08)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.099 0.188 0.152 0.148 0.211 0.558 0.242 0.267 0.278 0.519 0.434 0.472 0.527 0.543 0.612 0.479 0.792 0.941 0.831 0.523 0.854 1.000 0.913 0.422 0.927 0.200 0.946 0.430 0.971 0.304 1.000 0.000 ) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.180 0.056 0.213 0.135 0.241 0.167 0.305 0.191 0.396 0.212 0.402 0.242 0.485 0.288 0.506 0.390 0.524 0.509 0.530 0.637 0.537 0.732 0.530 0.770 0.503 0.808 0.503 0.826 0.427 0.848 0.366 0.889 0.345 0.913 0.232 1.000 0.198) :duration dur :scaler (hz->radians 10000.0))) (gen1 (make-polywave 0.0 '(1 .9 2 .09 3 .01))) (gen2 (make-polywave 0.0 '(1 .2 2 .1 3 .1 4 .1 5 .1 6 .05 7 .01))) (ampf2 (make-env '(0 1 .3 1 .4 0 .75 0 .8 1 1 1) :duration dur :scaler 1.0))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (polywave gen2 (* 0.5 frq))))))))))) ;; (with-sound (:play #t) (hairy-woodpecker 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Pacific-slope flycatcher (define-animal (pacific-slope-flycatcher beg amp) ;; calif 8 22 (let ((dur 0.3)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.015 0.088 0.017 0.256 0.032 0.345 0.054 0.354 0.082 0.210 0.101 0.000 0.161 0.000 0.232 0.860 0.320 1.000 0.368 0.848 0.401 0.927 0.466 0.000 0.486 0.000 0.528 0.463 0.687 0.643 0.708 0.515 0.719 0.686 0.812 0.787 0.863 0.707 0.896 0.497 0.939 0.500 0.970 0.396 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.266 0.014 0.487 0.023 0.451 0.033 0.528 0.042 0.480 0.058 0.480 0.076 0.420 0.102 0.511 0.172 0.618 0.212 0.663 0.252 0.694 0.295 0.709 0.351 0.775 0.382 0.771 0.397 0.726 0.406 0.671 0.433 0.443 0.455 0.318 0.491 0.250 0.532 0.451 0.547 0.486 0.565 0.503 0.678 0.520 0.753 0.539 0.818 0.570 0.951 0.661 1.000 0.672) :duration dur :scaler (hz->radians 10100.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .005 3 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (pacific-slope-flycatcher 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Dusky flycatcher (define-animal (dusky-flycatcher beg amp) ;; calif 7 20.4 (let ((dur 0.125)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.018 0.291 0.036 0.414 0.103 0.559 0.131 0.572 0.212 0.748 0.279 1.000 0.297 0.994 0.354 0.272 0.400 0.102 0.417 0.000 0.580 0.000 0.588 0.089 0.619 0.164 0.647 0.362 0.660 0.364 0.687 0.042 0.700 0.091 0.731 0.692 0.746 0.659 0.766 0.385 0.779 0.314 0.794 0.071 0.812 0.042 0.844 0.374 0.868 0.333 0.891 0.177 0.924 0.069 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.535 0.036 0.500 0.087 0.460 0.145 0.451 0.229 0.458 0.288 0.470 0.335 0.507 0.386 0.533 0.416 0.521 0.583 0.314 0.656 0.353 0.677 0.398 0.682 0.537 0.696 0.567 0.711 0.540 0.723 0.414 0.751 0.419 0.788 0.470 0.796 0.567 0.809 0.600 0.829 0.574 0.841 0.460 0.864 0.460 0.892 0.505 0.924 0.528 0.971 0.516 1.000 0.495) :duration dur :scaler (hz->radians 10100.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01 3 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (dusky-flycatcher 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Inca dove (define-animal (inca-dove-1 beg amp) ;; south 11 9.6 (let ((dur 0.76)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.022 0.506 0.046 0.664 0.079 0.889 0.109 0.684 0.136 0.980 0.166 0.806 0.264 0.779 0.427 0.000 0.674 0.000 0.707 0.751 0.750 0.609 0.777 0.747 0.791 0.403 0.815 0.680 0.842 0.368 0.875 0.285 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.268 0.048 0.323 0.106 0.338 0.184 0.331 0.247 0.321 0.284 0.294 0.314 0.296 0.419 0.287 0.435 0.254 0.683 0.237 0.696 0.285 0.715 0.323 0.748 0.321 0.781 0.306 0.830 0.300 0.875 0.277 0.922 0.264 1.000 0.208) :duration dur :scaler (hz->radians 2850.0))) (gen1 (make-polywave 0.0 '(1 .99 3 .01))) (rndf (make-env '(0 0 .3 0 .4 1 .5 0 .65 0 .7 .1 .85 .1 1 1) :duration dur)) (rnd (make-rand-interp 400 (hz->radians 100)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (* (env rndf) (rand-interp rnd)))))))))) ;; (with-sound (:play #t) (inca-dove-1 0 .5)) (define-animal (inca-dove-2 beg amp) ;; south 11 11.3 ("what the hell") (let ((pitch (hz->radians 5150)) (dur1 .1) (dur2 .07) (dur3 .29) (start1 (seconds->samples beg))) (let ((stop1 (+ start1 (seconds->samples dur1))) (ampf1 (make-env '(0.000 0.000 0.354 0.256 0.417 0.212 0.543 0.031 0.579 0.101 0.608 0.606 0.635 0.822 0.666 0.744 0.724 0.046 0.749 0.637 0.783 0.981 0.821 0.966 0.869 0.660 0.905 0.746 0.930 0.702 0.972 0.197 1.000 0.000) :duration dur1 :scaler amp)) (frqf1 (make-env '(0.000 0.092 0.082 0.115 0.201 0.137 0.351 0.143 0.477 0.140 0.553 0.162 0.624 0.166 0.675 0.159 0.770 0.166 0.838 0.162 0.933 0.156 1.000 0.156) :duration dur1 :scaler pitch)) (start2 (seconds->samples (+ beg .2)))) (let ((stop2 (+ start2 (seconds->samples dur2))) (ampf2 (make-env '(0.000 0.000 0.254 0.252 0.513 0.997 0.612 0.943 0.675 0.990 0.851 0.809 0.906 0.608 1.000 0.000) :duration dur2 :scaler amp)) (frqf2 (make-env '(0.000 0.129 0.158 0.154 0.369 0.173 0.450 0.173 0.867 0.164 1.000 0.138) :duration dur2 :scaler pitch)) (start3 (seconds->samples (+ beg .3)))) (let ((stop3 (+ start3 (seconds->samples dur3))) (ampf3 (make-env '(0.000 0.000 0.017 0.084 0.043 1.000 0.049 0.964 0.065 0.202 0.071 0.311 0.084 1.000 0.096 0.851 0.109 0.363 0.123 0.920 0.140 0.790 0.150 0.308 0.162 0.931 0.166 0.896 0.177 0.414 0.186 0.859 0.190 0.794 0.197 0.264 0.204 0.890 0.209 0.858 0.216 0.218 0.228 0.934 0.233 0.885 0.243 0.331 0.248 0.776 0.253 0.877 0.264 0.372 0.274 0.881 0.277 0.869 0.287 0.128 0.290 0.481 0.292 0.789 0.296 0.848 0.302 0.660 0.307 0.182 0.311 0.478 0.313 0.831 0.318 0.950 0.322 0.881 0.330 0.175 0.334 0.559 0.338 0.896 0.341 0.953 0.350 0.438 0.356 0.829 0.362 0.952 0.364 0.887 0.374 0.309 0.387 0.942 0.391 0.930 0.396 0.796 0.407 0.912 0.421 0.272 0.428 0.633 0.431 0.847 0.436 0.878 0.446 0.222 0.452 0.811 0.459 0.967 0.468 0.825 0.475 0.942 0.480 0.896 0.491 0.153 0.506 0.919 0.512 0.867 0.523 0.482 0.532 0.581 0.544 0.402 0.551 0.633 0.559 0.767 0.563 0.740 0.575 0.485 0.587 0.638 0.597 0.656 0.606 0.590 0.616 0.477 0.627 0.025 0.634 0.213 0.642 0.301 0.665 0.251 0.673 0.156 0.687 0.276 0.717 0.159 0.725 0.207 0.735 0.094 0.749 0.157 0.769 0.108 0.799 0.155 0.827 0.115 0.858 0.142 0.876 0.070 1.000 0.000) :duration dur3 :scaler amp)) (frqf3 (make-env '(0.000 0.172 0.135 0.191 0.199 0.192 0.266 0.176 0.325 0.173 0.384 0.182 0.423 0.186 0.614 0.173 0.896 0.145 1.000 0.138) :duration dur3 :scaler pitch)) (gen1 (make-polywave 0.0 '(1 .99 3 .01))) (rnd (make-rand-interp 300 (hz->radians 50)))) (do ((i start1 (+ i 1))) ((= i stop1)) (outa i (* (env ampf1) (polywave gen1 (env frqf1))))) (do ((i start2 (+ i 1))) ((= i stop2)) (outa i (* (env ampf2) (polywave gen1 (env frqf2))))) (do ((i start3 (+ i 1))) ((= i stop3)) (outa i (* (env ampf3) (polywave gen1 (+ (env frqf3) (rand-interp rnd))))))))))) ;; (with-sound (:play #t) (inca-dove-2 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Great kiskadee (define-animal (great-kiskadee beg amp) ;; south 37 16.5 ;; note #1 (let ((dur 0.123)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.013 0.068 0.026 0.000 0.048 0.030 0.053 0.211 0.068 0.000 0.083 0.000 0.093 0.184 0.098 0.479 0.114 0.000 0.125 0.000 0.135 0.216 0.140 0.526 0.159 0.000 0.172 0.000 0.174 0.159 0.179 0.252 0.185 0.625 0.190 0.578 0.205 0.000 0.218 0.066 0.225 0.301 0.230 0.715 0.240 0.592 0.250 0.000 0.260 0.077 0.280 0.800 0.295 0.000 0.305 0.099 0.324 0.822 0.341 0.000 0.351 0.137 0.370 0.855 0.377 0.660 0.389 0.000 0.396 0.110 0.405 0.397 0.414 0.868 0.422 0.751 0.442 0.071 0.457 0.562 0.461 0.827 0.470 0.759 0.488 0.438 0.496 0.863 0.506 0.822 0.519 0.666 0.538 0.737 0.553 0.737 0.567 0.871 0.619 0.973 0.650 0.847 0.694 0.375 0.766 0.238 0.789 0.353 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.357 0.048 0.353 0.056 0.407 0.098 0.353 0.105 0.395 0.142 0.347 0.145 0.390 0.183 0.353 0.194 0.403 0.231 0.374 0.240 0.420 0.273 0.372 0.285 0.434 0.317 0.388 0.332 0.438 0.364 0.376 0.382 0.438 0.406 0.384 0.427 0.447 0.454 0.370 0.472 0.432 0.489 0.436 0.500 0.399 0.527 0.418 0.561 0.420 0.647 0.359 0.711 0.317 0.736 0.313 .9 .2 .95 .15) :duration dur :scaler (hz->radians (* 0.5 8280.0)))) (gen1 (make-polywave 0.0 (normalize-partials '(1 .17 3 .1 4 .1 5 .14 6 .01)))) (ampf1 (make-env '(0 .1 .3 1 .5 1 .8 0 1 0) :duration dur)) (gen2 (make-polywave 0.0 (normalize-partials '(2 .95 3 .04 4 .03))))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env ampf1) (polywave gen1 frq)) (polywave gen2 frq)))))))) ;; note #2 (let ((dur 0.38)) (let ((start (seconds->samples (+ beg .2))) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.024 0.225 0.147 0.534 0.263 0.731 0.406 0.881 0.597 0.873 0.772 0.754 0.897 0.503 0.926 0.582 1.000 0.000) :duration dur :scaler (* 0.8 amp))) (frqf (make-env '(0.000 0.195 0.066 0.286 0.086 0.305 0.120 0.365 0.187 0.417 0.345 0.461 0.525 0.483 0.748 0.450 0.853 0.429 0.919 0.392 0.957 0.328 0.971 0.253 1.000 0.214) :duration dur :scaler (hz->radians (* 0.5 5500.0)))) (gen1 (make-polywave 0.0 (normalize-partials '(3 .01 4 .01 5 .01 6 .01)))) (gen2 (make-polywave 0.0 (normalize-partials '(1 .08 2 1.0 3 .06 5 .02 7 .007 8 .003 10 .001)))) (ampf1 (make-env '(0 1 .07 1 .15 .1 .85 .1 .9 1 1 1) :duration dur)) (ampf2 (make-env '(0 0 .3 1 .8 1 1 0) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env ampf1) (polywave gen1 frq)) (* (env ampf2) (polywave gen2 frq)))))))))) ;; (with-sound (:play #t) (great-kiskadee 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Chestnut-sided warbler (define (chestnut-sided-warbler beg1 amp1) ;; east 12 3.5 (define-animal (chestnut-sided-warbler-1 beg amp) ;; first 6 notes (let ((dur 0.11)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.188 0.446 0.230 0.412 0.276 0.190 0.298 0.330 0.302 0.158 0.309 0.278 0.312 0.037 0.324 0.126 0.367 0.077 0.400 0.261 0.459 0.880 0.482 0.710 0.493 0.798 0.503 0.628 0.519 0.998 0.534 0.591 0.559 0.843 0.565 0.769 0.579 0.835 0.601 0.562 0.622 0.663 0.641 0.581 0.642 0.689 0.660 0.465 0.682 0.601 0.707 0.678 0.724 0.603 0.746 0.668 0.758 0.589 0.768 0.682 0.814 0.549 0.833 0.638 0.865 0.582 0.881 0.618 0.915 0.527 0.965 0.143 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.262 0.127 0.273 0.263 0.273 0.294 0.320 0.318 0.383 0.346 0.410 0.373 0.386 0.396 0.353 0.421 0.339 0.458 0.336 0.490 0.306 0.516 0.303 0.534 0.287 0.598 0.267 0.689 0.245 0.806 0.223 1.000 0.212) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (chestnut-sided-warbler-2 beg amp) ;; notes 7 and 8 (let ((dur 0.17)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.213 0.394 0.239 0.394 0.319 0.669 0.337 0.584 0.354 0.683 0.369 0.620 0.381 0.705 0.387 0.556 0.398 0.642 0.419 0.683 0.468 0.576 0.490 0.424 0.513 0.576 0.589 0.212 0.644 0.380 0.693 0.609 0.708 0.537 0.721 0.402 0.729 0.515 0.754 0.620 0.767 0.526 0.785 0.749 0.812 0.942 0.827 0.675 0.835 0.733 0.853 0.573 0.863 0.369 0.876 1.000 0.881 0.565 0.887 0.893 0.910 0.857 0.919 0.672 0.939 0.774 0.950 0.551 0.968 0.477 0.982 0.050 0.989 0.102 1.000 0.000) :duration dur :scaler (* .9 amp))) (frqf (make-env '(0.000 0.129 0.067 0.160 0.129 0.174 0.184 0.176 0.273 0.196 0.351 0.212 0.390 0.229 0.426 0.251 0.470 0.270 0.503 0.253 0.538 0.204 0.563 0.182 0.594 0.168 0.633 0.176 0.688 0.218 0.715 0.223 0.733 0.240 0.750 0.281 0.794 0.303 0.844 0.314 0.894 0.320 0.945 0.336 1.000 0.325) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .005 4 .003)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (chestnut-sided-warbler-3 beg amp) ;; last note (let ((dur 0.19)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.015 0.036 0.074 0.344 0.105 0.331 0.111 0.427 0.137 0.455 0.152 0.567 0.166 0.466 0.178 0.840 0.194 0.749 0.207 0.884 0.232 0.992 0.239 0.953 0.245 0.763 0.255 0.895 0.260 0.749 0.272 0.862 0.286 0.650 0.295 0.744 0.302 0.636 0.334 0.501 0.352 0.711 0.375 0.730 0.384 0.559 0.395 0.620 0.404 0.576 0.419 0.656 0.443 0.540 0.462 0.559 0.473 0.490 0.487 0.534 0.566 0.267 0.582 0.320 0.645 0.154 0.714 0.113 1.000 0.000) :duration dur :scaler (* .7 amp))) (frqf (make-env '(0.000 0.416 0.039 0.419 0.063 0.410 0.092 0.386 0.127 0.342 0.167 0.314 0.229 0.278 0.334 0.245 0.497 0.198 0.579 0.179 0.628 0.176 0.675 0.171 0.731 0.160 0.841 0.152 1.000 0.118) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .01)))) ; there are 3 to 5, but they alias at 44KHz (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (let ((amps (vector .1 .3 .6 .8 .9 1.0)) (begs (vector 0.0 0.156 .311 .454 .594 .731))) (do ((call 0 (+ call 1))) ((= call 6)) (chestnut-sided-warbler-1 (+ beg1 (begs call)) (* amp1 (amps call))))) (chestnut-sided-warbler-2 (+ beg1 .88) amp1) (chestnut-sided-warbler-2 (+ beg1 1.09) amp1) (chestnut-sided-warbler-3 (+ beg1 1.3) amp1)) ;; (with-sound (:play #t) (chestnut-sided-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Yellow-bellied flycatcher (define-animal (yellow-bellied-flycatcher beg amp) ;; east 40 3.1 (let ((dur 0.167)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.031 0.122 0.054 0.665 0.082 0.777 0.092 0.724 0.105 0.774 0.109 0.639 0.116 0.697 0.121 0.577 0.135 0.781 0.149 0.368 0.153 0.419 0.171 0.092 0.176 0.234 0.224 0.028 0.264 0.191 0.284 0.619 0.299 0.709 0.304 0.914 0.311 0.861 0.316 0.945 0.320 0.809 0.327 0.957 0.332 0.786 0.337 0.972 0.348 0.973 0.362 0.742 0.377 0.358 0.390 0.388 0.413 0.035 0.420 0.070 0.428 0.031 0.450 0.068 0.458 0.022 0.471 0.088 0.480 0.051 0.490 0.189 0.499 0.041 0.509 0.164 0.518 0.101 0.526 0.230 0.536 0.046 0.544 0.188 0.554 0.241 0.557 0.139 0.563 0.214 0.567 0.316 0.578 0.038 0.584 0.192 0.595 0.303 0.598 0.186 0.607 0.381 0.615 0.082 0.621 0.132 0.628 0.286 0.634 0.266 0.638 0.300 0.646 0.385 0.655 0.109 0.662 0.084 0.664 0.170 0.668 0.247 0.675 0.212 0.687 0.382 0.697 0.122 0.704 0.086 0.708 0.236 0.715 0.262 0.718 0.334 0.724 0.251 0.727 0.364 0.730 0.319 0.740 0.088 0.744 0.045 0.749 0.120 0.752 0.286 0.759 0.373 0.764 0.259 0.770 0.341 0.778 0.234 0.782 0.057 0.789 0.122 0.794 0.245 0.801 0.336 0.808 0.231 0.813 0.327 0.821 0.224 0.826 0.045 0.838 0.197 0.846 0.346 0.861 0.266 0.867 0.074 0.874 0.189 0.880 0.168 0.887 0.388 0.904 0.489 0.917 0.520 0.922 0.497 0.929 0.258 0.936 0.253 0.943 0.124 0.950 0.180 0.959 0.051 0.971 0.099 0.974 0.061 0.980 0.089 0.988 0.032 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.341 0.025 0.368 0.045 0.434 0.059 0.482 0.073 0.482 0.086 0.465 0.101 0.434 0.127 0.416 0.150 0.392 0.181 0.341 0.205 0.319 0.232 0.339 0.268 0.407 0.289 0.458 0.311 0.500 0.324 0.509 0.390 0.518 0.408 0.590 0.444 0.487 0.455 0.247 0.470 0.253 0.479 0.289 0.485 0.394 0.495 0.421 0.502 0.370 0.507 0.304 0.515 0.286 0.522 0.304 0.523 0.438 0.529 0.454 0.538 0.441 0.546 0.319 0.552 0.295 0.559 0.326 0.562 0.425 0.567 0.452 0.574 0.427 0.582 0.357 0.592 0.324 0.600 0.344 0.602 0.416 0.608 0.445 0.616 0.447 0.625 0.339 0.634 0.322 0.642 0.337 0.643 0.394 0.645 0.454 0.654 0.452 0.664 0.357 0.674 0.335 0.683 0.339 0.685 0.427 0.692 0.458 0.698 0.430 0.704 0.352 0.714 0.337 0.721 0.346 0.727 0.436 0.731 0.456 0.737 0.434 0.742 0.374 0.756 0.346 0.767 0.355 0.773 0.443 0.780 0.460 0.786 0.438 0.791 0.385 0.799 0.348 0.810 0.366 0.815 0.421 0.821 0.434 0.824 0.419 0.831 0.372 0.841 0.359 0.851 0.357 0.854 0.388 0.856 0.515 0.864 0.568 0.871 0.555 0.883 0.436 0.914 0.421 0.930 0.385 1.000 0.368) :duration dur :scaler (hz->radians 10000.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .02 3 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (yellow-bellied-flycatcher 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Black-throated blue warbler (define (black-throated-blue-warbler beg1 amp1) ;; east 15 9.8 (define-animal (black-throated-blue-warbler-1 beg dur amp ampf frq frqf ind) (let ((speed 200)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env ampf :duration dur :scaler amp)) (frqf1 (make-env frqf :duration dur :scaler (hz->radians frq))) (gen1 (make-polywave 0.0 '(1 .99 2 .008 3 .003))) (vib (make-oscil speed)) (vibf (make-env '(0 1 .8 1 .9 0 1 0) :duration dur :scaler (hz->radians ind))) (rnd (make-rand-interp 800)) (trem (make-oscil (* 2 speed)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .25 (* .45 (abs (+ (rand-interp rnd) (* .7 (oscil trem)))))) (polywave gen1 (+ (env frqf1) (* (env vibf) (oscil vib)))))))))) (black-throated-blue-warbler-1 beg1 .053 (* .2 amp1) '(0.000 0.000 0.017 0.079 0.082 0.142 0.142 0.122 0.199 0.213 0.237 0.150 0.291 0.201 0.317 0.102 0.352 0.197 0.395 0.248 0.415 0.201 0.435 0.335 0.468 0.323 0.488 0.429 0.514 0.350 0.581 0.870 0.616 0.583 0.678 0.697 0.709 0.618 0.752 1.000 0.801 0.350 0.815 0.295 0.838 0.500 0.895 0.197 0.911 0.366 0.929 0.220 0.955 0.248 0.972 0.134 0.987 0.197 1.000 0.000) 22000 '(0.000 0.222 0.038 0.204 0.099 0.208 0.134 0.197 0.205 0.208 0.244 0.186 0.288 0.211 0.336 0.194 0.382 0.201 0.421 0.190 0.475 0.215 0.511 0.190 0.563 0.208 0.613 0.190 0.656 0.208 0.695 0.194 0.755 0.194 1.000 0.133) 10) (let ((main-frqf '(0.000 0.228 0.795 0.210 0.816 0.235 0.827 0.199 0.846 0.217 0.882 0.181 1.000 0.206))) (let ((main-ampf '(0.000 0.000 0.321 0.215 0.679 0.569 0.826 0.992 0.874 1.000 1.000 0.000))) (black-throated-blue-warbler-1 (+ beg1 .156) .11 (* .4 amp1) main-ampf 20000 main-frqf 100) (black-throated-blue-warbler-1 (+ beg1 .33) .135 (* .6 amp1) main-ampf 21000 main-frqf 200) (black-throated-blue-warbler-1 (+ beg1 .33) .135 (* .6 amp1) main-ampf 22000 main-frqf 200)) (let ((other-ampf '(0.000 0.000 0.139 0.356 0.541 0.652 0.766 0.838 0.834 1.000 0.932 0.257 1.000 0.000))) (black-throated-blue-warbler-1 (+ beg1 .51) .175 amp1 other-ampf 22400.0 main-frqf 200) (black-throated-blue-warbler-1 (+ beg1 .72) .152 amp1 other-ampf 23000.0 main-frqf 200))) (black-throated-blue-warbler-1 (+ beg1 .94) .23 (* .5 amp1) '(0.000 0.000 0.022 0.300 0.067 0.788 0.191 0.919 0.331 0.958 0.581 1.000 0.805 0.946 0.929 0.773 1.000 0.000) 5400.0 '(0 1 1 1) 400)) ;; (with-sound (:play #t) (black-throated-blue-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Great crested flycatcher (define-animal (great-crested-flycatcher beg amp) ;; east 46 6 (let ((dur 0.318)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.122 0.198 0.136 0.168 0.165 0.235 0.184 0.411 0.191 0.373 0.212 0.542 0.224 0.499 0.242 0.715 0.288 0.617 0.294 0.559 0.307 0.644 0.338 0.491 0.348 0.586 0.357 0.576 0.368 0.491 0.373 0.539 0.392 0.536 0.427 0.656 0.446 0.642 0.528 0.795 0.556 0.636 0.566 0.997 0.582 0.100 0.590 0.384 0.597 0.097 0.601 0.213 0.607 0.120 0.614 0.586 0.653 0.334 0.658 0.225 0.676 0.639 0.703 0.195 0.711 0.363 0.733 0.358 0.746 0.280 0.771 0.551 0.793 0.226 0.840 0.258 0.922 0.183 0.973 0.150 1.000 0.000) :duration dur :scaler amp)) (frqf1 (make-env '(0.000 0.226 0.033 0.284 0.076 0.324 0.128 0.376 0.200 0.423 0.254 0.439 0.314 0.441 0.391 0.438 0.488 0.432 0.533 0.436 0.559 0.445 0.566 0.486 0.586 0.660 0.606 0.656 0.612 0.544 0.627 0.535 0.643 0.546 0.689 0.535 0.708 0.523 0.718 0.546 0.735 0.528 0.740 0.501 1.000 0.416) :duration dur :scaler (hz->radians 7090.0))) (ampf1 (make-env '(0 1 .6 1 .65 .1 .7 .5 .75 0 1 0) :duration dur)) (gen1 (make-polywave 0.0 '(1 .92 2 .05 3 .01 4 .005 6 .005))) (frqf2 (make-env '(0.000 0.407 0.256 0.439 0.492 0.434 0.566 0.447 0.595 0.430 0.609 0.309 0.626 0.266 0.646 0.297 0.661 0.396 0.673 0.430 0.681 0.474 0.695 0.412 0.702 0.325 0.719 0.320 0.736 0.335 0.762 0.409 0.774 0.445 0.786 0.414 0.791 0.335 0.806 0.311 0.824 0.329 0.839 0.376 0.856 0.349 0.876 0.324 0.916 0.324 0.951 0.293 1.000 0.25) :duration dur :scaler (hz->radians 7090.0))) (ampf2 (make-env '(0 0 .5 0 .55 .2 .7 1 1 .5) :duration dur)) (gen2 (make-polywave 0.0 '(1 .95 2 .01 3 .01 4 .01 5 .005 6 .01))) (rnd (make-rand-interp 100 .7))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ (* (env ampf1) (polywave gen1 (env frqf1))) (* (env ampf2) (+ .3 (abs (rand-interp rnd))) (polywave gen2 (env frqf2)))))))))) ;; (with-sound (:play #t) (great-crested-flycatcher 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; House sparrow (define-animal (house-sparrow-1 beg amp) ;; east 99 2.9 (let ((dur 0.144)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.073 0.108 0.086 0.220 0.182 0.225 0.190 0.281 0.200 0.151 0.240 0.529 0.254 0.436 0.259 0.558 0.266 0.536 0.284 0.856 0.299 0.461 0.311 0.888 0.330 0.281 0.339 0.612 0.344 0.559 0.355 0.178 0.376 0.575 0.380 0.407 0.389 0.919 0.394 0.686 0.399 0.836 0.407 0.547 0.412 0.976 0.422 0.176 0.426 0.476 0.442 0.942 0.461 0.347 0.475 0.281 0.485 0.069 0.488 0.222 0.499 0.200 0.505 0.259 0.527 0.422 0.559 0.583 0.576 0.324 0.599 0.578 0.611 0.556 0.626 0.268 0.640 0.525 0.652 0.471 0.657 0.237 0.685 0.556 0.703 0.449 0.714 0.175 0.756 0.308 0.803 0.229 0.926 0.112 0.963 0.056 0.972 0.093 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.217 0.130 0.236 0.169 0.261 0.196 0.321 0.238 0.414 0.260 0.445 0.286 0.462 0.302 0.451 0.316 0.472 0.329 0.458 0.346 0.507 0.361 0.530 0.383 0.501 0.408 0.400 0.427 0.420 0.451 0.395 0.465 0.333 0.485 0.275 0.503 0.290 0.518 0.321 0.563 0.373 0.622 0.441 0.643 0.387 0.664 0.325 0.684 0.360 0.700 0.358 0.713 0.282 0.734 0.267 0.746 0.288 0.769 0.325 0.799 0.290 0.833 0.321 0.859 0.292 0.888 0.304 0.913 0.265 0.944 0.265 0.964 0.226 0.984 0.209 1.000 0.224) :duration dur :scaler (hz->radians 10550.0))) (rnd (make-rand-interp 4000 (hz->radians 300))) (rnd1 (make-rand-interp 4000)) (rndf1 (make-env '(0 1 .15 1 .2 0 .75 0 .8 1 1 1) :duration dur :scaler .75)) (gen1 (make-oscil)) (ampf1 (make-env '(0 0 .15 0 .2 1 .9 1 1 .2) :duration dur)) (gen2 (make-oscil)) (ampf2 (make-env '(0 .5 .15 .5 .2 .05 1 .01) :duration dur)) (gen3 (make-oscil)) (ampf3 (make-env '(0 .5 .15 .5 .2 .005 1 .005) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((rf (env rndf1)) (frq (+ (env frqf) (rand-interp rnd)))) (outa i (* (env ampf) (- (+ 1.0 (* rf (abs (rand-interp rnd1)))) rf) (+ (* (env ampf1) (oscil gen1 frq)) (* (env ampf2) (oscil gen2 (* 2.0 frq))) (* (env ampf3) (oscil gen3 (* 3.0 frq))))))))))) ;; (with-sound (:play #t) (house-sparrow-1 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Gambel's quail (define-animal (gambels-quail beg amp) ;; south 8 3 (let ((dur 0.56)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.105 0.364 0.146 0.379 0.231 0.694 0.471 0.838 0.567 0.785 0.637 0.649 0.681 0.626 0.750 0.513 0.771 0.417 0.828 0.351 0.864 0.212 0.952 0.048 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.080 0.029 0.091 0.079 0.131 0.103 0.136 0.165 0.148 0.219 0.164 0.341 0.176 0.469 0.173 0.714 0.162 0.819 0.157 0.902 0.150 0.949 0.138 1.000 0.141) :duration dur :scaler (hz->radians (* 0.5 10950)))) (gen1 (make-polywave 0.0 (normalize-partials '(1 .21 2 .83 3 .05)))) (gen2 (make-polywave 0.0 (normalize-partials '(4 .03 5 .02 6 .12)))) (gen3 (make-polywave 0.0 (normalize-partials '(7 .01 8 .02 9 .007 10 .003)))) (ampf2 (make-env '(0 0 .05 0 .1 .2 .15 0 .275 1 .6 1 .9 0 1 0) :duration dur :scaler .15)) (ampf3 (make-env '(0 0 .18 0 .5 1 .7 1 .85 0 1 0) :duration dur :scaler .08))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (polywave gen2 frq)) (* (env ampf3) (polywave gen3 frq)))))))))) ;; (with-sound (:play #t) (gambels-quail 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Scaled quail (define (scaled-quail beg1 amp1) ;; south 7 7 (define-animal (scaled-quail-1 beg dur amp frqscl frm1frq frm2frq frmamp vibamp vibf amp4 amp5) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.026 0.166 0.052 0.609 0.058 0.250 0.066 0.892 0.070 0.465 0.073 0.909 0.079 0.255 0.088 0.766 0.091 0.350 0.096 0.607 0.105 0.504 0.106 0.932 0.119 0.296 0.126 0.978 0.129 0.540 0.134 0.609 0.136 0.347 0.140 0.425 0.142 0.274 0.148 0.998 0.154 0.393 0.156 0.816 0.161 0.266 0.166 0.614 0.170 0.810 0.174 0.482 0.177 0.773 0.184 0.305 0.192 0.937 0.198 0.296 0.199 0.596 0.203 0.350 0.207 0.738 0.212 0.399 0.213 0.602 0.222 0.650 0.228 0.464 0.238 0.526 0.246 0.266 0.259 0.403 0.283 0.320 0.323 0.365 0.388 0.249 0.405 0.196 0.432 0.191 0.496 0.135 0.582 0.120 0.621 0.071 1.000 0.000) :duration dur :scaler (* 0.3 amp))) (frqf (make-env '(0.000 0.157 0.051 0.204 0.075 0.267 0.142 0.281 0.196 0.267 0.268 0.191 0.353 0.171 1.000 0.175) :duration dur :scaler (hz->radians frqscl))) (gen1 (make-polywave 0.0 :partials '(1 2))) (gen2 (make-polywave 0.0 (list 2 (* 2 .3) 3 (* 2 .7)))) (gen6 (make-polywave 0.0 (normalize-partials '(4 .1 5 .05 6 .02)))) (gen3 (make-polywave 0.0 (normalize-partials '(9 .12 10 .02 11 .003 12 .006 15 .005 16 .004)))) (gen4 (make-oscil)) (gen5 (make-oscil)) (ampf1 (make-env '(0 1 .6 1 .9 0 1 0) :duration dur :scaler .1)) (ampf3 (make-env '(0 0 .1 .2 .4 1 .5 1 .8 0 1 0) :duration dur :scaler .3)) (ampf4 (make-env amp4 :duration dur :scaler .25)) (ampf5 (make-env amp5 :duration dur :scaler .125)) (ampf6 (make-env '(0 0 .3 0 .4 1 1 0) :duration dur :scaler .5)) (vib (make-oscil 1000)) (vibf1 (make-env vibf :duration dur :scaler (hz->radians 200))) (rnd (make-rand-interp 10000 vibamp)) (frm1 (make-formant frm1frq .97)) (frm2 (make-formant frm2frq .95)) (fr1 (* 10 (sin (hz->radians frm1frq)))) (fr2 (* 8 (sin (hz->radians frm2frq)))) (frmf (make-env frmamp :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let* ((frq (+ (env frqf) (* (env vibf1) (+ (oscil vib) (rand-interp rnd))))) (frm (env frmf)) (val (* (env ampf) (+ (* (env ampf1) (polywave gen1 frq)) (* (env ampf4) (oscil gen4 (* frq 5))) (* (env ampf5) (oscil gen5 (* frq 6))) (+ (polywave gen2 frq) (* (env ampf3) (polywave gen3 frq)) (* (env ampf6) (polywave gen6 frq))))))) (outa i (+ (* frm (+ (* fr1 (formant frm1 val)) (* fr2 (formant frm2 val)))) (* (- 1.0 frm) val))))))) (scaled-quail-1 beg1 .18 amp1 4200 2300 6400 '(0 0 .1 1 .45 1 .5 0 .7 0 .8 1 1 1) 1.5 '(0 1 .1 1 .45 1 .5 0 .6 0 .65 1 1 1) '(0 0 .1 1 .4 1 .5 0 1 0) '(0 0 .1 0 .4 1 .5 0 1 0)) (scaled-quail-1 (+ beg1 .35) .27 amp1 4000 2700 6000 '(0 0 .1 1 .25 1 .3 0 1 0) 2.0 '(0 1 .1 1 .25 1 .3 0 .9 0 1 .5) '(0 0 .1 1 .2 1 .3 0 1 0) '(0 0 .1 0 .2 1 .3 0 1 0))) ;; (with-sound (:play #t) (scaled-quail 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Montezuma quail (define-animal (montezuma-quail beg amp) ;; south 9 15 (let ((dur 1.3)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.022 0.069 0.036 0.196 0.088 0.615 0.138 0.837 0.168 0.873 0.202 0.837 0.217 0.743 0.225 0.850 0.242 0.962 0.255 0.839 0.270 0.914 0.309 0.916 0.322 0.796 0.365 0.831 0.407 0.941 0.432 0.975 0.442 0.885 0.461 0.919 0.480 0.850 0.494 0.651 0.504 0.903 0.527 0.773 0.546 0.870 0.585 0.813 0.604 0.880 0.630 0.836 0.642 0.789 0.662 0.898 0.689 0.817 0.779 0.656 0.834 0.668 0.895 0.449 0.927 0.372 0.950 0.350 0.965 0.229 0.981 0.253 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.284 0.052 0.254 0.128 0.239 0.256 0.229 0.404 0.219 0.580 0.211 0.707 0.206 1.000 0.216) :duration dur :scaler (hz->radians 8700.0))) (gen1 (make-polywave 0.0 '(1 .91 2 .008 3 .07 4 .003))) (vib (make-oscil 50)) (vibf (make-env '(0 .1 .4 .6 .9 1 1 .4) :duration dur :scaler (hz->radians 100))) (vibr (make-rand-interp 200 .5)) (rnd (make-rand-interp 240 .5))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (+ .5 (abs (rand-interp rnd))) (polywave gen1 (+ (env frqf) (* (env vibf) (+ (oscil vib) (rand-interp vibr))))))))))) ;; (with-sound (:play #t) (montezuma-quail 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Mountain quail (define-animal (mountain-quail beg amp) (let ((dur .2)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.152 0.128 0.179 0.040 0.219 0.173 0.271 0.864 0.289 0.754 0.300 0.666 0.316 0.804 0.339 0.666 0.362 0.628 0.402 0.477 0.493 0.653 0.513 0.721 0.573 0.736 0.599 0.626 0.666 0.804 0.741 0.887 0.786 0.977 0.818 0.814 0.837 0.807 0.872 0.889 0.899 0.761 0.920 0.588 0.932 0.656 0.956 0.427 0.970 0.176 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.103 0.036 0.108 0.151 0.103 0.175 0.156 0.219 0.160 0.261 0.162 0.322 0.144 0.397 0.149 0.894 0.146 0.945 0.130 1.000 0.121) :duration dur :scaler (hz->radians 10000.0))) (gen1 (make-oscil)) (ampf2 (make-env '(0 0 .1 0 .2 1 1 1) :duration dur)) (gen2 (make-polywave 0.0 '(2 .01 3 .005 4 .04 5 .003))) (rnd (make-rand-interp 4000 (hz->radians 500))) (rndf (make-env '(0 1 .2 .1 .9 .1 1 1) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (* (env rndf) (rand-interp rnd))))) (outa i (* (env ampf) (+ (oscil gen1 frq) (* (env ampf2) (polywave gen2 frq)))))))))) ;; (with-sound (:play #t) (mountain-quail 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Verdin (define-animal (verdin beg amp) ;; south 57 18 (let ((begs (vector 0.0 0.28 0.57)) (durs (vector 0.12 0.15 0.15)) (amps (vector 0.25 0.75 1.0)) (frqs (vector '(0.000 0.162 0.246 0.168 0.505 0.168 0.867 0.183 0.956 0.198 1.000 0.192) '(0.000 0.162 0.246 0.168 0.867 0.183 0.897 0.186 0.926 0.204 1.000 0.192) '(0.000 0.189 0.039 0.168 0.246 0.168 1.000 0.192))) (gen1 (make-polywave 0.0 '(1 .98 2 .015 3 .005)))) (do ((call 0 (+ call 1))) ((= call 3)) (let ((start (seconds->samples (+ beg (begs call)))) (dur (durs call))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.016 0.207 0.079 0.402 0.131 0.348 0.224 0.562 0.255 0.592 0.316 0.757 0.367 0.637 0.407 0.664 0.428 0.613 0.474 0.751 0.495 0.757 0.522 0.898 0.609 1.000 0.701 0.778 0.738 0.967 0.770 0.892 0.797 0.898 0.819 0.790 0.835 0.931 0.852 0.892 0.874 0.997 0.903 0.775 0.928 0.718 0.957 0.736 1.000 0.000) :duration dur :scaler (* amp (amps call)))) (frqf (make-env (frqs call) :duration dur :scaler (hz->radians 22000.0)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))))) ;; (with-sound (:play #t) (verdin 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; White-tipped dove (define-animal (white-tipped-dove beg amp) (let ((dur 1.7)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.097 0.071 0.140 0.147 0.190 0.000 0.328 0.000 0.405 0.652 0.426 0.596 0.447 0.136 0.465 0.109 0.473 0.000 0.511 0.000 0.555 0.354 0.625 0.578 0.672 0.820 0.745 1.000 0.782 0.897 0.874 0.755 0.930 0.614 0.975 0.139 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.172 0.137 0.170 0.175 0.165 0.340 0.172 0.451 0.160 0.544 0.165 .6 .160 1.000 0.170) :duration dur :scaler (hz->radians 2550.0))) (gen1 (make-polywave 0.0 '(1 .94 2 .02 3 .05 4 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (white-tipped-dove 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Zone-tailed hawk (define-animal (zone-tailed-hawk beg amp) (let ((dur 1.82)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.014 0.170 0.019 0.000 0.046 0.074 0.054 0.327 0.090 0.448 0.106 0.781 0.130 0.852 0.139 1.000 0.174 1.000 0.359 0.691 0.383 0.435 0.427 0.494 0.545 0.448 0.654 0.463 0.704 0.485 0.741 0.330 0.752 0.407 0.785 0.435 0.792 0.238 0.793 0.528 0.825 0.528 0.838 0.475 0.846 0.225 0.850 0.509 0.872 0.485 0.892 0.367 0.913 0.497 0.949 0.500 0.978 0.537 0.988 0.099 1.000 0.000) :duration dur :scaler (* 0.8 amp))) (frqf (make-env '(0.000 0.283 0.026 0.321 0.048 0.368 0.051 0.404 0.055 0.330 0.064 0.357 0.076 0.357 0.097 0.387 0.108 0.427 0.184 0.438 0.356 0.452 0.371 0.431 0.380 0.408 0.460 0.401 0.510 0.390 0.555 0.397 0.589 0.386 0.615 0.388 0.667 0.376 0.718 0.382 0.783 0.365 0.807 0.348 0.841 0.333 0.875 0.314 0.905 0.314 0.925 0.340 0.957 0.344 0.972 0.325 0.983 0.302 1.000 0.237) :duration dur :scaler (hz->radians (* 0.5 8150.0)))) (gen1 (make-polywave 0.0 (list 1 (* .5 0.328) 2 (* .5 0.328) 3 (* .5 0.066) 4 (* .5 0.262) 5 (* .5 0.013) 7 (* .5 0.004)))) (gen2 (make-oscil)) (gen3 (make-polywave 0.0 (normalize-partials '(3 .2 5 .1 7 .1 9 .05 11 .05 13 .01)))) (ampf2 (make-env '(0 0 .05 0 .12 1 .18 1 .2 .6 .5 .8 .75 0 .8 .7 1 .7) :duration dur :scaler .5)) (ampf3 (make-env '(0 0 .05 0 .12 1 .6 1 .75 0 1 0) :duration dur :scaler .3 :base 10)) (rnd (make-rand-interp 3000)) (rndf (make-env '(0 0 .12 .2 .25 1 .35 1 .4 .2 .75 .3 .9 .1 .93 .4 1 0) :duration dur :scaler (hz->radians 100))) (vib (make-triangle-wave 40 (hz->radians 20))) (vibf (make-env '(0 0 .15 0 .2 1 .4 0 1 0) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((noise (* (env rndf) (rand-interp rnd))) (frq (+ (env frqf) (* (env vibf) (triangle-wave vib))))) (outa i (* (env ampf) (+ (polywave gen1 (+ frq (* 1.5 noise))) (* (env ampf2) (oscil gen2 (+ (* 2.0 frq) (* 0.5 noise)))) (* (env ampf3) (polywave gen3 (+ (* 0.5 frq) (* 2.0 noise)))))))))))) ;; (with-sound (:play #t) (zone-tailed-hawk 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Red-eyed vireo (define-animal (red-eyed-vireo beg amp) ;; south 47 46 (let ((dur 0.29)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.033 0.082 0.069 0.415 0.081 0.426 0.102 0.204 0.119 0.156 0.137 0.307 0.146 0.159 0.156 0.378 0.182 0.685 0.188 0.556 0.205 0.735 0.212 0.479 0.223 0.484 0.236 0.939 0.243 0.344 0.246 0.825 0.254 0.415 0.258 0.611 0.273 0.587 0.279 0.251 0.290 0.992 0.297 0.865 0.304 0.937 0.314 0.735 0.324 0.770 0.340 0.365 0.352 0.590 0.367 0.230 0.387 0.000 0.495 0.000 0.510 0.331 0.535 0.339 0.560 0.249 0.572 0.116 0.592 0.146 0.604 0.275 0.628 0.410 0.634 0.339 0.668 0.619 0.684 0.220 0.709 0.656 0.731 0.593 0.761 0.598 0.770 0.534 0.783 0.720 0.797 0.632 0.809 0.479 0.819 0.288 0.833 0.444 0.849 0.423 0.857 0.325 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.375 0.022 0.420 0.044 0.492 0.067 0.531 0.079 0.506 0.095 0.352 0.105 0.336 0.121 0.359 0.147 0.417 0.163 0.462 0.178 0.520 0.188 0.590 0.197 0.662 0.209 0.685 0.225 0.669 0.245 0.625 0.266 0.606 0.283 0.576 0.329 0.406 0.342 0.387 0.371 0.338 0.484 0.289 0.505 0.340 0.529 0.347 0.541 0.368 0.558 0.268 0.572 0.245 0.589 0.259 0.607 0.305 0.642 0.368 0.672 0.396 0.704 0.420 0.752 0.431 0.775 0.452 0.795 0.527 0.815 0.534 0.824 0.492 0.835 0.387 0.861 0.336 0.891 0.305 0.946 0.298 1.000 0.240) :duration dur :scaler (hz->radians 8100.0))) (gen1 (make-polywave 0.0 '(1 .985 2 .005 3 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (red-eyed-vireo 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Crested caracara ;;; ;;; not perfect... original seems to have a harder attack, slightly different timbre, etc (define-animal (crested-caracara beg amp) ;; south 5 6.5 (do ((i 0 (+ i 1))) ((= i 17)) (let ((start (seconds->samples (+ beg (* i .04) (random .005)))) (dur (+ 0.04 (random .005)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.003 0.273 0.032 0.068 0.055 0.147 0.073 0.033 0.116 0.958 0.143 0.641 0.180 0.869 0.193 0.340 0.207 0.618 0.235 0.881 0.258 0.587 0.293 0.387 0.320 0.676 0.334 0.263 0.352 0.338 0.369 0.000 0.396 0.573 0.407 0.333 0.417 0.660 0.431 0.779 0.445 0.268 0.498 0.1 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 1600 (normalize-partials '(1 .4 2 .7 3 .01 4 .01 5 .01)))) (gen2 (make-polywave 1200 '(1 .4 2 1))) (index (hz->radians 800)) (rnd (make-rand-interp 4000 .425))) (do ((k start (+ k 1))) ((= k stop)) (outa k (* (env ampf) (polywave gen1 (* index (+ (polywave gen2) (rand-interp rnd))))))))))) ;; (with-sound (:play #t) (crested-caracara 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Trumpeter swan ;;; ;;; this is a good one ;;; (someday also 55) (define (trumpeter-swan-1 beg amp) ;; east 19 44 (define-animal (trumpeter-swan-a beg amp) (let ((dur 0.053)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.086 0.411 0.253 0.887 0.466 0.989 0.627 0.992 0.782 0.842 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 356.0 (normalize-partials '(1 .1 2 1.0 3 .08 4 .2 5 .1 6 .03 7 .03 8 .03)))) (vib (make-oscil 130.0)) (index (hz->radians 30))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (* index (oscil vib))))))))) (define-animal (trumpeter-swan-b beg amp) (let ((dur 0.12)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.038 0.460 0.106 0.554 0.152 1.000 0.187 0.569 0.225 0.694 0.316 0.000 0.381 0.000 0.462 0.827 0.512 0.000 0.539 0.613 0.571 0.859 0.609 0.528 0.632 0.815 0.715 0.661 0.764 0.782 0.837 0.800 0.884 0.724 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.251 0.088 0.259 0.144 0.290 0.173 0.228 0.276 0.228 0.387 0.245 0.429 0.296 0.457 0.310 0.484 0.296 0.514 0.265 0.548 0.307 0.599 0.377 0.641 0.352 0.706 0.346 0.741 0.338 0.773 0.346 1.000 0.346) :duration dur :scaler (hz->radians (* 0.5 3140)))) (gen2 (make-polywave 0.0 (float-vector 2 (* .6 .8) 3 (* .6 .2)))) (gen2a (make-polywave 0.0 (normalize-partials '( 4 .35 5 .19 6 .12 7 .03 8 .02)))) (ampf2a (make-env '(0 1 .6 1 1 0) :duration dur :scaler .4 :base 10)) (gen3 (make-nrxysin :n 12 :r .85 :ratio 1/9)) (ampf3 (make-env '(0 0 .1 0 .15 .5 .2 0 .4 0 .45 .7 .5 0 .55 1 .7 1 .8 0 .9 .1 1 0) :duration dur :scaler .02)) (gen1 (make-oscil)) (ampf1 (make-env '(0 0 .5 0 .6 1 .9 1 1 0) :duration dur :scaler .2))) (set! (mus-phase gen2) (* 0.5 pi)) (set! (mus-phase gen2a) (* 0.5 pi)) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (polywave gen2 frq) (* (env ampf2a) (polywave gen2a frq)) (* (env ampf1) (oscil gen1 frq)) (* (env ampf3) (nrxysin gen3 (* 9.0 frq))))))))))) (define-animal (trumpeter-swan-c beg amp) (let ((dur 0.11)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.029 0.244 0.084 0.525 0.111 0.515 0.124 0.376 0.153 0.334 0.183 0.166 0.205 0.000 0.240 0.769 0.261 0.775 0.280 0.271 0.297 0.000 0.338 0.773 0.423 1.000 0.529 0.758 0.621 0.845 0.783 0.630 0.849 0.676 0.896 0.538 0.930 0.252 0.957 0.118 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.085 0.189 0.079 0.222 0.113 0.251 0.123 0.278 0.105 0.312 0.121 0.349 0.125 0.377 0.133 0.412 0.127 0.510 0.123 0.691 0.129 0.778 0.125 0.830 0.127 1.000 0.129) :duration dur :scaler (hz->radians (* 0.5 8650.0)))) (gen1 (make-polywave 0.0 (normalize-partials '(1 .01 2 .98 3 .05 4 .02 5 .005 6 .005)))) (gen2 (make-polywave 0.0 (normalize-partials '(1 .44 2 1.0 3 .34 4 .31 5 .19 6 .075 7 .04 8 .03)))) (gen3 (make-nrxysin :n 12 :r .85 :ratio 1/9)) (intrpf (make-env '(0 1 .19 1 .2 0 1 0) :duration dur)) (intrpf-1 (make-env '(0 1 .19 1 .2 0 1 0) :duration dur :offset 1.0 :scaler -1.0))) (set! (mus-phase gen2) (* 0.5 pi)) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env intrpf) (polywave gen1 frq)) (* (env intrpf-1) (+ (polywave gen2 frq) (* .03 (nrxysin gen3 (* 9.0 frq))))))))))))) (define-animal (trumpeter-swan-d beg amp) (let ((dur 0.082)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.068 0.279 0.121 0.989 0.178 0.755 0.208 0.451 0.234 0.834 0.291 0.921 0.355 0.459 0.371 0.158 0.401 0.876 0.494 1.000 0.614 0.851 0.797 0.510 0.862 0.166 0.928 0.146 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.328 0.092 0.328 0.147 0.370 0.212 0.314 0.256 0.356 0.345 0.359 0.389 0.373 0.438 0.370 0.489 0.420 0.532 0.398 0.601 0.398 0.641 0.375 0.685 0.364 0.739 0.401 0.799 0.417 0.856 0.398 1.000 0.401) :duration dur :scaler (hz->radians 1350))) (gen1 (make-oscil)) (ampf1 (make-env '(0 0 .4 .1 .5 1 .9 .5 1 0) :duration dur :scaler .3)) (gen2 (make-oscil)) (ampf2 (make-env '(0 1 .45 1 .5 .5 .6 .8 .7 .8 .75 .1 .8 .5 1 0) :duration dur :scaler .5)) (gen3 (make-nrxysin :n 12 :r .8 :ratio 1/8)) (ampf3 (make-env '(0 0 .1 1 .6 1 .8 0 1 0) :duration dur :scaler .15)) (gen4 (make-polywave 0.0 (normalize-partials '(3 .4 4 .4 5 .2 6 .1 7 .05)))) (ampf4 (make-env '(0 1 .8 1 1 0) :duration dur :scaler .5))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env ampf1) (oscil gen1 frq)) (* (env ampf2) (oscil gen2 (* 2.0 frq))) (* (env ampf3) (nrxysin gen3 (* 8.0 frq))) (* (env ampf4) (polywave gen4 frq)))))))))) (define-animal (trumpeter-swan-e beg amp) (let ((dur 0.04) (frq 434)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.087 0.300 0.206 0.927 0.265 1.000 0.324 0.894 0.382 0.482 0.445 0.515 0.692 0.364 0.752 0.218 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave frq '(1 .05 2 .85 3 .1 5 .01))) (gen2 (make-nrxysin (* frq 7) 1/7 10 .8)) (ampf2 (make-env '(0 0 .1 1 .4 0 1 0) :duration dur :scaler .2)) (vib (make-rand-interp 200)) (index (hz->radians 40))) (do ((i start (+ i 1))) ((= i stop)) (let ((vb (* index (rand-interp vib)))) (outa i (* (env ampf) (+ (polywave gen1 vb) (* (env ampf2) (nrxysin gen2 vb)))))))))) (trumpeter-swan-a beg (* amp .6)) (trumpeter-swan-b (+ beg .126) (* amp .9)) (trumpeter-swan-c (+ beg .259) amp) (trumpeter-swan-d (+ beg .408) (* amp .6)) (trumpeter-swan-e (+ beg .54) (* amp .3))) ;; (with-sound (:play #t) (trumpeter-swan-1 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Wrentit (define (wrentit beg1 amp1) ;; calif 1 3 (define-animal (wrentit-1 beg dur amp frqscl) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.095 0.221 0.193 0.692 0.293 0.814 0.380 0.727 0.486 1.000 0.543 0.972 0.611 0.664 0.720 0.435 0.788 0.115 0.853 0.138 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.262 0.112 0.288 0.197 0.304 0.275 0.319 0.508 0.313 0.634 0.281 0.743 0.281 0.811 0.249 0.869 0.256 1.000 0.240) :duration dur :scaler (hz->radians (* frqscl 5000.0)))) (gen1 (make-polywave 0.0 '(1 .005 2 .9 3 .005 4 .01 6 .03 7 .005 8 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) (define-animal (wrentit-2 beg dur amp frqscl) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.091 0.616 0.150 0.724 0.195 0.667 0.259 0.686 0.387 1.000 0.447 0.770 0.482 0.740 0.507 0.623 0.552 0.693 0.629 0.557 0.684 0.288 0.713 0.321 0.738 0.232 0.754 0.162 0.771 0.225 0.786 0.150 0.792 0.197 0.801 0.126 0.808 0.225 0.816 0.122 0.829 0.178 0.832 0.105 0.840 0.211 0.849 0.094 0.856 0.173 0.880 0.089 0.898 0.220 0.914 0.124 .925 .01 1 0) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.269 0.105 0.297 0.182 0.319 0.311 0.319 0.428 0.304 0.534 0.281 0.688 0.269 0.789 0.244 0.825 0.215 1 .21) :duration dur :scaler (hz->radians (* frqscl 5040.0)))) (gen1 (make-polywave 0.0 '(1 .005 3 .005 4 .01 6 .03 7 .005 8 .005))) (ampf1 (make-env '(0 1 .6 1 .7 0 1 0) :duration dur)) (gen2 (make-oscil)) (gen3 (make-oscil)) (ampf3 (make-env '(0 0 .7 0 1 1) :duration dur :scaler .5))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env ampf1) (polywave gen1 frq)) (* .9 (oscil gen2 (* 2.0 frq))) (* (env ampf3) (oscil gen3 (* 3.0 frq)))))))))) (wrentit-1 beg1 .041 (* amp1 0.6) 1.0) (wrentit-1 (+ beg1 .35) .05 amp1 1.0) (wrentit-2 (+ beg1 .45) .062 amp1 1.02) (wrentit-1 (+ beg1 .8) .048 amp1 1.03) (wrentit-2 (+ beg1 .87) .064 amp1 1.03) (let ((ampf (make-env '(0 1 1 .8) :length 10)) (frqf (make-env (list 0 1 1 (/ 3050.0 3200.0)) :length 10)) (call-init 1.0)) (do ((call 0 (+ call 1))) ((= call 10)) (let ((call-amp (env ampf)) (call-frq (env frqf))) (let ((call-beg (+ beg1 call-init (* call .15) (random .01)))) (wrentit-1 call-beg (+ .03 (random .005)) (* amp1 call-amp) call-frq) (wrentit-2 (+ call-beg .048) (+ .06 (random .005)) (* amp1 call-amp) call-frq)))) (wrentit-1 (+ beg1 2.6) .041 (* amp1 0.5) 1.0))) ;; (with-sound (:play #t) (wrentit 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Western wood-pewee (define-animal (western-wood-pewee-1 beg amp) ;; calif 2 8 (let ((dur 0.89)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.009 0.038 0.014 0.140 0.019 0.184 0.030 0.178 0.038 0.055 0.046 0.000 0.210 0.000 0.217 0.165 0.229 0.263 0.239 0.253 0.246 0.204 0.254 0.000 0.336 0.000 0.338 0.122 0.355 0.373 0.363 0.356 0.367 0.151 0.371 0.260 0.383 0.000 0.408 0.000 0.415 0.302 0.421 0.349 0.425 0.496 0.429 0.420 0.439 0.382 0.452 0.460 0.459 0.401 0.466 0.438 0.469 0.498 0.484 0.567 0.505 0.603 0.518 0.541 0.531 0.580 0.543 0.582 0.554 0.473 0.564 0.535 0.587 0.534 0.594 0.495 0.616 0.567 0.633 0.530 0.651 0.570 0.665 0.544 0.683 0.566 0.698 0.521 0.704 0.402 0.709 0.000 0.727 0.001 0.738 0.865 0.742 0.951 0.747 0.997 0.750 0.971 0.763 0.000 0.783 0.000 0.786 0.342 0.794 0.832 0.800 0.611 0.805 0.764 0.811 0.705 0.815 0.863 0.819 0.822 0.829 0.0 0.834 0.0 0.840 0.630 0.850 0.185 0.861 0.000 0.865 0.000 0.872 0.113 0.881 0.211 0.899 0.260 0.907 0.441 0.913 0.340 0.917 0.424 0.919 0.317 0.921 0.444 0.930 0.198 0.935 0.174 0.949 0.136 0.953 0.109 0.964 0.122 0.973 0.110 0.982 0.140 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.379 0.016 0.432 0.034 0.438 0.214 0.395 0.219 0.428 0.230 0.446 0.247 0.444 0.339 0.407 0.346 0.444 0.356 0.452 0.365 0.436 0.369 0.415 0.375 0.434 0.380 0.411 0.411 0.420 0.419 0.450 0.429 0.464 0.447 0.460 0.464 0.466 0.496 0.473 0.571 0.483 0.691 0.485 0.701 0.468 0.710 0.409 0.728 0.314 0.734 0.464 0.740 0.511 0.746 0.521 0.756 0.485 0.764 0.420 0.786 0.428 0.789 0.481 0.798 0.550 0.808 0.552 0.818 0.489 0.823 0.46 0.825 0.481 0.829 0.809 0.835 0.792 0.839 0.546 0.842 0.487 0.848 0.442 0.855 0.397 0.870 0.409 0.877 0.442 0.898 0.442 0.913 0.468 0.921 0.519 0.927 0.580 0.938 0.650 0.948 0.697 0.954 0.684 0.958 0.705 0.967 0.680 0.983 0.666 0.991 0.593 1.000 0.452) :duration dur :scaler (hz->radians 7100.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .005 3 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (western-wood-pewee-1 0 .5)) (define-animal (western-wood-pewee-2 beg amp) (let ((dur 0.69)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.016 0.098 0.038 0.208 0.060 0.000 0.254 0.000 0.293 0.846 0.306 0.975 0.345 1.000 0.391 0.833 0.457 0.809 0.545 0.843 0.596 0.836 0.713 0.669 0.724 0.583 0.729 0.326 0.740 0.324 0.751 0.240 0.774 0.179 0.794 0.600 0.812 0.632 0.878 0.539 0.912 0.392 0.971 0.316 0.984 0.091 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.409 0.030 0.400 0.039 0.436 0.067 0.444 0.279 0.434 0.291 0.505 0.327 0.561 0.420 0.578 0.482 0.569 0.648 0.532 0.728 0.527 0.753 0.593 0.779 0.650 0.802 0.605 0.827 0.532 0.854 0.507 0.977 0.485 1.000 0.43) :duration dur :scaler (hz->radians 7300.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .005 3 .005))) (vib (make-oscil 152)) (index (hz->radians 500)) (vibf (make-env '(0 0 .29 0 .38 1 .7 .5 .75 0 1 0) :duration dur)) (trem (make-triangle-wave 76 .8))) (do ((i start (+ i 1))) ((= i stop)) (let ((vbf (env vibf))) (outa i (* (env ampf) (- 1.0 (* vbf (abs (triangle-wave trem)))) (polywave gen1 (+ (env frqf) (* vbf index (oscil vib))))))))))) ;; (with-sound (:play #t) (western-wood-pewee-2 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Cedar waxwing (define-animal (cedar-waxwing beg amp) ;; probably the simplest bird call ;; calif 10 10 (hard to find one call by itself) ;; a cleaner original is east 3 3 with a slightly sharper frq env (let ((dur 0.5)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.133 0.217 0.337 0.854 0.470 0.826 0.533 0.751 0.617 0.980 0.704 1.000 0.883 0.881 0.943 0.747 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.267 0.097 0.287 0.242 0.301 0.472 0.304 0.684 0.301 0.788 0.301 0.973 0.293 1.000 0.264) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .006 3 .004)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (cedar-waxwing 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Townsend's solitaire (define (townsends-solitaire beg1 amp1) ;; calif 67 33 (define-animal (townsends-solitaire-1 beg amp) (let ((dur 0.15)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.056 0.074 0.084 0.182 0.122 0.118 0.163 0.168 0.224 0.104 0.257 0.343 0.289 0.337 0.299 0.155 0.308 0.242 0.320 0.185 0.329 0.125 0.389 0.145 0.436 0.242 0.466 0.195 0.484 0.313 0.495 0.455 0.571 0.535 0.634 0.566 0.684 0.727 0.717 0.926 0.751 0.983 0.786 0.960 0.891 0.717 0.957 0.242 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.321 0.055 0.337 0.081 0.365 0.103 0.370 0.113 0.303 0.153 0.308 0.192 0.329 0.233 0.342 0.261 0.376 0.282 0.358 0.306 0.285 0.358 0.272 0.427 0.308 0.490 0.360 0.584 0.376 0.813 0.360 1.000 0.342) :duration dur :scaler (hz->radians 8100.0))) (gen1 (make-polywave 0.0 '(1 .995 2 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (townsends-solitaire-2 beg amp) (let ((dur 0.037)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.077 0.215 0.112 0.907 0.198 0.189 0.212 0.096 0.235 0.0 0.333 0.085 0.433 0.515 0.471 0.481 0.517 0.622 0.571 0.526 0.671 1.000 0.699 0.752 0.718 0.904 0.781 0.915 0.862 0.374 0.968 0.289 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.395 0.077 0.351 0.121 0.293 0.169 0.225 0.218 0.196 0.286 0.163 0.345 0.185 0.407 0.221 1.000 0.36) :duration dur :scaler (hz->radians 13800.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .005 4 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (townsends-solitaire-3 beg amp) (let ((dur 0.323)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.106 0.301 0.117 0.254 0.156 0.475 0.198 0.359 0.221 0.043 0.228 0.214 0.307 0.848 0.337 0.391 0.355 0.355 0.366 0.467 0.381 0.409 0.397 0.649 0.407 0.576 0.424 0.105 0.453 0.449 0.474 0.627 0.485 0.558 0.488 0.703 0.506 0.482 0.514 0.261 0.523 0.203 0.572 0.529 0.581 0.449 0.586 0.641 0.606 0.000 0.634 0.359 0.661 0.598 0.675 0.522 0.684 0.750 0.701 0.616 0.709 0.380 0.718 0.250 0.733 0.188 0.768 0.478 0.778 0.362 0.796 0.000 0.822 0.373 0.849 0.587 0.861 0.478 0.881 0.891 0.888 0.804 0.904 0.996 0.935 0.703 0.946 0.768 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.549 0.083 0.595 0.114 0.606 0.144 0.641 0.179 0.656 0.213 0.643 0.229 0.590 0.247 0.573 0.283 0.564 0.313 0.538 0.344 0.484 0.347 0.641 0.361 0.610 0.387 0.586 0.404 0.547 0.419 0.486 0.435 0.477 0.440 0.645 0.450 0.667 0.456 0.634 0.472 0.610 0.507 0.529 0.527 0.492 0.535 0.688 0.559 0.625 0.605 0.519 0.618 0.505 0.629 0.678 0.654 0.619 0.672 0.590 0.711 0.519 0.732 0.510 0.734 0.702 0.758 0.632 0.797 0.508 0.813 0.671 0.828 0.662 0.840 0.608 0.882 0.560 0.922 0.525 1.000 0.475) :duration dur :scaler (hz->radians 6000.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .004 3 .006)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (townsends-solitaire-4 beg amp) (let ((dur 0.217)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.065 0.296 0.096 0.261 0.145 0.368 0.179 0.580 0.196 0.375 0.227 0.560 0.272 0.000 0.314 0.000 0.380 0.451 0.416 0.325 0.433 0.183 0.456 0.351 0.483 0.303 0.509 0.410 0.528 0.255 0.627 0.089 0.640 0.000 0.660 0.196 0.699 0.307 0.711 0.706 0.722 0.719 0.740 0.481 0.755 0.455 0.763 0.362 0.775 0.453 0.793 0.059 0.796 0.214 0.807 0.000 0.810 0.124 0.828 0.187 0.856 0.240 0.867 0.205 0.883 0.253 0.902 0.882 0.909 1.000 0.955 0.438 0.963 0.603 0.969 0.497 0.982 0.153 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.486 0.036 0.486 0.128 0.538 0.134 0.473 0.166 0.481 0.183 0.512 0.200 0.534 0.219 0.484 0.227 0.425 0.244 0.386 0.287 0.366 0.307 0.499 0.328 0.527 0.341 0.508 0.424 0.429 0.507 0.410 0.599 0.364 0.617 0.381 0.628 0.414 0.659 0.427 0.685 0.460 0.707 0.475 0.729 0.514 0.759 0.551 0.774 0.521 0.779 0.449 0.797 0.386 0.833 0.414 0.873 0.451 0.905 0.492 0.941 0.547 0.959 0.545 0.970 0.423 1.000 0.322) :duration dur :scaler (hz->radians 6050.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .006 3 .004)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (townsends-solitaire-5 beg amp) (let ((dur 0.007)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0 0 1 1 3 0) :duration dur :scaler amp)) (frqf (make-env '(0 4600 1 3000) :duration dur :scaler (hz->radians 1.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (townsends-solitaire-3 beg1 (* amp1 .7)) (townsends-solitaire-1 (+ beg1 .37) amp1) (townsends-solitaire-1 (+ beg1 .59) amp1) (do ((call 0 (+ call 1))) ((= call 5)) (townsends-solitaire-2 (+ beg1 .85 (* call .059)) (* .3 amp1))) (townsends-solitaire-5 (+ beg1 1.139) (* amp1 .2)) (townsends-solitaire-4 (+ beg1 1.178) (* amp1 .6))) ;; (with-sound (:play #t) (townsends-solitaire 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Canada goose (define-animal (canada-goose-1 beg amp) ;; east 21 28 (let ((dur 0.375)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.446 0.182 0.489 0.778 0.521 0.465 0.610 0.356 0.682 0.553 0.741 1.000 0.785 0.513 0.811 0.350 0.878 0.270 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.362 0.321 0.378 0.422 0.398 0.445 0.418 0.461 0.388 0.485 0.428 0.606 0.434 0.624 0.421 0.643 0.444 0.662 0.405 0.670 0.451 0.685 0.378 0.691 0.428 0.700 0.378 0.708 0.434 0.748 0.457 0.819 0.467 0.870 0.464 0.910 0.414 1.000 0.382) :duration dur :scaler (hz->radians (* 0.5 3500)))) (gen1 (make-oscil)) (ampf1 (make-env '(0 1 .44 1 .455 .5 .46 1 .465 .5 .5 1 .67 1 .68 .1 .69 1 .71 1 .72 .1 .73 1 1 1) :duration dur :scaler .4)) (gen2 (make-oscil)) (gen3 (make-oscil)) (ampf3 (make-env '(0 .2 .4 .2 .5 1 .68 1 .7 .5 .9 .5 1 0) :duration dur :scaler .3)) (gen4 (make-polywave 0.0 '(4 .8 5 .2))) (ampf4 (make-env '(0 0 .4 .1 .5 1 .75 1 .9 0 1 0) :duration dur :scaler .05)) (gen5 (make-nrxysin :n 12 :r .8 :ratio 1/6)) (ampf5 (make-env '(0 0 .4 0 .5 1 .65 .1 .7 1 .9 0 1 0) :duration dur :scaler .2)) (trem (make-triangle-wave (* 0.5 170))) (tremf (make-env '(0 1 .45 1 .5 .3 .65 .2 .7 1 .75 .2 1 .2) :duration dur)) (tremf-1 (make-env '(0 1 .45 1 .5 .3 .65 .2 .7 1 .75 .2 1 .2) :duration dur :offset 1.0 :scaler -1.0)) (hum (make-oscil)) (humf (make-env '(0 .1 .1 1 .2 .1 .3 1 .4 1 .45 .1 .8 0 1 0) :duration dur :scaler .4)) (rnd (make-rand-interp 2000)) (rndf (make-env '(0 .1 .3 .2 .4 1 .45 1 .5 .1 .6 .01 .65 1 .7 .1 1 .25) :duration dur :scaler (hz->radians 200))) (gen6 (make-nrxysin :n 12 :r .8 :ratio 1/6)) (ampf6 (make-env '(0 0 .4 0 .45 1 .5 0 .65 0 .7 1 .75 0 1 0) :duration dur :scaler .2))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (* (env rndf) (rand-interp rnd))))) (outa i (* (env ampf) (+ (env tremf-1) (* (env tremf) (abs (triangle-wave trem)))) (+ (* (env ampf1) (oscil gen1 frq)) (* .5 (oscil gen2 (* 2.0 frq))) (* (env ampf3) (oscil gen3 (* 3.0 frq))) (+ (* (env ampf4) (polywave gen4 frq)) ; extra + to make the optimizer happy (* (env ampf5) (nrxysin gen5 (* 6.0 frq))) (* (env ampf6) (nrxysin gen6 (* 3.0 frq))) (* (env humf) (oscil hum (* .25 frq)))))))))))) (define-animal (canada-goose-2 beg amp) (let ((dur 0.245)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.027 0.057 0.054 0.000 0.072 0.076 0.080 0.000 0.098 0.078 0.106 0.005 0.121 0.087 0.133 0.000 0.147 0.101 0.157 0.005 0.174 0.119 0.183 0.005 0.200 0.119 0.208 0.002 0.225 0.128 0.236 0.000 0.249 0.112 0.259 0.000 0.270 0.098 0.283 0.000 0.299 0.105 0.308 0.000 0.322 0.133 0.329 0.066 0.345 0.151 0.352 0.085 0.361 0.201 0.375 0.114 0.383 0.217 0.397 0.124 0.406 0.195 0.414 0.085 0.442 0.373 0.620 1.000 0.640 0.686 0.705 0.469 0.757 0.352 0.818 0.300 0.846 0.405 0.942 0.133 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.276 0.164 0.300 0.307 0.308 0.599 0.297 0.651 0.302 0.661 0.354 0.755 0.357 0.827 0.342 0.855 0.310 1.000 0.283) :duration dur :scaler (hz->radians (* 0.5 4300)))) (gen1 (make-oscil)) (ampf1 (make-env '(0 1 .4 1 .55 1 .6 .7 1 1) :duration dur :scaler .5)) (gen2 (make-oscil)) (ampf2 (make-env '(0 .5 .55 .2 .6 1 .7 .2 1 1) :duration dur :scaler .5)) (gen3 (make-oscil)) (ampf3 (make-env '(0 .2 .6 .1 .65 1 .75 1 .9 0 1 0) :duration dur :scaler .3)) (gen4 (make-polywave 0.0 '(4 .8 5 .2))) (ampf4 (make-env '(0 0 .4 .1 .65 1 .75 1 .8 0 .85 1 .9 .5 1 .5) :duration dur :scaler .1)) (gen5 (make-nrxysin :n 12 :r .8 :ratio 1/6)) (ampf5 (make-env '(0 0 .5 0 .55 1 .6 0 .65 1 .7 1 .8 0 1 0) :duration dur :scaler .2)) (hum (make-oscil)) (humf (make-env '(0 1 .4 1 .42 .1 .6 0 1 0) :duration dur :scaler .4)) (rnd (make-rand-interp 2000)) (rndf (make-env '(0 .1 .3 .2 .65 1 .7 .1 1 .25) :duration dur :scaler (hz->radians 100))) (gen6 (make-nrxysin :n 12 :r .8 :ratio 1/6)) (ampf6 (make-env '(0 0 .65 0 .7 1 .75 0 1 0) :duration dur :scaler .3))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (* (env rndf) (rand-interp rnd))))) (outa i (* (env ampf) (+ (* (env ampf1) (oscil gen1 frq)) (* (env ampf2) (oscil gen2 (* 2.0 frq))) (* (env ampf3) (oscil gen3 (* 3.0 frq))) (+ (* (env ampf4) (polywave gen4 frq)) (* (env ampf5) (nrxysin gen5 (* 6.0 frq))) (* (env ampf6) (nrxysin gen6 (* 3.0 frq))) (* (env humf) (oscil hum (* .25 frq)))))))))))) (define-animal (canada-goose-3 beg amp) ;; east 21 29 (let ((dur 0.33)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.082 0.112 0.207 0.158 0.218 0.089 0.246 0.214 0.278 0.181 .32 .3 0.364 0.944 0.374 1.000 0.384 0.974 0.394 0.757 0.431 0.645 0.584 0.201 0.639 0.688 0.657 0.717 0.714 0.477 0.800 0.319 0.882 0.253 0.902 0.164 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.291 0.311 0.299 0.338 0.299 0.358 0.414 0.395 0.443 0.454 0.455 0.547 0.418 0.596 0.389 0.614 0.414 0.634 0.393 0.682 0.418 0.764 0.426 0.846 0.410 0.874 0.369 0.907 0.352 1.000 0.307) :duration dur :scaler (hz->radians (* 0.5 3600)))) (gen1 (make-oscil)) (ampf1 (make-env '(0 .1 .5 .2 .6 1 .65 .3 1 1) :duration dur :scaler .3)) (gen2 (make-oscil)) (gen3 (make-oscil)) (ampf3 (make-env '(0 .1 .3 .2 .4 1 1 1) :duration dur :scaler .1)) (gen4 (make-polywave 0.0 '(4 .8 5 .2))) (ampf4 (make-env '(0 0 .3 0 .4 1 .9 1 1 0) :duration dur :scaler .05)) (gen5 (make-nrxysin :n 12 :r .7 :ratio 1/6)) (ampf5 (make-env '(0 0 .3 0 .4 1 .5 .1 .55 0 .6 .1 .63 1 .85 0 1 0) :duration dur :scaler .3)) (trem (make-triangle-wave (* 0.5 170))) (tremf (make-env '(0 1 .3 1 .35 .1 .6 .2 .65 1 .7 .2 1 .2) :duration dur)) (tremf-1 (make-env '(0 1 .3 1 .35 .1 .6 .2 .65 1 .7 .2 1 .2) :duration dur :offset 1.0 :scaler -1.0)) (hum (make-oscil)) (humf (make-env '(0 .5 .45 .4 .5 1 .6 .5 .7 0 1 0) :duration dur :scaler .2)) (humfrq (make-env '(0 150 .6 190 1 200) :duration dur :scaler (hz->radians 1.0))) (tri1 (make-triangle-wave 75 .75)) (rnd (make-rand-interp 2000)) (rndf (make-env '(0 .1 .3 1 .35 .1 .4 .01 .55 .01 .6 1 .65 .01 1 .01) :duration dur :scaler (hz->radians 200)))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (* (env rndf) (rand-interp rnd))))) (outa i (* (env ampf) (+ (env tremf-1) (* (env tremf) (abs (triangle-wave trem)))) (+ (* (env ampf1) (oscil gen1 frq)) (* .5 (oscil gen2 (* 2.0 frq))) (* (env ampf3) (oscil gen3 (* 3.0 frq))) (+ (* (env ampf4) (polywave gen4 frq)) (* (env ampf5) (nrxysin gen5 (* 6.0 frq))) (* (env humf) (+ .25 (abs (triangle-wave tri1))) (oscil hum (env humfrq)))))))))))) (define (canada-goose beg1 amp1) (canada-goose-1 beg1 amp1) (canada-goose-2 (+ beg1 .54) amp1) (canada-goose-3 (+ beg1 .97) amp1)) ;; (with-sound (:play #t) (canada-goose 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Pine warbler (define-animal (pine-warbler beg amp) ;; east 21 3 (let ((call-ampf (make-env '(0 .05 1 .2 3 .8 5 1 10 1 16 .4) :length 16)) (call-frqf (make-env '(0 1.1 4 1.0 13 .98 15 1.0) :length 16))) (do ((call 0 (+ call 1))) ((= call 16)) (let ((start (seconds->samples (+ beg (* call .115) (random .01)))) (dur (+ .105 (random .01)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.147 0.356 0.216 0.403 0.257 0.135 0.310 0.000 0.347 0.000 0.447 0.468 0.474 0.694 0.489 0.656 0.500 0.729 0.514 0.632 0.529 0.815 0.562 0.644 0.578 0.809 0.590 0.626 0.602 0.982 0.621 0.765 0.629 0.950 0.639 0.829 0.648 0.982 0.662 0.818 0.669 0.644 0.675 0.824 0.685 0.932 0.699 0.579 0.706 0.353 0.723 0.800 0.737 1.000 0.753 0.959 0.765 0.529 0.773 0.638 0.781 0.971 0.790 0.941 0.798 0.547 0.803 0.591 0.808 0.806 0.822 0.832 0.833 0.124 0.839 0.415 0.874 0.132 0.887 0.206 0.923 0.062 0.933 0.174 0.939 0.091 0.948 0.159 0.960 0.079 0.967 0.176 0.981 0.062 1.000 0.000) :duration dur :scaler (* amp (env call-ampf)))) (frqf (make-env '(0.000 0.118 0.056 0.132 0.133 0.146 0.190 0.148 0.233 0.134 0.261 0.132 0.288 0.137 0.311 0.154 0.332 0.176 0.365 0.151 0.415 0.151 0.477 0.164 0.526 0.171 0.636 0.199 0.730 0.204 0.855 0.221 0.962 0.218 1.000 0.199) :duration dur :scaler (hz->radians (* 22000.0 (env call-frqf))))) (gen1 (make-polywave 0.0 '(1 .97))) (gen2 (make-polywave 0.0 '(2 .005 3 .03 4 .003))) (ampf2 (make-env '(0 0 .3 0 .4 1 1 1) :duration dur))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (polywave gen1 frq) (* (env ampf2) (polywave gen2 frq)))))))))))) ;; (with-sound (:play #t) (pine-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Black-throated sparrow (define (black-throated-sparrow beg1 amp1) ;; south 85 2 (define-animal (black-throated-sparrow-1 beg amp) (let ((dur .034)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.057 0.806 0.073 0.857 0.111 0.783 0.139 0.988 0.216 0.817 0.235 0.574 0.324 0.333 0.473 0.216 0.725 0.679 0.805 0.649 0.887 0.484 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.301 0.059 0.288 0.090 0.281 0.123 0.286 0.149 0.299 0.189 0.303 0.250 0.299 0.341 0.292 0.568 0.296 0.746 0.299 1.000 0.296) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .007 3 .003)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (black-throated-sparrow-2 beg amp) (let ((dur .11)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.026 0.514 0.080 0.667 0.120 0.618 0.183 0.000 0.223 0.000 0.260 0.913 0.281 0.977 0.311 0.895 0.343 0.631 0.399 0.000 0.444 0.000 0.504 0.130 0.514 0.070 0.533 0.173 0.567 0.128 0.576 0.217 0.587 0.202 0.596 0.117 0.613 0.171 0.640 0.104 0.654 0.166 0.677 0.087 0.729 0.000 0.820 0.000 0.844 0.940 0.865 1.000 0.909 0.927 0.968 0.499 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.176 0.167 0.176 0.196 0.158 0.246 0.160 0.272 0.174 0.407 0.169 0.487 0.093 0.504 0.117 0.518 0.093 0.543 0.117 0.562 0.093 0.579 0.117 0.599 0.093 0.615 0.113 0.635 0.090 0.656 0.115 0.671 0.088 0.689 0.111 0.705 0.088 0.809 0.172 0.835 0.176 1.000 0.176) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .007 3 .003)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define-animal (black-throated-sparrow-3 beg amp) (let ((dur .153)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.099 0.442 0.124 0.456 0.146 0.372 0.164 0.203 0.243 0.061 0.257 0.352 0.294 0.433 0.371 0.221 0.380 0.000 0.525 0.000 0.552 0.138 0.559 0.068 0.579 0.314 0.595 0.074 0.621 0.643 0.636 0.738 0.649 0.542 0.660 0.147 0.670 0.853 0.681 0.986 0.690 0.941 0.717 0.149 0.728 0.862 0.743 0.995 0.751 0.950 0.777 0.149 0.790 0.853 0.799 0.901 0.805 0.840 0.825 0.056 0.835 0.609 0.851 0.822 0.858 0.795 0.873 0.061 0.885 0.738 0.894 0.813 0.903 0.745 0.919 0.097 0.925 0.438 0.945 0.591 0.957 0.149 0.971 0.289 0.985 0.065 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.192 0.090 0.195 0.119 0.197 0.156 0.211 0.163 0.142 0.242 0.128 0.254 0.211 0.276 0.178 0.326 0.169 0.355 0.169 0.379 0.181 0.542 0.238 0.563 0.247 0.586 0.240 0.618 0.245 0.640 0.238 0.664 0.247 0.690 0.240 0.721 0.240 0.748 0.233 0.782 0.243 0.809 0.238 0.832 0.243 0.858 0.233 0.880 0.245 0.903 0.233 0.923 0.245 0.944 0.238 1.000 0.240) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .007 3 .003)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (black-throated-sparrow-3 beg1 (* .4 amp1)) (let ((ampf (make-env '(0 .4 5 1.0 7 .9) :length 7))) (do ((call 0 (+ call 1))) ((= call 7)) (black-throated-sparrow-1 (+ beg1 .2 (* call .042) (random .003)) (* amp1 (env ampf))))) (do ((call 0 (+ call 1))) ((= call 3)) (black-throated-sparrow-2 (+ beg1 .53 (* call .134)) (* 0.6 amp1)))) ;; (with-sound (:play #t) (black-throated-sparrow 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Cape May warbler (define-animal (cape-may-warbler beg amp) ;; east 14 2 ;; note #1 (let ((dur 0.234)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.115 0.517 0.170 0.326 0.214 0.400 0.272 0.397 0.298 0.289 0.486 0.674 0.529 0.564 0.537 0.744 0.554 0.605 0.570 0.871 0.617 0.637 0.646 0.986 0.664 0.857 0.675 1.000 0.697 0.279 0.713 0.626 0.756 0.522 0.772 0.342 0.792 0.600 0.813 0.319 0.825 0.667 0.856 0.330 0.864 0.642 0.890 0.568 0.899 0.242 0.920 0.573 0.983 0.323 1.000 0.000) :duration dur :scaler (* .2 amp))) (frqf (make-env '(0.000 0.357 0.070 0.364 0.119 0.362 0.246 0.378 0.318 0.380 0.397 0.387 0.538 0.398 0.628 0.416 0.733 0.430 0.811 0.437 0.852 0.443 0.912 0.441 1.000 0.441) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-oscil))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (env frqf))))))) ;; next 4 notes (let ((begs (vector 0.31 0.61 0.86 1.11)) (durs (vector 0.23 0.19 0.18 0.18)) (amps (vector 0.6 0.95 1.0 0.8)) (ampenv '(0.000 0.000 0.081 0.593 0.118 0.676 0.139 0.952 0.174 1.000 0.198 0.762 0.255 0.701 0.276 0.824 0.316 0.572 0.372 0.794 0.411 0.572 0.506 0.663 0.550 0.514 0.582 0.622 0.633 0.337 0.653 0.520 0.685 0.536 0.700 0.389 0.780 0.462 0.796 0.267 0.804 0.380 0.814 0.231 0.832 0.330 0.895 0.310 0.942 0.238 1.000 0.000)) (frqenv '(0.000 0.326 0.102 0.344 0.182 0.351 0.269 0.360 0.352 0.373 0.503 0.382 0.614 0.394 0.730 0.410 0.833 0.423 1.000 0.434)) (gen1 (make-oscil))) (do ((call 0 (+ call 1))) ((= call 4)) (let ((start (seconds->samples (+ beg (begs call)))) (dur (durs call))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env ampenv :duration dur :scaler (* amp (amps call)))) (frqf (make-env frqenv :duration dur :scaler (hz->radians 22000)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (oscil gen1 (env frqf)))))))))) ;; (with-sound (:play #t) (cape-may-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Kirtland's warbler (define (kirtlands-warbler beg1 amp1) ;; east 22 3 (define-animal (kirtlands-warbler-1 beg dur frqscl frqenv ampscl ampenv) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env ampenv :duration dur :scaler ampscl)) (frqf (make-env frqenv :duration dur :scaler (hz->radians frqscl))) (gen1 (make-polywave 0.0 (normalize-partials '(1 1.0 2 .08 3 .1 4 .03 5 .05))))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) (let ((begs (vector 0.0 0.25 0.47 0.65 0.79 0.99 1.17 1.33)) (durs (vector 0.05 0.05 0.06 0.07 0.14 0.14 0.12 0.11)) (amps (vector 0.04 0.6 0.8 0.80 1.0 0.94 0.92 0.75)) (frqs (vector 6020 6020 13370 13360 13360 13360 13360 13360)) (ampenvs (vector '(0.000 0.000 0.063 0.289 0.098 0.838 0.139 0.960 0.217 0.213 0.389 0.115 0.484 0.775 0.524 0.530 0.546 0.842 0.587 0.375 0.630 0.909 0.739 0.613 0.764 0.320 0.829 0.443 0.910 0.356 0.929 0.162 1.000 0.000) '(0.000 0.000 0.049 0.166 0.083 0.204 0.111 0.348 0.149 0.271 0.190 0.665 0.238 0.671 0.303 0.477 0.390 0.032 0.570 0.026 0.614 0.277 0.643 0.591 0.664 0.527 0.695 0.785 0.732 0.492 0.767 0.856 0.809 0.933 0.853 0.576 0.907 0.346 0.960 0.140 1.000 0.000) '(0.000 0.000 0.097 0.340 0.127 0.181 0.157 0.578 0.185 0.426 0.234 0.718 0.267 0.624 0.300 0.613 0.416 0.041 0.506 0.034 0.554 0.232 0.575 0.561 0.609 0.318 0.651 0.865 0.696 0.884 0.763 0.763 0.821 0.533 0.862 0.340 0.919 0.148 1.000 0.000) '(0.000 0.000 0.077 0.052 0.138 0.196 0.159 0.368 0.178 0.067 0.210 0.589 0.224 0.256 0.251 0.658 0.286 0.529 0.324 0.751 0.345 0.578 0.374 0.477 0.453 0.043 0.524 0.043 0.595 0.413 0.609 0.258 0.635 0.333 0.654 0.667 0.685 0.852 0.703 0.871 0.725 0.789 0.748 0.837 0.813 0.602 0.845 0.329 0.904 0.110 1.000 0.000) '(0.000 0.000 0.063 0.075 0.109 0.275 0.125 0.262 0.135 0.146 0.166 0.523 0.184 0.503 0.194 0.157 0.203 0.477 0.231 0.725 0.263 0.804 0.282 0.613 0.350 0.561 0.387 0.295 0.442 0.060 0.489 0.054 0.545 0.303 0.562 0.140 0.632 0.583 0.669 0.594 0.705 0.923 0.813 0.540 0.857 0.118 0.921 0.039 1.000 0.000) '(0.000 0.000 0.085 0.308 0.096 0.153 0.143 0.477 0.154 0.239 0.161 0.443 0.196 0.755 0.264 0.903 0.282 0.804 0.315 0.796 0.357 0.325 0.407 0.047 0.469 0.049 0.519 0.310 0.543 0.159 0.552 0.480 0.657 0.908 0.769 0.570 0.828 0.142 0.882 0.071 1.000 0.000) '(0.000 0.000 0.315 0.112 0.450 0.310 0.710 0.963 0.805 0.862 0.913 0.460 0.952 0.099 1.000 0.000) '(0.000 0.000 0.264 0.138 0.326 0.135 0.510 0.688 0.621 0.766 0.656 0.768 0.697 0.923 0.717 0.809 0.743 0.892 0.824 0.871 0.877 0.725 1.000 0.000))) (frqenvs (vector '(0.000 0.314 0.074 0.394 0.101 0.462 0.127 0.486 0.157 0.458 0.178 0.372 0.243 0.310 0.348 0.299 0.425 0.323 0.463 0.413 0.496 0.505 0.522 0.533 0.552 0.492 0.567 0.415 0.597 0.389 0.633 0.426 0.654 0.486 0.686 0.495 0.732 0.389 0.820 0.344 1.000 0.314) '(0.000 0.394 0.044 0.458 0.059 0.578 0.085 0.606 0.113 0.542 0.125 0.475 0.150 0.462 0.182 0.518 0.210 0.551 0.238 0.516 0.266 0.465 0.305 0.411 0.356 0.381 0.428 0.323 0.508 0.312 0.588 0.348 0.628 0.426 0.646 0.499 0.669 0.525 0.695 0.510 0.713 0.469 0.736 0.454 0.761 0.480 0.793 0.512 0.824 0.480 0.863 0.415 0.934 0.387 1.000 0.340) '(0.000 0.204 0.027 0.258 0.053 0.267 0.077 0.224 0.096 0.196 0.119 0.222 0.136 0.252 0.160 0.265 0.183 0.247 0.211 0.224 0.250 0.200 0.304 0.191 0.387 0.157 0.441 0.146 0.494 0.168 0.528 0.178 0.548 0.206 0.564 0.243 0.584 0.265 0.609 0.245 0.646 0.217 0.695 0.228 0.744 0.204 0.771 0.194 0.799 0.194 0.879 0.163 1.000 0.144) '(0.000 0.202 0.138 0.204 0.162 0.273 0.186 0.314 0.201 0.273 0.211 0.237 0.229 0.224 0.252 0.239 0.275 0.260 0.303 0.239 0.332 0.209 0.392 0.185 0.434 0.161 0.490 0.144 0.547 0.170 0.588 0.198 0.600 0.239 0.624 0.265 0.650 0.241 0.677 0.228 0.716 0.245 0.752 0.219 0.801 0.198 1.000 0.140) '(0.000 0.161 0.050 0.163 0.075 0.237 0.095 0.363 0.119 0.398 0.160 0.396 0.190 0.391 0.207 0.363 0.240 0.323 0.263 0.303 0.292 0.258 0.320 0.241 0.376 0.228 0.430 0.224 0.466 0.247 0.481 0.327 0.498 0.381 0.530 0.398 0.570 0.385 0.599 0.359 0.659 0.329 0.701 0.286 0.765 0.219 0.822 0.191 0.857 0.168 0.899 0.151 1.000 0.135) '(0.000 0.245 0.021 0.353 0.047 0.402 0.087 0.406 0.122 0.381 0.147 0.353 0.180 0.329 0.222 0.267 0.263 0.247 0.360 0.228 0.382 0.243 0.404 0.226 0.422 0.222 0.438 0.241 0.463 0.314 0.488 0.376 0.521 0.387 0.553 0.381 0.570 0.361 0.599 0.353 0.622 0.329 0.656 0.312 0.689 0.286 0.769 0.213 0.813 0.194 0.857 0.170 1.000 0.142) '(0.000 0.110 0.160 0.138 0.284 0.159 0.389 0.172 0.504 0.196 0.555 0.215 0.628 0.239 0.693 0.256 0.744 0.277 0.796 0.286 0.828 0.308 0.867 0.299 0.894 0.305 0.922 0.297 1.000 0.267) '(0.000 0.123 0.079 0.148 0.131 0.153 0.274 0.168 0.340 0.170 0.432 0.194 0.494 0.200 0.520 0.215 0.595 0.219 0.628 0.241 0.675 0.245 0.752 0.273 0.864 0.310 0.898 0.297 0.930 0.292 0.964 0.269 1.000 0.247)))) (do ((call 0 (+ call 1))) ((= call 8)) (kirtlands-warbler-1 (+ beg1 (begs call)) (durs call) (frqs call) (frqenvs call) (* amp1 (amps call)) (ampenvs call))))) ;; (with-sound (:play #t) (kirtlands-warbler 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Wood duck ;;; ;;; reverb in original makes this hard to match (define-animal (wood-duck beg amp) ;; east 22 19 (let ((dur 0.75)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.022 0.070 0.027 0.433 0.041 0.441 0.047 0.256 .06 .1 0.088 0.888 0.1 0 0.115 0.692 0.120 0.266 0.132 0.379 0.149 0.277 0.166 0.360 0.174 0.269 0.203 0.386 0.219 0.295 0.269 0.413 0.316 0.287 0.338 0.428 0.354 0.292 0.369 0.397 0.424 0.290 0.476 0.368 0.52 .01 0.53 0.029 0.58 0.916 0.634 0.875 0.657 0.781 0.682 1.000 0.718 0.961 0.734 0.705 0.761 0.864 0.785 0.841 0.830 0.606 0.85 0.454 0.87 0.0 .88 0.0 0.919 0.292 0.966 0.240 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.110 0.029 0.174 0.048 0.232 0.075 0.256 0.096 0.238 0.120 0.191 0.199 0.168 0.272 0.168 0.369 0.186 0.522 0.226 0.528 0.368 0.539 0.345 0.714 0.339 0.847 0.328 0.879 0.325 0.885 0.200 0.956 0.157 1.000 0.122) :duration dur :scaler (hz->radians 4890.0))) (gen1 (make-oscil)) (ampf1 (make-env '(0 .2 .45 .15 .5 .25 .53 1 .85 1 .88 .4 1 .1) :duration dur :scaler .8)) (gen2 (make-oscil)) (ampf2 (make-env '(0 1 .1 1 .15 .75 .4 .75 .5 .1 .6 .75 .8 .75 .85 .1 .88 .5 .95 .5 1 .2) :duration dur :scaler .6)) (gen3 (make-oscil)) (ampf3 (make-env '(0 1 .2 .3 .4 .1 .5 1 .52 1 .7 1 .75 .3 1 .1) :duration dur :scaler .1)) (gen4 (make-oscil)) (gen5 (make-oscil)) (ampf4 (make-env '(0 .2 .4 .05 .5 .2 .55 0 1 0) :duration dur :scaler .1)) (rnd (make-rand-interp 400 (hz->radians 40))) (rndf (make-env '(0 0 .05 4 .1 .5 .9 .1 1 1) :duration dur)) (rnd1 (make-rand-interp 500 .1)) (att (make-polywave 0.0 '(3 .3 5 .5 7 .1 9 .1))) (attf (make-env '(0 0 .05 1 .1 0 1 0) :duration dur :scaler .125))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (* (env rndf) (rand-interp rnd))))) (outa i (* (env ampf) (+ .9 (abs (rand-interp rnd1))) (+ (* (env attf) (polywave att (* 0.5 frq))) (* (env ampf1) (oscil gen1 frq)) (+ (* (env ampf2) (oscil gen2 (* 2.0 frq))) (* (env ampf3) (oscil gen3 (* 3.0 frq))) (* (env ampf4) (+ (oscil gen4 (* 4.0 frq)) (oscil gen5 (* 5.0 frq))))))))))))) ;; (with-sound (:play #t) (wood-duck 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; White-eyed vireo (define-animal (white-eyed-vireo beg amp) ;; south 41 2 ;; note #1 (let ((dur 0.1)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.067 0.143 0.150 0.431 0.174 0.392 0.215 0.866 0.243 1.000 0.265 1.000 0.309 0.589 0.322 0.742 0.347 1.000 0.371 0.487 0.415 0.617 0.496 0.457 0.546 0.604 0.644 0.686 0.677 0.593 0.703 0.721 0.741 0.745 0.757 0.693 0.772 0.500 0.828 0.615 0.838 0.766 0.875 0.965 0.897 0.905 0.912 0.461 0.932 0.868 0.952 0.855 1.000 0.000) :duration dur :scaler (* .5 amp))) (frqf (make-env '(0.000 0.109 0.076 0.131 0.112 0.144 0.155 0.156 0.235 0.193 0.259 0.198 0.287 0.215 0.352 0.232 0.382 0.257 0.462 0.270 0.599 0.273 0.748 0.272 0.776 0.262 0.798 0.260 0.897 0.227 0.927 0.211 0.960 0.195 1.000 0.191) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-polywave 0.0 '(1 .99 2 .01 3 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) ;; note #2 (let ((dur 0.046) (start (seconds->samples (+ beg 0.23)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.052 0.258 0.111 0.138 0.273 0.508 0.356 0.992 0.419 0.569 0.493 0.547 0.584 0.374 0.668 0.629 0.703 0.659 0.732 0.884 0.813 0.077 0.857 0.190 0.913 0.087 1.000 0.000) :duration dur :scaler (* .6 amp))) (frqf (make-env '(0.000 0.203 0.071 0.200 0.111 0.203 0.134 0.227 0.200 0.238 0.249 0.255 0.329 0.263 0.469 0.265 0.627 0.245 0.728 0.233 0.891 0.146 0.948 0.131 1.000 0.144) :duration dur :scaler (hz->radians (* 1/3 22000.0)))) (gen1 (make-polywave 0.0 (normalize-partials '( 2 1 3 .05 4 .02 5 .005 6 .01 7 .005)))) (gen2 (make-oscil)) (ampf2 (make-env '(0 .5 .4 1 .7 1 .8 0 1 0) :duration dur :scaler .05)) (gen3 (make-oscil)) (ampf3 (make-env '(0 1 .1 0 1 0) :duration dur :scaler .1))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (env frqf))) (outa i (* (env ampf) (+ (* (env ampf2) (oscil gen2 frq)) (* (env ampf3) (oscil gen3 (* 3.0 frq))) (polywave gen1 frq)))))))) ;; note #3 (let ((dur 0.078) (start (seconds->samples (+ beg 0.33)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.054 0.208 0.443 0.794 0.762 0.943 0.848 0.901 0.922 0.586 0.967 0.104 1.000 0.000) :duration dur :scaler (* 0.3 amp))) (frqf (make-env '(0.000 0.111 0.853 0.135 1.000 0.114) :duration dur :scaler (hz->radians 22000.0))) (gen1 (make-polywave 0.0 '(1 .95 2 .01 3 .03 4 .01 5 .005 ))) (vib (make-oscil 370)) (vib-index (hz->radians 300)) (rnd (make-rand-interp 4000 (hz->radians 200)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (* vib-index (oscil vib)) (rand-interp rnd)))))))) ;; note #4 (let ((dur 0.2) (start (seconds->samples (+ beg 0.426)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.023 0.147 0.041 0.537 0.063 0.716 0.077 0.179 0.092 0.812 0.121 0.710 0.128 0.625 0.163 0.959 0.251 0.161 0.338 0.504 0.355 0.551 0.366 0.689 0.383 0.507 0.393 0.845 0.406 0.806 0.410 0.601 0.421 0.815 0.444 0.856 0.456 0.575 0.500 0.742 0.510 0.619 0.515 0.408 0.524 0.754 0.537 0.563 0.546 0.331 0.551 0.683 0.564 0.625 0.572 0.493 0.580 0.704 0.593 0.639 0.597 0.396 0.604 0.721 0.621 0.551 0.624 0.413 0.630 0.660 0.647 0.557 0.650 0.416 0.660 0.707 0.678 0.472 0.685 0.686 0.703 0.496 0.716 0.733 0.732 0.575 0.740 0.739 0.750 0.648 0.765 0.762 0.771 0.727 0.777 0.636 0.792 0.809 0.806 0.648 0.830 0.845 0.841 0.745 0.875 0.982 0.906 1.000 0.931 0.944 0.970 0.645 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.197 0.042 0.463 0.047 0.513 0.060 0.492 0.067 0.553 0.076 0.624 0.086 0.592 0.100 0.513 0.135 0.453 0.186 0.411 0.224 0.395 0.250 0.403 0.281 0.368 0.357 0.366 0.370 0.397 0.384 0.376 0.396 0.426 0.412 0.400 0.426 0.445 0.440 0.421 0.449 0.476 0.463 0.437 0.478 0.497 0.490 0.453 0.503 0.503 0.515 0.447 0.531 0.503 0.545 0.461 0.557 0.511 0.569 0.463 0.580 0.516 0.595 0.455 0.608 0.505 0.625 0.455 0.638 0.505 0.649 0.455 0.665 0.495 0.679 0.455 0.693 0.500 0.707 0.447 0.721 0.487 0.735 0.455 0.750 0.479 0.766 0.453 0.778 0.479 0.793 0.439 0.808 0.461 0.821 0.437 0.837 0.458 0.861 0.437 1.000 0.408) :duration dur :scaler (hz->radians 7800.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .01 4 .005 5 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) ;; note #5 (let ((dur 0.14) (start (seconds->samples (+ beg 0.65)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.033 0.216 0.110 0.247 0.218 0.800 0.263 0.734 0.301 0.889 0.370 0.966 0.470 0.905 0.494 0.658 0.531 0.666 0.727 0.508 1.000 0.000) :duration dur :scaler (* .3 amp))) (frqf (make-env '(0.124 0.214 0.222 0.265 0.311 0.310 0.400 0.317 0.501 0.307 0.651 0.283 0.752 0.262 1.000 0.198) :duration dur :scaler (hz->radians 8100.0))) (gen1 (make-polywave 0.0 (normalize-partials '(1 1.5 2 .01 3 .01 4 .07 5 .04 6 .05 8 .005)))) (rnd (make-rand-interp 3000)) (rndf (make-env '(0 1 .2 0 .7 0 .8 1 1 1) :duration dur :scaler (hz->radians 200)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (+ (env frqf) (* (env rndf) (rand-interp rnd)))))))))) ;; (with-sound (:play #t) (white-eyed-vireo 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Willet (define-animal (willet beg amp) ;; calif2 36 2 ;; note #1 (let ((dur 0.037)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.017 0.603 0.397 0.986 0.531 0.915 0.750 0.255 0.836 0.383 0.913 0.420 1.000 0.000) :duration dur :scaler (* .25 amp))) (frqf (make-env '(0.000 0.172 0.152 0.172 0.401 0.188 0.667 0.201 0.808 0.205 0.951 0.227 1.000 0.234) :duration dur :scaler (hz->radians (* 1/3 13000.0)))) (gen1 (make-polywave 0.0 (normalize-partials '(1 .03 2 .1 3 1 4 .6 5 .5 6 .4 7 .1 8 .04 9 .01 10 .01 11 .005))))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf))))))) ;; note #2 (let ((dur 0.029) (start (seconds->samples (+ beg 0.054)))) (let ((stop (+ start (seconds->samples dur))) (ampf (make-env '(0.000 0.000 0.063 0.263 0.086 0.656 0.113 0.877 0.429 0.753 0.681 0.578 0.830 0.224 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.178 0.849 0.156 1.000 0.156) :duration dur :scaler (hz->radians (* 1/2 14900.0)))) (gen1 (make-polywave 0.0 (normalize-partials '(1 .07 2 1 3 .8 4 .47 5 .14 6 .04 7 .03 8 .01))))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (willet 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Philadelphia vireo (define-animal (philadelphia-vireo beg amp) ;; east 58 3 (let ((dur 0.364)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.051 0.03 0.078 0.168 0.100 0.358 0.120 0.179 0.146 0.059 0.166 0.551 0.175 0.363 0.188 0.486 0.197 0.441 0.212 0.559 0.226 1.000 0.311 0.105 0.317 0.227 0.348 0.152 0.380 0.142 0.408 0.067 0.469 0.000 0.615 0.000 0.637 0.094 0.702 0.138 0.731 0.055 0.784 0.028 0.835 0.168 0.899 0.429 0.928 0.323 0.942 0.220 0.953 0.309 0.957 0.050 0.968 0.264 0.984 0.032 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.912 0.033 0.904 0.060 0.664 0.092 0.555 0.110 0.499 0.148 0.403 0.167 0.480 0.178 0.567 0.198 0.593 0.221 0.563 0.236 0.510 0.254 0.465 0.283 0.430 0.331 0.373 0.385 0.338 0.444 0.296 0.509 0.306 0.635 0.396 0.653 0.443 0.667 0.456 0.683 0.437 0.719 0.351 0.745 0.296 0.765 0.281 0.802 0.298 0.835 0.358 0.868 0.452 0.904 0.507 0.955 0.505 0.966 0.488 0.971 0.520 0.980 0.493 1.000 0.510) :duration dur :scaler (hz->radians 7400.0))) (gen1 (make-polywave 0.0 '(1 .98 2 .015 3 .005)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (philadelphia-vireo 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Black-crowned night heron (define-animal (black-crowned-night-heron beg amp) ;; east 15 6 (let ((dur 0.145)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.045 0.233 0.289 0.674 0.508 0.865 0.762 1.000 0.847 0.900 0.929 0.368 0.958 0.100 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.119 0.219 0.149 0.385 0.168 0.501 0.182 0.555 0.201 0.708 0.190 1.000 0.168) :duration dur :scaler (hz->radians (* 1/2 7150.0)))) (gen1 (make-oscil)) (gens (make-nrxycos 0.0 1/6 15 .9)) (gens0 (make-polywave 0.0 (nrcos->polywave 6 .5 .2))) (rf (make-env '(0 .5 .4 .9 .7 .8 1 .5) :duration dur)) (rnd (make-rand-interp 1000 (hz->radians 50))) (vib (make-triangle-wave 500 (hz->radians 30))) (rnd1 (make-rand-interp 1000 .5))) (do ((i start (+ i 1))) ((= i stop)) (let ((frq (+ (env frqf) (triangle-wave vib) (rand-interp rnd)))) (set! (mus-scaler gens) (env rf)) ;scaler=r (outa i (* (env ampf) (+ .5 (abs (rand-interp rnd1))) (+ (oscil gen1 (* 2.0 frq)) (polywave gens0 frq) (nrxycos gens (* 6.0 frq)))))))))) ;; (with-sound (:play #t) (black-crowned-night-heron 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Scrub Euphonia (define-animal (scrub-euphonia beg amp) ;; arizona 90 3.0 (let ((dur 0.49)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.067 0.188 0.111 0.676 0.151 0.838 0.239 0.988 0.275 0.000 0.346 0.000 0.386 0.243 0.399 0.615 0.427 0.719 0.445 0.587 0.464 0.664 0.521 0.630 0.533 0.571 0.567 0.868 0.580 0.877 0.611 0.176 0.628 0.138 0.637 0.000 0.671 0.000 0.676 0.168 0.690 0.204 0.725 0.694 0.742 0.725 0.821 0.464 0.904 0.696 0.939 0.109 1.000 0.000) :duration dur :scaler amp)) (gen1 (make-polywave 0.0 '(1 .99 2 .01))) (frqf (make-env '(0.000 0.819 0.024 0.761 0.063 0.686 0.101 0.642 0.171 0.586 0.229 0.556 0.271 0.558 0.342 0.556 0.347 0.883 0.361 0.900 0.367 0.719 0.390 0.656 0.436 0.589 0.480 0.564 0.529 0.547 0.555 0.525 0.605 0.519 0.640 0.528 0.660 0.869 0.673 0.869 0.683 0.681 0.717 0.625 0.763 0.561 0.791 0.564 0.817 0.544 0.857 0.533 0.894 0.522 0.924 0.531 1.000 0.531) :duration dur :scaler (hz->radians 7160)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (scrub-euphonia 0 .25)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Greater pewee (define-animal (greater-pewee beg1 amp) ;; arizona 52 2 (define (greater-pewee-first-and-last beg) (let ((dur 0.4)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.011 0.083 0.220 0.268 0.374 0.325 0.463 0.337 0.542 0.289 0.599 0.000 0.668 0.000 0.683 0.554 0.701 0.501 0.735 1.000 0.775 0.039 0.829 0.806 0.852 0.862 0.877 0.979 0.888 0.912 0.900 0.968 0.912 0.822 0.928 0.866 0.939 0.762 0.950 0.783 0.970 0.637 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.102 0.018 0.114 0.138 0.124 0.251 0.124 0.438 0.124 0.511 0.124 0.589 0.119 0.649 0.124 0.663 0.169 0.672 0.150 0.704 0.124 0.750 0.135 0.777 0.124 0.795 0.121 0.969 0.147 1.000 0.162) :duration dur :scaler (hz->radians 22500))) ; not a typo... (gen1 (make-polywave 0.0 '(1 .96 2 .02 3 .02)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (define (greater-pewee-midsection beg) (let ((dur 1.65)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.023 0.155 0.085 0.349 0.196 0.507 0.219 0.513 0.227 0.000 0.295 0.000 0.306 0.510 0.333 0.741 0.356 0.825 0.370 0.752 0.386 0.775 0.394 0.713 0.409 0.761 0.431 0.668 0.439 0.713 0.456 0.701 0.469 0.000 0.570 0.000 0.578 0.093 0.619 0.152 0.653 0.223 0.684 0.217 0.721 0.299 0.745 0.507 0.780 0.620 0.795 0.586 0.808 0.679 0.836 0.428 0.852 0.563 0.862 0.997 0.875 0.625 0.887 0.476 0.982 0.251 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.274 0.038 0.283 0.219 0.291 0.302 0.293 0.410 0.324 0.451 0.327 0.464 0.315 0.518 0.324 0.542 0.213 0.580 0.223 0.715 0.242 0.759 0.293 0.813 0.308 0.828 0.320 0.843 0.341 0.857 0.337 0.877 0.276 0.896 0.252 1.000 0.230) :duration dur :scaler (hz->radians 10000))) (gen1 (make-polywave 0.0 '(1 .98 2 .01 3 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) (greater-pewee-first-and-last beg1) (greater-pewee-midsection (+ beg1 1.13)) (greater-pewee-first-and-last (+ beg1 3.2))) ;; (with-sound (:play #t) (greater-pewee 0 .5)) ;;; -------------------------------------------------------------------------------- ;;; ;;; Brown-crested flycatcher (define-animal (brown-crested-flycatcher-1 beg amp) ;; calif 13 7 (let ((dur 0.66)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.017 0.616 0.035 0.803 0.044 0.410 0.050 0.674 0.056 0.157 0.065 0.452 0.081 0.350 0.105 0.426 0.106 0.279 0.111 0.439 0.122 0.483 0.133 0.743 0.192 0.466 0.197 0.608 0.212 0.424 0.221 0.998 0.236 0.335 0.244 0.690 0.260 0.652 0.274 0.703 0.283 0.537 0.288 0.847 0.298 0.743 0.305 0.829 0.323 0.324 0.336 0.619 0.349 0.075 0.357 0.457 0.362 0.322 0.366 0.426 0.390 0.193 0.396 0.452 0.413 0.000 0.415 0.302 0.422 0.220 0.426 0.259 0.433 0.120 0.437 0.191 0.452 0.000 0.530 0.000 0.556 0.144 0.564 0.399 0.589 0.000 0.617 0.000 0.623 0.149 0.634 0.392 0.655 0.000 0.678 0.000 0.682 .100 0.695 0.153 0.707 0.000 0.715 0.073 0.727 0.111 0.737 0.000 0.778 0.000 0.786 0.089 0.798 0.060 0.806 0.175 0.815 0.000 0.829 0.000 0.830 0.217 0.842 0.146 0.846 0.222 0.859 0.000 0.872 0.000 0.874 0.191 0.885 0.146 0.894 0.222 0.908 0.000 0.918 0.000 0.919 0.166 0.924 0.115 0.929 0.169 0.938 0.091 0.942 0.038 0.949 0.069 0.953 0.038 0.960 0.102 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.492 0.013 0.588 0.027 0.615 0.047 0.551 0.072 0.531 0.097 0.551 0.137 0.579 0.197 0.588 0.211 0.608 0.219 0.654 0.225 0.592 0.237 0.583 0.270 0.581 0.288 0.695 0.299 0.572 0.304 0.599 0.310 0.563 0.326 0.558 0.340 0.692 0.356 0.579 0.364 0.538 0.375 0.510 0.390 0.501 0.397 0.610 0.414 0.576 0.417 0.478 0.436 0.462 0.442 0.513 0.454 0.339 0.524 0.339 0.566 0.503 0.587 0.310 0.610 0.308 0.628 0.485 0.638 0.460 0.655 0.292 0.674 0.294 0.685 0.431 0.699 0.417 0.715 0.351 0.728 0.524 0.745 0.519 0.760 0.369 0.780 0.369 0.788 0.442 0.805 0.460 0.809 0.574 0.830 0.576 0.832 0.469 0.846 0.474 0.854 0.574 0.873 0.604 0.877 0.476 0.892 0.476 0.901 0.592 0.917 0.563 0.923 0.458 0.939 0.462 0.955 0.431 0.976 0.431 1.000 0.351) :duration dur :scaler (hz->radians 4500))) (gen1 (make-polywave 0.0 '(1 .9 2 .03 3 .05 4 .01 5 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (brown-crested-flycatcher-1 0 .5)) (define-animal (brown-crested-flycatcher-2 beg amp) ;; calif 13 63.5 (let ((dur 0.47)) (let ((start (seconds->samples beg)) (stop (seconds->samples (+ beg dur))) (ampf (make-env '(0.000 0.000 0.021 0.219 0.040 0.847 0.057 0.948 0.071 0.929 0.084 0.000 0.119 0.000 0.132 0.633 0.145 0.711 0.153 0.836 0.175 0.000 0.202 0.000 0.215 0.237 0.233 0.232 0.255 0.000 0.403 0.000 0.426 0.091 0.449 0.032 0.469 0.164 0.494 0.064 0.536 0.219 0.568 0.125 0.586 0.210 0.622 0.185 0.627 0.128 0.652 0.155 0.675 0.271 0.692 0.205 0.699 0.077 0.719 0.144 0.757 0.296 0.779 0.084 0.801 0.175 0.821 0.371 0.851 0.180 0.867 0.112 0.898 0.273 0.942 0.080 0.976 0.294 0.991 0.262 1.000 0.000) :duration dur :scaler amp)) (frqf (make-env '(0.000 0.392 0.036 0.595 0.049 0.626 0.064 0.601 0.082 0.405 0.117 0.387 0.126 0.497 0.138 0.540 0.150 0.538 0.158 0.499 0.173 0.392 0.201 0.346 0.210 0.444 0.219 0.474 0.231 0.465 0.239 0.433 0.254 0.346 0.404 0.349 0.423 0.417 0.439 0.401 0.461 0.410 0.469 0.440 0.502 0.415 0.520 0.451 0.536 0.456 0.554 0.435 0.575 0.428 0.597 0.492 0.636 0.440 0.678 0.506 0.694 0.465 0.723 0.476 0.751 0.517 0.762 0.478 0.789 0.478 0.818 0.522 0.839 0.508 0.854 0.474 0.882 0.492 0.901 0.515 0.925 0.490 0.947 0.481 0.958 0.501 0.986 0.494 1.000 0.633) :duration dur :scaler (hz->radians 4100))) (gen1 (make-polywave 0.0 '(1 .9 2 .02 3 .005 4 .02 5 .007 6 .01)))) (do ((i start (+ i 1))) ((= i stop)) (outa i (* (env ampf) (polywave gen1 (env frqf)))))))) ;; (with-sound (:play #t) (brown-crested-flycatcher-2 0 .5)) ;;; ================ calling-all-animals ================ (define* (calling-all-frogs (beg 0.0) (spacing 0.0)) (plains-spadefoot beg 0.25) (set! beg (+ beg spacing)) (barking-tree-frog (+ beg 1) 0.25) (set! beg (+ beg spacing)) (western-toad (+ beg 1.5) 2 0.25) (set! beg (+ beg spacing)) (southwestern-toad (+ beg 4) 2 0.25) (set! beg (+ beg spacing)) (american-toad (+ beg 6.5) 3 0.25) (set! beg (+ beg spacing)) (texas-toad (+ beg 10) 2.0 0.125) (set! beg (+ beg spacing)) (bullfrog (+ beg 12.5) 0.125) (set! beg (+ beg spacing)) (ornate-chorus-frog (+ beg 14) 2 0.1) (set! beg (+ beg spacing)) (squirrel-tree-frog (+ beg 16.5) 1 0.1) (set! beg (+ beg spacing)) (pinewoods-tree-frog (+ beg 18) 1.5 0.15) (set! beg (+ beg spacing)) (great-plains-narrow-mouthed-toad (+ beg 20) 2 .25) (set! beg (+ beg spacing)) (northern-leopard-frog-2 (+ beg 22.5) 0.5) (set! beg (+ beg spacing)) (pacific-chorus-frog (+ beg 24.5) .5) (set! beg (+ beg spacing)) (oak-toad (+ beg 25) 0.3) (set! beg (+ beg spacing)) (southern-cricket-frog (+ beg 25.5) 0.5) (set! beg (+ beg spacing)) (northern-leopard-frog-1 (+ beg 26) 0.5) (set! beg (+ beg spacing)) (green-tree-frog (+ beg 30.5) 0.5) (set! beg (+ beg spacing)) (knudsens-frog (+ beg 31) 0.5) (set! beg (+ beg spacing)) (spring-peeper (+ beg 31.5) 0.5) (set! beg (+ beg spacing)) (crawfish-frog (+ beg 32) 0.5) (set! beg (+ beg spacing)) (river-frog (+ beg 33) 0.5) (set! beg (+ beg spacing)) (red-spotted-toad (+ beg 35) 4 .25) (set! beg (+ beg spacing)) (green-toad (+ beg 39.5) 2 .25) (set! beg (+ beg spacing)) (little-grass-frog (+ beg 42.0) .25) (set! beg (+ beg spacing)) (sonoran-desert-toad (+ beg 43.0) .8 .25) (set! beg (+ beg spacing)) (amargosa-toad (+ beg 44.0) 0.5) (set! beg (+ beg spacing)) (+ beg 45)) (define* (calling-all-mammals (beg 0.0) (spacing 0.0)) (indri beg 0.25) (set! beg (+ beg spacing)) (+ beg 2)) (define* (calling-all-insects (beg 0.0) (spacing 0.0)) (mosquito beg 5 560 0.2) (set! beg (+ beg spacing)) (mosquito (+ beg 1) 3 880 0.05) (set! beg (+ beg spacing)) (broad-winged-tree-cricket (+ beg 5.5) 2.0 0.2) (set! beg (+ beg spacing)) (long-spurred-meadow-katydid (+ beg 8) 0.5) (set! beg (+ beg spacing)) (southern-mole-cricket (+ beg 18.5) 3 0.15) (set! beg (+ beg spacing)) (handsome-trig (+ beg 22) 2 0.5) (set! beg (+ beg spacing)) (fast-calling-tree-cricket (+ beg 24.5) 2 0.25) (set! beg (+ beg spacing)) (dog-day-cicada (+ beg 27) 2 0.1) (set! beg (+ beg spacing)) (linnaeus-cicada (+ beg 29.5) 2 0.125) (set! beg (+ beg spacing)) (lyric-cicada (+ beg 32) 2 0.125) (set! beg (+ beg spacing)) (confused-ground-cricket (+ beg 34.5) 2 0.3) (set! beg (+ beg spacing)) (tinkling-ground-cricket (+ beg 37) 2 0.3) (set! beg (+ beg spacing)) (marsh-meadow-grasshopper (+ beg 39.5) 0.3) (set! beg (+ beg spacing)) (striped-ground-cricket (+ beg 45) 2 0.25) (set! beg (+ beg spacing)) (sphagnum-ground-cricket (+ beg 47.5) 2 0.3) (set! beg (+ beg spacing)) (southeastern-field-cricket (+ beg 50) 2 0.13) (set! beg (+ beg spacing)) (snowy-tree-cricket (+ beg 52.5) 2.1 0.3) (set! beg (+ beg spacing)) (slightly-musical-conehead (+ beg 55) 2 0.4) (set! beg (+ beg spacing)) (pine-tree-cricket (+ beg 57.5) 2 0.125) (set! beg (+ beg spacing)) (davis-tree-cricket (+ beg 60) 2 0.125) (set! beg (+ beg spacing)) (carolina-grasshopper (+ beg 62.5) 1.5 1.0) (set! beg (+ beg spacing)) (black-horned-tree-cricket (+ beg 64.5) 2 0.125) (set! beg (+ beg spacing)) (narrow-winged-tree-cricket (+ beg 67.0) 2.0 .25) (set! beg (+ beg spacing)) (four-spotted-tree-cricket (+ beg 69.5) 1.0 .25) (set! beg (+ beg spacing)) (+ beg 71)) (define* (calling-all-birds (beg 0.0) (spacing .25)) (ruffed-grouse beg 0.5) (set! beg (+ beg spacing)) (eastern-wood-pewee-1 (+ beg 11.0) 0.25) (set! beg (+ beg spacing)) (eastern-wood-pewee-2 (+ beg 12.5) 0.25) (set! beg (+ beg spacing)) (field-sparrow (+ beg 14.0) 0.25) (set! beg (+ beg spacing)) (fox-sparrow (+ beg 17.5) 3 0.25) (set! beg (+ beg spacing)) (white-throated-sparrow (+ beg 21.0) 0.25) (set! beg (+ beg spacing)) (tufted-titmouse (+ beg 25.0) 0.3) (set! beg (+ beg spacing)) (savannah-sparrow (+ beg 26.5) 0.5) (set! beg (+ beg spacing)) (chipping-sparrow (+ beg 30.0) 0.3) (set! beg (+ beg spacing)) (henslows-sparrow (+ beg 33.0) 0.5) (set! beg (+ beg spacing)) (least-flycatcher (+ beg 33.5) 0.5) (set! beg (+ beg spacing)) (acadian-flycatcher (+ beg 34.0) 0.25) (set! beg (+ beg spacing)) (swainsons-thrush (+ beg 35.0) 0.25) (set! beg (+ beg spacing)) (carolina-wren (+ beg 37.5) 0.25) (set! beg (+ beg spacing)) (bachmans-sparrow (+ beg 40.0) 0.25) (set! beg (+ beg spacing)) (grasshopper-sparrow (+ beg 43.0) 0.25) (set! beg (+ beg spacing)) (american-robin (+ beg 45.0) 0.25) (set! beg (+ beg spacing)) (common-loon-1 (+ beg 47.5) 0.125) (set! beg (+ beg spacing)) (common-loon-2 (+ beg 50.5) 0.125) (set! beg (+ beg spacing)) (hermit-thrush (+ beg 51.5) 0.25) (set! beg (+ beg spacing)) (chuck-wills-widow (+ beg 53.5) 0.25) (set! beg (+ beg spacing)) (california-towhee (+ beg 55.0) 0.25) (set! beg (+ beg spacing)) (black-chinned-sparrow (+ beg 56.5) 0.25 #t) (set! beg (+ beg spacing)) (mourning-dove (+ beg 60.0) 0.125) (set! beg (+ beg spacing)) (bobwhite (+ beg 64.5) 0.25) (set! beg (+ beg spacing)) (warbling-vireo (+ beg 66.5) 0.25) (set! beg (+ beg spacing)) (great-horned-owl (+ beg 69.0) 0.25) (set! beg (+ beg spacing)) (western-tanager (+ beg 72.0) 0.25) (set! beg (+ beg spacing)) (pileated-woodpecker (+ beg 74.5) 0.125) (set! beg (+ beg spacing)) (whip-poor-will (+ beg 77.5) 0.25) (set! beg (+ beg spacing)) (varied-thrush (+ beg 79.0) 0.125) (set! beg (+ beg spacing)) (nashville-warbler (+ beg 80.5) 0.25) (set! beg (+ beg spacing)) (plumbeous-vireo-1 (+ beg 83.0) 0.25) (set! beg (+ beg spacing)) (american-crow (+ beg 84.0) 0.5) (set! beg (+ beg spacing)) (least-bittern (+ beg 85.0) 0.5) (set! beg (+ beg spacing)) (orange-crowned-warbler (+ beg 87.0) 0.25) (set! beg (+ beg spacing)) (loggerhead-shrike-1 (+ beg 89.0) 0.125) (set! beg (+ beg spacing)) (loggerhead-shrike-2 (+ beg 90.0) 0.125) (set! beg (+ beg spacing)) (california-quail (+ beg 91.0) 0.25) (set! beg (+ beg spacing)) (vermillion-flycatcher (+ beg 92.0) 0.25) (set! beg (+ beg spacing)) (cardinal (+ beg 93.0) 0.25) (set! beg (+ beg spacing)) (black-phoebe (+ beg 97.0) 0.25) (set! beg (+ beg spacing)) (yellow-warbler (+ beg 98.0) 0.25) (set! beg (+ beg spacing)) (barred-owl-1 (+ beg 100.0) 0.25) (set! beg (+ beg spacing)) (says-phoebe (+ beg 102.0) 0.25) (set! beg (+ beg spacing)) (yellow-rumped-warbler (+ beg 103.0) 0.25) (set! beg (+ beg spacing)) (purple-finch (+ beg 105.0) 0.25) (set! beg (+ beg spacing)) (northern-goshawk (+ beg 108.0) 0.125) (set! beg (+ beg spacing)) (common-gull (+ beg 109.0) 0.25) (set! beg (+ beg spacing)) (ash-throated-flycatcher (+ beg 110.0) 0.25) (set! beg (+ beg spacing)) (white-headed-woodpecker (+ beg 111.0) 0.25) (set! beg (+ beg spacing)) (phainopepla (+ beg 111.5) 0.5) (set! beg (+ beg spacing)) (golden-crowned-sparrow (+ beg 112.5) 0.25) (set! beg (+ beg spacing)) (house-finch (+ beg 115.0) 0.25) (set! beg (+ beg spacing)) (ruby-crowned-kinglet (+ beg 118.5) 0.25) (set! beg (+ beg spacing)) (green-tailed-towhee (+ beg 121.0) 0.25) (set! beg (+ beg spacing)) (lucys-warbler (+ beg 124.0) 0.25) (set! beg (+ beg spacing)) (cassins-vireo (+ beg 126.0) 0.25) (set! beg (+ beg spacing)) (plain-chacalaca (+ beg 127.0) 0.5) (set! beg (+ beg spacing)) (black-billed-cuckoo (+ beg 128.0) 0.25) (set! beg (+ beg spacing)) (eared-grebe (+ beg 129.0) 0.25) (set! beg (+ beg spacing)) (brown-jay (+ beg 130.0) 0.5) (set! beg (+ beg spacing)) (blue-grosbeak (+ beg 131.0) 0.25) (set! beg (+ beg spacing)) (acorn-woodpecker (+ beg 134.0) 0.5) (set! beg (+ beg spacing)) (red-shouldered-hawk (+ beg 136.0) 0.5) (set! beg (+ beg spacing)) (lesser-nighthawk (+ beg 137.0) 2 0.25) (set! beg (+ beg spacing)) (olive-sided-flycatcher (+ beg 139.5) 0.125) (set! beg (+ beg spacing)) (common-yellowthroat (+ beg 141.0) 0.25) (set! beg (+ beg spacing)) (cassins-sparrow (+ beg 143.5) 0.25) (set! beg (+ beg spacing)) (stellers-jay (+ beg 146.0) 0.25) (set! beg (+ beg spacing)) (black-rail (+ beg 147.5) 0.25) (set! beg (+ beg spacing)) (pinyon-jay (+ beg 148.5) 0.25) (set! beg (+ beg spacing)) (sora (+ beg 149.5) 0.25) (set! beg (+ beg spacing)) (killdeer (+ beg 150.5) 0.25) (set! beg (+ beg spacing)) (oak-titmouse (+ beg 152.0) 0.25) (set! beg (+ beg spacing)) (macgillivrays-warbler (+ beg 154.0) 0.25) (set! beg (+ beg spacing)) (huttons-vireo (+ beg 156.0) 0.25) (set! beg (+ beg spacing)) (western-meadowlark (+ beg 157.0) 0.25) (set! beg (+ beg spacing)) (northern-beardless-tyrannulet (+ beg 159.0) 0.25) (set! beg (+ beg spacing)) (scotts-oriole (+ beg 161.5) 0.25) (set! beg (+ beg spacing)) (wilsons-warbler (+ beg 164.0) 0.25) (set! beg (+ beg spacing)) (willow-flycatcher (+ beg 166.5) 0.25) (set! beg (+ beg spacing)) (black-necked-stilt (+ beg 167.5) 0.25) (set! beg (+ beg spacing)) (bushtit (+ beg 168.0) 0.25) (set! beg (+ beg spacing)) (red-breasted-nuthatch (+ beg 169.0) 0.25) (set! beg (+ beg spacing)) (white-breasted-nuthatch (+ beg 170.0) 0.25) (set! beg (+ beg spacing)) (pygmy-nuthatch (+ beg 171.0) 0.25) (set! beg (+ beg spacing)) (flammulated-owl (+ beg 171.5) 0.25) (set! beg (+ beg spacing)) (song-sparrow (+ beg 172.0) 0.25) (set! beg (+ beg spacing)) (burrowing-owl (+ beg 175.0) 0.25) (set! beg (+ beg spacing)) (gray-vireo-1 (+ beg 176.0) 0.25) (set! beg (+ beg spacing)) (gray-vireo-2 (+ beg 176.5) 0.25) (set! beg (+ beg spacing)) (bald-eagle (+ beg 177.0) 0.25) (set! beg (+ beg spacing)) (eastern-meadowlark (+ beg 178.5) 0.25) (set! beg (+ beg spacing)) (plumbeous-vireo-2 (+ beg 180.5) 0.25) (set! beg (+ beg spacing)) (yellow-green-vireo (+ beg 181.5) 0.25) (set! beg (+ beg spacing)) (magnolia-warbler (+ beg 182.0) 0.25) (set! beg (+ beg spacing)) (eastern-bluebird (+ beg 183.5) 0.25) (set! beg (+ beg spacing)) (evening-grosbeak (+ beg 184.5) 0.25) (set! beg (+ beg spacing)) (greater-roadrunner (+ beg 185.0) 0.5) (set! beg (+ beg spacing)) (dark-eyed-junco (+ beg 190.0) 0.25) (set! beg (+ beg spacing)) (groove-billed-ani (+ beg 192.0) 0.25) (set! beg (+ beg spacing)) (common-pauraque (+ beg 193.0) 0.25) (set! beg (+ beg spacing)) (hammonds-flycatcher (+ beg 194.0) 0.25) (set! beg (+ beg spacing)) (barn-owl (+ beg 194.5) 0.25) (set! beg (+ beg spacing)) (long-eared-owl (+ beg 196.0) 0.25) (set! beg (+ beg spacing)) (summer-tanager (+ beg 197.0) 0.25) (set! beg (+ beg spacing)) (whooping-crane (+ beg 201.0) .5) (set! beg (+ beg spacing)) (sandhill-crane (+ beg 202.0) .5) (set! beg (+ beg spacing)) (gray-crowned-rosy-finch (+ beg 203.0) .25) (set! beg (+ beg spacing)) (virginia-rail (+ beg 203.5) .25) (set! beg (+ beg spacing)) (sage-sparrow (+ beg 206.0) .25) (set! beg (+ beg spacing)) (hairy-woodpecker (+ beg 208.0) .25) (set! beg (+ beg spacing)) (pacific-slope-flycatcher (+ beg 208.5) .25) (set! beg (+ beg spacing)) (dusky-flycatcher (+ beg 209.0) .25) (set! beg (+ beg spacing)) (inca-dove-1 (+ beg 209.5) .25) (set! beg (+ beg spacing)) (inca-dove-2 (+ beg 210.5) .25) (set! beg (+ beg spacing)) (great-kiskadee (+ beg 211.0) .25) (set! beg (+ beg spacing)) (chestnut-sided-warbler (+ beg 212.0) .25) (set! beg (+ beg spacing)) (yellow-bellied-flycatcher (+ beg 213.5) .25) (set! beg (+ beg spacing)) (black-throated-blue-warbler (+ beg 214.0) .25) (set! beg (+ beg spacing)) (great-crested-flycatcher (+ beg 215.5) .25) (set! beg (+ beg spacing)) (gray-vireo (+ beg 216.0) .25) (set! beg (+ beg spacing)) (house-sparrow-1 (+ beg 218.0) .25) (set! beg (+ beg spacing)) (gambels-quail (+ beg 218.5) .25) (set! beg (+ beg spacing)) (scaled-quail (+ beg 219.5) .25) (set! beg (+ beg spacing)) (montezuma-quail (+ beg 221.0) .25) (set! beg (+ beg spacing)) (mountain-quail (+ beg 222.5) .25) (set! beg (+ beg spacing)) (verdin (+ beg 223.0) .25) (set! beg (+ beg spacing)) (white-tipped-dove (+ beg 224.0) .25) (set! beg (+ beg spacing)) (zone-tailed-hawk (+ beg 226.0) .25) (set! beg (+ beg spacing)) (red-eyed-vireo (+ beg 228.0) .25) (set! beg (+ beg spacing)) (crested-caracara (+ beg 228.5) .25) (set! beg (+ beg spacing)) (trumpeter-swan-1 (+ beg 229.5) .25) (set! beg (+ beg spacing)) (wrentit (+ beg 230.5) .25) (set! beg (+ beg spacing)) (western-wood-pewee-1 (+ beg 233.5) .25) (set! beg (+ beg spacing)) (western-wood-pewee-2 (+ beg 234.5) .25) (set! beg (+ beg spacing)) (cedar-waxwing (+ beg 235.5) .25) (set! beg (+ beg spacing)) (townsends-solitaire (+ beg 236.0) .25) (set! beg (+ beg spacing)) (canada-goose (+ beg 237.5) .25) (set! beg (+ beg spacing)) (pine-warbler (+ beg 239.0) .25) (set! beg (+ beg spacing)) (black-throated-sparrow (+ beg 241.5) .25) (set! beg (+ beg spacing)) (cape-may-warbler (+ beg 242.5) .25) (set! beg (+ beg spacing)) (kirtlands-warbler (+ beg 244.0) .25) (set! beg (+ beg spacing)) (wood-duck (+ beg 245.5) .25) (set! beg (+ beg spacing)) (white-eyed-vireo (+ beg 246.5) .25) (set! beg (+ beg spacing)) (philadelphia-vireo (+ beg 247.5) .25) (set! beg (+ beg spacing)) (willet (+ beg 248.3) .25) (set! beg (+ beg spacing)) (black-crowned-night-heron (+ beg 249.0) .25) (set! beg (+ beg spacing)) (scrub-euphonia (+ beg 249.5) .25) (set! beg (+ beg spacing)) (greater-pewee (+ beg 250.0) .25) (set! beg (+ beg spacing)) (brown-crested-flycatcher-1 (+ beg 254.0) .25) (set! beg (+ beg spacing)) (brown-crested-flycatcher-2 (+ beg 254.9) .25) (set! beg (+ beg spacing)) (+ beg 255.5)) (define (calling-all-animals) (with-sound (:srate 44100) ;(srate needed by snd-test) (calling-all-birds (calling-all-insects (calling-all-mammals (calling-all-frogs 0.0))))))