module Csound.Typed.Misc(
HeadPanSpec(..), headPan, headPan', staticHeadPan
) where
import Data.Default
import Csound.Typed.Types
import Csound.Typed.GlobalState
staticHeadPan :: (D, D) -> Sig -> Sig2
staticHeadPan (az, elev) asrc = toTuple $ do
azExpr <- toGE $ -90 + 180 * az
elevExpr <- toGE $ -40 + 130 * elev
asrcExpr <- toGE asrc
sr <- toGE $ getSampleRate
(a1, a2) <- simpleHrtfstat asrcExpr azExpr elevExpr iradius sr
return [a1, a2]
where iradius = 9.0
data HeadPanSpec = HeadPanSpec
{ headPanPhase :: D
, hradPanFade :: D
}
instance Default HeadPanSpec where
def = HeadPanSpec 0 8
headPan :: (Sig, Sig) -> Sig -> Sig2
headPan = headPan' def
headPan' :: HeadPanSpec -> (Sig, Sig) -> Sig -> Sig2
headPan' spec (az, elev) asrc = toTuple $ do
azExpr <- toGE $ -90 + 180 * az
elevExpr <- toGE $ -40 + 130 * elev
asrcExpr <- toGE asrc
phase <- toGE $ headPanPhase spec
fade <- toGE $ hradPanFade spec
sr <- toGE $ getSampleRate
(a1, a2) <- simpleHrtfmove asrcExpr azExpr elevExpr phase fade sr
return [a1, a2]