zoom-cache-pcm 0.2.1.0 → 0.2.2.0
raw patch · 3 files changed
+220/−2 lines, 3 filesdep +mtldep +type-leveldep ~zoom-cachePVP ok
version bump matches the API change (PVP)
Dependencies added: mtl, type-level
Dependency ranges changed: zoom-cache
API changes (from Hackage documentation)
+ Data.ZoomCache.PCM: enumListPCMDouble :: (Functor m, MonadIO m) => Enumeratee [Stream] [(TimeStamp, [PCM Double])] m a
+ Data.ZoomCache.PCM: enumPCMDouble :: (Functor m, MonadIO m) => Enumeratee [Stream] [(TimeStamp, PCM Double)] m a
+ Data.ZoomCache.PCM: enumSummaryListPCMDouble :: (Functor m, MonadIO m) => Int -> Enumeratee [Stream] [[Summary (PCM Double)]] m a
+ Data.ZoomCache.PCM: enumSummaryPCMDouble :: (Functor m, MonadIO m) => Int -> Enumeratee [Stream] [Summary (PCM Double)] m a
+ Data.ZoomCache.PCM: wholeTrackSummaryListPCMDouble :: (Functor m, MonadIO m) => [IdentifyCodec] -> TrackNo -> Iteratee ByteString m [Summary (PCM Double)]
+ Data.ZoomCache.PCM: wholeTrackSummaryPCMDouble :: (Functor m, MonadIO m) => [IdentifyCodec] -> TrackNo -> Iteratee ByteString m (Summary (PCM Double))
+ Data.ZoomCache.PCM.Enumeratee: enumListPCMDouble :: (Functor m, MonadIO m) => Enumeratee [Stream] [(TimeStamp, [PCM Double])] m a
+ Data.ZoomCache.PCM.Enumeratee: enumPCMDouble :: (Functor m, MonadIO m) => Enumeratee [Stream] [(TimeStamp, PCM Double)] m a
+ Data.ZoomCache.PCM.Enumeratee: enumSummaryListPCMDouble :: (Functor m, MonadIO m) => Int -> Enumeratee [Stream] [[Summary (PCM Double)]] m a
+ Data.ZoomCache.PCM.Enumeratee: enumSummaryPCMDouble :: (Functor m, MonadIO m) => Int -> Enumeratee [Stream] [Summary (PCM Double)] m a
+ Data.ZoomCache.PCM.Enumeratee: wholeTrackSummaryListPCMDouble :: (Functor m, MonadIO m) => [IdentifyCodec] -> TrackNo -> Iteratee ByteString m [Summary (PCM Double)]
+ Data.ZoomCache.PCM.Enumeratee: wholeTrackSummaryPCMDouble :: (Functor m, MonadIO m) => [IdentifyCodec] -> TrackNo -> Iteratee ByteString m (Summary (PCM Double))
Files
- Data/ZoomCache/PCM.hs +9/−0
- Data/ZoomCache/PCM/Enumeratee.hs +206/−0
- zoom-cache-pcm.cabal +5/−2
Data/ZoomCache/PCM.hs view
@@ -6,12 +6,21 @@ -- * Codec identifiers , pcmIdentifiers++ , enumPCMDouble+ , enumListPCMDouble+ , enumSummaryPCMDouble+ , wholeTrackSummaryPCMDouble++ , enumSummaryListPCMDouble+ , wholeTrackSummaryListPCMDouble ) where import Data.ByteString (ByteString) import Data.Int import Data.ZoomCache.Codec (Codec, identifyCodec) +import Data.ZoomCache.PCM.Enumeratee import Data.ZoomCache.PCM.Types import Data.ZoomCache.PCM.IEEE754()
+ Data/ZoomCache/PCM/Enumeratee.hs view
@@ -0,0 +1,206 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE RecordWildCards #-}+{-# OPTIONS -Wall #-}+----------------------------------------------------------------------+-- |+-- Module : Data.ZoomCache.PCM.Enumeratee+-- Copyright : Conrad Parker+-- License : BSD3-style (see LICENSE)+--+-- Maintainer : Conrad Parker <conrad@metadecks.org>+-- Stability : unstable+-- Portability : unknown+--+-- ZoomCache PCM enumeratee conversions+----------------------------------------------------------------------++module Data.ZoomCache.PCM.Enumeratee (+ enumPCMDouble+ , enumListPCMDouble++ , enumSummaryPCMDouble+ , wholeTrackSummaryPCMDouble++ , enumSummaryListPCMDouble+ , wholeTrackSummaryListPCMDouble+) where++import Control.Applicative ((<$>))+import Control.Monad.Trans (MonadIO)+import Data.ByteString (ByteString)+import Data.Int+import qualified Data.Iteratee as I+import Data.Maybe+import Data.Typeable+import Data.TypeLevel.Num hiding ((==))+import Data.ZoomCache+import Data.ZoomCache.Codec+import Data.ZoomCache.NList+import Data.ZoomCache.Multichannel.NList++import Data.ZoomCache.PCM.Types+import Data.ZoomCache.PCM.IEEE754()+import Data.ZoomCache.PCM.Int()++----------------------------------------------------------------------++rawToPCMDouble :: ZoomRaw -> [PCM Double]+rawToPCMDouble (ZoomRaw xs) | typeOf xs == typeOf (undefined :: [PCM Double]) =+ fromMaybe [] (cast xs :: Maybe [PCM Double])+ | typeOf xs == typeOf (undefined :: [PCM Float]) =+ f (cast xs :: Maybe [PCM Float])+ | typeOf xs == typeOf (undefined :: [PCM Int]) =+ f (cast xs :: Maybe [PCM Int])+ | typeOf xs == typeOf (undefined :: [PCM Int8]) =+ f (cast xs :: Maybe [PCM Int8])+ | typeOf xs == typeOf (undefined :: [PCM Int16]) =+ f (cast xs :: Maybe [PCM Int16])+ | typeOf xs == typeOf (undefined :: [PCM Int32]) =+ f (cast xs :: Maybe [PCM Int32])+ | typeOf xs == typeOf (undefined :: [PCM Int64]) =+ f (cast xs :: Maybe [PCM Int64])+ | otherwise = []+ where+ f :: Real a => Maybe [PCM a] -> [PCM Double]+ f = maybe [] (map (PCM . realToFrac . unPCM))++rawToListPCMDouble :: ZoomRaw -> [[PCM Double]]+rawToListPCMDouble (ZoomRaw xs) | not (null d) = [d]+ | typeOf xs == typeOf (undefined :: [NList D1 (PCM Double)]) =+ l (cast xs :: Maybe [NList D1 (PCM Double)])+ | typeOf xs == typeOf (undefined :: [NList D1 (PCM Float)]) =+ f (cast xs :: Maybe [NList D1 (PCM Float)])+ | typeOf xs == typeOf (undefined :: [NList D1 (PCM Int)]) =+ f (cast xs :: Maybe [NList D1 (PCM Int)])+ | typeOf xs == typeOf (undefined :: [NList D1 (PCM Int8)]) =+ f (cast xs :: Maybe [NList D1 (PCM Int8)])+ | typeOf xs == typeOf (undefined :: [NList D1 (PCM Int16)]) =+ f (cast xs :: Maybe [NList D1 (PCM Int16)])+ | typeOf xs == typeOf (undefined :: [NList D1 (PCM Int32)]) =+ f (cast xs :: Maybe [NList D1 (PCM Int32)])+ | typeOf xs == typeOf (undefined :: [NList D1 (PCM Int64)]) =+ f (cast xs :: Maybe [NList D1 (PCM Int64)])+ | otherwise = []+ where+ d = rawToPCMDouble (ZoomRaw xs)+ l :: Maybe [NList D1 a] -> [[a]]+ l = maybe [] (map nListToList)+ f :: (ZoomReadable a) => Maybe [NList D1 a] -> [[PCM Double]]+ f = map (rawToPCMDouble . ZoomRaw) . l++----------------------------------------------------------------------++-- | Coercion of numeric Summary to type Summary Double.+toSummaryPCMDouble :: Typeable a => Summary a -> Maybe (Summary (PCM Double))+toSummaryPCMDouble s | typeOf s == typeOf (undefined :: Summary (PCM Double)) =+ id (cast s :: Maybe (Summary (PCM Double)))+ | typeOf s == typeOf (undefined :: Summary (PCM Float)) =+ sd <$> (cast s :: Maybe (Summary (PCM Float)))+ | typeOf s == typeOf (undefined :: Summary (PCM Int)) =+ sd <$> (cast s :: Maybe (Summary (PCM Int)))+ | typeOf s == typeOf (undefined :: Summary (PCM Int8)) =+ sd <$> (cast s :: Maybe (Summary (PCM Int8)))+ | typeOf s == typeOf (undefined :: Summary (PCM Int16)) =+ sd <$> (cast s :: Maybe (Summary (PCM Int16)))+ | typeOf s == typeOf (undefined :: Summary (PCM Int32)) =+ sd <$> (cast s :: Maybe (Summary (PCM Int32)))+ | typeOf s == typeOf (undefined :: Summary (PCM Int64)) =+ sd <$> (cast s :: Maybe (Summary (PCM Int64)))+ | otherwise = Nothing+ where+ sd :: ZoomPCM a => Summary (PCM a) -> Summary (PCM Double)+ sd s' = s' { summaryData = toSummaryDataPCMDouble (summaryData s') }++toSummaryDataPCMDouble :: ZoomPCM a => SummaryData (PCM a) -> SummaryData (PCM Double)+toSummaryDataPCMDouble s = pcmMkSummary+ (realToFrac . pcmMin $ s)+ (realToFrac . pcmMax $ s)+ (pcmAvg s)+ (pcmRMS s)++toSummaryListPCMDouble :: Typeable a => Summary a -> Maybe [Summary (PCM Double)]+toSummaryListPCMDouble s | isJust sd = (:[]) <$> sd+ | typeOf s == typeOf (undefined :: Summary (NList D1 (PCM Double))) =+ sl <$> (cast s :: Maybe (Summary (NList D1 (PCM Double))))+ | typeOf s == typeOf (undefined :: Summary (NList D1 (PCM Float))) =+ sld <$> (cast s :: Maybe (Summary (NList D1 (PCM Float))))+ | typeOf s == typeOf (undefined :: Summary (NList D1 (PCM Int))) =+ sld <$> (cast s :: Maybe (Summary (NList D1 (PCM Int))))+ | typeOf s == typeOf (undefined :: Summary (NList D1 (PCM Int8))) =+ sld <$> (cast s :: Maybe (Summary (NList D1 (PCM Int8))))+ | typeOf s == typeOf (undefined :: Summary (NList D1 (PCM Int16))) =+ sld <$> (cast s :: Maybe (Summary (NList D1 (PCM Int16))))+ | typeOf s == typeOf (undefined :: Summary (NList D1 (PCM Int32))) =+ sld <$> (cast s :: Maybe (Summary (NList D1 (PCM Int32))))+ | typeOf s == typeOf (undefined :: Summary (NList D1 (PCM Int64))) =+ sld <$> (cast s :: Maybe (Summary (NList D1 (PCM Int64))))+ | otherwise = Nothing+ where+ sd = toSummaryPCMDouble s+ sl :: Summary (NList D1 a) -> [Summary a]+ sl = summaryNListToList+ sld :: Typeable a => Summary (NList D1 a) -> [Summary (PCM Double)]+ sld = catMaybes . map toSummaryPCMDouble . sl++----------------------------------------------------------------------++enumPCMDouble :: (Functor m, MonadIO m)+ => I.Enumeratee [Stream] [(TimeStamp, PCM Double)] m a+enumPCMDouble = I.joinI . enumPackets . I.mapChunks (concatMap f)+ where+ f :: Packet -> [(TimeStamp, PCM Double)]+ f Packet{..} = zip packetTimeStamps (rawToPCMDouble packetData)++enumListPCMDouble :: (Functor m, MonadIO m)+ => I.Enumeratee [Stream] [(TimeStamp, [PCM Double])] m a+enumListPCMDouble = I.joinI . enumPackets . I.mapChunks (concatMap f)+ where+ f :: Packet -> [(TimeStamp, [PCM Double])]+ f Packet{..} = zip packetTimeStamps (rawToListPCMDouble packetData)++----------------------------------------------------------------------++-- | Read the summary of an entire track.+wholeTrackSummaryPCMDouble :: (Functor m, MonadIO m)+ => [IdentifyCodec]+ -> TrackNo+ -> I.Iteratee ByteString m (Summary (PCM Double))+wholeTrackSummaryPCMDouble identifiers trackNo = I.joinI $ enumCacheFile identifiers .+ I.joinI . filterTracks [trackNo] . I.joinI . e $ I.last+ where+ e = I.joinI . enumSummaries . I.mapChunks (catMaybes . map toSD)+ toSD :: ZoomSummary -> Maybe (Summary (PCM Double))+ toSD (ZoomSummary s) = toSummaryPCMDouble s++enumSummaryPCMDouble :: (Functor m, MonadIO m)+ => Int+ -> I.Enumeratee [Stream] [Summary (PCM Double)] m a+enumSummaryPCMDouble level =+ I.joinI . enumSummaryLevel level .+ I.mapChunks (catMaybes . map toSD)+ where+ toSD :: ZoomSummary -> Maybe (Summary (PCM Double))+ toSD (ZoomSummary s) = toSummaryPCMDouble s++-- | Read the summary of an entire track.+wholeTrackSummaryListPCMDouble :: (Functor m, MonadIO m)+ => [IdentifyCodec]+ -> TrackNo+ -> I.Iteratee ByteString m [Summary (PCM Double)]+wholeTrackSummaryListPCMDouble identifiers trackNo =+ I.joinI $ enumCacheFile identifiers .+ I.joinI . filterTracks [trackNo] . I.joinI . e $ I.last+ where+ e = I.joinI . enumSummaries . I.mapChunks (catMaybes . map toSLD)+ toSLD :: ZoomSummary -> Maybe [Summary (PCM Double)]+ toSLD (ZoomSummary s) = toSummaryListPCMDouble s++enumSummaryListPCMDouble :: (Functor m, MonadIO m)+ => Int+ -> I.Enumeratee [Stream] [[Summary (PCM Double)]] m a+enumSummaryListPCMDouble level =+ I.joinI . enumSummaryLevel level .+ I.mapChunks (catMaybes . map toSLD)+ where+ toSLD :: ZoomSummary -> Maybe [Summary (PCM Double)]+ toSLD (ZoomSummary s) = toSummaryListPCMDouble s
zoom-cache-pcm.cabal view
@@ -3,7 +3,7 @@ -- The package version. See the Haskell package versioning policy -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for -- standards guiding when and how versions should be incremented.-Version: 0.2.1.0+Version: 0.2.2.0 Synopsis: Library for zoom-cache PCM audio codecs @@ -48,10 +48,13 @@ containers >= 0.2 && < 0.5, iteratee >= 0.8.6.0 && < 0.9, ListLike >= 1.0 && < 4,- zoom-cache >= 0.7.0.0 && < 0.10+ mtl >= 2.0.0.0 && < 3,+ type-level,+ zoom-cache >= 0.9.0.0 && < 0.10 Exposed-modules: Data.ZoomCache.PCM+ Data.ZoomCache.PCM.Enumeratee Data.ZoomCache.PCM.IEEE754 Data.ZoomCache.PCM.Int Data.ZoomCache.PCM.Internal