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
{ SynthInstr -> UBYTE
defaultdecay :: UBYTE
, SynthInstr -> [UBYTE]
reserved :: [ UBYTE ]
, SynthInstr -> UWORD
rep :: UWORD
, SynthInstr -> UWORD
replen :: UWORD
, SynthInstr -> UWORD
voltbllen :: UWORD
, SynthInstr -> UWORD
wftbllen :: UWORD
, SynthInstr -> UBYTE
volspeed :: UBYTE
, SynthInstr -> UBYTE
wfspeed :: UBYTE
, SynthInstr -> UWORD
wforms :: UWORD
, SynthInstr -> [UBYTE]
voltbl :: [ UBYTE ]
, SynthInstr -> [UBYTE]
wftbl :: [ UBYTE ]
, SynthInstr -> [Maybe SynthWF]
wf :: [ Maybe SynthWF ]
}
deriving (Int -> SynthInstr -> ShowS
[SynthInstr] -> ShowS
SynthInstr -> String
(Int -> SynthInstr -> ShowS)
-> (SynthInstr -> String)
-> ([SynthInstr] -> ShowS)
-> Show SynthInstr
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SynthInstr] -> ShowS
$cshowList :: [SynthInstr] -> ShowS
show :: SynthInstr -> String
$cshow :: SynthInstr -> String
showsPrec :: Int -> SynthInstr -> ShowS
$cshowsPrec :: Int -> SynthInstr -> ShowS
Show)
{-# SPECIALISE peek :: PTR -> StorableReader SynthInstr #-}
{-# SPECIALISE peek :: PTR -> ByteStringReader SynthInstr #-}
peek :: (Reader m) => PTR -> m SynthInstr
peek :: PTR -> m SynthInstr
peek PTR
p = do
UBYTE
defaultdecay' <- Peek m UBYTE
forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
6)
[UBYTE]
reserved' <- Peek m UBYTE -> [PTR] -> m [UBYTE]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Peek m UBYTE
forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE ([PTR] -> m [UBYTE]) -> [PTR] -> m [UBYTE]
forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> Int -> [PTR]
pointerRange (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
7) PTR
1 Int
3
UWORD
rep' <- Peek m UWORD
forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
10)
UWORD
replen' <- Peek m UWORD
forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
12)
UWORD
voltbllen' <- Peek m UWORD
forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
14)
UWORD
wftbllen' <- Peek m UWORD
forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
16)
UBYTE
volspeed' <- Peek m UBYTE
forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
18)
UBYTE
wfspeed' <- Peek m UBYTE
forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
19)
UWORD
wforms' <- Peek m UWORD
forall (m :: * -> *). Reader m => Peek m UWORD
peekUWORD (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
20)
[UBYTE]
voltbl' <- Peek m UBYTE -> [PTR] -> m [UBYTE]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Peek m UBYTE
forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE ([PTR] -> m [UBYTE]) -> [PTR] -> m [UBYTE]
forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> Int -> [PTR]
pointerRange (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
22) PTR
1 Int
128
[UBYTE]
wftbl' <- Peek m UBYTE -> [PTR] -> m [UBYTE]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Peek m UBYTE
forall (m :: * -> *). Reader m => Peek m UBYTE
peekUBYTE ([PTR] -> m [UBYTE]) -> [PTR] -> m [UBYTE]
forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> Int -> [PTR]
pointerRange (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
150) PTR
150 Int
128
[PTR]
wf'' <- (PTR -> m PTR) -> [PTR] -> m [PTR]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM PTR -> m PTR
forall (m :: * -> *). Reader m => Peek m PTR
peekPTR ([PTR] -> m [PTR]) -> [PTR] -> m [PTR]
forall a b. (a -> b) -> a -> b
$ PTR -> PTR -> Int -> [PTR]
pointerRange (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+PTR
278) PTR
4 Int
64
[Maybe SynthWF]
wf' <- (PTR -> m (Maybe SynthWF)) -> [PTR] -> m [Maybe SynthWF]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (PTR -> m SynthWF
forall (m :: * -> *). Reader m => PTR -> m SynthWF
SynthWF.peek (PTR -> m SynthWF) -> (PTR -> PTR) -> PTR -> m SynthWF
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PTR
pPTR -> PTR -> PTR
forall a. Num a => a -> a -> a
+) (PTR -> m SynthWF) -> PTR -> m (Maybe SynthWF)
forall (m :: * -> *) a.
Monad m =>
(PTR -> m a) -> PTR -> m (Maybe a)
$?) [PTR]
wf''
SynthInstr -> m SynthInstr
forall (m :: * -> *) a. Monad m => a -> m a
return (SynthInstr -> m SynthInstr) -> SynthInstr -> m SynthInstr
forall a b. (a -> b) -> a -> b
$ UBYTE
-> [UBYTE]
-> UWORD
-> UWORD
-> UWORD
-> UWORD
-> UBYTE
-> UBYTE
-> UWORD
-> [UBYTE]
-> [UBYTE]
-> [Maybe SynthWF]
-> SynthInstr
SynthInstr
UBYTE
defaultdecay' [UBYTE]
reserved' UWORD
rep' UWORD
replen' UWORD
voltbllen' UWORD
wftbllen'
UBYTE
volspeed' UBYTE
wfspeed' UWORD
wforms' [UBYTE]
voltbl' [UBYTE]
wftbl' [Maybe SynthWF]
wf'