module Main where
import qualified SoundCollage
import qualified System.Exit as Exit
import qualified System.IO as IO
import System.Environment (getArgs, )
import System.FilePath ((</>), )
import System.IO.Temp (withSystemTempDirectory, )
exitFailureMsg :: String -> IO a
exitFailureMsg msg = do
IO.hPutStrLn IO.stderr msg
Exit.exitFailure
main :: IO ()
main = do
args <- getArgs
case args of
[] -> exitFailureMsg "action, source and destination missing"
[_] -> exitFailureMsg "source and destination missing"
[_,_] -> exitFailureMsg "destination missing"
["--decompose", src, dst] ->
SoundCollage.runDecompose SoundCollage.defltParams src dst
["--compose", src, dst] ->
SoundCollage.runCompose SoundCollage.defltParams src dst
["--associate", pool, src, dst] ->
SoundCollage.runAssociate SoundCollage.defltParams pool src dst
[pool, src, dst] ->
withSystemTempDirectory "sound-chunks" $ \chunkDir ->
withSystemTempDirectory "sound-collage" $ \collDir -> do
chunkSize <- SoundCollage.chunkSizeFromPool pool
let params =
SoundCollage.defltParams {
SoundCollage.paramShift =
div chunkSize
(SoundCollage.paramOverlap SoundCollage.defltParams)
}
putStrLn $ "determined chunk size: " ++ show chunkSize
putStrLn $ "decompose to " ++ chunkDir
SoundCollage.runDecompose params src
(chunkDir </> "%06d/%06d")
putStrLn $ "associate to " ++ collDir
SoundCollage.runAssociate params pool chunkDir collDir
putStrLn "compose"
SoundCollage.runCompose params collDir dst
_ -> exitFailureMsg "too many arguments"