G^ s      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                              ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q rstuvwxyz{|}~        !!!"# #!$"$#%$%%%&%'%(%)%*%+%,%-%.%/%0%1%2%3%4%5%6%7%8%9%:%;%<%=%>%?%@%A%B%C%D%E%F%G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X'Y'Z'['\']'^'_'`'a'b'c'd'e'f'g'h'i'j'k'l'm'n(o(p(q(r(s(t(u(v(w(x(y(z({(|(}(~((((((((((((((((((())))))))******+++++++++++++,-------............../////0000000000000172Safe,3Safe,4Safe,None$%&+,-/9:;<=?DQRT[(Lets you combine sets of arguments. e.g. 4(1 ::I "foo", 2 ::I "bar") `AddParams` (3 ::I "baz")means the same thing as '(1 ::I "foo", 2 ::I "bar", 3 ::I "baz")This is left-biased, just like i.e. if you say: *(99 ::I "same") `AddParams` (0 ::I "same")It'll mean the same as (99 ::I "same") > > :kind! SetEqual '["bye", "hi","bye","bye"] '["bye","hi","hi"] > SetEqual '["bye","hi","bye","bye"] '["bye","hi","hi"] :: Bool > = 'True x> . :kind! SetIntersection '[4,3,4,5] '[7,5,3] > SetIntersection '[4,3,4,5] '[7,5,3] :: [GHC.TypeLits.Nat] > = '[3, 5]So for example if you have: ^ foo = sd (440 ::I "freq") $ do s <- sinOsc (freq_ (A::A "freq!!!")) out 0 [s,s] @It'll tell you that you have an invalid synthdef with the error:  Couldn't match type 'False_IsSubsetOf  with 'True_IsSubsetOf  In the first argument of sinOsc , namely (freq_ (V :: A "freq!!!"))  TWheeeeeeeeeeeeeeee!i  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab(  !"#$%&'((#" !   $'(%&[   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab   None%&,DRguUnary signal operations. Many of these have functions so you don't need to use this internal representation (e.g. h has neg, etc).-This type might not be exposed in the future.lThere's a bug in some SC versions where .bitNot isn't implemented correctly. Vivid backfills it with a fix, so you can use BitNot with any SC version4Binary signal operations. For the simple ones (like , &, etc.), there are functions (like 56, 57S, etc.) that wrap them up so you don't have to make a ugen for them yourself.XIn the future these may not be exported -- we'll just have functions for all of them.Integer divisionFloat divisiona * (b + 1) == a * b + a a * b + a + b a * a * ba * a * b - a * b * b a * a - b * b a * a + b * b (a + b) ^ 2 (a - b) ^ 2 abs(a - b)"State monad to construct SynthDefsThe SynthDef is an under-construction synth definition The [Int] is the id supply. Its type definitely could change in the future The rate that a UGen computes atconstant value control rate audio rate demand rateRepresentation of Unit Generators. You usually won't be creating these by hand, but instead using things from the library in 89;Internal representation of Synth Definitions. Usually, use :$ instead of making these by hand. This representation (especially ) might change in the future.Given +good0 :: SDBody '["2"] () good0 = return () 7good1 :: SDBody '["3","1","3","1"] () good1 = return () /bad0 :: SDBody '["bwahaha"] () bad0 = return () outer :: SDBody '[ "1", "2", "3"]() outer = do zoomSDBody good0 -- works zoomSDBody good1 -- works -- zoomSDBody bad0 -- doesn't work - great!ghijklmnopqrstuvwxyz{|}~  !"#$%&'(gwihjklmnopqrstuvxyz{|}~ghijklmnopqrstuvwxyz{|}~ g7hijklmnopqrstuvwxyz{|}~2None,DIThis enforces type safety of the arguments -- e.g. if you have a synthdef 0> let x = sd (3 ::I "foo") bar > s <- synth x ()AThen this won't typecheck (because "bar" isn't an argument to x): > set s (4 ::I "bar"):Note that if you don't want this type safety, you can e.g. 1> Node n <- synth foo () > setG n (0.1 ::I "vol")Or: S> ns <- mapM (flip synth ()) [foo, bar, baz] > map (setG (0::I "asdf") . unNode) nsOr: > n <- synthG foo ()(You also may want to look at T if you want to construct a list which has synthdefs or nodes of different types)So let's say you have a node: %foo :: Node '["amp", "freq", "phase"]*and you want to add it to a list of nodes: ns :: [Node '["freq", "phase"]]aIf you don't plan on setting the "amp" argument, you can "shrink" to the compatible arguments: ns' = shrinkNodeArgs foo : ns((The same thing exists for SynthDefs -- ;)                    None%&,-69;<=DR$vDon't define other instances of this! (Unless you know what you're doing) Instance resolution could get screwed up.(For  (Float) values$%&'()*$%$%$%&'()*None%&+,-9:;<=DQRT- "UGen Arg"0+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX+,-./0123457689:;<=5678:<=3412-./0;+9,)+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXSafe]-Picks a random element from the provided list^KReturns an infinite list of randomly-chosen elements from the provided liste.g. ,> > take 5 <$> picks [1,2,3,4] > [2,3,1,1,3]]^]^]^]^None_`abc_`abc_`abc_`abc NoneT;defghijklmnopqrstuvwxyz{|}~%defghijklmnopqrstuvwxyz{|}~%z{|}~mnopqrsghijkltuvwxydef defghijklmnopqrstuvwxyz{|}~None $,DR[ -Action to take with a UGen when it's finished-This representation will change in the futureFix for github.com supercollider supercolliderissues1749 Alias for $Add a unit generator with one output Polyphonic -- returns a list of ;s. In the future this might be a tuple instead of a listDefine a Synth DefinitionNDefine a Synth Definition and give it a name you can refer to from e.g. sclang"Set the calculation rate of a UGene.g. kplay $ do s0 <- 1 ~+ (lfSaw (freq_ 1) ? KR) s1 <- 0.1 ~* lfSaw (freq_ $ 220 ~* s0) out 0 [s1, s1] Mnemonic: "?" is like thinkingAIn the future, the representation of calculation rates may changeLike -< but for svThis is the hash of the UGen graph and params, but not the name! So (re)naming a SynthDef will not change its hash.  !"#$%&'(gwihjklmnopqrstuvxyz{|}~$%9$%ghijklmnopqrstuvwxyz{|}~9 None,DRMultiply signalsExponentiation of signals Add signalsDivide signals(Test signals for left greater than right4Test signals for left greater than or equal to right%Test signals for left less than right1Test signals for left less than or equal to rightSubtract signalsBuild your own!The calculation rate of the result is the larger (more frequent) of the 2 input signals (So you shouldn't need to use "?" very much!) Alias of . Shorter, fer livecodinBuild your own, from gs Alias of zConvert from a midi note number (0-127, each representing a musical half step) to a frequency in hz (cycles per second) Inverse of _The prime is to not conflict with "abs" in the prelude. May just use "uOp Abs" in the futureThe prime, like /, is to not conflict with a prelude definition.!Remember you can always just use: uOp TanHLike =1 but the lo value is always negative the hi valueBitwise xor. Short for  biOp BitXor 786744446 None *,9:;ADQRTc!SC compatibilitySC compatibility Alias of , for SC compatibility!For SC compatibility -- alias of  Alias of # Alias of , for SC compatibility!For SC compatibility -- alias of  *This may change in the future** Alias of  for SC compatibility Alias of  for SC compatibility Alias of  for SC compatibility Alias of  for SC compatibility Alias of  for SC compatibility Alias of B Alias of !For SC compatibility -- alias of !For SC compatibility -- alias of  Interpolation!For SC compatibility -- alias of  !For SC compatibility -- alias of  irBufSize_ Alias, for SC compatibilityFor SC compatibility: Alias of  for SC compatibility Alias of  for SC compatibility Alias of , for SC compatibility  Alias of , for SC compatibility5 Alias of 4 for SC compatibility7 Alias of 6, for SC compatibility9Shorter alias for 8PAlias for "threshold_"SYou can use "trig_" insteadUShort alias for V[ Alias of \      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc None,d$"Implements the (optimized) formula:)compensationFactor = (root / freq) ** expPHigher frequencies are normally perceived as louder, which AmpComp compensates.""Note that for frequencies very much smaller than root the amplitudes can become very high. In this case limit the freq with freq.max(minval), or use AmpCompA." Computed at AR, KR, or IRe"Higher frequencies are normally perceived as louder, which AmpCompA compensates. Following the measurings by Fletcher and Munson, the ANSI standard describes a function for loudness vs. frequency. Note that this curve is only valid for standardized amplitude."8_NOTE_ "Apart from freq, the values are not modulatable""This is a better pitch follower than ZeroCrossing, but more costly of CPU. For most purposes the default settings can be used and only in needs to be supplied. Pitch returns two values (via an Array of OutputProxys, see the OutputProxy help file), a freq which is the pitch estimate and hasFreq, which tells whether a pitch was found. Some vowels are still problematic, for instance a wide open mouth sound somewhere between a low pitched short a sound as in sat , and long i sound as in fire<, contains enough overtone energy to confuse the algorithm."+"None of these settings are time variable."Can only run at KRdededede None,DR fAdd a single LocalBuf for FFTCan use  for "numChans" and ! for "Vivid.UGens.Args.numFrames"g(Unlike in SC, "doneAction" defaults to 2hAUnlike in SC, "doneAction" defaults to 2 and "loop" defaults to 0i Defaults to  . Can be  too but it's not recommended.j Defaults to  . Can be  too but it's not recommended.k Defaults to  . Can be  too but it's not recommended.3Note you don't need to use "buf_" when you use thisl Defaults to  . Can be  too but it's not recommended.3Note you don't need to use "buf_" when you use thism Defaults to  . Can be  too but it's not recommended.3Note you don't need to use "buf_" when you use thisn Defaults to  . Can be  too but it's not recommended.3Note you don't need to use "buf_" when you use thiso"phase" must be at audio rate ()p"phase" must be at audio rate ()q"phase" must be the output of delTapWrV delTapRd :: (Args '["buf", "phase", "delSecs"] '["interp"] a) => s -> SDBody a Signal fghijklmnopq fghijklmnopq ijklmnopfqgh fghijklmnopqNoneDR[r5Convert an audio rate signal to a control rate signals5Convert a control rate signal to an audio rate signalrsrsrsrsNone,w"This one can run at control rate (M). It's inefficient so only useful for very small kernels or control rate.tuvwxtuvwxtuvwxtuvwxNone,OT yz{|}~ yz{|}~ yz{|}~ yz{|}~None,:OT&This correctly decodes/encodes to OSC:d"Dbrown returns numbers in the continuous range between lo and hi , Dibrown returns integer values."2"The arguments can be a number or any other UGen.">"See Pbrown, BrownNoise for structurally related equivalents." Defaults to "+ never plays the same value twice, whereas  chooses any value in the list":The list come second so you can curry the repeats and use  or "+ never plays the same value twice, whereas  chooses any value in the list"  None,DRNote this can only run at ARE"secs" is the lookahead time -- if you're coming from SC you can use Note this can only run at ARE"secs" is the lookahead time -- if you're coming from SC you can use None,DYou can use "wintype_" and "winsize_" if you're used to the SC args:DYou can use "wintype_" and "winsize_" if you're used to the SC args:3"As [the number of bins] rises, so will CPU usage."3"Alternates blocks of bins between the two inputs."None,Band-pass filterRq: bandwidth / cutofffreqHigh-pass filterIThe "lagSecs" arg is the same as the "lagTime" arg in SC (you can use  if you like)CThe calculation rate of this is whatever its "in" is (cool, right?)4'lag2 (in_ x)' is equal to 'lag (in_ (lag (in_ x)))'4The calculation rate of this is whatever its "in" is@'lag3 (in_ x)' is equal to 'lag (in_ $ lag (in_ $ lag (in_ x)))'4The calculation rate of this is whatever its "in" iscNote the default for both AR and KR are the same: 0.995. In SC lang, the KR one defaults to 0.9.Low-pass filterDb6 is the boost or attenuation of the signal in decibels!  !None,None,"Moves all the components of a signal by a fixed amount but does not preserve the original harmonic relationships." You might want  instead.None,I"A linear-interpolating sound generator based on the difference equation:!x[n+1] = a - b * sqrt(abs(x[n]))"Only has an AR instanceF"A non-interpolating sound generator based on the difference equation:!x[n+1] = a - b * sqrt(abs(x[n]))"Only has an AR instance.H"A cubic-interpolating sound generator based on the difference equation:x[n+1] = (a * x[n] + c) % mAThe output signal is automatically scaled to a range of [-1, 1]." Only has a AR methodI"A linear-interpolating sound generator based on the difference equation:x[n+1] = (a * x[n] + c) % mAThe output signal is automatically scaled to a range of [-1, 1]." Only has a AR methodF"A non-interpolating sound generator based on the difference equation:x[n+1] = (a * x[n] + c) % mAThe output signal is automatically scaled to a range of [-1, 1]." Only has a AR methodNone,F"A non-band-limited sawtooth oscillator. Output ranges from -1 to +1."F"A non-band-limited triangle oscillator. Output ranges from -1 to +1." Sine wave!Width is "duty cycle from 0 to 1"    None,8"This UGen simply outputs the initial value you give it"None, G"Generates noise whose spectrum falls off in power by 6 dB per octave."y"Generates noise whose values are either -1 or 1. This produces the maximum energy for the least peak to peak amplitude."*"Generates random impulses from -1 to +1."*"Generates random impulses from -1 to +1.""Generates noise which results from flipping random bits in a word. This type of noise has a high RMS level relative to its peak to peak level. The spectrum is emphasized towards lower frequencies."E.g. Jplay $ 0.1 ~* lfClipNoise (freq_ $ xLine (start_ 1e3, end_ 1e4, secs_ 10))$"Like LFClipNoise, it generates the values -1 or +1 at a rate given by the freq argument, with two differences: " - no time quantization " - fast recovery from low freq values " If you don't need very high or very low freqs, or use fixed freqs, LFDClipNoise is more efficient."=Freq is "approximate rate at which to generate random values"=Freq is "approximate rate at which to generate random values"=Freq is "approximate rate at which to generate random values""Generates noise whose spectrum falls off in power by 3 dB per octave. This gives equal power over the span of each octave. This version gives 8 octaves of pink noise."D"Generates noise whose spectrum has equal power at all frequencies."None, TemporaryAudio bus input (usually mic)None,BThe (current) duration of a control block on the server in seconds Equal to 1 ~/ controlRate&The current control rate of the server Equal to 1 ~/ controlDurThe number of audio busesThe number of open buffers    None, Band-pass filter Can cause CPU spikesThis is only in AR                        None,4     None,[P*Note this has different behavior than 0.1!** "lo" is not implied by "hi".SIf you know you always want "lo" to be negative "hi" (like -1 to 1) you can use biOp ]Returns 1.0 if "in" is between "lo" and "hi" (including equalling "lo" or "hi"). Else 0.0.8Can be audio rate (AR), control rate (KR), or fixed (IR)Lo and hi default to 0 and 1DReturns the value of whichever of the 2 signals is changing least;Its default calculation rate is the highest of its 2 inputsF"Converts a linear range of values to an exponential range of values."Args:$*in* - The input signal to convert.%*srclo* - Lower limit of input range.%*srchi* - Upper limit of input range.&*dstlo* - Lower limit of output range.&*dsthi* - Upper limit of output range.J*"The dstlo and dsthi arguments must be nonzero and have the same sign."**=This will have the same calculation rate as its "in" argument Opposite of  None,Tpos is -1 to 1level is "a control-rate level input"KMixes down a list of audio rate inputs to one. The list can't be empty.!This is more efficient than e.g.  foldl1 (~+)!None,"None,1"mix", "room", and "damp" params range from 0 to1#None,    $None,DR! Only runs at Args: - warp -- "Mapping curve. 0 is linear, 1 is exponential (e. g. for freq or times)" - lag -- "Lag factor to dezpipper cursor movement"" Only runs at Args: - warp -- "Mapping curve. 0 is linear, 1 is exponential (e. g. for freq or times)" - lag -- "Lag factor to dezpipper cursor movement"!" !""!!" %None$T[%QThis is stored as the number of seconds since Jan 1 1900. You can get it with +>+]This isn't a base type in the OSC standard but the response message from "/status" uses it...-An OSC message, e.g. OSC "/n_free" [OSC_I 42]2[Encode OSC bundles, specifically for NRT synthesis. (It's more than just "mconcat . map 1").Note also that the last action is when the song ends - so if you want e.g. a note to hold at the end you need to add a "wait"#$%&'()*+,-./    01234567#$%&'()*+,-./01234567-.'()*+,/0%&#$1234567#$%&'()*+,-./    01234567&None,D[VIf you've started the SC server with a non-default number of buffer ids, (e.g. with the "-b" argument), you can reflect that hereoNote that the buffer ids start at 512, to not clash with any that another client (e.g. sclang) has allocatedGHIJKLMNOPQRSTUVW    GHIJKLMNOPQRSTUVW    SGHIJKLMNOPQRTVWUG HIJKLMNOPQRSTUVW'None[\ To prevent NodeId clashes when multiple clients are connected to the same server, each client should have a separate clientId, which keeps the nodeId separate. Sclang's default clientId is 0, and ours is 1, so you can run both at the same time without config.a,You usually don't need to call this functionLUse this if to connect on a non-default port or to a server not at localhostOtherwise the connection is created when it's needed. You can also use this to explicitly create the connection, so the computation is done upfrontThe ' is the ip address or "localhost". The  is the portb3Explicitly close Vivid's connection to a SC server.IDay-to-day, you can usually just let your program run without using this.For example though, if you're running code that uses Vivid in ghci, and you ":r", you'll want to disconnect first -- there are processes running which can step on the toes of your new instanceAlso if you want to change the params of your connection (e.g. to connect to a different server), you'll want to disconnect from the other connection firstcThe default _scConnectConfig_clientId is 1, and sclang's is 0, so you should be able to run vivid side-by-side with the SC IDE out of the box.f&Print all messages other than "/done"sg4If you don't want to hear what the server has to sayXYZ[\]^_`abcdefghiXYZ[\]^_`abcdefghiacfgXYZ[\]^b_`hideXYZ[\]^_`abcdefghi(None,:ADT|50 is linear, positive curves up, negative curves down Same as "Env.shapeNumber" in SC.DThis is useful if you want to set a the env shape of a running synth'"shapeNumber" with a name I like better!nopqrstuvwxyz{|}~nopqrstuvwxyz{|}~nopqrstuvwxyz{|}~ nopqrstuvwxyz{|}~)None $,:DRT[ Defaults to  Defaults to 9"Generates a line from the start value to the end value."fNote this won't change after it's created, so if you'd like to e.g. be able to change the "freq" in #line (start_ 0, end_ (A::A "freq"))you should write ((A::A "freq") ~* line (start_ 0, end_ 1)instead.Defaults to KR""Simple linear envelope generator"6Can't change after it's created -- see the note about  if you want it toOnly computes at KRPercussive hit doneAction; is currently 2 but may either be 0 or 2 in future versions"Generates an exponential curve from the start value to the end value. Both the start and end values must be non-zero and have the same sign."Defaults to KR5NoneAT      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"*NoneE.g. play byteBeatFromHelpFileE.g. (play $ baseThing $ \t -> t &&& (t >>> 8)+NoneDSend an -$ message to the SuperCollider serverJSend a ByteString to the SuperCollider server. You usually want to use call instead.4Blocks until the server finishes processing commands1As the user, you probably don't want to use this:2Many commands already include a "sync" -- e.g.  makeBuffer already syncs.DWhen you do want to do an explicit sync you probably want to use  instead, or Wait, in seconds5Send a synth definition to be loaded on the SC servergNote that this is sort of optional -- if you don't call it, it'll be called the first time you call synth with the SynthDef@Send an OSC message and wait for it to complete before returning    ,None-9;-None -9;DT[fYour "emergency" button. Run this and everything playing on the SC server will be freed -- silence!GCorresponds to the cmd-. / ctrl-. key command in the SuperCollider IDE Alias of Make an empty bufferThe Int32 is the buffer length  in samplesn. Multiply seconds by the default sample rate of the server (usually 48000) to get the number of samplesNote that this is synchronous -- it doesn't return until the buffer is allocated (in theory, this could hang if e.g. the UDP packet is lost)5Make a buffer and fill it with sound data from a fileThe file path should be absolute (not relative), and if you're connecting to a non-localhost server don't expect it to be able to read files from your hard drive!/Note that like "makeBuffer" this is synchronousWrite a buffer to a file Synchronous.0    %&GHIJKLMNOPQRSTUVWXYZ[\]^abc%&   abXYZ[\]^c.None-9;[:Generate a file of actions that SC can use to do NRT with.3If you just want the .aiff file, you probably want  instead.#Usage: this will create a file at "tmpNRTout.aiff" with your sound :: NRT a: XwriteNRT "/tmp/foo.osc" test scsynth -N /tmp/foo.osc _ /tmp/NRTout.aiff 44100 AIFF int16pGenerate an audio file from an NRT action -- this can write songs far faster than it would take to play them.qThe file type is detected from its extension. The extensions supported at the moment are .aif, .aiff, and .wav'(Mac OS X users will need to make sure scsynth is in their $PATH)M(And I apologize, but I really don't know what Windows users will need to do)9Currently doesn't work with single quotes in the filename   /None-9;D.Schedule an action to happen at the given time/Schedule an action to happen n seconds from nowSchedule an action to happen right now. Because of server latency this could arrive late, so you might want to do something like doScheduledIn 0.01 instead:0None$,-9;5Given a UGen graph, just start playing it right away.e.g. Hplay $ do s <- 0.2 ~* lpf (in_ whiteNoise, freq_ 440) out 0 [s, s].The "out" is optional, too -- so you can write -play $ 0.2 ~* lpf (in_ whiteNoise, freq_ 440)%and an "out" will be added, in stereo Immediately stop a synth playingThis can create a "clipping" artifact if the sound goes from a high amplitude to 0 in an instant -- you can avoid that with e.g. 5?! or with an envelope (especially envGate)+Set the given parameters of a running synthe.g._let setTest = sd (0.05 ::I "pan") $ out 0 =<< pan2 (in_ $ 0.1 ~* whiteNoise, pos_ (A::A "pan"))s <- synth setTest ()set s (-0.05 ::I "pan")uAny parameters not referred to will be unaffected, and any you specify that don't exist will be (silently) ignoredDCreate a real live music-playing synth from a boring, dead SynthDef.If you haven't defined the SynthDef on the server, this will do it automatically (Note that this may cause jitters in musical timing)Given...+let foo = sd () $ out 0 [0.1 ~* whiteNoise]!...you can create a synth with... synth foo ()cCareful!: The SC server doesn't keep track of your nodes for you, so if you do something like...s <- synth someSynth ()2s <- synth oops () -- 's' is overwrittenk...you've got no way to refer to the first synth you've created, and if you want to stop it you have to  cmdPeriod0(If you want to interop with SC's language, use sdNamed and )Make a synth, Gradually typed -- doesn't check that _ is a subset of _ Useful e.g. if you want to send a bunch of args, some of which may be discarded2(Personally I'd recommend not using this function)%let s = undefined :: SynthDef '["ok"]%synth s (4::I "ok", 5::I "throwaway")<interactive>:275:7:BCould not deduce (Elem "ignore" '[]) arising from a use of synth &synthG s (4::I "ok", 5::I "throwaway")(works) addAction options, from SC docs:P0: add the new node to the the head of the group specified by the add target ID.P1: add the new node to the the tail of the group specified by the add target ID.H2: add the new node just before the node specified by the add target ID.G3: add the new node just after the node specified by the add target ID.[4: the new node replaces the node specified by the add target ID. The target node is freed.Stop the SuperCollider server% @None,_ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'(gwihjklmnopqrstuvxyz{|}~    $%+-/79;]^      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"%&5GHIJKLMNOPQRSTUVWXYZ[\]^abcnopqrstuvwxyz{|}~5%&8None_ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'(gwihjklmnopqrstuvxyz{|}~    $%+-/79;]^      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"%&5GHIJKLMNOPQRSTUVWXYZ[\]^abcnopqrstuvwxyz{|}~1None,Dbrown example from the SC help fileABCDEFFGHIJKLMNNOOPQRSSTRUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !""#$%&'()*+,-./0123456789:;<=>?@ABCDDEEFGHIIJKKL<MNOPQRSTUVWXYZ[\]^_`abcddeeffgghijklmnopqrstuvwxyz{|}~                                                :; 7  6                                                                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                             ?      !"#$%&'()*+,-./0123456789:=;<=>? @ A B!C!D!E"F#G#H$I$J%K%K%L%L%M%N%O%P%Q%R%S%S%T%U%V%W%X%Y%Z%[%\%]%^%_%`%a%b%c%d%e%f%g%h%i%j%k&l&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z&{'|'|'}'~''''''''''''''''''((((((((((((((((((((((((((((((((((())))))))******+++++++>++++++,-------............../////00000000000001                       !"#$%#$&'()*+$,%-%.%/%0%1%2&3&4567568'9':';'<'=(>(?-@0A0B0C#DE#$F#$G#$H#$I#$J#$K#$L#$M#$N#$O#$P#$Q#$R#ST#SU#$V#$W#$X#$YZ[\#]^#]_#]`#]abcdbcebcfbcgbchbcibcjbckbclbcmbcnbcobcpbcqbcrbcsbctuvwuvxuvyuvzuv{uv|uv}uv~uvuvuvuuuuuuu###D#D#D#D#D#D#D#D#D#D#D#D#D#D#S################################################$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$$vivid-0.2.0.3-1UaADN4sttw2ZpwuXrsRkTVivid.SynthDefVivid.SynthDef.TypesafeArgsVivid.SynthDef.TypesVivid.SCServer.TypesVivid.SynthDef.ToSigVivid.SynthDef.FromUAVivid.RandomnessVivid.OSC.UtilVivid.SynthDef.LiterallyVivid.UGens.AlgebraicVivid.UGens.ArgsVivid.UGens.AnalysisVivid.UGens.BufferVivid.UGens.ConversionVivid.UGens.ConvolutionVivid.UGens.DelaysVivid.UGens.DemandVivid.UGens.DynamicsVivid.UGens.FFTVivid.UGens.Filters.LinearVivid.UGens.Filters.NonlinearVivid.UGens.Filters.PitchVivid.UGens.Generators.Chaotic$Vivid.UGens.Generators.Deterministic"Vivid.UGens.Generators.SingleValue!Vivid.UGens.Generators.StochasticVivid.UGens.InOutVivid.UGens.InfoVivid.UGens.Filters.BEQSuiteVivid.UGens.FiltersVivid.UGens.MathsVivid.UGens.MultichannelVivid.UGens.RandomVivid.UGens.ReverbsVivid.UGens.TriggersVivid.UGens.UserInteraction Vivid.OSCVivid.SCServer.StateVivid.SCServer.ConnectionVivid.EnvelopesVivid.UGens.EnvelopesVivid.ByteBeatVivid.Actions.ClassVivid.Actions.IOVivid.SCServerVivid.Actions.NRTVivid.Actions.Scheduled Vivid.ActionsVivid.UGens.ExamplesVivid.UGens.UndocumentedVivid.UGens.SynthControlVivid.UGens.Generators.Granular Vivid.UGens~+~*VividUGenssd shrinkSDArgsshrinkNodeArgsclipgetTimelagVivid.NoPluginstransformers-0.5.2.0Control.Monad.Trans.State.Lazy execStateElemSubset AddParamsTagListAllTags tagStringsVarList InnerVarsmakeTypedVarList TypedVarListIVarSet GetSymbolVals getSymbolValsVVsVariableSetEqualIsElemOf Bool_IsElemOf True_IsElemOfFalse_IsElemOf IsSubsetOfSetUnion SetInsertBool_IsSubsetOfTrue_IsSubsetOfFalse_IsSubsetOfElemBoolToBoolSubsetBoolToBool emptyVarSettoItoF iToLiteralVariToVar$fTagList(,,,,,,,,,,,,,,)$fTagList(,,,,,,,,,,,,,)$fTagList(,,,,,,,,,,,,)$fTagList(,,,,,,,,,,,)$fTagList(,,,,,,,,,,)$fTagList(,,,,,,,,,)$fTagList(,,,,,,,,)$fTagList(,,,,,,,)$fTagList(,,,,,,)$fTagList(,,,,,)$fTagList(,,,,)$fTagList(,,,) $fTagList(,,) $fTagList(,)$fTagListVariable $fTagList()$$fVarList(,,,,,,,,,,,,,,,,,,,,,,,,,)#$fVarList(,,,,,,,,,,,,,,,,,,,,,,,,)"$fVarList(,,,,,,,,,,,,,,,,,,,,,,,)!$fVarList(,,,,,,,,,,,,,,,,,,,,,,) $fVarList(,,,,,,,,,,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,,)$fVarList(,,,,,,,,,,,)$fVarList(,,,,,,,,,,)$fVarList(,,,,,,,,,)$fVarList(,,,,,,,,)$fVarList(,,,,,,,)$fVarList(,,,,,,)$fVarList(,,,,,)$fVarList(,,,,)$fVarList(,,,) $fVarList(,,) $fVarList(,) $fVarListI $fVarList() $fVarList(,)0$fVarListAddParams $fRandomI $fRealFloatI $fFloatingI $fRealFracI$fRealI$fEnumI $fFractionalI$fNumI$fShowI $fShowVarSet$fGetSymbolValsproxy$fGetSymbolValsproxy0$fShowVariable$fShowAddParams$fOrdI$fReadI$fEqIUnaryOpNegNotIsNilNotNilBitNotAbsAsFloatAsIntCielFloorFracSignSquaredCubedSqrtExpRecipMIDICPSCPSMIDI MIDIRatio RatioMIDIDbAmpAmpDbOctCPSCPSOctLogLog2Log10SinCosTanArcSinArcCosArcTanSinHCosHTanHRandRand2LinRand BiLinRandSum3RandDistortSoftClipCoin DigitValueSilenceThru RectWindow HanWindow WelchWindow TriWindowRampSCurveNumUnarySelectorsBinaryOpAddSubMulIDivFDivModEqNeLtGtLeGeMinMaxBitAndBitOrBitXorLcmGcdRoundRoundUpTruncAtan2HypotHypotxPow ShiftLeft ShiftRight UnsignedShiftFillRing1Ring2Ring3Ring4DifSqrSumSqrSqrSumSqrDifAbsDifThreshAMClipScaleNegClip2ExcessFold2Wrap2FirstArg RandRange ExpRandRangeNumBinarySelectorsSDBody'CalculationRateIRKRARDRUGenNameUGName_SUGName_UUGName_BUGen _ugenName_ugenCalculationRate_ugenIns _ugenNumOutsSDName SDName_Named SDName_HashSynthDef_sdName _sdParams_sdUGensSignalConstantParamUGOut zoomSynthDef zoomSDBody $fShowSignal $fEqSignal $fShowSDName $fEqSDName $fReadSDName $fOrdSDName$fShowCalculationRate$fReadCalculationRate$fEqCalculationRate$fEnumCalculationRate$fOrdCalculationRate$fShowBinaryOp $fEqBinaryOp $fOrdBinaryOp$fEnumBinaryOp $fShowUnaryOp $fEqUnaryOp $fOrdUnaryOp $fEnumUnaryOp$fShowUGenName $fEqUGenName $fShowUGen$fEqUGen$fShowSynthDefSyncIdBufferId _unBufferId HasNodeId getNodeIdNodeId _unNodeIdNodeunNode$fHasNodeIdNode$fHasNodeIdNodeId $fShowNodeId $fEqNodeId $fOrdNodeId $fReadNodeId$fShowBufferId $fEqBufferId $fOrdBufferId$fReadBufferId $fShowSyncId $fReadSyncId $fEqSyncId $fOrdSyncIdToSigtoSig$fToSigStateTargs$fToSigBufferIdargs $fToSignargs$fToSigVariableargs$fToSigSignalargsArgsAllEqualUA NoDefaultsOverwritingArgs DefaultArgsFromUAUAsArgs SDBodyArgsfromUASDBodyfromUAWithDefaultsnoneuaArgValuaArgValWDefault#$fFromUA(,,,,,,,,,,,,,,,,,,,,,,,,,)"$fFromUA(,,,,,,,,,,,,,,,,,,,,,,,,)!$fFromUA(,,,,,,,,,,,,,,,,,,,,,,,) $fFromUA(,,,,,,,,,,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,,)$fFromUA(,,,,,,,,,,,)$fFromUA(,,,,,,,,,,)$fFromUA(,,,,,,,,,)$fFromUA(,,,,,,,,)$fFromUA(,,,,,,,)$fFromUA(,,,,,,)$fFromUA(,,,,,)$fFromUA(,,,,) $fFromUA(,,,) $fFromUA(,,) $fFromUA(,) $fFromUAUA$fFromUANoDefaults$fShowNoDefaults$fEqNoDefaults$fOrdNoDefaults$fReadNoDefaultspickpicksalign floatToWord wordToFloat doubleToWord wordToDouble OutputSpec_outputSpec_calcRate InputSpecInputSpec_UGenInputSpec_Constant_inputSpec_uGen_index_inputSpec_uGen_outputIndex_inputSpec_constant_indexUGenSpec_uGenSpec_name_uGenSpec_calcRate_uGenSpec_inputs_uGenSpec_outputs_uGenSpec_specialIndex ParamName_paramName_name_paramName_indexInParamArray SynthDefFileLiteralSynthDef _synthDefName_synthDefConstants_synthDefParameters_synthDefParamNames_synthDefUGens_synthDefVariantsdecodeSynthDefFileencodeSynthDefFile uOpToSpecialI specialIToUOpbiOpToSpecialIspecialIToBiOp sdLitPretty$fShowParamName$fShowInputSpec$fReadInputSpec $fEqInputSpec$fShowOutputSpec$fReadOutputSpec$fEqOutputSpec$fShowUGenSpec$fShowVariantSpec$fShowLiteralSynthDef$fShowSynthDefFile DoneAction DoNothing FreeEnclosingDoneAction_AsNumsdPretty doneActionNum sdToLiteral getSDHashNameaddUGen addMonoUGen addPolyUGensdNamed makeSynthDef? getCalcRateencodeSD$fHashableSynthDef$fShowDoneAction$fEqDoneAction~**~/~>~>=~<~<=~-binaryOpbiOpunaryOpuOpmidiCPScpsMIDIabs'negtanh'clip2xora_a0_a1_a2_active_add_ ampThreshold_aReal_areal_aImag_aimag_ attackSecs_ attackTime_b_b1_b2_bias_bins_bits_buf_buffer_bus_bw_bwr_c_chans_ clampSecs_ clampTime_clar_coef_control_ crossFade_ crossfade_ curve_curvedamp_db_ decaySecs_ decayTime_ decaytime_delay_ delaySecs_ delayTime_ delaytime_density_depth_depthVariation_dn_ doneAction_ downSample_dsthi_dstlo_dur_ duration_end_ execFreq_exp_ exponent_fftSize_fftsize_frames_ frameSize_ framesize_freeze_freq_ friction_g_gain_gate_hi_hop_id_in_ initFreq_ integrate_interp_interpolation_iphase_ irBufNum_ irbufnum_kernel_lag_lagSecs_lagTime_length_level_lo_loop_m_max_maxBinsPerOctave_ maxDelaySecs_ maxDelayTime_ maxdelaytime_maxFreq_maxVal_median_min_minFreq_minmax_minVal_mix_mul_ numChans_ numFrames_ numTeeth_offset_onset_ peakLevel_peakThreshold_phase_pitchDispersion_pos_post_ preLevel_rate_rateVariation_radius_ratio_ recLevel_ relaxSecs_ relaxTime_ releaseSecs_ releaseTime_repeats_reps_reset_ resetPos_room_root_rq_rs_run_sawFreq_secs_shift_ slopeAbove_ slopeBelow_spring_srchi_srclo_ startPos_start_step_stretch_ susLevel_ syncFreq_ threshold_thresh_timeDispersion_trig_trigger_trigid_ug_ugen_up_warp_width_wipe_winsize_ windowSize_wintype_ windowType_xi_ makeMakeUGen makeMonoUGen makePolyUGenmakeUGenampComppitchlocalBufplayBuf recordBuf bufChannelsbufDur bufFrames bufRateScale bufSampleRate bufSamplesbufRdbufWrphasora2kk2a convolution convolution2 convolution2L convolution3partConvallpassCallpassLallpassNcombCcombLcombNdelay1delay2delayCdelayLdelayNinfdbrowndemanddibrowndiwhitedranddseqdserdshufdwhitedxrand companderlimiter normalizerfftifftpv_binScramble pv_binShift pv_brickWallpv_conformalMappv_conj pv_diffuser pv_localMax pv_magAbove pv_magBelow pv_magClip pv_magFreeze pv_magNoise pv_magShift pv_magSmear pv_magSquared pv_phaseShiftpv_phaseShift270pv_phaseShift90 pv_randComb pv_rectCombapfbpfbpz2brfbrz2decaydecay2fosformlethpfhpz1hpz2 integratorlag2lag3leakDClpflpz1lpz2midEQonePoleoneZerorhpfrlpframpresonzringzslopesostwoPoletwoZeroballhasher mantissaMaskmedianslewspringtBall freqShift pitchShiftvibratocuspLcuspNlinCongClinCongLlinCongNfSinOscimpulselfCublfGausslfParlfPulselfSawlfTripulsesawsinOscsyncSawvarSawdc brownNoise clipNoisedustdust2 grayNoise lfClipNoise lfdClipNoise lfdNoise0 lfdNoise1 lfdNoise3lfNoise0lfNoise1lfNoise2 pinkNoise whiteNoiseaInkInoutaOutkOut kOut_monosoundIncheckBadValues controlDur controlRate numAudioBuses numBuffersnumControlBuses numInputBusesnumOutputBusesnumRunningSynthsradiansPerSample sampleDur sampleRatesubsampleOffsetbAllpass bBandPass bBandStopbHiPassbHiShelfbLowPass bLowPass4 bLowShelfbPeakEQmoogFFinRange leastChangelinExp mostChangemulAddpan2selectmixexpRandlinRandrandfreeVerblatch pulseCountmouseYmouseX OSCBundle TimestampOSCDatumOSC_IOSC_SOSC_FOSC_DOSC_BOSC encodeOSC decodeOSCencodeOSCBundleencodeOSCBundlesencodeTimestamputcToTimestampaddSecsdiffTimestampsinitTreeCommand$fShowOSCDatum$fReadOSCDatum $fEqOSCDatum $fOrdOSCDatum $fShowOSC $fReadOSC$fEqOSC$fOrdOSC$fShowTimestamp$fReadTimestamp $fEqTimestamp$fOrdTimestamp$fShowOSCBundle$fReadOSCBundle $fEqOSCBundle SCServerState#_scServerState_socketConnectStarted_scServerState_socket_scServerState_listener!_scServerState_availableBufferIds_scServerState_maxBufIds_scServerState_availableNodeIds_scServerState_availableSyncIds_scServerState_syncIdMailboxes$_scServerState_serverMessageFunction_scServerState_definedSDs scServerState setClientIdnumberOfSyncIdsToDropsetMaxBufferIdsgetNextAvailableSCConnectConfig_scConnectConfig_hostName_scConnectConfig_port_scConnectConfig_clientId_scConnectConfig_connProtocol&_scConnectConfig_serverMessageFunction ConnProtocolConnProtocol_UDPcreateSCServerConnectioncloseSCServerConnectiondefaultConnectConfigwaitForSync_iowaitForSync_io_noGCdefaultMessageFunctionignoreMessagesFunctiongetMailboxForSyncIdgetSCServerSocket$fShowConnProtocol$fReadConnProtocol$fEqConnProtocol$fOrdConnProtocolEnvCurve Curve_Step Curve_Linear Curve_LinCurve_Exponential Curve_Exp Curve_Sine Curve_Sin Curve_Welch Curve_Wel Curve_Squared Curve_Sqr Curve_Cubed Curve_Cub Curve_Curve EnvSegment_envSegment_targetVal_envSegment_timeToGetThere_envSegment_curve EnvLiterally_envLiterally_initialVal_envLiterally_releaseNode_envLiterally_offset_envLiterally_loopNode_envLiterally_curveSegmentsenvLiterallyToSignals shapeNumber curveNumberenv$fShowEnvCurve $fEqEnvCurve$fShowEnvSegment$fEqEnvSegmentadsrGenenvGateenvGen envGen_wGatelinelinenpercGenxLine&&&|||>>><<<byteBeatFromHelpFile baseThing VividActioncallOSCcallBSsync waitForSyncwait newBufferId newNodeId newSyncIdforkdefineSDcallOSCAndSync$fVividActionIO cmdPeriodfreeAll newBuffernewBufferFromFilemakeBufferFromFile makeBuffer saveBufferNRTArgs_nrtArgs_sampleRateNRTrunNRT writeNRTScorewriteNRT writeNRTWithdefaultNRTArgs$fVividActionStateT $fShowNRTArgs $fReadNRTArgs $fEqNRTArgs $fOrdNRTArgs Scheduled doScheduledAt doScheduledIndoScheduledNowplayfreesetsynth synthWActionsynthG synthNamed synthNamedG makeSynth quitSCServerfreeBuf$fMonoOrPolySignal$fMonoOrPoly[]dbrown_examplecontainers-0.5.7.1 Data.Map.BaseunionSetIntersectionIsSubsetOfPrimeSetIntersectionPrime SetUnions addVarToSet?>## EachElemsAllKnownSymbols+random-shuffle-0.0.4-4HPj3K38ghl6zBNCA2I5IySystem.Random.ShuffleshuffleMshuffle'shuffle coercionThing VariantSpec_variantSpec_name_variantSpec_initialParamValsdecodeSynthDefencodeSynthDef getParamNameencodeParamName getUGenSpecencodeUGenSpec getInputSpecencodeInputSpec getOutputSpecencodeOutputSpecgetVariantSpecencodeVariantSpec getPString encodePStringgetNWithgetInt32getInt16getN4ByteBlocks replaceBitNotfixAndSimplifygatherConstants makeUGenSpecs indexOfNamegetFreshUGenGraphId addPolyUGen'to makeDelaybaseGHC.Base=<<>>=demandBrownian drawFromList demandWhite passFilterleastOrMostChange mouseGeneral encodeDatumdecodeDatumWithPaddingnumBytesWithoutPaddingnumBytesWithPadding decodeOSCData addLengthmakeEmptySCServerStategetNextAvailables&network-2.6.3.1-G4Up1CPKbp7DeFsnywOnGGNetwork.SocketHostName ServiceNameconnectToSCServer startMailboxgetSCServerSocket'shouldMakeSockmakeSockenvCurveNumberenvCurveFloatNumberinitTree MonoOrPolygetPolysynthG_wAction Control.MonadguardjoinMonad>>returnfailFunctorfmap<$ Applicativepure<*>*><*Data.TraversablemapMsequenceMonoidmemptymappendmconcatghc-prim GHC.TypesIntGHC.IntInt8Int16Int32Int64!random-1.1-54KmMHXjttlERYcr1mvsAe System.RandomRandomrandomrandomsrandomRrandomRs randomRIOrandomIOStdGen RandomGensplitnextgenRangemkStdGen setStdGen getStdGen newStdGen getStdRandom*MonadRandom-0.4.2.3-BeY4MXl2TWH5X5ex76pU0BControl.Monad.RandomuniformfromList evalRandIOrunRandevalRandrunRandT evalRandTliftRand liftRandTRandTControl.Monad.Random.Class MonadRandom getRandom getRandoms getRandomR getRandomRs MonadSplitgetSplitControl.Monad.IO.ClassMonadIOliftIOmfilter<$!>unless replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterMforMControl.Applicativeoptional WrappedMonad WrapMonad unwrapMonad WrappedArrow WrapArrow unwrapArrowZipList getZipListData.Functor.ConstConstgetConst Data.Foldablemsum sequence_forM_mapM_ Data.Monoid<>DualgetDualEndoappEndoAllgetAllAnygetAnySumgetSumProduct getProductFirstgetFirstLastgetLastAltgetAlt Data.Functorvoid<$>apliftM5liftM4liftM3liftM2liftMwhenliftA3liftA2liftA<**> Alternativeempty<|>somemany MonadPlusmzeromplusbytestring-0.10.8.1Data.ByteString.Internal ByteString