packages feed

HarmTrace-2.0: src/HarmTrace/IO/BasePaths.hs

module HarmTrace.IO.BasePaths ( BasePaths, setPaths
                              , consBasePaths, basePathsExist
                              , getVampDir, getFeatDir , getOutDir  
                              , getBeatVampPath, getChromaVampPath
                              , getKeyVampPath) where

import System.FilePath ((</>))
import HarmTrace.IO.Common (fileExists, dirExists)
import Constants ( defaultVampDir, defaultOutDir, defaultFeatDir
                , beatVampPath, chromaVampPath, keyVampPath)

-- | A datatype for storing the base directories of the vamp plugins, feature
-- csv files, and the chord and log Files.
data BasePaths = BasePaths { getVampDir :: FilePath
                           , getFeatDir :: FilePath
                           , getOutDir  :: FilePath
                           , getBeatVampPath   :: FilePath
                           , getChromaVampPath :: FilePath
                           , getKeyVampPath    :: FilePath
                           }

-- | Similar to 'consBasePaths', but instead excepts 'Maybe FilePath's instead
-- of 'FilePath's
setPaths :: Maybe FilePath -> Maybe FilePath -> Maybe FilePath -> BasePaths
setPaths mv mf mo = 
  let vamp = maybe defaultVampDir id mv 
      feat = maybe defaultFeatDir id mf 
      out  = maybe defaultOutDir id mo
  in consBasePaths vamp feat out 

-- | contructs a new 'BasePaths' based on a VAMP transform directory, 
-- a feature directory (to store the CSV files), and an output directory.
consBasePaths :: FilePath -> FilePath -> FilePath -> BasePaths
consBasePaths vamp feat out = BasePaths vamp feat out 
  (vamp </> beatVampPath) (vamp </> chromaVampPath) (vamp </> keyVampPath) 

-- | checks (verbosely) if the paths stored in a 'BaseDir' exist.  
basePathsExist :: BasePaths -> IO (Bool)
basePathsExist dirs = do v <- fileExists (getBeatVampPath dirs)
                         c <- fileExists (getChromaVampPath dirs)  
                         k <- fileExists (getKeyVampPath dirs)
                         f <- dirExists  (getFeatDir dirs)
                         o <- dirExists  (getOutDir dirs)
                         return (v && c && k && f && o)