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 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 :: forall (m :: * -> *). Reader m => PTR -> m MMD0NoteData peek PTR p = do UBYTE byte1 <- forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (PTR p forall a. Num a => a -> a -> a + PTR 0) UBYTE byte2 <- forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (PTR p forall a. Num a => a -> a -> a + PTR 1) UBYTE byte3 <- forall (m :: * -> *). Reader m => Peek m UBYTE peekUBYTE (PTR p forall a. Num a => a -> a -> a + PTR 2) let x :: UBYTE x = (UBYTE byte1 forall a. Bits a => a -> a -> a .&. UBYTE 0x80) forall a. Bits a => a -> Int -> a `shiftR` Int 7 let y :: UBYTE y = (UBYTE byte1 forall a. Bits a => a -> a -> a .&. UBYTE 0x40) forall a. Bits a => a -> Int -> a `shiftR` Int 6 let nnnnnn :: UBYTE nnnnnn = (UBYTE byte1 forall a. Bits a => a -> a -> a .&. UBYTE 0x3F) let iiii :: UBYTE iiii = (UBYTE byte2 forall a. Bits a => a -> a -> a .&. UBYTE 0xF0) forall a. Bits a => a -> Int -> a `shiftR` Int 4 let cccc :: UBYTE cccc = (UBYTE byte2 forall a. Bits a => a -> a -> a .&. UBYTE 0x0F) let dddddddd :: UBYTE dddddddd = (UBYTE byte3 forall a. Bits a => a -> a -> a .&. UBYTE 0xFF) let note' :: UBYTE note' = UBYTE nnnnnn let instrument' :: UBYTE instrument' = (UBYTE y forall a. Bits a => a -> Int -> a `shiftL` Int 6) forall a. Bits a => a -> a -> a .|. (UBYTE x forall a. Bits a => a -> Int -> a `shiftL` Int 5) forall a. Bits a => a -> a -> a .|. UBYTE iiii let command' :: UBYTE command' = UBYTE cccc let databyte' :: UBYTE databyte' = UBYTE dddddddd forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ UBYTE -> UBYTE -> UBYTE -> UBYTE -> MMD0NoteData MMD0NoteData UBYTE note' UBYTE instrument' UBYTE command' UBYTE databyte'