-- |
-- Module      :  Composition.Sound.Executable
-- Copyright   :  (c) OleksandrZhabenko 2020-2021
-- License     :  MIT
-- Stability   :  Experimental
-- Maintainer  :  olexandr543@yahoo.com
--
-- Helps to create experimental music from a file (or its part) and a Ukrainian text. 
-- It can also generate a timbre for the notes. Uses SoX inside.

{-# LANGUAGE LambdaCase #-}
{-# OPTIONS_GHC -threaded #-}

module Composition.Sound.Executable (
  -- * Basic functions for the executable
  dobutokO2
  , dobutokO2H7
  , dobutokO2H9
  , dobutokO2H92
  , o2help
) where

import Control.Monad (void)
import System.Exit (ExitCode (ExitSuccess))
import qualified Data.List as L (groupBy,sort)
import CaseBi.Arr (getBFstLSorted')
import Control.Exception (onException)
import System.Environment (getArgs)
import Data.List (isPrefixOf)
import Data.Maybe (fromJust,fromMaybe)
import System.Process
import EndOfExe (showE)
import GHC.Arr
import Data.Foldable.Ix (s2L)
import System.Directory
import Composition.Sound.Overtones
import Composition.Sound.Uniq
import Composition.Sound.IntermediateF 
import Composition.Sound.ParseList (parseStoLInts)
import Composition.Sound.Process

-- | Function that actually makes processing in the @dobutokO2@ executable. Please, check before executing
-- whether there is no \"x.wav\", \"test*\", \"result*\" and \"end*\" files in the current directory, because they can be overwritten. Since 0.44.0.0 the behaviour for \"7\" as option ('dobutokO2H7') changed. Now, it does not reduce noise.
dobutokO2 :: IO ()
dobutokO2 :: IO ()
dobutokO2 = do
  [String]
arggs <- IO [String]
getArgs
  let arg1 :: String
arg1 = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
take Int
1 ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ [String]
arggs
      file :: String
file = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
take Int
2 ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ [String]
arggs
      args :: String
args = [String] -> String
unwords ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
2 ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ [String]
arggs
      argss :: [String]
argss = Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 [String]
arggs
  Bool
exist2 <- String -> IO Bool
doesFileExist String
file
  IO () -> [(String, IO ())] -> String -> IO ()
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' (Bool -> String -> String -> IO ()
dobutokO2H Bool
exist2 String
args String
file) (((String, Bool -> String -> String -> IO ()) -> (String, IO ()))
-> [(String, Bool -> String -> String -> IO ())]
-> [(String, IO ())]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(String
xs, Bool -> String -> String -> IO ()
f) -> (String
xs,Bool -> String -> String -> IO ()
f Bool
exist2 String
args String
file)) ([(String, Bool -> String -> String -> IO ())]
 -> [(String, IO ())])
-> [(String, Bool -> String -> String -> IO ())]
-> [(String, IO ())]
forall a b. (a -> b) -> a -> b
$ [(String
"0",Bool -> String -> String -> IO ()
o2help),(String
"00",Bool -> String -> String -> IO ()
dobutokO2H00),
    (String
"002",Bool -> String -> String -> IO ()
dobutokO2H002),(String
"1",Bool -> String -> String -> IO ()
dobutokO2H1),(String
"11",Bool -> String -> String -> IO ()
dobutokO2H11),(String
"2",Bool -> String -> String -> IO ()
dobutokO2H2),(String
"21",Bool -> String -> String -> IO ()
dobutokO2H21),(String
"3",Bool -> String -> String -> IO ()
dobutokO2H3),(String
"31",Bool -> String -> String -> IO ()
dobutokO2H31),
      (String
"4",Bool -> String -> String -> IO ()
dobutokO2H4),(String
"41",Bool -> String -> String -> IO ()
dobutokO2H41),(String
"5",Bool -> String -> String -> IO ()
dobutokO2H5),(String
"51",Bool -> String -> String -> IO ()
dobutokO2H51),(String
"61",Bool -> String -> String -> IO ()
dobutokO2H61),(String
"7",Bool -> String -> String -> IO ()
dobutokO2H7),(String
"8",Bool -> String -> String -> IO ()
dobutokO2H8),
        (String
"80",Bool -> String -> String -> IO ()
dobutokO2H80),(String
"82",Bool -> String -> String -> IO ()
dobutokO2H82),(String
"820",Bool -> String -> String -> IO ()
dobutokO2H820),(String
"9",Bool -> String -> String -> IO ()
dobutokO2H9),(String
"92",Bool -> String -> String -> IO ()
dobutokO2H92),(String
"99",[String] -> Bool -> String -> String -> IO ()
dobutokO2H99 [String]
argss),
          (String
"992",[String] -> Bool -> String -> String -> IO ()
dobutokO2H992G [String]
argss),(String
"999",[String] -> Bool -> String -> String -> IO ()
dobutokO2H999 [String]
argss),(String
"9992",[String] -> Bool -> String -> String -> IO ()
dobutokO2H9992G [String]
argss)]) String
arg1

dobutokO2H1 :: Bool -> String -> FilePath -> IO ()
dobutokO2H1 :: Bool -> String -> String -> IO ()
dobutokO2H1 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
octave,String
ampLS,String
time2] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
3,Int
4,Int
5] else [Int
1..Int
5])
  let (Int
octave1,Float
ampL,Float
time3) = Maybe (Int, Float, Float) -> (Int, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (Int, Float, Float) -> (Int, Float, Float))
-> ([String] -> Maybe (Int, Float, Float))
-> [String]
-> (Int, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe (Int, Float, Float)
threeStr2Val ([String] -> (Int, Float, Float))
-> [String] -> (Int, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
octave,String
ampLS,String
time2] in String -> Int -> Float -> Float -> String -> IO ()
overSoXSynthNGen String
file Int
octave1 Float
ampL Float
time3 String
args
{-# INLINE dobutokO2H1 #-}

threeStr2Val :: [String] -> Maybe (Int,Float,Float)
threeStr2Val :: [String] -> Maybe (Int, Float, Float)
threeStr2Val [String
xs,String
ys,String
zs] = (Int, Float, Float) -> Maybe (Int, Float, Float)
forall a. a -> Maybe a
Just (String -> Int
forall a. Read a => String -> a
read String
xs::Int,String -> Float
forall a. Read a => String -> a
read String
ys::Float,String -> Float
forall a. Read a => String -> a
read String
zs::Float)
threeStr2Val [String]
_ = Maybe (Int, Float, Float)
forall a. Maybe a
Nothing
{-# INLINE threeStr2Val #-}

fourStr2Val :: [String] -> Maybe (Int,Float,Float,Float)
fourStr2Val :: [String] -> Maybe (Int, Float, Float, Float)
fourStr2Val [String
xs,String
ys,String
zs,String
tws] = (Int, Float, Float, Float) -> Maybe (Int, Float, Float, Float)
forall a. a -> Maybe a
Just (String -> Int
forall a. Read a => String -> a
read String
xs::Int,String -> Float
forall a. Read a => String -> a
read String
ys::Float,String -> Float
forall a. Read a => String -> a
read String
zs::Float,String -> Float
forall a. Read a => String -> a
read String
tws::Float)
fourStr2Val [String]
_ = Maybe (Int, Float, Float, Float)
forall a. Maybe a
Nothing
{-# INLINE fourStr2Val #-}

fiveStr2Val :: [String] -> Maybe ([Int],Float,Float,Float)
fiveStr2Val :: [String] -> Maybe ([Int], Float, Float, Float)
fiveStr2Val [String
xs,String
ys,String
zs,String
tws] = ([Int], Float, Float, Float) -> Maybe ([Int], Float, Float, Float)
forall a. a -> Maybe a
Just ((String -> Int) -> [String] -> [Int]
forall a b. (a -> b) -> [a] -> [b]
map (\String
z -> String -> Int
forall a. Read a => String -> a
read String
z::Int) ([String] -> [Int]) -> (String -> [String]) -> String -> [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
words (String -> [Int]) -> String -> [Int]
forall a b. (a -> b) -> a -> b
$ String
xs,String -> Float
forall a. Read a => String -> a
read String
ys::Float,String -> Float
forall a. Read a => String -> a
read String
zs::Float,String -> Float
forall a. Read a => String -> a
read String
tws::Float)
fiveStr2Val [String]
_ = Maybe ([Int], Float, Float, Float)
forall a. Maybe a
Nothing
{-# INLINE fiveStr2Val #-}

dobutokO2H2 :: Bool -> String -> FilePath -> IO ()
dobutokO2H2 :: Bool -> String -> String -> IO ()
dobutokO2H2 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
octave,String
ampLS,String
time2,String
wws] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
3,Int
4,Int
5,Int
6] else [Int
1..Int
6])
  let (Int
octave1,Float
ampL,Float
time3) = Maybe (Int, Float, Float) -> (Int, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (Int, Float, Float) -> (Int, Float, Float))
-> ([String] -> Maybe (Int, Float, Float))
-> [String]
-> (Int, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe (Int, Float, Float)
threeStr2Val ([String] -> (Int, Float, Float))
-> [String] -> (Int, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
octave,String
ampLS,String
time2] in String -> Int -> Float -> Float -> String -> String -> IO ()
uniqOverSoXSynthNGen String
file Int
octave1 Float
ampL Float
time3 String
args String
wws
{-# INLINE dobutokO2H2 #-}

dobutokO2H3 :: Bool -> String -> FilePath -> IO ()
dobutokO2H3 :: Bool -> String -> String -> IO ()
dobutokO2H3 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
octave,String
ampLS,String
time2,String
tts] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
3,Int
4,Int
5,Int
7] else [Int
1,Int
2,Int
3,Int
4,Int
5,Int
7])
  let (Int
octave1,Float
ampL,Float
time3) = Maybe (Int, Float, Float) -> (Int, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (Int, Float, Float) -> (Int, Float, Float))
-> ([String] -> Maybe (Int, Float, Float))
-> [String]
-> (Int, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe (Int, Float, Float)
threeStr2Val ([String] -> (Int, Float, Float))
-> [String] -> (Int, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
octave,String
ampLS,String
time2] in String -> Int -> Float -> Float -> String -> String -> IO ()
overSoXSynthNGen2 String
file Int
octave1 Float
ampL Float
time3 String
args String
tts
{-# INLINE dobutokO2H3 #-}

dobutokO2H4 :: Bool -> String -> FilePath -> IO ()
dobutokO2H4 :: Bool -> String -> String -> IO ()
dobutokO2H4 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
octave,String
ampLS,String
time2,String
wws,String
tts] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
3,Int
4,Int
5,Int
6,Int
7] else [Int
1..Int
7])
  let (Int
octave1,Float
ampL,Float
time3) = Maybe (Int, Float, Float) -> (Int, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (Int, Float, Float) -> (Int, Float, Float))
-> ([String] -> Maybe (Int, Float, Float))
-> [String]
-> (Int, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe (Int, Float, Float)
threeStr2Val ([String] -> (Int, Float, Float))
-> [String] -> (Int, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
octave,String
ampLS,String
time2] in String
-> Int -> Float -> Float -> String -> String -> String -> IO ()
uniqOverSoXSynthNGen3 String
file Int
octave1 Float
ampL Float
time3 String
args String
wws String
tts
{-# INLINE dobutokO2H4 #-}

dobutokO2H5 :: Bool -> String -> FilePath -> IO ()
dobutokO2H5 :: Bool -> String -> String -> IO ()
dobutokO2H5 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
octave,String
ampLS,String
time2,String
tts,String
dAmpl0,String
vs] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
3,Int
4,Int
5,Int
7,Int
8,Int
9] else [Int
1,Int
2,Int
3,Int
4,Int
5,Int
7,Int
8,Int
9])
  let (Int
octave1,Float
ampL,Float
time3,Float
dAmpl) = Maybe (Int, Float, Float, Float) -> (Int, Float, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (Int, Float, Float, Float) -> (Int, Float, Float, Float))
-> ([String] -> Maybe (Int, Float, Float, Float))
-> [String]
-> (Int, Float, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe (Int, Float, Float, Float)
fourStr2Val ([String] -> (Int, Float, Float, Float))
-> [String] -> (Int, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
octave,String
ampLS,String
time2,String
dAmpl0] in String
-> Int
-> Float
-> Float
-> Float
-> String
-> String
-> String
-> IO ()
overSoXSynthNGen3 String
file Int
octave1 Float
ampL Float
time3 Float
dAmpl String
args String
tts String
vs
{-# INLINE dobutokO2H5 #-}

dobutokO2H :: Bool -> String -> FilePath -> IO ()
dobutokO2H :: Bool -> String -> String -> IO ()
dobutokO2H Bool
exist2 String
args String
file = do
  [String
_,String
_,String
octave,String
ampLS,String
time2,String
wws,String
tts,String
dAmpl0,String
vs] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
3,Int
4,Int
5,Int
6,Int
7,Int
8,Int
9] else [Int
1..Int
9])
  let (Int
octave1,Float
ampL,Float
time3,Float
dAmpl) = Maybe (Int, Float, Float, Float) -> (Int, Float, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (Int, Float, Float, Float) -> (Int, Float, Float, Float))
-> ([String] -> Maybe (Int, Float, Float, Float))
-> [String]
-> (Int, Float, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe (Int, Float, Float, Float)
fourStr2Val ([String] -> (Int, Float, Float, Float))
-> [String] -> (Int, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
octave,String
ampLS,String
time2,String
dAmpl0] in
    String
-> Int
-> Float
-> Float
-> Float
-> String
-> String
-> String
-> String
-> IO ()
uniqOverSoXSynthNGen4 String
file Int
octave1 Float
ampL Float
time3 Float
dAmpl String
args String
wws String
tts String
vs
{-# INLINE dobutokO2H #-}

dobutokO2H61 :: Bool -> String -> FilePath -> IO ()
dobutokO2H61 :: Bool -> String -> String -> IO ()
dobutokO2H61 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
complexNky,String
ampLS,String
time2,String
wws,String
tts,String
dAmpl0,String
vs] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
11,Int
4,Int
5,Int
6,Int
7,Int
8,Int
9] else [Int
1,Int
2,Int
11,Int
4,Int
5,Int
6,Int
7,Int
8,Int
9])
  let ([Int
enkA,Int
nTh],Float
ampL,Float
time3,Float
dAmpl) = Maybe ([Int], Float, Float, Float) -> ([Int], Float, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe ([Int], Float, Float, Float)
 -> ([Int], Float, Float, Float))
