{-# OPTIONS_GHC -threaded #-}
{-# LANGUAGE CPP, FlexibleInstances #-}
module DobutokO.Sound.Effects.Noise where
#ifdef __GLASGOW_HASKELL__
#if __GLASGOW_HASKELL__>=710
/* code that applies only to GHC 7.10.* and higher versions */
import GHC.Base (mconcat)
#endif
#endif
import Numeric (showFFloat)
import DobutokO.Sound.ToRange
#ifdef __GLASGOW_HASKELL__
#if __GLASGOW_HASKELL__==708
/* code that applies only to GHC 7.8.* */
mconcat = concat
#endif
#endif
data Noiseprof a = N | NP a deriving Eq
instance Show (Noiseprof FilePath) where
show (NP file) = mconcat ["noiseprof ",file, " "]
show _ = "noiseprof "
type NoiseP = Noiseprof FilePath
noiseprofC :: Noiseprof a -> String
noiseprofC N = "N"
noiseprofC _ = "NP"
noiseprof1 :: Noiseprof a -> Maybe a
noiseprof1 (NP x) = Just x
noiseprof1 _ = Nothing
noiseprofSet1 :: a -> Noiseprof a
noiseprofSet1 = NP
showNPQ :: NoiseP -> [String]
showNPQ = words . show
data Noisered a b = NR | NR1 a | NR2 a b deriving Eq
instance Show (Noisered FilePath Float) where
show (NR2 file x) = mconcat ["noisered ",show file, " ", showFFloat Nothing (toRange 1.0 . abs $ x) " "]
show (NR1 file) = mconcat ["noisered ",show file, " "]
show _ = "noisered - "
type NoiseR = Noisered FilePath Float
noiseredC :: Noisered a b -> String
noiseredC (NR2 _ _) = "NR2"
noiseredC (NR1 _) = "NR1"
noiseredC _ = "NR"
noisered1 :: Noisered a b -> Maybe a
noisered1 (NR2 x _) = Just x
noisered1 (NR1 x) = Just x
noisered1 _ = Nothing
noisered2 :: Noisered a b -> Maybe b
noisered2 (NR2 _ y) = Just y
noisered2 _ = Nothing
noiseredSet1 :: a -> Noisered a b -> Noisered a b
noiseredSet1 x (NR2 _ y) = NR2 x y
noiseredSet1 x _ = NR1 x
noiseredSet2 :: b -> Noisered a b -> Maybe (Noisered a b)
noiseredSet2 y (NR2 x _) = Just (NR2 x y)
noiseredSet2 y (NR1 x) = Just (NR2 x y)
noiseredSet2 _ _ = Nothing
showNRQ :: NoiseR -> [String]
showNRQ = words . show