module Sound.MED.Raw.MMD0NoteData where import Sound.MED.Basic.Amiga import Data.Bits (shiftR, shiftL, (.&.), (.|.)) data MMD0NoteData = MMD0NoteData { MMD0NoteData -> UBYTE note :: UBYTE , MMD0NoteData -> UBYTE instrument :: UBYTE , MMD0NoteData -> UBYTE command :: UBYTE , MMD0NoteData -> UBYTE databyte :: UBYTE } deriving (Int -> MMD0NoteData -> ShowS [MMD0NoteData] -> ShowS MMD0NoteData -> String (Int -> MMD0NoteData -> ShowS) -> (MMD0NoteData -> String) -> ([MMD0NoteData] -> ShowS) -> Show MMD0NoteData forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [MMD0NoteData] -> ShowS $cshowList :: [MMD0NoteData] -> ShowS show :: MMD0NoteData -> String $cshow :: MMD0NoteData -> String showsPrec :: Int -> MMD0NoteData -> ShowS $cshowsPrec :: Int -> MMD0NoteData -> ShowS Show) {-# SPECIALISE peek :: PTR -> StorableReader MMD0NoteData #-} {-# SPECIALISE peek :: PTR -> ByteStringReader MMD0NoteData #-} peek :: (Reader m) => PTR -> m MMD0NoteData peek :: PTR -> m MMD0NoteData peek PTR p = do UBYTE byte1 <- Peek m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (PTR p PTR -> PTR -> PTR forall a. Num a => a -> a -> a + PTR 0) UBYTE byte2 <- Peek m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (PTR p PTR -> PTR -> PTR forall a. Num a => a -> a -> a + PTR 1) UBYTE byte3 <- Peek m UBYTE forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (PTR p PTR -> PTR -> PTR forall a. Num a => a -> a -> a + PTR 2) let x :: UBYTE x = (UBYTE byte1 UBYTE -> UBYTE -> UBYTE forall a. Bits a => a -> a -> a .&. UBYTE 0x80) UBYTE -> Int -> UBYTE forall a. Bits a => a -> Int -> a `shiftR` Int 7 let y :: UBYTE y = (UBYTE byte1 UBYTE -> UBYTE -> UBYTE forall a. Bits a => a -> a -> a .&. UBYTE 0x40) UBYTE -> Int -> UBYTE forall a. Bits a => a -> Int -> a `shiftR` Int 6 let nnnnnn :: UBYTE nnnnnn = (UBYTE byte1 UBYTE -> UBYTE -> UBYTE forall a. Bits a => a -> a -> a .&. UBYTE 0x3F) let iiii :: UBYTE iiii = (UBYTE byte2 UBYTE -> UBYTE -> UBYTE forall a. Bits a => a -> a -> a .&. UBYTE 0xF0) UBYTE -> Int -> UBYTE forall a. Bits a => a -> Int -> a `shiftR` Int 4 let cccc :: UBYTE cccc = (UBYTE byte2 UBYTE -> UBYTE -> UBYTE forall a. Bits a => a -> a -> a .&. UBYTE 0x0F) let dddddddd :: UBYTE dddddddd = (UBYTE byte3 UBYTE -> UBYTE -> UBYTE forall a. Bits a => a -> a -> a .&. UBYTE 0xFF) let note' :: UBYTE note' = UBYTE nnnnnn let instrument' :: UBYTE instrument' = (UBYTE y UBYTE -> Int -> UBYTE forall a. Bits a => a -> Int -> a `shiftL` Int 6) UBYTE -> UBYTE -> UBYTE forall a. Bits a => a -> a -> a .|. (UBYTE x UBYTE -> Int -> UBYTE forall a. Bits a => a -> Int -> a `shiftL` Int 5) UBYTE -> UBYTE -> UBYTE forall a. Bits a => a -> a -> a .|. UBYTE iiii let command' :: UBYTE command' = UBYTE cccc let databyte' :: UBYTE databyte' = UBYTE dddddddd MMD0NoteData -> m MMD0NoteData forall (m :: * -> *) a. Monad m => a -> m a return (MMD0NoteData -> m MMD0NoteData) -> MMD0NoteData -> m MMD0NoteData forall a b. (a -> b) -> a -> b $ UBYTE -> UBYTE -> UBYTE -> UBYTE -> MMD0NoteData MMD0NoteData UBYTE note' UBYTE instrument' UBYTE command' UBYTE databyte'