-> ([String] -> Maybe ([Int], Float, Float, Float))
-> [String]
-> ([Int], Float, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe ([Int], Float, Float, Float)
fiveStr2Val ([String] -> ([Int], Float, Float, Float))
-> [String] -> ([Int], Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
complexNky,String
ampLS,String
time2,String
dAmpl0] in
    String
-> Int
-> Int
-> Float
-> Float
-> Float
-> String
-> String
-> String
-> String
-> IO ()
uniqOverSoXSynthNGen4E String
file Int
nTh Int
enkA Float
ampL Float
time3 Float
dAmpl String
args String
wws String
tts String
vs
{-# INLINE dobutokO2H61 #-}

dobutokO2H8 :: Bool -> String -> FilePath -> IO ()
dobutokO2H8 :: Bool -> String -> String -> IO ()
dobutokO2H8 Bool
exist2 String
args String
file = IO (ExitCode, [String]) -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Bool -> String -> String -> IO (ExitCode, [String])
dobutokO2H8G Bool
exist2 String
args String
file)
{-# INLINE dobutokO2H8 #-}

dobutokO2H80 :: Bool -> String -> FilePath -> IO ()
dobutokO2H80 :: Bool -> String -> String -> IO ()
dobutokO2H80 Bool
exist2 String
args String
file = Bool -> String -> String -> IO (ExitCode, [String])
dobutokO2H8G Bool
exist2 String
args String
file  IO (ExitCode, [String]) -> ((ExitCode, [String]) -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
    (ExitCode
ExitSuccess, [String]
path8v) -> (String -> IO ()) -> [String] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ String -> IO ()
removeFile [String]
path8v
    (ExitCode, [String])
_           -> () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
{-# INLINE dobutokO2H80 #-}

dobutokO2H8G :: Bool -> String -> FilePath -> IO (ExitCode, [FilePath])
dobutokO2H8G :: Bool -> String -> String -> IO (ExitCode, [String])
dobutokO2H8G Bool
_ String
_ String
_ = do
  [String]
path8s0 <- String -> IO [String]
listDirectory String
"."
  let path8v :: [String]
path8v = [String] -> [String]
forall a. Ord a => [a] -> [a]
L.sort ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
isPrefixOf String
"result") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
path8s0
      path8v1 :: [[String]]
path8v1 = (Int -> [String]) -> [Int] -> [[String]]
forall a b. (a -> b) -> [a] -> [b]
map (\Int
i0 -> Int -> Int -> [String] -> [String]
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L (Int
i0 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
800) Int
800 [String]
path8v) [Int
0..([String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
path8v Int -> Int -> Int
forall a. Integral a => a -> a -> a
`quot` Int
800 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)] [[String]] -> [[String]] -> [[String]]
forall a. [a] -> [a] -> [a]
++ [Int -> Int -> [String] -> [String]
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L (Int
800 Int -> Int -> Int
forall a. Num a => a -> a -> a
*
         ([String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
path8v Int -> Int -> Int
forall a. Integral a => a -> a -> a
`quot` Int
800)) ([String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
path8v Int -> Int -> Int
forall a. Integral a => a -> a -> a
`rem` Int
800) [String]
path8v]
  ((Int, [String]) -> IO ()) -> [(Int, [String])] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Int, [String]) -> IO ()
dO2H8 ([(Int, [String])] -> IO ())
-> ([[String]] -> [(Int, [String])]) -> [[String]] -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int] -> [[String]] -> [(Int, [String])]
forall a b. [a] -> [b] -> [(a, b)]
zip [Int
0..] ([[String]] -> IO ()) -> [[String]] -> IO ()
forall a b. (a -> b) -> a -> b
$ [[String]]
path8v1
  [String]
epath0s <- String -> IO [String]
listDirectory String
"."
  let epaths :: [String]
epaths = [String] -> [String]
forall a. Ord a => [a] -> [a]
L.sort ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
isPrefixOf String
"end0") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
epath0s
  (ExitCode
code1,String
_,String
_) <- String -> [String] -> String -> IO (ExitCode, String, String)
readProcessWithExitCode (Maybe String -> String
forall a. HasCallStack => Maybe a -> a
fromJust (String -> Maybe String
showE String
"sox")) ([String]
epaths [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String
"end.wav"]) String
""
  case ExitCode
code1 of
    ExitCode
ExitSuccess -> (String -> IO ()) -> [String] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ String -> IO ()
removeFile [String]
epaths
    ExitCode
_           -> do
      Bool
exi1 <- String -> IO Bool
doesFileExist String
"end.wav"
      if Bool
exi1
        then do
          String -> IO ()
removeFile String
"end.wav"
          String -> IO ()
forall a. HasCallStack => String -> a
error String
"The end file \"end.wav\" was not created. "
        else String -> IO ()
forall a. HasCallStack => String -> a
error String
"The end file \"end.wav\" was not created. "
  (ExitCode, [String]) -> IO (ExitCode, [String])
forall (m :: * -> *) a. Monad m => a -> m a
return (ExitCode
code1, [String]
path8v)
{-# INLINE dobutokO2H8G #-}

dobutokO2H82G :: Bool -> String -> FilePath -> IO (ExitCode, [FilePath])
dobutokO2H82G :: Bool -> String -> String -> IO (ExitCode, [String])
dobutokO2H82G Bool
_ String
ys String
_ = do
  [String]
path8s0 <- String -> IO [String]
listDirectory String
"."
  let path8v :: [String]
path8v = [String] -> [String]
forall a. Ord a => [a] -> [a]
L.sort ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
isPrefixOf String
"result") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
path8s0
      path8v1 :: [[String]]
path8v1 = (Int -> [String]) -> [Int] -> [[String]]
forall a b. (a -> b) -> [a] -> [b]
map (\Int
i0 -> Int -> Int -> [String] -> [String]
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L (Int
i0 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
800) Int
800 [String]
path8v ) [Int
0..([String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
path8v Int -> Int -> Int
forall a. Integral a => a -> a -> a
`quot` Int
800 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)] [[String]] -> [[String]] -> [[String]]
forall a. [a] -> [a] -> [a]
++ [Int -> Int -> [String] -> [String]
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L (Int
800 Int -> Int -> Int
forall a. Num a => a -> a -> a
*
         ([String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
path8v Int -> Int -> Int
forall a. Integral a => a -> a -> a
`quot` Int
800)) ([String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
path8v Int -> Int -> Int
forall a. Integral a => a -> a -> a
`rem` Int
800) [String]
path8v] 
  if Int -> String -> String
forall a. Int -> [a] -> [a]
drop Int
3 String
ys String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"f" then ((Int, [String]) -> IO ()) -> [(Int, [String])] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Int, [String]) -> IO ()
dO2H8f ([(Int, [String])] -> IO ())
-> ([[String]] -> [(Int, [String])]) -> [[String]] -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int] -> [[String]] -> [(Int, [String])]
forall a b. [a] -> [b] -> [(a, b)]
zip [Int
0..] ([[String]] -> IO ()) -> [[String]] -> IO ()
forall a b. (a -> b) -> a -> b
$ [[String]]
path8v1 else ((Int, [String]) -> IO ()) -> [(Int, [String])] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Int, [String]) -> IO ()
dO2H8 ([(Int, [String])] -> IO ())
-> ([[String]] -> [(Int, [String])]) -> [[String]] -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int] -> [[String]] -> [(Int, [String])]
forall a b. [a] -> [b] -> [(a, b)]
zip [Int
0..] ([[String]] -> IO ()) -> [[String]] -> IO ()
forall a b. (a -> b) -> a -> b
$ [[String]]
path8v1
  [String]
epath0s <- String -> IO [String]
listDirectory String
"."
  let epaths :: [String]
epaths = [String] -> [String]
forall a. Ord a => [a] -> [a]
L.sort ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
isPrefixOf String
"end0") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
epath0s
  (ExitCode
code1,String
_,String
_) <- String -> [String] -> String -> IO (ExitCode, String, String)
readProcessWithExitCode (Maybe String -> String
forall a. HasCallStack => Maybe a -> a
fromJust (String -> Maybe String
showE String
"sox")) ([String]
epaths [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ String -> [String] -> [String]
soxBasicParams String
ys (String
""String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String
"end.wav"])) String
""
  case ExitCode
code1 of
    ExitCode
ExitSuccess -> (String -> IO ()) -> [String] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ String -> IO ()
removeFile [String]
epaths
    ExitCode
_           -> do
      Bool
exiW <- String -> IO Bool
doesFileExist String
"end.wav"
      Bool
exiF <- String -> IO Bool
doesFileExist String
"end.flac"
      if Bool
exiW Bool -> Bool -> Bool
&& Bool -> Bool
not (Bool
exiF)
        then do
          String -> IO ()
removeFile String
"end.wav"
          String -> IO ()
forall a. HasCallStack => String -> a
error String
"The end file \"end.wav\" was not created. "
        else
          if Bool
exiF Bool -> Bool -> Bool
&& Bool -> Bool
not (Bool
exiW) then do
            String -> IO ()
removeFile String
"end.flac"
            String -> IO ()
forall a. HasCallStack => String -> a
error String
"The end file \"end.flac\" was not created. "
          else if Bool
exiF Bool -> Bool -> Bool
&& Bool
exiW then do
                 String -> IO ()
removeFile String
"end.flac"
                 String -> IO ()
removeFile String
"end.wav"
                 String -> IO ()
forall a. HasCallStack => String -> a
error String
"The end file \"end.*\" was not created. "
               else String -> IO ()
forall a. HasCallStack => String -> a
error String
"The end file \"end.*\" was not created. "
  (ExitCode, [String]) -> IO (ExitCode, [String])
forall (m :: * -> *) a. Monad m => a -> m a
return (ExitCode
code1, [String]
path8v)
{-# INLINE dobutokO2H82G #-}

dobutokO2H82 :: Bool -> String -> FilePath -> IO ()
dobutokO2H82 :: Bool -> String -> String -> IO ()
dobutokO2H82 Bool
exist2 String
ys String
file = IO (ExitCode, [String]) -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Bool -> String -> String -> IO (ExitCode, [String])
dobutokO2H82G Bool
exist2 String
ys String
file)
{-# INLINE dobutokO2H82 #-}

dobutokO2H820 :: Bool -> String -> FilePath -> IO ()
dobutokO2H820 :: Bool -> String -> String -> IO ()
dobutokO2H820 Bool
exist2 String
ys String
file = Bool -> String -> String -> IO (ExitCode, [String])
dobutokO2H82G Bool
exist2 String
ys String
file  IO (ExitCode, [String]) -> ((ExitCode, [String]) -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
    (ExitCode
ExitSuccess, [String]
path8v) -> (String -> IO ()) -> [String] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ String -> IO ()
removeFile [String]
path8v
    (ExitCode, [String])
_           -> () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
{-# INLINE dobutokO2H820 #-}

dobutokO2H11 :: Bool -> String -> FilePath -> IO ()
dobutokO2H11 :: Bool -> String -> String -> IO ()
dobutokO2H11 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
complexNky,String
ampLS,String
time2] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
11,Int
4,Int
5] else [Int
1,Int
2,Int
11,Int
4,Int
5])
  let ([Int
enkA,Int
nTh],Float
ampL,Float
time3,Float
_) = Maybe ([Int], Float, Float, Float) -> ([Int], Float, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe ([Int], Float, Float, Float)
 -> ([Int], Float, Float, Float))
-> ([String] -> Maybe ([Int], Float, Float, Float))
-> [String]
-> ([Int], Float, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe ([Int], Float, Float, Float)
fiveStr2Val ([String] -> ([Int], Float, Float, Float))
-> [String] -> ([Int], Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
complexNky,String
ampLS,String
time2,String
""] in String -> Int -> Int -> Float -> Float -> String -> IO ()
overSoXSynthNGenE String
file Int
nTh Int
enkA Float
ampL Float
time3 String
args
{-# INLINE dobutokO2H11 #-}

dobutokO2H21 :: Bool -> String -> FilePath -> IO ()
dobutokO2H21 :: Bool -> String -> String -> IO ()
dobutokO2H21 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
complexNky,String
ampLS,String
time2,String
wws] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
11,Int
4,Int
5,Int
6] else [Int
1,Int
2,Int
11,Int
4,Int
5,Int
6])
  let ([Int
enkA,Int
nTh],Float
ampL,Float
time3,Float
_) = Maybe ([Int], Float, Float, Float) -> ([Int], Float, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe ([Int], Float, Float, Float)
 -> ([Int], Float, Float, Float))
