o
    f                     @   s0  d dl Z d dlZG dd de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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ZdZdZdZ d Z!d!Z"d"Z#d#Z$dZ%d$Z&d%d& Z'd'd( Z(d)d* Z)d+d, Z*d-d. Z+d/d0 Z,e(ddddddde*e*e*e*e)e)e*e,fZ-d1d2 Z.d3d4 Z/d5d6 Z0d;d7d8Z1d;d9d:Z2dS )<    Nc                   @   s   e Zd ZdS )errorN)__name__
__module____qualname__ r   r   Y/home/lily/lilypond-2.24.4/release/binaries/mingw/lilypond/lilypond-2.24.4/python/midi.pyr   -   s    r                        x   y   z   {   |   }   ~                              	       !   /   Q   T   X   Y   `      c                 C   s2   d}| dkr|| d@  d> }| } | dks||  S )Nr   r   r   r   r   )nextbytegetbytesumr   r   r   _get_variable_length_number_   s   r,   c                 C   s   t d)Nz/the first midi command in the track is a repeat)r   statusr)   r*   r   r   r   _first_command_is_repeatg      r/   c                 C   s   | |fS Nr   r-   r   r   r   _read_two_bytesk   r0   r2   c                 C   s   | || fS r1   r   r-   r   r   r   _read_three_byteso   s   r3   c                    s&   t |  }d fddt|D S )N c                 3   s    | ]}t   V  qd S r1   )chr).0ir*   r   r   	<genexpr>u   s    z_read_string.<locals>.<genexpr>)r,   joinrange)r)   r*   lengthr   r8   r   _read_strings   s   
r=   c                 C   s(   | dkr| |t | |fS | t ||fS )Nr(   )r=   r-   r   r   r   _read_f0_bytex   s   r>   c                 c   s    t td| }|j}d}d}z2|D ],}|t||7 }|r&||kr& W d S | }|dkr2|}| }|t|d?  |||fV  qW d S  tyU   ttt| t	dw )NBr   r   r   z-a track ended in the middle of a MIDI command)
iterarray__next__r,   _read_midi_eventStopIterationprintlenlistr   )data
clocks_maxZdataiterr*   timer.   r)   r   r   r   _parse_track_body   s(   	rK   c                 C   s   | ||d  |krt d|| ||d  f ztd| |d |d  \}W n tj y7   t d| w |d | }| |d | } t| |krRt d| | |fS )Nr   zexpected %r, got %rz>Ir   z:the %s header is truncated (may be an incomplete download)z3the %s is truncated (may be an incomplete download))r   structunpackrF   )rH   postypemagicr<   endposr   r   r   _parse_hunk   s    "rR   c                 c   sJ    |dkrt d| t|D ]}t| |dd\}}tt||V  qd S )N   ztoo many tracks: %dtrack   MTrk)r   r;   rR   rG   rK   )midirN   
num_tracksrI   r7   Z	trackdatar   r   r   _parse_tracks   s   rX   c                 C   s    t | ddd\}}tt||S )Nr   rT   rU   )rR   rG   rK   )rT   rI   Z
track_bodyendr   r   r   parse_track   s   rZ   c                 C   sl   t | ddd\}}ztd|d d \}}}W n tjy$   tdw tt| |||}||d f|fS )Nr   files   MThdz>3Hr   zthe file header is too shortr   )rR   rL   rM   r   rG   rX   )rV   rI   headerZfirst_track_posformatrW   ZdivisionZtracksr   r   r   parse   s   r^   r1   )3rA   rL   	Exceptionr   ZNOTE_OFFZNOTE_ONZPOLYPHONIC_KEY_PRESSUREZCONTROLLER_CHANGEZPROGRAM_CHANGEZCHANNEL_KEY_PRESSUREZ
PITCH_BENDZALL_SOUND_OFFZRESET_ALL_CONTROLLERSZLOCAL_CONTROLZALL_NOTES_OFFZOMNI_MODE_OFFZOMNI_MODE_ONZMONO_MODE_ONZPOLY_MODE_ONZSEQUENCE_NUMBERZ
TEXT_EVENTZCOPYRIGHT_NOTICEZSEQUENCE_TRACK_NAMEZINSTRUMENT_NAMEZLYRICZMARKERZ	CUE_POINTZPROGRAM_NAMEZDEVICE_NAMEZMIDI_CHANNEL_PREFIXZ	MIDI_PORTZEND_OF_TRACKZ	SET_TEMPOZSMTPE_OFFSETZTIME_SIGNATUREZKEY_SIGNATUREZXMF_PATCH_TYPE_PREFIXZSEQUENCER_SPECIFIC_META_EVENTZ
META_EVENTr,   r/   r2   r3   r=   r>   rC   rK   rR   rX   rZ   r^   r   r   r   r   <module>   s   (	

