:J      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  !"#$%&'()*+,-./012 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   !""################################$$$$$$$$$%%%%%%%&&&'((((((((((((((((((((()))))))))))))))))******************+++++++++++++,,,,,,,--- - - - - --....///////////071Safe(2Safe(3Safe(NoneNone-Picks a random element from the provided listKReturns 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 !"'()*34579>KLNU (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!!!"))  %Wheeeeeeeeeeeeeeee!i  !"&#'$($%&'()*)+,-./*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV%WXYZ[\]^_`abcd(  !"#$%&'()*+,-./(*)%$#&'(  !" +./ ,-[    !"&#'$($%&'()*)+,-./*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV%WXYZ[\]^_`abcd * None!"(>L0uUnary signal operations. Many of these have functions so you don't need to use this internal representation (e.g. 1 has neg, etc).-This type might not be exposed in the future.5There'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 versionh4Binary signal operations. For the simple ones (like i, k&, etc.), there are functions (like 45, 46S, 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.lInteger divisionmFloat 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 78;Internal representation of Synth Definitions. Usually, use 9$ 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!0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 07123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh2ijklmnopqrstuvwxyz{|}~NoneN;efghijklmnopqrstuvwxyz%% efghijklmnopqrstuvwxyzNone(>IThis 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 !"()1357>LvDon't define other instances of this! (Unless you know what you're doing) Instance resolution could get screwed up.}For  (Float) values~}~} None(4;>N50 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!                 None!"'()3457>KLN "UGen Arg"0   ) None  (>LU  -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 list+Define a Synth Definition,NDefine 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 change0Like ,; 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. !"#$%&'()*+,-./01  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./01()*1+,$. !"#%&/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'-0 !"#$%&'()*+,-./01 None(>L2Multiply signals3Exponentiation of signals4 Add signals5Divide signals6(Test signals for left greater than right74Test signals for left greater than or equal to right8%Test signals for left less than right91Test signals for left less than or equal to right:Subtract signals;Build 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 livecodin=Build your own, from 0s> 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 ?A_The prime is to not conflict with "abs" in the prelude. May just use "uOp Abs" in the futureCThe prime, like A/, is to not conflict with a prelude definition.!Remember you can always just use: uOp TanHDLike <1 but the lo value is always negative the hi valueEBitwise xor. Short for  biOp BitXor23456789:;<=>?@ABCDE23456789:;<=>?@ABCDE4:2356789;<=>?@ABCDE23456789:;<=>?@ABCDE 23456789: None>LUF5Convert an audio rate signal to a control rate signalG5Convert a control rate signal to an audio rate signalFGFGFGFG None(H8"This UGen simply outputs the initial value you give it"HHHHNone &(345;>KLN[!QSC compatibilitySSC compatibilityU Alias of T, for SC compatibility]!For SC compatibility -- alias of \b Alias of d Alias of c, for SC compatibilityi!For SC compatibility -- alias of hj *This may change in the future**n Alias of m for SC compatibilityo Alias of m for SC compatibilityp Alias of q for SC compatibilityr Alias of q for SC compatibilitys Alias of q for SC compatibility| Alias of  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 compatibility Alias of  for SC compatibility Alias of , for SC compatibilityShorter alias for Alias for "threshold_"You can use "trig_" insteadShort alias for  Alias of IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None( TemporaryAudio bus input (usually mic)None(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(None E.g. play byteBeatFromHelpFile E.g. (play $ baseThing $ \t -> t &&& (t >>> 8)   E    E     None( $"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 IR "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 KR        None(>L Add a single LocalBuf for FFTCan use b for "numChans" and ! for "Vivid.UGens.Args.numFrames"(Unlike in SC, "doneAction" defaults to 2AUnlike in SC, "doneAction" defaults to 2 and "loop" defaults to 0 Defaults to  . Can be  too but it's not recommended. Defaults to  . Can be  too but it's not recommended. Defaults to  . Can be  too but it's not recommended.3Note you don't need to use "buf_" when you use this Defaults to  . Can be  too but it's not recommended.3Note you don't need to use "buf_" when you use this Defaults to  . Can be  too but it's not recommended.3Note you don't need to use "buf_" when you use this Defaults to  . Can be  too but it's not recommended.3Note you don't need to use "buf_" when you use this"phase" must be at audio rate ()"phase" must be at audio rate ()"phase" must be the output of delTapWrV delTapRd :: (Args '["buf", "phase", "delSecs"] '["interp"] a) => s -> SDBody a Signal    None("This one can run at control rate (M). It's inefficient so only useful for very small kernels or control rate.None(IN  !"#$%&'()  !"#$%&'()  !"#$%&'()  !"#$%&'()None(4IN*&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 /"4+ never plays the same value twice, whereas / chooses any value in the list"0:The list come second so you can curry the repeats and use  or 4"4+ never plays the same value twice, whereas / chooses any value in the list"*+,-./01234 *+,-./01234 *+,-./01234*+,-./01234None(>L6Note this can only run at ARE"secs" is the lookahead time -- if you're coming from SC you can use |7Note this can only run at ARE"secs" is the lookahead time -- if you're coming from SC you can use |567567567567None  (4>LNU8 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 KR>Percussive 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 KR89:;<=>?89:;<=>?89:;<=>?89:;<=>?None(@DYou can use "wintype_" and "winsize_" if you're used to the SC args:ADYou can use "wintype_" and "winsize_" if you're used to the SC args:O3"As [the number of bins] rises, so will CPU usage."U3"Alternates blocks of bins between the two inputs."@ABCDEFGHIJKLMNOPQRSTU@ABCDEFGHIJKLMNOPQRSTU@ABCDEFGHIJKLMNOPQRSTU@ABCDEFGHIJKLMNOPQRSTUNone(WBThe (current) duration of a control block on the server in seconds Equal to 1 ~/ controlRateX&The current control rate of the server Equal to 1 ~/ controlDurYThe number of audio busesZThe number of open buffers VWXYZ[\]^_`ab VWXYZ[\]^_`ab VWXYZ[\]^_`ab VWXYZ[\]^_`abNone(cI"A linear-interpolating sound generator based on the difference equation:!x[n+1] = a - b * sqrt(abs(x[n]))"Only has an AR instancedF"A non-interpolating sound generator based on the difference equation:!x[n+1] = a - b * sqrt(abs(x[n]))"Only has an AR instance.eH"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 methodfI"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 methodgF"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 methodcdefgcdefgcdefgcdefgNone( hG"Generates noise whose spectrum falls off in power by 6 dB per octave."iy"Generates noise whose values are either -1 or 1. This produces the maximum energy for the least peak to peak amplitude."j*"Generates random impulses from -1 to +1."k*"Generates random impulses from -1 to +1."l"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."mE.g. Jplay $ 0.1 ~* lfClipNoise (freq_ $ xLine (start_ 1e3, end_ 1e4, secs_ 10))n$"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."r=Freq is "approximate rate at which to generate random values"s=Freq is "approximate rate at which to generate random values"t=Freq is "approximate rate at which to generate random values"u"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."vD"Generates noise whose spectrum has equal power at all frequencies."hijklmnopqrstuvhijklmnopqrstuvhijklmnopqrstuvhijklmnopqrstuvNone(UwP*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 x]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 1yDReturns the value of whichever of the 2 signals is changing least;Its default calculation rate is the highest of its 2 inputszF"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 ywxyz{|wxyz{|wxyz{|wxyz{|None(N}pos 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(>L 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(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(Band-pass filterCan cause CPU spikesThis is only in AR    %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(44None;N23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(None NUQThis 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][Encode OSC bundles, specifically for NRT synthesis. (It's more than just "mconcat . map ").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")None(>UIf 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 allocated *NoneU 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.,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 port3Explicitly 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 firstThe 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.&Print all messages other than "/done"s4If you don't want to hear what the server has to say+None>Send 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)35,None )35>NUfYour "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-None)35U :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 int16 pGenerate 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)35>.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:/None ()355Given 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. 4?! 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 !"  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     7None_      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ !"  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     0None(Dbrown example from the SC help file[ABCDEFGHIJKLMMNOPQRSTUUVVWXYZZ[Y\]^_`abcdefghijklmnopqrstuvwxyz{|}~     ;  ! " # $ % & ' ( ) * + , - . / / 0 1 2 3 3 4 5 6 7 8 9 : ; < = > ? ? @ @ A A B B C D E F G H I J KLMNOPQRSTUV9WXYZ:[ 6 \ 5 ] ^ _ ` a b c d e f g h i j k l m n o pqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<   !""##############?##################$$$$$$$$$%%%%%%%&&&'((((((((((((((((((((()))))))))))))))))********* * * * * *****+++++++=++++++,, ,!,",#,$,%-&-&-'-(-)-*-+-,--.../.0.1/2/3/4/5/6/7/8/9/:/;/<0=>?@A?@B?@CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                "#(((((())*****>,-./////      !"#$#%#&#'#(#)#*+,-./0123456789:9;9<=>=?=@=@=A=B=C=D=E=F=G=H=HIJIKILIMNONPNQNQNRNSNSNTNUNUNVNWNWNXNYNYNZN[N[N\N]N]N^N_N_N`NaNabcbdefghijklmnopqrstuvwxyz{|}~AAvivid_KmaGHYGvw7EIocfPnmtbufVivid.SynthDefVivid.OSC.UtilVivid.RandomnessVivid.SynthDef.TypesafeArgsVivid.SynthDef.TypesVivid.SynthDef.LiterallyVivid.SCServer.TypesVivid.SynthDef.ToSigVivid.EnvelopesVivid.SynthDef.FromUAVivid.UGens.AlgebraicVivid.UGens.Conversion"Vivid.UGens.Generators.SingleValueVivid.UGens.ArgsVivid.UGens.InOut$Vivid.UGens.Generators.DeterministicVivid.UGens.TriggersVivid.ByteBeatVivid.UGens.AnalysisVivid.UGens.BufferVivid.UGens.ConvolutionVivid.UGens.DelaysVivid.UGens.DemandVivid.UGens.DynamicsVivid.UGens.EnvelopesVivid.UGens.FFTVivid.UGens.InfoVivid.UGens.Generators.Chaotic!Vivid.UGens.Generators.StochasticVivid.UGens.MathsVivid.UGens.MultichannelVivid.UGens.RandomVivid.UGens.ReverbsVivid.UGens.UserInteractionVivid.UGens.Filters.LinearVivid.UGens.Filters.BEQSuiteVivid.UGens.Filters.NonlinearVivid.UGens.Filters.PitchVivid.UGens.Filters Vivid.OSCVivid.SCServer.StateVivid.SCServer.ConnectionVivid.Actions.ClassVivid.SCServerVivid.Actions.NRTVivid.Actions.Scheduled Vivid.ActionsVivid.UGens.ExamplesVivid.UGens.UndocumentedVivid.UGens.SynthControlVivid.UGens.Generators.Granular Vivid.UGens~+~*VividUGenssd shrinkSDArgsshrinkNodeArgsclipgetTimeVivid.Actions.IOlagVivid.NoPluginstrans_GZTjP9K5WFq01xC9BAGQpFControl.Monad.Trans.State.Lazy execStatealign floatToWord wordToFloat doubleToWord wordToDoublepickpicksElemSubset AddParamsTagListAllTags tagStringsVarList InnerVarsmakeTypedVarList TypedVarListIVarSet GetSymbolVals getSymbolValsVVsVariableSetEqualIsElemOf Bool_IsElemOf True_IsElemOfFalse_IsElemOf IsSubsetOfSetUnion SetInsertBool_IsSubsetOfTrue_IsSubsetOfFalse_IsSubsetOfElemBoolToBoolSubsetBoolToBool emptyVarSettoItoF iToLiteralVariToVarUnaryOpNegNotIsNilNotNilBitNotAbsAsFloatAsIntCielFloorFracSignSquaredCubedSqrtExpRecipMIDICPSCPSMIDI 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 OutputSpec_outputSpec_calcRate InputSpecInputSpec_UGen_inputSpec_uGen_index_inputSpec_uGen_outputIndexInputSpec_Constant_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 sdLitPrettySyncIdBufferId _unBufferId HasNodeId getNodeIdNodeId _unNodeIdNodeunNodeToSigtoSigEnvCurve 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 curveNumberenvArgsAllEqualUA NoDefaultsOverwritingArgs DefaultArgsFromUAUAsArgs SDBodyArgsfromUASDBodyfromUAWithDefaultsnoneuaArgValuaArgValWDefault DoneAction DoNothing FreeEnclosingDoneAction_AsNumsdPretty doneActionNum sdToLiteral getSDHashNameaddUGen addMonoUGen addPolyUGensdNamed makeSynthDef? getCalcRateencodeSD~**~/~>~>=~<~<=~-binaryOpbiOpunaryOpuOpmidiCPScpsMIDIabs'negtanh'clip2xora2kk2adca_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 makePolyUGenmakeUGenaInkInoutaOutkOut kOut_monosoundInfSinOscimpulselfCublfGausslfParlfPulselfSawlfTripulsesawsinOscsyncSawvarSawlatch pulseCount&&&|||>>><<<byteBeatFromHelpFile baseThingampComppitchlocalBufplayBuf recordBuf bufChannelsbufDur bufFrames bufRateScale bufSampleRate bufSamplesbufRdbufWrphasor convolution convolution2 convolution2L convolution3partConvallpassCallpassLallpassNcombCcombLcombNdelay1delay2delayCdelayLdelayNinfdbrowndemanddibrowndiwhitedranddseqdserdshufdwhitedxrand companderlimiter normalizeradsrGenenvGateenvGen envGen_wGatelinelinenpercGenxLinefftifftpv_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_rectCombcheckBadValues controlDur controlRate numAudioBuses numBuffersnumControlBuses numInputBusesnumOutputBusesnumRunningSynthsradiansPerSample sampleDur sampleRatesubsampleOffsetcuspLcuspNlinCongClinCongLlinCongN brownNoise clipNoisedustdust2 grayNoise lfClipNoise lfdClipNoise lfdNoise0 lfdNoise1 lfdNoise3lfNoise0lfNoise1lfNoise2 pinkNoise whiteNoiseinRange leastChangelinExp mostChangemulAddpan2selectmixexpRandlinRandrandfreeVerbmouseYmouseXapfbpfbpz2brfbrz2decaydecay2fosformlethpfhpz1hpz2 integratorlag2lag3leakDClpflpz1lpz2midEQonePoleoneZerorhpfrlpframpresonzringzslopesostwoPoletwoZerobAllpass bBandPass bBandStopbHiPassbHiShelfbLowPass bLowPass4 bLowShelfbPeakEQballhasher mantissaMaskmedianslewspringtBall freqShift pitchShiftvibratomoogFF OSCBundle TimestampOSCDatumOSC_IOSC_SOSC_FOSC_DOSC_BOSC encodeOSC decodeOSCencodeOSCBundleencodeOSCBundlesencodeTimestamputcToTimestampaddSecsdiffTimestampsinitTreeCommand 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 VividActioncallOSCcallBSsync waitForSyncwait newBufferId newNodeId newSyncIdforkdefineSDcallOSCAndSync cmdPeriodfreeAll newBuffernewBufferFromFilemakeBufferFromFile makeBuffer saveBufferNRTArgs_nrtArgs_sampleRateNRTrunNRT writeNRTScorewriteNRT writeNRTWithdefaultNRTArgs Scheduled doScheduledAt doScheduledIndoScheduledNowplayfreesetsynth synthWActionsynthG synthNamed synthNamedG makeSynth quitSCServerfreeBufdbrown_example coercionThingrando_9odB4IuNhP96TlvTWIPchTSystem.Random.ShuffleshuffleMshuffle'shuffleconta_2C3ZI8RgPO2LBMidXKTvIU Data.Map.BaseunionSetIntersection $fVarList(,)0IsSubsetOfPrimeSetIntersectionPrime SetUnions addVarToSet?>##$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()$fVarListAddParams $fRandomI $fRealFloatI $fFloatingI $fRealFracI$fRealI$fEnumI $fFractionalI$fNumI$fShowI $fShowVarSet$fGetSymbolValsproxy$fGetSymbolValsproxy0$fShowVariable VariantSpec_variantSpec_name_variantSpec_initialParamValsdecodeSynthDefencodeSynthDef getParamNameencodeParamName getUGenSpecencodeUGenSpec getInputSpecencodeInputSpec getOutputSpecencodeOutputSpecgetVariantSpecencodeVariantSpec getPString encodePStringgetNWithgetInt32getInt16getN4ByteBlocks$fHasNodeIdNode$fHasNodeIdNodeId $fToSignargs$fToSigStateTargs$fToSigBufferIdargs$fToSigVariableargs$fToSigSignalargsenvCurveNumberenvCurveFloatNumber EachElemsAllKnownSymbols#$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 replaceBitNot$fHashableSynthDeffixAndSimplifygatherConstants makeUGenSpecs indexOfNamegetFreshUGenGraphId addPolyUGen'to makeDelaybaseGHC.Base=<<>>=demandBrownian drawFromList demandWhiteleastOrMostChange mouseGeneral passFilter encodeDatumdecodeDatumWithPaddingnumBytesWithoutPaddingnumBytesWithPadding decodeOSCData addLengthmakeEmptySCServerStategetNextAvailablesnetwo_A6pE0dLgMEk2GtUa1JtTJQNetwork.SocketHostName ServiceNameconnectToSCServer startMailboxgetSCServerSocket'shouldMakeSockmakeSock$fVividActionIOinitTree$fVividActionStateT MonoOrPolygetPolysynthG_wAction$fMonoOrPolySignal$fMonoOrPoly[]fail>>fmapreturn Control.Monadguardjoin<*>pureMonadFunctor Applicativeghc-prim GHC.TypesIntGHC.IntInt8Int16Int32Int64rando_9Kgekc9yEaLHLNUuw6paWL System.RandomRandom randomRIOrandomIOStdGen RandomGennextgenRangesplitmkStdGen setStdGen getStdGen newStdGen getStdRandomrandomRsrandomRrandomsrandomMonad_HxDS9whmtjz8RSn9ZPpk5gControl.Monad.RandomuniformfromList evalRandIOrunRandevalRandrunRandT evalRandTliftRand liftRandTRandTControl.Monad.Random.Class getRandomRs getRandomR getRandoms getRandom MonadRandomgetSplit MonadSplitmfilter<$!>unless replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterMData.TraversableforMsequencemapMControl.ApplicativeoptionalgetConstConst unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrow getZipListZipList Data.Foldablemsum sequence_forM_mapM_ Data.Monoid<>getDualDualappEndoEndogetAllAllgetAnyAnygetSumSum getProductProductgetFirstFirstgetLastLastgetAltAlt Data.Functorvoid<$>apliftM5liftM4liftM3liftM2liftMwhenliftA3liftA2liftA<**>mconcatmappendmemptyMonoid<$<**>manysome<|>empty Alternativemplusmzero MonadPlusbytes_6VWy06pWzJq9evDvK2d4w6Data.ByteString.Internal ByteStringControl.Monad.IO.ClassMonadIOliftIO