WAGS.Change
- Package
- purescript-wags
- Repository
- mikesol/purescript-wags
#Change Source
class Change (p :: EdgeProfile) (a :: Type) (graph :: Graph) (b :: Type) | p a graph -> b where
Change all of the audio nodes in edge profile p
using the template laid out by type a
for graph
.
myCursor <- cursor (Speaker (Gain 1.0 (SinOsc 440.0 /\ Focus (SinOsc 330.0) /\ Unit)))
change' (asEdgeProfile myCursor) (SinOsc 332.0)
Note that change'
increments the changeBit
in the universe by 1, aka Succ
.
This use of inductive types in an indexed bind operation guarantees that we never go
"back in time" after having changed an audio graph.
Members
change' :: forall env audio engine proof m res ptr changeBit skolems. Monad m => AudioInterpret audio engine => Proxy p -> a -> FrameT env audio engine proof m res (UniverseC ptr graph changeBit skolems) (UniverseC ptr graph (Succ changeBit) skolems) b
Instances
Change NoEdge g igraph g
Change (SingleEdge p) (Proxy skolem) igraph (Proxy skolem)
(Change (SingleEdge p) x igraph y) => Change (SingleEdge p) (Identity x) igraph (Identity y)
(Change (SingleEdge p) x igraph y) => Change (SingleEdge p) (Proxy s -> x) igraph (Proxy s -> y)
(Change (ManyEdges p p') x igraph y) => Change (ManyEdges p p') (Proxy s -> x) igraph (Proxy s -> y)
Change (SingleEdge p) IgnoreMe igraph IgnoreMe
Change (SingleEdge p) This igraph This
(Change (SingleEdge p) x igraph y) => Change (SingleEdge p) (Focus x) igraph (Focus y)
(Change (SingleEdge p) x igraph x', Change (ManyEdges a b) y igraph y') => Change (ManyEdges p (PtrListCons a b)) (Tuple x y) igraph (Tuple x' y')
(Change (SingleEdge p) a igraph b) => Change (ManyEdges p PtrListNil) (Tuple a Unit) igraph (Tuple b Unit)
(Create a D0 InitialGraph (SkolemListCons (SkolemPairC skolem D0) skolems) outptr graph (SkolemListCons (SkolemPairC skolem D0) skolems) ignore, BinToInt p, BinToInt outptr, BinToInt continuation, BinSub p outptr continuation, Change (SingleEdge p) b igraph b', Change (SingleEdge continuation) a igraph a') => Change (SingleEdge p) (Dup a (Proxy skolem -> b)) igraph (Dup a' (Proxy skolem -> b'))
(SetterVal argA, SetterVal argB, BinToInt p, Modify (Allpass argA argB argC) p igraph nextP, Change nextP argC igraph outInner) => Change (SingleEdge p) (Allpass argA argB argC) igraph (Allpass AudioParameter AudioParameter outInner)
(SetterVal argA, SetterVal argB, BinToInt p, Modify (Bandpass argA argB argC) p igraph nextP, Change nextP argC igraph outInner) => Change (SingleEdge p) (Bandpass argA argB argC) igraph (Bandpass AudioParameter AudioParameter outInner)
(SetterVal argA, BinToInt p, Modify (Constant argA) p igraph nextP) => Change (SingleEdge p) (Constant argA) igraph (Constant AudioParameter)
(SetterVal argA, BinToInt p, Modify (Delay argA argB) p igraph nextP, Change nextP argB igraph outInner) => Change (SingleEdge p) (Delay argA argB) igraph (Delay AudioParameter outInner)
(SetterVal argA, SetterVal argB, SetterVal argC, SetterVal argD, SetterVal argE, BinToInt p, Modify (DynamicsCompressor argA argB argC argD argE argF) p igraph nextP, Change nextP argF igraph outInner) => Change (SingleEdge p) (DynamicsCompressor argA argB argC argD argE argF) igraph (DynamicsCompressor AudioParameter AudioParameter AudioParameter AudioParameter AudioParameter outInner)
(SetterVal argA, SetterVal argB, BinToInt p, Modify (Highpass argA argB argC) p igraph nextP, Change nextP argC igraph outInner) => Change (SingleEdge p) (Highpass argA argB argC) igraph (Highpass AudioParameter AudioParameter outInner)
(SetterVal argA, SetterVal argB, BinToInt p, Modify (Highshelf argA argB argC) p igraph nextP, Change nextP argC igraph outInner) => Change (SingleEdge p) (Highshelf argA argB argC) igraph (Highshelf AudioParameter AudioParameter outInner)
(SetterVal argB, BinToInt p, Modify (LoopBuf argB) p igraph nextP) => Change (SingleEdge p) (LoopBuf argB) igraph (LoopBuf AudioParameter)
(SetterVal argA, SetterVal argB, BinToInt p, Modify (Lowpass argA argB argC) p igraph nextP, Change nextP argC igraph outInner) => Change (SingleEdge p) (Lowpass argA argB argC) igraph (Lowpass AudioParameter AudioParameter outInner)
(SetterVal argA, SetterVal argB, BinToInt p, Modify (Lowshelf argA argB argC) p igraph nextP, Change nextP argC igraph outInner) => Change (SingleEdge p) (Lowshelf argA argB argC) igraph (Lowshelf AudioParameter AudioParameter outInner)
Change (SingleEdge p) Microphone igraph Microphone
(SetterVal argA, SetterVal argB, BinToInt p, Modify (Notch argA argB argC) p igraph nextP, Change nextP argC igraph outInner) => Change (SingleEdge p) (Notch argA argB argC) igraph (Notch AudioParameter AudioParameter outInner)
(SetterVal argA, SetterVal argB, SetterVal argC, BinToInt p, Modify (Peaking argA argB argC argD) p igraph nextP, Change nextP argD igraph outInner) => Change (SingleEdge p) (Peaking argA argB argC argD) igraph (Peaking AudioParameter AudioParameter AudioParameter outInner)
(SetterVal argB, BinToInt p, Modify (PeriodicOsc argB) p igraph nextP) => Change (SingleEdge p) (PeriodicOsc argB) igraph (PeriodicOsc AudioParameter)
(SetterVal argB, BinToInt p, Modify (PlayBuf argB) p igraph nextP) => Change (SingleEdge p) (PlayBuf argB) igraph (PlayBuf AudioParameter)
(SetterVal argA, BinToInt p, Modify (SawtoothOsc argA) p igraph nextP) => Change (SingleEdge p) (SawtoothOsc argA) igraph (SawtoothOsc AudioParameter)
(SetterVal argA, BinToInt p, Modify (SinOsc argA) p igraph nextP) => Change (SingleEdge p) (SinOsc argA) igraph (SinOsc AudioParameter)
(SetterVal argA, BinToInt p, Modify (SquareOsc argA) p igraph nextP) => Change (SingleEdge p) (SquareOsc argA) igraph (SquareOsc AudioParameter)
(SetterVal argA, BinToInt p, Modify (StereoPanner argA argB) p igraph nextP, Change nextP argB igraph outInner) => Change (SingleEdge p) (StereoPanner argA argB) igraph (StereoPanner AudioParameter outInner)
(SetterVal argA, BinToInt p, Modify (TriangleOsc argA) p igraph nextP) => Change (SingleEdge p) (TriangleOsc argA) igraph (TriangleOsc AudioParameter)
(SetterVal a, BinToInt p, Modify (Gain a b) p igraph nextP, Change nextP b igraph outInner) => Change (SingleEdge p) (Gain a b) igraph (Gain AudioParameter outInner)
(BinToInt p, Modify (Speaker a) p igraph nextP, Change nextP a igraph outInner) => Change (SingleEdge p) (Speaker a) igraph (Speaker outInner)
(BinToInt p, Modify (WaveShaper sym overshape argB) p igraph nextP, Change nextP argB igraph outInner) => Change (SingleEdge p) (WaveShaper sym overshape argB) igraph (WaveShaper sym overshape outInner)
(BinToInt p, GetSkolemFromRecursiveArgument fa skolem, ToSkolemizedFunction fa skolem a, Modify (Recorder sym a) p igraph nextP, Change nextP a igraph outInner) => Change (SingleEdge p) (Recorder sym fa) igraph (Recorder sym outInner)
#ChangeP Source
class (Change (SingleEdge p) a graph b) <= ChangeP (p :: Ptr) (a :: Type) (graph :: Graph) (b :: Type) | p a graph -> b where
Internal helper class used for changing audio nodes.
Members
changeP :: forall env audio engine proof m res ptr changeBit skolems. Monad m => AudioInterpret audio engine => Proxy p -> a -> FrameT env audio engine proof m res (UniverseC ptr graph changeBit skolems) (UniverseC ptr graph (Succ changeBit) skolems) b
Instances
(Change (SingleEdge p) a graph b) => ChangeP p a graph b
#gets Source
gets :: forall m res a' a b currentIdx g changeBit skolems env audio engine proof. Monad m => AudioInterpret audio engine => AsGetter a' a => Changes a g b => a' -> FrameT env audio engine proof m res (UniverseC currentIdx g changeBit skolems) (UniverseC currentIdx g changeBit skolems) b
Rolls multiple gets into a single function.
#Changes Source
class Changes (a :: Type) (g :: Graph) (b :: Type) | a g -> b where
Rolls multiple changes into a single increment of the changeBit
. This is useful when writing loops. A loop may have many or no changes, and this allows all of them to be executed in a single transaction. As an example, see examples/wtk/WTK/TLP.purs
. In the playKeys
function, each finger may potentially change, and each change is rolled into the a
value that is ultimately passed to changes
.
Members
changes :: forall env audio engine proof m res ptr changeBit skolems. Monad m => AudioInterpret audio engine => a -> FrameT env audio engine proof m res (UniverseC ptr g changeBit skolems) (UniverseC ptr g (Succ changeBit) skolems) b
Instances
#ChangeInstructions Source
class (AudioInterpret audio engine) <= ChangeInstructions (audio :: Type) (engine :: Type) (g :: Type) (h :: Type) | g -> h where
Internal class used to make term-level instructions for audio unit changes.
Members
changeInstructions :: Partial => Int -> g -> AnAudioUnit -> h /\ (Array (audio -> engine)) /\ AnAudioUnit
Instances
(AudioInterpret audio engine, SetterVal argA, SetterVal argB) => ChangeInstructions audio engine (Allpass argA argB argC) (Allpass AudioParameter AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argA, SetterVal argB) => ChangeInstructions audio engine (Bandpass argA argB argC) (Bandpass AudioParameter AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argA) => ChangeInstructions audio engine (Constant argA) (Constant AudioParameter)
(AudioInterpret audio engine) => ChangeInstructions audio engine (Convolver argA argB) (Convolver argA Unit)
(AudioInterpret audio engine, SetterVal argA) => ChangeInstructions audio engine (Delay argA argB) (Delay AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argA, SetterVal argB, SetterVal argC, SetterVal argD, SetterVal argE) => ChangeInstructions audio engine (DynamicsCompressor argA argB argC argD argE argF) (DynamicsCompressor AudioParameter AudioParameter AudioParameter AudioParameter AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argA) => ChangeInstructions audio engine (Gain argA argB) (Gain AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argA, SetterVal argB) => ChangeInstructions audio engine (Highpass argA argB argC) (Highpass AudioParameter AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argA, SetterVal argB) => ChangeInstructions audio engine (Highshelf argA argB argC) (Highshelf AudioParameter AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argB) => ChangeInstructions audio engine (LoopBuf argB) (LoopBuf AudioParameter)
(AudioInterpret audio engine, SetterVal argA, SetterVal argB) => ChangeInstructions audio engine (Lowpass argA argB argC) (Lowpass AudioParameter AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argA, SetterVal argB) => ChangeInstructions audio engine (Lowshelf argA argB argC) (Lowshelf AudioParameter AudioParameter Unit)
(AudioInterpret audio engine) => ChangeInstructions audio engine Microphone Microphone
(AudioInterpret audio engine, SetterVal argA, SetterVal argB) => ChangeInstructions audio engine (Notch argA argB argC) (Notch AudioParameter AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argA, SetterVal argB, SetterVal argC) => ChangeInstructions audio engine (Peaking argA argB argC argD) (Peaking AudioParameter AudioParameter AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argB) => ChangeInstructions audio engine (PeriodicOsc argB) (PeriodicOsc AudioParameter)
(AudioInterpret audio engine, SetterVal argC) => ChangeInstructions audio engine (PlayBuf argC) (PlayBuf AudioParameter)
(AudioInterpret audio engine) => ChangeInstructions audio engine (Recorder argA argB) (Recorder argA Unit)
(AudioInterpret audio engine, SetterVal argA) => ChangeInstructions audio engine (SawtoothOsc argA) (SawtoothOsc AudioParameter)
(AudioInterpret audio engine, SetterVal argA) => ChangeInstructions audio engine (SinOsc argA) (SinOsc AudioParameter)
(AudioInterpret audio engine) => ChangeInstructions audio engine (Speaker argA) (Speaker Unit)
(AudioInterpret audio engine, SetterVal argA) => ChangeInstructions audio engine (SquareOsc argA) (SquareOsc AudioParameter)
(AudioInterpret audio engine, SetterVal argA) => ChangeInstructions audio engine (StereoPanner argA argB) (StereoPanner AudioParameter Unit)
(AudioInterpret audio engine, SetterVal argA) => ChangeInstructions audio engine (TriangleOsc argA) (TriangleOsc AudioParameter)
(AudioInterpret audio engine) => ChangeInstructions audio engine (WaveShaper argA argB argC) (WaveShaper argA argB Unit)
#ChangeInstruction Source
data ChangeInstruction a b
Constructors
Instances
(Change p a graph b) => Changes (ChangeInstruction (Proxy p) a) graph (ChangeInstruction (Proxy p) b)
#Modify Source
class Modify (tag :: Type) (p :: Ptr) (i :: Graph) (nextP :: EdgeProfile) | tag p i -> nextP
Internal helper class used for changing audio nodes.
Instances
(GraphToNodeList ig il, Modify' tag p il (NodeListCons x NodeListNil) nextP) => Modify tag p ig nextP
#Modify' Source
class Modify' (tag :: Type) (p :: Ptr) (i :: NodeList) (mod :: NodeList) (nextP :: EdgeProfile) | tag p i -> mod nextP
Internal helper class used for changing audio nodes.
Instances
Modify' tag p NodeListNil NodeListNil NoEdge
(ModifyRes tag p head headResAsList headPlist, Modify' tag p tail tailResAsList tailPlist, NodeListAppend headResAsList tailResAsList o, AltEdgeProfile headPlist tailPlist plist) => Modify' tag p (NodeListCons head tail) o plist
#ModifyRes Source
class ModifyRes (tag :: Type) (p :: Ptr) (i :: Node) (mod :: NodeList) (plist :: EdgeProfile) | tag p i -> mod plist
Internal helper class used for changing audio nodes.
Instances
ModifyRes (Allpass a b c) ptr (NodeC (TAllpass ptr) edge) (NodeListCons (NodeC (TAllpass ptr) edge) NodeListNil) edge
ModifyRes (Bandpass a b c) ptr (NodeC (TBandpass ptr) edge) (NodeListCons (NodeC (TBandpass ptr) edge) NodeListNil) edge
ModifyRes (Constant a) ptr (NodeC (TConstant ptr) edge) (NodeListCons (NodeC (TConstant ptr) edge) NodeListNil) edge
ModifyRes (Convolver a b) ptr (NodeC (TConvolver ptr name) edge) (NodeListCons (NodeC (TConvolver ptr name) edge) NodeListNil) edge
ModifyRes (Delay a b) ptr (NodeC (TDelay ptr) edge) (NodeListCons (NodeC (TDelay ptr) edge) NodeListNil) edge
ModifyRes (DynamicsCompressor a b c d e f) ptr (NodeC (TDynamicsCompressor ptr) edge) (NodeListCons (NodeC (TDynamicsCompressor ptr) edge) NodeListNil) edge
ModifyRes (Gain a b) ptr (NodeC (TGain ptr) edge) (NodeListCons (NodeC (TGain ptr) edge) NodeListNil) edge
ModifyRes (Highpass a b c) ptr (NodeC (THighpass ptr) edge) (NodeListCons (NodeC (THighpass ptr) edge) NodeListNil) edge
ModifyRes (Highshelf a b c) ptr (NodeC (THighshelf ptr) edge) (NodeListCons (NodeC (THighshelf ptr) edge) NodeListNil) edge
ModifyRes (LoopBuf a) ptr (NodeC (TLoopBuf ptr) edge) (NodeListCons (NodeC (TLoopBuf ptr) edge) NodeListNil) edge
ModifyRes (Lowpass a b c) ptr (NodeC (TLowpass ptr) edge) (NodeListCons (NodeC (TLowpass ptr) edge) NodeListNil) edge
ModifyRes (Lowshelf a b c) ptr (NodeC (TLowshelf ptr) edge) (NodeListCons (NodeC (TLowshelf ptr) edge) NodeListNil) edge
ModifyRes Microphone ptr (NodeC (TMicrophone ptr) edge) (NodeListCons (NodeC (TMicrophone ptr) edge) NodeListNil) edge
ModifyRes (Notch a b c) ptr (NodeC (TNotch ptr) edge) (NodeListCons (NodeC (TNotch ptr) edge) NodeListNil) edge
ModifyRes (Peaking a b c d) ptr (NodeC (TPeaking ptr) edge) (NodeListCons (NodeC (TPeaking ptr) edge) NodeListNil) edge
ModifyRes (PeriodicOsc a) ptr (NodeC (TPeriodicOsc ptr) edge) (NodeListCons (NodeC (TPeriodicOsc ptr) edge) NodeListNil) edge
ModifyRes (PlayBuf a) ptr (NodeC (TPlayBuf ptr) edge) (NodeListCons (NodeC (TPlayBuf ptr) edge) NodeListNil) edge
ModifyRes (Recorder a b) ptr (NodeC (TRecorder ptr name) edge) (NodeListCons (NodeC (TRecorder ptr name) edge) NodeListNil) edge
ModifyRes (SawtoothOsc a) ptr (NodeC (TSawtoothOsc ptr) edge) (NodeListCons (NodeC (TSawtoothOsc ptr) edge) NodeListNil) edge
ModifyRes (SinOsc a) ptr (NodeC (TSinOsc ptr) edge) (NodeListCons (NodeC (TSinOsc ptr) edge) NodeListNil) edge
ModifyRes (Speaker a) ptr (NodeC (TSpeaker ptr) edge) (NodeListCons (NodeC (TSpeaker ptr) edge) NodeListNil) edge
ModifyRes (SquareOsc a) ptr (NodeC (TSquareOsc ptr) edge) (NodeListCons (NodeC (TSquareOsc ptr) edge) NodeListNil) edge
ModifyRes (StereoPanner a b) ptr (NodeC (TStereoPanner ptr) edge) (NodeListCons (NodeC (TStereoPanner ptr) edge) NodeListNil) edge
ModifyRes (TriangleOsc a) ptr (NodeC (TTriangleOsc ptr) edge) (NodeListCons (NodeC (TTriangleOsc ptr) edge) NodeListNil) edge
ModifyRes (WaveShaper a b c) ptr (NodeC (TWaveShaper ptr name) edge) (NodeListCons (NodeC (TWaveShaper ptr name) edge) NodeListNil) edge
ModifyRes tag p n NodeListNil NoEdge
#SetterVal Source
class SetterVal a where
A term that can be coerced to an setter for a control-rate audio parameter.
Members
setterVal :: a -> AudioParameter -> AudioParameter
Instances
#change Source
change :: forall edge m res a b currentIdx graph changeBit skolems env audio engine proof. Monad m => AudioInterpret audio engine => TerminalIdentityEdge graph edge => Change edge a graph b => a -> FrameT env audio engine proof m res (UniverseC currentIdx graph changeBit skolems) (UniverseC currentIdx graph (Succ changeBit) skolems) b
Similar to change'
, but starting from the top-level node, which is usually a Speaker
.
#get Source
get :: forall edge m res a' a b currentIdx graph changeBit skolems env audio engine proof. Monad m => AudioInterpret audio engine => TerminalIdentityEdge graph edge => AsGetter a' a => Change edge a graph b => a' -> FrameT env audio engine proof m res (UniverseC currentIdx graph changeBit skolems) (UniverseC currentIdx graph changeBit skolems) b
Similar to get'
, but starting from the top-level node, which is usually a Speaker
.
#get' Source
get' :: forall edge m res a' a b currentIdx graph changeBit skolems env audio engine proof. Monad m => AudioInterpret audio engine => AsGetter a' a => Change edge a graph b => Proxy edge -> a' -> FrameT env audio engine proof m res (UniverseC currentIdx graph changeBit skolems) (UniverseC currentIdx graph changeBit skolems) b
Uses the incoming graph as a getter. Its values will be discarded and filled with the current values.
#changeAt Source
changeAt :: forall ptr a b env audio engine proof m res currentIdx graph changeBit skolems. Monad m => AudioInterpret audio engine => Change (SingleEdge ptr) a graph b => AudioUnitRef ptr -> a -> FrameT env audio engine proof m res (UniverseC currentIdx graph changeBit skolems) (UniverseC currentIdx graph (Succ changeBit) skolems) b
Similar to change'
, but starting from an AudioReference ptr
(the result of cursor
) instead of starting from an edge profile.
#getAt Source
getAt :: forall ptr a' a b env audio engine proof m res currentIdx graph changeBit skolems. Monad m => AudioInterpret audio engine => AsGetter a' a => Change (SingleEdge ptr) a graph b => AudioUnitRef ptr -> a' -> FrameT env audio engine proof m res (UniverseC currentIdx graph changeBit skolems) (UniverseC currentIdx graph changeBit skolems) b
Similar to get'
, but starting from an AudioReference ptr
(the result of cursor
) instead of starting from an edge profile.
- Modules
- FRP.
Event. MIDI - WAGS.
Change - WAGS.
Connect - WAGS.
Control. Functions - WAGS.
Control. MemoizedState - WAGS.
Control. Qualified - WAGS.
Control. Thunkable - WAGS.
Control. Types - WAGS.
Create - WAGS.
Cursor - WAGS.
Debug - WAGS.
Destroy - WAGS.
Disconnect - WAGS.
Graph. Constructors - WAGS.
Graph. Decorators - WAGS.
Graph. Getter - WAGS.
Graph. Optionals - WAGS.
Graph. Parameter - WAGS.
Interpret - WAGS.
Move - WAGS.
MoveNode - WAGS.
Rebase - WAGS.
Rendered - WAGS.
Run - WAGS.
Universe. AudioUnit - WAGS.
Universe. Bin - WAGS.
Universe. BinN - WAGS.
Universe. EdgeProfile - WAGS.
Universe. Graph - WAGS.
Universe. Node - WAGS.
Universe. Skolems - WAGS.
Universe. Universe - WAGS.
Util - WAGS.
Validation