module Sound.MED.Raw.MMD0Song where

import qualified Sound.MED.Raw.MMD0Sample as MMD0Sample
import Sound.MED.Raw.MMD0Sample(MMD0Sample)
import Sound.MED.Basic.Amiga
import Sound.MED.Basic.Utility

data MMD0Song = MMD0Song
  { MMD0Song -> [MMD0Sample]
sample     :: [ MMD0Sample ]
  , MMD0Song -> UWORD
numblocks  :: UWORD
  , MMD0Song -> UWORD
songlen    :: UWORD
  , MMD0Song -> [UBYTE]
playseq    :: [ UBYTE ]
  , MMD0Song -> UWORD
deftempo   :: UWORD
  , MMD0Song -> BYTE
playtransp :: BYTE
  , MMD0Song -> UBYTE
flags      :: UBYTE
  , MMD0Song -> UBYTE
flags2     :: UBYTE
  , MMD0Song -> UBYTE
tempo2     :: UBYTE
  , MMD0Song -> [UBYTE]
trkvol     :: [ UBYTE ]
  , MMD0Song -> UBYTE
mastervol  :: UBYTE
  , MMD0Song -> UBYTE
numsamples :: UBYTE
  }
  deriving (Int -> MMD0Song -> ShowS
[MMD0Song] -> ShowS
MMD0Song -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MMD0Song] -> ShowS
$cshowList :: [MMD0Song] -> ShowS
show :: MMD0Song -> String
$cshow :: MMD0Song -> String
showsPrec :: Int -> MMD0Song -> ShowS
$cshowsPrec :: Int -> MMD0Song -> ShowS
Show)

{-# SPECIALISE peek :: PTR -> StorableReader MMD0Song #-}
{-# SPECIALISE peek :: PTR -> ByteStringReader MMD0Song #-}
peek :: (Reader m) => PTR -> m MMD0Song
peek :: forall (m :: * -> *). Reader m => PTR -> m MMD0Song
peek PTR
p = do
  [MMD0Sample]
sample'      <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall (m :: * -> *). Reader m => PTR -> m MMD0Sample
MMD0Sample.peek forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> Int -> [PTR]
pointerRange PTR
p PTR
8 Int
63
  UWORD
numblocks'   <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pforall a. Num a => a -> a -> a
+PTR
504)
  UWORD
songlen'     <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pforall a. Num a => a -> a -> a
+PTR
506)
  [UBYTE]
playseq'     <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> Int -> [PTR]
pointerRange (PTR
pforall a. Num a => a -> a -> a
+PTR
508) PTR
1 Int
256
  UWORD
deftempo'    <- forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pforall a. Num a => a -> a -> a
+PTR
764)
  BYTE
playtransp'  <- forall (m :: * -> *). Reader m => Peek m BYTE
peekBYTE  (PTR
pforall a. Num a => a -> a -> a
+PTR
766)
  UBYTE
flags'       <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
767)
  UBYTE
flags2'      <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
768)
  UBYTE
tempo2'      <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
769)
  [UBYTE]
trkvol'      <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> Int -> [PTR]
pointerRange (PTR
pforall a. Num a => a -> a -> a
+PTR
770) PTR
1 Int
16
  UBYTE
mastervol'   <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
786)
  UBYTE
numsamples'  <- forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pforall a. Num a => a -> a -> a
+PTR
787)
  forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ [MMD0Sample]
-> UWORD
-> UWORD
-> [UBYTE]
-> UWORD
-> BYTE
-> UBYTE
-> UBYTE
-> UBYTE
-> [UBYTE]
-> UBYTE
-> UBYTE
-> MMD0Song
MMD0Song
    [MMD0Sample]
sample' UWORD
numblocks' UWORD
songlen' [UBYTE]
playseq' UWORD
deftempo' BYTE
playtransp' UBYTE
flags'
    UBYTE
flags2' UBYTE
tempo2' [UBYTE]
trkvol' UBYTE
mastervol' UBYTE
numsamples'