module Sound.MED.Raw.SynthInstr where
import qualified Sound.MED.Raw.SynthWF as SynthWF
import Sound.MED.Raw.SynthWF(SynthWF)
import Sound.MED.Basic.Amiga
import Sound.MED.Basic.Utility
data SynthInstr = SynthInstr
{ defaultdecay :: UBYTE
, reserved :: [ UBYTE ]
, rep :: UWORD
, replen :: UWORD
, voltbllen :: UWORD
, wftbllen :: UWORD
, volspeed :: UBYTE
, wfspeed :: UBYTE
, wforms :: UWORD
, voltbl :: [ UBYTE ]
, wftbl :: [ UBYTE ]
, wf :: [ Maybe SynthWF ]
}
deriving (Show)
{-# SPECIALISE peek :: PTR -> StorableReader SynthInstr #-}
{-# SPECIALISE peek :: PTR -> ByteStringReader SynthInstr #-}
peek :: (Reader m) => PTR -> m SynthInstr
peek p = do
defaultdecay' <- peekUBYTE (p+6)
reserved' <- mapM peekUBYTE $ pointerRange (p+7) 1 3
rep' <- peekUWORD (p+10)
replen' <- peekUWORD (p+12)
voltbllen' <- peekUWORD (p+14)
wftbllen' <- peekUWORD (p+16)
volspeed' <- peekUBYTE (p+18)
wfspeed' <- peekUBYTE (p+19)
wforms' <- peekUWORD (p+20)
voltbl' <- mapM peekUBYTE $ pointerRange (p+22) 1 128
wftbl' <- mapM peekUBYTE $ pointerRange (p+150) 150 128
wf'' <- mapM peekPTR $ pointerRange (p+278) 4 64
wf' <- mapM (SynthWF.peek . (p+) $?) wf''
return $ SynthInstr
defaultdecay' reserved' rep' replen' voltbllen' wftbllen'
volspeed' wfspeed' wforms' voltbl' wftbl' wf'