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"