{-# LANGUAGE ForeignFunctionInterface #-}
module Foreign.Libcdio.Track
(
Track ( .. )
, TrackNum
, minTrack
, maxTrack
, TrackFormat ( .. )
, trackFormatString
, firstTrackNum
, lastTrackNum
, trackAt
, trackLba, trackLsn
, trackMsf
, trackLastLsn
, pregapLba, pregapLsn
, sectorCount
, trackFormat, isGreen
, hasPreemphasis
, copyPermit
, numChannels
, trackIsrc
, isrcLength
) where
import qualified Foreign.C.String as C
import qualified Foreign.C.Types as C
import qualified Foreign.Ptr as C
import qualified Foreign.Marshal.Alloc as M
import qualified Foreign.Marshal.Utils as M
import qualified Foreign.Storable as S
import qualified System.IO.Unsafe as IO.Unsafe
import Foreign.Libcdio.Marshal
import Foreign.Libcdio.Sector
import Foreign.Libcdio.Types.Enums
import Foreign.Libcdio.Types.Internal
import Sound.Libcdio.Common
withCdioTrack :: (C.Ptr Cdio -> CTrack -> IO a) -> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack :: (Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO a
f a -> Maybe b
g Cdio
c = (Maybe a -> Maybe b) -> IO (Maybe a) -> IO (Maybe b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= a -> Maybe b
g) (IO (Maybe a) -> IO (Maybe b))
-> (Track -> IO (Maybe a)) -> Track -> IO (Maybe b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Cdio -> (Ptr Cdio -> IO a) -> IO (Maybe a)
forall b. Cdio -> (Ptr Cdio -> IO b) -> IO (Maybe b)
withCdio Cdio
c ((Ptr Cdio -> IO a) -> IO (Maybe a))
-> (Track -> Ptr Cdio -> IO a) -> Track -> IO (Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Ptr Cdio -> CTrack -> IO a) -> CTrack -> Ptr Cdio -> IO a
forall a b c. (a -> b -> c) -> b -> a -> c
flip Ptr Cdio -> CTrack -> IO a
f (CTrack -> Ptr Cdio -> IO a)
-> (Track -> CTrack) -> Track -> Ptr Cdio -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Track -> CTrack
withTrack
invalidFormat :: CTrackFormat -> Maybe TrackFormat
invalidFormat :: CTrackFormat -> Maybe TrackFormat
invalidFormat = (CTrackFormat -> TrackFormat)
-> Maybe CTrackFormat -> Maybe TrackFormat
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int -> TrackFormat
forall a. Enum a => Int -> a
toEnum (Int -> TrackFormat)
-> (CTrackFormat -> Int) -> CTrackFormat -> TrackFormat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CTrackFormat -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) (Maybe CTrackFormat -> Maybe TrackFormat)
-> (CTrackFormat -> Maybe CTrackFormat)
-> CTrackFormat
-> Maybe TrackFormat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [CTrackFormat] -> CTrackFormat -> Maybe CTrackFormat
forall a. Eq a => [a] -> a -> Maybe a
maybeError [CTrackFormat
trackFormatError]
foreign import ccall safe "cdio/compat/track.h track_format_error"
trackFormatError :: CTrackFormat
trackFormatString :: TrackFormat -> String
trackFormatString :: TrackFormat -> String
trackFormatString = IO String -> String
forall a. IO a -> a
IO.Unsafe.unsafePerformIO (IO String -> String)
-> (TrackFormat -> IO String) -> TrackFormat -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
CString -> IO String
C.peekCString (CString -> IO String)
-> (TrackFormat -> CString) -> TrackFormat -> IO String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CTrackFormat -> CString
trackFormatString' (CTrackFormat -> CString)
-> (TrackFormat -> CTrackFormat) -> TrackFormat -> CString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> CTrackFormat
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CTrackFormat)
-> (TrackFormat -> Int) -> TrackFormat -> CTrackFormat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TrackFormat -> Int
forall a. Enum a => a -> Int
fromEnum
foreign import ccall safe "cdio/compat/track.h track_format_string"
trackFormatString' :: CTrackFormat -> C.CString
fromTrackFlagStatus :: Integral a => a -> Maybe Bool
fromTrackFlagStatus :: a -> Maybe Bool
fromTrackFlagStatus a
c = case Int -> TrackFlagStatus
forall a. Enum a => Int -> a
toEnum (Int -> TrackFlagStatus) -> Int -> TrackFlagStatus
forall a b. (a -> b) -> a -> b
$ a -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
c of
TrackFlagStatus
FlagTrue -> Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
True
TrackFlagStatus
FlagFalse -> Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
False
TrackFlagStatus
_ -> Maybe Bool
forall a. Maybe a
Nothing
firstTrackNum :: Cdio -> IO (Maybe Track)
firstTrackNum :: Cdio -> IO (Maybe Track)
firstTrackNum Cdio
c = (Maybe CTrack -> (CTrack -> Maybe Track) -> Maybe Track
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= CTrack -> Maybe Track
invalidTrack) (Maybe CTrack -> Maybe Track)
-> IO (Maybe CTrack) -> IO (Maybe Track)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Cdio -> (Ptr Cdio -> IO CTrack) -> IO (Maybe CTrack)
forall b. Cdio -> (Ptr Cdio -> IO b) -> IO (Maybe b)
withCdio Cdio
c Ptr Cdio -> IO CTrack
firstTrackNum'
foreign import ccall safe "cdio/compat/track.h cdio_get_first_track_num"
firstTrackNum' :: C.Ptr Cdio -> IO CTrack
lastTrackNum :: Cdio -> IO (Maybe Track)
lastTrackNum :: Cdio -> IO (Maybe Track)
lastTrackNum Cdio
c = (Maybe CTrack -> (CTrack -> Maybe Track) -> Maybe Track
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= CTrack -> Maybe Track
invalidTrack) (Maybe CTrack -> Maybe Track)
-> IO (Maybe CTrack) -> IO (Maybe Track)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Cdio -> (Ptr Cdio -> IO CTrack) -> IO (Maybe CTrack)
forall b. Cdio -> (Ptr Cdio -> IO b) -> IO (Maybe b)
withCdio Cdio
c Ptr Cdio -> IO CTrack
lastTrackNum'
foreign import ccall safe "cdio/compat/track.h cdio_get_last_track_num"
lastTrackNum' :: C.Ptr Cdio -> IO CTrack
trackAt :: Cdio -> Lsn -> IO (Maybe Track)
trackAt :: Cdio -> Lsn -> IO (Maybe Track)
trackAt Cdio
c = (Maybe CTrack -> Maybe Track)
-> IO (Maybe CTrack) -> IO (Maybe Track)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe CTrack -> (CTrack -> Maybe Track) -> Maybe Track
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= CTrack -> Maybe Track
invalidTrack) (IO (Maybe CTrack) -> IO (Maybe Track))
-> (Lsn -> IO (Maybe CTrack)) -> Lsn -> IO (Maybe Track)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Cdio -> (Ptr Cdio -> IO CTrack) -> IO (Maybe CTrack)
forall b. Cdio -> (Ptr Cdio -> IO b) -> IO (Maybe b)
withCdio Cdio
c ((Ptr Cdio -> IO CTrack) -> IO (Maybe CTrack))
-> (Lsn -> Ptr Cdio -> IO CTrack) -> Lsn -> IO (Maybe CTrack)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Ptr Cdio -> CTrackFormat -> IO CTrack)
-> CTrackFormat -> Ptr Cdio -> IO CTrack
forall a b c. (a -> b -> c) -> b -> a -> c
flip Ptr Cdio -> CTrackFormat -> IO CTrack
trackAt' (CTrackFormat -> Ptr Cdio -> IO CTrack)
-> (Lsn -> CTrackFormat) -> Lsn -> Ptr Cdio -> IO CTrack
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Lsn -> CTrackFormat
forall a b. (Integral a, Num b) => a -> b
fromIntegral
foreign import ccall safe "cdio/compat/track.h cdio_get_track"
trackAt' :: C.Ptr Cdio -> C.CInt -> IO CTrack
numChannels :: Cdio -> Track -> IO (Maybe Word)
numChannels :: Cdio -> Track -> IO (Maybe Word)
numChannels = (Ptr Cdio -> CTrack -> IO CTrackFormat)
-> (CTrackFormat -> Maybe Word) -> Cdio -> Track -> IO (Maybe Word)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrackFormat
numChannels' CTrackFormat -> Maybe Word
forall a b. (Integral a, Integral b) => a -> Maybe b
numChannelsError
numChannelsError :: (Integral a, Integral b) => a -> Maybe b
numChannelsError :: a -> Maybe b
numChannelsError a
i
| a
i a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
0 = Maybe b
forall a. Maybe a
Nothing
| Bool
otherwise = b -> Maybe b
forall a. a -> Maybe a
Just (b -> Maybe b) -> b -> Maybe b
forall a b. (a -> b) -> a -> b
$ a -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
i
foreign import ccall safe "cdio/compat/track.h cdio_get_track_channels"
numChannels' :: C.Ptr Cdio -> CTrack -> IO C.CInt
copyPermit :: Cdio -> Track -> IO (Maybe Bool)
copyPermit :: Cdio -> Track -> IO (Maybe Bool)
copyPermit = (Ptr Cdio -> CTrack -> IO CTrackFormat)
-> (CTrackFormat -> Maybe Bool) -> Cdio -> Track -> IO (Maybe Bool)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrackFormat
copyPermit' CTrackFormat -> Maybe Bool
forall a. Integral a => a -> Maybe Bool
fromTrackFlagStatus
foreign import ccall safe "cdio/compat/track.h cdio_get_track_copy_permit"
copyPermit' :: C.Ptr Cdio -> CTrack -> IO C.CInt
hasPreemphasis :: Cdio -> Track -> IO (Maybe Bool)
hasPreemphasis :: Cdio -> Track -> IO (Maybe Bool)
hasPreemphasis = (Ptr Cdio -> CTrack -> IO CTrackFormat)
-> (CTrackFormat -> Maybe Bool) -> Cdio -> Track -> IO (Maybe Bool)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrackFormat
hasPreemphasis' CTrackFormat -> Maybe Bool
forall a. Integral a => a -> Maybe Bool
fromTrackFlagStatus
foreign import ccall safe "cdio/compat/track.h cdio_get_track_preemphasis"
hasPreemphasis' :: C.Ptr Cdio -> CTrack -> IO C.CInt
trackFormat :: Cdio -> Track -> IO (Maybe TrackFormat)
trackFormat :: Cdio -> Track -> IO (Maybe TrackFormat)
trackFormat = (Ptr Cdio -> CTrack -> IO CTrackFormat)
-> (CTrackFormat -> Maybe TrackFormat)
-> Cdio
-> Track
-> IO (Maybe TrackFormat)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrackFormat
trackFormat' CTrackFormat -> Maybe TrackFormat
invalidFormat
foreign import ccall safe "cdio/compat/track.h cdio_get_track_format"
trackFormat' :: C.Ptr Cdio -> CTrack -> IO C.CInt
isGreen :: Cdio -> Track -> IO (Maybe Bool)
isGreen :: Cdio -> Track -> IO (Maybe Bool)
isGreen Cdio
c Track
t = do
Maybe Track
f <- Cdio -> IO (Maybe Track)
firstTrackNum Cdio
c
Maybe Track
l <- Cdio -> IO (Maybe Track)
lastTrackNum Cdio
c
if Track -> Maybe Track
forall a. a -> Maybe a
Just Track
t Maybe Track -> Maybe Track -> Bool
forall a. Ord a => a -> a -> Bool
< Maybe Track
f Bool -> Bool -> Bool
|| Track -> Maybe Track
forall a. a -> Maybe a
Just Track
t Maybe Track -> Maybe Track -> Bool
forall a. Ord a => a -> a -> Bool
> Maybe Track
l
then Maybe Bool -> IO (Maybe Bool)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Bool
forall a. Maybe a
Nothing
else (Ptr Cdio -> CTrack -> IO CTrack)
-> (CTrack -> Maybe Bool) -> Cdio -> Track -> IO (Maybe Bool)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrack
isGreen' (Bool -> Maybe Bool
forall a. a -> Maybe a
Just (Bool -> Maybe Bool) -> (CTrack -> Bool) -> CTrack -> Maybe Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CTrack -> Bool
forall a. (Eq a, Num a) => a -> Bool
M.toBool) Cdio
c Track
t
foreign import ccall safe "cdio/compat/track.h cdio_get_track_green"
isGreen' :: C.Ptr Cdio -> CTrack -> IO C.CUChar
trackLastLsn :: Cdio -> Track -> IO (Maybe Lsn)
trackLastLsn :: Cdio -> Track -> IO (Maybe Lsn)
trackLastLsn = (Ptr Cdio -> CTrack -> IO CTrackFormat)
-> (CTrackFormat -> Maybe Lsn) -> Cdio -> Track -> IO (Maybe Lsn)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrackFormat
trackLastLsn' CTrackFormat -> Maybe Lsn
invalidLsn
foreign import ccall safe "cdio/compat/track.h cdio_get_track_last_lsn"
trackLastLsn' :: C.Ptr Cdio -> CTrack -> IO C.CInt
trackLba :: Cdio -> Track -> IO (Maybe Lba)
trackLba :: Cdio -> Track -> IO (Maybe Lba)
trackLba = (Ptr Cdio -> CTrack -> IO CTrackFormat)
-> (CTrackFormat -> Maybe Lba) -> Cdio -> Track -> IO (Maybe Lba)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrackFormat
trackLba' CTrackFormat -> Maybe Lba
invalidLba
foreign import ccall safe "cdio/compat/track.h cdio_get_track_lba"
trackLba' :: C.Ptr Cdio -> CTrack -> IO C.CInt
trackLsn :: Cdio -> Track -> IO (Maybe Lsn)
trackLsn :: Cdio -> Track -> IO (Maybe Lsn)
trackLsn = (Ptr Cdio -> CTrack -> IO CTrackFormat)
-> (CTrackFormat -> Maybe Lsn) -> Cdio -> Track -> IO (Maybe Lsn)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrackFormat
trackLsn' CTrackFormat -> Maybe Lsn
invalidLsn
foreign import ccall safe "cdio/compat/track.h cdio_get_track_lsn"
trackLsn' :: C.Ptr Cdio -> CTrack -> IO C.CInt
pregapLba :: Cdio -> Track -> IO (Maybe Lba)
pregapLba :: Cdio -> Track -> IO (Maybe Lba)
pregapLba = (Ptr Cdio -> CTrack -> IO CTrackFormat)
-> (CTrackFormat -> Maybe Lba) -> Cdio -> Track -> IO (Maybe Lba)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrackFormat
pregapLba' CTrackFormat -> Maybe Lba
invalidLba
foreign import ccall safe "cdio/compat/track.h cdio_get_track_pregap_lba"
pregapLba' :: C.Ptr Cdio -> CTrack -> IO C.CInt
pregapLsn :: Cdio -> Track -> IO (Maybe Lsn)
pregapLsn :: Cdio -> Track -> IO (Maybe Lsn)
pregapLsn = (Ptr Cdio -> CTrack -> IO CTrackFormat)
-> (CTrackFormat -> Maybe Lsn) -> Cdio -> Track -> IO (Maybe Lsn)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CTrackFormat
pregapLsn' CTrackFormat -> Maybe Lsn
invalidLsn
foreign import ccall safe "cdio/compat/track.h cdio_get_track_pregap_lsn"
pregapLsn' :: C.Ptr Cdio -> CTrack -> IO C.CInt
trackIsrc :: Cdio -> Track -> IO (Maybe String)
trackIsrc :: Cdio -> Track -> IO (Maybe String)
trackIsrc Cdio
c Track
t = Cdio -> (Ptr Cdio -> IO CString) -> IO (Maybe CString)
forall b. Cdio -> (Ptr Cdio -> IO b) -> IO (Maybe b)
withCdio Cdio
c ((Ptr Cdio -> CTrack -> IO CString)
-> CTrack -> Ptr Cdio -> IO CString
forall a b c. (a -> b -> c) -> b -> a -> c
flip Ptr Cdio -> CTrack -> IO CString
trackIsrc' (CTrack -> Ptr Cdio -> IO CString)
-> CTrack -> Ptr Cdio -> IO CString
forall a b. (a -> b) -> a -> b
$ Track -> CTrack
withTrack Track
t) IO (Maybe CString)
-> (Maybe CString -> IO (Maybe String)) -> IO (Maybe String)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
IO (Maybe String)
-> (CString -> IO (Maybe String))
-> Maybe CString
-> IO (Maybe String)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Maybe String -> IO (Maybe String)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe String
forall a. Maybe a
Nothing) ((CString -> IO String) -> CString -> IO (Maybe String)
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
M.maybePeek CString -> IO String
peekFString)
foreign import ccall safe "cdio/compat/track.h cdio_get_track_isrc"
trackIsrc' :: C.Ptr Cdio -> CTrack -> IO C.CString
trackMsf :: Cdio -> Track -> IO (Maybe Msf)
trackMsf :: Cdio -> Track -> IO (Maybe Msf)
trackMsf Cdio
c Track
t = (Ptr Msf -> IO (Maybe Msf)) -> IO (Maybe Msf)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
M.alloca ((Ptr Msf -> IO (Maybe Msf)) -> IO (Maybe Msf))
-> (Ptr Msf -> IO (Maybe Msf)) -> IO (Maybe Msf)
forall a b. (a -> b) -> a -> b
$ \Ptr Msf
m' -> do
Maybe CBool
b <- Cdio -> (Ptr Cdio -> IO CBool) -> IO (Maybe CBool)
forall b. Cdio -> (Ptr Cdio -> IO b) -> IO (Maybe b)
withCdio Cdio
c ((Ptr Cdio -> IO CBool) -> IO (Maybe CBool))
-> (Ptr Cdio -> IO CBool) -> IO (Maybe CBool)
forall a b. (a -> b) -> a -> b
$ \Ptr Cdio
c' -> Ptr Cdio -> CTrack -> Ptr Msf -> IO CBool
trackMsf' Ptr Cdio
c' (Track -> CTrack
withTrack Track
t) Ptr Msf
m'
case CBool -> Bool
forall a. (Eq a, Num a) => a -> Bool
M.toBool (CBool -> Bool) -> Maybe CBool -> Maybe Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe CBool
b of
Just Bool
True -> (Ptr Msf -> IO Msf) -> Ptr Msf -> IO (Maybe Msf)
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
M.maybePeek Ptr Msf -> IO Msf
forall a. Storable a => Ptr a -> IO a
S.peek Ptr Msf
m'
Maybe Bool
_ -> Maybe Msf -> IO (Maybe Msf)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Msf
forall a. Maybe a
Nothing
foreign import ccall safe "cdio/compat/track.h cdio_get_track_msf"
trackMsf' :: C.Ptr Cdio -> CTrack -> C.Ptr Msf -> IO CBool
sectorCount :: Cdio -> Track -> IO (Maybe Word)
sectorCount :: Cdio -> Track -> IO (Maybe Word)
sectorCount = (Ptr Cdio -> CTrack -> IO CUInt)
-> (CUInt -> Maybe Word) -> Cdio -> Track -> IO (Maybe Word)
forall a b.
(Ptr Cdio -> CTrack -> IO a)
-> (a -> Maybe b) -> Cdio -> Track -> IO (Maybe b)
withCdioTrack Ptr Cdio -> CTrack -> IO CUInt
sectorCount' ((CUInt -> Maybe Word) -> Cdio -> Track -> IO (Maybe Word))
-> (CUInt -> Maybe Word) -> Cdio -> Track -> IO (Maybe Word)
forall a b. (a -> b) -> a -> b
$ [Word] -> Word -> Maybe Word
forall a. Eq a => [a] -> a -> Maybe a
maybeError [Word
0] (Word -> Maybe Word) -> (CUInt -> Word) -> CUInt -> Maybe Word
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CUInt -> Word
forall a b. (Integral a, Num b) => a -> b
fromIntegral
foreign import ccall safe "cdio/compat/track.h cdio_get_track_sec_count"
sectorCount' :: C.Ptr Cdio -> CTrack -> IO C.CUInt