-> ([String] -> Maybe ([Int], Float, Float, Float))
-> [String]
-> ([Int], Float, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe ([Int], Float, Float, Float)
fiveStr2Val ([String] -> ([Int], Float, Float, Float))
-> [String] -> ([Int], Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
complexNky,String
ampLS,String
time2,String
""] in String -> Int -> Int -> Float -> Float -> String -> String -> IO ()
uniqOverSoXSynthNGenE String
file Int
nTh Int
enkA Float
ampL Float
time3 String
args String
wws
{-# INLINE dobutokO2H21 #-}

dobutokO2H31 :: Bool -> String -> FilePath -> IO ()
dobutokO2H31 :: Bool -> String -> String -> IO ()
dobutokO2H31 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
complexNky,String
ampLS,String
time2,String
tts] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
11,Int
4,Int
5,Int
7] else [Int
1,Int
2,Int
11,Int
4,Int
5,Int
7])
  let ([Int
enkA,Int
nTh],Float
ampL,Float
time3,Float
_) = Maybe ([Int], Float, Float, Float) -> ([Int], Float, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe ([Int], Float, Float, Float)
 -> ([Int], Float, Float, Float))
-> ([String] -> Maybe ([Int], Float, Float, Float))
-> [String]
-> ([Int], Float, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe ([Int], Float, Float, Float)
fiveStr2Val ([String] -> ([Int], Float, Float, Float))
-> [String] -> ([Int], Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
complexNky,String
ampLS,String
time2,String
""] in String -> Int -> Int -> Float -> Float -> String -> String -> IO ()
overSoXSynthNGen2E String
file Int
nTh Int
enkA Float
ampL Float
time3 String
args String
tts
{-# INLINE dobutokO2H31 #-}

dobutokO2H41 :: Bool -> String -> FilePath -> IO ()
dobutokO2H41 :: Bool -> String -> String -> IO ()
dobutokO2H41 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
complexNky,String
ampLS,String
time2,String
wws,String
tts] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
11,Int
4,Int
5,Int
6,Int
7] else [Int
1,Int
2,Int
11,Int
4,Int
5,Int
6,Int
7])
  let ([Int
enkA,Int
nTh],Float
ampL,Float
time3,Float
_) = Maybe ([Int], Float, Float, Float) -> ([Int], Float, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe ([Int], Float, Float, Float)
 -> ([Int], Float, Float, Float))
