Skip to content

Commit

Permalink
Adds Lt constraint
Browse files Browse the repository at this point in the history
  • Loading branch information
Mike Solomon committed Dec 21, 2021
1 parent 3987703 commit 890a910
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 10 deletions.
10 changes: 6 additions & 4 deletions src/WAGS/Change.purs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import Prelude
import Control.Comonad (extract)
import Data.Symbol (class IsSymbol, reflectSymbol)
import Data.Tuple.Nested ((/\), type (/\))
import Data.Typelevel.Num (class Pos)
import Data.Typelevel.Num (class Lt, class Pos, D1)
import Data.Variant.Maybe (Maybe, just, maybe, nothing)
import Data.Vec as V
import Prim.Row as R
import Prim.RowList (class RowToList, RowList)
Expand All @@ -22,7 +23,6 @@ import WAGS.Graph.Graph (Graph)
import WAGS.Graph.Node (NodeC)
import WAGS.Graph.Oversample (class IsOversample, reflectOversample)
import WAGS.Graph.Paramable (class Paramable, paramize, class OnOffable, onOffIze)
import Data.Variant.Maybe(Maybe, just, maybe, nothing)
import WAGS.Graph.Parameter (class MM, AudioParameter, AudioParameter_, mm)
import WAGS.Interpret (class AudioInterpret, AsSubgraph, setAnalyserNodeCb, setAttack, setAudioWorkletParameter, setBuffer, setBufferOffset, setConvolverBuffer, setDelay, setFrequency, setGain, setInput, setKnee, setLoopEnd, setLoopStart, setMediaRecorderCb, setOffset, setOnOff, setPan, setPeriodicOsc, setPeriodicOscV, setPlaybackRate, setQ, setRatio, setRelease, setSubgraph, setThreshold, setTumult, setWaveShaperCurve, unAsSubGraph)
import WAGS.Rendered (Oversample, RealImg(..))
Expand Down Expand Up @@ -267,6 +267,7 @@ instance changeVec ::
( R.Cons ptr tau' ignore graph
, Detup tau' tau
, Monoid tau
, Lt D1 size
, OneShotChange tau (V.Vec size Number /\ V.Vec size Number) au
, Change' ptr au graph
) =>
Expand Down Expand Up @@ -717,6 +718,7 @@ instance canBeChangedWaveformV ::
( IsSymbol ptr
, R.Cons ptr tau' ignore graph
, Detup tau' tau
, Lt D1 size
, Waveformable tau
) =>
CanBeChanged "waveform" (V.Vec size Number /\ V.Vec size Number) ptr graph where
Expand Down Expand Up @@ -1528,13 +1530,13 @@ instance oneShotChangePeriodicOscOO :: OneShotChange CTOR.TPeriodicOsc APOnOff (
instance oneShotChangePeriodicOscProxy :: OneShotChange CTOR.TPeriodicOsc BrowserPeriodicWave (CTOR.PeriodicOsc (Maybe BrowserPeriodicWave) (Maybe APOnOff) (Maybe AudioParameter)) where
oneShotChange _ osc = CTOR.PeriodicOsc (just osc) nothing nothing

instance oneShotChangePeriodicOscVec :: OneShotChange CTOR.TPeriodicOsc (V.Vec size Number /\ V.Vec size Number) (CTOR.PeriodicOsc (Maybe (V.Vec size Number /\ V.Vec size Number)) (Maybe APOnOff) (Maybe AudioParameter)) where
instance oneShotChangePeriodicOscVec :: Lt D1 size => OneShotChange CTOR.TPeriodicOsc (V.Vec size Number /\ V.Vec size Number) (CTOR.PeriodicOsc (Maybe (V.Vec size Number /\ V.Vec size Number)) (Maybe APOnOff) (Maybe AudioParameter)) where
oneShotChange _ osc = CTOR.PeriodicOsc (just osc) nothing nothing

class ChangePeriodicOsc a where
setPosc :: forall audio engine. AudioInterpret audio engine => String -> a -> audio -> engine

instance changePeriodicOscV :: ChangePeriodicOsc (V.Vec size Number /\ V.Vec size Number) where
instance changePeriodicOscV :: Lt D1 size => ChangePeriodicOsc (V.Vec size Number /\ V.Vec size Number) where
setPosc s a = setPeriodicOscV { id: s, realImg: a # \(real /\ img) -> RealImg { real: V.toArray real, img: V.toArray img } }

instance changePeriodicOscS :: ChangePeriodicOsc BrowserPeriodicWave where
Expand Down
3 changes: 2 additions & 1 deletion src/WAGS/Create.purs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import Data.Functor (voidRight)
import Data.Symbol (class IsSymbol, reflectSymbol)
import Data.Tuple (Tuple)
import Data.Tuple.Nested ((/\), type (/\))
import Data.Typelevel.Num (class Nat, class Pos, toInt')
import Data.Typelevel.Num (class Lt, class Nat, class Pos, D1, toInt')
import Data.Vec as V
import Foreign.Object (Object)
import Foreign.Object as Object
Expand Down Expand Up @@ -799,6 +799,7 @@ instance createPeriodicOsc ::
instance createPeriodicOsc2 ::
( IsSymbol ptr
, Paramable argA
, Lt D1 a
, R.Lacks ptr graphi
, OnOffable onOff
, R.Cons ptr (NodeC CTOR.TPeriodicOsc {}) graphi grapho
Expand Down
4 changes: 2 additions & 2 deletions src/WAGS/Create/Optionals.purs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import ConvertableOptions (class ConvertOption, class ConvertOptionsWithDefaults
import Data.Symbol (class IsSymbol)
import Data.Tuple (Tuple(..))
import Data.Tuple.Nested ((/\), type (/\))
import Data.Typelevel.Num (class Nat, class Pos)
import Data.Typelevel.Num (class Lt, class Nat, class Pos, D1)
import Data.Vec as V
import Simple.JSON as JSON
import Type.Row.Homogeneous (class Homogeneous)
Expand Down Expand Up @@ -697,7 +697,7 @@ class CanBeCoercedToPeriodicOsc (canBeCoercedToPeriodicOsc :: Type)

instance canBeCoercedToPeriodicOscProxy :: CanBeCoercedToPeriodicOsc BrowserPeriodicWave

instance canBeCoercedToPeriodicOscV :: CanBeCoercedToPeriodicOsc (V.Vec size Number /\ V.Vec size Number)
instance canBeCoercedToPeriodicOscV :: Lt D1 size => CanBeCoercedToPeriodicOsc (V.Vec size Number /\ V.Vec size Number)

data PeriodicOsc
= PeriodicOsc
Expand Down
6 changes: 3 additions & 3 deletions src/WAGS/Interpret.purs
Original file line number Diff line number Diff line change
Expand Up @@ -134,9 +134,10 @@ import Data.Set as Set
import Data.Symbol (class IsSymbol, reflectSymbol)
import Data.Tuple (fst, snd)
import Data.Tuple.Nested (type (/\), (/\))
import Data.Typelevel.Num (class Nat, class Pos)
import Data.Typelevel.Num (class Lt, class Nat, class Pos, D1)
import Data.Typelevel.Undefined (undefined)
import Data.Variant (match)
import Data.Variant.Maybe (fromMaybe, isJust, isNothing, maybe)
import Data.Vec (Vec)
import Data.Vec as V
import Data.Vec as Vec
Expand All @@ -151,7 +152,6 @@ import Unsafe.Coerce (unsafeCoerce)
import WAGS.Control.Types (Frame0, SubScene(..), oneSubFrame)
import WAGS.Graph.AudioUnit (APOnOff, OnOff)
import WAGS.Graph.Parameter (AudioParameter, AudioParameter_(..))
import Data.Variant.Maybe (fromMaybe, isJust, isNothing, maybe)
import WAGS.Graph.Worklet (AudioWorkletNodeRequest, AudioWorkletNodeResponse)
import WAGS.Rendered (AudioWorkletNodeOptions_(..), Instruction, Oversample, RealImg(..))
import WAGS.Rendered as R
Expand Down Expand Up @@ -304,7 +304,7 @@ foreign import renderAudio :: Array (Effect Unit) -> Effect Unit
-- | Given an audio context, a vector of real parts of complex numbers, and a vector of imaginary parts of complex numbers, build a periodic wave interpretable by the Web Audio API.
makePeriodicWave
:: forall len
. Pos len
. Lt D1 len
=> WebAPI.AudioContext
-> Vec len Number
-> Vec len Number
Expand Down

0 comments on commit 890a910

Please sign in to comment.