-- | -- Module : Main -- Copyright : (c) OleksandrZhabenko 2020 -- License : MIT -- Stability : Experimental -- Maintainer : olexandr543@yahoo.com -- -- Helps to order the 7 or less Ukrainian words (or their concatenations) -- to obtain somewhat suitable for poetry or music text. module Main where import Control.Exception (onException) import System.IO import DobutokO.Poetry (uniq10Poetical4,uniq10Poetical5,norm4,norm5,uniqNPoeticalG) import System.Environment (getArgs) import Melodics.Executable (recFileName, printInfoF, rawToSoundFile) import Melodics.Ukrainian (appendS16LEFile, convertToProperUkrainian) import EndOfExe (showE) import Data.Maybe (fromJust,isJust) -- | The first command line argument specifies which function to run. If given \"4\" it runs 'uniqNPoeticalG norm4', otherwise 'uniqNPoeticalG norm5'. -- The second command line argument (by default is considered equal to 10::Int) is an 'Int' number of the needed printed variants. The next 7 -- are treated as the Ukrainian words to be ordered accordingly to the norm. For more information, please, refer to the documentation for the abovementioned -- functions. -- -- Afterwards, you can generate a sounding using 'workWithInput' in the \".wav\" format. main :: IO () main = do args <- getArgs let arg0 = concat . take 1 $ args arg01 = concat . drop 1 . take 2 $ args word1s = unwords . drop 1 $ args arg1 <- onException (do let aa = read arg01::Int return aa) (return 10) case (arg0,arg1) of ("4",10) -> uniq10Poetical4 word1s (_,10) -> uniq10Poetical5 word1s ("4",n) -> uniqNPoeticalG n norm4 word1s ~(_,n) -> uniqNPoeticalG n norm5 word1s putStrLn "What string would you like to record as a Ukrainian text sounding by mmsyn6ukr package? " str <- getLine nameAndRec str -- | Is used to specify a name for the recorded sounding for the selected text and to record it. nameAndRec :: String -> IO () nameAndRec str = do name <- recFileName withBinaryFile (name ++ ".raw") AppendMode (appendS16LEFile (convertToProperUkrainian str)) putStrLn "The .raw file was created by the program. If there is SoX installed then it will run further. " let ts = showE "sox" if isJust ts then rawToSoundFile "" name (fromJust ts) else printInfoF