Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Optimisations of Ugen graphs.
Documentation
ugen_optimise_ir_rand :: Ugen -> Ugen Source #
Optimise Ugen
graph by re-writing rand
and iRand
Ugens that
have Constant
inputs. This, of course, changes the nature of the
graph, it is no longer randomised at the server. It's a useful
transformation for very large graphs which are being constructed
and sent each time the graph is played.
import Sound.Sc3.Ugen.Dot {\- hsc3-dot -\}
let u = sinOsc ar (randId 'a' 220 440) 0 * 0.1 draw (u + ugen_optimise_ir_rand u)
ugen_optimise_const_operator :: Ugen -> Ugen Source #
Optimise Ugen
graph by re-writing binary operators with
Constant
inputs. The standard graph constructors already do
this, however subsequent optimisations, ie. ugen_optimise_ir_rand
can re-introduce these sub-graphs, and the Plain graph
constructors are un-optimised.
>>>
let u = constant
>>>
u 5 * u 10 == u 50
True
>>>
u 5 ==** u 5 == u 1
True
>>>
u 5 >** u 4 == u 1
True
>>>
u 5 <=** u 5 == u 1
True
>>>
abs (u (-1)) == u 1
True
>>>
u 5 / u 2 == u 2.5
True
>>>
min (u 2) (u 3) == u 2
True
>>>
max (u 1) (u 3) == u 3
True
let u = lfPulse ar (2 ** randId 'α' (-9) 1) 0 0.5 let u' = ugen_optimise_ir_rand u draw (mix (mce [u,u',ugen_optimise_const_operator u']))
ugen_optimise_const_operator (Bindings.mulAdd 3 1 0) == 3
mulAddOptimised :: Ugen -> Ugen -> Ugen -> Ugen Source #
Constant optimising MulAdd.
mulAddOptimised (sinOsc ar 440 0) 1 0 == sinOsc ar 440 0 mulAddOptimised (sinOsc ar 440 0) 0.1 0 == sinOsc ar 440 0 * 0.1 mulAddOptimised (sinOsc ar 440 0) 1 1 == sinOsc ar 440 0 + 1 mulAddOptimised (sinOsc ar 440 0) 0.1 1 == mulAdd (sinOsc ar 440 0) 0.1 1