Ñò
äoKc           @   s°   d  d k  l Z d  d k Td  d k l Z d d d „  ƒ  YZ e d j ob d Z d Z d	 Z d  d
 k l Z d  d k l Z e e e ƒ e ƒ  ƒ Z	 e	 i
 ƒ  e	 i ƒ  n d S(   iÿÿÿÿ(   t   unpack(   t   *(   t   EventDispatchert   MidiFileParserc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s    
    
    The MidiFileParser is the lowest level parser that see the data as 
    midi data. It generates events that gets triggered on the outstream.
    
    c         C   s%   | |  _  t | ƒ |  _ d |  _ d S(   sI   
        raw_data is the raw content of a midi file as a string.
        N(   t   raw_inR   t   dispatcht   Nonet   _running_status(   t   selfR   t	   outstream(    (    sV   C:\Documents and Settings\Administrator\workspace\MINWii\src\mxmMidi\MidiFileParser.pyt   __init__   s    	c         C   s¼   |  i  } | i d ƒ } | i d ƒ } | d j o t d ‚ n | i d ƒ |  _ | i d ƒ |  _ | i d ƒ |  _ | d j o | i | d ƒ n |  i i	 |  i |  i |  i ƒ d S(   s   Parses the header chunki   t   MThds   It is not a valid midi file!i   i   N(
   R   t	   nextSlicet   readBewt	   TypeErrort   formatt   nTrackst   divisiont
   moveCursorR   t   header(   R   R   t   header_chunk_typet   header_chunk_zise(    (    sV   C:\Documents and Settings\Administrator\workspace\MINWii\src\mxmMidi\MidiFileParser.pyt   parseMThdChunk%   s    	c         C   sn  |  i  i ƒ  |  i  } |  i } | i |  i ƒ | i d ƒ | i d ƒ } | i ƒ  | } x| i ƒ  | j  oø| i ƒ  } | i	 | ƒ | i d d ƒ } | d @o | i ƒ  } |  _
 n
 |  i
 } | d @| d @} }	 | t j o; | i ƒ  }
 | i ƒ  } | i | ƒ } | i |
 | ƒ q^ | t j oY | i ƒ  } | i | d ƒ } | i d d ƒ t j o | i ƒ  } n | i | ƒ q^ | d j oV h d t 6d t 6d t 6} | i | d ƒ } | i | ƒ } |	 } | i | | ƒ q^ h d t 6d t 6d t 6d t 6d t 6d t 6d t 6} | i | d ƒ } | i | ƒ } | |	 } } | i | | | ƒ q^ Wd	 S(
   sD   Parses a track chunk. This is the most important part of the parser.i   t   move_cursori    i€   ið   i   i   i   N(   R   t
   reset_timeR   t   start_of_trackt   _current_trackR   R   t	   getCursort
   readVarLent   update_timeR   t
   META_EVENTR   t
   meta_eventt   SYSTEM_EXCLUSIVEt   END_OFF_EXCLUSIVEt   sysex_eventt   MTCt   SONG_POSITION_POINTERt   SONG_SELECTt   gett   system_commont   PATCH_CHANGEt   CHANNEL_PRESSUREt   NOTE_OFFt   NOTE_ONt
   AFTERTOUCHt   CONTINUOUS_CONTROLLERt
   PITCH_BENDt   channel_messages(   R   R   R   t   tracklengtht   track_endpositiont   timet
   peak_aheadt   statust   hi_niblet   lo_niblet	   meta_typet   meta_lengtht	   meta_datat   sysex_lengtht
   sysex_datat   eo_sysext
   data_sizest	   data_sizet   common_datat   common_typet   channel_datat
   event_typet   channel(    (    sV   C:\Documents and Settings\Administrator\workspace\MINWii\src\mxmMidi\MidiFileParser.pyt   parseMTrkChunkB   s`    		 		

c         C   s>   x* t  |  i ƒ D] } | |  _ |  i ƒ  q W|  i i ƒ  d S(   s   Parses all track chunks.N(   t   rangeR   R   RD   R   t   eof(   R   t   t(    (    sV   C:\Documents and Settings\Administrator\workspace\MINWii\src\mxmMidi\MidiFileParser.pyt   parseMTrkChunks¥   s
     	(   t   __name__t
   __module__t   __doc__R
   R   RD   RH   (    (    (    sV   C:\Documents and Settings\Administrator\workspace\MINWii\src\mxmMidi\MidiFileParser.pyR      s
   			ct   __main__s   test/midifiles/minimal.mids!   test/midifiles/cubase-minimal.mids   test/midifiles/Lola.mid(   t
   MidiToText(   t   RawInstreamFileN(    (   t   structR    t	   constantsR   R   RI   t	   test_fileRM   RN   t   midi_inR   RH   (    (    (    sV   C:\Documents and Settings\Administrator\workspace\MINWii\src\mxmMidi\MidiFileParser.pyt   <module>   s   
¢
