module Data.ZoomCache.PCM.Int (
SummaryData(..)
, SummaryWork(..)
)where
import Blaze.ByteString.Builder
import Control.Applicative ((<$>))
import Data.ByteString (ByteString)
import Data.Int
import Data.Iteratee (Iteratee)
import Text.Printf
import Data.ZoomCache.Codec
import Data.ZoomCache.PCM.Internal
import Data.ZoomCache.PCM.Types
instance ZoomReadable (PCM Int) where
data SummaryData (PCM Int) = SummaryPCMInt
{ summaryIntMin :: !Int
, summaryIntMax :: !Int
, summaryIntAvg :: !Double
, summaryIntRMS :: !Double
}
trackIdentifier = const "ZPCMi32b"
readRaw = PCM <$> readInt32be
readSummary = readSummaryPCM
prettyRaw = prettyPacketPCMInt
prettySummaryData = prettySummaryPCMInt
deltaDecodeRaw = deltaDecodePCM
#if __GLASGOW_HASKELL__ >= 702
#endif
instance ZoomWrite (PCM Int) where
write = writeData
instance ZoomWrite (SampleOffset, (PCM Int)) where
write = writeDataVBR
instance ZoomWritable (PCM Int) where
data SummaryWork (PCM Int) = SummaryWorkPCMInt
{ swPCMIntTime :: !SampleOffset
, swPCMIntLast :: !Int
, swPCMIntMin :: !Int
, swPCMIntMax :: !Int
, swPCMIntSum :: !Double
, swPCMIntSumSq :: !Double
}
fromRaw = pcmFromRaw . unPCM
fromSummaryData = fromSummaryPCM
initSummaryWork = initSummaryPCMBounded
toSummaryData = mkSummaryPCM
updateSummaryData = updateSummaryPCM
appendSummaryData = appendSummaryPCM
deltaEncodeRaw = deltaEncodePCM
instance ZoomPCM Int where
pcmFromRaw = fromIntegral32be
pcmMin = summaryIntMin
pcmMax = summaryIntMax
pcmAvg = summaryIntAvg
pcmRMS = summaryIntRMS
pcmWorkSO = swPCMIntTime
pcmWorkLast = swPCMIntLast
pcmWorkMin = swPCMIntMin
pcmWorkMax = swPCMIntMax
pcmWorkSum = swPCMIntSum
pcmWorkSumSq = swPCMIntSumSq
pcmMkSummary = SummaryPCMInt
pcmMkSummaryWork = SummaryWorkPCMInt
#if __GLASGOW_HASKELL__ >= 702
#endif
instance ZoomReadable (PCM Int8) where
data SummaryData (PCM Int8) = SummaryPCMInt8
{ summaryInt8Min :: !Int8
, summaryInt8Max :: !Int8
, summaryInt8Avg :: !Double
, summaryInt8RMS :: !Double
}
trackIdentifier = const "ZPCMiS8b"
readRaw = PCM <$> readInt8
readSummary = readSummaryPCM
prettyRaw = prettyPacketPCMInt
prettySummaryData = prettySummaryPCMInt
deltaDecodeRaw = deltaDecodePCM
#if __GLASGOW_HASKELL__ >= 702
#endif
instance ZoomWrite (PCM Int8) where
write = writeData
instance ZoomWrite (SampleOffset, (PCM Int8)) where
write = writeDataVBR
instance ZoomWritable (PCM Int8) where
data SummaryWork (PCM Int8) = SummaryWorkPCMInt8
{ swPCMInt8Time :: !SampleOffset
, swPCMInt8Last :: !Int8
, swPCMInt8Min :: !Int8
, swPCMInt8Max :: !Int8
, swPCMInt8Sum :: !Double
, swPCMInt8SumSq :: !Double
}
fromRaw = pcmFromRaw . unPCM
fromSummaryData = fromSummaryPCM
initSummaryWork = initSummaryPCMBounded
toSummaryData = mkSummaryPCM
updateSummaryData = updateSummaryPCM
appendSummaryData = appendSummaryPCM
deltaEncodeRaw = deltaEncodePCM
instance ZoomPCM Int8 where
pcmFromRaw = fromInt8
pcmMin = summaryInt8Min
pcmMax = summaryInt8Max
pcmAvg = summaryInt8Avg
pcmRMS = summaryInt8RMS
pcmWorkSO = swPCMInt8Time
pcmWorkLast = swPCMInt8Last
pcmWorkMin = swPCMInt8Min
pcmWorkMax = swPCMInt8Max
pcmWorkSum = swPCMInt8Sum
pcmWorkSumSq = swPCMInt8SumSq
pcmMkSummary = SummaryPCMInt8
pcmMkSummaryWork = SummaryWorkPCMInt8
#if __GLASGOW_HASKELL__ >= 702
#endif
instance ZoomReadable (PCM Int16) where
data SummaryData (PCM Int16) = SummaryPCMInt16
{ summaryInt16Min :: !Int16
, summaryInt16Max :: !Int16
, summaryInt16Avg :: !Double
, summaryInt16RMS :: !Double
}
trackIdentifier = const "ZPCMi16b"
readRaw = PCM <$> readInt16be
readSummary = readSummaryPCM
prettyRaw = prettyPacketPCMInt
prettySummaryData = prettySummaryPCMInt
deltaDecodeRaw = deltaDecodePCM
#if __GLASGOW_HASKELL__ >= 702
#endif
instance ZoomWrite (PCM Int16) where
write = writeData
instance ZoomWrite (SampleOffset, (PCM Int16)) where
write = writeDataVBR
instance ZoomWritable (PCM Int16) where
data SummaryWork (PCM Int16) = SummaryWorkPCMInt16
{ swPCMInt16Time :: !SampleOffset
, swPCMInt16Last :: !Int16
, swPCMInt16Min :: !Int16
, swPCMInt16Max :: !Int16
, swPCMInt16Sum :: !Double
, swPCMInt16SumSq :: !Double
}
fromRaw = pcmFromRaw . unPCM
fromSummaryData = fromSummaryPCM
initSummaryWork = initSummaryPCMBounded
toSummaryData = mkSummaryPCM
updateSummaryData = updateSummaryPCM
appendSummaryData = appendSummaryPCM
deltaEncodeRaw = deltaEncodePCM
instance ZoomPCM Int16 where
pcmFromRaw = fromInt16be
pcmMin = summaryInt16Min
pcmMax = summaryInt16Max
pcmAvg = summaryInt16Avg
pcmRMS = summaryInt16RMS
pcmWorkSO = swPCMInt16Time
pcmWorkLast = swPCMInt16Last
pcmWorkMin = swPCMInt16Min
pcmWorkMax = swPCMInt16Max
pcmWorkSum = swPCMInt16Sum
pcmWorkSumSq = swPCMInt16SumSq
pcmMkSummary = SummaryPCMInt16
pcmMkSummaryWork = SummaryWorkPCMInt16
#if __GLASGOW_HASKELL__ >= 702
#endif
instance ZoomReadable (PCM Int32) where
data SummaryData (PCM Int32) = SummaryPCMInt32
{ summaryInt32Min :: !Int32
, summaryInt32Max :: !Int32
, summaryInt32Avg :: !Double
, summaryInt32RMS :: !Double
}
trackIdentifier = const "ZPCMi32b"
readRaw = PCM <$> readInt32be
readSummary = readSummaryPCM
prettyRaw = prettyPacketPCMInt
prettySummaryData = prettySummaryPCMInt
deltaDecodeRaw = deltaDecodePCM
#if __GLASGOW_HASKELL__ >= 702
#endif
instance ZoomWrite (PCM Int32) where
write = writeData
instance ZoomWrite (SampleOffset, (PCM Int32)) where
write = writeDataVBR
instance ZoomWritable (PCM Int32) where
data SummaryWork (PCM Int32) = SummaryWorkPCMInt32
{ swPCMInt32Time :: !SampleOffset
, swPCMInt32Last :: !Int32
, swPCMInt32Min :: !Int32
, swPCMInt32Max :: !Int32
, swPCMInt32Sum :: !Double
, swPCMInt32SumSq :: !Double
}
fromRaw = pcmFromRaw . unPCM
fromSummaryData = fromSummaryPCM
initSummaryWork = initSummaryPCMBounded
toSummaryData = mkSummaryPCM
updateSummaryData = updateSummaryPCM
appendSummaryData = appendSummaryPCM
deltaEncodeRaw = deltaEncodePCM
instance ZoomPCM Int32 where
pcmFromRaw = fromIntegral32be
pcmMin = summaryInt32Min
pcmMax = summaryInt32Max
pcmAvg = summaryInt32Avg
pcmRMS = summaryInt32RMS
pcmWorkSO = swPCMInt32Time
pcmWorkLast = swPCMInt32Last
pcmWorkMin = swPCMInt32Min
pcmWorkMax = swPCMInt32Max
pcmWorkSum = swPCMInt32Sum
pcmWorkSumSq = swPCMInt32SumSq
pcmMkSummary = SummaryPCMInt32
pcmMkSummaryWork = SummaryWorkPCMInt32
#if __GLASGOW_HASKELL__ >= 702
#endif
instance ZoomReadable (PCM Int64) where
data SummaryData (PCM Int64) = SummaryPCMInt64
{ summaryInt64Min :: !Int64
, summaryInt64Max :: !Int64
, summaryInt64Avg :: !Double
, summaryInt64RMS :: !Double
}
trackIdentifier = const "ZPCMi64b"
readRaw = PCM <$> readInt64be
readSummary = readSummaryPCM
prettyRaw = prettyPacketPCMInt
prettySummaryData = prettySummaryPCMInt
deltaDecodeRaw = deltaDecodePCM
#if __GLASGOW_HASKELL__ >= 702
#endif
instance ZoomWrite (PCM Int64) where
write = writeData
instance ZoomWrite (SampleOffset, (PCM Int64)) where
write = writeDataVBR
instance ZoomWritable (PCM Int64) where
data SummaryWork (PCM Int64) = SummaryWorkPCMInt64
{ swPCMInt64Time :: !SampleOffset
, swPCMInt64Last :: !Int64
, swPCMInt64Min :: !Int64
, swPCMInt64Max :: !Int64
, swPCMInt64Sum :: !Double
, swPCMInt64SumSq :: !Double
}
fromRaw = pcmFromRaw . unPCM
fromSummaryData = fromSummaryPCM
initSummaryWork = initSummaryPCMBounded
toSummaryData = mkSummaryPCM
updateSummaryData = updateSummaryPCM
appendSummaryData = appendSummaryPCM
deltaEncodeRaw = deltaEncodePCM
instance ZoomPCM Int64 where
pcmFromRaw = fromInt64be
pcmMin = summaryInt64Min
pcmMax = summaryInt64Max
pcmAvg = summaryInt64Avg
pcmRMS = summaryInt64RMS
pcmWorkSO = swPCMInt64Time
pcmWorkLast = swPCMInt64Last
pcmWorkMin = swPCMInt64Min
pcmWorkMax = swPCMInt64Max
pcmWorkSum = swPCMInt64Sum
pcmWorkSumSq = swPCMInt64SumSq
pcmMkSummary = SummaryPCMInt64
pcmMkSummaryWork = SummaryWorkPCMInt64
#if __GLASGOW_HASKELL__ >= 702
#endif
prettyPacketPCMInt :: Show a => PCM a -> String
prettyPacketPCMInt = show . unPCM
prettySummaryPCMInt :: (PrintfArg a, ZoomPCM a)
=> SummaryData (PCM a) -> String
prettySummaryPCMInt s = concat
[ printf "\tmin: %d\tmax: %d\t" (pcmMin s) (pcmMax s)
, printf "avg: %.3f\trms: %.3f" (pcmAvg s) (pcmRMS s)
]