-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Parse song module files from Amiga MED and OctaMED -- -- MED (Music EDitor) and its successor OctaMED were popular music -- trackers on the Amiga: https://en.wikipedia.org/wiki/OctaMED. -- This is a library for parsing the binary module data. -- -- With the Cabal flag -fbuildExamples you can build two example -- programs: -- -- @package med-module @version 0.0 module Sound.MED.Basic.Human class Human a human :: Human a => a -> String bold :: String -> String bold_on :: String bold_off :: String module Sound.MED.Basic.Amiga type MEM = Ptr () type PTR = Word32 type LONG = Int32 type ULONG = Word32 type WORD = Int16 type UWORD = Word16 type BYTE = Int8 type UBYTE = Word8 type Peek a = MEM -> PTR -> IO a peekOffset :: (Storable a) => Peek a peekBig :: (Storable a, HasBigEndian a) => Peek a peekPTR :: Peek PTR peekLONG :: Peek LONG peekULONG :: Peek ULONG peekWORD :: Peek WORD peekUWORD :: Peek UWORD peekBYTE :: Peek BYTE peekUBYTE :: Peek UBYTE ($?) :: (PTR -> IO a) -> PTR -> IO (Maybe a) infixr 0 $? skipIf :: Bool -> IO a -> IO (Maybe a) loadMEM :: String -> IO MEM freeMEM :: MEM -> IO () pointerRange :: PTR -> ULONG -> Int -> [PTR] pointerRangeGen :: (Integral i) => PTR -> ULONG -> i -> [PTR] -- | Return empty list if start pointer is zero. pointerRangeGenCheck :: (Integral i) => PTR -> ULONG -> i -> [PTR] pointerRangeGen2 :: (Integral i, Integral j) => PTR -> ULONG -> i -> j -> [PTR] chunk :: (Integral i) => i -> [a] -> [[a]] -- | Strings tend to be fixed width fields with trailing zeros. stringFromBytes :: [UBYTE] -> String module Sound.MED.Raw.CmdPageData data CmdPageData CmdPageData :: UBYTE -> UBYTE -> CmdPageData [command] :: CmdPageData -> UBYTE [databyte] :: CmdPageData -> UBYTE peek :: MEM -> PTR -> IO CmdPageData instance GHC.Show.Show Sound.MED.Raw.CmdPageData.CmdPageData module Sound.MED.Raw.BlockCmdPageTable data BlockCmdPageTable BlockCmdPageTable :: UWORD -> UWORD -> [Maybe [[CmdPageData]]] -> BlockCmdPageTable [num_pages] :: BlockCmdPageTable -> UWORD [reserved] :: BlockCmdPageTable -> UWORD [pages] :: BlockCmdPageTable -> [Maybe [[CmdPageData]]] peek :: UWORD -> UWORD -> MEM -> PTR -> IO BlockCmdPageTable peekPage :: UWORD -> UWORD -> MEM -> PTR -> IO (Maybe [[CmdPageData]]) instance GHC.Show.Show Sound.MED.Raw.BlockCmdPageTable.BlockCmdPageTable module Sound.MED.Raw.BlockInfo data BlockInfo BlockInfo :: Maybe [ULONG] -> Maybe [UBYTE] -> ULONG -> Maybe BlockCmdPageTable -> [ULONG] -> BlockInfo [hlmask] :: BlockInfo -> Maybe [ULONG] [blockname] :: BlockInfo -> Maybe [UBYTE] [blocknamelen] :: BlockInfo -> ULONG [pagetable] :: BlockInfo -> Maybe BlockCmdPageTable [reserved] :: BlockInfo -> [ULONG] peek :: UWORD -> UWORD -> MEM -> PTR -> IO BlockInfo instance GHC.Show.Show Sound.MED.Raw.BlockInfo.BlockInfo module Sound.MED.Raw.InstrExt data InstrExt InstrExt :: Maybe UBYTE -> Maybe UBYTE -> Maybe UBYTE -> Maybe BYTE -> Maybe UBYTE -> Maybe UBYTE -> Maybe UWORD -> Maybe UBYTE -> Maybe UBYTE -> Maybe ULONG -> Maybe ULONG -> InstrExt [hold] :: InstrExt -> Maybe UBYTE [decay] :: InstrExt -> Maybe UBYTE [suppress_midi_off] :: InstrExt -> Maybe UBYTE [finetune] :: InstrExt -> Maybe BYTE [default_pitch] :: InstrExt -> Maybe UBYTE [instr_flags] :: InstrExt -> Maybe UBYTE [long_midi_preset] :: InstrExt -> Maybe UWORD [output_device] :: InstrExt -> Maybe UBYTE [reserved] :: InstrExt -> Maybe UBYTE [long_repeat] :: InstrExt -> Maybe ULONG [long_replen] :: InstrExt -> Maybe ULONG peek :: UWORD -> MEM -> PTR -> IO InstrExt instance GHC.Show.Show Sound.MED.Raw.InstrExt.InstrExt module Sound.MED.Raw.MMD0NoteData data MMD0NoteData MMD0NoteData :: UBYTE -> UBYTE -> UBYTE -> UBYTE -> MMD0NoteData [note] :: MMD0NoteData -> UBYTE [instrument] :: MMD0NoteData -> UBYTE [command] :: MMD0NoteData -> UBYTE [databyte] :: MMD0NoteData -> UBYTE peek :: MEM -> PTR -> IO MMD0NoteData instance GHC.Show.Show Sound.MED.Raw.MMD0NoteData.MMD0NoteData module Sound.MED.Raw.MMD0Block data MMD0Block MMD0Block :: UBYTE -> UBYTE -> [[MMD0NoteData]] -> MMD0Block [numtracks] :: MMD0Block -> UBYTE [lines] :: MMD0Block -> UBYTE [notedata] :: MMD0Block -> [[MMD0NoteData]] peek :: MEM -> PTR -> IO MMD0Block instance GHC.Show.Show Sound.MED.Raw.MMD0Block.MMD0Block module Sound.MED.Raw.MMD0Sample data MMD0Sample MMD0Sample :: UWORD -> UWORD -> UBYTE -> UBYTE -> UBYTE -> BYTE -> MMD0Sample [rep] :: MMD0Sample -> UWORD [replen] :: MMD0Sample -> UWORD [midich] :: MMD0Sample -> UBYTE [midipreset] :: MMD0Sample -> UBYTE [svol] :: MMD0Sample -> UBYTE [strans] :: MMD0Sample -> BYTE peek :: MEM -> PTR -> IO MMD0Sample instance GHC.Show.Show Sound.MED.Raw.MMD0Sample.MMD0Sample module Sound.MED.Raw.MMD0Song data MMD0Song MMD0Song :: [MMD0Sample] -> UWORD -> UWORD -> [UBYTE] -> UWORD -> BYTE -> UBYTE -> UBYTE -> UBYTE -> [UBYTE] -> UBYTE -> UBYTE -> MMD0Song [sample] :: MMD0Song -> [MMD0Sample] [numblocks] :: MMD0Song -> UWORD [songlen] :: MMD0Song -> UWORD [playseq] :: MMD0Song -> [UBYTE] [deftempo] :: MMD0Song -> UWORD [playtransp] :: MMD0Song -> BYTE [flags] :: MMD0Song -> UBYTE [flags2] :: MMD0Song -> UBYTE [tempo2] :: MMD0Song -> UBYTE [trkvol] :: MMD0Song -> [UBYTE] [mastervol] :: MMD0Song -> UBYTE [numsamples] :: MMD0Song -> UBYTE peek :: MEM -> PTR -> IO MMD0Song instance GHC.Show.Show Sound.MED.Raw.MMD0Song.MMD0Song module Sound.MED.Raw.MMD1NoteData data MMD1NoteData MMD1NoteData :: UBYTE -> UBYTE -> UBYTE -> UBYTE -> MMD1NoteData [note] :: MMD1NoteData -> UBYTE [instrument] :: MMD1NoteData -> UBYTE [command] :: MMD1NoteData -> UBYTE [databyte] :: MMD1NoteData -> UBYTE peek :: MEM -> PTR -> IO MMD1NoteData instance GHC.Show.Show Sound.MED.Raw.MMD1NoteData.MMD1NoteData module Sound.MED.Raw.MMD1Block data MMD1Block MMD1Block :: UWORD -> UWORD -> Maybe BlockInfo -> [[MMD1NoteData]] -> MMD1Block [numtracks] :: MMD1Block -> UWORD [lines] :: MMD1Block -> UWORD [info] :: MMD1Block -> Maybe BlockInfo [notedata] :: MMD1Block -> [[MMD1NoteData]] peek :: MEM -> PTR -> IO MMD1Block instance GHC.Show.Show Sound.MED.Raw.MMD1Block.MMD1Block module Sound.MED.Generic.Block type Note = Int type Inst = Int type Cmd = Int type Val = Int type Highlight = Bool type Line = (Maybe Highlight, [(Note, Inst, [(Cmd, Val)])]) data MEDBlock MEDBlock :: Maybe String -> Int -> Int -> Int -> [Line] -> MEDBlock [name] :: MEDBlock -> Maybe String [tracks] :: MEDBlock -> Int [lines] :: MEDBlock -> Int [pages] :: MEDBlock -> Int [seqdata] :: MEDBlock -> [Line] medblock0 :: MMD0Block -> MEDBlock medblock1 :: MMD1Block -> MEDBlock highlightLine :: Int -> Line -> String humanLine :: Int -> [(Note, Inst, [(Cmd, Val)])] -> String notes :: [String] instance Sound.MED.Basic.Human.Human Sound.MED.Generic.Block.MEDBlock module Sound.MED.Raw.MMDARexxTrigCmd data MMDARexxTrigCmd MMDARexxTrigCmd :: Maybe MMDARexxTrigCmd -> UBYTE -> UBYTE -> WORD -> [UBYTE] -> [UBYTE] -> UWORD -> UWORD -> MMDARexxTrigCmd [next] :: MMDARexxTrigCmd -> Maybe MMDARexxTrigCmd [cmdnum] :: MMDARexxTrigCmd -> UBYTE [pad] :: MMDARexxTrigCmd -> UBYTE [cmdtype] :: MMDARexxTrigCmd -> WORD [cmd] :: MMDARexxTrigCmd -> [UBYTE] [port] :: MMDARexxTrigCmd -> [UBYTE] [cmd_len] :: MMDARexxTrigCmd -> UWORD [port_len] :: MMDARexxTrigCmd -> UWORD peek :: MEM -> PTR -> IO MMDARexxTrigCmd instance GHC.Show.Show Sound.MED.Raw.MMDARexxTrigCmd.MMDARexxTrigCmd module Sound.MED.Raw.MMDARexx data MMDARexx MMDARexx :: UWORD -> UWORD -> Maybe MMDARexxTrigCmd -> MMDARexx [reserved] :: MMDARexx -> UWORD [trigcmdlen] :: MMDARexx -> UWORD [trigcmd] :: MMDARexx -> Maybe MMDARexxTrigCmd peek :: MEM -> PTR -> IO MMDARexx instance GHC.Show.Show Sound.MED.Raw.MMDARexx.MMDARexx module Sound.MED.Raw.MMDDump data MMDDump MMDDump :: ULONG -> [UBYTE] -> UWORD -> Maybe [UBYTE] -> MMDDump [len] :: MMDDump -> ULONG [dat] :: MMDDump -> [UBYTE] [ext_len] :: MMDDump -> UWORD [name] :: MMDDump -> Maybe [UBYTE] peek :: MEM -> PTR -> IO MMDDump instance GHC.Show.Show Sound.MED.Raw.MMDDump.MMDDump module Sound.MED.Raw.MMDDumpData data MMDDumpData MMDDumpData :: UWORD -> [UWORD] -> [MMDDump] -> MMDDumpData [numdumps] :: MMDDumpData -> UWORD [reserved] :: MMDDumpData -> [UWORD] [dumps] :: MMDDumpData -> [MMDDump] peek :: MEM -> PTR -> IO MMDDumpData instance GHC.Show.Show Sound.MED.Raw.MMDDumpData.MMDDumpData module Sound.MED.Raw.MMDInfo data MMDInfo MMDInfo :: Maybe MMDInfo -> UWORD -> UWORD -> ULONG -> [UBYTE] -> MMDInfo [next] :: MMDInfo -> Maybe MMDInfo [reserved] :: MMDInfo -> UWORD [typ] :: MMDInfo -> UWORD [len] :: MMDInfo -> ULONG [dat] :: MMDInfo -> [UBYTE] peek :: MEM -> PTR -> IO MMDInfo instance GHC.Show.Show Sound.MED.Raw.MMDInfo.MMDInfo module Sound.MED.Raw.MMDInstrInfo data MMDInstrInfo MMDInstrInfo :: Maybe [UBYTE] -> MMDInstrInfo [name] :: MMDInstrInfo -> Maybe [UBYTE] peek :: UWORD -> MEM -> PTR -> IO MMDInstrInfo instance GHC.Show.Show Sound.MED.Raw.MMDInstrInfo.MMDInstrInfo module Sound.MED.Raw.MMDMIDICmd3x data MMDMIDICmd3x MMDMIDICmd3x :: UBYTE -> UBYTE -> UWORD -> [UBYTE] -> [UWORD] -> MMDMIDICmd3x [struct_ver] :: MMDMIDICmd3x -> UBYTE [pad] :: MMDMIDICmd3x -> UBYTE [num_of_settings] :: MMDMIDICmd3x -> UWORD [ctrlr_types] :: MMDMIDICmd3x -> [UBYTE] [ctrlr_numbers] :: MMDMIDICmd3x -> [UWORD] peek :: MEM -> PTR -> IO MMDMIDICmd3x instance GHC.Show.Show Sound.MED.Raw.MMDMIDICmd3x.MMDMIDICmd3x module Sound.MED.Raw.NotationInfo data NotationInfo NotationInfo :: UBYTE -> UBYTE -> [WORD] -> [UBYTE] -> [UBYTE] -> [BYTE] -> UBYTE -> NotationInfo [n_of_sharps] :: NotationInfo -> UBYTE [flags] :: NotationInfo -> UBYTE [trksel] :: NotationInfo -> [WORD] [trkshow] :: NotationInfo -> [UBYTE] [trkghost] :: NotationInfo -> [UBYTE] [notetr] :: NotationInfo -> [BYTE] [pad] :: NotationInfo -> UBYTE peek :: MEM -> PTR -> IO NotationInfo instance GHC.Show.Show Sound.MED.Raw.NotationInfo.NotationInfo module Sound.MED.Raw.MMD0exp data MMD0exp MMD0exp :: PTR -> [InstrExt] -> UWORD -> UWORD -> [UBYTE] -> ULONG -> [MMDInstrInfo] -> UWORD -> UWORD -> ULONG -> [UWORD] -> [UBYTE] -> Maybe NotationInfo -> [UBYTE] -> ULONG -> Maybe MMDDumpData -> Maybe MMDInfo -> Maybe MMDARexx -> Maybe MMDMIDICmd3x -> [ULONG] -> ULONG -> MMD0exp [nextmod] :: MMD0exp -> PTR [exp_smp] :: MMD0exp -> [InstrExt] [s_ext_entries] :: MMD0exp -> UWORD [s_ext_entrsz] :: MMD0exp -> UWORD [annotxt] :: MMD0exp -> [UBYTE] [annolen] :: MMD0exp -> ULONG [iinfo] :: MMD0exp -> [MMDInstrInfo] [i_ext_entries] :: MMD0exp -> UWORD [i_ext_entrsz] :: MMD0exp -> UWORD [jumpmask] :: MMD0exp -> ULONG [rgbtable] :: MMD0exp -> [UWORD] [channelsplit] :: MMD0exp -> [UBYTE] [n_info] :: MMD0exp -> Maybe NotationInfo [songname] :: MMD0exp -> [UBYTE] [songnamelen] :: MMD0exp -> ULONG [dumps] :: MMD0exp -> Maybe MMDDumpData [mmdinfo] :: MMD0exp -> Maybe MMDInfo [mmdrexx] :: MMD0exp -> Maybe MMDARexx [mmdcmd3x] :: MMD0exp -> Maybe MMDMIDICmd3x [reserved2] :: MMD0exp -> [ULONG] [tag_end] :: MMD0exp -> ULONG peek :: MEM -> PTR -> IO MMD0exp instance GHC.Show.Show Sound.MED.Raw.MMD0exp.MMD0exp module Sound.MED.Raw.PlaySeq data PlaySeq PlaySeq :: [UBYTE] -> ULONG -> ULONG -> UWORD -> [UWORD] -> PlaySeq [name] :: PlaySeq -> [UBYTE] [reserved0] :: PlaySeq -> ULONG [reserved1] :: PlaySeq -> ULONG [len] :: PlaySeq -> UWORD [seq] :: PlaySeq -> [UWORD] peek :: MEM -> PTR -> IO PlaySeq instance GHC.Show.Show Sound.MED.Raw.PlaySeq.PlaySeq module Sound.MED.Generic.PlaySeq data MEDPlaySeq MEDPlaySeq :: String -> [Int] -> MEDPlaySeq [name] :: MEDPlaySeq -> String -- | block indices [indices] :: MEDPlaySeq -> [Int] playSeq0 :: MMD0Song -> MEDPlaySeq playSeq2 :: PlaySeq -> MEDPlaySeq instance Sound.MED.Basic.Human.Human Sound.MED.Generic.PlaySeq.MEDPlaySeq module Sound.MED.Raw.MMD2Song data MMD2Song MMD2Song :: [MMD0Sample] -> UWORD -> UWORD -> [PlaySeq] -> [UWORD] -> [UBYTE] -> UWORD -> UWORD -> [BYTE] -> ULONG -> UWORD -> UWORD -> UBYTE -> UBYTE -> UWORD -> BYTE -> [UBYTE] -> UWORD -> BYTE -> UBYTE -> UBYTE -> UBYTE -> [UBYTE] -> UBYTE -> UBYTE -> MMD2Song [sample] :: MMD2Song -> [MMD0Sample] [numblocks] :: MMD2Song -> UWORD [songlen] :: MMD2Song -> UWORD [playseqtable] :: MMD2Song -> [PlaySeq] [sectiontable] :: MMD2Song -> [UWORD] [trackvols] :: MMD2Song -> [UBYTE] [numtracks] :: MMD2Song -> UWORD [numpseqs] :: MMD2Song -> UWORD [trackpans] :: MMD2Song -> [BYTE] [flags3] :: MMD2Song -> ULONG [voladj] :: MMD2Song -> UWORD [channels] :: MMD2Song -> UWORD [mix_echotype] :: MMD2Song -> UBYTE [mix_echodepth] :: MMD2Song -> UBYTE [mix_echolen] :: MMD2Song -> UWORD [mix_stereosep] :: MMD2Song -> BYTE [pad0] :: MMD2Song -> [UBYTE] [deftempo] :: MMD2Song -> UWORD [playtransp] :: MMD2Song -> BYTE [flags] :: MMD2Song -> UBYTE [flags2] :: MMD2Song -> UBYTE [tempo2] :: MMD2Song -> UBYTE [pad1] :: MMD2Song -> [UBYTE] [mastervol] :: MMD2Song -> UBYTE [numsamples] :: MMD2Song -> UBYTE peek :: MEM -> PTR -> IO MMD2Song instance GHC.Show.Show Sound.MED.Raw.MMD2Song.MMD2Song module Sound.MED.Generic.Tempo data MEDTempo MEDTempo :: Mode -> Int -> MEDTempo [mode] :: MEDTempo -> Mode [primary, secondary] :: MEDTempo -> Int data Mode Speed :: Mode Octa :: Mode BPM :: Int -> Mode [linesPerBeat] :: Mode -> Int song0Tempo :: MMD0Song -> MEDTempo song2Tempo :: MMD2Song -> MEDTempo -- | Interpret tempo related commands. update :: MEDTempo -> (Cmd, Val) -> MEDTempo toTime :: Fractional a => MEDTempo -> a module Sound.MED.Raw.SampleInstr data SampleInstr SampleInstr :: WORD -> Either [[BYTE]] [[WORD]] -> SampleInstr [octaves] :: SampleInstr -> WORD [chans] :: SampleInstr -> Either [[BYTE]] [[WORD]] peek :: ULONG -> WORD -> Bool -> Bool -> MEM -> PTR -> IO SampleInstr instance GHC.Show.Show Sound.MED.Raw.SampleInstr.SampleInstr module Sound.MED.Raw.SynthWF data SynthWF SynthWF :: UWORD -> [BYTE] -> SynthWF [len2] :: SynthWF -> UWORD [wfdata] :: SynthWF -> [BYTE] peek :: MEM -> PTR -> IO SynthWF instance GHC.Show.Show Sound.MED.Raw.SynthWF.SynthWF module Sound.MED.Raw.HybridInstr data HybridInstr HybridInstr :: UBYTE -> [UBYTE] -> UWORD -> UWORD -> UWORD -> UWORD -> UBYTE -> UBYTE -> UWORD -> [UBYTE] -> [UBYTE] -> PTR -> [Maybe SynthWF] -> HybridInstr [defaultdecay] :: HybridInstr -> UBYTE [reserved] :: HybridInstr -> [UBYTE] [rep] :: HybridInstr -> UWORD [replen] :: HybridInstr -> UWORD [voltbllen] :: HybridInstr -> UWORD [wftbllen] :: HybridInstr -> UWORD [volspeed] :: HybridInstr -> UBYTE [wfspeed] :: HybridInstr -> UBYTE [wforms] :: HybridInstr -> UWORD [voltbl] :: HybridInstr -> [UBYTE] [wftbl] :: HybridInstr -> [UBYTE] [wf0] :: HybridInstr -> PTR [wf] :: HybridInstr -> [Maybe SynthWF] peek :: MEM -> PTR -> IO HybridInstr instance GHC.Show.Show Sound.MED.Raw.HybridInstr.HybridInstr module Sound.MED.Raw.SynthInstr data SynthInstr SynthInstr :: UBYTE -> [UBYTE] -> UWORD -> UWORD -> UWORD -> UWORD -> UBYTE -> UBYTE -> UWORD -> [UBYTE] -> [UBYTE] -> [Maybe SynthWF] -> SynthInstr [defaultdecay] :: SynthInstr -> UBYTE [reserved] :: SynthInstr -> [UBYTE] [rep] :: SynthInstr -> UWORD [replen] :: SynthInstr -> UWORD [voltbllen] :: SynthInstr -> UWORD [wftbllen] :: SynthInstr -> UWORD [volspeed] :: SynthInstr -> UBYTE [wfspeed] :: SynthInstr -> UBYTE [wforms] :: SynthInstr -> UWORD [voltbl] :: SynthInstr -> [UBYTE] [wftbl] :: SynthInstr -> [UBYTE] [wf] :: SynthInstr -> [Maybe SynthWF] peek :: MEM -> PTR -> IO SynthInstr instance GHC.Show.Show Sound.MED.Raw.SynthInstr.SynthInstr module Sound.MED.Raw.InstrHdr data Instrument Unknown :: Instrument Hybrid :: HybridInstr -> Instrument Synthetic :: SynthInstr -> Instrument Sample :: SampleInstr -> Instrument data InstrHdr InstrHdr :: ULONG -> WORD -> Bool -> Bool -> Bool -> Instrument -> InstrHdr [len] :: InstrHdr -> ULONG [stype] :: InstrHdr -> WORD [s16] :: InstrHdr -> Bool [stereo] :: InstrHdr -> Bool [md16] :: InstrHdr -> Bool [dat] :: InstrHdr -> Instrument peek :: MEM -> PTR -> IO InstrHdr instance GHC.Show.Show Sound.MED.Raw.InstrHdr.InstrHdr instance GHC.Show.Show Sound.MED.Raw.InstrHdr.Instrument module Sound.MED.Generic.Instrument data MEDInstrument MEDInstrument :: 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 [rep] :: MEDInstrument -> Maybe Int [replen] :: MEDInstrument -> Maybe Int [midich] :: MEDInstrument -> Maybe Int [midipreset] :: MEDInstrument -> Maybe Int [svol] :: MEDInstrument -> Maybe Int [strans] :: MEDInstrument -> Maybe Int [hold] :: MEDInstrument -> Maybe Int [decay] :: MEDInstrument -> Maybe Int [suppress_midi_off] :: MEDInstrument -> Maybe Int [finetune] :: MEDInstrument -> Maybe Int [default_pitch] :: MEDInstrument -> Maybe Int [instr_flags] :: MEDInstrument -> Maybe Int [long_midi_preset] :: MEDInstrument -> Maybe Int [output_device] :: MEDInstrument -> Maybe Int [long_repeat] :: MEDInstrument -> Maybe Int [long_replen] :: MEDInstrument -> Maybe Int [name] :: MEDInstrument -> Maybe String medinstruments :: [Maybe InstrHdr] -> [MMD0Sample] -> [MMDInstrInfo] -> [InstrExt] -> [MEDInstrument] medinstrument :: Maybe InstrHdr -> Maybe MMD0Sample -> Maybe MMDInstrInfo -> Maybe InstrExt -> MEDInstrument instance GHC.Show.Show Sound.MED.Generic.Instrument.MEDInstrument instance Sound.MED.Basic.Human.Human Sound.MED.Generic.Instrument.MEDInstrument module Sound.MED.Raw.MMD0 data MMD0 MMD0 :: ULONG -> ULONG -> MMD0Song -> UWORD -> UWORD -> [MMD0Block] -> UBYTE -> UBYTE -> UBYTE -> UBYTE -> [Maybe InstrHdr] -> ULONG -> Maybe MMD0exp -> ULONG -> UWORD -> UWORD -> UWORD -> UWORD -> WORD -> UBYTE -> UBYTE -> MMD0 [id] :: MMD0 -> ULONG [modlen] :: MMD0 -> ULONG [song] :: MMD0 -> MMD0Song [psecnum] :: MMD0 -> UWORD [pseq] :: MMD0 -> UWORD [blockarr] :: MMD0 -> [MMD0Block] [mmdflags] :: MMD0 -> UBYTE [reserved1] :: MMD0 -> UBYTE [reserved2] :: MMD0 -> UBYTE [reserved3] :: MMD0 -> UBYTE [smplarr] :: MMD0 -> [Maybe InstrHdr] [reserved4] :: MMD0 -> ULONG [expdata] :: MMD0 -> Maybe MMD0exp [reserved5] :: MMD0 -> ULONG [pstate] :: MMD0 -> UWORD [pblock] :: MMD0 -> UWORD [pline] :: MMD0 -> UWORD [pseqnum] :: MMD0 -> UWORD [actplayline] :: MMD0 -> WORD [counter] :: MMD0 -> UBYTE [extra_songs] :: MMD0 -> UBYTE peek :: MEM -> PTR -> IO MMD0 instance GHC.Show.Show Sound.MED.Raw.MMD0.MMD0 module Sound.MED.Raw.MMD1 data MMD1 MMD1 :: ULONG -> ULONG -> MMD0Song -> UWORD -> UWORD -> [MMD1Block] -> UBYTE -> UBYTE -> UBYTE -> UBYTE -> [Maybe InstrHdr] -> ULONG -> Maybe MMD0exp -> ULONG -> UWORD -> UWORD -> UWORD -> UWORD -> WORD -> UBYTE -> UBYTE -> MMD1 [id] :: MMD1 -> ULONG [modlen] :: MMD1 -> ULONG [song] :: MMD1 -> MMD0Song [psecnum] :: MMD1 -> UWORD [pseq] :: MMD1 -> UWORD [blockarr] :: MMD1 -> [MMD1Block] [mmdflags] :: MMD1 -> UBYTE [reserved1] :: MMD1 -> UBYTE [reserved2] :: MMD1 -> UBYTE [reserved3] :: MMD1 -> UBYTE [smplarr] :: MMD1 -> [Maybe InstrHdr] [reserved4] :: MMD1 -> ULONG [expdata] :: MMD1 -> Maybe MMD0exp [reserved5] :: MMD1 -> ULONG [pstate] :: MMD1 -> UWORD [pblock] :: MMD1 -> UWORD [pline] :: MMD1 -> UWORD [pseqnum] :: MMD1 -> UWORD [actplayline] :: MMD1 -> WORD [counter] :: MMD1 -> UBYTE [extra_songs] :: MMD1 -> UBYTE peek :: MEM -> PTR -> IO MMD1 instance GHC.Show.Show Sound.MED.Raw.MMD1.MMD1 module Sound.MED.Raw.MMD2 data MMD2 MMD2 :: ULONG -> ULONG -> MMD2Song -> UWORD -> UWORD -> [MMD1Block] -> UBYTE -> UBYTE -> UBYTE -> UBYTE -> [Maybe InstrHdr] -> ULONG -> Maybe MMD0exp -> ULONG -> UWORD -> UWORD -> UWORD -> UWORD -> WORD -> UBYTE -> UBYTE -> MMD2 [id] :: MMD2 -> ULONG [modlen] :: MMD2 -> ULONG [song] :: MMD2 -> MMD2Song [psecnum] :: MMD2 -> UWORD [pseq] :: MMD2 -> UWORD [blockarr] :: MMD2 -> [MMD1Block] [mmdflags] :: MMD2 -> UBYTE [reserved1] :: MMD2 -> UBYTE [reserved2] :: MMD2 -> UBYTE [reserved3] :: MMD2 -> UBYTE [smplarr] :: MMD2 -> [Maybe InstrHdr] [reserved4] :: MMD2 -> ULONG [expdata] :: MMD2 -> Maybe MMD0exp [reserved5] :: MMD2 -> ULONG [pstate] :: MMD2 -> UWORD [pblock] :: MMD2 -> UWORD [pline] :: MMD2 -> UWORD [pseqnum] :: MMD2 -> UWORD [actplayline] :: MMD2 -> WORD [counter] :: MMD2 -> UBYTE [extra_songs] :: MMD2 -> UBYTE peek :: MEM -> PTR -> IO MMD2 instance GHC.Show.Show Sound.MED.Raw.MMD2.MMD2 module Sound.MED.Raw.MMD3 data MMD3 MMD3 :: ULONG -> ULONG -> MMD2Song -> UWORD -> UWORD -> [MMD1Block] -> UBYTE -> UBYTE -> UBYTE -> UBYTE -> [Maybe InstrHdr] -> ULONG -> Maybe MMD0exp -> ULONG -> UWORD -> UWORD -> UWORD -> UWORD -> WORD -> UBYTE -> UBYTE -> MMD3 [id] :: MMD3 -> ULONG [modlen] :: MMD3 -> ULONG [song] :: MMD3 -> MMD2Song [psecnum] :: MMD3 -> UWORD [pseq] :: MMD3 -> UWORD [blockarr] :: MMD3 -> [MMD1Block] [mmdflags] :: MMD3 -> UBYTE [reserved1] :: MMD3 -> UBYTE [reserved2] :: MMD3 -> UBYTE [reserved3] :: MMD3 -> UBYTE [smplarr] :: MMD3 -> [Maybe InstrHdr] [reserved4] :: MMD3 -> ULONG [expdata] :: MMD3 -> Maybe MMD0exp [reserved5] :: MMD3 -> ULONG [pstate] :: MMD3 -> UWORD [pblock] :: MMD3 -> UWORD [pline] :: MMD3 -> UWORD [pseqnum] :: MMD3 -> UWORD [actplayline] :: MMD3 -> WORD [counter] :: MMD3 -> UBYTE [extra_songs] :: MMD3 -> UBYTE peek :: MEM -> PTR -> IO MMD3 instance GHC.Show.Show Sound.MED.Raw.MMD3.MMD3 module Sound.MED.Generic data MED MED :: [MEDInstrument] -> [MEDBlock] -> [MEDPlaySeq] -> MEDTempo -> MED [instrs] :: MED -> [MEDInstrument] [blocks] :: MED -> [MEDBlock] [playseqs] :: MED -> [MEDPlaySeq] [tempo] :: MED -> MEDTempo peek :: MEM -> IO MED load :: FilePath -> IO MED instance Sound.MED.Basic.Human.Human Sound.MED.Generic.MED