-- | -- Module : DobutokO.Sound.Effects.Splice -- Copyright : (c) OleksandrZhabenko 2020 -- License : MIT -- Stability : Experimental -- Maintainer : olexandr543@yahoo.com -- -- Helps to create experimental music. -- Can be used for applying the SoX \"splice\" effect. -- {-# OPTIONS_GHC -threaded #-} {-# LANGUAGE FlexibleInstances #-} module DobutokO.Sound.Effects.Splice where import Data.List (intersperse) import DobutokO.Sound.Effects.Timespec import DobutokO.Sound.One (One3(..)) data SpliceP = N0 | H | T | Q deriving Eq instance Show SpliceP where show H = "-h " show T = "-t " show Q = "-q " show _ = "" data Splice2 a b = SL a [One3 b] deriving Eq instance Show (Splice2 SpliceP TSpecification) where show (SL x ys) | null ys = "" | otherwise = mconcat ["splice ", show x, mconcat . intersperse " " . map show $ ys] type Splice = Splice2 SpliceP TSpecification splice21 :: Splice2 a b -> a splice21 (SL x _) = x splice22 :: Splice2 a b -> [One3 b] splice22 (SL _ ys) = ys splice2Set1 :: a -> Splice2 a b -> Splice2 a b splice2Set1 x (SL _ ys) = SL x ys splice2Set2 :: [One3 b] -> Splice2 a b -> Splice2 a b splice2Set2 ys (SL x _) = SL x ys showSLQ :: Splice -> [String] showSLQ = words . show