i      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG 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:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh Safe-Inferred24%Class of monads generating identifersIdentifiers are integers. Evaluate m DF. Safe-Inferred*+24 Composite of  and i. Composite of j and .'Class for values that can be lifted to  . eSum type for wire values. N = nil, B = boolean, I = integer, F = floating point, V = vector (array). Vector type.Vector identifier. of  of .Concise pretty printer and k instance for . .vec_concise (Vec (V_Id 0) 1 [0]) == "vec(0,1)"l instance for  .<map k_typeOf [B False,I 0,F 0.0] == [bool_t,int32_t,float_t]Concise pretty printer and k instance for  .m ().m of n.m of o.m of p.m of ( p)."  !"#$%&' "  ' &%$#"!    !"#$%&' Safe-Inferred( Map from q to colour name. =map (ty_colour . Just) [int32_t,float_t] == ["orange","blue"])Left & right bracket. 2w_bracket '(' ')' "parentheses" == "(parentheses)"*Dot notation for  key,value attributes.+ Dot node as record>. Constant values are drawn directly into input ports. The nm r has the df_ prefix removed for printing.  dot_rec 0 "nm" [] (Just float_t),Make arguments input for + from arity.-Variant where  indicates no output.()*+,-()*+,-()*+,-()*+,-None. Load graph./ Unload graph.././././ Safe-Inferred!"*0Enumeration of code hosts.46List of constants, list of variables, list of c-calls.5(Type,Array,Label,Initialised);Enumeration of variable types.?/C function call. (comment?,function,arguments)@*Qualified name, (structure,access,member).AC type.B C comment.CAdd comment markers. c_comment "c" == "/* c */"D Translate q to A. Qc_typerep_ctype bool_t == "bool" c_typerep_ctype (typeOf (0.0::Float)) == "float"F Initialise @ to value. )c_init_atom ("s",".","r") 5 == "s.m = 5;"G Initialise @G to array. Generates loop code for sequences of equal initial values. bc_init_vec ("s",".","r") [0,1] == ["s.r[0] = 0;" ,"s.r[1] = 1;"] Wlet r = ["for(int i=0;i < 2;i++) {s.r[i] = 0;}"] in c_init_vec ("s",".","r") [0,0] == rH Initialise @ to value or array. let {qn = ("s","->","r") ;r = ["for(int i=0;i < 2;i++) {s->r[i] = 0;}","s->r[2] = 1;"]} in c_init_var qn (Right [0,0,1]) == rIQualify name if required. The rf: flag indicates if array is a reference or an allocation. hc_array_qual (Vec_Port float_t 3) "a" True == "*a" c_array_qual (Vec_Port float_t 3) "a" False == "a[3]"J Construct a function/macro call. [c_call (Nothing,"f",["0","1"]) == "f(0,1);" c_call ("c","f",["0","1"]) == "f(0,1); /* c */"KThe character prefix for a 5 name is given by the ;.L5 name.MNon-= are stateful, ie. > and <.N> are stateful and atoms.O Generate 5 from  .P Generate < from .QH of 5.R5 C declaration, rf determines I form.S Generate a C struct for 5H, predicate determines if array variables are refernces or allocations.TConstruct an identifier. clabel (Std_Var,0) == "n_0"UT of =. std_clabel 0 == "n_0"V Variant with m. prefix.WH for constant. !c_const (0,I 1) == ["m.n_0 = 1;"]X8C declarations for DSP functions (memreq,init and step).YThe structure for all memory stores. In the uniform model this is a notational convenience only. In a partioned model it is functional.ZThe structure for stateful 5.[Generate dsp_memreq function.\Generate dsp_init function.] Generate dsp_step function.^Generate C code for graph._Host specific #include file.`Host specific form of X (extern C where required).aGenerate compiler command for 0 given include directory prefix.bFormat a as r. host_compiler_cmd_str (JACK,"/home/rohan/opt") host_compiler_cmd_str (SC3,"/home/rohan/opt") host_compiler_cmd_str (Text,"/home/rohan/opt")c[Generate C code, write file to disk and call the GNU C compiler to build shared library.dBracket list with elements. &bracket ('<','>') "float" == "<float>"eIntegrate, with implicit 0. dx_d [5,6] == [0,5,11]60123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde60123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde6BCAD@EFGHI?J;>=<K6:9875LMNOPQRSTUVWXYZ[\4]^0321_`abcde,0321456:987;>=<?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeNonef=Local definition of RDL UGen, to avoid dependency on sc3-rdu.gRun action with UDP link to jack-dl.h5Audition graph after sending initialisation messages.i Load graph.j5Audition graph after sending initialisation messages.k Audition at text-dl.fghijkfghijkfghijkfghijkNone=lFGL graph with pretty-printed x label.mFGL graph with x label.n-A variant graph form associating the list of in edges with each v.oA graph is a list of vs and ps.p6Edge from left hand side node to right hand side port.qEnumeration of p types.rEdge to recRd node (from recWr)sEdge from recRd nodetEdge to recWr nodev A node is a x with associated .wIndex for input port.xkUn-typed data-flow node. K = constant, A = array, R = recursion, P = primitive, MRG = multiple root graph.Recursion identifier.Concise pretty printer for x.Maybe variant of .#List elements in left biased order.Output type of x.#Traversal with state, signature as s.Pretty printer for q, and k instance. of v.x of v.Read label of node.&Transform node to source, see through { (rec) and y (mrg).Type of out edge of x.List incoming node edges.True if v is t form of { with indicated .Implicit edge from wR to rW.Is v ~.An p is orphaned if it refers to a v that is not in the node list.OTransform the actual graph into a viewing graph by adding implicit edges from recWr to recRd nodes..Find edge with indicated right hand side port. Variant of  that us."Trace in edges until arrival at a t that is not proceeded by an r. This traces the depth4 of the chain, however that is not currently drawn. Transform s to resolved r.Is v {.=Transform the actual graph into a viewing graph by deleting recWr and recRd* nodes and drawing a direct backward edge.[Label nodes and list incoming edges. Multiple-root and multiple-channel nodes are erased. analyse (udf_elem c))Generate graph (node list and edge list). Gimport Sound.DF.Uniform.GADT import qualified Sound.DF.Uniform.UDF as U 2let g = iir1 (0.0::Float) (+) 1 let c = df_erase g `map U.udf_concise (U.udf_elem c) > [recWr,df_add:Float,1.0,recRd:0.0,df_add:Float,1.0,recRd:0.0] mU.vgraph_direct (U.graph c) > ([(1,wR_1),(2,df_add:Float),(3,1.0),(4,rR_1:0.0)] > ,[(2,1,0),(3,2,0),(4,2,1)]) U.draw c Generate m. Generate l.Topological sort of nodes (via ).'List of required variable declarations.Possible c-call code statement.Constant nodes. Generate 4 from x.c of .Make +  arguments input.Dot notation of v.+Edges are coloured according to their type.Dot notation of p.Dot notation of o.View dot graph.Draw graph, transformed by .Draw graph, transformed by .Make dot rendering of graph at v, via .Make dot rendering of graph at v, via .Draw graph, via .Draw graph, via .5Audition graph after sending initialisation messages.5Audition graph after sending initialisation messages. Audition at text-dl.Hlmnopqrstuvwxyz{|}~Glmnopqrstuvwxyz{|}~Hx~|{zy}wvqutsrponml<lmnopqutsrvwx~|{zy}None~ FGL graph of .A graph is a list of  and a list of s.Primitive edge, left hand , right hand side , right hand  and edge type.!Primitive block diagram elements.A  runs between two Ports.Enumeration of wire types.Implicit wire from recWr to recRd.Implicit wire from node to recWr.Implicit wire from recRd to node.Backward edge.Normal forward edge.(Port (input or output) at block diagram.The index of an , all outputs are unary.Node degree as (input,output) pair.Block diagram.The write and read s, and the wire type.Read identifier. Erroring .Pretty printer for .Diagram type signature, ie.  at .Type of output ports of .Type of uniform output ports of .Type of singular output port of ..Faust uses single tilde, which is reserved by GHC.Exts.'Faust uses comma, which is reserved by  Data.Tuple, and indeed ~, is not legal either. Faust uses :, which is reserved by  Data.List. Faust uses <:, which is legal, however see . Faust uses :> , however : is not allowed as a prefix. Rdraw (graph (par_l [1,2,3,4] ~:> i_mul)) draw (graph (par_l [1,2,3] ~:> i_negate)) Fold over , signature as v.#Traversal with state, signature as s.5 nodes introduce identifiers for each backward arc. k is the initial , n the number of arcs, and ty the arc types. >rec_ids 5 2 [int32_t,float_t] == [(5,6,int32_t),(7,8,float_t)]Set identifiers at , , and  nodes. of block diagram .w of .x of .The left and right outer ports of a block diagram.Type of .Set of  wires between s.Set of  wires between s.,Immediate internal wires of a block diagram."Internal wires of a block diagram.A wire coheres if the - of the left and right hand sides are equal.)The set of non-coherent wires at diagram.Coherence predicate, ie. is  empty.Extract the current actual node id from .Output type of , if out degree non-zero.Either  or  of .Pair   with node.Pretty printer, and k instance.Is  of  . Implicit rec nodes./Collect all primitive nodes at a block diagram. A backward  will introduce three implicit edges, a  wire introduces one  edge.y of . of . Construct + of block diagram, either with or without implicit edges. Construct  of block diagram without implicitE edges. This graph will include backward arcs if the graph contains recs. Transform  to .Topological sort of nodes (via ).Make dot rendering of graph at . of .Dot description of .%Wires are coloured according to type.Dot description of .Dot description of .Draw dot graph. of . Fold of . Jdegree (par_l [1,2,3,4]) == (0,4) draw (graph (par_l [1,2,3,4] ~:> i_mul)) Type-directed sum. draw (graph (bd_sum [1,2,3,4])) Predicate to determine if p can be split onto q. split if diagrams cohere. split if diagrams cohere, else u. Synonym of .6If merge is legal, the number of in-edges per port at q. ^merge_degree (par_l [1,2,3]) i_negate == Just 3 merge_degree (par_l [1,2,3,4]) i_mul == Just 2merge if diagrams cohere. @merge_m (par_l [1,2,3]) i_negate merge_m (par_l [1,2,3,4]) i_mulmerge if diagrams cohere, else u. Synonym of .Predicate to determine if p can be rec onto q.rec if diagrams cohere.rec if diagrams cohere, else u. Synonym of .Integer constant.Real constant.Construct uniform type primitive diagram. of . of .Adddition, ie. z of i. (1 ~. 2) ~: i_add (1 :: BD) + 2Adddition, ie. z of i. (1 ~. 2) ~: i_add (1 :: BD) + 2Subtraction, ie. { of i.Subtraction, ie. { of i.Multiplication, ie. | of i.Multiplication, ie. | of i.Division, ie. } of ~. Division, ie.  of .!Absolute value, ie.  of i."Absolute value, ie.  of i.#Negation, ie.  of i.$Negation, ie.  of i.%Identity diagram.&Identity diagram.'Coerce  to .(Coerce  to .)( and then scale to be in (-1,1).*Single channel output. 8degree out1 == (1,0) bd_signature out1 == ([float_t],[])+Type following unary operator.,Type following binary operator.-,Type following math operator, uniform types. v1.0 `ty_add` 2.0 == r_add (1 ~. 2) `ty_add` (3 ~. 4) == i_add 1.0 `ty_add` 2 == _|_ draw (graph ((1 ~. 2) - (3 ~. 4))).,Type following math operator, uniform types. v1.0 `ty_add` 2.0 == r_add (1 ~. 2) `ty_add` (3 ~. 4) == i_add 1.0 `ty_add` 2 == _|_ draw (graph ((1 ~. 2) - (3 ~. 4)))/,Type following math operator, uniform types. v1.0 `ty_add` 2.0 == r_add (1 ~. 2) `ty_add` (3 ~. 4) == i_add 1.0 `ty_add` 2 == _|_ draw (graph ((1 ~. 2) - (3 ~. 4)))0,Type following math operator, uniform types. v1.0 `ty_add` 2.0 == r_add (1 ~. 2) `ty_add` (3 ~. 4) == i_add 1.0 `ty_add` 2 == _|_ draw (graph ((1 ~. 2) - (3 ~. 4)))1-Type following math operator, singular types. 11.0 `ty_add1` 2.0 == r_add 1.0 `ty_add1` 2 == _|_2-Type following math operator, singular types. 11.0 `ty_add1` 2.0 == r_add 1.0 `ty_add1` 2 == _|_3-Type following math operator, singular types. 11.0 `ty_add1` 2.0 == r_add 1.0 `ty_add1` 2 == _|_4List of constants for CGen.55 of .6Output reference for .7Input references for .8? of .9Generate CGen 4 for .:5Audition graph after sending initialisation messages.;Figure illustrating . ,degree fig_3_2 == (2,2) draw (graph fig_3_2)<Figure illustrating . Adegree fig_3_3 == (4,1) bd_signature fig_3_3 draw (graph fig_3_3)=Figure illustrating . ,degree fig_3_4 == (0,3) draw (graph fig_3_4)>Figure illustrating . ,degree fig_3_5 == (0,1) draw (graph fig_3_5)?Figure illustrating . ,degree fig_3_6 == (0,1) draw (graph fig_3_6)@!Variant generating audible graph. ;draw (graph fig_3_6') gr_draw fig_3_6' audition [] fig_3_6'AA counter, illustrating identity diagram. Ddraw (graph (i_counter ~: i_negate)) gr_draw (i_counter ~: i_negate)BAdjacent elements of list.  adjacent [1..4] == [(1,2),(3,4)]CBimap at tuple. !bimap abs negate (-1,1) == (1,-1)      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF      !"#$%&'()*+,-./0123456789:;<=>?@ABCFED      !"#$%&'()*+,-0/.132456789:;<=>?@ABC|      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF  None_ ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk None+24'G!Data flow node with phantom type.JConstant with phantom type.MLift o to constant, ie. J of  .NLift p to constant, ie. J of  .O!A zero with unresolved type, ie. J of   of 0.PLift o to G.QLift p to G.RTables have a guard point.SMultiple root graph.Tm G.UG of z.VPrimitive unary operator.WPrimitive binary operator.XPrimitive comparator.YPrimitive sink.ZSPrimitive unary operator with separate primitives for integral and floating types.[Lift list of float to G .\ , equal to.] , less than.^, greater than or equal to._, greater than.`, less than or equal to.aceilf(3)b floorf(3)c lrintf(3)d roundf(3)eSingle channel output.fTwo channel output.gThree channel output.hSingle control input.iIf p then q else r. p must have type bool, and q and r must have equal types.jOperating sample rate.kBuffer read, read from buffer p at index q.lBuffer write, write to buffer p at index q value r.m Array read.n Array write.o0Introduce backward arc with implicit unit delay.pMonadic variant of rec_r.q3Variant or rec with monadic action in backward arc.0GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv+GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq0JKLGHIMNOPQRSTUVWXYZ[vuts\]^_`rabcdefghijklmnopq,GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv Nonew5Audition graph after sending initialisation messages.x5Audition graph after sending initialisation messages.y Audition at text-dl.wxywxywxywxy NonezView graph using graphviz.z{z{z{z{None4GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqwxyz{ None!"*+24C|Binary function.}Senary operator.~Quinary operator.Quaternary operator.Ternary operator.Binary operator.Unary operator.RData flow node. K = constant, A = array, R = recursion, P = primitive, MRG = mrg.Typeable instance for . df_typeOf (K (undefined::Int32)) == int32_t df_typeOf (K (undefined::Float)) == float_t df_typeOf (A undefined) == vec_float_t df_typeOf (0::DF Int32) == int32_t df_typeOf (0.0::DF Float) == float_tName of primitive if  is  or  etc."Multiple root graph (alias for M).  constructor.Monadic   constructor.  size.$ variant, tables have a guard point.MCE predicate, sees into MRG.MCE degree, sees into MRG..MCE extension, sees into MRG, will not reduce. of .Unary operator. of .Binary operator. of .Binary operator. multiply and add.gOptimising addition primitive. If either input is a multiplier node, unfold to a multiplier-add node. Kdf_add_optimise (2 * 3) (4::DF Int32) df_add_optimise (2::DF Int32) (3 * 4) Data.Bits .&.. Data.Bits .|.. Data.Bits  complement. , equal to. , less than., greater than or equal to., greater than., less than or equal to., select maximum., select minimum.Cast floating point to integer.Cast integer to floating point.Scale o to (-1,1) normalised p. maxBound == (2147483647::Int32)Integral modulo, ie. .Floating point modulo, ie. Foreign.C.Math fmodf.ceilf(3) floorf(3)(lrintf(3), ie. round to nearest integer. roundf(3)0Introduce backward arc with implicit unit delay.>The function receives the previous output as input, initially y0, and returns a (feed-forward,feed-backward) pair. crec_r (R_Id 0) (0::Int32) ((\i->(i,i)) . (+) 1) rec_r (R_Id 0) (0.0::Float) ((\i->(i,i)) . (+) 1.0)Monadic variant of .Hash-eq variant of . Variant of % with monadic action in backward arc.!Single channel input (channel 0)."Single channel output (channel 0).$Two channel output (channels 1 & 2).Three channel output.MCE collapsing output.Single control input.Logical .Logical .Logical .If p then q else r. p must have type bool, and q and r must have equal types.Operating sample rate.+Number of frames in current control period.' at first frame of each control period.Buffer read, read from buffer p at index q.Buffer write, write to buffer p at index q value r. Array read. Array write.Transform typed  to un-typed x.V|}~S|}~V~}|M|}~  None Transform  to 4.Audition graph at jack-dl' after sending initialisation messages.Audition graph at SC3' after sending initialisation messages.Audition graph at text-dl.Noneb5-tupleDuplicate a value into a tuple. split 1 == (1,1)!Reversed tuple constructor, (ie. flip (,)) swap 2 1 == (1,2)Two pi. two_pi == 6.283185307179586&Midi note number to cycles per second. midi_cps 69 == 440Multiply and add. Emap (mul_add 2 3) [1,2] == [5,7] && map (mul_add 3 4) [1,2] == [7,10]:Calculate feedback multipler in comb filter circuit given delay and decay times. %calc_fb 0.2 3.0 == 0.6309573444801932Linear range conversion. 1map (\i -> lin_lin i (-1) 1 0 1) [-1,-0.9 .. 1.0] &import Sound.DF.Uniform.GADT {- hdf -} tlet {s = lf_saw 1.0 0.0 ;o = sin_osc (lin_lin s (-1.0) 1.0 220.0 440.0) 0.0} in audition_rju [] (out1 (o * 0.1))Exponential range conversion. *map (\i -> lin_exp i 1 2 1 3) [1,1.1 .. 2] zlet {s = lf_saw 0.25 0.0 ;o = sin_osc (lin_exp (s + 1.0) 0.0 2.0 220.0 440.0) 0.0} in audition_rju [] (out1 (o * 0.1))Constrain p in (-q,q). Nlet r = -10 : -10 : [-10,-9 .. 10] in map (flip clip2 10) [-12,-11 .. 12] == rsr = sample rate, r = cycle (two-pi), hz = frequency Ohz_to_incr 48000 128 375 == 1 hz_to_incr 48000 two_pi 458.3662361046586 == 6e-2 Inverse of . incr_to_hz 48000 128 1 == 375 Linear pan. 4map (lin_pan2 1) [-1,0,1] == [(1,0),(0.5,0.5),(0,1)] tlet {o = sin_osc 440.0 0.0 ;l = sin_osc 0.5 0.0 ;(p,q) = lin_pan2 (o * 0.1) l} in audition_rju [] (out2 p q)"Compile time sample rate constant.3Compile time sample duration (in seconds) constant.Environment value,  of .Environment value, equal to  / .Add guard point. tbl_guard [1,2,3] == [1,2,3,1]Generate guarded sin table. Rmap (round . (* 100)) (tbl_sin 12) == [0,50,87,100,87,50,0,-50,-87,-100,-87,-50,0]If 'q >= p' then 'q - p' else q. variant. Flet o = sin_osc 440 0 in audition_rju [] (out1 (df_clip2 (o * 2) 0.1))LSingle place infinite impulse response filter with indicated initial value. Iimport Data.Int import Sound.DF.Uniform.GADT import Sound.DF.Uniform.LL.K 9draw (iir1 (0::Int32) (+) 1) draw (iir1 (0::Float) (+) 1)r = right hand edge, ip = initial phase, x = increment mdraw (phasor 9.0 (4.5::Float) 0.5) draw (phasor 9 (0::Int32) 1) audition_text 10 (out1 (phasor' 5.0 0.0 1.0)) of . Allocate n second array, variant of .Array delay with phasor argument for write index.:Array delay. a = array, s = signal, n = number of frames. 5do {a <- df_vec_m [0,1,2] ;draw (a_delay a 0.0 0)} let {f = sin_osc 0.1 0.0 ;o = sin_osc (f * 200.0 + 600.0) 0.0 ;a = df_vec (V_Id 0) (replicate 48000 0) ;d = a_delay a o 24000} in audition_rju [] (out2 (o * 0.1) (d * 0.05)) SC3 UGen.Array fill function (sin). nlet {i = phasor 64 0 1 ;a = a_tbl_sin (V_Id 0) 64 ;s = a_read a i} in audition_rju [] (out1 (s * 0.2)) Linear interpolating variant of . let {i = phasor 64.0 0 (hz_to_incr k_sample_rate 64.0 330.0) ;a = a_tbl_sin (V_Id 0) 64 ;s = a_lerp a i} in audition_rju [] (out1 (s * 0.2)) for table of z places. ip is in (0,1). ddraw (phasor 64.0 (0.0::Float) (hz_to_incr k_sample_rate 64.0 330.0)) draw (tbl_phasor 64 0.0 330.0)Table lookup oscillator. ip is in (0,1). let {a = a_tbl_sin (V_Id 0) 256 ;f = a_osc a 4.0 0.0 ;o = a_osc a (f * 200.0 + 400.0) 0.0} in audition_rju [] (out1 (o * 0.1)) Cancellation: |let {a = a_tbl_sin (V_Id 0) 256 ;o1 = a_osc a 440.0 0.0 ;o2 = a_osc a 440.0 0.5} in audition_rju [] (out1 (o1 + o2))1Single sample delay with indicated initial value. Adraw (unit_delay (0::Int32) 1) draw (unit_delay (0.0::Float) 1.0) Rlet {c = counter 0.0 1.0 ;d = unit_delay 0.0 c} in audition_text 12 (out2 c d)Signal that is initially  then always . Caudition_text 5 (out1 (latch (white_noise 812875317) unit_trigger))9Two place infinite impulse response filter. Inputs are: f = function (x0 y1 y2 -> y0), i = input signal. let {c1 = iir2 (\x y1 _ -> x + y1) 0.001 ;o1 = sin_osc (c1 + 220.0) 0 ;c2 = iir2 (\x _ y2 -> x + y2) 0.001 ;o2 = sin_osc (c2 + 220.0) 0} in audition_rju [] (out2 (o1 * 0.1) (o2 * 0.1)),Single place finite impulse response filter.)Two place finite impulse response filter.Ordinary biquad filter section.7Counter from indicated initial value by indicated step. ;draw (counter (0::Int32) 1) draw (counter (0.0::Float) 1.0) naudition_text 10 (out1 (counter 0.0 1.0)) audition_text 10 (out1 (counter 0.0 (white_noise 165876521 * 0.25)))- that resets to the initial phase at trigger. hlet tr = trigger (impulse (k_sample_rate / 3) 0.0) in audition_text 10 (out1 (counter_reset 0.0 1.0 tr))ACounter from 0 to 1 over duration (in seconds). Holds end value. of . ;audition_rju [] (out1 (sin_osc (line 110 440 100) 0 * 0.1)) SC3 UGen. jaudition_text 20 (out1 (counter 30 10)) audition_text 20 (out1 (ramp (counter 30 10) (3 / k_sample_rate))) Buffer delay. draw (buf_delay 0 0.0 0),Non-interpolating comb filter. Inputs are: b = buffer index, i = input signal, dl = delay time, dc = decay time.RAll times are in seconds. The decay time is the time for the echoes to decay by 60 decibels. If this time is negative then the feedback coefficient will be negative, thus emphasizing only odd harmonics at an octave lower. &draw (out1 (buf_comb_n 0 0.0 0.0 0.0))]Comb used as a resonator. The resonant fundamental is equal to reciprocal of the delay time. import qualified Sound.SC3 as S let {n = white_noise 0 ;dt = let f x = lin_exp (x + 2.0) 1.0 2.0 0.0001 0.01 in f (lf_saw 0.1 0.0) ;c = buf_comb_n 0 (n * 0.1) dt 0.2} in audition_rju [S.b_alloc 0 48000 1] (out1 c)Comb used as an echo. let {i = impulse 0.5 0.0 ;n = white_noise 0 ;e = decay (i * 0.5) 0.2 ;c = buf_comb_n 0 (e * n) 0.2 3.0} in audition_rju [S.b_alloc 0 48000 1] (out1 c)Array variant of  . Max delay time is in seconds. let {n = white_noise 0 ;dt = let f x = lin_exp (x + 2.0) 1.0 2.0 0.0001 0.01 in f (lf_saw 0.1 0.0) ;c = comb_n [0] 0.1 (n * 0.1) dt 0.2} in audition_rju [] (out c) let {i = impulse 0.5 0.0 ;n = white_noise 0 ;e = decay (i * 0.5) 0.2 ;c = comb_n [0] 0.2 (e * n) 0.2 3.0} in audition_rju [] (out c) Allow MCE.o8 linear congruential generator, hence signed modulo of 2^326. Note that the state and all internal math is 32bit.See  :http://en.wikipedia.org/wiki/Linear_congruential_generator for possible parameters. - 1103515245 12345, so in (minBound,maxBound). # of 'lcg_glibc, so in (0,maxBound).  of  , so in (0,1). !audition_text 24 (out1 (randf 0)) XWhite noise (-1,1). Generates noise whose spectrum has equal power at all frequencies. 'audition_text 24 (out1 (white_noise 0)) 2let n = white_noise 0 * 0.1 in draw (out1 (n - n)) \let {n = white_noise 0 * 0.1 ;m = white_noise 5 * 0.1} in audition_rju [] (out1 (n - m))  SC3 UGen. blet freq = lin_lin (lf_noise1 0 1) (-1) 1 220 440 in audition_rju [] (out1 (sin_osc freq 0 * 0.1)) brown noise function.[Brown noise (-1,1). Generates noise whose spectrum falls off in power by 6 dB per octave. 9let n = brown_noise 0 in audition_rju [] (out1 (n * 0.1)) zlet {n = brown_noise 0 ;f = lin_exp n (-1.0) 1.0 64.0 9600.0 ;o = sin_osc f 0} in audition_rju [] (out1 (o * 0.1)) SC3 UGen. maudition_rju [] (out1 (dust 0 200 * 0.25)) audition_rju [] (out1 (dust 0 (sin_osc 0.1 0 * 500 + 550) * 0.25)) SC3 UGen. Haudition_rju [] (out1 (sin_osc (rand 6987612487 220.0 600.0) 0.0 * 0.1))Sine oscillator. Inputs are: f = frequency (in hz), ip = initial phase. =let o = sin_osc 440.0 0.0 in audition_rju [] (out1 (o * 0.1)) Used as both Oscillator and LFO. flet {f = sin_osc 4.0 0.0 ;o = sin_osc (f * 200.0 + 400.0) 0.0} in audition_rju [] (out1 (o * 0.1)) Cancellation. [let {o1 = sin_osc 440.0 0.0 ;o2 = sin_osc 440.0 pi} in audition_rju [] (out1 (o1 + o2))dImpulse oscillator (non band limited). Outputs non band limited single sample impulses. Inputs are: f = frequency (in hertz), ip = phase offset (0..1) =let o = impulse 800.0 0.0 in audition_rju [] (out1 (o * 0.1)) glet {f = sin_osc 0.25 0.0 * 2500.0 + 2505.0 ;o = impulse f 0.0} in audition_rju [] (out1 (o * 0.1)) waudition_text 10 (out1 (impulse (w_sample_rate / 5.0) 0.0)) audition_text 10 (out1 (impulse (k_sample_rate / 5.0) 0.0))QNon-band limited sawtooth oscillator. Output ranges from -1 to +1. Inputs are: f = frequency (in hertz), ip = initial phase (0,2). <let o = lf_saw 500.0 1.0 in audition_rju [] (out1 (o * 0.1)) Used as both Oscillator and LFO. dlet {f = lf_saw 4.0 0.0 ;o = lf_saw (f * 400.0 + 400.0) 0.0} in audition_rju [] (out1 (o * 0.1))eNon-band-limited pulse oscillator. Outputs a high value of one and a low value of zero. Inputs are: f = frequency (in hertz), ip = initial phase (0,1), w = pulse width duty cycle (0,1). plet {o1 = lf_pulse 3.0 0.0 0.3 * 200.0 + 200.0 ;o2 = lf_pulse o1 0.0 0.2 * 0.1} in audition_rju [] (out1 o2)Two zero fixed midpass filter.Two zero fixed midcut filter.Two point difference filterTwo zero fixed highpass filterTwo point average filterTwo zero fixed lowpass filterGiven cf construct  one-pole function.One pole filter. Tlet {n = white_noise 0 ;f = one_pole (n * 0.5) 0.95} in audition_rju [] (out1 f)Given cf construct  one-zero function.One zero filter. Slet {n = white_noise 0 ;f = one_zero (n * 0.5) 0.5} in audition_rju [] (out1 f) Given coefficients construct  ! function.!Second order filter section."Given f and rq construct  $ function.$|A two pole resonant filter with zeroes at z = +/- 1. Based on K. Steiglitz, "A Note on Constant-Gain Digital Resonators", Computer Music Journal, vol 18, no. 4, pp. 8-10, Winter 1994. The reciprocal of Q is used rather than Q because it saves a divide operation inside the unit generator. Inputs are: i = input signal, f# = resonant frequency (in hertz), rq+ = bandwidth ratio (reciprocal of Q);where rq = bandwidth / centerFreq. Wlet {n = white_noise 0 ;r = resonz (n * 0.5) 440.0 0.1} in audition_rju [] (out1 r)Modulate frequency ~let {n = white_noise 0 ;f = lf_saw 0.1 0.0 * 3500.0 + 4500.0 ;r = resonz (n * 0.5) f 0.05} in audition_rju [] (out1 r)%Given f and r construct  ' function.&&Resonant low pass filter. Inputs are: i = input signal, f = frequency (hertz), rq = reciprocal of Q (resonance). rlet {n = white_noise 0 ;f = sin_osc 0.5 0.0 * 40.0 + 220.0 ;r = rlpf n f 0.1} in audition_rju [] (out1 r)' Allow MCE.(42nd order Butterworth high-pass filter coefficients. !hpf_c 48000.0 (440.0 :: DF Float))High pass filter.*Low pass filter.+ 0., of +.- trigger function..,True on non-positive to positive transition./Count  values at input. Klet n = white_noise 0 in audition_text 12 (out2 n (count_true (trigger n)))0Pulse divider at n.1SC3  PulseDivider. Ilet n = white_noise 0 in audition_text 12 (out2 n (pulse_divider' n 2 1))2GSample and hold. Holds input signal value when triggered. Inputs are: i = input signal, t = trigger. let {n = white_noise 0 ;i = impulse 9.0 0.0 ;l = latch n (trigger i) ;o = sin_osc (l * 400.0 + 500.0) 0.0} in audition_rju [] (out1 (o * 0.2))3Given dt construct  4 function.4Exponential decay. Inputs are: i = input signal, t? = decay time. This is essentially the same as Integrator except that instead of supplying the coefficient directly, it is caculated from a 60 dB decay time. This is the time required for the integrator to lose 99.9 % of its value or -60dB. This is useful for exponential decaying envelopes triggered by impulses.Used as an envelope. let {n = brown_noise 0 ;f = lf_saw 0.1 0.0 ;i = impulse (lin_lin f (-1.0) 1.0 2.0 5.0) 0.25 ;e = decay i 0.2} in audition_rju [] (out1 (e * n))5!Exponential decay (equivalent to decay dcy - decay atk).6Single sample delay.7Two sample delay. .audition_text 10 (out1 (delay2 (counter 0 1)))8Given t construct  9 function.9&Simple averaging filter. Inputs are: i = input signal, t = lag time. let {s = sin_osc 0.05 0.0 ;f = lin_lin s (-1.0) 1.0 220.0 440.0 ;o = sin_osc f 0.0 ;f' = lag f 1.0 ;o' = sin_osc f' 0.0} in audition_rju [] (out2 (o * 0.2) (o' * 0.2)):Nested lag filter.;Twice nested lag filter.f      !"#$%&'()*+,-./0123456789:;f      !"#$%&'()*+,-./0123456789:;f      !"#$%&'()*+,-./0123456789:;f      !"#$%&'()*+,-./0123456789:;None'<LSingle place infinite impulse response filter with indicated initial value. nimport Data.Int import Sound.DF.Uniform.GADT draw =<< iir1_m (0::Int32) (+) 1 draw =<< iir1_m (0::Float) (+) 1=r = right hand edge, ip = initial phase, x = increment Fdraw =<< phasor_m 9.0 (4.5::Float) 0.5 drawM (phasor_m 9 (0::Int32) 1)> Allocate n second array, variant of .? Array delay. Ndo {a <- df_vec_m [0,1,2] ;d <- a_delay a 0.0 0 ;draw (a_delay a 0.0 0)} do {f <- sin_osc 0.1 0.0 ;o <- sin_osc (f * 200.0 + 600.0) 0.0 ;a <- df_vec_m (replicate 48000 0) ;d <- a_delay a o 24000 ;audition [] (out2 (o * 0.1) (d * 0.05))}@Array fill function (sin).A for table of z places. ip is in (0,1). fdrawM (phasor 64.0 (0.0::Float) (hz_to_incr k_sample_rate 64.0 330.0)) drawM (tbl_phasor 64 0.0 330.0)BTable lookup oscillator. ip is in (0,1). zdo {a <- a_tbl_sin 256 ;f <- a_osc a 4.0 0.0 ;o <- a_osc a (f * 200.0 + 400.0) 0.0 ;audition [] (out1 (o * 0.1))} Cancellation: pdo {a <- a_tbl_sin 256 ;o1 <- a_osc a 440.0 0.0 ;o2 <- a_osc a 440.0 0.5 ;audition [] (out1 (o1 + o2))}C1Single sample delay with indicated initial value. GdrawM (unit_delay_m (0::Int32) 1) drawM (unit_delay_m (0.0::Float) 1.0) Sdo {c <- counter_m 0 1.0 ;d <- unit_delay_m 0 c ;audition_text 12 (out2 c d)}D9Two place infinite impulse response filter. Inputs are: f = function (x0 y1 y2 -> y0), i = input signal. do {c1 <- iir2 (\x y1 _ -> x + y1) 0.001 ;o1 <- sin_osc (c1 + 220.0) 0 ;c2 <- iir2 (\x _ y2 -> x + y2) 0.001 ;o2 <- sin_osc (c2 + 220.0) 0 ;audition [] (out2 (o1 * 0.1) (o2 * 0.1))}E,Single place finite impulse response filter.F)Two place finite impulse response filter.GOrdinary biquad filter section.H%Counter from indicated initial value. >draw =<< counter (0::Int32) 1 drawM (counter (0.0::Float) 1.0) -audition_text 10 . out1 =<< counter_m 0.0 1.0I Buffer delay. drawM (buf_delay 0 0.0 0)J,Non-interpolating comb filter. Inputs are: b = buffer index, i = input signal, dl = delay time, dc = decay time.RAll times are in seconds. The decay time is the time for the echoes to decay by 60 decibels. If this time is negative then the feedback coefficient will be negative, thus emphasizing only odd harmonics at an octave lower. ,drawM (fmap out1 (buf_comb_n 0 0.0 0.0 0.0))]Comb used as a resonator. The resonant fundamental is equal to reciprocal of the delay time. import qualified Sound.SC3 as S do {n <- white_noise_m ;dt <- let f x = lin_exp (x + 2.0) 1.0 2.0 0.0001 0.01 in fmap f (lf_saw 0.1 0.0) ;c <- buf_comb_n 0 (n * 0.1) dt 0.2 ;audition [S.b_alloc 0 48000 1] (out1 c)}Comb used as an echo. do {i <- impulse 0.5 0.0 ;n <- white_noise_m ;e <- decay (i * 0.5) 0.2 ;c <- buf_comb_n 0 (e * n) 0.2 3.0 ;audition [S.b_alloc 0 48000 1] (out1 c)}KArray variant of  . Max delay time is in seconds. do {n <- white_noise_m ;dt <- let f x = lin_exp (x + 2.0) 1.0 2.0 0.0001 0.01 in fmap f (lf_saw 0.1 0.0) ;c <- comb_n 0.1 (n * 0.1) dt 0.2 ;audition [] (out1 c)} do {i <- impulse 0.5 0.0 ;n <- white_noise_m ;e <- decay (i * 0.5) 0.2 ;c <- comb_n 0.2 (e * n) 0.2 3.0 ;audition [] (out1 c)}LXWhite noise (-1,1). Generates noise whose spectrum has equal power at all frequencies. 8do {n <- white_noise_m ;audition [] (out1 (n * 0.1))}M[Brown noise (-1,1). Generates noise whose spectrum falls off in power by 6 dB per octave. 8do {n <- brown_noise_m ;audition [] (out1 (n * 0.1))} do {n <- brown_noise_m ;let f = lin_exp n (-1.0) 1.0 64.0 9600.0 in do {o <- sin_osc f 0 ;audition [] (out1 (o * 0.1))}}NSine oscillator. Inputs are: f = frequency (in hz), ip = initial phase. <do {o <- sin_osc 440.0 0.0 ;audition [] (out1 (o * 0.1))} Used as both Oscillator and LFO. cdo {f <- sin_osc 4.0 0.0 ;o <- sin_osc (f * 200.0 + 400.0) 0.0 ;audition [] (out1 (o * 0.1))} Cancellation. Xdo {o1 <- sin_osc 440.0 0.0 ;o2 <- sin_osc 440.0 pi ;audition [] (out1 (o1 + o2))}OfImpulse oscillator (non band limited). Outputs non band limited single sample impulses. Inputs are: f = frequency (in hertz), ip = phase offset (0..1) <do {o <- impulse 800.0 0.0 ;audition [] (out1 (o * 0.1))} udo {f <- fmap (\x -> x * 2500.0 + 2505.0) (sin_osc 0.25 0.0) ;o <- impulse f 0.0 ;audition [] (out1 (o * 0.1))}PQNon-band limited sawtooth oscillator. Output ranges from -1 to +1. Inputs are: f = frequency (in hertz), ip = initial phase (0,2). ;do {o <- lf_saw 500.0 1.0 ;audition [] (out1 (o * 0.1))} Used as both Oscillator and LFO. ado {f <- lf_saw 4.0 0.0 ;o <- lf_saw (f * 400.0 + 400.0) 0.0 ;audition [] (out1 (o * 0.1))}QeNon-band-limited pulse oscillator. Outputs a high value of one and a low value of zero. Inputs are: f = frequency (in hertz), ip = initial phase (0,1), w = pulse width duty cycle (0,1). do {o1 <- fmap (\x -> x * 200.0 + 200.0) (lf_pulse 3.0 0.0 0.3) ;o2 <- fmap (\x -> x * 0.1) (lf_pulse o1 0.0 0.2) ;audition [] (out1 o2)}RTwo zero fixed midpass filter.STwo zero fixed midcut filter.TTwo point average filterUTwo zero fixed lowpass filterVOne pole filter. Qdo {n <- white_noise_m ;f <- one_pole (n * 0.5) 0.95 ;audition [] (out1 f)}WOne zero filter. Pdo {n <- white_noise_m ;f <- one_zero (n * 0.5) 0.5 ;audition [] (out1 f)}XSecond order filter section.Y|A two pole resonant filter with zeroes at z = +/- 1. Based on K. Steiglitz, "A Note on Constant-Gain Digital Resonators", Computer Music Journal, vol 18, no. 4, pp. 8-10, Winter 1994. The reciprocal of Q is used rather than Q because it saves a divide operation inside the unit generator. Inputs are: i = input signal, f# = resonant frequency (in hertz), rq+ = bandwidth ratio (reciprocal of Q);where rq = bandwidth / centerFreq. Tdo {n <- white_noise_m ;r <- resonz (n * 0.5) 440.0 0.1 ;audition [] (out1 r)}Modulate frequency do {n <- white_noise_m ;f <- fmap (\x -> x * 3500.0 + 4500.0) (lf_saw 0.1 0.0) ;r <- resonz (n * 0.5) f 0.05 ;audition [] (out1 r)}Z&Resonant low pass filter. Inputs are: i = input signal, f = frequency (hertz), rq = reciprocal of Q (resonance). do {n <- white_noise_m ;f <- fmap (\x -> x * 40.0 + 220.0) (sin_osc 0.5 0.0) ;r <- rlpf n f 0.1 ;audition [] (out1 r)}[HSample and hold. Holds input signal value when triggered. Inputs are: i = input signal, t = trigger. do {n <- white_noise_m ;i <- impulse_m 9.0 0.0 ;l <- latch_m n (trigger i) ;o <- sin_osc (l * 400.0 + 500.0) 0.0 ;audition [] (out1 (o * 0.2))}\Exponential decay. Inputs are: i = input signal, t? = decay time. This is essentially the same as Integrator except that instead of supplying the coefficient directly, it is caculated from a 60 dB decay time. This is the time required for the integrator to lose 99.9 % of its value or -60dB. This is useful for exponential decaying envelopes triggered by impulses.Used as an envelope. do {n <- brown_noise_m ;f <- lf_saw 0.1 0.0 ;i <- impulse (lin_lin f (-1.0) 1.0 2.0 5.0) 0.25 ;e <- decay i 0.2 ;audition [] (out1 (e * n))}]!Exponential decay (equivalent to decay dcy - decay atk).^Single sample delay._Two sample delay.`&Simple averaging filter. Inputs are: i = input signal, t = lag time. do {s <- sin_osc 0.05 0.0 ;let f = lin_lin s (-1.0) 1.0 220.0 440.0 in do {o <- sin_osc f 0.0 ;f' <- lag f 1.0 ;o' <- sin_osc f' 0.0 ;audition [] (out2 (o * 0.2) (o' * 0.2))}}aNested lag filter.bTwice nested lag filter.'<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab'<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab'<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab'<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abNonec of .d of .e of  of .f of .g of .h of  of .cdefghcdefghcdefghcdefghNone|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh !"#$$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~|}      !"#$%&'()*+,-./0123456789z:;<=>?@ABCDE F F G H 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 F y z { | } ~      P  X  O                      Y Z [ \      )    _ ` a      * b c  d    e f   g h i j  n o p  z | }       !"#$%&'()*+,-./012345678q9:;<=>?:@A:BC:BD=EF:GH=EI:BJ:KL:MN:OP:QR:ST:UV:UW:SX:;Y:;Z:;[:\]:\^:\_:\`:;a:;b=>c=>d=>e=>f=>g=>h=>i:\j=>k=>l=>m=En:\o=Epqhdf-0.15Sound.DF.Uniform.LL.UIdSound.DF.Uniform.LL.KSound.DF.Uniform.LL.DotSound.DF.Uniform.LL.CommandSound.DF.Uniform.LL.CGenSound.DF.Uniform.LL.AuditionSound.DF.Uniform.UDFSound.DF.Uniform.FaustSound.DF.Uniform.PhT.NodeSound.DF.Uniform.PhT.AuditionSound.DF.Uniform.PhT.DrawSound.DF.Uniform.GADT.DFSound.DF.Uniform.GADT.AuditionSound.DF.Uniform.GADT.UGen"Sound.DF.Uniform.GADT.UGen.MonadicSound.DF.Uniform.GADT.DrawSound.DF.Uniform.LLSound.DF.Uniform.PhTSound.DF.Uniform.GADTUId generateIdIdevalId $fUIdStateT$fUIdIOK_NumK_OrdK'to_kKVFIBNVecV_Idvec_id vec_concisek_typeOf k_concisenil_tbool_tint32_tfloat_t vec_float_t $fK_NumFloat $fK_NumInt32 $fK_OrdFloat $fK_OrdInt32 $fK_OrdBool$fK'Vec $fK'Float $fK'Int32$fK'Bool$fK'()$fShowK ty_colour w_bracketdot_attrdot_rec dot_rec_ardot_rec'g_loadg_unloadHostTextSC3JACK InstructionsVarVar_FldVar_IVar_BVar_VVar_FVar_TyBuf_VarStd_VarRec_VarC_CallC_QNameC_Type C_Comment c_commentc_typerep_ctypevar_fld_initialiser c_init_atom c_init_vec c_init_var c_array_qualc_call var_ty_charvar_nm is_statefulis_stateful_atomk_var buffer_varvar_initvar_declgen_var_structclabel std_clabelm_clabelc_const dsp_fun_declcmemcstate dsp_memreqdsp_initdsp_stepcode_gen host_includehost_dsp_fun_declhost_compiler_cmdhost_compiler_cmd_strdl_genbracketdx_drdl with_jack_dl audition_rju u_cmd_g_load audition_sc3 audition_textGr'GrAnalysisGraphEdgeEdge_Ty Implicit_Edge Rec_Rd_Edge Rec_Wr_Edge Normal_EdgeNode Port_IndexUDFUDF_MRGUDF_PUDF_RUDF_Audf_aUDF_Kudf_kR_Id from_r_id udf_conciseudf_k'udf_elem udf_typeOf udf_traverseedge_ty_concisenode_idnode_udflabelsource udf_edge_tyedges match_rec implicit_edge is_k_nodeis_orphan_edge vgraph_implfind_in_edge_m find_in_edgesolve_rec_edgeimplicit_edge' is_rec_node vgraph_directanalysegraphudf_grudf_gr'tsort node_vars node_c_callk_nodesudf_instructions udf_dl_gendot_ardot_nodeedge_ty_colourdot_edge dot_graphdot_drawdrawdraw'gr_dotgr_dot'gr_drawgr_draw'audition $fShowEdge_TyN_Prim n_prim_id n_prim_namen_prim_in_degree n_prim_ty N_Constant n_constant_id n_constant_kWireWire_TyImplicit_Backward Implicit_RecImplicit_NormalBackwardNormalPort Output_Port Input_Portport_bd port_indexDegreeBDRecSplitSeqParPrimConstantRec_Idbd_id bd_req_idbd_pp bd_signaturebd_ty bd_ty_uniformbd_ty1~~~.~:~<:~:>bd_foldl bd_traverserec_ids bd_set_iddegree in_degree out_degreeportsport_ty normal_wiresrec_back_wires wires_immedwires wire_coheresbd_non_coherentbd_is_coherent actual_idnode_ty node_lift_idnode_ppedge_is_implicit_backward rec_nodesnodes wire_to_edgeswires_to_edgesgraph'gr wire_colourdraw_dotpar_lbd_sumsplit_rsplit_msplit merge_degreemerge_mmergerec_rrec_mrec i_constant r_constantu_primi_primr_primi_addr_addi_subr_subi_mulr_muli_divr_divi_absr_absi_negater_negate i_identity r_identityfloat_to_int32int32_to_floati32_to_normal_f32out1ty_uopty_binopty_addty_subty_multy_divty_add1ty_mul1ty_div1cg_k cg_node_var node_output node_inputscg_node_c_callbd_instructionsfig_3_2fig_3_3fig_3_4fig_3_5fig_3_6fig_3_6' i_counteradjacentbimap $fShowNode$fFractionalBD$fNumBDDFdf_udfKTkt_kk_Int32k_Floatk_zerodf_Int32df_Float df_tbl_sizemrgdf_typemk_aunary_operatorbinary_operatorcomparison_operator sink_nodealt_unary_operatordf_vec_mdf_eqdf_ltdf_gtedf_gtn_lte df_ceilingf df_floorf df_lrintf df_roundfout2out3ctl1select2 w_sample_rateb_readb_writea_reada_writerecm$fOrdDF$fBitsDF $fFloatingDF$fFractionalDF$fNumDFdrawM Binary_Fn Senary_Op Quinary_Op Quaternary_Op Ternary_Op Binary_OpUnary_OpMRGMCEP3P2P1P0RA df_typeOf df_primitivedf_vec df_vec_sizeis_mce mce_degree mce_extendmce2unmceunmce2lift_mce lift_mce2 mce_extend3 lift_mce3mk_p1mk_uopmk_p2mk_binopmk_p3 mk_ternaryop df_mul_adddf_add_optimise df_bw_anddf_bw_or df_bw_notdf_ltedf_maxdf_mindf_float_to_int32df_int32_to_floatdf_moddf_fmodfdf_ceilfrec_hrec_mMin1outdf_anddf_ordf_not w_kr_nframes w_kr_edgedf_erasedf_instructionsT5swaptwo_pimidi_cpsmul_addcalc_fblin_linlin_expclip2 hz_to_incr incr_to_hzlin_pan2 k_sample_rate k_sample_dur w_sample_durw_radians_per_sample tbl_guardtbl_sincliprdf_clip2iir1phasor'phasor a_alloc_sec a_delay_pha_delaydelay_n a_tbl_sina_lerpa_tbl tbl_phasora_osc unit_delay unit_triggeriir2fir1fir2biquadcounter counter_reset unit_linelineramp buf_delay buf_comb_ncomb_n'comb_n allpass_n'silentlcg_i32 lcg_glibcrandirandf white_noise lf_noise1 brown_noise_f brown_noisedustrandsin_oscimpulself_sawlf_pulsebpz2brz2hpz1hpz2lpz1lpz2 one_pole_fone_pole one_zero_fone_zerosos_fsosresonz_fresonz'resonzrlpf_frlpf'rlpf lpf_or_hpf_chpflpfpositive non_positive trigger_ftrigger count_true pulse_dividerpulse_divider'latchdecay_fdecaydecay2delay1delay2lag_flaglag2lag3iir1_mphasor_m a_alloc_sec_m a_delay_m a_tbl_sin_m tbl_phasor_ma_osc_m unit_delay_miir2_mfir1_mfir2_mbiquad_m counter_m buf_delay_m buf_comb_n_mcomb_n_m white_noise_m brown_noise_m sin_osc_m impulse_mlf_saw_m lf_pulse_mbpz2_mbrz2_mlpz1_mlpz2_m one_pole_m one_zero_msos_mresonz_mrlpf_mlatch_mdecay_mdecay2_mdelay1_mdelay2_mlag_mlag2_mlag3_mgr_drawMbaseGHC.NumNumghc-prim GHC.ClassesOrdGHC.ShowShowData.Typeable.InternalTypeabletypeOf GHC.TypesBoolGHC.IntInt32FloatTypeRepGHC.BaseString Data.List mapAccumL Data.EitherRightGHC.ErrerrorGHC.Listfoldl Data.Tuplefstsnd concatMap+-*GHC.RealdivIntegral/ Fractionalabsnegate==<>=><=maxminmod&&||notTruerecipFalse