module Sound.MED.Generic.Instrument where import qualified Sound.MED.Raw.MMD0Sample as MMD0Sample import qualified Sound.MED.Raw.InstrHdr as InstrHdr import qualified Sound.MED.Raw.MMDInstrInfo as MMDInstrInfo import qualified Sound.MED.Raw.InstrExt as InstrExt import Sound.MED.Basic.Human(Human(human)) import Sound.MED.Basic.Utility(stringFromBytes) import qualified Data.List as List data MEDInstrument = MEDInstrument { MEDInstrument -> Maybe Int rep :: Maybe Int , MEDInstrument -> Maybe Int replen :: Maybe Int , MEDInstrument -> Maybe Int midich :: Maybe Int , MEDInstrument -> Maybe Int midipreset :: Maybe Int , MEDInstrument -> Maybe Int svol :: Maybe Int , MEDInstrument -> Maybe Int strans :: Maybe Int , MEDInstrument -> Maybe Int hold :: Maybe Int , MEDInstrument -> Maybe Int decay :: Maybe Int , MEDInstrument -> Maybe Int suppress_midi_off :: Maybe Int , MEDInstrument -> Maybe Int finetune :: Maybe Int , MEDInstrument -> Maybe Int default_pitch :: Maybe Int , MEDInstrument -> Maybe Int instr_flags :: Maybe Int , MEDInstrument -> Maybe Int long_midi_preset :: Maybe Int , MEDInstrument -> Maybe Int output_device :: Maybe Int , MEDInstrument -> Maybe Int long_repeat :: Maybe Int , MEDInstrument -> Maybe Int long_replen :: Maybe Int , MEDInstrument -> Maybe String name :: Maybe String } deriving (Int -> MEDInstrument -> ShowS [MEDInstrument] -> ShowS MEDInstrument -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [MEDInstrument] -> ShowS $cshowList :: [MEDInstrument] -> ShowS show :: MEDInstrument -> String $cshow :: MEDInstrument -> String showsPrec :: Int -> MEDInstrument -> ShowS $cshowsPrec :: Int -> MEDInstrument -> ShowS Show) medinstruments :: [Maybe InstrHdr.InstrHdr] -> [MMD0Sample.MMD0Sample] -> [MMDInstrInfo.MMDInstrInfo] -> [InstrExt.InstrExt] -> [MEDInstrument] medinstruments :: [Maybe InstrHdr] -> [MMD0Sample] -> [MMDInstrInfo] -> [InstrExt] -> [MEDInstrument] medinstruments [Maybe InstrHdr] hdrs [MMD0Sample] samples [MMDInstrInfo] infos [InstrExt] exts = let pad :: [a] -> [Maybe a] pad [a] xs = forall a b. (a -> b) -> [a] -> [b] map forall a. a -> Maybe a Just [a] xs forall a. [a] -> [a] -> [a] ++ forall a. a -> [a] repeat forall a. Maybe a Nothing in forall a. Int -> [a] -> [a] take (forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a maximum [forall (t :: * -> *) a. Foldable t => t a -> Int length [Maybe InstrHdr] hdrs, forall (t :: * -> *) a. Foldable t => t a -> Int length [MMD0Sample] samples, forall (t :: * -> *) a. Foldable t => t a -> Int length [MMDInstrInfo] infos, forall (t :: * -> *) a. Foldable t => t a -> Int length [InstrExt] exts]) forall a b. (a -> b) -> a -> b $ forall a b c d e. (a -> b -> c -> d -> e) -> [a] -> [b] -> [c] -> [d] -> [e] List.zipWith4 Maybe InstrHdr -> Maybe MMD0Sample -> Maybe MMDInstrInfo -> Maybe InstrExt -> MEDInstrument medinstrument ([Maybe InstrHdr] hdrs forall a. [a] -> [a] -> [a] ++ forall a. a -> [a] repeat forall a. Maybe a Nothing) (forall {a}. [a] -> [Maybe a] pad [MMD0Sample] samples) (forall {a}. [a] -> [Maybe a] pad [MMDInstrInfo] infos) (forall {a}. [a] -> [Maybe a] pad [InstrExt] exts) medinstrument :: Maybe InstrHdr.InstrHdr -> Maybe MMD0Sample.MMD0Sample -> Maybe MMDInstrInfo.MMDInstrInfo -> Maybe InstrExt.InstrExt -> MEDInstrument medinstrument :: Maybe InstrHdr -> Maybe MMD0Sample -> Maybe MMDInstrInfo -> Maybe InstrExt -> MEDInstrument medinstrument Maybe InstrHdr _h Maybe MMD0Sample s Maybe MMDInstrInfo i Maybe InstrExt e = let rep' :: Maybe Int rep' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . MMD0Sample -> UWORD MMD0Sample.rep) Maybe MMD0Sample s replen' :: Maybe Int replen' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . MMD0Sample -> UWORD MMD0Sample.replen) Maybe MMD0Sample s midich' :: Maybe Int midich' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . MMD0Sample -> UBYTE MMD0Sample.midich) Maybe MMD0Sample s midipreset' :: Maybe Int midipreset' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . MMD0Sample -> UBYTE MMD0Sample.midipreset) Maybe MMD0Sample s svol' :: Maybe Int svol' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . MMD0Sample -> UBYTE MMD0Sample.svol) Maybe MMD0Sample s strans' :: Maybe Int strans' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . MMD0Sample -> BYTE MMD0Sample.strans) Maybe MMD0Sample s hold' :: Maybe Int hold' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe UBYTE InstrExt.hold forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e decay' :: Maybe Int decay' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe UBYTE InstrExt.decay forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e suppress_midi_off' :: Maybe Int suppress_midi_off' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe UBYTE InstrExt.suppress_midi_off forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e finetune' :: Maybe Int finetune' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe BYTE InstrExt.finetune forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e default_pitch' :: Maybe Int default_pitch' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe UBYTE InstrExt.default_pitch forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e instr_flags' :: Maybe Int instr_flags' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe UBYTE InstrExt.instr_flags forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e long_midi_preset' :: Maybe Int long_midi_preset' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe UWORD InstrExt.long_midi_preset forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e output_device' :: Maybe Int output_device' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe UBYTE InstrExt.output_device forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e long_repeat' :: Maybe Int long_repeat' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe ULONG InstrExt.long_repeat forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e long_replen' :: Maybe Int long_replen' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . InstrExt -> Maybe ULONG InstrExt.long_replen forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe InstrExt e name' :: Maybe String name' = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap [UBYTE] -> String stringFromBytes forall b c a. (b -> c) -> (a -> b) -> a -> c . MMDInstrInfo -> Maybe [UBYTE] MMDInstrInfo.name forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Maybe MMDInstrInfo i in Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe String -> MEDInstrument MEDInstrument Maybe Int rep' Maybe Int replen' Maybe Int midich' Maybe Int midipreset' Maybe Int svol' Maybe Int strans' Maybe Int hold' Maybe Int decay' Maybe Int suppress_midi_off' Maybe Int finetune' Maybe Int default_pitch' Maybe Int instr_flags' Maybe Int long_midi_preset' Maybe Int output_device' Maybe Int long_repeat' Maybe Int long_replen' Maybe String name' instance Human MEDInstrument where human :: MEDInstrument -> String human MEDInstrument i = forall a. Show a => a -> String show MEDInstrument i forall a. [a] -> [a] -> [a] ++ String "\n"