-- | -- Module : DobutokO.Sound.Effects.Pitch -- Copyright : (c) OleksandrZhabenko 2020 -- License : MIT -- Stability : Experimental -- Maintainer : olexandr543@yahoo.com -- -- Helps to create experimental music. -- Can be used for applying the \"pitch\" SoX effect. -- {-# OPTIONS_GHC -threaded #-} {-# LANGUAGE FlexibleInstances #-} module DobutokO.Sound.Effects.Pitch where import Numeric (showFFloat) import DobutokO.Sound.Effects.Segment data Pitch a b c = Pt2 a b | Pt3 a b c deriving Eq instance Show (Pitch Qdash Float Segm) where show (Pt2 x y) = mconcat ["pitch ", show x,showFFloat Nothing y " "] show (Pt3 x y z) = mconcat ["pitch ", show x, showFFloat Nothing y " ", show z] type Ptch = Pitch Qdash Float Segm pitchC :: Pitch a b c -> String pitchC (Pt2 _ _) = "Pt2" pitchC (Pt3 _ _ _) = "Pt3" pitch1 :: Pitch a b c -> a pitch1 (Pt2 x _) = x pitch1 (Pt3 x _ _) = x pitch2 :: Pitch a b c -> b pitch2 (Pt2 _ y) = y pitch2 (Pt3 _ y _) = y pitch3 :: Pitch a b c -> Maybe c pitch3 (Pt3 _ _ z) = Just z pitch3 _ = Nothing pitchSet1 :: a -> Pitch a b c -> Pitch a b c pitchSet1 x (Pt2 _ y) = Pt2 x y pitchSet1 x (Pt3 _ y z) = Pt3 x y z pitchSet2 :: b -> Pitch a b c -> Pitch a b c pitchSet2 y (Pt2 x _) = Pt2 x y pitchSet2 y (Pt3 x _ z) = Pt3 x y z pitchSet3 :: c -> Pitch a b c -> Pitch a b c pitchSet3 z (Pt3 x y _) = Pt3 x y z pitchSet3 z (Pt2 x y) = Pt3 x y z showPtchQ :: Ptch -> [String] showPtchQ = words . show