packages feed

sound-collage-0.0: src/Main.hs

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"