
TSc           @   s  d  d l  Z  d  d l Z d  d l m Z d  d l m Z m Z d  d l m Z d Z	 e
 e	  Z d d d d	 d
 d d d d d d d g Z d d d d d d d g Z d d d d d g Z e e  Z e
 e	 e  Z i  Z g  Z i  Z g  Z xRe
 d  D]DZ e e Z e e	 Z e e Z e e  d k re e d d Z e e d  e e f <e e d  e e f <e j d  e e f  e j d  e e f  e e   d! e d d" e f <e e   d! e e f <q e e d  e e f <e e d  e e f <e j d  e e f  e j d  e e f  e e   d! e e f <q Wd# d$ d% d& d' d( d) g Z d d d d* d+ d, d- g Z d Z d Z  d Z! d Z" d Z# d Z$ d Z% d. Z& d/ e' f d0     YZ( d1 e( f d2     YZ) d3 e' f d4     YZ* d5 e( f d6     YZ+ d7 e+ f d8     YZ, d9 e+ f d:     YZ- d; e( f d<     YZ. d= e( f d>     YZ/ d? e( f d@     YZ0 dA e( f dB     YZ1 dC e( f dD     YZ2 dE e( f dF     YZ3 dG e) f dH     YZ4 dI e) f dJ     YZ5 dK e) f dL     YZ6 dM e) f dN     YZ7 dO e) f dP     YZ8 dQ e) f dR     YZ9 dS e) f dT     YZ: dU e) f dV     YZ; dW e) f dX     YZ< dY e) f dZ     YZ= dY e) f d[     YZ= d\ e) f d]     YZ> d^ e) f d_     YZ? d` e) f da     YZ@ db e) f dc     YZA dd e) f de     YZB df e) f dg     YZC dh e) f di     YZD dj e) f dk     YZE dl e) f dm     YZF dn eG f do     YZH dp e' f dq     YZI dr e' f ds     YZJ dt e' f du     YZK dv e' f dw     YZL dx   ZM dy   ZN dz   ZO d{ d| d d}  ZP eL jQ ZR eK jS ZT d S(~   iN(   t   StringIO(   t   unpackt   pack(   t   sqrti   t   Cs   C#t   Ds   D#t   Et   Fs   F#t   Gs   G#t   As   A#t   Bi    i   i   i   i   i	   i   i   i   i   i   i
   i   t   bs   %s-%ds   %s_%dt   st   wholet   halft   quartert   eightht	   sixteenths   thiry-seconds   sixty-fourthg      ?g      ?g      ?g      ?i   t   Eventc           B   s   e  Z d  Z d Z d  Z d e f d     YZ d   Z d   Z d   Z	 e
 e	  Z	 d   Z d   Z d	   Z d  e d
  Z d d  Z d  d  Z d   Z d   Z RS(   i    s   Generic MIDI Eventt   __metaclass__c           B   s   e  Z d    Z RS(   c         C   s#   | d k r t  j |  |  n  d  S(   NR   t	   MetaEventt	   NoteEvent(   s   Events	   MetaEvents	   NoteEvent(   t   EventFactoryt   register_event(   t   clst   namet   basest   dict(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __init__E   s    (   t   __name__t
   __module__R   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   D   s   c         C   sI   |  j  j |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _	 d S(   s#    event type derived from __class__ i    t    N(
   t	   __class__R   t   typet   channelt   tickt   msdelayt   datat   trackt   Nonet   order(   t   self(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   I   s    					c         C   s   t  j |   S(   N(   t   copyt   deepcopy(   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR*   Y   s    c         C   s   |  j  | d @k S(   Ni   (   t	   statusmsg(   R   R,   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   is_event\   s    c         C   s&   d |  j  |  j |  j |  j |  j f S(   Ns   %s @%d %dms C%d T%d(   R   R#   R$   R"   R&   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __str__`   s
    	c         C   s0   |  j  | j  k  r d S|  j  | j  k r, d Sd S(   Nii   i    (   R#   (   R)   t   other(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __cmp__g   s
      c         C   s1   |  j  | j  } t | | j | j  |  _ d  S(   N(   R#   t   intt   mptR$   (   R)   t   tempot   rtick(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   adjust_msdelays   s    c         C   sO   d } | s1 | t  |  j d @d |  j @B 7} n  |  j d |  | |  j   S(   NR   i   i   t   delta(   t   chrR,   R"   t   encode_tickt   encode_data(   R)   R6   t   runningt   encstr(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   encodew   s    %R   c         C   s   |  j  |  s t  | |  _ | d @|  _ d |  _ | rL |  j | 7_ n  |  j t |  j  } | r |  j t j d g  t	 |  D] } | j
   ^ q  7_ n  |  j   d  S(   Ni   R   (   R-   t   AssertionErrorR#   R"   R%   t   lengtht   lent   strt   joint   ranget   nextt   decode_data(   R)   R#   R,   R&   t   runningstatust	   remaindert   x(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   decode}   s    		=c         C   s   t  |  j |  S(   N(   t   write_varlenR#   (   R)   R6   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR8      s    c         C   s   d  S(   N(    (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRD      s    c         C   s   |  j  S(   N(   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR9      s    (   R   R   R>   R   R,   R!   R   R   R*   R-   t   classmethodR.   R0   R5   t   FalseR<   RH   R8   RD   R9   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   ?   s    							R   c           B   se   e  Z d  Z d Z d Z d   Z e e  Z d   Z e e  Z d e d  Z	 d   Z
 d   Z RS(   i   i    s
   Meta Eventc         C   s   |  j  | k S(   N(   R,   (   R   R,   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR-      s    c         C   s   |  j  | k S(   N(   t   metacommand(   R   t   metacmd(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   is_meta_event   s    c         C   sm   |  j  d |  } |  j   } t t |   } t |  j  } t |  j  } t j d | | | | | f  S(   NR6   R   (   R8   R9   R7   R?   R,   RL   R@   RA   (   R)   R6   R:   R#   R%   t   datalent   smsgt   mcmd(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR<      s    c         C   s   |  j  |  s t  | |  _ d |  _ t |  d  sB d  |  _ n  t |  } t j	 d g  t
 |  D] } | j   ^ qd  |  _ |  j   d  S(   Ni    R(   R   (   RN   R=   R#   R"   t   hasattrR'   R(   t   read_varlenR@   RA   RB   RC   R%   RD   (   R)   R#   t   commandR&   R?   RG   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRH      s    		4c         C   s   |  j  S(   N(   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR9      s    (   R   R   R,   RL   R   R-   RJ   RN   RK   R<   RH   R9   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR      s   			
R   c           B   s;   e  Z g  Z g  Z d    Z d   Z e e  Z d   Z RS(   c         C   s   d  |  _ d |  _ d  S(   Ni    (   R'   t   RunningStatust   RunningTick(   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR      s    	c         C   s^   t  | k r |  j j |  n; t | k s7 t | k rJ |  j j |  n t d | j  d  S(   Ns#   Unknown bases class in event type: (   R   t   MetaEventRegistryt   appendR   R   t   EventRegistryt
   ValueErrorR   (   R   t   eventR   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR      s
    c         C   sP  t  |  } |  j | 7_ t | j    } t j |  r t | j    } x |  j D]8 } | j |  rX |   } | j |  j | |  | SqX Wt	 d |  n x |  j
 D]G } | j |  r | | f |  _ |   } | j |  j | |  | Sq W|  j r>|  j \ } } |   } | j |  j | | t |   | St	 d |  d  S(   Ns   Unknown Meta MIDI Event: s   Unknown MIDI Event: (   RS   RV   t   ordRC   R   R-   RW   RN   RH   t   WarningRY   RU   R7   (   R)   R&   R#   t   stsmsgt   cmdt   etypet   evit   cached_stsmsg(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   parse_midi_event   s0    				(   R   R   RY   RW   R   R   RJ   Rc   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR      s   		R   c           B   s5   e  Z d  Z d d g Z d   Z d   Z d   Z RS(   i   t   pitcht   velocityc         C   s0   d t  t |   j   t |  j |  j |  j f S(   Ns   %s [ %s(%s) %d ](   t   superR   R.   t   NOTE_VALUE_MAP_SHARPRd   Re   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.      s
    
c         C   s0   t  |  j d  |  _ t  |  j d  |  _ d  S(   Ni    i   (   R\   R%   Rd   Re   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRD      s    c         C   s   t  |  j  t  |  j  S(   N(   R7   Rd   Re   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR9     s    (   R   R   R>   t   fieldsR.   RD   R9   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR      s
   		t   NoteOnEventc           B   s   e  Z d  Z d Z RS(   i   s   Note On(   R   R   R,   R   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRi     s   t   NoteOffEventc           B   s   e  Z d  Z d Z RS(   i   s   Note Off(   R   R   R,   R   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRj     s   t   AfterTouchEventc           B   s#   e  Z d  Z d Z d Z d   Z RS(   i   i   s   After Touchc         C   sF   d t  t |   j   t t |  j d   t t |  j d   f S(   Ns   %s [ %s %s ]i    i   (   Rf   Rk   R.   t   hexR\   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.     s    (   R   R   R,   R>   R   R.   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRk     s   t   ControlChangeEventc           B   s5   e  Z d  Z d Z d Z d   Z d   Z d   Z RS(   i   i   s   Control Changec         C   sF   d t  t |   j   t t |  j d   t t |  j d   f S(   Ns   %s [ %s %s ]i    i   (   Rf   Rm   R.   Rl   R\   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.     s    c         C   s0   t  |  j d  |  _ t  |  j d  |  _ d  S(   Ni    i   (   R\   R%   t   controlt   value(   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRD   %  s    c         C   s   t  |  j  t  |  j  S(   N(   R7   t   contorlRo   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR9   )  s    (   R   R   R,   R>   R   R.   RD   R9   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRm     s   		t   ProgramChangeEventc           B   s5   e  Z d  Z d Z d Z d   Z d   Z d   Z RS(   i   i   s   Program Changec         C   s0   d t  t |   j   t t |  j d   f S(   Ns	   %s [ %s ]i    (   Rf   Rq   R.   Rl   R\   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.   1  s    c         C   s   t  |  j d  |  _ d  S(   Ni    (   R\   R%   Ro   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRD   6  s    c         C   s   t  |  j  S(   N(   R7   Ro   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR9   9  s    (   R   R   R,   R>   R   R.   RD   R9   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRq   ,  s   		t   ChannelAfterTouchEventc           B   s#   e  Z d  Z d Z d Z d   Z RS(   i   i   s   Channel After Touchc         C   s0   d t  t |   j   t t |  j d   f S(   Ns	   %s [ %s ]i    (   Rf   Rr   R.   Rl   R\   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.   A  s    (   R   R   R,   R>   R   R.   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRr   <  s   t   PitchWheelEventc           B   s5   e  Z d  Z d Z d Z d   Z d   Z d   Z RS(   i   i   s   Pitch Wheelc         C   sF   d t  t |   j   t t |  j d   t t |  j d   f S(   Ns   %s [ %s %s ]i    i   (   Rf   Rs   R.   Rl   R\   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.   K  s    c         C   s?   t  |  j d  } t  |  j d  } | d >| Bd |  _ d  S(   Ni    i   i   i    (   R\   R%   Ro   (   R)   t   firstt   second(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRD   Q  s    c         C   s9   |  j  d } t | d @ } t | d ?d @ } | | S(   Ni    i   i   (   Ro   R7   (   R)   Ro   Rt   Ru   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR9   V  s    (   R   R   R,   R>   R   R.   RD   R9   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRs   F  s   		t
   SysExEventc           B   s2   e  Z d  Z d Z d   Z e e  Z d   Z RS(   i   t   SysExc         C   s   |  j  | k S(   N(   R,   (   R   R,   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR-   `  s    c         C   sZ   | |  _  | d @|  _ t |  } t j d g  t |  D] } | j   ^ q8  |  _ d  S(   Ni   R   (   R#   R"   RS   R@   RA   RB   RC   R%   (   R)   R#   R,   R&   R?   RG   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRH   d  s    	(   R   R   R,   R   R-   RJ   RH   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRv   \  s
   	t   SequenceNumberMetaEventc           B   s   e  Z d  Z d Z RS(   s   Sequence Numberi    (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRx   j  s   t   TextMetaEventc           B   s   e  Z d  Z d Z d   Z RS(   t   Texti   c         C   s    d t  t |   j   |  j f S(   Ns	   %s [ %s ](   Rf   Ry   R.   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.   r  s    (   R   R   R   RL   R.   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRy   n  s   t   CopyrightMetaEventc           B   s   e  Z d  Z d Z RS(   s   Copyright Noticei   (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR{   w  s   t   TrackNameEventc           B   s#   e  Z d  Z d Z d Z d   Z RS(   s
   Track Namei   c         C   s    d t  t |   j   |  j f S(   Ns	   %s [ %s ](   Rf   R|   R.   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.     s    (   R   R   R   RL   R(   R.   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR|   {  s   t   InstrumentNameEventc           B   s#   e  Z d  Z d Z d Z d   Z RS(   s   Instrument Namei   c         C   s    d t  t |   j   |  j f S(   Ns	   %s [ %s ](   Rf   R}   R.   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.     s    (   R   R   R   RL   R(   R.   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR}     s   t   LryricsEventc           B   s   e  Z d  Z d Z d   Z RS(   t   Lyricsi   c         C   s    d t  t |   j   |  j f S(   Ns	   %s [ %s ](   Rf   R~   R.   R%   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.     s    (   R   R   R   RL   R.   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR~     s   t   MarkerEventc           B   s   e  Z d  Z d Z RS(   t   Markeri   (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   t   CuePointEventc           B   s   e  Z d  Z d Z RS(   s	   Cue Pointi   (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   t   UnknownEventc           B   s   e  Z d  Z d Z RS(   s	   whoknows?i	   (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   t   ChannelPrefixEventc           B   s   e  Z d  Z d Z RS(   s	   Cue Pointi    (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   c           B   s   e  Z d  Z d Z RS(   s	   Cue Pointi    (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   t	   PortEventc           B   s5   e  Z d  g Z d Z d Z d Z d   Z d   Z RS(   t   ports   MIDI Port/Cablei!   i   c         C   s    d t  t |   j   |  j f S(   Ns   %s [ port: %d ](   Rf   R   R.   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.     s    c         C   s5   t  |  j  d k s t  t |  j d  |  _ d  S(   Ni   i    (   R?   R%   R=   R\   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRD     s    (   R   R   Rh   R   RL   R(   R.   RD   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   		t   TrackLoopEventc           B   s   e  Z d  Z d Z RS(   s
   Track Loopi.   (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   t   EndOfTrackEventc           B   s   e  Z d  Z d Z d Z RS(   s   End of Tracki/   i   (   R   R   R   RL   R(   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   t   SetTempoEventc           B   sJ   e  Z d  d g Z d Z d Z d Z d   Z d   Z d   Z d   Z	 RS(	   t   mpqnR3   s	   Set TempoiQ   i   c         C   s&   d t  t |   j   |  j |  j f S(   Ns   %s [ mpqn: %d tempo: %d ](   Rf   R   R.   R   R3   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.     s    c         C   s}   | d k r3 | |  j  d <t d  | |  j  d <nF | d k rl | |  j  d <t t d  |  |  j  d <n | |  j  | <d  S(   NR   g    8AR3   (   t   __dict__t   floatR1   (   R)   t   itemRo   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __setattr__  s     c         C   su   t  |  j  d k s t  t |  j d  d >t |  j d  d >t |  j d  |  _ t d  |  j |  _ d  S(   Ni   i    i   i   i   i   g    8A(   R?   R%   R=   R\   R   R   R3   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRD     s    @c         C   sW   t  t d  |  j  |  _ t |  j d @d ? t |  j d @d ? t |  j d @ S(   Ng    8Ai   i   i   i   i   (   R1   R   R3   t   mpqgnR7   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR9     s    )(
   R   R   Rh   R   RL   R(   R.   R   RD   R9   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   		
	t   SmpteOffsetEventc           B   s   e  Z d  Z d Z RS(   s   SMPTE OffsetiT   (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   t   TimeSignatureEventc           B   sG   e  Z d  d d d g Z d Z d Z d Z d   Z d   Z d	   Z RS(
   t	   numeratort   denominatort	   metronomet   thirtysecondss   Time SignatureiX   i    c         C   s2   d t  t |   j   |  j |  j |  j |  j f S(   Ns"   %s [ %d/%d  metro: %d  32nds: %d ](   Rf   R   R.   R   R   R   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR.     s    c         C   s{   t  |  j  d k s t  t |  j d  |  _ d t |  j d  |  _ t |  j d  |  _ t |  j d  |  _ d  S(   Ni   i    i   i   i   (   R?   R%   R=   R\   R   R   R   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRD     s
    c         C   s@   t  |  j  t  t t |  j    t  |  j  t  |  j  S(   N(   R7   R   R1   R   R   R   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR9     s    2(	   R   R   Rh   R   RL   R(   R.   RD   R9   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   		t   KeySignatureEventc           B   s   e  Z d  Z d Z RS(   s   Key SignatureiY   (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   t   BeatMarkerEventc           B   s   e  Z d  Z d Z RS(   s   Beat Markeri   (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   
  s   t   SequencerSpecificEventc           B   s   e  Z d  Z d Z RS(   s   Sequencer Specifici   (   R   R   R   RL   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s   t   TempoMapc           B   s8   e  Z d    Z d   Z d   Z d   Z d d  Z RS(   c         C   s   | |  _  d  S(   N(   t   stream(   R)   R   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s    c         C   s   |  j  |  |  j   d  S(   N(   t   addt   update(   R)   R[   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   add_and_update  s    c         C   s7   | j  } | d } | |  j j | _ |  j |  d  S(   Ng     @@(   R   R   t
   resolutionR2   RX   (   R)   R[   R3   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s    	
c         C   s[   |  j    d  } xD |  D]< } | rM | j t | j | j | j  | _ n  | } q Wd  S(   N(   t   sortR'   R$   R1   R2   R#   (   R)   t   lastR[   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   $  s    
$i    c         C   s<   |  d } x+ |  d D] } | j  | k r. | S| } q W| S(   Ni    i   (   R#   (   R)   t   offsetR   t   tm(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt	   get_tempo.  s    

(   R   R   R   R   R   R   R   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s
   					
t   EventStreamIteratorc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s   | |  _  | j |  _ | |  _ d |  _ d  |  _ |  j  j   |  _ g  |  _ x( | j	 d D] } |  j j
 | j  qY W|  j j
 | j j  t |  j  |  _ |  j j   |  _ t |  j  j	  |  _	 |  j	 j   |  _ t |  _ d  S(   Ni    i   (   R   t	   trackpoolt   window_lengtht   window_edgeR'   t   leftovert
   itereventst   eventst   ttptst   tempomapRX   R#   t
   endoftrackt   iterRC   t   ttpR3   RK   (   R)   R   t   windowR3   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   7  s    					c         C   s   |  S(   N(    (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __iter__L  s    c         C   s   |  j  r t  n  |  j } |  j t |  j |  j j  7_ |  j |  j k r |  j } y |  j j	   |  _ Wn' t k
 r |  j |  _ t
 |  _  d  SX| | |  j j } |  j | } |  j j	   |  _ | |  j j } | |  j j |  _ n  d  S(   N(   R   t   StopIterationR   R1   R   R3   R2   R   R   RC   t   TrueR   R#   (   R)   t   lastedget   oldttpt   msusedt   msleftt	   ticksleft(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __next_edgeO  s"    			"		c         C   s   g  } |  j    |  j rN |  j j |  j k r2 | S| j |  j  d  |  _ n  x= |  j D]2 } | j |  j k r} | |  _ | S| j |  qX W| S(   N(   t   _EventStreamIterator__next_edgeR   R#   R   RX   R'   R   (   R)   t   retR[   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRC   f  s    
		(   R   R   R   R   R   RC   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   6  s   			t   EventStreamc           B   s(  e  Z d    Z d   Z d   Z e e e d d  Z d   Z d   Z	 d   Z
 d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d d  Z d   Z d   Z d   Z d d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! RS(    c         C   sm   d |  _  d |  _ t |   |  _ d  |  _ g  |  _ i  |  _ g  |  _ d  |  _	 g  |  _
 d |  _ i  |  _ d  S(   Ni   i    i   (   t   formatt
   trackcountR   R   R'   t   curtrackR   t	   tracklistt   timemapR   t   beatmapR   t
   tracknames(   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   {  s    									c         C   sQ   |  j  s t  | |  _ g  |  _ x( t D]  } |  j j t | |   q) Wd  S(   N(   R   R=   t   _EventStream__resolutionR   t
   BEATVALUESRX   R1   (   R)   R   Ro   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __set_resolution  s
    		c         C   s   |  j  S(   N(   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __get_resolution  s    s   Ticks per quarter notec         C   sM   |  j  d  k r d |  _  n |  j  d 7_  g  |  j |  j  <|  j d 7_ d  S(   Ni    i   (   R   R'   R   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt	   add_track  s
    c         C   s   |  j  S(   N(   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   get_current_track_number  s    c         C   s   |  j  | S(   N(   R   (   R)   t   tracknum(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   get_track_by_number  s    c         C   s   |  j  |  j S(   N(   R   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   get_current_track  s    c         C   s   |  j  | } |  j |  S(   N(   R   R   (   R)   t	   tracknameR   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   get_track_by_name  s    c         C   s   | |  j  |  j <|  j   d  S(   N(   R   R   t   _EventStream__refresh(   R)   R&   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   replace_current_track  s    c         C   s   | |  j  t <|  j   d  S(   N(   R   t   tracknumberR   (   R)   R   R&   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   replace_track_by_number  s    c         C   s!   |  j  | } |  j | |  d  S(   N(   R   t   repdeletelace_track_by_number(   R)   R   R&   R   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   replace_track_by_name  s    c         C   s*   |  j  |  j =|  j d 8_ |  j   d  S(   Ni   (   R   R   R   R   (   R)   R&   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   delete_current_track  s    c         C   s'   |  j  | =|  j d 8_ |  j   d  S(   Ni   (   R   R   R   (   R)   R   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   delete_track_by_number  s    
c         C   s!   |  j  | } |  j | |  d  S(   N(   R   R   (   R)   R   R&   R   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   delete_track_by_name  s    c         C   s   |  j  |  t | t  sR |  j | _ |  j j |  |  j |  j j |  n  t | t  rn |  j	   n  t | t
  r |  j j |  |  j   n. |  j r |  j j | j  } | j |  n  d  S(   N(   t   _EventStream__adjust_endoftrackt
   isinstanceR   R   R&   R   RX   R   R|   t    _EventStream__refresh_tracknamesR   R   R   t   _EventStream__refresh_timemapR   R#   R5   (   R)   R[   R3   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt	   add_event  s    	i    c         C   s   |  j  j |  S(   N(   R   R   (   R)   R   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s    c         C   s5   |  j  j   x! |  j j   D] } | j   q Wd  S(   N(   R   R   R   t   values(   R)   R&   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   timesort  s    c         C   s   x |  j  D] } | GHq
 Wd  S(   N(   R   (   R)   R[   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   textdump  s    c         C   s   t  |  j j    S(   N(   R   R   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s    c         C   s*   |  j    | r t |  |  St |  j  S(   N(   R   R   R   R   (   R)   t   mswindow(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR     s    
c         C   s%   t  |  j  |  j k s t  |  j S(   N(   R?   R   R   R=   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __len__  s    c         C   s   |  j  | S(   N(   R   (   R)   t   intkey(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __getitem__  s    c         C   s,   |  j    |  j   |  j   |  j   d  S(   N(   t   _EventStream__refresh_trackpoolt   _EventStream__refresh_tempomapR   R   (   R)   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt	   __refresh  s    


c         C   sb   i  |  _  xR |  j D]G } |  j | } x1 | D]) } t | t  r- | |  j  | j <Pq- q- Wq Wd  S(   N(   R   R   R   R|   R%   (   R)   R   R&   R[   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __refresh_tracknames  s    	c         C   s\   g  |  _  x? |  j D]4 } |  j t } x | D] } |  j  j |  q- Wq W|  j  j   d  S(   N(   R   R   R   RX   R   (   R)   R&   R[   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __refresh_trackpool  s    	c         C   s~   d  |  _ t |   |  _ x_ |  j D]T } t | t  rJ |  j j |  n t | t  ri |  j	 |  n  |  j j
   q" Wd  S(   N(   R'   R   R   R   R   R   R   R   R   R   R   (   R)   R[   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __refresh_tempomap  s    	c         C   sL   xE |  j  D]: } t | t  s
 |  j j | j  } | j |  q
 q
 Wd  S(   N(   R   R   R   R   R   R#   R5   (   R)   R[   R3   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __refresh_timemap  s    c         C   s   |  j  s~ t | t  sE t   } | j | _ |  j | _ | |  _  n	 | |  _  |  j j |  j   |  j |  j j |  j   n" t	 | j d |  j  j  |  j  _ |  j
 r |  j
 j |  j  j  } |  j  j |  n  d  S(   Ni   (   R   R   R   R#   R   R&   R   RX   R   t   maxR   R   R5   (   R)   R[   t   evR3   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   __adjust_endoftrack  s    			"	c         C   s   t  | S(   N(   Rg   (   R)   t   idx(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   NoteMap(  s    N("   R   R   R   t   _EventStream__set_resolutiont   _EventStream__get_resolutiont   propertyR'   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   z  s>   																										
		t   EventStreamWriterc           B   sA   e  Z d    Z d   Z e e  Z d   Z d   Z d   Z RS(   c         C   sb   t  | t  r! t | d  } n  | |  _ | |  _ |  j   x |  j D] } |  j |  qG Wd  S(   Nt   w(   R   R@   t   opent   outputt
   midistreamt   write_file_headert   write_track(   R)   R   R   R&   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   -  s    		
c         C   s   |  | |  d  S(   N(    (   R   R   R   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   write6  s    c         C   sB   t  d d |  j j |  j j |  j j  } |  j j d |  d  S(   Ns   >LHHHi   s   MThd%s(   R   R   R   R   R   R   R   (   R)   t   packdata(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   :  s
    			c         C   s!   |  j  j d t d |   d  S(   Ns   MTrk%ss   >L(   R   R   R   (   R)   t   trklen(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   write_track_headerB  s    c   	      C   s   d } t  j  |  } | j   d } } d } d } xd | D]\ } | | j k o] | | j k } | | j d | d |  7} | j } | j } | j } q< W|  j t |   |  j j	 |  d  S(   NR   i    R6   R:   (
   R*   R   R,   R"   R<   R#   R   R?   R   R   (	   R)   R&   t   buft	   last_tickR6   RP   t   chnR[   R:   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   E  s    

		(   R   R   R   R   RJ   R   R   R   (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   ,  s   					t   EventStreamReaderc           B   sM   e  Z d    Z d d  Z e e  Z d   Z d   Z d   Z d   Z	 RS(   c         C   s   d  |  _ |  j | |  d  S(   N(   R'   t   eventfactoryt   parse(   R)   t   instreamt	   outstream(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR   V  s    	c         C   s#   | s t    } n  |  | |  | S(   N(   R   (   R   R  R  (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   readZ  s    c         C   s   | |  _  t | t  r' t |  } n  | |  _ t | t  r` t | j    |  _ d |  _ n* t | t	  r t |  |  _ n	 t
 d  |  j   xL t |  j  j  D]8 } |  j   } t   |  _ |  j  j   |  j |  q Wd  S(   Ni    s#   Expecting file, string, or StringIO(   R   R   R@   R   R  t   fileR    R  t   cursort   stringt	   TypeErrort   parse_file_headerRB   R   t   parse_track_headerR   R  R   t   parse_track(   R)   R  R  R&   t   trksz(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR  a  s     			
c         C   s   |  j  j d  } | d k r* t d  n  t d |  j  j d   } | d } | d |  j _ | d |  j _ | d	 |  j _ | t k r |  j  j | t  n  d  S(
   Ni   t   MThds   Bad header in MIDI file.s   >LHHHi
   i    i   i   i   (	   R  R  R
  R   R   R   R   R   t   DEFAULT_MIDI_HEADER_SIZE(   R)   t   magicR%   t   hdrsz(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR  u  s    
c         C   sQ   |  j  j d  } | d k r. t d |  n  t d |  j  j d   d } | S(   Ni   t   MTrks   Bad track header in MIDI file: s   >Li    (   R  R  R
  R   (   R)   R  R  (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR    s
    c         C   sd   t  |  j j |   } xE t r_ y& |  j j |  } |  j j |  Wq t k
 r[ Pq Xq Wd  S(   N(	   R   R  R  R   R  Rc   R   R   R   (   R)   R  R&   R[   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR    s    	N(
   R   R   R   R'   R  RJ   R  R  R  R  (    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyR  U  s   					c         C   s`   d } d } xM | r[ t  |  j    } | d @s: d } n  | d @} | d >} | | 7} q W| S(   Ni   i    i   i   i   (   R\   RC   (   R%   t   NEXTBYTERo   R7   (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRS     s    	
	

c         C   s   t  |  d @ } |  d L}  |  r t  |  d @d B } |  d L}  |  r t  |  d @d B } |  d L}  |  r t  |  d @d B } | | | | } q | | | } q | | } n | } | S(   Ni   i   i   (   R7   (   Ro   t   chr1t   chr2t   chr3t   chr4t   res(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyRI     s    


c          C   s   x t  d  D] }  |  d s+ t |   GHn  t |   } t t |   } |  | k r t j d t t t t |    } d |  | | f GHq q Wd  S(   Nii  R   s   %s != %s (hex: %s)(	   t   xrangeRl   RI   RS   R   R@   RA   t   mapR\   (   Ro   t   datumt   newvaluet   hexstr(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   test_varlen  s    
$ix   i  c         C   sQ   t    } | | _ | | _ | j   t   } |  | _ d | _ | j |  | S(   Ni    (   R   R   R   R   R   R3   R#   R   (   R3   R   R   R   t   tempoev(    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt
   new_stream  s    			
			(U   R*   t   timet	   cStringIOR    t   structR   R   t   mathR   t   OCTAVE_MAX_VALUERB   t   OCTAVE_VALUESt
   NOTE_NAMESt
   WHITE_KEYSt
   BLACK_KEYSR?   t   NOTE_PER_OCTAVEt   NOTE_VALUESt   NOTE_NAME_MAP_FLATt   NOTE_VALUE_MAP_FLATt   NOTE_NAME_MAP_SHARPRg   Ro   t   noteidxt   octidxR   t   flatRX   t   globalst	   BEATNAMESR   t   WHOLEt   HALFt   QUARTERt   EIGHTHt	   SIXTEENTHt   THIRTYSECONDt   SIXTYFOURTHR  t   objectR   R   R   R   Ri   Rj   Rk   Rm   Rq   Rr   Rs   Rv   Rx   Ry   R{   R|   R}   R~   R   R   R   R   R   R   R   R   R   R   R   R   R   t   listR   R   R   R   R  RS   RI   R  R!  R  t   read_midifileR   t   write_midifile(    (    (    s,   /home/sabeiro/kotoba/Violino/Entropy/midi.pyt   <module>   s   *


	['4
	

!#D)H			
	