|
- module Main (main) where
-
- import Lib
- import Parser
- import Driver
- import Types
-
- import qualified System.Console.GetOpt as Opt
- import qualified Algebra.RealRing as Real
- import qualified Data.StorableVector.Lazy as SVL
- import qualified Data.List.HT as ListHT
- import qualified Synthesizer.Basic.Binary as Bin
- import qualified Synthesizer.Causal.Process as Causal
- import Shell.Utility.Exit (exitFailureMsg)
- import System.Environment (getArgs, getProgName, )
- import Control.Monad (when, )
- import Text.Printf (printf, )
- import Data.Foldable (forM_, )
- import Control.Arrow (arr, (<<<), (^<<), )
- import System.Console.GetOpt
- (getOpt, usageInfo, ArgDescr(NoArg, ReqArg), )
- import qualified Sound.SoxLib as SoxLib
- import Data.Int (Int32, )
-
- --runDehum :: Flags -> FilePath -> FilePath -> IO ()
- --runDehum flags input output =
- -- withSound flags input $ \fmtIn params sig ->
- -- SoxLib.withWrite
- -- (writerInfoFromFormat fmtIn params)
- -- output $ \fmtOut ->
- -- SoxLib.writeStorableVectorLazy fmtOut $
- -- SVL.interleaveFirstPattern $
- -- map
- -- (Causal.apply
- -- (arr (Bin.fromCanonicalWith Real.roundSimple)
- -- <<<
- -- dehum params
- -- <<<
- -- arr Bin.toCanonical)) $
- -- SVL.deinterleave (numChannels params) sig
-
- --runEnvelope :: Flags -> FilePath -> FilePath -> IO ()
- --runEnvelope flags input output =
- -- withSound flags input $ \fmtIn params sig ->
- -- SoxLib.withWrite
- -- (monoInfoFromFormat fmtIn params)
- -- output $ \fmtOut ->
- -- SoxLib.writeStorableVectorLazy fmtOut $
- -- Causal.apply
- -- (arr (Bin.fromCanonicalWith Real.roundSimple)) $
- -- trackEnvelope params $
- -- map
- -- (Causal.apply
- -- (arr (^2)
- -- <<<
- -- dehum params
- -- <<<
- -- arr Bin.toCanonical)) $
- -- SVL.deinterleave (numChannels params) sig
-
- --runSizes :: Flags -> FilePath -> IO ()
- --runSizes flags input =
- -- withSound flags input $ \_fmt params sig ->
- -- mapM_ print $ pieceDurations params sig
-
- runLabels :: Flags -> FilePath -> IO ()
- runLabels flags input =
- withSound flags input $ \_fmt params sig ->
- mapM_ (\(n, (from,to)) -> printf "%s\t%s\t%d\n" from to n) $
- zip [(0::Int) ..] $
- ListHT.mapAdjacent (,) $
- map (\t ->
- case divMod (Real.roundSimple (fromIntegral t * 10^6 / sampleRate params)) (10^6) of
- -- FIXME: the comma is certainly only correct in German locale
- (seconds,micros) ->
- printf "%d,%06d" seconds (micros::Integer) :: String) $
- scanl (+) 0 $
- prefetch (preStart params) $
- pieceDurations params sig
-
- getChops :: Flags -> FilePath -> IO [SVL.Vector Int32]
- getChops flags input = withSound flags input $ \_ params sig -> do
- let ps = chopLazy params sig
- a = show ps
- putStrLn $ [last a]
- return $! ps
- {- |
- > runChop flags "in.wav" "%03d.wav"
- -}
- runChop :: Flags -> FilePath -> FilePath -> IO ()
- runChop flags input output =
- withSound flags input $ \fmtIn params sig ->
- forM_ (zip [(0::Int)..] $ chopLazy params sig) $ \(n,piece) ->
- print piece
- --SoxLib.withWrite
- -- (writerInfoFromFormat fmtIn params)
- -- (printf output n) $ \fmtOut ->
- -- SoxLib.writeStorableVectorLazy fmtOut piece
-
- main :: IO ()
- main = SoxLib.formatWith $ do
- argv <- getArgs
- let (opts, files, errors) =
- getOpt Opt.RequireOrder description argv
- when (not $ null errors) $
- exitFailureMsg (init (concat errors))
-
- flags <- foldl (>>=) (return defltFlags) opts
-
- --if flagComputeEnvelope flags
- -- then
- -- case files of
- -- [input,output] -> runEnvelope flags input output
- -- [] -> exitFailureMsg "need input and output file envelope computation"
- -- _ -> exitFailureMsg "more than two file names given"
- -- else
- case files of
- --[input,output] -> runChop flags input output
- [input] -> getChops flags input >>= print --runLabels flags input
- [] -> exitFailureMsg "no input or output given"
- _ -> exitFailureMsg "more than two file names given"
|