-> ([String] -> Maybe ([Int], Float, Float, Float))
-> [String]
-> ([Int], Float, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe ([Int], Float, Float, Float)
fiveStr2Val ([String] -> ([Int], Float, Float, Float))
-> [String] -> ([Int], Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
complexNky,String
ampLS,String
time2,String
""] in String
-> Int
-> Int
-> Float
-> Float
-> String
-> String
-> String
-> IO ()
uniqOverSoXSynthNGen3E String
file Int
nTh Int
enkA Float
ampL Float
time3 String
args String
wws String
tts
{-# INLINE dobutokO2H41 #-}

dobutokO2H51 :: Bool -> String -> FilePath -> IO ()
dobutokO2H51 :: Bool -> String -> String -> IO ()
dobutokO2H51 Bool
exist2 String
args String
file = do
  [String
_,String
_,String
complexNky,String
ampLS,String
time2,String
tts,String
dAmpl0,String
vs] <- (Int -> IO String) -> [Int] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (String -> Int -> IO String
recAndProcess String
file) (if Bool
exist2 then [Int
0,Int
2,Int
11,Int
4,Int
5,Int
7,Int
8,Int
9] else [Int
1,Int
2,Int
11,Int
4,Int
5,Int
7,Int
8,Int
9])
  let ([Int
enkA,Int
nTh],Float
ampL,Float
time3,Float
dAmpl) = Maybe ([Int], Float, Float, Float) -> ([Int], Float, Float, Float)
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe ([Int], Float, Float, Float)
 -> ([Int], Float, Float, Float))
-> ([String] -> Maybe ([Int], Float, Float, Float))
-> [String]
-> ([Int], Float, Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Maybe ([Int], Float, Float, Float)
fiveStr2Val ([String] -> ([Int], Float, Float, Float))
-> [String] -> ([Int], Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ [String
complexNky,String
ampLS,String
time2,String
dAmpl0] in
    String
-> Int
-> Int
-> Float
-> Float
-> Float
-> String
-> String
-> String
-> IO ()
overSoXSynthNGen3E String
file Int
nTh Int
enkA Float
ampL Float
time3 Float
dAmpl String
args String
tts String
vs
{-# INLINE dobutokO2H51 #-}

dO2H8 :: (Int, [String]) -> IO ()
dO2H8 :: (Int, [String]) -> IO ()
dO2H8 (Int
i, [String]
v) = do
  (ExitCode
code,String
_,String
_) <- String -> [String] -> String -> IO (ExitCode, String, String)
readProcessWithExitCode (Maybe String -> String
forall a. HasCallStack => Maybe a -> a
fromJust (String -> Maybe String
showE String
"sox")) ([String]
v [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String
"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".wav"]) String
""
  case ExitCode
code of
    ExitCode
ExitSuccess -> String -> IO ()
putStr String
""
    ExitCode
_           -> do
      Bool
exi0 <- String -> IO Bool
doesFileExist (String -> IO Bool) -> String -> IO Bool
forall a b. (a -> b) -> a -> b
$ String
"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".wav"
      if Bool
exi0
        then do
          String -> IO ()
removeFile (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".wav"
          String -> IO ()
forall a. HasCallStack => String -> a
error (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"The intermediate file " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".wav\" was not created. "
        else String -> IO ()
forall a. HasCallStack => String -> a
error (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"The intermediate file " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".wav\" was not created. "
{-# INLINE dO2H8 #-}

dO2H8f :: (Int, [String]) -> IO ()
dO2H8f :: (Int, [String]) -> IO ()
dO2H8f (Int
i, [String]
v) = do
  (ExitCode
code,String
_,String
_) <- String -> [String] -> String -> IO (ExitCode, String, String)
readProcessWithExitCode (Maybe String -> String
forall a. HasCallStack => Maybe a -> a
fromJust (String -> Maybe String
showE String
"sox")) ([String]
v [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String
"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".flac"]) String
""
  case ExitCode
code of
    ExitCode
ExitSuccess -> String -> IO ()
putStr String
""
    ExitCode
_           -> do
      Bool
exi0 <- String -> IO Bool
doesFileExist (String -> IO Bool) -> String -> IO Bool
forall a b. (a -> b) -> a -> b
$ String
"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".flac"
      if Bool
exi0
        then do
          String -> IO ()
removeFile (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".flac"
          String -> IO ()
forall a. HasCallStack => String -> a
error (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"The intermediate file " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".flac\" was not created. "
        else String -> IO ()
forall a. HasCallStack => String -> a
error (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"The intermediate file " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\"end0" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
".flac\" was not created. "
{-# INLINE dO2H8f #-}

-- | Actually works as 'pAnR_' function.
dobutokO2H9 :: Bool -> String -> FilePath -> IO ()
dobutokO2H9 :: Bool -> String -> String -> IO ()
dobutokO2H9 Bool
_ String
_ String
_ = IO ()
pAnR_
{-# INLINE dobutokO2H9 #-}

-- | Actually works as 'pAnR_2G' function.
dobutokO2H92 :: Bool -> String -> FilePath -> IO ()
dobutokO2H92 :: Bool -> String -> String -> IO ()
dobutokO2H92 Bool
_ String
ys String
_ = String -> IO ()
pAnR_2G String
ys
{-# INLINE dobutokO2H92 #-}

dobutokO2H99 :: [String] -> Bool -> String -> FilePath -> IO ()
dobutokO2H99 :: [String] -> Bool -> String -> String -> IO ()
dobutokO2H99 [String]
argss Bool
_ String
_ String
file = do
  ([Int]
v1,[String]
dir0V) <- String -> String -> IO ([Int], [String])
dO2H99 String
"221w" String
file
  let dir0A :: Array Int String
dir0A = (\[String]
rs -> (Int, Int) -> [String] -> Array Int String
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,[String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
rs Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [String]
rs) [String]
dir0V
  (Int -> IO ()) -> [Int] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (\Int
idx -> String -> [String] -> IO ()
playE (Array Int String -> Int -> String
forall i e. Array i e -> Int -> e
unsafeAt Array Int String
dir0A Int
idx) [String]
argss) [Int]
v1
{-# INLINE dobutokO2H99 #-}

dO2H99 :: String -> FilePath -> IO ([Int],[FilePath])
dO2H99 :: String -> String -> IO ([Int], [String])
dO2H99 String
ys String
file = do
  [String]
dir0V <- String -> IO [String]
listVDirectory2G String
ys
  let l0 :: Int
l0 = [String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
dir0V
  String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"You have available " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
l0 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" files that can be played. The minimum index further is 0, the maximum is " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show (Int
l0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
  String
list1 <- String -> Int -> IO String
recAndProcess String
file (Int
99::Int)
  let yss :: [[Int]]
yss = Int -> String -> [[Int]]
divideToStr Int
l0 String
list1
      mxE :: Int
mxE = Int -> Maybe Int -> Int
forall a. a -> Maybe a -> a
fromMaybe (Int
l0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) ([[Int]] -> Maybe Int
forall a. Ord a => [[a]] -> Maybe a
maxLinV [[Int]]
yss)
      mnE :: Int
mnE = Int -> Maybe Int -> Int
forall a. a -> Maybe a -> a
fromMaybe Int
0 ([[Int]] -> Maybe Int
forall a. Ord a => [[a]] -> Maybe a
minLinV [[Int]]
yss)
      zss :: [[Int]]
zss = ([Int] -> [Int]) -> [[Int]] -> [[Int]]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> Int -> [Int] -> [Int]
filterToBnds Int
mnE Int
mxE) [[Int]]
yss
      v1 :: [Int]
v1 = [[Int]] -> [Int]
forall a. Ord a => [[a]] -> [a]
doubleLtoV [[Int]]
zss
  ([Int], [String]) -> IO ([Int], [String])
forall (m :: * -> *) a. Monad m => a -> m a
return ([Int]
v1,[String]
dir0V)
{-# INLINE dO2H99 #-}

dobutokO2H992G :: [String] -> Bool -> String -> FilePath -> IO ()
dobutokO2H992G :: [String] -> Bool -> String -> String -> IO ()
dobutokO2H992G [String]
argss Bool
_ String
ys String
file = do
  ([Int]
v1,[String]
dir0V) <- String -> String -> IO ([Int], [String])
dO2H99 String
ys String
file
  let dir0A :: Array Int String
dir0A = (\[String]
rs -> (Int, Int) -> [String] -> Array Int String
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,[String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
rs Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [String]
rs) [String]
dir0V
  (Int -> IO ()) -> [Int] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (\Int
idx -> String -> [String] -> IO ()
playE (Array Int String -> Int -> String
forall i e. Array i e -> Int -> e
unsafeAt Array Int String
dir0A Int
idx) [String]
argss) [Int]
v1
{-# INLINE dobutokO2H992G #-}

dobutokO2H999 :: [String] -> Bool -> String -> FilePath -> IO ()
dobutokO2H999 :: [String] -> Bool -> String -> String -> IO ()
dobutokO2H999 [String]
argss Bool
_ String
_ String
file = do
  ([Int]
v1,[String]
dir0V) <- String -> String -> IO ([Int], [String])
dO2H99 String
"221w" String
file
  let dir0A :: Array Int String
dir0A = (\[String]
rs -> (Int, Int) -> [String] -> Array Int String
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,[String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
rs Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [String]
rs) [String]
dir0V
  (Int -> IO ()) -> [Int] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (\Int
idx -> String -> [String] -> IO ()
soxE1 (Array Int String -> Int -> String
forall i e. Array i e -> Int -> e
unsafeAt Array Int String
dir0A Int
idx) [String]
argss) [Int]
v1
{-# INLINE dobutokO2H999 #-}

dobutokO2H9992G :: [String] -> Bool -> String -> FilePath -> IO ()
dobutokO2H9992G :: [String] -> Bool -> String -> String -> IO ()
dobutokO2H9992G [String]
argss Bool
_ String
ys String
file = do
  ([Int]
v1,[String]
dir0V) <- String -> String -> IO ([Int], [String])
dO2H99 String
ys String
file
  let dir0A :: Array Int String
dir0A = (\[String]
rs -> (Int, Int) -> [String] -> Array Int String
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,[String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
rs Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [String]
rs) [String]
dir0V
  (Int -> IO ()) -> [Int] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (\Int
idx -> String -> [String] -> IO ()
soxE1 (Array Int String -> Int -> String
forall i e. Array i e -> Int -> e
unsafeAt Array Int String
dir0A Int
idx) [String]
argss) [Int]
v1
{-# INLINE dobutokO2H9992G #-}

divideToStr :: Int -> String -> [[Int]]
divideToStr :: Int -> String -> [[Int]]
divideToStr Int
n = (String -> [Int]) -> [String] -> [[Int]]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> String -> [Int]
parseStoLInts Int
n)([String] -> [[Int]]) -> (String -> [String]) -> String -> [[Int]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
lines

isDataStr :: String -> Bool
isDataStr :: String -> Bool
isDataStr = Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
notElem Char
'@'

isTextPair :: String -> String -> Bool
isTextPair :: String -> String -> Bool
isTextPair String
xs String
ys = String -> Bool
isDataStr String
xs Bool -> Bool -> Bool
&& String -> Bool
isDataStr String
ys

failureNotification2 :: IO ()
failureNotification2 :: IO ()
failureNotification2 = do
  String -> IO ()
putStrLn String
"--------------------------------------------------------------------------------------------------------------------"
  String -> IO ()
putStrLn String
""
  String -> IO ()
putStrLn String
"The operation was not successful because of the not valid textual input. Please, specify a valid textual input. "

-- | Used to obtain one multiline specially formatted textual input and do the full processment for the sound. 
-- The function generates overtones using additional 'String' and allows maximum control over the parameters.
-- Besides, all the needed information it obtains from the singular formatted input, which can be ended
-- with a keyboard keys combination that means an end of input (e. g. for Unices, that is probably Ctrl + D).
-- \'@\' are separators for the input parts for their respective parts. For more information about the
-- format of the single input, see:
--
-- 'https://drive.google.com/open?id=10Z_GRZR4TKoL5KXfqPm-t-4humuHN0O4'
--
-- The file is also provided with the package as text.dat.txt. 
-- The last two or three inputs (an input just here means a textual input between two \'@\') can be omitted,
-- the program will work also but with less control for the user possible. 
-- 
dobutokO2H7 :: Bool -> String -> FilePath -> IO ()
dobutokO2H7 :: Bool -> String -> String -> IO ()
dobutokO2H7 Bool
True String
args String
file = do
  String -> IO ()
putStrLn String
"Please, specify a prepared textual input. To end the input press a keyboard keys combination that means an end of the input (e. g. for Unices, possibly Ctrl + D). "
  String
input <- IO String
getContents
  let text0 :: [String]
text0   = String -> [String]
lines String
input
      listTxt :: [String]
listTxt = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter String -> Bool
isDataStr ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([String] -> String) -> [[String]] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map ([String] -> String
unwords ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
words (String -> [String])
-> ([String] -> String) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
unlines) ([[String]] -> [String])
-> ([String] -> [[String]]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> String -> Bool) -> [String] -> [[String]]
forall a. (a -> a -> Bool) -> [a] -> [[a]]
L.groupBy String -> String -> Bool
isTextPair ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
text0
      l :: Int
l       = [String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
listTxt
  case Int
l of
    Int
4 -> IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO a
onException (do
      let [String
octave0,String
ampLS0,String
time20,String
wws] = [String]
listTxt
          octave1 :: Int
octave1 = String -> Int
forall a. Read a => String -> a
read (String -> String
d3H String
octave0)::Int
          ampL :: Float
ampL = String -> Float
forall a. Read a => String -> a
read (String -> String
d4H String
ampLS0)::Float
          time3 :: Float
time3 = String -> Float
forall a. Read a => String -> a
read (String -> String
d5H String
time20)::Float
      String -> Int -> Float -> Float -> String -> String -> IO ()
uniqOverSoXSynthNGen String
file Int
octave1 Float
ampL Float
time3 String
args String
wws) (IO ()
failureNotification2 IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Bool -> String -> String -> IO ()
dobutokO2H7 Bool
True String
args String
file)
    Int
5 -> IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO a
onException (do
      let [String
octave0,String
ampLS0,String
time20,String
wws,String
tts0] = [String]
listTxt
          octave1 :: Int
octave1 = String -> Int
forall a. Read a => String -> a
read (String -> String
d3H String
octave0)::Int
          ampL :: Float
ampL = String -> Float
forall a. Read a => String -> a
read (String -> String
d4H String
ampLS0)::Float
          time3 :: Float
time3 = String -> Float
forall a. Read a => String -> a
read (String -> String
d5H String
time20)::Float
      String
-> Int -> Float -> Float -> String -> String -> String -> IO ()
uniqOverSoXSynthNGen3 String
file Int
octave1 Float
ampL Float
time3 String
args String
wws (String -> String
d7H String
tts0)) (IO ()
failureNotification2 IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Bool -> String -> String -> IO ()
dobutokO2H7 Bool
True String
args String
file)
    Int
7 -> IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO a
onException (do
      let [String
octave0,String
ampLS0,String
time20,String
wws,String
tts0,String
dAmpl0,String
vs0] = [String]
listTxt
          octave1 :: Int
octave1 = String -> Int
forall a. Read a => String -> a
read (String -> String
d3H String
octave0)::Int
          ampL :: Float
ampL = String -> Float
forall a. Read a => String -> a
read (String -> String
d4H String
ampLS0)::Float
          time3 :: Float
time3 = String -> Float
forall a. Read a => String -> a
read (String -> String
d5H String
time20)::Float
          dAmpl :: Float
dAmpl = String -> Float
forall a. Read a => String -> a
read (String -> String
d8H String
dAmpl0)::Float
      String
-> Int
-> Float
-> Float
-> Float
-> String
-> String
-> String
-> String
-> IO ()
uniqOverSoXSynthNGen4 String
file Int
octave1 Float
ampL Float
time3 Float
dAmpl String
args String
wws (String -> String
d7H String
tts0) (String -> String
d9H String
vs0)) (IO ()
failureNotification2 IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
         Bool -> String -> String -> IO ()
dobutokO2H7 Bool
True String
args String
file)
    Int
_ -> IO ()
failureNotification2 IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Bool -> String -> String -> IO ()
dobutokO2H7 Bool
True String
args String
file
dobutokO2H7 Bool
_ String
args String
file = IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO a
onException (do
  String
_ <- IO String
processD1
--  _ <- processD2 file   Is not used since the version after 0.43.0.0.
  Bool -> String -> String -> IO ()
dobutokO2H7 Bool
True String
args String
file) (do
    String -> IO ()
putStrLn String
"--------------------------------------------------------------------------------------------------------------------"
    String -> IO ()
putStrLn String
""
    String -> IO ()
putStr String
"The operation was not successful because the file with such a name does not exist or was not created by a program. "
    String -> IO ()
putStrLn String
"Please, interrupt a program and start again with a better data. "
    Bool -> String -> String -> IO ()
dobutokO2H7 Bool
False String
args String
file)
{-# INLINE dobutokO2H7 #-}

-- | Takes textual input from the stdin and prints it as one 'String' to the stdout.
o2help :: Bool -> String -> FilePath -> IO ()
o2help :: Bool -> String -> String -> IO ()
o2help Bool
_ String
_ String
_ = do
  String
xs <- IO String
getContents
  let ys :: String
ys = [String] -> String
unwords ([String] -> String) -> (String -> [String]) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
lines (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
xs in do
    String -> IO ()
putStrLn String
""
    String -> IO ()
putStrLn String
"-------------------------------------------------------------------------------------------------------------"
    String -> IO ()
putStrLn String
ys

dobutokO2H00 :: Bool -> String -> FilePath -> IO ()
dobutokO2H00 :: Bool -> String -> String -> IO ()
dobutokO2H00 Bool
_ = String -> String -> IO ()
fadeAllE
{-# INLINE dobutokO2H00 #-}

dobutokO2H002 :: Bool -> String -> FilePath -> IO ()
dobutokO2H002 :: Bool -> String -> String -> IO ()
dobutokO2H002 Bool
_ = Int -> String -> String -> IO ()
fadeAllEMilN Int
2
{-# INLINE dobutokO2H002 #-}