module Sound.SC3.Lang.Math where
import Data.Bits
bitChar :: Char -> Bool
bitChar c =
case c of
'0' -> False
'1' -> True
_ -> error "bitChar"
parseBits :: (Num a,Bits a) => String -> a
parseBits x =
let x' = filter (id . bitChar . snd) (zip [0..] (reverse x))
in foldr ((.|.) . bit . fst) 0 x'
exprandrng :: (Floating b) => b -> b -> b -> b
exprandrng l r i = l * exp (log (r / l) * i)
inf :: Bounded a => a
inf = maxBound
isInf :: (Eq a,Bounded a) => a -> Bool
isInf = (== inf)
linexp :: (Ord a, Floating a) => a -> a -> a -> a -> a -> a
linexp l r l' r' n =
if n <= l
then l'
else if n >= r
then r'
else ((r'/l') ** ((nl)/(rl))) * l'
log10 :: Floating a => a -> a
log10 = logBase 10
rmsToDb :: Floating a => a -> a
rmsToDb rms = log10 rms * 20
dbToRms :: Floating a => a -> a
dbToRms db = 10 ** (db * 0.05)
powToDb :: Floating a => a -> a
powToDb pow = 10 * log10 pow
dbToPow :: Floating a => a -> a
dbToPow db = 10 ** (db * 0.1)