module Sound.MED.Raw.MMD2Song where import qualified Sound.MED.Raw.MMD0Sample as MMD0Sample import Sound.MED.Raw.MMD0Sample(MMD0Sample) import qualified Sound.MED.Raw.PlaySeq as PlaySeq import Sound.MED.Raw.PlaySeq(PlaySeq) import Sound.MED.Basic.Amiga import Sound.MED.Basic.Utility data MMD2Song = MMD2Song { MMD2Song -> [MMD0Sample] sample :: [ MMD0Sample ] , MMD2Song -> UWORD numblocks :: UWORD , MMD2Song -> UWORD songlen :: UWORD , MMD2Song -> [PlaySeq] playseqtable :: [ PlaySeq ] , MMD2Song -> [UWORD] sectiontable :: [ UWORD ] , MMD2Song -> [UBYTE] trackvols :: [ UBYTE ] , MMD2Song -> UWORD numtracks :: UWORD , MMD2Song -> UWORD numpseqs :: UWORD , MMD2Song -> [BYTE] trackpans :: [ BYTE ] , MMD2Song -> ULONG flags3 :: ULONG , MMD2Song -> UWORD voladj :: UWORD , MMD2Song -> UWORD channels :: UWORD , MMD2Song -> UBYTE mix_echotype :: UBYTE , MMD2Song -> UBYTE mix_echodepth :: UBYTE , MMD2Song -> UWORD mix_echolen :: UWORD , MMD2Song -> BYTE mix_stereosep :: BYTE , MMD2Song -> [UBYTE] pad0 :: [ UBYTE ] , MMD2Song -> UWORD deftempo :: UWORD , MMD2Song -> BYTE playtransp :: BYTE , MMD2Song -> UBYTE flags :: UBYTE , MMD2Song -> UBYTE flags2 :: UBYTE , MMD2Song -> UBYTE tempo2 :: UBYTE , MMD2Song -> [UBYTE] pad1 :: [ UBYTE ] , MMD2Song -> UBYTE mastervol :: UBYTE , MMD2Song -> UBYTE numsamples :: UBYTE } deriving (Int -> MMD2Song -> ShowS [MMD2Song] -> ShowS MMD2Song -> String (Int -> MMD2Song -> ShowS) -> (MMD2Song -> String) -> ([MMD2Song] -> ShowS) -> Show MMD2Song forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [MMD2Song] -> ShowS $cshowList :: [MMD2Song] -> ShowS show :: MMD2Song -> String $cshow :: MMD2Song -> String showsPrec :: Int -> MMD2Song -> ShowS $cshowsPrec :: Int -> MMD2Song -> ShowS Show) {-# SPECIALISE peek :: PTR -> StorableReader MMD2Song #-} {-# SPECIALISE peek :: PTR -> ByteStringReader MMD2Song #-} peek :: (Reader m) => PTR -> m MMD2Song peek :: ULONG -> m MMD2Song peek ULONG p = do [MMD0Sample] sample' <- (ULONG -> m MMD0Sample) -> [ULONG] -> m [MMD0Sample] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM ULONG -> m MMD0Sample forall (m :: * -> *). Reader m => ULONG -> m MMD0Sample MMD0Sample.peek ([ULONG] -> m [MMD0Sample]) -> [ULONG] -> m [MMD0Sample] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> Int -> [ULONG] pointerRange ULONG p ULONG 8 Int 63 UWORD numblocks' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 504) UWORD songlen' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 506) UWORD numpseqs' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 522) ULONG playseqtable''' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 508) [ULONG] playseqtable'' <- Peek m ULONG -> [ULONG] -> m [ULONG] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekPTR ([ULONG] -> m [ULONG]) -> [ULONG] -> m [ULONG] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> UWORD -> [ULONG] forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGen ULONG playseqtable''' ULONG 4 UWORD numpseqs' [PlaySeq] playseqtable' <- (ULONG -> m PlaySeq) -> [ULONG] -> m [PlaySeq] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM ULONG -> m PlaySeq forall (m :: * -> *). Reader m => ULONG -> m PlaySeq PlaySeq.peek [ULONG] playseqtable'' ULONG sectiontable'' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 512) [UWORD] sectiontable' <- Peek m UWORD -> [ULONG] -> m [UWORD] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD ([ULONG] -> m [UWORD]) -> [ULONG] -> m [UWORD] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> UWORD -> [ULONG] forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGen ULONG sectiontable'' ULONG 2 UWORD songlen' UWORD numtracks' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 520) ULONG trackvols'' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 516) [UBYTE] trackvols' <- (ULONG -> m UBYTE) -> [ULONG] -> m [UBYTE] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE ([ULONG] -> m [UBYTE]) -> [ULONG] -> m [UBYTE] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> UWORD -> [ULONG] forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGen ULONG trackvols'' ULONG 1 UWORD numtracks' ULONG trackpans'' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekPTR (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 524) [BYTE] trackpans' <- if ULONG trackpans'' ULONG -> ULONG -> Bool forall a. Eq a => a -> a -> Bool == ULONG 0 then [BYTE] -> m [BYTE] forall (m :: * -> *) a. Monad m => a -> m a return ([BYTE] -> m [BYTE]) -> [BYTE] -> m [BYTE] forall a b. (a -> b) -> a -> b $ Int -> BYTE -> [BYTE] forall a. Int -> a -> [a] replicate (UWORD -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral UWORD numtracks') BYTE 0 else (ULONG -> m BYTE) -> [ULONG] -> m [BYTE] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM ULONG -> m BYTE forall (m :: * -> *). Reader m => Peek m BYTE peekBYTE ([ULONG] -> m [BYTE]) -> [ULONG] -> m [BYTE] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> UWORD -> [ULONG] forall i. Integral i => ULONG -> ULONG -> i -> [ULONG] pointerRangeGen ULONG trackpans'' ULONG 1 UWORD numtracks' ULONG flags3' <- Peek m ULONG forall (m :: * -> *). Reader m => Peek m ULONG peekULONG (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 528) UWORD voladj' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 532) UWORD channels' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 534) UBYTE mix_echotype' <- ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 536) UBYTE mix_echodepth' <- ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 537) UWORD mix_echolen' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 538) BYTE mix_stereosep' <- ULONG -> m BYTE forall (m :: * -> *). Reader m => Peek m BYTE peekBYTE (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 540) [UBYTE] pad0' <- (ULONG -> m UBYTE) -> [ULONG] -> m [UBYTE] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE ([ULONG] -> m [UBYTE]) -> [ULONG] -> m [UBYTE] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> Int -> [ULONG] pointerRange (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 541) ULONG 1 Int 223 UWORD deftempo' <- Peek m UWORD forall (m :: * -> *). Reader m => Peek m UWORD peekUWORD (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 764) BYTE playtransp' <- ULONG -> m BYTE forall (m :: * -> *). Reader m => Peek m BYTE peekBYTE (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 766) UBYTE flags' <- ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 767) UBYTE flags2' <- ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 768) UBYTE tempo2' <- ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 769) [UBYTE] pad1' <- (ULONG -> m UBYTE) -> [ULONG] -> m [UBYTE] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) mapM ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE ([ULONG] -> m [UBYTE]) -> [ULONG] -> m [UBYTE] forall a b. (a -> b) -> a -> b $ ULONG -> ULONG -> Int -> [ULONG] pointerRange (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 770) ULONG 1 Int 16 UBYTE mastervol' <- ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 786) UBYTE numsamples' <- ULONG -> m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (ULONG pULONG -> ULONG -> ULONG forall a. Num a => a -> a -> a +ULONG 787) MMD2Song -> m MMD2Song forall (m :: * -> *) a. Monad m => a -> m a return (MMD2Song -> m MMD2Song) -> MMD2Song -> m MMD2Song forall a b. (a -> b) -> a -> b $ [MMD0Sample] -> UWORD -> UWORD -> [PlaySeq] -> [UWORD] -> [UBYTE] -> UWORD -> UWORD -> [BYTE] -> ULONG -> UWORD -> UWORD -> UBYTE -> UBYTE -> UWORD -> BYTE -> [UBYTE] -> UWORD -> BYTE -> UBYTE -> UBYTE -> UBYTE -> [UBYTE] -> UBYTE -> UBYTE -> MMD2Song MMD2Song [MMD0Sample] sample' UWORD numblocks' UWORD songlen' [PlaySeq] playseqtable' [UWORD] sectiontable' [UBYTE] trackvols' UWORD numtracks' UWORD numpseqs' [BYTE] trackpans' ULONG flags3' UWORD voladj' UWORD channels' UBYTE mix_echotype' UBYTE mix_echodepth' UWORD mix_echolen' BYTE mix_stereosep' [UBYTE] pad0' UWORD deftempo' BYTE playtransp' UBYTE flags' UBYTE flags2' UBYTE tempo2' [UBYTE] pad1' UBYTE mastervol' UBYTE numsamples'