module Synthesizer.State.Miscellaneous where
import qualified Synthesizer.State.Signal as Signal
import qualified Algebra.NormedSpace.Euclidean as Euc
import qualified Algebra.Field as Field
import NumericPrelude
receive3Dsound :: (Field.C a, Euc.C a v) =>
a -> a -> v -> Signal.T v -> (Signal.T a,Signal.T a)
receive3Dsound att sonicDelay ear way =
let dists = Signal.map Euc.norm (Signal.map (subtract ear) way)
phase = Signal.map (sonicDelay*) dists
volumes = Signal.map (\x -> 1/(att+x)^2) dists
in (phase, volumes)