synthesizer-0.2: src/Synthesizer/Plain/Miscellaneous.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Synthesizer.Plain.Miscellaneous where
import qualified Algebra.NormedSpace.Euclidean as Euc
import qualified Algebra.Field as Field
-- import qualified Algebra.Ring as Ring
-- import qualified Algebra.Additive as Additive
import qualified Prelude as P
import PreludeBase
import NumericPrelude
{- * Spatial effects -}
{-| simulate an moving sounding object
convert the way of the object through 3D space
into a delay and attenuation information,
sonicDelay is the reciprocal of the sonic velocity -}
receive3Dsound :: (Field.C a, Euc.C a v) => a -> a -> v -> [v] -> ([a],[a])
receive3Dsound att sonicDelay ear way =
let dists = map (Euc.norm) (map (subtract ear) way)
phase = map (sonicDelay*) dists
volumes = map (\x -> 1/(att+x)^2) dists
in (phase, volumes)