module Csound.Air.Pan(
HeadPanSpec(..),
headPan, headPan', staticHeadPan,
headPan2, headPan2', staticHeadPan2,
headPanNet, headPanNet2
) where
import Csound.Typed
import Csound.Air.Wav(toMono)
headPan2 :: (Sig, Sig) -> Sig2 -> Sig2
headPan2 point = headPan point . toMono
headPan2' :: HeadPanSpec -> (Sig, Sig) -> Sig2 -> Sig2
headPan2' spec point = headPan' spec point . toMono
staticHeadPan2 :: (D, D) -> Sig2 -> Sig2
staticHeadPan2 point = staticHeadPan point . toMono
headPanNet :: (Int, Int) -> [Sig] -> Sig2
headPanNet (m, n) sigs = sum $ zipWith staticHeadPan [(double a, double b) | a <- xs m, b <- xs n] sigs
where xs t = fmap (( / fromIntegral t) . fromIntegral) [0 .. (t 1)]
headPanNet2 :: (Int, Int) -> [Sig2] -> Sig2
headPanNet2 (m, n) sigs = headPanNet (m, n) (fmap toMono sigs)