|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326 |
- \ clm-ins.fs -- clm-ins.scm|rb -> clm-ins.fs -*- snd-forth -*-
-
- \ Translator/Author: Michael Scholz <mi-scholz@users.sourceforge.net>
- \ Created: Fri Feb 03 10:36:51 CET 2006
- \ Changed: Thu Jun 25 19:41:26 CEST 2009
-
- \ Commentary:
- \
- \ jc-reverb ( keyword-args -- )
- \ violin ( start dur freq amp keyword-args -- )
- \ fm-violin ( start dur freq amp keyword-args -- )
- \
- \ clm-ins.scm|rb instruments
- \
- \ pluck ( start dur freq amp :optional weighting lossfact -- )
- \ vox ( start dur freq amp ampfun freqfun freqscl voxfun index :optional vibscl -- )
- \ fofins ( start dur freq amp vib f0 a0 f1 a1 f2 a2 :optional ae ve -- )
- \ fm-trumpet ( start dur keyword-args -- )
- \ pqw-vox ( start dur freq spacing-freq amp ampfun freqfun freqscl ... -- )
- \ stereo-flute ( start dur freq flow keyword-args -- )
- \ fm-bell ( start dur freq amp :optional amp-env index-env index -- )
- \ fm-insect ( start dur freq amp amp-env ... -- )
- \ fm-drum ( start dur freq amp index :optional high degr dist rev-amt -- )
- \ gong ( start dur freq amp -- )
- \ attract ( start dur amp c -- )
- \ pqw ( start dur sfreq cfreq amp ampfun indexfun parts -- )
- \ tubebell ( start dur freq amp :optional base --)
- \ wurley ( start dur freq amp -- )
- \ rhodey ( start dur freq amp :optional base -- )
- \ hammondoid ( start dur freq amp -- )
- \ metal ( start dur freq amp -- )
- \ drone ( start dur freq amp ampfun synth ampat ampdc rvibamt rvibfreq -- )
- \ canter ( start dur pitch amp ampfun ranfun skewfun ... -- )
- \ nrev ( keyword-args -- )
- \ reson ( start dur pitch amp indxfun skewfun ... -- )
- \ cellon ( start dur pitch0 amp ampfun betafun ... -- )
- \ jl-reverb ( keyword-args -- )
- \ gran-synth ( start dur freq grain-dur interval amp -- )
- \ touch-tone ( numbers keyword-args -- )
- \ spectra ( start dur freq amp :optional parts ampenv vibamp vibfrq degr dist rev-amt -- )
- \ two-tab ( start dur freq amp :optional par1 par2 aenv ienv vamp vfrq degr dist rev -- )
- \ lbj-piano ( start dur freq amp -- )
- \ resflt ( start dur keyword-args -- )
- \ scratch-ins ( start file src-ratio turntable -- )
- \ pins ( file start dur keyword-args -- )
- \ zc ( start dur freq amp len1 len2 feedback -- )
- \ zn ( start dur freq amp len1 len2 feedforward -- )
- \ za ( start dur freq amp len1 len2 fb ffw -- )
- \ clm-expsrc ( start dur in-file exp-ratio src-ratio amp :optional rev start-in-file -- )
- \ exp-snd ( file start dur amp :optional exp-amt ramp seglen sr hop ampenv -- )
- \ expfil ( start dur hopsecs rampsecs steadysecs file1 file2 -- )
- \ graph-eq ( file start dur keyword-args -- )
- \ anoi ( fname start dur :optional fftsize amp-scaler R -- )
- \ fullmix ( in-file :optional start dur inbeg matrix srate reverb-amount -- )
- \ bes-fm ( start dur freq amp ratio index -- )
-
- require clm
- require env
-
- \ Prevent name clash with possibly loaded sndins.so.
- \ sndins.so instruments can be called with fm-violin-ins etc.
- [defined] fm-violin [if] <'> fm-violin alias fm-violin-ins [then]
- [defined] jc-reverb [if] <'> jc-reverb alias jc-reverb-ins [then]
- [defined] nrev [if] <'> nrev alias nrev-ins [then]
-
- \ General input function for src, granulate etc.
- : readin-cb ( gen -- proc; dir self -- r )
- 1 proc-create swap ,
- does> ( dir self -- r )
- nip @ ( gen ) readin
- ;
-
- : reverb-dur ( rev -- dur ) mus-length samples->seconds *clm-decay-time* f+ ;
-
- \ clm/jcrev.ins
- instrument: jc-reverb-fs <{ :key
- volume 1.0
- delay1 0.013
- delay2 0.011
- delay3 0.015
- delay4 0.017
- low-pass #f
- doubled #f
- amp-env #f -- }>
- doc" The Chowning reverb.\n\
- 0 1 440 0.2 <'> fm-violin :reverb <'> jc-reverb with-sound\n\
- 0 1 440 0.2 <'> fm-violin\n\
- :reverb-data #( :low-pass #t ) :reverb <'> jc-reverb :channels 2 with-sound"
- *output* mus-channels { chans }
- *reverb* mus-channels { rev-chans }
- *reverb* reverb-dur { dur }
- *verbose* if get-func-name rev-chans chans reverb-info then
- :feedback -0.7 :feedforward 0.7 :size 1051 make-all-pass { allpass1 }
- :feedback -0.7 :feedforward 0.7 :size 337 make-all-pass { allpass2 }
- :feedback -0.7 :feedforward 0.7 :size 113 make-all-pass { allpass3 }
- :scaler 0.742 :size 4799 make-comb { comb1 }
- :scaler 0.733 :size 4999 make-comb { comb2 }
- :scaler 0.715 :size 5399 make-comb { comb3 }
- :scaler 0.697 :size 5801 make-comb { comb4 }
- chans 1 > { chan2 }
- chans 4 = { chan4 }
- :size delay1 seconds->samples make-delay { outdel1 }
- chan2 if :size delay2 seconds->samples make-delay else #f then { outdel2 }
- doubled chan4 || if :size delay3 seconds->samples make-delay else #f then { outdel3 }
- chan4 doubled chan2 && || if :size delay4 seconds->samples make-delay else #f then { outdel4 }
- amp-env if :envelope amp-env :scaler volume :duration dur make-env else #f then { env-a }
- doubled chan4 && if $" jc-reverb is not set up for doubled reverb in quad" _ error then
- 0.0 0.0 { comb-sum comb-sum-1 }
- 0.0 dur run
- 0.0 rev-chans 0 ?do j i *reverb* in-any f+ loop { in-val }
- allpass3 allpass2 allpass1 in-val 0.0 all-pass 0.0 all-pass 0.0 all-pass { allpass-sum }
- comb-sum-1 { comb-sum-2 }
- comb-sum to comb-sum-1
- comb1 allpass-sum 0.0 comb
- comb2 allpass-sum 0.0 comb f+
- comb3 allpass-sum 0.0 comb f+
- comb4 allpass-sum 0.0 comb f+ to comb-sum
- low-pass if
- comb-sum comb-sum-2 f+ 0.25 f* comb-sum-1 f2/ f+
- else
- comb-sum
- then { all-sums }
- outdel1 all-sums 0.0 delay { del-a }
- doubled if outdel3 all-sums 0.0 delay del-a f+ to del-a then
- env-a ?dup-if env to volume then
- i del-a volume f* *output* outa drop
- chan2 if
- outdel2 all-sums 0.0 delay { del-b }
- doubled if outdel4 all-sums 0.0 delay del-b f+ to del-b then
- i del-b volume f* *output* outb drop
- then
- chan4 if
- i outdel3 all-sums 0.0 delay volume f* *output* outc drop
- i outdel4 all-sums 0.0 delay volume f* *output* outd drop
- then
- loop
- ;instrument
- <'> jc-reverb-fs alias jc-reverb
-
- \ snd/fm.html
- instrument: violin <{ start dur freq amp
- :key
- fm-index 1.0
- amp-env #( 0 0 25 1 75 1 100 0 )
- index-env #( 0 1 25 0.4 75 0.6 100 0 )
- degree 0.0
- distance 1.0
- reverb-amount 0.01 -- }>
- doc" Violin example from snd/fm.html.\n\
- 0 3 440 0.5 :fm-index 0.5 <'> violin with-sound"
- freq hz->radians { frq-scl }
- frq-scl fm-index f* { maxdev }
- 5.0 freq flog f/ maxdev f* { index1 }
- 8.5 freq flog f- 3.0 freq 1000.0 f/ f+ f/ maxdev 3.0 f* f* { index2 }
- 4.0 freq fsqrt f/ maxdev f* { index3 }
- :frequency freq make-oscil { carrier }
- :frequency freq make-oscil { fmosc1 }
- :frequency freq 3.0 f* make-oscil { fmosc2 }
- :frequency freq 4.0 f* make-oscil { fmosc3 }
- :envelope amp-env :scaler amp :duration dur make-env { ampf }
- :envelope index-env :scaler index1 :duration dur make-env { indf1 }
- :envelope index-env :scaler index2 :duration dur make-env { indf2 }
- :envelope index-env :scaler index3 :duration dur make-env { indf3 }
- :frequency 5.0 :amplitude 0.0025 frq-scl f* make-triangle-wave { pervib }
- :frequency 16.0 :amplitude 0.005 frq-scl f* make-rand-interp { ranvib }
- start dur #{ :degree degree :distance distance :reverb-amount reverb-amount } run-instrument
- pervib 0.0 triangle-wave ranvib 0.0 rand-interp f+ { vib }
- carrier
- vib
- fmosc1 vib 0.0 oscil indf1 env f* f+
- fmosc2 3.0 vib f* 0.0 oscil indf2 env f* f+
- fmosc3 4.0 vib f* 0.0 oscil indf3 env f* f+
- 0.0 oscil ampf env f*
- end-run
- ;instrument
-
- : violin-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.5 violin
- dur 0.2 f+ step
- ;
-
- \ === FM-Violin (clm/v.ins, snd/v.scm|rb) ===
- instrument: fm-violin-fs <{ start dur freq amp
- :key
- fm-index 1.0
- amp-env #( 0 0 25 1 75 1 100 0 )
- periodic-vibrato-rate 5.0
- periodic-vibrato-amplitude 0.0025
- random-vibrato-rate 16.0
- random-vibrato-amplitude 0.005
- noise-freq 1000.0
- noise-amount 0.0
- ind-noise-freq 10.0
- ind-noise-amount 0.0
- amp-noise-freq 20.0
- amp-noise-amount 0.0
- gliss-env #( 0 0 100 0 )
- glissando-amount 0.0
- fm1-env #( 0 1 25 0.4 75 0.6 100 0 )
- fm2-env #( 0 1 25 0.4 75 0.6 100 0 )
- fm3-env #( 0 1 25 0.4 75 0.6 100 0 )
- fm1-rat 1.0
- fm2-rat 3.0
- fm3-rat 4.0
- fm1-index #f
- fm2-index #f
- fm3-index #f
- base 1.0
- degree 0.0
- distance 1.0
- reverb-amount 0.01
- index-type 'violin -- }>
- doc" FM-Violin from clm/v.ins|snd/v.scm|rb.\n\
- 0 3 440 0.5 :fm-index 0.5 <'> fm-violin with-sound"
- freq fabs 1.0 f<= if
- $" freq = %s? reset to 440.0" _ #( freq ) string-format warning
- 440.0 to freq
- then
- freq hz->radians { frq-scl }
- fm-index f0<> { modulate }
- frq-scl fm-index f* { maxdev }
- index-type 'violin equal? { vln }
- freq flog { logfreq }
- freq fsqrt { sqrtfreq }
- fm1-index unless maxdev vln if 5.0 else 7.5 then logfreq f/ f* pi fmin to fm1-index then
- fm2-index unless
- maxdev 3.0 f* vln if 8.5 logfreq f- 3.0 freq 0.001 f* f+ f/ else 15.0 sqrtfreq f/ then
- f* pi fmin to fm2-index
- then
- fm3-index unless maxdev vln if 4.0 else 8.0 then sqrtfreq f/ f* pi fmin to fm3-index then
- noise-amount f0=
- fm1-env fm2-env equal? &&
- fm1-env fm3-env equal? &&
- fm1-rat fm1-rat floor f- f0= &&
- fm2-rat fm1-rat floor f- f0= &&
- fm2-rat fm2-rat floor f- f0= &&
- fm3-rat fm1-rat floor f- f0= &&
- fm3-rat fm3-rat floor f- f0= && { easy-case }
- easy-case modulate && 1.0 && fm1-index || { norm }
- :frequency freq make-oscil { carrier }
- :envelope amp-env :scaler amp :duration dur :base base make-env { ampf }
- #f #f #f { fmosc1 fmosc2 fmosc3 }
- #f #f #f { indf1 indf2 indf3 }
- modulate if
- easy-case if
- :frequency freq fm1-rat f*
- :coeffs
- #( fm1-rat f>s fm1-index
- fm2-rat fm1-rat f/ fround->s fm2-index
- fm3-rat fm1-rat f/ fround->s fm3-index ) 1 partials->polynomial make-polyshape
- else
- :frequency freq fm1-rat f* make-oscil
- then to fmosc1
- easy-case unless
- :frequency freq fm2-rat f* make-oscil to fmosc2
- :frequency freq fm3-rat f* make-oscil to fmosc3
- :envelope fm1-env :scaler norm :duration dur make-env to indf1
- :envelope fm2-env :scaler fm2-index :duration dur make-env to indf2
- :envelope fm3-env :scaler fm3-index :duration dur make-env to indf3
- then
- then
- :envelope gliss-env :scaler glissando-amount frq-scl f* :duration dur make-env { frqf }
- :frequency periodic-vibrato-rate
- :amplitude periodic-vibrato-amplitude frq-scl f* make-triangle-wave { pervib }
- :frequency random-vibrato-rate
- :amplitude random-vibrato-amplitude frq-scl f* make-rand-interp { ranvib }
- #f #f #f { fm-noi ind-noi amp-noi }
- noise-amount f0<> if
- :frequency noise-freq :amplitude noise-amount pi f* make-rand to fm-noi
- then
- ind-noise-freq f0<> ind-noise-amount f0<> && if
- :frequency ind-noise-freq :amplitude ind-noise-amount make-rand-interp to ind-noi
- then
- amp-noise-freq f0<> amp-noise-amount f0<> && if
- :frequency amp-noise-freq :amplitude amp-noise-amount make-rand-interp to amp-noi
- then
- 0.0 0.0 1.0 1.0 { vib fuzz ind-fuzz amp-fuzz }
- modulate if
- easy-case if
- start dur #{ :degree degree :distance distance :reverb-amount reverb-amount } run-instrument
- fm-noi if fm-noi 0.0 rand to fuzz then
- frqf env pervib 0.0 triangle-wave f+ ranvib 0.0 rand-interp f+ to vib
- ind-noi if ind-noi 0.0 rand-interp 1.0 f+ to ind-fuzz then
- amp-noi if amp-noi 0.0 rand-interp 1.0 f+ to amp-fuzz then
- carrier fmosc1 1.0 vib polyshape ind-fuzz f* vib f+ 0.0 oscil ampf env f* amp-fuzz f*
- end-run
- else
- start dur #{ :degree degree :distance distance :reverb-amount reverb-amount } run-instrument
- fm-noi if fm-noi 0.0 rand to fuzz then
- frqf env pervib 0.0 triangle-wave f+ ranvib 0.0 rand-interp f+ to vib
- ind-noi if ind-noi 0.0 rand-interp 1.0 f+ to ind-fuzz then
- amp-noi if amp-noi 0.0 rand-interp 1.0 f+ to amp-fuzz then
- carrier ( gen )
- fmosc1 fm1-rat vib f* fuzz f+ 0.0 oscil indf1 env f*
- fmosc2 fm2-rat vib f* fuzz f+ 0.0 oscil indf2 env f* f+
- fmosc3 fm3-rat vib f* fuzz f+ 0.0 oscil indf3 env f* f+ ind-fuzz f* vib f+ ( fm )
- 0.0 ( pm ) oscil ampf env f* amp-fuzz f*
- end-run
- then
- else
- start dur #{ :degree degree :distance distance :reverb-amount reverb-amount } run-instrument
- fm-noi if fm-noi 0.0 rand to fuzz then
- frqf env pervib 0.0 triangle-wave f+ ranvib 0.0 rand-interp f+ to vib
- ind-noi if ind-noi 0.0 rand-interp 1.0 f+ to ind-fuzz then
- amp-noi if amp-noi 0.0 rand-interp 1.0 f+ to amp-fuzz then
- carrier vib 0.0 oscil ampf env f* amp-fuzz f*
- end-run
- then
- ;
- <'> fm-violin-fs alias fm-violin
-
- : fm-violin-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.5 fm-violin
- dur 0.2 f+ step
- ;
-
- \ === CLM-INS.(RB|SCM) ===
- \ (with original comments from clm-ins.scm)
-
- hide
- : get-optimum-c { s o p -- t c }
- o 1/f s o fsin f* 1.0 s f- s o fcos f* f+ fatan2 f* { pa }
- p pa f- f>s { tmp_int } tmp_int unless 1 to tmp_int then
- p pa f- tmp_int f- { pc }
- begin pc 0.1 f< while tmp_int 1 - to tmp_int pc 1e f+ to pc repeat
- tmp_int
- o fsin o pc f* fsin f- o o pc f* f+ fsin f/
- ;
- : tune-it { f s1 -- s c t }
- mus-srate f f/ { p }
- s1 f0= if 0.5 else s1 then { s }
- f hz->radians { o }
- s o p get-optimum-c { t1 c1 }
- 1.0 s f- o p get-optimum-c { t2 c2 }
- s 0.5 f<> c1 fabs c2 fabs f< && if 1.0 s f- c1 t1 else s c2 t2 then
- ;
- set-current
-
- \ PLUCK
- \
- \ The Karplus-Strong algorithm as extended by David Jaffe and Julius
- \ Smith -- see Jaffe and Smith, "Extensions of the Karplus-Strong
- \ Plucked-String Algorithm" CMJ vol 7 no 2 Summer 1983, reprinted in
- \ "The Music Machine". translated from CLM's pluck.ins
- instrument: pluck <{ start dur freq amp
- :optional
- weighting 0.5
- lossfact 0.9 -- }>
- doc" Implements the Jaffe-Smith plucked string physical model. \
- WEIGHTING is the ratio of the once-delayed to the twice-delayed samples. \
- It defaults to 0.5 = shortest decay. \
- Anything other than 0.5 = longer decay. \
- Must be between 0 and less than 1.0. \
- LOSSFACT can be used to shorten decays. \
- Most useful values are between 0.8 and 1.0.\n\
- 0 1 330 0.3 0.95 0.95 <'> pluck with-sound"
- freq weighting tune-it { wt0 c dlen }
- lossfact f0= if 1.0 else 1.0 lossfact fmin then { lf }
- wt0 f0= if 0.5 else 1.0 wt0 fmin then { wt }
- lf 1.0 wt f- f* lf wt f* make-one-zero { allp }
- c 1.0 make-one-zero { feedb }
- dlen 0.0 make-vct map 1.0 2.0 mus-random f- end-map { tab }
- start dur #{ :degree 90.0 random } run-instrument
- tab cycle-ref { val }
- tab i dlen mod 1.0 c f- feedb allp val one-zero one-zero f* vct-set! drop
- amp val f*
- end-run
- ;instrument
- previous
-
- : pluck-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 330 0.3 0.95 0.95 pluck
- dur 0.2 f+ step
- ;
-
- \ formant center frequencies for a male speaker (vox and pqw-vox)
- #{ :I: #( 390.0 1990.0 2550.0 )
- :UH: #( 520.0 1190.0 2390.0 )
- :U: #( 440.0 1020.0 2240.0 )
- :W: #( 300.0 610.0 2200.0 )
- :Y: #( 300.0 2200.0 3065.0 )
- :L: #( 300.0 1300.0 3000.0 )
- :D: #( 300.0 1700.0 2600.0 )
- :N: #( 280.0 1700.0 2600.0 )
- :T: #( 200.0 1700.0 2600.0 )
- :TH: #( 200.0 1400.0 2200.0 )
- :V: #( 175.0 1100.0 2400.0 )
- :ZH: #( 175.0 1800.0 2000.0 )
- :E: #( 530.0 1840.0 2480.0 )
- :A: #( 730.0 1090.0 2440.0 )
- :OO: #( 300.0 870.0 2240.0 )
- :LL: #( 380.0 880.0 2575.0 )
- :EE: #( 260.0 3500.0 3800.0 )
- :I2: #( 350.0 2300.0 3340.0 )
- :G: #( 250.0 1350.0 2000.0 )
- :NG: #( 280.0 2300.0 2750.0 )
- :K: #( 350.0 1350.0 2000.0 )
- :S: #( 200.0 1300.0 2500.0 )
- :THE: #( 200.0 1600.0 2200.0 )
- :ZZ: #( 900.0 2400.0 3800.0 )
- :AE: #( 660.0 1720.0 2410.0 )
- :OW: #( 570.0 840.0 2410.0 )
- :ER: #( 490.0 1350.0 1690.0 )
- :R: #( 420.0 1300.0 1600.0 )
- :LH: #( 280.0 1450.0 1600.0 )
- :B: #( 200.0 800.0 1750.0 )
- :M: #( 280.0 900.0 2200.0 )
- :P: #( 300.0 800.0 1750.0 )
- :F: #( 175.0 900.0 4400.0 )
- :SH: #( 200.0 1800.0 2000.0 )
- :Z: #( 200.0 1300.0 2500.0 )
- :VV: #( 565.0 1045.0 2400.0 ) } value clm-ins-formants
-
- \ MLBVOI
- \
- \ translation from MUS10 of Marc LeBrun's waveshaping voice instrument
- \ (using FM here) this version translated (and simplified slightly)
- \ from CLM's mlbvoi.ins
- instrument: vox <{ start dur freq amp ampfun freqfun freqscl voxfun index
- :optional
- vibscl 0.1 -- }>
- voxfun length { size }
- size make-array { f1 }
- size make-array { f2 }
- size make-array { f3 }
- size 1- 0 ?do
- clm-ins-formants voxfun i 1+ object-ref hash-ref { phon }
- voxfun i object-ref { n }
- f1 i n array-set!
- phon 0 array-ref f1 i 1+ rot array-set!
- f2 i n array-set!
- phon 1 array-ref f2 i 1+ rot array-set!
- f3 i n array-set!
- phon 2 array-ref f3 i 1+ rot array-set!
- 2 +loop
- :frequency 0.0 make-oscil { car-os }
- 6 make-array map :frequency 0.0 make-oscil end-map { ofs }
- :envelope ampfun :scaler amp :duration dur make-env { ampf }
- :envelope f1 :duration dur make-env { frmf1 }
- :envelope f2 :duration dur make-env { frmf2 }
- :envelope f3 :duration dur make-env { frmf3 }
- :envelope freqfun :duration dur :scaler freqscl freq f* :offset freq make-env { freqf }
- :frequency 6.0 :amplitude freq vibscl f* make-triangle-wave { per-vib }
- :frequency 20.0 :amplitude freq 0.01 f* make-rand-interp { ran-vib }
- 6 0.0 make-vct { freqs }
- 6 0.0 make-vct { amps }
- start dur #{ :degree 90.0 random } run-instrument
- freqf env per-vib 0.0 triangle-wave f+ ran-vib 0.0 rand-interp f+ { frq }
- frmf1 env { frm }
- frm frq f/ { frm0 }
- frm0 floor dup f>s { frm-fint frm-int }
- frm-int 2 mod unless
- freqs 0 frm-fint frq f* hz->radians vct-set! drop
- freqs 1 frm-fint 1.0 f+ frq f* hz->radians vct-set! drop
- amps 1 frm0 frm-fint f- vct-set! drop
- amps 0 1.0 amps 1 vct-ref f- vct-set! drop
- else
- freqs 1 frm-fint frq f* hz->radians vct-set! drop
- freqs 0 frm-fint 1.0 f+ frq f* hz->radians vct-set! drop
- amps 0 frm0 frm-fint f- vct-set! drop
- amps 1 1.0 amps 0 vct-ref f- vct-set! drop
- then
- frmf2 env to frm
- frm frq f/ to frm0
- frm0 floor to frm-fint
- frm-fint f>s to frm-int
- frm-int 2 mod unless
- freqs 2 frm-fint frq f* hz->radians vct-set! drop
- freqs 3 frm-fint 1.0 f+ frq f* hz->radians vct-set! drop
- amps 3 frm0 frm-fint f- vct-set! drop
- amps 2 1.0 amps 3 vct-ref f- vct-set! drop
- else
- freqs 3 frm-fint frq f* hz->radians vct-set! drop
- freqs 2 frm-fint 1.0 f+ frq f* hz->radians vct-set! drop
- amps 2 frm0 frm-fint f- vct-set! drop
- amps 3 1.0 amps 2 vct-ref f- vct-set! drop
- then
- frmf3 env to frm
- frm frq f/ to frm0
- frm0 floor to frm-fint
- frm-fint f>s to frm-int
- frm-int 2 mod unless
- freqs 4 frm-fint frq f* hz->radians vct-set! drop
- freqs 5 frm-fint 1.0 f+ frq f* hz->radians vct-set! drop
- amps 5 frm0 frm-fint f- vct-set! drop
- amps 4 1.0 amps 5 vct-ref f- vct-set! drop
- else
- freqs 5 frm-fint frq f* hz->radians vct-set! drop
- freqs 4 frm-fint 1.0 f+ frq f* hz->radians vct-set! drop
- amps 4 frm0 frm-fint f- vct-set! drop
- amps 5 1.0 amps 4 vct-ref f- vct-set! drop
- then
- car-os frq hz->radians 0.0 oscil index f* { caros }
- ofs 0 array-ref caros 0.2 f* freqs 0 vct-ref f+ 0.0 oscil amps 0 vct-ref f*
- ofs 1 array-ref caros 0.2 f* freqs 1 vct-ref f+ 0.0 oscil amps 1 vct-ref f* f+ 0.80 f*
- ofs 2 array-ref caros 0.5 f* freqs 2 vct-ref f+ 0.0 oscil amps 2 vct-ref f*
- ofs 3 array-ref caros 0.5 f* freqs 3 vct-ref f+ 0.0 oscil amps 3 vct-ref f* f+ 0.15 f* f+
- ofs 4 array-ref caros freqs 4 vct-ref f+ 0.0 oscil amps 4 vct-ref f*
- ofs 5 array-ref caros freqs 5 vct-ref f+ 0.0 oscil amps 5 vct-ref f* f+ 0.05 f* f+
- ampf env f*
- end-run
- ;instrument
-
- : vox-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- #( 0 0 25 1 75 1 100 0 ) { amp-env }
- #( 0 0 5 0.5 10 0 100 1 ) { frq-env }
- #( 0 :E: 25 :AE: 35 :ER: 65 :ER: 75 :I: 100 :UH: ) { examp1 }
- #( 0 :I: 5 :OW: 10 :I: 50 :AE: 100 :OO: ) { examp2 }
-
- now@ dur 170 0.4 amp-env frq-env 0.1 examp1 0.05 0.1 vox
- dur 0.2 f+ step
- now@ dur 300 0.4 amp-env frq-env 0.1 examp2 0.02 0.1 vox
- dur 0.2 f+ step
- now@ 5.0 600 0.4 amp-env frq-env 0.1 examp2 0.01 0.1 vox
- 5.0 0.2 f+ step
- ;
-
- \ FOF example
- \
- \ snd/sndclm.html, section wave-train
- instrument: fofins <{ start dur freq amp vib f0 a0 f1 a1 f2 a2
- :optional
- ae #( 0 0 25 1 75 1 100 0 )
- ve #( 0 1 100 1 ) -- }>
- doc" produces FOF synthesis.\n\
- 0 1 270 0.2 0.001 730 0.6 1090 0.3 2440 0.1 <'> fofins with-sound"
- :envelope ae :scaler amp :duration dur make-env { ampf }
- :frequency 6.0 make-oscil { vibr }
- :envelope ve :scaler vib :duration dur make-env { vibenv }
- f0 hz->radians { frq0 }
- f1 hz->radians { frq1 }
- f2 hz->radians { frq2 }
- mus-srate 22050.0 f= if 100 else 200 then { foflen }
- two-pi foflen f/ { win-freq }
- foflen 0.0 make-vct map
- a0 i frq0 f* fsin f*
- a1 i frq1 f* fsin f* f+
- a2 i frq2 f* fsin f* f+ f2/
- 1.0 i win-freq f* fcos f- f*
- end-map { foftab }
- :frequency freq :wave foftab make-wave-train { wt0 }
- start dur #{ :degree 90.0 random } run-instrument
- ampf env wt0 vibenv env vibr 0.0 0.0 oscil f* wave-train f*
- end-run
- ;instrument
-
- : fofins-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 270 0.2 0.001 730 0.6 1090 0.3 2440 0.1 fofins
- dur 0.2 f+ step
- ;
-
- \ FM TRUMPET
- \
- \ Dexter Morrill's FM-trumpet: from CMJ feb 77 p51
- instrument: fm-trumpet <{ start dur
- :key
- frq1 250
- frq2 1500
- amp1 0.5
- amp2 0.1
- ampatt1 0.03
- ampdec1 0.35
- ampatt2 0.03
- ampdec2 0.3
- modfrq1 250
- modind11 0
- modind12 2.66
- modfrq2 250
- modind21 0
- modind22 1.8
- rvibamp 0.007
- rvibfrq 125
- vibamp 0.007
- vibfrq 7
- vibatt 0.6
- vibdec 0.2
- frqskw 0.03
- frqatt 0.06
- ampenv1 #( 0 0 25 1 75 0.9 100 0 )
- ampenv2 #( 0 0 25 1 75 0.9 100 0 )
- indenv1 #( 0 0 25 1 75 0.9 100 0 )
- indenv2 #( 0 0 25 1 75 0.9 100 0 ) -- }>
- doc" 0 2 <'> fm-trumpet with-sound"
- :envelope
- #( 0 1 25 0.1 75 0 100 0 )
- 25
- 100 vibatt dur f/ f* 45.0 fmin
- 75
- 100 1 vibdec dur f/ f- f* 55.0 fmax stretch-envelope
- :scaler vibamp :duration dur make-env { per-vib-f }
- :frequency rvibfrq :amplitude rvibamp make-rand-interp { ran-vib }
- :frequency vibfrq make-oscil { per-vib }
- 75 100 1 0.01 dur f/ f- f* fmax { dec-01 }
- :envelope
- #( 0 0 25 1 75 1 100 0 )
- 25 25 100 frqatt dur f/ f* fmin
- 75 dec-01 stretch-envelope
- :scaler frqskw :duration dur make-env { frq-f }
- 25 100 ampatt1 dur f/ f* fmin { ampattpt1 }
- 75 100 1 ampdec1 dur f/ f- f* fmax { ampdecpt1 }
- 25 100 ampatt2 dur f/ f* fmin { ampattpt2 }
- 75 100 1 ampdec2 dur f/ f- f* fmax { ampdecpt2 }
- :envelope indenv1 25 ampattpt1 75 dec-01 stretch-envelope
- :scaler modfrq1 modind12 modind11 f- f* :duration dur make-env { mod1-f }
- :frequency 0.0 make-oscil { mod1 }
- :frequency 0.0 make-oscil { car1 }
- :envelope ampenv1 25 ampattpt1 75 ampdecpt1 stretch-envelope
- :scaler amp1 :duration dur make-env { car1-f }
- :envelope indenv2 25 ampattpt2 75 dec-01 stretch-envelope
- :scaler modfrq2 modind22 modind21 f- f* :duration dur make-env { mod2-f }
- :frequency 0.0 make-oscil { mod2 }
- :frequency 0.0 make-oscil { car2 }
- :envelope ampenv2 25 ampattpt2 75 ampdecpt2 stretch-envelope
- :scaler amp2 :duration dur make-env { car2-f }
- start dur #{ :degree 90.0 random } run-instrument
- ran-vib 0.0 rand-interp 1.0 f+
- 1.0 per-vib-f env per-vib 0.0 0.0 oscil f* f+ f*
- 1.0 frq-f env f+ f* hz->radians { frq-change }
- car1-f env
- car1 mod1 modfrq1 frq-change f* 0.0 oscil mod1-f env f* frq1 f+ frq-change f* 0.0 oscil f*
- car2-f env
- car2 mod2 modfrq2 frq-change f* 0.0 oscil mod2-f env f* frq2 f+ frq-change f* 0.0 oscil f* f+
- end-run
- ;instrument
-
- : fm-trumpet-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur fm-trumpet
- dur 0.2 f+ step
- ;
-
- struct
- cell% field sin-evens
- cell% field cos-evens
- cell% field sin-odds
- cell% field cos-odds
- cell% field frmfs
- cell% field sin-coeffs
- cell% field cos-coeffs
- cell% field amps
- end-struct pqw-vox%
-
- \ PQWVOX
- \
- \ translation of CLM pqwvox.ins (itself translated from MUS10 of MLB's
- \ waveshaping voice instrument (using phase quadrature waveshaping))
- instrument: pqw-vox <{ start dur
- freq spacing-freq
- amp ampfun
- freqfun freqscl
- phonemes
- formant-amps formant-shapes -- }>
- :frequency 0.0 make-oscil { car-sin }
- :frequency 0.0 :initial-phase half-pi make-oscil { car-cos }
- :envelope ampfun :scaler amp :duration dur make-env { ampf }
- :envelope freqfun :scaler freqscl freq f* :duration dur :offset freq make-env { freqf }
- :frequency 6.0 :amplitude freq 0.1 f* make-triangle-wave { per-vib }
- :frequency 20.0 :amplitude freq 0.05 f* make-rand-interp { ran-vib }
- phonemes length { plen }
- plen make-array { phone1 }
- plen make-array { phone2 }
- plen make-array { phone3 }
- plen 1- 0 ?do
- phonemes i object-ref { ph }
- phone1 i ph array-set!
- phone2 i ph array-set!
- phone3 i ph array-set!
- clm-ins-formants phonemes i 1+ object-ref hash-ref { ary }
- phone1 i 1+ ary 0 object-ref array-set!
- phone2 i 1+ ary 1 object-ref array-set!
- phone3 i 1+ ary 2 object-ref array-set!
- 2 +loop
- phone1 phone2 phone3 3 >array { phones }
- nil { pv }
- formant-amps map
- pqw-vox% %alloc to pv
- :frequency 0.0 make-oscil pv sin-evens !
- :frequency 0.0 make-oscil pv sin-odds !
- :frequency 0.0 :initial-phase half-pi make-oscil pv cos-evens !
- :frequency 0.0 :initial-phase half-pi make-oscil pv cos-odds !
- formant-shapes i object-ref normalize-partials { shape }
- shape mus-chebyshev-first-kind partials->polynomial pv cos-coeffs !
- shape mus-chebyshev-second-kind partials->polynomial pv sin-coeffs !
- :envelope phones i array-ref :duration dur make-env pv frmfs !
- formant-amps i object-ref pv amps !
- pv
- end-map { values }
- 4 0.0 make-vct { vals }
- spacing-freq freq f/ { frq-ratio }
- start dur #{ :degree 90.0 random } run-instrument
- freqf env per-vib 0.0 triangle-wave f+ ran-vib 0.0 rand-interp f+ { frq }
- frq frq-ratio f* hz->radians { frqscl }
- car-sin frqscl 0.0 oscil { carsin }
- car-cos frqscl 0.0 oscil { carcos }
- 0.0 ( sum )
- values each to pv
- pv frmfs @ env frq f/ { frm0 }
- frm0 floor { frm-fint }
- frm-fint f>s 2 mod unless
- vals 0 frm-fint frq f* hz->radians vct-set! drop ( even-freq )
- vals 1 frm-fint 1e f+ frq f* hz->radians vct-set! drop ( odd-freq )
- vals 3 frm0 frm-fint f- vct-set! drop ( odd-amp )
- vals 2 1.0 vals 3 vct-ref f- vct-set! drop ( even-amp )
- else
- vals 1 frm-fint frq f* hz->radians vct-set! drop ( odd-freq )
- vals 0 frm-fint 1e f+ frq f* hz->radians vct-set! drop ( even-freq )
- vals 2 frm0 frm-fint f- vct-set! drop ( even-amp )
- vals 3 1.0 vals 2 vct-ref f- vct-set! drop ( odd-amp )
- then
- pv cos-coeffs @ carcos polynomial { fax }
- pv sin-coeffs @ carcos polynomial carsin f* { yfax }
- pv sin-evens @ vals 0 vct-ref 0.0 oscil yfax f*
- pv cos-evens @ vals 0 vct-ref 0.0 oscil fax f* f- vals 2 vct-ref f*
- pv sin-odds @ vals 1 vct-ref 0.0 oscil yfax f*
- pv cos-odds @ vals 1 vct-ref 0.0 oscil fax f* f- vals 3 vct-ref f* f+ pv amps @ f* f+
- end-each
- ampf env f*
- end-run
- values each ( pv ) free throw end-each
- ;instrument
-
- : pqw-vox-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- #( 0 0 50 1 100 0 ) { ampfun }
- #( 0 0 100 0 ) { freqfun }
- #( 0 0 100 1 ) { freqramp }
- #( #( 1 1 2 0.5 ) #( 1 0.5 2 0.5 3 1 ) #( 1 1 4 0.5 ) ) { shapes1 }
- #( #( 1 1 2 0.5 ) #( 1 1 2 0.5 3 0.2 4 0.1 ) #( 1 1 3 0.1 4 0.5 ) ) { shapes2 }
- #( #( 1 1 2 0.5 ) #( 1 1 4 0.1 ) #( 1 1 2 0.1 4 0.05 ) ) { shapes3 }
- #( #( 1 1 2 0.5 3 0.1 4 0.01 ) #( 1 1 4 0.1 ) #( 1 1 2 0.1 4 0.05 ) ) { shapes4 }
- #( 0.8 0.15 0.05 ) { amps }
-
- now@ dur 300 300 0.5 ampfun freqfun 0.00 #( 0 :L: 100 :L: ) #( 0.33 0.33 0.33 ) shapes1 pqw-vox
- dur 0.2 f+ step
- now@ dur 200 200 0.5 ampfun freqramp 0.10 #( 0 :UH: 100 :ER: ) amps shapes2 pqw-vox
- dur 0.2 f+ step
- now@ dur 100 314 0.5 ampfun freqramp 0.10 #( 0 :UH: 100 :ER: ) amps shapes2 pqw-vox
- dur 0.2 f+ step
- now@ dur 200 314 0.5 ampfun freqramp 0.01 #( 0 :UH: 100 :ER: ) amps shapes3 pqw-vox
- dur 0.2 f+ step
- now@ dur 100 414 0.5 ampfun freqramp 0.01 #( 0 :OW: 50 :E: 100 :ER: ) amps shapes4 pqw-vox
- dur 0.2 f+ step
- ;
-
- \ STEREO-FLUTE
- instrument: stereo-flute <{ start dur freq flow
- :key
- flow-envelope #( 0 1 100 1 )
- decay 0.01
- noise 0.0356
- embouchure-size 0.5
- fbk-scl1 0.5
- fbk-scl2 0.55
- out-scl 1.0
- a0 0.7
- b1 -0.3
- vib-rate 5.0
- vib-amount 0.03
- ran-rate 5.0
- ran-amount 0.03 -- }>
- doc" A physical model of a flute.\n\
- 0 1 440 0.55 :flow-envelope #( 0 0 1 1 2 1 3 0 ) <'> stereo-flute with-sound"
- :envelope flow-envelope :scaler flow :duration dur decay f- make-env { flowf }
- :frequency vib-rate make-oscil { p-vib }
- :frequency ran-rate make-rand-interp { ran-vib }
- :frequency mus-srate f2/ :amplitude 1.0 make-rand { breath }
- mus-srate freq f/ fround->s { periodic-samples }
- embouchure-size periodic-samples f* fround->s make-delay { emb }
- periodic-samples make-delay { bore }
- a0 b1 make-one-pole { rlf }
- 0.0 0.0 0.0 0.0 { emb-sig delay-sig out-sig prev-out-sig }
- 0.0 0.0 0.0 0.0 0.0 { cur-exit cur-diff cur-flow dc-blocked prev-dc-blocked }
- start dur #{ :degree 90.0 random } run-instrument
- bore out-sig 0.0 delay to delay-sig
- emb cur-diff 0.0 delay to emb-sig
- p-vib 0.0 0.0 oscil vib-amount f*
- ran-vib 0.0 rand-interp ran-amount f* f+
- flowf env f+ to cur-flow
- breath 0.0 rand cur-flow f* noise f* cur-flow f+ fbk-scl1 delay-sig f* f+ to cur-diff
- emb-sig emb-sig emb-sig f* emb-sig f* f- to cur-exit
- rlf fbk-scl2 delay-sig f* cur-exit f+ one-pole to out-sig
- \ ;; NB the DC blocker is not in the cicuit. It is applied to the out-sig
- \ ;; but the result is not fed back into the system.
- out-sig prev-out-sig f- 0.995 prev-dc-blocked f* f+ to dc-blocked
- out-sig to prev-out-sig
- dc-blocked to prev-dc-blocked
- out-scl dc-blocked f*
- end-run
- ;instrument
-
- : flute-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.55 :flow-envelope #( 0 0 1 1 2 1 3 0 ) stereo-flute
- dur 0.2 f+ step
- ;
-
- \ FM-BELL
- instrument: fm-bell <{ start dur freq amp
- :optional
- amp-env #( 0 0 0.1 1 10 0.6 25 0.3 50 0.15 90 0.1 100 0 )
- index-env #( 0 1 2 1.1 25 0.75 75 0.5 100 0.2 )
- index 1.0 -- }>
- freq 32.0 f* hz->radians { fm-ind1 }
- 8.0 freq 50.0 f/ f- 4.0 f* hz->radians { fm-ind2 }
- 1.4 freq 250.0 f/ f- 0.705 f* fm-ind2 f* { fm-ind3 }
- 20.0 freq 20.0 f/ f- 32.0 f* hz->radians { fm-ind4 }
- :frequency freq f2* make-oscil { mod1 }
- :frequency freq 1.41 f* make-oscil { mod2 }
- :frequency freq 2.82 f* make-oscil { mod3 }
- :frequency freq 2.4 f* make-oscil { mod4 }
- :frequency freq make-oscil { car1 }
- :frequency freq make-oscil { car2 }
- :frequency freq 2.4 f* make-oscil { car3 }
- :envelope amp-env :scaler amp :duration dur make-env { ampf }
- :envelope index-env :scaler index :duration dur make-env { indf }
- 0.0 { fmenv }
- start dur #{ :degree 90.0 random } run-instrument
- indf env to fmenv
- car1 fmenv fm-ind1 f* mod1 0.0 0.0 oscil f* 0.0 oscil
- car2 fmenv fm-ind2 mod2 0.0 0.0 oscil f*
- fm-ind3 mod3 0.0 0.0 oscil f* f+ f* 0.0 oscil 0.15 f* f+
- car3 fmenv fm-ind4 f* mod4 0.0 0.0 oscil f* 0.0 oscil 0.15 f* f+
- ampf env f*
- end-run
- ;instrument
-
- : fm-bell-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440.0 0.5 fm-bell
- dur 0.2 f+ step
- ;
-
- \ FM-INSECT
- \ clm/insect.ins
- instrument: fm-insect <{ start dur
- freq amp amp-env
- mod-freq mod-skew mod-freq-env
- mod-index mod-index-env
- fm-index fm-ratio -- }>
- :frequency freq make-oscil { carrier }
- :frequency mod-freq make-oscil { fm1-osc }
- :frequency fm-ratio freq f* make-oscil { fm2-osc }
- :envelope amp-env :scaler amp :duration dur make-env { ampf }
- :envelope mod-index-env :scaler mod-index hz->radians :duration dur make-env { indf }
- :envelope mod-freq-env :scaler mod-skew hz->radians :duration dur make-env { modfrqf }
- fm-index fm-ratio f* freq f* hz->radians { fm2-amp }
- start dur #{ :degree 90.0 random } run-instrument
- fm1-osc modfrqf env 0.0 oscil indf env f* { garble-in }
- fm2-osc garble-in 0.0 oscil fm2-amp f* { garble-out }
- carrier garble-out garble-in f+ 0.0 oscil ampf env f*
- end-run
- ;instrument
-
- : fm-insect-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- #( 0 0 40 1 95 1 100 0.5 ) { locust }
- #( 0 1 25 0.7 75 0.78 100 1 ) { bug-hi }
- #( 0 0 25 1 75 0.7 100 0 ) { amp }
-
- now@ 0.000 f+ 1.699 4142.627 0.015 amp 60 -16.707 locust 500.866 bug-hi 0.346 0.5 fm-insect
- now@ 0.195 f+ 0.233 4126.284 0.030 amp 60 -12.142 locust 649.490 bug-hi 0.407 0.5 fm-insect
- now@ 0.217 f+ 2.057 3930.258 0.045 amp 60 -3.011 locust 562.087 bug-hi 0.591 0.5 fm-insect
- now@ 2.100 f+ 1.500 900.627 0.060 amp 40 -16.707 locust 300.866 bug-hi 0.346 0.5 fm-insect
- now@ 3.000 f+ 1.500 900.627 0.060 amp 40 -16.707 locust 300.866 bug-hi 0.046 0.5 fm-insect
- now@ 3.450 f+ 1.500 900.627 0.090 amp 40 -16.707 locust 300.866 bug-hi 0.006 0.5 fm-insect
- now@ 3.950 f+ 1.500 900.627 0.120 amp 40 -10.707 locust 300.866 bug-hi 0.346 0.5 fm-insect
- now@ 4.300 f+ 1.500 900.627 0.090 amp 40 -20.707 locust 300.866 bug-hi 0.246 0.5 fm-insect
- 6.0 step
- ;
-
- \ FM-DRUM
- \
- \ Jan Mattox's fm drum:
- instrument: fm-drum <{ start dur freq amp index
- :optional
- high #f
- degr 0.0
- dist 1.0
- rev-amt 0.01 -- }>
- high if 3.414 8.525 else 1.414 3.515 then { casrat fmrat }
- :envelope #( 0 0 25 0 75 1 100 1 )
- :scaler high if 66.0 hz->radians else 0 then :duration dur make-env { glsf }
- #( 0 0 3 0.05 5 0.2 7 0.8 8 0.95 10 1.0 12 0.95 20 0.3 30 0.1 100 0 ) { ampfun }
- 100 high if 0.01 else 0.015 then f* dur f/ { atdrpt }
- :envelope ampfun 10 atdrpt 15 atdrpt 1 f+ 100 100 dur 0.2 f- dur f/ f* f- fmax stretch-envelope
- :scaler amp :duration dur make-env { ampf }
- #( 0 0 5 0.014 10 0.033 15 0.061 20 0.099
- 25 0.153 30 0.228 35 0.332 40 0.477 45 0.681
- 50 0.964 55 0.681 60 0.478 65 0.332 70 0.228
- 75 0.153 80 0.099 85 0.061 90 0.033 95 0.0141 100 0 ) { indxfun }
- 100 100 dur 0.1 f- dur f/ f* f- { indxpt }
- indxfun 50 atdrpt 65 indxpt stretch-envelope { divindxf }
- :envelope divindxf :duration dur
- :scaler index fmrat freq f* f* hz->radians pi fmin make-env { indxf }
- :envelope divindxf :duration dur
- :scaler index casrat freq f* f* hz->radians pi fmin make-env { mindxf }
- :envelope ampfun 10 atdrpt 90 atdrpt 1 f+ 100 100 dur 0.05 f- dur f/ f* f- fmax stretch-envelope
- :duration dur
- :scaler 7000 hz->radians pi fmin make-env { devf }
- :frequency 7000 :amplitude 1 make-rand { rn }
- :frequency freq make-oscil { car }
- :frequency freq fmrat f* make-oscil { fmosc }
- :frequency freq casrat f* make-oscil { cc }
- 0.0 { gls }
- start dur #{ :degree degr :distance dist :reverb-amount rev-amt } run-instrument
- glsf env to gls
- cc devf env rn 0.0 rand f* gls casrat f* f+ 0.0 oscil
- mindxf env f* gls fmrat f* f+ fmosc swap 0.0 oscil
- indxf env f* gls f+ car swap 0.0 oscil ampf env f*
- end-run
- ;instrument
-
- : fm-drum-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 55 0.3 5 fm-drum
- dur 0.2 f+ step
- now@ dur 66 0.3 4 #t fm-drum
- dur 0.2 f+ step
- ;
-
- \ FM-GONG
- \
- \ Paul Weineke's gong.
- instrument: gong <{ start dur freq amp
- :key
- degree 0.0
- distance 1.0
- reverb-amount 0.005 -- }>
- 0.01 1.160 freq f* f* hz->radians { indx01 }
- 0.30 1.160 freq f* f* hz->radians { indx11 }
- 0.01 3.140 freq f* f* hz->radians { indx02 }
- 0.38 3.140 freq f* f* hz->radians { indx12 }
- 0.01 1.005 freq f* f* hz->radians { indx03 }
- 0.50 1.005 freq f* f* hz->radians { indx13 }
- 5 { atpt }
- 100 0.002 dur f/ f* { atdur }
- #( 0 0 3 1 15 0.5 27 0.25 50 0.1 100 0 ) { expf }
- #( 0 0 15 0.3 30 1.0 75 0.5 100 0 ) { rise }
- #( 0 0 75 1.0 98 1.0 100 0 ) { fmup }
- #( 0 0 2 1.0 100 0 ) { fmdwn }
- :envelope expf atpt atdur 0 0 stretch-envelope :scaler amp :duration dur make-env { ampfun }
- :envelope fmup :scaler indx11 indx01 f- :duration dur :offset indx01 make-env { indxfun1 }
- :envelope fmdwn :scaler indx12 indx02 f- :duration dur :offset indx02 make-env { indxfun2 }
- :envelope rise :scaler indx13 indx03 f- :duration dur :offset indx03 make-env { indxfun3 }
- :frequency freq make-oscil { car }
- :frequency freq 1.160 f* make-oscil { mod1 }
- :frequency freq 3.140 f* make-oscil { mod2 }
- :frequency freq 1.005 f* make-oscil { mod3 }
- start dur #{ :degree degree :distance distance :reverb-amount reverb-amount } run-instrument
- car
- mod3 0.0 0.0 oscil indxfun3 env f*
- mod2 0.0 0.0 oscil indxfun2 env f* f+
- mod1 0.0 0.0 oscil indxfun1 env f* f+
- 0.0 oscil ampfun env f*
- end-run
- ;instrument
-
- : gong-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 261.61 0.6 gong
- dur 0.2 f+ step
- ;
-
- \ ATTRACT
- \
- \ by James McCartney, from CMJ vol 21 no 3 p 6
- instrument: attract <{ start dur amp c -- }>
- 0.2 0.2 { a b }
- 0.04 { dt }
- amp f2/ c f/ { scale }
- -1.0 { x }
- 0.0 0.0 0.0 { x1 y z }
- start dur #{ :degree 90.0 random } run-instrument
- x y z f+ dt f* f- to x1
- a y f* x f+ dt f* +to y
- x z f* b f+ c z f* f- dt f* +to z
- x1 to x
- scale x f*
- end-run
- ;instrument
-
- : attract-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 0.5 2.0 attract
- dur 0.2 f+ step
- ;
-
- \ PQW
- \
- \ phase-quadrature waveshaping used to create asymmetric (i.e. single
- \ side-band) spectra. The basic idea here is a variant of sin x sin y
- \ - cos x cos y = cos (x + y)
- \
- \ clm/pqw.ins
- instrument: pqw <{ start dur sfreq cfreq amp ampfun indexfun parts
- :key
- degree 0.0
- distance 1.0
- reverb-amount 0.005 -- }>
- parts normalize-partials { nparts }
- :frequency sfreq :initial-phase half-pi make-oscil { sp-cos }
- :frequency sfreq make-oscil { sp-sin }
- :frequency cfreq :initial-phase half-pi make-oscil { c-cos }
- :frequency cfreq make-oscil { c-sin }
- nparts mus-chebyshev-second-kind partials->polynomial { sin-coeffs }
- nparts mus-chebyshev-first-kind partials->polynomial { cos-coeffs }
- :envelope ampfun :scaler amp :duration dur make-env { amp-env }
- :envelope indexfun :duration dur make-env { ind-env }
- 0.0 0.0 0.0 0.0 { vib ax fax yfax }
- cfreq sfreq f/ { r }
- :frequency 5.0 :amplitude 0.005 sfreq f* hz->radians make-triangle-wave { tr }
- :frequency 12.0 :amplitude 0.005 sfreq f* hz->radians make-rand-interp { rn }
- start dur #{ :degree degree :distance distance :reverb-amount reverb-amount } run-instrument
- tr 0.0 triangle-wave rn 0.0 rand-interp f+ to vib
- 1.0 ind-env env fmin sp-cos vib 0.0 oscil f* to ax
- cos-coeffs ax polynomial to fax
- sp-sin vib 0.0 oscil sin-coeffs ax polynomial f* to yfax
- c-sin vib r f* 0.0 oscil yfax f*
- c-cos vib r f* 0.0 oscil fax f* f- amp-env env f*
- end-run
- ;instrument
-
- : pqw-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 200 1000 0.2 #( 0 0 25 1 100 0 ) #( 0 1 100 0 ) #( 2 0.1 3 0.3 6 0.5 ) pqw
- dur 0.2 f+ step
- ;
-
- \ taken from Perry Cook's stkv1.tar.Z (Synthesis Toolkit), but I was
- \ in a bit of a hurry and may not have made slavishly accurate
- \ translations. Please let me (bil@ccrma.stanford.edu) know of any
- \ serious (non-envelope) errors.
- \
- \ from Perry Cook's TubeBell.cpp
- instrument: tubebell <{ start dur freq amp :optional base 32.0 -- }>
- :frequency freq 0.995 f* make-oscil { osc0 }
- :frequency freq 0.995 1.414 f* f* make-oscil { osc1 }
- :frequency freq 1.005 f* make-oscil { osc2 }
- :frequency freq 1.414 f* make-oscil { osc3 }
- :envelope #( 0 0 0.005 1 dur 0.006 fmax 0 ) :base base :duration dur make-env { ampenv1 }
- :envelope #( 0 0 0.001 1 dur 0.002 fmax 0 ) :base base f2* :duration dur make-env { ampenv2 }
- :frequency 2.0 make-oscil { ampmod }
- amp f2/ { g0 }
- g0 0.707 f* { g1 }
- start dur #{ :degree 90.0 random } run-instrument
- ampmod 0.0 0.0 oscil 0.007 f* 0.993 f+
- osc0 osc1 0.0 0.0 oscil 0.203 f* 0.0 oscil ampenv1 env g1 f* f*
- osc2 osc3 0.0 0.0 oscil 0.144 f* 0.0 oscil ampenv2 env g0 f* f* f+ f*
- end-run
- ;instrument
-
- : tubebell-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.2 32 tubebell
- dur 0.2 f+ step
- ;
-
- \ from Perry Cook's Wurley.cpp
- instrument: wurley <{ start dur freq amp -- }>
- :frequency freq make-oscil { osc0 }
- :frequency freq 4 f* make-oscil { osc1 }
- :frequency 510 make-oscil { osc2 }
- :frequency 510 make-oscil { osc3 }
- :frequency 8 make-oscil { ampmod }
- :envelope #( 0 0 1 1 9 1 10 0 ) :duration dur make-env { ampenv }
- :envelope #( 0 0 0.001 1 0.15 0 dur 0.16 fmax 0 ) :duration dur make-env { indenv }
- :envelope #( 0 0 0.001 1 0.25 0 dur 0.26 fmax 0 ) :duration dur make-env { resenv }
- amp f2/ { g0 }
- g0 0.307 f* { g1 }
- start dur #{ :degree 90.0 random } run-instrument
- ampenv env
- ampmod 0.0 0.0 oscil 0.007 f* 1.0 f+ f*
- osc0 osc1 0.0 0.0 oscil 0.307 f* 0.0 oscil g0 f*
- osc2 osc3 0.0 0.0 oscil indenv env f* 0.117 f* 0.0 oscil g1 f* resenv env f* f+ f*
- end-run
- ;instrument
-
- : wurley-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.2 wurley
- dur 0.2 f+ step
- ;
-
- \ from Perry Cook's Rhodey.cpp
- instrument: rhodey <{ start dur freq amp :optional base 0.5 -- }>
- :frequency freq make-oscil { osc0 }
- :frequency freq make-oscil { osc1 }
- :frequency freq make-oscil { osc2 }
- :frequency freq make-oscil { osc3 }
- :envelope #( 0 0 0.005 1 dur 0.006 fmax 0 ) :base base :duration dur make-env { ampenv1 }
- :envelope #( 0 0 0.001 1 dur 0.002 fmax 0 ) :base base 1.5 f* :duration dur make-env { ampenv2 }
- :envelope #( 0 0 0.001 1 0.25 0 ) :base base 4 f* :duration dur make-env { ampenv3 }
- amp f2/ { g0 }
- start dur #{ :degree 90.0 random } run-instrument
- osc0 osc1 0.0 0.0 oscil 0.535 f* 0.0 oscil ampenv1 env f* g0 f*
- osc2 osc3 0.0 0.0 oscil 0.109 f* ampenv3 env f* 0.0 oscil ampenv2 env f* g0 f* f+
- end-run
- ;instrument
-
- : rhodey-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.2 0.5 rhodey
- dur 0.2 f+ step
- ;
-
- \ from Perry Cook's BeeThree.cpp
- instrument: hammondoid <{ start dur freq amp -- }>
- :frequency freq 0.999 f* make-oscil { osc0 }
- :frequency freq 1.997 f* make-oscil { osc1 }
- :frequency freq 3.006 f* make-oscil { osc2 }
- :frequency freq 6.009 f* make-oscil { osc3 }
- :envelope #( 0 0 0.005 1 dur 0.006 fmax 0.008 f- 1 dur 0 ) :duration dur make-env { ampenv1 }
- :envelope #( 0 0 0.005 1 dur 0.006 fmax 0 ) :duration dur make-env { ampenv2 }
- amp f2/ { g0 }
- start dur #{ :degree 90.0 random } run-instrument
- osc0 0.0 0.0 oscil 0.1875 amp f* f*
- osc1 0.0 0.0 oscil 0.1875 amp f* f* f+
- osc2 0.0 0.0 oscil g0 f* f+ ampenv1 env f*
- osc3 0.0 0.0 oscil 0.375 amp f* f* ampenv2 env f* f+
- end-run
- ;instrument
-
- : hammondoid-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.2 hammondoid
- dur 0.2 f+ step
- ;
-
- \ from Perry Cook's HeavyMtl.cpp
- instrument: metal <{ start dur freq amp -- }>
- :frequency freq make-oscil { osc0 }
- :frequency freq 4 f* 0.999 f* make-oscil { osc1 }
- :frequency freq 3 f* 1.001 f* make-oscil { osc2 }
- :frequency freq 0.5 f* 1.002 f* make-oscil { osc3 }
- :envelope #( 0 0 0.001 1 dur 0.002 fmax 0.002 f- 1 dur 0 ) :duration dur make-env { ampenv0 }
- :envelope #( 0 0 0.001 1 dur 0.002 fmax 0.011 f- 1 dur 0 ) :duration dur make-env { ampenv1 }
- :envelope #( 0 0 0.010 1 dur 0.020 fmax 0.015 f- 1 dur 0 ) :duration dur make-env { ampenv2 }
- :envelope #( 0 0 0.030 1 dur 0.040 fmax 0.040 f- 1 dur 0 ) :duration dur make-env { ampenv3 }
- start dur #{ :degree 90.0 random } run-instrument
- osc0
- osc1 osc2 0.0 0.0 oscil ampenv2 env f* 0.574 f* 0.0 oscil ampenv1 env f* 0.202 f*
- osc3 0.0 0.0 oscil ampenv3 env f* 0.116 f* f+ ( osc0 ) 0.0 oscil ampenv0 env f* 0.615 amp f* f*
- end-run
- ;instrument
-
- : metal-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.2 metal
- dur 0.2 f+ step
- ;
-
- \ DRONE
- instrument: drone <{ start dur freq amp ampfun synth ampat ampdc rvibamt rvibfreq -- }>
- :frequency freq :wave synth #f #f partials->wave make-table-lookup { s }
- :envelope ampfun 25.0 100.0 ampat dur f/ f* 75.0 100.0 100.0 ampdc dur f/ f* f- stretch-envelope
- :scaler amp 0.25 f*
- :duration dur make-env { ampenv }
- :frequency rvibfreq :amplitude rvibamt freq f* hz->radians make-rand { ranvib }
- start dur #{ :degree 90.0 random } run-instrument
- s ranvib 0.0 rand fabs table-lookup ampenv env f*
- end-run
- ;instrument
-
- \ CANTER
- instrument: canter <{ start dur pitch amp
- ampfun ranfun skewfun skewpc ranpc ranfreq indexfun atdr dcdr
- ampfun1 indfun1 fmtfun1
- ampfun2 indfun2 fmtfun2
- ampfun3 indfun3 fmtfun3
- ampfun4 indfun4 fmtfun4 -- }>
- pitch 400.0 f/ flog 910.0 400.0 f/ flog f/ 100.0 f* floor { k }
- 100.0 atdr dur f/ f* { atpt }
- 100.0 100.0 dcdr dur f/ f* f- { dcpt }
- k fmtfun1 1.0 envelope-interp { lfmt1 }
- 0.5 lfmt1 pitch f/ f+ floor { harm1 }
- k indfun1 1.0 envelope-interp pitch f* hz->radians { dev11 }
- dev11 f2/ { dev01 }
- k ampfun1 1.0 envelope-interp amp f* 1.0 harm1 lfmt1 pitch f/ f- fabs f- f* { lamp1 }
- k fmtfun2 1.0 envelope-interp { lfmt2 }
- 0.5 lfmt2 pitch f/ f+ floor { harm2 }
- k indfun2 1.0 envelope-interp pitch f* hz->radians { dev12 }
- dev12 f2/ { dev02 }
- k ampfun2 1.0 envelope-interp amp f* 1.0 harm2 lfmt2 pitch f/ f- fabs f- f* { lamp2 }
- k fmtfun3 1.0 envelope-interp { lfmt3 }
- 0.5 lfmt3 pitch f/ f+ floor { harm3 }
- k indfun3 1.0 envelope-interp pitch f* hz->radians { dev13 }
- dev13 f2/ { dev03 }
- k ampfun3 1.0 envelope-interp amp f* 1.0 harm3 lfmt3 pitch f/ f- fabs f- f* { lamp3 }
- k fmtfun4 1.0 envelope-interp { lfmt4 }
- 0.5 lfmt4 pitch f/ f+ floor { harm4 }
- k indfun4 1.0 envelope-interp pitch f* hz->radians { dev14 }
- dev14 f2/ { dev04 }
- k ampfun4 1.0 envelope-interp amp f* 1.0 harm4 lfmt4 pitch f/ f- fabs f- f* { lamp4 }
- :envelope ampfun 25.0 atpt 75.0 dcpt stretch-envelope
- :duration dur make-env { tampfun }
- :envelope skewfun 25.0 atpt 75.0 dcpt stretch-envelope
- :duration dur
- :scaler pitch skewpc f* hz->radians make-env { tskwfun }
- :envelope ranfun 25.0 atpt 75.0 dcpt stretch-envelope
- :duration dur make-env { tranfun }
- :envelope indexfun 25.0 atpt 75.0 dcpt stretch-envelope
- :duration dur make-env { tidxfun }
- :frequency pitch make-oscil { modgen }
- :frequency pitch harm1 f* make-oscil { gen1 }
- :frequency pitch harm2 f* make-oscil { gen2 }
- :frequency pitch harm3 f* make-oscil { gen3 }
- :frequency pitch harm4 f* make-oscil { gen4 }
- :frequency ranfreq :amplitude ranpc pitch f* hz->radians make-rand { ranvib }
- start dur #{ :degree 90.0 random } run-instrument
- tskwfun env tranfun env ranvib 0.0 rand f* f+ { frqval }
- modgen frqval 0.0 oscil { modval }
- tampfun env { ampval }
- tidxfun env { indval }
- gen1 dev01 indval dev11 f* f+ modval f* frqval f+ harm1 f* 0.0 oscil lamp1 ampval f* f*
- gen2 dev02 indval dev12 f* f+ modval f* frqval f+ harm2 f* 0.0 oscil lamp3 ampval f* f* f+
- gen3 dev03 indval dev13 f* f+ modval f* frqval f+ harm3 f* 0.0 oscil lamp3 ampval f* f* f+
- gen4 dev04 indval dev14 f* f+ modval f* frqval f+ harm4 f* 0.0 oscil lamp4 ampval f* f* f+
- end-run
- ;instrument
-
- : drone/canter-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- #( 0 1200 100 1000 ) { fmt1 }
- #( 0 2250 100 1800 ) { fmt2 }
- #( 0 4500 100 4500 ) { fmt3 }
- #( 0 6750 100 8100 ) { fmt4 }
- #( 0 0.67 100 0.70 ) { amp1 }
- #( 0 0.95 100 0.95 ) { amp2 }
- #( 0 0.28 100 0.33 ) { amp3 }
- #( 0 0.14 100 0.15 ) { amp4 }
- #( 0 0.75 100 0.65 ) { ind1 }
- #( 0 0.75 100 0.75 ) { ind2 }
- #( 0 1 100 1 ) { ind3 }
- #( 0 1 100 1 ) { ind4 }
- #( 0 0 100 0 ) { skwf }
- #( 0 0 25 1 75 1 100 0 ) { ampf }
- #( 0 0.5 100 0.5 ) { ranf }
- #( 0 1 100 1 ) { index }
- #( 0 0 5 1 95 1 100 0 ) { solid }
- #( 0.5 0.06 1 0.62 1.5 0.07 2 0.6 2.5 0.08 3 0.56 4 0.24 5 0.98 6 0.53
- 7 0.16 8 0.33 9 0.62 10 0.12 12 0.14 14 0.86 16 0.12 23 0.14 24 0.17 ) { bassdr2 }
- #( 0.3 0.04 1 0.81 2 0.27 3 0.2 4 0.21 5 0.18 6 0.35 7 0.03
- 8 0.07 9 0.02 10 0.025 11 0.035 ) { tenordr }
-
- now@ 4 115.0 0.125 solid bassdr2 0.1 0.5 0.01 10 drone
- now@ 4 229.0 0.125 solid tenordr 0.1 0.5 0.01 11 drone
- now@ 4 229.5 0.125 solid tenordr 0.1 0.5 0.01 09 drone
- now@ 2.100 918.000 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 2.100 f+ 0.300 688.500 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 2.400 f+ 0.040 826.200 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 2.440 f+ 0.560 459.000 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.000 f+ 0.040 408.000 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.040 f+ 0.040 619.650 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.080 f+ 0.040 408.000 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.120 f+ 0.040 688.500 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.160 f+ 0.290 459.000 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.450 f+ 0.150 516.375 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.600 f+ 0.040 826.200 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.640 f+ 0.040 573.750 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.680 f+ 0.040 619.650 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.720 f+ 0.180 573.750 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.900 f+ 0.040 688.500 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- now@ 3.940 f+ 0.260 459.000 0.175 ampf ranf skwf 0.050 0.01 10 index 0.005 0.005
- amp1 ind1 fmt1 amp2 ind2 fmt2 amp3 ind3 fmt3 amp4 ind4 fmt4 canter
- 4.4 step
- ;
-
- \ NREV (the most popular Samson box reverb)
- \
- \ REVERB-FACTOR controls the length of the decay -- it should not
- \ exceed (/ 1.0 .823), LP-COEFF controls the strength of the low pass
- \ filter inserted in the feedback loop, VOLUME can be used to boost the
- \ reverb output.
- \
- \ clm/nrev.ins
- instrument: nrev-fs <{ :key
- reverb-factor 1.09
- lp-coeff 0.7
- lp-out-coeff 0.85
- output-scale 1.0
- volume 1.0
- amp-env #( 0 1 1 1 ) -- }>
- doc" NREV (the most popular Samson box reverb).\n\
- <'> fm-violin-test :reverb <'> nrev with-sound"
- *output* mus-channels { chans }
- *reverb* mus-channels { rev-chans }
- *reverb* reverb-dur { dur }
- *verbose* if get-func-name rev-chans chans reverb-info then
- mus-srate 25641.0 f/ { sr }
- #( 1433 1601 1867 2053 2251 2399 347 113 37 59 43 37 29 19 ) map
- sr *key* f* f>s dup 2 mod unless 1+ then ( val )
- begin ( val ) dup prime? false? while 2 + repeat ( val )
- end-map { dly-len }
- :scaler 0.822 reverb-factor f* :size dly-len 0 array-ref make-comb { comb0 }
- :scaler 0.802 reverb-factor f* :size dly-len 1 array-ref make-comb { comb1 }
- :scaler 0.773 reverb-factor f* :size dly-len 2 array-ref make-comb { comb2 }
- :scaler 0.753 reverb-factor f* :size dly-len 3 array-ref make-comb { comb3 }
- :scaler 0.753 reverb-factor f* :size dly-len 4 array-ref make-comb { comb4 }
- :scaler 0.733 reverb-factor f* :size dly-len 5 array-ref make-comb { comb5 }
- :feedback -0.7 :feedforward 0.7 :size dly-len 6 array-ref make-all-pass { allp0 }
- :feedback -0.7 :feedforward 0.7 :size dly-len 7 array-ref make-all-pass { allp1 }
- :feedback -0.7 :feedforward 0.7 :size dly-len 8 array-ref make-all-pass { allp2 }
- :feedback -0.7 :feedforward 0.7 :size dly-len 9 array-ref make-all-pass { allp3 }
- :feedback -0.7 :feedforward 0.7 :size dly-len 10 array-ref make-all-pass { allp4 }
- :feedback -0.7 :feedforward 0.7 :size dly-len 11 array-ref make-all-pass { allp5 }
- :feedback -0.7 :feedforward 0.7 :size dly-len 12 array-ref make-all-pass { allp6 }
- :feedback -0.7 :feedforward 0.7 :size dly-len 13 array-ref make-all-pass { allp7 }
- lp-coeff lp-coeff 1.0 f- make-one-pole { low }
- lp-out-coeff lp-coeff 1.0 f- make-one-pole { low-a }
- lp-out-coeff lp-coeff 1.0 f- make-one-pole { low-b }
- lp-out-coeff lp-coeff 1.0 f- make-one-pole { low-c }
- lp-out-coeff lp-coeff 1.0 f- make-one-pole { low-d }
- :envelope amp-env :scaler output-scale :duration dur make-env { ampf }
- 0.0 dur run
- 0.0 ( rev ) rev-chans 0 ?do j i *reverb* in-any f+ loop volume f* ampf env f* { rev }
- 0.0 ( outrev )
- comb0 rev 0.0 comb f+
- comb1 rev 0.0 comb f+
- comb2 rev 0.0 comb f+
- comb3 rev 0.0 comb f+
- comb4 rev 0.0 comb f+
- comb5 rev 0.0 comb f+ { outrev }
- allp2 allp1 allp0 outrev 0.0 all-pass 0.0 all-pass 0.0 all-pass to outrev
- allp3 low outrev one-pole 0.0 all-pass to outrev
- low-a allp4 outrev 0.0 all-pass one-pole output-scale f* { sample-a }
- low-b allp5 outrev 0.0 all-pass one-pole output-scale f* { sample-b }
- low-c allp6 outrev 0.0 all-pass one-pole output-scale f* { sample-c }
- low-d allp7 outrev 0.0 all-pass one-pole output-scale f* { sample-d }
- chans 2 = if
- i sample-a sample-d f+ f2/ *output* outa drop
- else
- i sample-a *output* outa drop
- then
- chans 2 = chans 4 = || if
- chans 2 = if
- i sample-b sample-c f+ f2/ *output* outb drop
- else
- i sample-b *output* outb drop
- then
- then
- chans 4 = if
- i sample-c *output* outc drop
- i sample-d *output* outd drop
- then
- loop
- ;instrument
- <'> nrev-fs alias nrev
-
- struct
- cell% field carriers
- cell% field ampfs
- cell% field indfs
- cell% field c-rats
- end-struct reson%
-
- \ RESON
- instrument: reson <{ start dur pitch amp
- indxfun skewfun pcskew
- skewat skewdc
- vibfreq vibpc
- ranvibfreq ranvibpc data -- }>
- :frequency pitch make-oscil { mod }
- :envelope skewfun 25 100 skewat dur f/ f* 75 100 100 skewdc dur f/ f* f- stretch-envelope
- :scaler pcskew pitch f* hz->radians
- :duration dur make-env { frqf }
- :frequency vibfreq :amplitude vibpc pitch f* hz->radians make-triangle-wave { pervib }
- :frequency ranvibfreq :amplitude ranvibpc pitch f* hz->radians make-rand-interp { ranvib }
- 0.0 data each ( lst-val ) 2 object-ref f+ end-each { totalamp }
- nil { rs }
- data object->array map! *key* { frmdat }
- reson% %alloc to rs
- frmdat 0 object-ref { ampf }
- frmdat 1 object-ref { freq }
- frmdat 2 object-ref { rfamp }
- frmdat 3 object-ref dur f/ 100.0 f* { ampat }
- 100.0 frmdat 4 object-ref dur f/ 100.0 f* f- { ampdc }
- frmdat 5 object-ref freq f* hz->radians { dev0 }
- frmdat 6 object-ref freq f* hz->radians { dev1 }
- frmdat 7 object-ref dur f/ 100.0 f* { indxat }
- 100.0 frmdat 8 object-ref dur f/ 100.0 f* f- { indxdc }
- freq pitch f/ fround->s { harm }
- 1.0 harm freq pitch f/ f- fabs f- { rsamp }
- pitch harm f* { cfq }
- ampat f0= if 25.0 to ampat then
- ampdc f0= if 75.0 to ampdc then
- indxat f0= if 25.0 to indxat then
- indxdc f0= if 75.0 to indxdc then
- :envelope indxfun 25 indxat 75 indxdc stretch-envelope
- :scaler dev1 dev0 f-
- :offset dev0
- :duration dur make-env rs indfs !
- :envelope ampf 25 ampat 75 ampdc stretch-envelope
- :scaler rsamp amp rfamp totalamp f/ f* f*
- :duration dur make-env rs ampfs !
- harm rs c-rats !
- :frequency cfq make-oscil rs carriers !
- rs
- end-map { values }
- start dur #{ :degree 90.0 random } run-instrument
- pervib 0.0 triangle-wave ranvib 0.0 rand-interp f+ frqf env f+ { vib }
- mod vib 0.0 oscil { modsig }
- 0.0
- values each { rs }
- rs ampfs @ env rs carriers @ vib rs c-rats @ f* rs indfs @ env modsig f* f+ 0.0 oscil f* f+
- end-each
- end-run
- values each ( rs ) free throw end-each
- ;instrument
-
- : reson-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- #( #( #( 0 0 100 1 ) 1200 0.5 0.1 0.1 0 1.0 0.1 0.1 )
- #( #( 0 1 100 0 ) 2400 0.5 0.1 0.1 0 1.0 0.1 0.1 ) ) { data }
-
- now@ dur 440 0.5 #( 0 0 100 1 ) #( 0 0 100 1 ) 0.1 0.1 0.1 5 0.01 5 0.01 data reson
- dur 0.2 f+ step
- ;
-
- \ STK's feedback-fm instrument named CelloN in Sambox-land
- instrument: cellon <{ start dur pitch0 amp ampfun
- betafun beta0 beta1 betaat betadc ampat ampdc
- pitch1 glissfun glissat glissdc
- pvibfreq pvibpc pvibfun pvibat pvibdc
- rvibfreq rvibpc rvibfun -- }>
- pitch1 f0= if pitch0 else pitch1 then { pit1 }
- :frequency pitch0 make-oscil { carr }
- 0.5 -0.5 make-one-zero { low }
- :frequency pitch0 make-oscil { fmosc }
- :frequency pvibfreq :amplitude 1.0 make-triangle-wave { pvib }
- :frequency rvibfreq :amplitude 1.0 make-rand-interp { rvib }
- ampat f0> if 100 ampat dur f/ f* else 25 then { ampap }
- ampdc f0> if 100 1 ampdc dur f/ f- f* else 75 then { ampdp }
- glissat f0> if 100 glissat dur f/ f* else 25 then { glsap }
- glissdc f0> if 100 1 glissdc dur f/ f- f* else 75 then { glsdp }
- betaat f0> if 100 betaat dur f/ f* else 25 then { betap }
- betadc f0> if 100 1 betadc dur f/ f- f* else 75 then { betdp }
- pvibat f0> if 100 pvibat dur f/ f* else 25 then { pvbap }
- pvibdc f0> if 100 1 pvibdc dur f/ f- f* else 75 then { pvbdp }
- :envelope pvibfun 25 pvbap 75 pvbdp stretch-envelope
- :scaler pvibpc pitch0 f* hz->radians
- :duration dur make-env { pvibenv }
- :envelope rvibfun
- :scaler rvibpc pitch0 f* hz->radians
- :duration dur make-env { rvibenv }
- :envelope glissfun 25 glsap 75 glsdp stretch-envelope
- :scaler pit1 pitch0 f- hz->radians
- :duration dur make-env { glisenv }
- :envelope ampfun 25 ampap 75 ampdp stretch-envelope
- :scaler amp
- :duration dur make-env { amplenv }
- :envelope betafun 25 betap 75 betdp stretch-envelope
- :scaler beta1 beta0 f-
- :offset beta0
- :duration dur make-env { betaenv }
- 0.0 { fm }
- start dur #{ :degree 90.0 random } run-instrument
- pvibenv env pvib 0.0 triangle-wave f*
- rvibenv env rvib 0.0 rand-interp f* f+
- glisenv env f+ { vib }
- low betaenv env fmosc vib fm f+ 0.0 oscil f* one-zero to fm
- amplenv env carr vib fm f+ 0.0 oscil f*
- end-run
- ;instrument
-
- : cellon-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
-
- now@ dur 220 0.5
- #( 0 0 25 1 75 1 100 0 ) \ ampfun
- #( 0 0 25 1 75 1 100 0 ) \ betafun
- 0.75 1 0 0 0 0 220
- #( 0 0 25 1 75 1 100 0 ) \ glissfun
- 0 0 0 0
- #( 0 0 100 0 ) \ pvibfun
- 0 0 0 0
- #( 0 0 100 0 ) \ rvibfun
- cellon
- dur 0.2 f+ step
- ;
-
- \ JL-REVERB
- instrument: jl-reverb <{ :key -- }>
- *output* mus-channels { chans }
- *reverb* mus-channels { rev-chans }
- *reverb* reverb-dur { dur }
- *verbose* if get-func-name rev-chans chans reverb-info then
- :feedback -0.7 :feedforward 0.7 :size 2111 make-all-pass { allpass1 }
- :feedback -0.7 :feedforward 0.7 :size 673 make-all-pass { allpass2 }
- :feedback -0.7 :feedforward 0.7 :size 223 make-all-pass { allpass3 }
- :scaler 0.742 :size 9601 make-comb { comb1 }
- :scaler 0.733 :size 10007 make-comb { comb2 }
- :scaler 0.715 :size 10799 make-comb { comb3 }
- :scaler 0.697 :size 11597 make-comb { comb4 }
- :size 0.013 seconds->samples make-delay { outdel1 }
- chans 1 > if :size 0.011 seconds->samples make-delay else #f then { outdel2 }
- chans 2 > if :size 0.015 seconds->samples make-delay else #f then { outdel3 }
- chans 3 > if :size 0.017 seconds->samples make-delay else #f then { outdel4 }
- 0.0 { allpass-sum }
- 0.0 { all-sums }
- 0.0 dur run
- 0.0 rev-chans 0 ?do j i *reverb* in-any f+ loop { in-val }
- allpass3 allpass2 allpass1 in-val 0.0 all-pass 0.0 all-pass 0.0 all-pass to allpass-sum
- comb1 allpass-sum 0.0 comb
- comb2 allpass-sum 0.0 comb f+
- comb3 allpass-sum 0.0 comb f+
- comb4 allpass-sum 0.0 comb f+ to all-sums
- i outdel1 all-sums 0.0 delay *output* outa drop
- outdel2 if i outdel2 all-sums 0.0 delay *output* outb drop then
- outdel3 if i outdel3 all-sums 0.0 delay *output* outc drop then
- outdel4 if i outdel4 all-sums 0.0 delay *output* outd drop then
- loop
- ;instrument
-
- \ GRAN-SYNTH
- instrument: gran-synth <{ start dur freq grain-dur interval amp -- }>
- :envelope #( 0 0 25 1 75 1 100 0 ) :duration grain-dur make-env { grain-env }
- :frequency freq make-oscil { carrier }
- grain-dur interval fmax mus-srate f* fceil f>s { grain-size }
- :frequency interval 1/f :size grain-size make-wave-train { grains }
- grains mus-data map! grain-env env carrier 0.0 0.0 oscil f* end-map drop
- start dur #{ :degree 90.0 random } run-instrument
- grains 0.0 wave-train amp f*
- end-run
- ;instrument
-
- : gran-synth-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 100 0.0189 0.02 0.4 gran-synth
- dur 0.2 f+ step
- ;
-
- \ TOUCH-TONE
- \
- \ clm/ugex.ins
- instrument: touch-tone <{ numbers :key start 0.0 -- }>
- doc" (see clm/ugex.ins) NUMBERS is an array with phone numbers.\n\
- #( 8 5 7 7 5 8 ) <'> touch-tone with-sound"
- #( 0 697 697 697 770 770 770 852 852 852 941 941 941 ) { tt1 }
- #( 0 1209 1336 1477 1209 1336 1477 1209 1336 1477 1209 1336 1477 ) { tt2 }
- numbers each ( numb ) dup 0= if drop 11 then { idx }
- :frequency tt1 idx array-ref make-oscil { frq1 }
- :frequency tt2 idx array-ref make-oscil { frq2 }
- i 0.3 f* start f+ 0.2 #{ :degree 90.0 random } run-instrument
- frq1 0.0 0.0 oscil frq2 0.0 0.0 oscil f+ 0.25 f*
- end-run
- end-each
- ;instrument
-
- : touch-tone-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- #( 8 5 7 7 5 8 ) :start now@ touch-tone
- dur 6 ( numbers ) f* 0.2 f+ step
- ;
-
- \ SPECTRA
- instrument: spectra <{ start dur freq amp
- :optional
- parts #( 1 1 2 0.5 )
- ampenv #( 0 0 50 1 100 0 )
- vibamp 0.005
- vibfrq 5.0
- degr 0.0
- dist 1.0
- rev-amt 0.005 -- }>
- :frequency freq :wave parts #f #f partials->wave make-table-lookup { s }
- :envelope ampenv :scaler amp :duration dur make-env { ampf }
- freq hz->radians vibamp f* { vamp }
- :frequency vibfrq :amplitude vamp make-triangle-wave { pervib }
- :frequency vibfrq 1.0 f+ :amplitude vamp make-rand-interp { ranvib }
- start dur #{ :degree degr :distance dist :reverb-amount rev-amt } run-instrument
- s pervib 0.0 triangle-wave ranvib 0.0 rand-interp f+ table-lookup ampf env f*
- end-run
- ;instrument
-
- : spectra-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- #( 1.00 0.1132 2.00 0.0252 3.00 0.0292 4.01 0.0136 5.03 0.0045
- 6.06 0.0022 7.11 0.0101 8.17 0.0004 9.23 0.0010 10.33 0.0012
- 11.44 0.0013 12.58 0.0011 13.75 0.0002 14.93 0.0005 16.14 0.0002 ) { p-a4 }
- now@ dur 440 2.0 p-a4 #( 0 0 1 1 5 0.9 12 0.5 25 0.25 100 0 ) spectra
- dur 0.2 f+ step
- ;
-
- \ TWO-TAB
- \
- \ interpolate between two waveforms (this could be extended to
- \ implement all the various wavetable-based synthesis techniques).
- instrument: two-tab <{ start dur freq amp
- :optional
- part1 #( 1.0 1.0 2.0 0.5 )
- part2 #( 1.0 0.0 3.0 1.0 )
- ampenv #( 0 0 50 1 100 0 )
- interpenv #( 0 1 100 0 )
- vibamp 0.005
- vibfrq 5.0
- degr 0.0
- dist 1.0
- rev-amt 0.005 -- }>
- :frequency freq :wave part1 #f #f partials->wave make-table-lookup { s1 }
- :frequency freq :wave part2 #f #f partials->wave make-table-lookup { s2 }
- :envelope ampenv :scaler amp :duration dur make-env { ampf }
- :envelope interpenv :duration dur make-env { interpf }
- freq hz->radians vibamp f* { vamp }
- :frequency vibfrq :amplitude vamp make-triangle-wave { pervib }
- :frequency vibfrq 1.0 f+ :amplitude vamp make-rand-interp { ranvib }
- start dur #{ :degree degr :distance dist :reverb-amount rev-amt } run-instrument
- pervib 0.0 triangle-wave ranvib 0.0 rand-interp f+ { vib }
- interpf env { intrp }
- s1 vib table-lookup intrp f* s2 vib table-lookup 1.0 intrp f- f* f+ ampf env f*
- end-run
- ;instrument
-
- : two-tab-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.5 two-tab
- dur 0.2 f+ step
- ;
-
- \ LBJ-PIANO
- #( #( 1.97 0.0326 2.99 0.0086 3.95 0.0163 4.97 0.0178 5.98 0.0177
- 6.95 0.0315 8.02 0.0001 8.94 0.0076 9.96 0.0134 10.99 0.0284
- 11.98 0.0229 13.02 0.0229 13.89 0.0010 15.06 0.0090 16.00 0.0003
- 17.08 0.0078 18.16 0.0064 19.18 0.0129 20.21 0.0085 21.27 0.0225
- 22.32 0.0061 23.41 0.0102 24.48 0.0005 25.56 0.0016 26.64 0.0018
- 27.70 0.0113 28.80 0.0111 29.91 0.0158 31.06 0.0093 32.17 0.0017
- 33.32 0.0002 34.42 0.0018 35.59 0.0027 36.74 0.0055 37.90 0.0037
- 39.06 0.0064 40.25 0.0033 41.47 0.0014 42.53 0.0004 43.89 0.0010
- 45.12 0.0039 46.33 0.0039 47.64 0.0009 48.88 0.0016 50.13 0.0006
- 51.37 0.0010 52.70 0.0002 54.00 0.0004 55.30 0.0008 56.60 0.0025
- 57.96 0.0010 59.30 0.0012 60.67 0.0011 61.99 0.0003 62.86 0.0001
- 64.36 0.0005 64.86 0.0001 66.26 0.0004 67.70 0.0006 68.94 0.0002
- 70.10 0.0001 70.58 0.0002 72.01 0.0007 73.53 0.0006 75.00 0.0002
- 77.03 0.0005 78.00 0.0002 79.57 0.0006 81.16 0.0005 82.70 0.0005
- 84.22 0.0003 85.41 0.0002 87.46 0.0001 90.30 0.0001 94.02 0.0001
- 95.26 0.0002 109.39 0.0003 )
- #( 1.98 0.0194 2.99 0.0210 3.97 0.0276 4.96 0.0297 5.96 0.0158
- 6.99 0.0207 8.01 0.0009 9.00 0.0101 10.00 0.0297 11.01 0.0289
- 12.02 0.0211 13.04 0.0127 14.07 0.0061 15.08 0.0174 16.13 0.0009
- 17.12 0.0093 18.16 0.0117 19.21 0.0122 20.29 0.0108 21.30 0.0077
- 22.38 0.0132 23.46 0.0073 24.14 0.0002 25.58 0.0026 26.69 0.0035
- 27.77 0.0053 28.88 0.0024 30.08 0.0027 31.13 0.0075 32.24 0.0027
- 33.36 0.0004 34.42 0.0004 35.64 0.0019 36.78 0.0037 38.10 0.0009
- 39.11 0.0027 40.32 0.0010 41.51 0.0013 42.66 0.0019 43.87 0.0007
- 45.13 0.0017 46.35 0.0019 47.65 0.0021 48.89 0.0014 50.18 0.0023
- 51.42 0.0015 52.73 0.0002 54.00 0.0005 55.34 0.0006 56.60 0.0010
- 57.96 0.0016 58.86 0.0005 59.30 0.0004 60.75 0.0005 62.22 0.0003
- 63.55 0.0005 64.82 0.0003 66.24 0.0003 67.63 0.0011 69.09 0.0007
- 70.52 0.0004 72.00 0.0005 73.50 0.0008 74.95 0.0003 77.13 0.0013
- 78.02 0.0002 79.48 0.0004 82.59 0.0004 84.10 0.0003 )
- #( 2.00 0.0313 2.99 0.0109 4.00 0.0215 5.00 0.0242 5.98 0.0355
- 7.01 0.0132 8.01 0.0009 9.01 0.0071 10.00 0.0258 11.03 0.0221
- 12.02 0.0056 13.06 0.0196 14.05 0.0160 15.11 0.0107 16.11 0.0003
- 17.14 0.0111 18.21 0.0085 19.23 0.0010 20.28 0.0048 21.31 0.0128
- 22.36 0.0051 23.41 0.0041 24.05 0.0006 25.54 0.0019 26.62 0.0028
- 27.72 0.0034 28.82 0.0062 29.89 0.0039 30.98 0.0058 32.08 0.0011
- 33.21 0.0002 34.37 0.0008 35.46 0.0018 36.62 0.0036 37.77 0.0018
- 38.92 0.0042 40.07 0.0037 41.23 0.0011 42.67 0.0003 43.65 0.0018
- 44.68 0.0025 45.99 0.0044 47.21 0.0051 48.40 0.0044 49.67 0.0005
- 50.88 0.0019 52.15 0.0003 53.42 0.0008 54.69 0.0010 55.98 0.0005
- 57.26 0.0013 58.53 0.0027 59.83 0.0011 61.21 0.0027 62.54 0.0003
- 63.78 0.0003 65.20 0.0001 66.60 0.0006 67.98 0.0008 69.37 0.0019
- 70.73 0.0007 72.14 0.0004 73.62 0.0002 74.40 0.0003 76.52 0.0006
- 77.97 0.0002 79.49 0.0004 80.77 0.0003 81.00 0.0001 82.47 0.0005
- 83.97 0.0001 87.27 0.0002 )
- #( 2.00 0.0257 2.99 0.0142 3.97 0.0202 4.95 0.0148 5.95 0.0420
- 6.95 0.0037 7.94 0.0004 8.94 0.0172 9.95 0.0191 10.96 0.0115
- 11.97 0.0059 12.98 0.0140 14.00 0.0178 15.03 0.0121 16.09 0.0002
- 17.07 0.0066 18.08 0.0033 19.15 0.0022 20.18 0.0057 21.22 0.0077
- 22.29 0.0037 23.33 0.0066 24.97 0.0002 25.49 0.0019 26.55 0.0042
- 27.61 0.0043 28.73 0.0038 29.81 0.0084 30.91 0.0040 32.03 0.0025
- 33.14 0.0005 34.26 0.0003 35.38 0.0019 36.56 0.0037 37.68 0.0049
- 38.86 0.0036 40.11 0.0011 41.28 0.0008 42.50 0.0004 43.60 0.0002
- 44.74 0.0022 45.99 0.0050 47.20 0.0009 48.40 0.0036 49.68 0.0004
- 50.92 0.0009 52.17 0.0005 53.46 0.0007 54.76 0.0006 56.06 0.0005
- 57.34 0.0011 58.67 0.0005 59.95 0.0015 61.37 0.0008 62.72 0.0004
- 65.42 0.0009 66.96 0.0003 68.18 0.0003 69.78 0.0003 71.21 0.0004
- 72.45 0.0002 74.22 0.0003 75.44 0.0001 76.53 0.0003 78.31 0.0004
- 79.83 0.0003 80.16 0.0001 81.33 0.0003 82.44 0.0001 83.17 0.0002
- 84.81 0.0003 85.97 0.0003 89.08 0.0001 90.70 0.0002 92.30 0.0002
- 95.59 0.0002 97.22 0.0003 98.86 0.0001 108.37 0.0001 125.54 0.0001 )
- #( 1.99 0.0650 3.03 0.0040 4.03 0.0059 5.02 0.0090 5.97 0.0227
- 6.98 0.0050 8.04 0.0020 9.00 0.0082 9.96 0.0078 11.01 0.0056
- 12.01 0.0095 13.02 0.0050 14.04 0.0093 15.08 0.0064 16.14 0.0017
- 17.06 0.0020 18.10 0.0025 19.14 0.0023 20.18 0.0015 21.24 0.0032
- 22.29 0.0029 23.32 0.0014 24.37 0.0005 25.43 0.0030 26.50 0.0022
- 27.60 0.0027 28.64 0.0024 29.76 0.0035 30.81 0.0136 31.96 0.0025
- 33.02 0.0003 34.13 0.0005 35.25 0.0007 36.40 0.0014 37.51 0.0020
- 38.64 0.0012 39.80 0.0019 40.97 0.0004 42.09 0.0003 43.24 0.0003
- 44.48 0.0002 45.65 0.0024 46.86 0.0005 48.07 0.0013 49.27 0.0008
- 50.49 0.0006 52.95 0.0001 54.23 0.0005 55.45 0.0004 56.73 0.0001
- 58.03 0.0003 59.29 0.0002 60.59 0.0003 62.04 0.0002 65.89 0.0002
- 67.23 0.0002 68.61 0.0002 69.97 0.0004 71.36 0.0005 85.42 0.0001 )
- #( 1.98 0.0256 2.96 0.0158 3.95 0.0310 4.94 0.0411 5.95 0.0238
- 6.94 0.0152 7.93 0.0011 8.95 0.0185 9.92 0.0166 10.93 0.0306
- 11.94 0.0258 12.96 0.0202 13.97 0.0403 14.95 0.0228 15.93 0.0005
- 17.01 0.0072 18.02 0.0034 19.06 0.0028 20.08 0.0124 21.13 0.0137
- 22.16 0.0102 23.19 0.0058 23.90 0.0013 25.30 0.0039 26.36 0.0039
- 27.41 0.0025 28.47 0.0071 29.64 0.0031 30.60 0.0027 31.71 0.0021
- 32.84 0.0003 33.82 0.0002 35.07 0.0019 36.09 0.0054 37.20 0.0038
- 38.33 0.0024 39.47 0.0055 40.55 0.0016 41.77 0.0006 42.95 0.0002
- 43.27 0.0018 44.03 0.0006 45.25 0.0019 46.36 0.0033 47.50 0.0024
- 48.87 0.0012 50.03 0.0016 51.09 0.0004 53.52 0.0017 54.74 0.0012
- 56.17 0.0003 57.40 0.0011 58.42 0.0020 59.70 0.0007 61.29 0.0008
- 62.56 0.0003 63.48 0.0002 64.83 0.0002 66.12 0.0012 67.46 0.0017
- 68.81 0.0003 69.13 0.0003 70.53 0.0002 71.84 0.0001 73.28 0.0002
- 75.52 0.0010 76.96 0.0005 77.93 0.0003 78.32 0.0003 79.73 0.0003
- 81.69 0.0002 82.52 0.0001 84.01 0.0001 84.61 0.0002 86.88 0.0001
- 88.36 0.0002 89.85 0.0002 91.35 0.0003 92.86 0.0002 93.40 0.0001
- 105.28 0.0002 106.22 0.0002 107.45 0.0001 108.70 0.0003 122.08 0.0002 )
- #( 1.97 0.0264 2.97 0.0211 3.98 0.0234 4.98 0.0307 5.96 0.0085
- 6.94 0.0140 7.93 0.0005 8.96 0.0112 9.96 0.0209 10.98 0.0194
- 11.98 0.0154 12.99 0.0274 13.99 0.0127 15.01 0.0101 15.99 0.0002
- 17.04 0.0011 18.08 0.0032 19.14 0.0028 20.12 0.0054 21.20 0.0053
- 22.13 0.0028 23.22 0.0030 24.32 0.0006 25.24 0.0004 26.43 0.0028
- 27.53 0.0048 28.52 0.0039 29.54 0.0047 30.73 0.0044 31.82 0.0007
- 32.94 0.0008 34.04 0.0012 35.13 0.0018 36.29 0.0007 37.35 0.0075
- 38.51 0.0045 39.66 0.0014 40.90 0.0004 41.90 0.0002 43.08 0.0002
- 44.24 0.0017 45.36 0.0013 46.68 0.0020 47.79 0.0015 48.98 0.0010
- 50.21 0.0012 51.34 0.0001 53.82 0.0003 55.09 0.0004 56.23 0.0005
- 57.53 0.0004 58.79 0.0005 59.30 0.0002 60.03 0.0002 61.40 0.0003
- 62.84 0.0001 66.64 0.0001 67.97 0.0001 69.33 0.0001 70.68 0.0001
- 73.57 0.0002 75.76 0.0002 76.45 0.0001 79.27 0.0001 80.44 0.0002
- 81.87 0.0002 )
- #( 2.00 0.0311 2.99 0.0086 3.99 0.0266 4.97 0.0123 5.98 0.0235
- 6.97 0.0161 7.97 0.0008 8.96 0.0088 9.96 0.0621 10.99 0.0080
- 11.99 0.0034 12.99 0.0300 14.03 0.0228 15.04 0.0105 16.03 0.0004
- 17.06 0.0036 18.09 0.0094 18.95 0.0009 20.17 0.0071 21.21 0.0161
- 22.25 0.0106 23.28 0.0104 24.33 0.0008 25.38 0.0030 26.46 0.0035
- 27.50 0.0026 28.59 0.0028 29.66 0.0128 30.75 0.0139 31.81 0.0038
- 32.93 0.0006 34.04 0.0004 35.16 0.0005 36.25 0.0023 37.35 0.0012
- 38.46 0.0021 39.59 0.0035 40.71 0.0006 41.86 0.0007 42.42 0.0001
- 43.46 0.0003 44.17 0.0032 45.29 0.0013 46.57 0.0004 47.72 0.0011
- 48.79 0.0005 50.11 0.0005 51.29 0.0003 52.47 0.0002 53.68 0.0004
- 55.02 0.0005 56.18 0.0003 57.41 0.0003 58.75 0.0007 59.33 0.0009
- 60.00 0.0004 61.34 0.0001 64.97 0.0003 65.20 0.0002 66.48 0.0002
- 67.83 0.0002 68.90 0.0003 70.25 0.0003 71.59 0.0002 73.68 0.0001
- 75.92 0.0001 77.08 0.0002 78.45 0.0002 81.56 0.0002 82.99 0.0001
- 88.39 0.0001 )
- #( 0.97 0.0059 1.98 0.0212 2.99 0.0153 3.99 0.0227 4.96 0.0215
- 5.97 0.0153 6.98 0.0085 7.98 0.0007 8.97 0.0179 9.98 0.0512
- 10.98 0.0322 12.00 0.0098 13.02 0.0186 14.00 0.0099 15.05 0.0109
- 15.88 0.0011 17.07 0.0076 18.11 0.0071 19.12 0.0045 20.16 0.0038
- 21.23 0.0213 22.27 0.0332 23.34 0.0082 24.34 0.0014 25.42 0.0024
- 26.47 0.0012 27.54 0.0014 28.60 0.0024 29.72 0.0026 30.10 0.0008
- 31.91 0.0021 32.13 0.0011 33.02 0.0007 34.09 0.0014 35.17 0.0007
- 36.27 0.0024 37.39 0.0029 38.58 0.0014 39.65 0.0017 40.95 0.0012
- 41.97 0.0004 42.43 0.0002 43.49 0.0001 44.31 0.0012 45.42 0.0031
- 46.62 0.0017 47.82 0.0013 49.14 0.0013 50.18 0.0010 51.54 0.0003
- 53.90 0.0006 55.06 0.0010 56.31 0.0003 57.63 0.0001 59.02 0.0003
- 60.09 0.0004 60.35 0.0004 61.62 0.0009 63.97 0.0001 65.19 0.0001
- 65.54 0.0002 66.92 0.0002 67.94 0.0002 69.17 0.0003 69.60 0.0004
- 70.88 0.0002 72.24 0.0002 76.12 0.0001 78.94 0.0001 81.75 0.0001
- 82.06 0.0001 83.53 0.0001 90.29 0.0002 91.75 0.0001 92.09 0.0002
- 93.28 0.0001 97.07 0.0001 )
- #( 1.98 0.0159 2.98 0.1008 3.98 0.0365 4.98 0.0133 5.97 0.0101
- 6.97 0.0115 7.97 0.0007 8.99 0.0349 10.01 0.0342 11.01 0.0236
- 12.00 0.0041 13.02 0.0114 14.05 0.0137 15.06 0.0100 16.05 0.0007
- 17.04 0.0009 18.12 0.0077 19.15 0.0023 20.12 0.0017 21.24 0.0113
- 22.26 0.0126 23.30 0.0093 24.36 0.0007 25.43 0.0007 26.47 0.0009
- 27.55 0.0013 28.59 0.0025 29.61 0.0010 30.77 0.0021 31.86 0.0023
- 32.96 0.0003 34.03 0.0007 35.06 0.0005 36.20 0.0006 37.34 0.0006
- 38.36 0.0009 39.60 0.0016 40.69 0.0005 41.77 0.0002 42.92 0.0002
- 44.02 0.0003 45.24 0.0006 46.33 0.0004 47.50 0.0007 48.71 0.0007
- 49.87 0.0002 51.27 0.0002 53.42 0.0003 55.88 0.0003 57.10 0.0004
- 58.34 0.0002 59.86 0.0003 61.13 0.0003 67.18 0.0001 68.50 0.0001
- 71.17 0.0001 83.91 0.0001 90.55 0.0001 )
- #( 0.98 0.0099 2.00 0.0181 2.99 0.0353 3.98 0.0285 4.97 0.0514
- 5.96 0.0402 6.96 0.0015 7.98 0.0012 8.98 0.0175 9.98 0.0264
- 10.98 0.0392 11.98 0.0236 13.00 0.0153 14.04 0.0049 15.00 0.0089
- 16.01 0.0001 17.03 0.0106 18.03 0.0028 19.05 0.0024 20.08 0.0040
- 21.11 0.0103 22.12 0.0104 23.20 0.0017 24.19 0.0008 25.20 0.0007
- 26.24 0.0011 27.36 0.0009 27.97 0.0030 29.40 0.0044 30.37 0.0019
- 31.59 0.0017 32.65 0.0008 33.59 0.0005 34.79 0.0009 35.75 0.0027
- 36.88 0.0035 37.93 0.0039 39.00 0.0031 40.08 0.0025 41.16 0.0010
- 43.25 0.0004 44.52 0.0012 45.62 0.0023 45.85 0.0012 47.00 0.0006
- 47.87 0.0008 48.99 0.0003 50.48 0.0003 51.62 0.0001 52.43 0.0001
- 53.56 0.0002 54.76 0.0002 56.04 0.0002 56.68 0.0006 57.10 0.0003
- 58.28 0.0005 59.47 0.0003 59.96 0.0002 60.67 0.0001 63.08 0.0002
- 64.29 0.0002 66.72 0.0001 67.97 0.0001 68.65 0.0001 70.43 0.0001
- 79.38 0.0001 80.39 0.0001 82.39 0.0001 )
- #( 1.00 0.0765 1.99 0.0151 2.99 0.0500 3.99 0.0197 5.00 0.0260
- 6.00 0.0145 6.98 0.0128 7.97 0.0004 8.98 0.0158 9.99 0.0265
- 11.02 0.0290 12.02 0.0053 13.03 0.0242 14.03 0.0103 15.06 0.0054
- 16.04 0.0006 17.08 0.0008 18.10 0.0058 19.16 0.0011 20.16 0.0055
- 21.18 0.0040 22.20 0.0019 23.22 0.0014 24.05 0.0005 25.31 0.0019
- 26.38 0.0018 27.44 0.0022 28.45 0.0024 29.57 0.0073 30.58 0.0032
- 31.66 0.0071 32.73 0.0015 33.85 0.0005 34.96 0.0003 36.00 0.0020
- 37.11 0.0018 38.18 0.0055 39.23 0.0006 40.33 0.0004 41.52 0.0003
- 43.41 0.0028 45.05 0.0003 45.99 0.0002 47.07 0.0003 48.52 0.0002
- 49.48 0.0003 50.63 0.0003 51.81 0.0002 54.05 0.0002 55.24 0.0001
- 56.62 0.0001 57.81 0.0004 59.16 0.0013 60.23 0.0003 66.44 0.0001
- 68.99 0.0004 75.49 0.0001 87.56 0.0004 )
- #( 0.98 0.0629 1.99 0.0232 2.98 0.0217 4.00 0.0396 4.98 0.0171
- 5.97 0.0098 6.99 0.0167 7.99 0.0003 8.98 0.0192 9.98 0.0266
- 10.99 0.0256 12.01 0.0061 13.02 0.0135 14.02 0.0062 15.05 0.0158
- 16.06 0.0018 17.08 0.0101 18.09 0.0053 19.11 0.0074 20.13 0.0020
- 21.17 0.0052 22.22 0.0077 23.24 0.0035 24.00 0.0009 25.32 0.0016
- 26.40 0.0022 27.43 0.0005 28.55 0.0026 29.60 0.0026 30.65 0.0010
- 31.67 0.0019 32.77 0.0008 33.81 0.0003 34.91 0.0003 36.01 0.0005
- 37.11 0.0010 38.20 0.0014 39.29 0.0039 40.43 0.0012 41.50 0.0006
- 43.38 0.0017 43.75 0.0002 44.94 0.0005 46.13 0.0002 47.11 0.0003
- 48.28 0.0005 48.42 0.0005 49.44 0.0003 50.76 0.0004 51.93 0.0002
- 54.15 0.0003 55.31 0.0005 55.50 0.0003 56.98 0.0003 57.90 0.0004
- 60.33 0.0002 61.39 0.0001 61.59 0.0001 65.09 0.0002 66.34 0.0001
- 68.85 0.0001 70.42 0.0002 71.72 0.0001 73.05 0.0003 79.65 0.0001
- 85.28 0.0002 93.52 0.0001 )
- #( 1.02 0.0185 1.99 0.0525 2.98 0.0613 3.99 0.0415 4.98 0.0109
- 5.97 0.0248 6.99 0.0102 7.98 0.0005 8.98 0.0124 9.99 0.0103
- 10.99 0.0124 12.00 0.0016 13.01 0.0029 14.03 0.0211 15.04 0.0128
- 16.07 0.0021 17.09 0.0009 18.09 0.0043 19.14 0.0022 20.13 0.0016
- 21.20 0.0045 22.21 0.0088 23.26 0.0046 24.29 0.0013 25.35 0.0009
- 26.39 0.0028 27.49 0.0009 28.51 0.0006 29.58 0.0012 30.70 0.0010
- 31.74 0.0019 32.75 0.0002 33.85 0.0001 34.95 0.0005 36.02 0.0003
- 37.16 0.0009 38.25 0.0018 39.35 0.0008 40.54 0.0004 41.61 0.0002
- 43.40 0.0004 43.74 0.0003 45.05 0.0001 46.11 0.0003 47.40 0.0002
- 48.36 0.0004 49.55 0.0004 50.72 0.0002 52.00 0.0001 55.58 0.0002
- 57.02 0.0001 57.98 0.0002 59.13 0.0003 61.56 0.0001 66.56 0.0001
- 87.65 0.0002 )
- #( 1.00 0.0473 1.99 0.0506 2.99 0.0982 3.99 0.0654 5.00 0.0196
- 5.99 0.0094 6.99 0.0118 7.93 0.0001 8.99 0.0057 10.01 0.0285
- 11.01 0.0142 12.03 0.0032 13.03 0.0056 14.06 0.0064 15.06 0.0059
- 16.11 0.0005 17.09 0.0033 18.14 0.0027 19.15 0.0014 20.17 0.0010
- 21.21 0.0059 22.26 0.0043 23.31 0.0031 24.31 0.0018 25.33 0.0009
- 26.41 0.0005 27.47 0.0015 28.53 0.0015 29.58 0.0041 30.65 0.0025
- 31.73 0.0011 32.83 0.0010 34.98 0.0003 36.07 0.0009 37.23 0.0001
- 38.26 0.0020 39.41 0.0014 40.53 0.0005 41.40 0.0003 42.80 0.0002
- 43.48 0.0028 43.93 0.0001 45.03 0.0003 46.18 0.0007 47.41 0.0001
- 48.57 0.0002 49.67 0.0001 50.83 0.0002 54.39 0.0001 55.58 0.0002
- 57.97 0.0005 58.11 0.0002 59.21 0.0001 60.42 0.0002 61.66 0.0001 )
- #( 1.00 0.0503 2.00 0.0963 2.99 0.1304 3.99 0.0218 4.98 0.0041
- 5.98 0.0292 6.98 0.0482 7.99 0.0005 8.99 0.0280 10.00 0.0237
- 11.00 0.0152 12.02 0.0036 12.95 0.0022 14.06 0.0111 15.07 0.0196
- 16.08 0.0016 17.11 0.0044 18.13 0.0073 19.17 0.0055 20.19 0.0028
- 21.20 0.0012 22.27 0.0068 23.30 0.0036 24.35 0.0012 25.35 0.0002
- 26.46 0.0005 27.47 0.0005 28.59 0.0009 29.65 0.0021 30.70 0.0020
- 31.78 0.0012 32.89 0.0010 35.06 0.0005 36.16 0.0008 37.27 0.0010
- 38.36 0.0010 39.47 0.0014 40.58 0.0004 41.43 0.0007 41.82 0.0003
- 43.48 0.0008 44.53 0.0001 45.25 0.0003 46.43 0.0002 47.46 0.0002
- 48.76 0.0005 49.95 0.0004 50.96 0.0002 51.12 0.0002 52.33 0.0001
- 54.75 0.0001 55.75 0.0002 56.90 0.0002 58.17 0.0002 59.40 0.0004
- 60.62 0.0002 65.65 0.0001 66.91 0.0002 69.91 0.0001 71.25 0.0002 )
- #( 1.00 0.1243 1.98 0.1611 3.00 0.0698 3.98 0.0390 5.00 0.0138
- 5.99 0.0154 7.01 0.0287 8.01 0.0014 9.01 0.0049 10.00 0.0144
- 11.01 0.0055 12.05 0.0052 13.01 0.0011 14.05 0.0118 15.07 0.0154
- 16.12 0.0028 17.14 0.0061 18.25 0.0007 19.22 0.0020 20.24 0.0011
- 21.27 0.0029 22.30 0.0046 23.34 0.0049 24.35 0.0004 25.45 0.0003
- 26.47 0.0007 27.59 0.0008 28.16 0.0009 29.12 0.0002 29.81 0.0006
- 30.81 0.0009 31.95 0.0004 33.00 0.0011 34.12 0.0005 35.18 0.0003
- 36.30 0.0008 37.38 0.0003 38.55 0.0003 39.64 0.0006 40.77 0.0007
- 41.52 0.0006 41.89 0.0006 43.04 0.0011 43.60 0.0009 44.31 0.0002
- 45.68 0.0002 46.56 0.0003 47.60 0.0001 48.83 0.0006 50.01 0.0003
- 51.27 0.0003 56.04 0.0005 57.21 0.0003 58.56 0.0004 59.83 0.0003
- 61.05 0.0001 62.20 0.0001 67.37 0.0002 76.53 0.0001 )
- #( 0.99 0.0222 1.99 0.0678 2.99 0.0683 4.00 0.0191 5.00 0.0119
- 6.01 0.0232 6.98 0.0336 7.99 0.0082 9.01 0.0201 10.01 0.0189
- 11.01 0.0041 12.01 0.0053 13.05 0.0154 14.04 0.0159 15.06 0.0092
- 16.11 0.0038 17.12 0.0014 18.15 0.0091 19.16 0.0006 20.30 0.0012
- 21.25 0.0061 22.28 0.0099 23.34 0.0028 24.38 0.0012 25.43 0.0016
- 26.49 0.0048 27.55 0.0025 28.62 0.0015 29.71 0.0032 30.78 0.0077
- 31.88 0.0011 32.97 0.0007 34.08 0.0006 35.16 0.0008 36.28 0.0004
- 37.41 0.0006 38.54 0.0005 39.62 0.0002 40.80 0.0003 41.93 0.0001
- 43.06 0.0002 44.21 0.0003 45.38 0.0002 46.54 0.0007 47.78 0.0003
- 48.95 0.0004 50.10 0.0003 51.37 0.0002 53.79 0.0003 56.20 0.0001
- 58.71 0.0002 66.47 0.0003 )
- #( 1.01 0.0241 1.99 0.1011 2.98 0.0938 3.98 0.0081 4.99 0.0062
- 5.99 0.0291 6.99 0.0676 7.59 0.0004 8.98 0.0127 9.99 0.0112
- 10.99 0.0142 12.00 0.0029 13.02 0.0071 14.02 0.0184 15.03 0.0064
- 16.07 0.0010 17.09 0.0011 18.11 0.0010 19.15 0.0060 20.19 0.0019
- 21.24 0.0025 22.29 0.0013 23.31 0.0050 25.41 0.0030 26.50 0.0018
- 27.53 0.0006 28.63 0.0012 29.66 0.0013 30.77 0.0020 31.84 0.0006
- 34.04 0.0001 35.14 0.0001 36.32 0.0004 37.41 0.0007 38.53 0.0007
- 39.67 0.0009 40.85 0.0003 45.49 0.0002 46.65 0.0001 47.81 0.0004
- 49.01 0.0002 53.91 0.0002 55.14 0.0002 57.69 0.0002 )
- #( 1.00 0.0326 2.00 0.1066 2.99 0.1015 4.00 0.0210 4.97 0.0170
- 5.99 0.0813 6.98 0.0820 7.96 0.0011 8.99 0.0248 10.03 0.0107
- 11.01 0.0126 12.01 0.0027 13.01 0.0233 14.04 0.0151 15.05 0.0071
- 16.04 0.0002 17.10 0.0061 18.12 0.0059 19.15 0.0087 20.23 0.0005
- 21.25 0.0040 22.30 0.0032 23.35 0.0004 24.40 0.0001 25.45 0.0030
- 26.54 0.0022 27.60 0.0003 28.70 0.0009 29.80 0.0029 30.85 0.0006
- 31.97 0.0006 34.19 0.0004 35.30 0.0003 36.43 0.0007 37.56 0.0005
- 38.68 0.0019 39.88 0.0013 41.00 0.0003 43.35 0.0003 44.51 0.0002
- 45.68 0.0006 46.93 0.0010 48.11 0.0006 49.29 0.0003 55.58 0.0002 )
- #( 0.98 0.0113 1.99 0.0967 3.00 0.0719 3.98 0.0345 4.98 0.0121
- 6.00 0.0621 7.00 0.0137 7.98 0.0006 9.01 0.0314 10.01 0.0171
- 11.02 0.0060 12.03 0.0024 13.05 0.0077 14.07 0.0040 15.12 0.0032
- 16.13 0.0004 17.15 0.0011 18.20 0.0028 19.18 0.0003 20.26 0.0003
- 21.31 0.0025 22.35 0.0021 23.39 0.0005 25.55 0.0002 26.62 0.0014
- 27.70 0.0003 28.78 0.0005 29.90 0.0030 31.01 0.0011 32.12 0.0005
- 34.31 0.0001 35.50 0.0002 36.62 0.0002 37.76 0.0005 38.85 0.0002
- 40.09 0.0004 43.60 0.0001 44.73 0.0002 46.02 0.0002 47.25 0.0004
- 48.44 0.0004 )
- #( 0.99 0.0156 1.98 0.0846 2.98 0.0178 3.98 0.0367 4.98 0.0448
- 5.98 0.0113 6.99 0.0189 8.00 0.0011 9.01 0.0247 10.02 0.0089
- 11.01 0.0184 12.03 0.0105 13.00 0.0039 14.07 0.0116 15.09 0.0078
- 16.13 0.0008 17.14 0.0064 18.19 0.0029 19.22 0.0028 20.25 0.0017
- 21.32 0.0043 22.37 0.0055 23.42 0.0034 24.48 0.0004 25.54 0.0002
- 26.61 0.0017 27.70 0.0011 28.80 0.0002 29.89 0.0019 30.97 0.0028
- 32.09 0.0007 34.30 0.0002 35.44 0.0003 36.55 0.0001 37.69 0.0004
- 38.93 0.0002 40.05 0.0005 41.20 0.0005 42.37 0.0002 43.54 0.0003
- 44.73 0.0001 45.95 0.0002 47.16 0.0001 48.43 0.0005 49.65 0.0004
- 55.90 0.0002 59.81 0.0004 )
- #( 1.01 0.0280 2.00 0.0708 2.99 0.0182 3.99 0.0248 4.98 0.0245
- 5.98 0.0279 6.98 0.0437 7.99 0.0065 8.99 0.0299 10.00 0.0073
- 10.99 0.0011 12.03 0.0122 13.03 0.0028 14.08 0.0044 15.11 0.0097
- 16.15 0.0010 17.17 0.0025 18.19 0.0017 19.24 0.0008 20.28 0.0040
- 21.32 0.0024 22.38 0.0008 23.46 0.0032 24.52 0.0010 25.59 0.0008
- 26.68 0.0009 27.76 0.0012 28.88 0.0003 29.95 0.0005 31.05 0.0017
- 32.14 0.0002 33.29 0.0003 37.88 0.0002 39.03 0.0002 40.19 0.0004
- 41.37 0.0003 43.74 0.0002 46.20 0.0001 48.68 0.0001 49.93 0.0001
- 51.19 0.0002 )
- #( 1.00 0.0225 1.99 0.0921 2.98 0.0933 3.99 0.0365 4.99 0.0100
- 5.98 0.0213 6.98 0.0049 7.98 0.0041 8.98 0.0090 9.99 0.0068
- 11.01 0.0040 12.03 0.0086 13.02 0.0015 14.04 0.0071 15.09 0.0082
- 16.14 0.0011 17.15 0.0014 18.18 0.0010 19.26 0.0013 20.26 0.0005
- 21.33 0.0006 22.36 0.0011 23.46 0.0016 24.52 0.0004 25.59 0.0002
- 26.70 0.0006 27.78 0.0007 28.87 0.0002 30.03 0.0008 31.14 0.0010
- 32.24 0.0006 33.37 0.0002 35.67 0.0003 37.99 0.0004 39.17 0.0004
- 40.35 0.0005 41.53 0.0001 46.42 0.0001 )
- #( 1.00 0.0465 1.99 0.0976 2.98 0.0678 4.00 0.0727 4.99 0.0305
- 5.98 0.0210 6.98 0.0227 8.00 0.0085 9.01 0.0183 10.02 0.0258
- 11.05 0.0003 12.06 0.0061 13.05 0.0021 14.10 0.0089 15.12 0.0077
- 16.16 0.0016 17.21 0.0061 18.23 0.0011 19.29 0.0031 20.36 0.0031
- 21.41 0.0007 22.48 0.0013 23.55 0.0020 24.64 0.0004 25.74 0.0005
- 26.81 0.0006 27.95 0.0006 29.03 0.0001 30.22 0.0010 31.30 0.0004
- 32.48 0.0001 33.60 0.0002 38.30 0.0003 )
- #( 1.00 0.0674 1.99 0.0841 2.98 0.0920 3.99 0.0328 4.99 0.0368
- 5.98 0.0206 6.99 0.0246 8.01 0.0048 9.01 0.0218 10.03 0.0155
- 11.05 0.0048 12.06 0.0077 13.00 0.0020 14.10 0.0083 15.15 0.0084
- 16.18 0.0015 17.22 0.0039 18.27 0.0032 19.34 0.0026 20.40 0.0012
- 21.47 0.0009 22.54 0.0008 23.62 0.0016 24.71 0.0005 25.82 0.0004
- 26.91 0.0002 28.03 0.0008 29.17 0.0002 30.32 0.0028 31.45 0.0004
- 32.61 0.0005 33.77 0.0001 36.14 0.0003 37.32 0.0002 38.54 0.0005
- 39.75 0.0002 42.23 0.0002 48.65 0.0001 )
- #( 1.01 0.0423 1.99 0.0240 2.98 0.0517 4.00 0.0493 5.00 0.0324
- 6.00 0.0094 6.99 0.0449 7.99 0.0050 9.00 0.0197 10.03 0.0132
- 11.03 0.0009 12.07 0.0017 13.08 0.0023 14.12 0.0094 15.16 0.0071
- 16.21 0.0020 17.25 0.0005 18.30 0.0027 19.04 0.0004 20.43 0.0022
- 21.51 0.0002 22.59 0.0006 23.72 0.0018 24.80 0.0002 25.88 0.0002
- 27.03 0.0002 28.09 0.0006 29.31 0.0002 30.46 0.0004 31.61 0.0007
- 32.78 0.0005 33.95 0.0001 36.34 0.0002 37.56 0.0001 38.80 0.0001
- 40.02 0.0001 44.14 0.0001 )
- #( 1.00 0.0669 1.99 0.0909 2.99 0.0410 3.98 0.0292 4.98 0.0259
- 5.98 0.0148 6.98 0.0319 7.99 0.0076 9.01 0.0056 10.02 0.0206
- 11.04 0.0032 12.05 0.0085 13.08 0.0040 14.12 0.0037 15.16 0.0030
- 16.20 0.0013 17.24 0.0021 18.30 0.0010 19.36 0.0015 20.44 0.0013
- 21.50 0.0009 22.60 0.0015 23.69 0.0014 24.80 0.0006 25.87 0.0002
- 27.02 0.0006 28.12 0.0002 29.28 0.0003 30.43 0.0002 31.59 0.0007
- 32.79 0.0001 35.14 0.0001 37.57 0.0001 40.03 0.0002 41.28 0.0004
- 44.10 0.0001 )
- #( 0.99 0.0421 1.99 0.1541 2.98 0.0596 3.98 0.0309 4.98 0.0301
- 5.99 0.0103 7.00 0.0240 8.01 0.0073 9.01 0.0222 10.04 0.0140
- 11.05 0.0033 12.08 0.0045 13.13 0.0009 14.13 0.0015 15.21 0.0026
- 16.24 0.0003 17.30 0.0004 18.35 0.0010 19.39 0.0003 20.50 0.0015
- 21.57 0.0003 22.68 0.0011 23.80 0.0005 24.90 0.0008 26.02 0.0002
- 27.16 0.0001 28.30 0.0006 29.48 0.0002 31.81 0.0005 33.00 0.0003
- 34.21 0.0001 37.89 0.0001 )
- #( 0.99 0.0389 2.00 0.2095 3.00 0.0835 3.99 0.0289 5.00 0.0578
- 5.99 0.0363 7.01 0.0387 8.01 0.0056 9.04 0.0173 10.05 0.0175
- 11.08 0.0053 12.10 0.0056 13.15 0.0064 14.19 0.0036 15.22 0.0019
- 16.29 0.0010 17.36 0.0017 18.43 0.0018 19.51 0.0004 20.60 0.0011
- 21.70 0.0003 22.82 0.0003 23.95 0.0001 25.05 0.0004 26.17 0.0001
- 28.50 0.0003 29.68 0.0001 32.07 0.0003 33.28 0.0004 34.52 0.0001 )
- #( 1.00 0.1238 1.99 0.2270 3.00 0.0102 3.99 0.0181 4.98 0.0415
- 6.00 0.0165 7.01 0.0314 8.02 0.0148 9.04 0.0203 10.05 0.0088
- 11.07 0.0062 12.11 0.0070 13.14 0.0054 14.19 0.0028 15.24 0.0044
- 16.30 0.0029 17.38 0.0009 18.45 0.0026 19.56 0.0003 20.65 0.0025
- 21.74 0.0014 22.87 0.0013 23.99 0.0007 25.15 0.0002 27.46 0.0004
- 28.39 0.0006 28.65 0.0004 29.85 0.0001 31.05 0.0002 32.27 0.0003
- 33.52 0.0002 34.76 0.0003 )
- #( 1.00 0.1054 2.00 0.2598 2.99 0.0369 3.98 0.0523 4.99 0.0020
- 5.99 0.0051 7.00 0.0268 8.01 0.0027 9.04 0.0029 10.05 0.0081
- 11.08 0.0047 12.12 0.0051 13.16 0.0091 14.19 0.0015 15.27 0.0030
- 16.34 0.0017 17.42 0.0006 18.51 0.0003 19.61 0.0007 20.72 0.0003
- 21.84 0.0001 22.99 0.0010 24.13 0.0001 28.44 0.0001 30.09 0.0001 )
- #( 0.99 0.0919 2.00 0.0418 2.99 0.0498 3.99 0.0135 4.99 0.0026
- 6.00 0.0155 7.01 0.0340 8.02 0.0033 9.04 0.0218 10.08 0.0084
- 11.11 0.0057 12.15 0.0051 13.21 0.0043 14.25 0.0015 15.31 0.0023
- 16.40 0.0008 17.48 0.0004 18.59 0.0016 19.71 0.0010 20.84 0.0018
- 21.98 0.0002 23.11 0.0013 24.26 0.0003 26.67 0.0002 29.12 0.0002
- 30.37 0.0002 31.62 0.0003 32.92 0.0001 )
- #( 0.99 0.1174 1.99 0.1126 2.99 0.0370 3.99 0.0159 5.01 0.0472
- 6.01 0.0091 7.03 0.0211 8.05 0.0015 9.07 0.0098 10.11 0.0038
- 11.15 0.0042 12.20 0.0018 13.24 0.0041 14.32 0.0033 15.41 0.0052
- 16.49 0.0001 17.61 0.0004 18.71 0.0004 19.84 0.0004 20.99 0.0002
- 22.14 0.0006 23.31 0.0006 24.50 0.0004 25.70 0.0002 28.09 0.0002
- 28.66 0.0002 32.00 0.0001 )
- #( 1.00 0.1085 2.00 0.1400 2.99 0.0173 3.99 0.0229 5.00 0.0272
- 6.02 0.0077 7.03 0.0069 8.04 0.0017 9.08 0.0045 10.10 0.0030
- 11.15 0.0040 12.20 0.0007 13.25 0.0019 14.32 0.0008 15.42 0.0024
- 16.50 0.0002 17.59 0.0005 18.71 0.0003 19.83 0.0002 20.98 0.0005
- 23.29 0.0008 )
- #( 1.00 0.0985 2.00 0.1440 2.99 0.0364 3.99 0.0425 5.00 0.0190
- 6.01 0.0089 7.03 0.0278 8.04 0.0006 9.07 0.0083 10.10 0.0021
- 11.14 0.0050 12.18 0.0005 13.26 0.0036 14.33 0.0005 15.41 0.0026
- 17.62 0.0004 18.75 0.0004 19.89 0.0003 21.04 0.0012 22.21 0.0002
- 23.38 0.0004 27.04 0.0001 )
- #( 0.99 0.1273 2.00 0.1311 2.99 0.0120 4.00 0.0099 5.00 0.0235
- 6.02 0.0068 7.03 0.0162 8.06 0.0009 9.08 0.0083 10.12 0.0014
- 11.17 0.0050 12.24 0.0010 13.29 0.0013 14.39 0.0022 15.48 0.0011
- 16.59 0.0002 17.70 0.0003 18.84 0.0010 20.00 0.0003 21.17 0.0003
- 23.56 0.0004 28.79 0.0003 )
- #( 1.00 0.1018 2.00 0.1486 3.00 0.0165 4.00 0.0186 5.01 0.0194
- 6.02 0.0045 7.04 0.0083 8.06 0.0012 9.10 0.0066 10.15 0.0009
- 11.19 0.0008 12.26 0.0011 13.34 0.0028 14.45 0.0006 15.53 0.0009
- 16.66 0.0002 17.79 0.0006 18.94 0.0005 20.11 0.0003 21.29 0.0005
- 22.49 0.0003 23.73 0.0005 26.22 0.0001 27.52 0.0001 28.88 0.0002 )
- #( 1.00 0.1889 1.99 0.1822 3.00 0.0363 4.00 0.0047 5.01 0.0202
- 6.03 0.0053 7.05 0.0114 8.01 0.0002 9.13 0.0048 10.17 0.0010
- 11.23 0.0033 12.30 0.0010 13.38 0.0006 14.50 0.0002 15.62 0.0010
- 20.27 0.0001 21.47 0.0001 )
- #( 1.00 0.0522 1.99 0.0763 2.99 0.0404 4.00 0.0139 5.01 0.0185
- 6.01 0.0021 7.06 0.0045 8.09 0.0002 9.11 0.0003 10.17 0.0006
- 11.25 0.0004 12.32 0.0005 13.40 0.0003 14.53 0.0003 15.65 0.0007
- 16.80 0.0001 17.95 0.0002 19.14 0.0006 20.34 0.0002 21.56 0.0003 )
- #( 0.99 0.1821 1.99 0.0773 3.00 0.0125 4.01 0.0065 5.01 0.0202
- 6.03 0.0071 7.05 0.0090 8.08 0.0006 9.13 0.0008 10.18 0.0013
- 11.25 0.0010 12.33 0.0012 13.42 0.0006 14.54 0.0005 15.65 0.0004
- 17.97 0.0002 19.15 0.0001 )
- #( 1.00 0.1868 2.00 0.0951 3.00 0.0147 4.01 0.0134 5.02 0.0184
- 6.04 0.0132 7.06 0.0011 8.11 0.0008 9.15 0.0010 10.22 0.0012
- 11.30 0.0011 12.40 0.0003 13.11 0.0004 13.49 0.0002 14.62 0.0003
- 15.77 0.0001 )
- #( 1.00 0.1933 2.00 0.0714 3.00 0.0373 4.00 0.0108 5.02 0.0094
- 6.02 0.0010 7.07 0.0022 8.11 0.0002 9.16 0.0065 10.23 0.0015
- 11.31 0.0023 12.40 0.0003 13.53 0.0014 14.66 0.0002 15.81 0.0011
- 18.20 0.0002 19.41 0.0001 )
- #( 0.99 0.2113 1.99 0.0877 3.00 0.0492 4.01 0.0094 5.02 0.0144
- 6.04 0.0103 7.07 0.0117 8.12 0.0006 9.19 0.0019 10.25 0.0007
- 11.35 0.0017 12.45 0.0010 13.58 0.0003 14.74 0.0003 15.91 0.0003
- 19.57 0.0002 )
- #( 0.99 0.2455 1.99 0.0161 3.00 0.0215 4.01 0.0036 5.03 0.0049
- 6.04 0.0012 7.09 0.0036 8.14 0.0011 9.21 0.0009 10.30 0.0001
- 11.40 0.0012 12.50 0.0001 13.66 0.0005 14.84 0.0001 )
- #( 1.00 0.1132 2.00 0.0252 3.00 0.0292 4.01 0.0136 5.03 0.0045
- 6.06 0.0022 7.11 0.0101 8.17 0.0004 9.23 0.0010 10.33 0.0012
- 11.44 0.0013 12.58 0.0011 13.75 0.0002 14.93 0.0005 16.14 0.0002 )
- #( 1.00 0.1655 2.00 0.0445 3.00 0.0120 4.00 0.0038 5.02 0.0015
- 6.07 0.0038 7.11 0.0003 8.19 0.0002 9.25 0.0010 10.36 0.0011
- 11.48 0.0005 12.63 0.0002 13.79 0.0003 16.24 0.0002 )
- #( 0.99 0.3637 1.99 0.0259 3.01 0.0038 4.01 0.0057 5.03 0.0040
- 6.07 0.0067 7.12 0.0014 8.19 0.0004 9.27 0.0003 10.38 0.0002
- 12.67 0.0001 )
- #( 1.00 0.1193 2.00 0.0230 3.00 0.0104 4.01 0.0084 5.04 0.0047
- 6.08 0.0035 7.13 0.0041 8.20 0.0002 9.29 0.0005 10.40 0.0005
- 11.53 0.0003 12.70 0.0002 13.91 0.0002 )
- #( 1.00 0.0752 2.00 0.0497 3.00 0.0074 4.02 0.0076 5.05 0.0053
- 6.09 0.0043 7.15 0.0024 8.22 0.0001 9.32 0.0006 10.45 0.0002
- 11.58 0.0001 12.78 0.0001 15.22 0.0001 )
- #( 1.00 0.2388 2.00 0.0629 3.01 0.0159 4.04 0.0063 5.07 0.0051
- 6.12 0.0045 7.19 0.0026 8.29 0.0015 9.43 0.0001 11.75 0.0002 )
- #( 1.00 0.1919 2.01 0.0116 3.01 0.0031 4.03 0.0090 5.07 0.0061
- 6.13 0.0036 7.19 0.0013 8.30 0.0016 9.13 0.0001 10.59 0.0002
- 11.78 0.0002 )
- #( 1.00 0.1296 2.00 0.0135 3.01 0.0041 4.04 0.0045 5.09 0.0028
- 6.14 0.0046 7.23 0.0007 8.32 0.0007 9.50 0.0001 )
- #( 1.00 0.0692 2.00 0.0209 3.02 0.0025 4.05 0.0030 5.09 0.0047
- 6.17 0.0022 7.25 0.0015 8.36 0.0015 9.53 0.0010 10.69 0.0001
- 13.40 0.0001 )
- #( 1.00 0.1715 2.00 0.0142 3.01 0.0024 4.03 0.0015 5.07 0.0017
- 6.13 0.0018 7.22 0.0009 8.33 0.0014 9.51 0.0007 10.69 0.0002 )
- #( 1.00 0.1555 2.01 0.0148 3.02 0.0007 4.06 0.0006 5.10 0.0005
- 6.16 0.0008 7.26 0.0009 8.39 0.0008 9.58 0.0002 )
- #( 1.00 0.1357 2.00 0.0116 3.02 0.0026 4.04 0.0009 5.09 0.0004
- 6.17 0.0005 7.27 0.0002 8.40 0.0001 )
- #( 1.00 0.2185 2.01 0.0087 3.03 0.0018 4.06 0.0025 5.11 0.0020
- 6.20 0.0012 7.32 0.0005 8.46 0.0001 9.66 0.0003 )
- #( 1.00 0.2735 2.00 0.0038 3.02 0.0008 4.06 0.0012 5.12 0.0008
- 6.22 0.0011 7.35 0.0003 8.50 0.0002 )
- #( 1.00 0.1441 1.99 0.0062 3.01 0.0023 4.05 0.0011 5.11 0.0012
- 6.20 0.0003 7.33 0.0004 8.50 0.0001 )
- #( 1.00 0.0726 2.01 0.0293 3.03 0.0022 5.14 0.0005 6.26 0.0011
- 7.41 0.0002 8.63 0.0002 )
- #( 1.00 0.0516 2.00 0.0104 3.02 0.0029 5.15 0.0002 6.27 0.0001 )
- #( 1.00 0.0329 2.00 0.0033 3.03 0.0013 4.10 0.0005 5.19 0.0004
- 6.32 0.0002 )
- #( 1.00 0.0179 1.99 0.0012 3.04 0.0005 4.10 0.0017 5.20 0.0005
- 6.35 0.0001 )
- #( 1.00 0.0334 2.01 0.0033 3.04 0.0011 4.13 0.0003 5.22 0.0003 )
- #( 0.99 0.0161 2.01 0.0100 3.04 0.0020 4.13 0.0003 )
- #( 1.00 0.0475 1.99 0.0045 3.03 0.0035 4.12 0.0011 )
- #( 1.00 0.0593 2.00 0.0014 4.17 0.0002 )
- #( 1.00 0.0249 2.01 0.0016 )
- #( 1.00 0.0242 2.00 0.0038 4.19 0.0002 )
- #( 1.00 0.0170 2.02 0.0030 )
- #( 1.00 0.0381 2.00 0.0017 3.09 0.0002 )
- #( 1.00 0.0141 2.03 0.0005 3.11 0.0003 4.26 0.0001 )
- #( 1.00 0.0122 2.03 0.0024 )
- #( 1.00 0.0107 2.07 0.0007 3.12 0.0004 )
- #( 1.00 0.0250 2.02 0.0026 3.15 0.0002 )
- #( 1.01 0.0092 )
- #( 1.01 0.0102 2.09 0.0005 )
- #( 1.00 0.0080 2.00 0.0005 3.19 0.0001 )
- #( 1.01 0.0298 2.01 0.0005 ) ) constant piano-spectra
-
- 0.04 value *clm-piano-attack-duration*
- 0.2 value *clm-piano-realease-duration*
- -10 value *clm-db-drop-per-second*
-
- \ This thing sounds pretty good down low, below middle c or so.
- \ Unfortunately, there are some tens of partials down there and we're
- \ using exponential envelopes. You're going to wait for a long long
- \ time just to hear a single low note. The high notes sound pretty
- \ rotten--they just don't sparkle; I have a feeling that this is due
- \ to the low amplitude of the original data, and the lack of
- \ mechanical noise.
- \
- \ The only thing you can do to alter the sound of a piano note is to
- \ set the pfreq parameter. Pfreq is used to look up the partials. By
- \ default, it's set to the requested frequency. Setting it to a
- \ neighboring freq is useful when you're repeating notes. Note that
- \ there's no nyquist detection; a high freq with a low pfreq, will
- \ give you fold over (hmmm...maybe I can get those high notes to
- \ sparkle after all).
- instrument: lbj-piano <{ start dur freq amp
- :key
- degree 45.0
- distance 1.0
- reverb-amount 0.0 -- }>
- piano-spectra 12.0 freq 32.703 f/ flog 2.0 flog f/ f* f>s array-ref normalize-partials { parts }
- dur *clm-piano-attack-duration* *clm-piano-realease-duration* f+ f+ to dur
- dur *clm-piano-realease-duration* f- { env1dur }
- env1dur mus-srate f* fround->s { env1samples }
- #( 0.0
- 0.0
- *clm-piano-attack-duration* 100.0 f* env1dur f/ 4.0 f/
- 1.0
- *clm-piano-attack-duration* 100.0 f* env1dur f/
- 1.0
- 100.0
- *clm-db-drop-per-second* env1dur f* db->linear ) { ampfun1 }
- :envelope ampfun1 :scaler amp :duration env1dur :base 10000.0 make-env { ampenv1 }
- :envelope #( 0 1 100 0 )
- :scaler amp ampfun1 -1 array-ref f*
- :duration env1dur
- :base 1.0 make-env { ampenv2 }
- parts length 2/ 0.0 make-vct { alist }
- parts length 2/ make-array map!
- alist i parts i 2* 1+ array-ref vct-set! drop
- :frequency parts i 2* array-ref freq f* make-oscil
- end-map { oscils }
- start dur #{ :degree degree :distance distance :reverb-amount reverb-amount } run-instrument
- 0.0 ( sum ) oscils each ( os ) 0.0 0.0 oscil alist i vct-ref f* f+ end-each ( sum )
- i env1samples > if ampenv2 else ampenv1 then env ( sum ) f*
- end-run
- ;instrument
-
- : lbj-piano-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440 0.5 lbj-piano
- dur 0.24 f+ 0.2 f+ step
- ;
-
- \ RESFLT
- \ clm/resflt.ins
- instrument: resflt <{ start dur
- :key
- driver #f
- ranfreq 10000.0
- noiamp 0.01
- noifun #( 0 0 50 1 100 0 )
- cosamp 0.1
- cosfreq1 200.0
- cosfreq0 230.0
- cosnum 10
- ampcosfun #( 0 0 50 1 100 0 )
- freqcosfun #( 0 0 100 1 )
- freq1 550.0
- r1 0.995
- g1 0.1
- freq2 1000.0
- r2 0.995
- g2 0.1
- freq3 2000.0
- r3 0.995
- g3 0.1
- degree 0.0
- distance 1.0 -- }>
- doc" 0 1 <'> resflt with-sound"
- :radius r1 :frequency freq1 make-two-pole { f1 }
- :radius r2 :frequency freq2 make-two-pole { f2 }
- :radius r3 :frequency freq3 make-two-pole { f3 }
- nil nil nil { frqf ampf gen }
- driver if
- :envelope noifun :scaler noiamp :duration dur make-env to ampf
- :frequency ranfreq make-rand to gen
- else
- :envelope freqcosfun :scaler cosfreq1 cosfreq0 f- hz->radians :duration dur make-env to frqf
- :envelope ampcosfun :scaler cosamp :duration dur make-env to ampf
- :frequency cosfreq0 :cosines cosnum make-sum-of-cosines to gen
- then
- start dur #{ :degree degree :distance distance } run-instrument
- gen driver if 0.0 ( rand ) else frqf env ( sum-of-cosines ) then 0.0 mus-run ampf env f*
- { input }
- f1 input g1 f* two-pole
- f2 input g2 f* two-pole f+
- f3 input g3 f* two-pole f+
- end-run
- ;instrument
-
- : resflt-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur :driver #f resflt
- dur 0.2 f+ step
- now@ dur :driver #t resflt
- dur 0.2 f+ step
- ;
-
- hide
- : scratch-input-cb { rd samp -- proc ; dir self -- r }
- 1 proc-create samp , rd ,
- does> { dir self -- r }
- self @ { samp }
- self cell+ @ { rd }
- rd samp 0 file->sample \ (file->sample rd samp 0)
- dir self +! \ samp += dir
- ;
- set-current
-
- \ SCRATCH-INS
- instrument: scratch-ins <{ start file src-ratio turntable -- }>
- file find-file to file
- file false? if 'file-not-found $" %s: cannot find %S" #( get-func-name file ) fth-raise then
- file mus-sound-duration { dur }
- file make-readin { f }
- turntable 0 object-ref seconds->samples { cur-samp }
- turntable 1 object-ref seconds->samples { turn-samp }
- :input f cur-samp scratch-input-cb :srate src-ratio make-src { rd }
- src-ratio f0> { forwards }
- forwards turn-samp cur-samp < && if rd src-ratio fnegate set-mus-increment drop then
- 1 { turn-i }
- 0 { turning }
- 0.0 0.0 { last-val1 last-val2 }
- start dur #{ :degree 90.0 random } run-instrument
- turn-i turntable length >= if leave then
- rd 0.0 src { val }
- turning unless
- forwards cur-samp turn-samp >= && if
- 1
- else
- forwards 0= cur-samp turn-samp <= &&
- if
- -1
- else
- turning
- then
- then to turning
- else
- last-val2 last-val1 f<= last-val1 val f>= &&
- last-val2 last-val1 f>= last-val1 val f<= && || if
- turn-i 1+ to turn-i
- turn-i turntable length < if
- turntable turn-i object-ref seconds->samples to turn-samp
- forwards negate to forwards
- rd rd mus-increment fnegate set-mus-increment drop
- then
- 0 to turning
- then
- then
- last-val1 to last-val2
- val to last-val1
- val
- end-run
- f mus-close drop
- ;instrument
- previous
-
- : scratch-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- start "fyow.snd" dur 1.5 fmin #( 0 0.5 0.25 1 ) scratch-ins
- "fyow.snd" find-file mus-sound-duration 0.2 f+ step
- ;
-
- \ PINS
- \
- \ spectral modeling (SMS)
- instrument: pins <{ start dur file amp
- :key
- transposition 1.0
- time-scaler 1.0
- fftsize 256
- highest-bin 128
- max-peaks 16
- attack #f -- }>
- doc" start dur \"fyow.snd\" 1.0 :time-scaler 2.0 pins"
- file find-file to file
- file false? if 'file-not-found $" %s: cannot find %S" #( get-func-name file ) fth-raise then
- file mus-sound-duration { fdur }
- dur time-scaler f/ { sdur }
- sdur fdur f> if
- 'forth-error
- $" %s is %.3f seconds long, but we'll need %.3f seconds of data for this note"
- #( file fdur sdur ) fth-raise
- then
- file make-readin { fil }
- fftsize make-vct { fdr }
- fftsize make-vct { fdi }
- blackman2-window fftsize 0.0 0.0 make-fft-window { win }
- fftsize make-vct { fftamps }
- max-peaks 2* { max-oscils }
- max-oscils make-vct { current-peak-freqs }
- max-oscils make-vct { last-peak-freqs }
- max-oscils make-vct { current-peak-amps }
- max-oscils make-vct { last-peak-amps }
- max-peaks make-vct { peak-amps }
- max-peaks make-vct { peak-freqs }
- max-oscils make-array map! :frequency 0.0 make-oscil end-map { resynth-oscils }
- max-oscils make-vct { ampls }
- max-oscils make-vct { rates }
- max-oscils make-vct { freqs }
- max-oscils make-vct { sweeps }
- fftsize 4.0 f/ fround->s { hop }
- time-scaler hop f* fround->s { outhop }
- outhop 1/f { ifreq }
- ifreq hz->radians { ihifreq }
- mus-srate fftsize f/ { fft-mag }
- max-oscils { cur-oscils }
- attack if attack else 0 then { ramped }
- attack { splice-attack }
- attack if attack else 1 then { attack-size }
- 0.0 { ramp-ind }
- attack-size make-vct { ramped-attack }
- outhop { trigger }
- win fftsize 0.42323 f* 1/f vct-scale! drop
- 0 { filptr }
- start dur #{ :degree 90.0 random } run-instrument
- splice-attack if
- attack-size 1/f { ramp }
- fil filptr 0 file->sample amp f* ( outval )
- filptr 1+ to filptr
- filptr attack-size > if
- 1 { mult }
- ramped-attack map!
- fil filptr i + 0 file->sample mult f*
- mult ramp f- to mult
- end-map drop
- #f to splice-attack
- then
- ( outval )
- else
- trigger outhop >= if
- 0 { peaks }
- 0 to trigger
- fdr map! fil filptr i + 0 file->sample win i vct-ref f* end-map drop
- filptr fdr vct-length + to filptr
- fdi 0.0 vct-fill! drop
- filptr fftsize hop - - to filptr
- fdr fdi fftsize 1 mus-fft drop
- highest-bin 0 ?do
- fftamps i fdr i vct-ref dup f* fdi i vct-ref dup f* f+ fsqrt f2* vct-set! drop
- loop
- current-peak-freqs each { fv }
- current-peak-amps i vct-ref { av }
- last-peak-freqs i fv vct-set! drop
- last-peak-amps i av vct-set! drop
- current-peak-amps i 0.0 vct-set! drop
- end-each
- peak-amps 0.0 vct-fill! drop
- fftamps 0 vct-ref { ra }
- 0.0 0.0 { la ca }
- highest-bin 0 ?do
- ca to la
- ra to ca
- fftamps i vct-ref to ra
- ca 0.001 f>
- ca ra f> &&
- ca la f> && if
- la flog10 ra flog10 f- f2/ la flog10 -2.0 ca flog10 f* f+ ra flog10 f+ f/ { offset }
- 10.0 ca flog10 0.25 la flog10 ra flog10 f- f* offset f* f- f** { amp-1 }
- fft-mag i offset -1.0 f+ f+ f* { freq }
- peaks max-peaks = if
- 0 { minp }
- peak-amps 0 vct-ref { minpeak }
- max-peaks 1 ?do
- peak-amps i vct-ref minpeak f< if
- i to minp
- peak-amps i vct-ref to minpeak
- then
- loop
- amp-1 minpeak f> if
- peak-freqs minp freq vct-set! drop
- peak-amps minp amp-1 vct-set! drop
- then
- else
- peak-freqs peaks freq vct-set! drop
- peak-amps peaks amp-1 vct-set! drop
- peaks 1+ to peaks
- then
- then
- loop
- peaks 0 ?do
- 0 { maxp }
- peak-amps 0 vct-ref ( maxpk )
- max-peaks 1 ?do
- peak-amps i vct-ref over f> if
- i to maxp
- drop ( maxpk )
- peak-amps i vct-ref ( maxpk )
- then
- loop
- ( maxpk ) f0> if
- -1 { closestp }
- 10 { closestamp }
- peak-freqs maxp vct-ref { cur-freq }
- cur-freq 1/f { icf }
- max-peaks 0 ?do
- last-peak-amps i vct-ref f0> if
- icf last-peak-freqs i vct-ref cur-freq f- fabs f* { closeness }
- closeness closestamp f< if
- closeness to closestamp
- i to closestp
- then
- then
- loop
- closestamp 0.1 f< if
- current-peak-amps closestp peak-amps maxp vct-ref vct-set! drop
- peak-amps maxp 0.0 vct-set! drop
- current-peak-freqs closestp cur-freq vct-set! drop
- then
- then
- loop
- max-peaks 0 ?do
- peak-amps i vct-ref f0> if
- -1 { new-place }
- max-oscils 0 ?do
- last-peak-amps i vct-ref f0= current-peak-amps i vct-ref f0= && if
- i to new-place
- leave
- then
- loop
- current-peak-amps new-place peak-amps i vct-ref vct-set! drop
- peak-amps i 0.0 vct-set! drop
- current-peak-freqs new-place peak-freqs i vct-ref vct-set! drop
- last-peak-freqs new-place peak-freqs i vct-ref vct-set! drop
- resynth-oscils new-place array-ref ( gen )
- transposition peak-freqs i vct-ref f* ( val )
- set-mus-frequency drop
- then
- loop
- 0 to cur-oscils
- max-oscils 0 ?do
- rates i current-peak-amps i vct-ref last-peak-amps i vct-ref f- ifreq f* vct-set! drop
- current-peak-amps i vct-ref f0<> last-peak-amps i vct-ref f0<> || if
- i to cur-oscils
- then
- sweeps i
- current-peak-freqs i vct-ref last-peak-freqs i vct-ref f- transposition f* ihifreq f*
- vct-set! drop
- loop
- cur-oscils 1+ to cur-oscils
- then
- trigger 1+ to trigger
- ramped 0= if
- 0.0 ( sum )
- else
- ramped-attack ramp-ind vct-ref ( sum )
- ramp-ind 1+ to ramp-ind
- ramp-ind ramped = if 0 to ramp-ind then
- then ( sum )
- cur-oscils 0 ?do
- ampls i vct-ref f0<> rates i vct-ref f0<> || if
- resynth-oscils i array-ref freqs i vct-ref 0.0 oscil
- ampls i vct-ref f* f+ ( sum += ... )
- ampls i rates i vct-ref object-set+!
- freqs i sweeps i vct-ref object-set+!
- then
- loop
- amp ( sum ) f*
- then
- end-run
- ;instrument
-
- : pins-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur "fyow.snd" 1.0 :time-scaler 2.0 pins
- dur 0.2 f+ step
- ;
-
- \ ZC
- instrument: zc <{ start dur freq amp len1 len2 feedback -- }>
- :frequency freq make-pulse-train { s }
- :size len1 :scaler feedback :max-size len1 len2 max 1+ make-comb { d0 }
- :envelope #( 0 0 1 1 ) :scaler len2 len1 f- :duration dur make-env { zenv }
- start dur #{ :degree 90.0 random } run-instrument
- d0 s 0.0 pulse-train amp f* zenv env comb
- end-run
- ;instrument
-
- : zc-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 100 0.4 20 100 0.95 zc
- dur 0.2 f+ step
- now@ dur 100 0.4 100 20 0.95 zc
- dur 0.2 f+ step
- ;
-
- \ ZN
- \
- \ notches are spaced at srate/len, feedforward sets depth thereof so
- \ sweep of len from 20 to 100 sweeps the notches down from 1000 Hz to
- \ ca 200 Hz so we hear our downward glissando beneath the pulses.
- instrument: zn <{ start dur freq amp len1 len2 feedforward -- }>
- :frequency freq make-pulse-train { s }
- :size len1 :scaler feedforward :max-size len1 len2 max 1+ make-notch { d0 }
- :envelope #( 0 0 1 1 ) :scaler len2 len1 f- :duration dur make-env { zenv }
- start dur #{ :degree 90.0 random } run-instrument
- d0 s 0.0 pulse-train amp f* zenv env notch
- end-run
- ;instrument
-
- : zn-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 100 0.5 20 100 0.95 zn
- dur 0.2 f+ step
- now@ dur 100 0.5 100 20 0.95 zn
- dur 0.2 f+ step
- ;
-
- \ ZA
- instrument: za <{ start dur freq amp len1 len2 fb ffw -- }>
- :frequency freq make-pulse-train { s }
- :size len1 :feedback fb :feedforward ffw :max-size len1 len2 max 1+ make-all-pass { d0 }
- :envelope #( 0 0 1 1 ) :scaler len2 len1 f- :duration dur make-env { zenv }
- start dur #{ :degree 90.0 random } run-instrument
- d0 s 0.0 pulse-train amp f* zenv env all-pass
- end-run
- ;instrument
-
- : za-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 100 0.3 20 100 0.95 0.95 za
- dur 0.2 f+ step
- now@ dur 100 0.3 100 20 0.95 0.95 za
- dur 0.2 f+ step
- ;
-
- hide
- : clm-src-cb { gen -- proc; dir self -- r }
- 1 proc-create gen ,
- does> ( dir self -- r )
- nip @ ( gen ) #f #f granulate
- ;
- set-current
-
- \ CLM-EXPSRC
- instrument: clm-expsrc <{ start dur in-file exp-ratio src-ratio amp
- :optional
- rev #f
- start-in-file 0 -- }>
- in-file find-file to in-file
- in-file false? if 'file-not-found $" %s: cannot find %S" #( get-func-name in-file ) fth-raise then
- start-in-file in-file mus-sound-srate f* fround->s { stf }
- :file in-file :channel 0 :start stf make-readin { fdA }
- :input fdA readin-cb :expansion exp-ratio make-granulate { exA }
- in-file mus-sound-chans 2 = *output* mus-channels 2 = && { two-chans }
- two-chans if :file in-file :channel 1 :start stf make-readin else #f then { fdB }
- :input fdB readin-cb :expansion exp-ratio make-granulate { exB }
- :input exA clm-src-cb :srate src-ratio make-src { srcA }
- two-chans if :input exB clm-src-cb :srate src-ratio make-src else #f then { srcB }
- *reverb* rev && { revit }
- revit if two-chans if rev f2/ else rev then else 0.0 then { rev-amp }
- start dur run
- srcA 0.0 src amp f* { valA }
- two-chans if srcB 0.0 src amp f* else 0.0 then { valB }
- i valA 0 *output* out-any drop
- two-chans if i valB 1 *output* out-any drop then
- revit if i valA valB f+ rev-amp f* 0 *reverb* out-any drop then
- loop
- ;instrument
- previous
-
- : clm-expsrc-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur "oboe.snd" 2.0 1.0 1.0 clm-expsrc
- dur 0.2 f+ step
- ;
-
- \ EXP-SND
- instrument: exp-snd <{ file start dur amp
- :optional
- exp-amt 1.0
- ramp 0.4
- seglen 0.15
- sr 1.0
- hop 0.05
- ampenv #f -- }>
- doc" ;; granulate with envelopes on the expansion amount, segment envelope shape,\n\
- ;; segment length, hop length, and input file resampling rate\n\
- \"fyow.snd\" 0 3 1 #( 0 1 1 3 ) 0.4 0.15 #( 0 2 1 0.5 ) 0.05 <'> exp-snd with-sound\n\
- \"oboe.snd\" 0 3 1 #( 0 1 1 3 ) 0.4 0.15 #( 0 2 1 0.5 ) 0.2 <'> exp-snd with-sound"
- file find-file to file
- file false? if 'file-not-found $" %s: cannot find %S" #( get-func-name file ) fth-raise then
- file 0 make-readin { f0 }
- :envelope exp-amt array? if exp-amt else #( 0 exp-amt 1 exp-amt ) then
- :duration dur make-env { expenv }
- :envelope seglen array? if seglen else #( 0 seglen 1 seglen ) then
- :duration dur make-env { lenenv }
- seglen if
- seglen array? if seglen max-envelope else seglen then
- else
- 0.15
- then { max-seg-len }
- seglen if
- seglen array? if seglen 1 array-ref else seglen then
- else
- 0.15
- then { initial-seg-len }
- max-seg-len 0.15 f> if 0.6 0.15 f* max-seg-len f/ else 0.6 then { scaler-amp }
- :envelope sr array? if sr else #( 0 sr 1 sr ) then
- :duration dur make-env { srenv }
- ramp array? if ramp else #( 0 ramp 1 ramp ) then { rampdata }
- :envelope rampdata :duration dur make-env { rampenv }
- ramp if
- ramp array? if ramp 1 array-ref else ramp then
- else
- 0.4
- then { initial-ramp-time }
- :envelope hop array? if hop else #( 0 hop 1 hop ) then
- :duration dur make-env { hopenv }
- hop if
- hop array? if hop max-envelope else hop then
- else
- 0.05
- then { max-out-hop }
- hop if
- hop array? if hop 1 array-ref else hop then
- else
- 0.05
- then { initial-out-hop }
- exp-amt if
- exp-amt array? if exp-amt min-envelope else exp-amt then
- else
- 1.0
- then { min-exp-amt }
- exp-amt if
- exp-amt array? if exp-amt 1 array-ref else exp-amt then
- else
- 1.0
- then { initial-exp-amt }
- max-out-hop min-exp-amt f/ { max-in-hop }
- :envelope ampenv #( 0 0 0.5 1 1 0 ) || :scaler amp :duration dur make-env { ampe }
- :input f0 readin-cb
- :expansion initial-exp-amt
- :max-size max-out-hop max-in-hop fmax max-seg-len f+ mus-srate f* fceil f>s
- :ramp initial-ramp-time
- :hop initial-out-hop
- :length initial-seg-len
- :scaler scaler-amp make-granulate { ex-a }
- ampe env { vol }
- ex-a granulate vol f* { val-a0 }
- ex-a granulate vol f* { val-a1 }
- rampdata min-envelope f0<= rampdata max-envelope 0.5 f>= || if
- 'forth-error
- $" ramp argument to expand must always be between 0.0 and 0.5, %.3f -- %.3f"
- #( rampdata min-envelope rampdata max-envelope ) fth-raise
- then
- 0.0 0.0 { ex-samp next-samp }
- 0.0 0.0 0.0 0.0 0.0 { expa segl resa rmpl hp }
- 0 0 { sl rl }
- start dur #{ :degree 90.0 random } run-instrument
- expenv env to expa
- lenenv env to segl
- srenv env to resa
- rampenv env to rmpl
- hopenv env to hp
- segl mus-srate f* floor dup f>s to sl
- ( fsl ) rmpl f* floor f>s to rl
- ampe env to vol
- ex-a sl set-mus-length drop
- ex-a rl set-mus-ramp drop
- ex-a hp set-mus-frequency drop
- ex-a expa set-mus-increment drop
- resa +to next-samp
- next-samp ex-samp 1.0 f+ f> if
- next-samp ex-samp f- fround->s 0 ?do
- val-a1 to val-a0
- ex-a granulate vol f* to val-a1
- 1.0 +to ex-samp
- loop
- then
- next-samp ex-samp f= if
- val-a0
- else
- next-samp ex-samp f- val-a1 val-a0 f- f* val-a0 f+
- then
- end-run
- ;instrument
-
- : exp-snd-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- "fyow.snd" now@ dur 1.0 #( 0 1 1 3 ) 0.4 0.15 #( 0 2 1 0.5 ) 0.05 exp-snd
- dur 0.2 f+ step
- "oboe.snd" now@ dur 1.0 #( 0 1 1 3 ) 0.4 0.15 #( 0 2 1 0.5 ) 0.2 exp-snd
- dur 0.2 f+ step
- ;
-
- struct
- cell% field exp-rampval
- cell% field exp-rampinc
- cell% field exp-loc
- cell% field exp-segctr
- cell% field exp-whichseg
- cell% field exp-ramplen
- cell% field exp-steadylen
- cell% field exp-trigger
- end-struct grn%
-
- \ EXPFIL
- instrument: expfil <{ start dur hopsecs rampsecs steadysecs file1 file2 -- }>
- rampsecs seconds->samples { ramplen }
- grn% %alloc { grn1 }
- grn% %alloc { grn2 }
- 0.0 0.0 grn1 exp-rampval ! grn2 exp-rampval !
- ramplen 1/f dup grn1 exp-rampinc ! grn2 exp-rampinc !
- 0 0 grn1 exp-loc ! grn2 exp-loc !
- 0 0 grn1 exp-segctr ! grn2 exp-segctr !
- 0 0 grn1 exp-whichseg ! grn2 exp-whichseg !
- ramplen dup grn1 exp-ramplen ! grn2 exp-ramplen !
- steadysecs seconds->samples dup grn1 exp-steadylen ! grn2 exp-steadylen !
- 0 0 grn1 exp-trigger ! grn2 exp-trigger !
- hopsecs seconds->samples { hop }
- start seconds->samples { out1 }
- hop out1 + { out2 }
- file1 find-file to file1
- file1 false? if 'file-not-found $" %s: cannot find %S" #( get-func-name file1 ) fth-raise then
- file1 0 make-readin { fil1 }
- file2 find-file to file2
- file2 false? if 'file-not-found $" %s: cannot find %S" #( get-func-name file2 ) fth-raise then
- file2 0 make-readin { fil2 }
- 0.0 { inval }
- start dur #{ :degree 90.0 random } run-instrument
- 0.0 ( val )
- i out1 = if
- fil1 grn1 exp-loc @ 0 file->sample to inval
- 1 grn1 exp-loc +!
- grn1 exp-whichseg @ case
- 0 of
- grn1 exp-rampval @ inval f* to inval
- grn1 exp-rampinc @ grn1 exp-rampval +!
- 1 grn1 exp-segctr +!
- grn1 exp-segctr @ grn1 exp-ramplen @ = if
- 0 grn1 exp-segctr !
- 1 grn1 exp-whichseg +!
- then
- endof
- 1 of
- 1 grn1 exp-segctr +!
- grn1 exp-segctr @ grn1 exp-steadylen @ = if
- 0 grn1 exp-segctr !
- 1 grn1 exp-whichseg +!
- then
- endof
- grn1 exp-rampval @ inval f* to inval
- 1 grn1 exp-segctr +!
- grn1 exp-rampinc @ fnegate grn1 exp-rampval +!
- grn1 exp-segctr @ grn1 exp-ramplen @ = if
- 0 grn1 exp-segctr !
- 1 grn1 exp-trigger !
- 0 grn1 exp-whichseg !
- 0.0 grn1 exp-rampval !
- then
- endcase
- inval f+ ( val )
- 1 +to out1
- grn1 exp-trigger @ 1 = if
- 0 grn1 exp-trigger !
- hop +to out1
- then
- then
- i out2 = if
- fil2 grn2 exp-loc @ 0 file->sample { inval }
- 1 grn2 exp-loc +!
- grn2 exp-whichseg @ case
- 0 of
- grn2 exp-rampval @ inval f* to inval
- grn2 exp-rampinc @ grn2 exp-rampval +!
- 1 grn2 exp-segctr +!
- grn2 exp-segctr @ grn2 exp-ramplen @ = if
- 0 grn2 exp-segctr !
- 1 grn2 exp-whichseg +!
- then
- endof
- 1 of
- 1 grn2 exp-segctr +!
- grn2 exp-segctr @ grn2 exp-steadylen @ = if
- 0 grn2 exp-segctr !
- 1 grn2 exp-whichseg +!
- then
- endof
- grn2 exp-rampval @ inval f* to inval
- 1 grn2 exp-segctr +!
- grn2 exp-rampinc @ fnegate grn2 exp-rampval +!
- grn2 exp-segctr @ grn2 exp-ramplen @ = if
- 0 grn2 exp-segctr !
- 1 grn2 exp-trigger !
- 0 grn2 exp-whichseg !
- 0.0 grn2 exp-rampval !
- then
- endcase
- inval f+ ( val )
- 1 +to out2
- grn2 exp-trigger @ 1 = if
- 0 grn2 exp-trigger !
- hop +to out2
- then
- then
- end-run
- grn1 free throw
- grn2 free throw
- ;instrument
-
- : expfil-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 0.2 0.01 0.1 "oboe.snd" "fyow.snd" expfil
- dur 0.2 f+ step
- ;
-
- \ GRAPH-EQ
- \
- \ From: Marco Trevisani <marco@ccrma.Stanford.EDU>
- \
- \ This should work like a Graphic Equalizer....
- \ Very easy to use. Just some note:
- \
- \ "amp" & "amp-env" apply an enveloppe to the final result of the
- \ filtering.
- \
- \ "dur" as ""standard"" in my instruments, when dur = 0 it will take the length of the
- \ sndfile input, otherwise the duration in seconds.
- \
- \ "gain-freq-list" is a list of gains and frequencies to
- \ filter --in this order gain and frequencies--. There is no limit to
- \ the size of the list. Gain can be a number or an
- \ envelope. Unfortunatelly in this version they cant alternate, one
- \ should chose, all envelopes or all numbers i.e.:
- \ case 1 -> #( .1 440.0 .3 1500.0 .2 330.0 ...etc) or
- \ case 2 -> #((0 .1 1 .5) 440.0 (0 1 1 .01) 1500 (0 .3 1 .5) 330.0 ...etc)
- \ #( .1 440.0 (0 1 1 .01) 1500 ..etc) <<< again, this is not allowed ..
- \
- \ "offset-gain" This apply to all the gains if case 1. It adds or
- \ subtracts an offset to all the gains in the list. This number can be positive or
- \ negative. In case the result is a negative number --let's say offset =
- \ -.4 and, like in case 1, the first gain is .1, the result would be
- \ -.3 -- the instrument will pass a gain equal to 0.
- \
- \ "filt-gain-scale" & "filt-gain-base" will apply to the elements of the
- \ envelopes if we are in case 2, gains are envelopes.
- instrument: graph-eq <{ file start dur
- :key
- file-start 0.0
- amplitude 1.0
- amp-env #( 0 1 0.8 1 1 0 )
- amp-base 1.0
- offset-gain 0.0
- gain-freq-list #( #( 0 1 1 0 ) 440 #( 0 0 1 1 ) 660 )
- filt-gain-scale 1.0
- filt-gain-base 1.0
- a1 0.99 -- }>
- doc" \"oboe.snd\" 0 2 graph-eq"
- file find-file to file
- file false? if 'file-not-found $" %s: cannot find %S" #( get-func-name file ) fth-raise then
- :file file :start file mus-sound-srate file-start f* fround->s make-readin { rd }
- :envelope amp-env :scaler amplitude :duration dur :base amp-base make-env { ampf }
- gain-freq-list length 2/ { len }
- len make-array { gainl }
- len make-array { freql }
- 0 { idx }
- gain-freq-list length 1- 0 ?do
- gainl idx gain-freq-list i array-ref array-set!
- freql idx gain-freq-list i 1+ array-ref array-set!
- 1 +to idx
- 2 +loop
- gainl 0 array-ref array? dup { if-list-in-gain } if
- len make-array map!
- :envelope gainl i array-ref
- :scaler filt-gain-scale
- :duration dur
- :base filt-gain-base make-env
- end-map
- else
- #f
- then { env-size }
- freql map :frequency *key* :radius a1 make-formant end-map { frm-size }
- len 1.0 make-vct { gains }
- gainl each { gval }
- freql i array-ref { fval }
- if-list-in-gain if
- :envelope gval
- :scaler filt-gain-scale
- :duration dur
- :base filt-gain-base make-env
- env-size i rot ( en ) array-set!
- frm-size i :frequency fval :radius a1 make-formant array-set!
- else
- frm-size i :frequency fval :radius a1 make-formant array-set!
- gains i
- offset-gain gval f+ f0< if
- 0.0
- else
- offset-gain gval f+
- then vct-set! drop
- then
- end-each
- 1.0 a1 f- { 1-a1 }
- start dur #{ :degree 90.0 random } run-instrument
- rd readin { inval }
- 0.0 ( outval )
- env-size each { en }
- if-list-in-gain if
- gains i en env 1-a1 f* vct-set! drop
- then
- gains i vct-ref
- frm-size i array-ref ( fmt ) inval 0.0 formant f* f+ ( outval )
- end-each
- ampf env f* ( outval )
- end-run
- rd mus-close drop
- ;instrument
-
- : graph-eq-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- "oboe.snd" now@ dur :amplitude 50.0 graph-eq
- dur 0.2 f+ step
- ;
-
- \ ANOI
- \
- \ a kind of noise reduction -- on-going average spectrum is squelched
- \ to some extent obviously aimed at intermittent signal in background
- \ noise
- \ this is based on Perry Cook's Scrubber.m
- \
- \ clm/anoi.ins
- instrument: anoi <{ fname start dur :optional fftsize 128 amp-scaler 1.0 R two-pi -- }>
- fftsize 2/ { freq-inc }
- fftsize 0.0 make-vct { fdr }
- fftsize 0.0 make-vct { fdi }
- freq-inc 1.0 make-vct { spectr }
- freq-inc 1.0 make-vct { scales }
- freq-inc 0.0 make-vct { diffs }
- blackman2-window fftsize 0.0 0.0 make-fft-window { win }
- 0.0 { amp }
- amp-scaler 4.0 f* mus-srate f/ { incr }
- fname find-file to fname
- fname false? if 'file-not-found $" %s: cannot find %S" #( get-func-name fname ) fth-raise then
- fname make-file->sample { fil }
- 1.0 R fftsize f/ f- { radius }
- mus-srate fftsize f/ { bin }
- freq-inc make-array map! :radius radius :frequency i bin f* make-formant end-map { fs }
- start seconds->samples { beg }
- start dur #{ :degree 90.0 random } run-instrument
- fil i beg - 0 file->sample { inval }
- fdr inval cycle-set!
- \ fdr i fftsize mod inval vct-set! drop
- amp amp-scaler f< if incr +to amp then
- \ i beg - fftsize mod unless
- fdr cycle-start@ 0= if
- fdr fdi win 1 spectrum drop
- diffs map
- spectr i vct-ref 0.9 f* fdr i vct-ref 0.1 f* f+ { x }
- spectr i x vct-set! drop
- x fdr i vct-ref f>= if
- scales i vct-ref fftsize fnegate f/
- else
- fdr i vct-ref dup spectr i vct-ref f- swap f/ scales i vct-ref f- fftsize f/
- then
- end-map drop
- then
- 0.0 ( outval )
- fs each { fmt }
- scales i vct-ref { curscl }
- fmt inval 0.0 formant curscl f* f+ ( outval += ... )
- scales i diffs i vct-ref curscl f+ vct-set! drop
- end-each
- ( outval ) amp f*
- end-run
- fil mus-close drop
- ;instrument
-
- : anoi-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- "fyow.snd" now@ dur 128 2.0 anoi
- dur 0.2 f+ step
- ;
-
- \ Date: Fri, 25 Sep 1998 09:56:41 +0300
- \ From: Matti Koskinen <mjkoskin@sci.fi>
- \ To: linux-audio-dev@ginette.musique.umontreal.ca
- \ Subject: [linux-audio-dev] Announce: alpha version of denoising
- \ [...]
- \ I wrote a simple denoiser called anoi after it's parent
- \ clm-instrument anoi.ins.
- \
- \ anoi tries to remove white noise like tape hiss from wav-
- \ files. Removing of noise succeeds ok, but depending of the
- \ original sound, some distortion can be audible.
- \
- \ If someone is interested, http://www.sci.fi/~mjkoskin
- \ contains tarred and gzipped file.
- \
- \ Now only monophonic wav-files can be denoised, but adding
- \ others isn't too difficult.
- \
- \ -matti
- \ mjkoskin@sci.fi
-
- \ FULLMIX
- instrument: fullmix <{ in-file
- :optional
- start 0.0
- dur #f
- inbeg 0.0
- matrix #f
- sr #f
- rev-amount #f -- }>
- doc" \"pistol.snd\" 0 1 fullmix\n\
- :envelope #( 0 0 1 1 ) :duration dur :scaler 0.5 make-env value en
- \"oboe.snd\" 0 2 0 #( #( 0.8 en ) ) 2.0 <'> fullmix with-sound"
- in-file find-file to in-file
- in-file false? if 'file-not-found $" %s: cannot find %S" #( get-func-name in-file ) fth-raise then
- dur unless in-file mus-sound-duration inbeg f- sr if sr fabs else 1.0 then f/ to dur then
- in-file mus-sound-chans { in-chans }
- inbeg in-file mus-sound-srate f* fround->s { inloc }
- *output* mus-channels { out-chans }
- matrix if
- in-chans out-chans max make-mixer
- else
- in-chans out-chans max 1.0 make-scalar-mixer
- then { mx }
- *reverb* rev-amount f0> && if
- in-chans make-mixer { rmx }
- in-chans 0 ?do rmx i 0 rev-amount mixer-set! drop loop
- rmx
- else
- #f
- then { rev-mx }
- #f { envs }
- matrix if
- matrix object-length 0> if
- in-chans 0 ?do
- matrix i object-ref { inlist }
- out-chans 0 ?do
- inlist i object-ref { outn }
- outn if
- outn number? if
- mx j ( inp ) i ( outp ) outn mixer-set! drop
- else
- outn env? outn array? || if
- envs unless
- in-chans make-array map! out-chans make-array end-map to envs
- then
- envs j ( inp ) array-ref i ( outp )
- outn env? if outn else :envelope outn :duration dur make-env then
- array-set!
- else
- $" %s: unknown element in matrix: %S" #( get-func-name outn ) string-format warning
- then
- then
- then
- loop
- loop
- else
- in-chans 0 ?do i out-chans < if mx i i matrix mixer-set! drop then loop
- then
- then
- sr unless
- \ ws-info ( start dur local-vars -- start dur )
- \
- \ This is normally done in RUN or RUN-INSTRUMENT, but here
- \ we haven't one of them.
- \
- start dur local-variables ws-info ( start dur )
- ( start ) seconds->samples { st }
- ( dur ) seconds->samples { samps }
- *output* in-file undef make-file->frame st samps inloc mx envs mus-mix drop
- rev-mx if *reverb* 1 make-frame st samps inloc rev-mx #f mus-mix drop then
- else
- in-chans make-frame { inframe }
- out-chans make-frame { outframe }
- in-chans make-array map!
- :file in-file :channel i :start inloc make-readin { rd }
- :input rd readin-cb :srate sr make-src
- end-map { srcs }
- envs if
- start dur run
- envs each
- each { en } env? if mx j ( inp ) i ( outp ) en env mixer-set! drop then end-each
- end-each
- in-chans 0 ?do inframe i srcs i array-ref 0.0 src frame-set! drop loop
- *output* i inframe mx outframe frame->frame frame->file drop
- rev-mx if *reverb* i inframe rev-mx outframe frame->frame frame->file drop then
- loop
- else
- start dur run
- in-chans 0 ?do inframe i srcs i array-ref 0.0 src frame-set! drop loop
- *output* i inframe mx outframe frame->frame frame->file drop
- rev-mx if *reverb* i inframe rev-mx outframe frame->frame frame->file drop then
- loop
- then
- then
- ;instrument
-
- : fullmix-test <{ :optional start 0.0 dur 1.0 -- }>
- .stack
- start now!
- :envelope #( 0 0 1 1 ) :duration dur :scaler 0.5 make-env { en }
- "pistol.snd" now@ dur fullmix
- dur 0.2 f+ step
- "oboe.snd" now@ dur 0 #( #( 0.1 en ) ) fullmix
- dur 0.2 f+ step
- ;
-
- 'snd provided? [if]
- \ ;;; bes-fm -- can also use bes-j0 here as in earlier versions
- instrument: bes-fm <{ start dur freq amp ratio index -- }>
- 0.0 0.0 { car-ph mod-ph }
- freq hz->radians { car-incr }
- ratio car-incr f* { mod-incr }
- :envelope #( 0 0 25 1 75 1 100 0 ) :scaler amp :duration dur make-env { ampenv }
- start dur #{ :degree 90.0 random } run-instrument
- ampenv env car-ph bes-j1 f* ( result )
- mod-ph bes-j1 index f* car-incr f+ +to car-ph
- mod-incr +to mod-ph
- end-run
- ;instrument
-
- : bes-fm-test <{ :optional start 0.0 dur 1.0 -- }>
- start now!
- now@ dur 440.0 10.0 1.0 4.0 bes-fm
- dur 0.2 f+ step
- ;
-
- include dsp
- [else]
- : bes-fm-test <{ :optional start 0.0 dur 1.0 -- }>
- ;
-
- \ --- Hilbert transform
-
- : make-hilbert-transform ( len -- gen )
- doc" Makes a Hilbert transform filter."
- { len }
- len 2* 1+ { arrlen }
- arrlen 0.0 make-vct { arr }
- len even? if len else len 1+ then { lim }
- lim len negate ?do
- i len + { kk }
- i pi f* { denom }
- 1.0 denom fcos f- { num }
- num f0<> i 0<> || if
- arr kk num denom f/ denom len f/ fcos 0.46 f* 0.54 f+ f* vct-set! drop
- then
- loop
- arrlen arr make-fir-filter
- ;
- <'> fir-filter alias hilbert-transform
- [then]
-
- \ SSB-FM
- \ ;;; this might be better named "quasi-ssb-fm" -- cancellations are not perfect
- struct
- cell% field sbfm-am0
- cell% field sbfm-am1
- cell% field sbfm-car0
- cell% field sbfm-car1
- cell% field sbfm-mod0
- cell% field sbfm-mod1
- end-struct sbfm%
-
- : make-ssb-fm ( freq -- ssb )
- { freq }
- sbfm% %alloc { sbfm }
- freq 0.0 make-oscil sbfm sbfm-am0 !
- freq half-pi make-oscil sbfm sbfm-am1 !
- 0.0 0.0 make-oscil sbfm sbfm-car0 !
- 0.0 half-pi make-oscil sbfm sbfm-car1 !
- 40 make-hilbert-transform sbfm sbfm-mod0 !
- 40 make-delay sbfm sbfm-mod1 !
- sbfm
- ;
- : ssb-fm ( gen modsig -- val )
- { gen modsig }
- gen sbfm-am0 @ 0.0 0.0 oscil
- gen sbfm-car0 @ gen sbfm-mod0 @ modsig hilbert-transform 0.0 oscil f*
- gen sbfm-am1 @ 0.0 0.0 oscil
- gen sbfm-car1 @ gen sbfm-mod1 @ modsig 0.0 delay 0.0 oscil f* f+
- ;
-
- \ ;;; if all we want are asymmetric fm-generated spectra, we can just
- \ ;;; add 2 fm oscil pairs:
-
- struct
- cell% field fm2-os1
- cell% field fm2-os2
- cell% field fm2-os3
- cell% field fm2-os4
- end-struct fm2%
-
- : make-fm2 ( f1 f2 f3 f4 p1 p2 p3 p4 -- )
- { f1 f2 f3 f4 p1 p2 p3 p4 }
- fm2% %alloc { fm2 }
- f1 p1 make-oscil fm2 fm2-os1 !
- f2 p2 make-oscil fm2 fm2-os2 !
- f3 p3 make-oscil fm2 fm2-os3 !
- f4 p4 make-oscil fm2 fm2-os4 !
- fm2
- ;
- : fm2 ( gen index -- val )
- { gen index }
- gen fm2-os1 @ gen fm2-os2 @ 0.0 0.0 oscil index f* 0.0 oscil
- gen fm2-os3 @ gen fm2-os4 @ 0.0 0.0 oscil index f* 0.0 oscil f+ 0.25 f*
- ;
-
- \ ;;; rms gain balance
- \ ;;; This is a translation of the rmsgain code provided by Fabio Furlanete.
-
- : make-rmsgain <{ :optional hp 10.0 -- gen }>
- doc" makes an RMS gain generator."
- 2.0 two-pi mus-srate f/ hp f* fcos f- { b }
- b b b f* 1.0 f- fsqrt f- { c2 }
- 1.0 c2 f- { c1 }
- #() :rmsg-c1 c1 array-assoc-set!
- ( rmsg ) :rmsg-c2 c2 array-assoc-set!
- ( rmsg ) :rmsg-q 0.0 array-assoc-set!
- ( rmsg ) :rmsg-r 0.0 array-assoc-set!
- ( rmsg ) :rmsg-avg 0.0 array-assoc-set!
- ( rmsg ) :rmsg-avgc 0 array-assoc-set!
- ( rmsg )
- ;
- : rmsgain-rms ( gen sig -- val )
- doc" runs an RMS gain generator."
- { gen sig }
- gen :rmsg-c1 array-assoc-ref sig f* sig f*
- gen :rmsg-c2 array-assoc-ref gen :rmsg-q array-assoc-ref f* f+
- dup gen :rmsg-q rot array-assoc-set! drop ( val ) fsqrt
- ;
- : rmsgain-gain ( gen sig rmsval -- val )
- doc" returns the current RMS gain."
- { gen sig rmsval }
- gen :rmsg-c1 array-assoc-ref sig f* sig f*
- gen :rmsg-c2 array-assoc-ref gen :rmsg-r array-assoc-ref f* f+
- dup ( val val ) gen :rmsg-r rot array-assoc-set! drop
- ( val ) f0= if rmsval else rmsval gen :rmsg-r array-assoc-ref fsqrt f/ then { this-gain }
- gen :rmsg-avg array-assoc-ref this-gain f+ gen :rmsg-avg rot array-assoc-set!
- ( gen ) :rmsg-avgc array-assoc-ref 1+ gen :rmsg-avgc rot array-assoc-set! drop
- sig this-gain f*
- ;
- : rmsgain-balance ( gen sig comp -- val )
- doc" scales a signal based on a RMS gain."
- { gen sig comp }
- gen sig gen comp rmsgain-rms rmsgain-gain
- ;
- : rmsgain-gain-avg ( gen -- val )
- doc" is part of the RMS gain stuff."
- { gen }
- gen :rmsg-avg array-assoc-ref gen :rmsg-avgc array-assoc-ref f/
- ;
- : rmsgain-balance-avg ( gen -- val )
- doc" is part of the RM gain stuff."
- :rmsg-avg array-assoc-ref
- ;
-
- : clm-ins-test <{ :optional start 0.0 dur 1.0 }>
- start now!
- now@ dur violin-test
- now@ dur fm-violin-test
- now@ dur pluck-test
- now@ dur vox-test
- now@ dur fofins-test
- now@ dur fm-trumpet-test
- now@ dur pqw-vox-test
- now@ dur flute-test
- now@ dur fm-bell-test
- now@ dur fm-insect-test
- now@ dur fm-drum-test
- now@ dur gong-test
- now@ dur attract-test
- now@ dur pqw-test
- now@ dur tubebell-test
- now@ dur wurley-test
- now@ dur rhodey-test
- now@ dur hammondoid-test
- now@ dur metal-test
- now@ dur drone/canter-test
- now@ dur reson-test
- now@ dur cellon-test
- now@ dur gran-synth-test
- now@ dur touch-tone-test
- now@ dur spectra-test
- now@ dur two-tab-test
- now@ dur lbj-piano-test
- now@ dur resflt-test
- now@ dur scratch-test
- now@ dur pins-test
- now@ dur zc-test
- now@ dur zn-test
- now@ dur za-test
- now@ dur clm-expsrc-test
- now@ dur exp-snd-test
- now@ dur expfil-test
- now@ dur graph-eq-test
- now@ dur anoi-test
- now@ dur fullmix-test
- now@ dur bes-fm-test
- ;
-
- \ clm-ins.fs ends here
|