
    &h#z                        % S r SSKJr  SSKrSSKrSSKJrJrJrJ	r	J
r
JrJrJr  SSKrSSKrSrS rS rS$S jrS$S	 jrS
 r " S S5      r\" 5       r\ " S S5      5       r " S S5      rS%S\\R6                     4S jjrS\\R:                  \\\R6                  4   4   4S jr " S S5      r S r!S r"S r#S&S jr$\%S:X  a  Sr&\
\'   \(S'    \'" \RR                  S   5      r&S\RR                  ;   d  S\RR                  ;   a	  \" \&5        OXS \RR                  ;   d  S!\RR                  ;   a	  \" \&5        O/S"\RR                  ;   d  S#\RR                  ;   a  \" 5         O\#" 5         \RV                  " 5         gg! \* a    Sr& Nf = f)'zpygame.examples.midi

midi input, and a separate example of midi output.

By default it runs the output example.

python -m pygame.examples.midi --output
python -m pygame.examples.midi --input
python -m pygame.examples.midi --input
    )	dataclassN)AnyDictListLiteralOptionalSetTupleUnion	slategrayc                      [         R                  R                  5         [        5         [         R                  R	                  5         g N)pygamemidiinit_print_device_infoquit     L/var/www/auris/envauris/lib/python3.13/site-packages/pygame/examples/midi.pyprint_device_infor      s(    
KK
KKr   c            	          [        [        R                  R                  5       5       HM  n [        R                  R	                  U 5      nUu  p#pEnSnU(       a  SnU(       a  Sn[        SXX6U4-  5        MO     g )N z(input)z(output)z/%2i: interface :%s:, name :%s:, opened :%s:  %s)ranger   r   	get_countget_device_infoprint)irinterfnameinputoutputopenedin_outs           r   r   r      sm    6;;((*+KK''*01-ufFF=$/0	
 ,r   c                    [         R                  " 5         [        R                  R                  5         [	        5         U c  [        R                  R                  5       nOU n[        SU S35        [        R                  R                  U5      n[         R                  R                  S5        SnU(       Ga   [        R                  R                  5       nU H{  nUR                  [         R                  4;   a  SnUR                  [         R                  4;   a  SnUR                  [        R                  R                  4;   d  Mp  [        U5        M}     UR!                  5       (       ab  UR#                  S5      n[        R                  R%                  XbR&                  5      nU H"  n[        R                  R)                  U5        M$     U(       a  GM   A[        R                  R+                  5         g )Nzusing input_id ::)   r(   TF
   )pgr   r   r   r   get_default_input_idr   Inputdisplayset_modeeventgettypeQUITKEYDOWNMIDIINpollreadmidis2events	device_idpostr   )	r8   input_idr   goingeventsemidi_eventsmidi_evsm_es	            r   
input_mainrA   0   sR   GGI
KK;;335	XJa
()(#AJJE
!!#Avv"''"vv"**%vv&++,,--a  6688&&*K{{//[[IH!!#&   %$ 	

KKr   c                 :   SnUnSnSn[        [        R                  [        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                   [        R"                  [        R$                  [        R&                  [        R(                  [        R*                  [        R,                  [        R.                  [        R0                  [        R2                  /U5      n[        R4                  " 5         [6        R8                  R5                  5         [;        5         U c  [6        R8                  R=                  5       nOU n[?        SU S35        [6        R8                  RA                  US5      n URC                  U5        [E        X45      n[        RF                  RI                  URJ                  RL                  5      n	U	RO                  [P        5        [        RF                  RS                  5         [        RT                  " U	RW                  5       5      n
U
RO                  [P        5        / nURY                  XU5        [        RF                  R[                  U5        [        RT                  " U	RW                  5       5      nUR]                  U5        [        R^                  Ra                  [        Rb                  5        Sn[e        5       n [        R^                  Rg                  5       nURh                  [        Rj                  :X  af  URm                  URn                  5      u  nn  nU(       a;  X;  a6  URq                  U5        URs                  UU5        URu                  U5        GOzSnGOvURh                  [        Rv                  :X  a>  U(       a5  URy                  U5        UR{                  U5        UR}                  U5        SnGOURh                  [        R~                  :X  a  GO0URh                  [        R                  :X  al  UR                  [        R                  :X  a  O X_R                     u  nnUU;  a4  URq                  U5        URs                  UU5        URu                  U5        OpURh                  [        R                  :X  aR   X_R                     u  nnUU;   a:  UU:w  a4  UR{                  U5        URy                  US5        UR}                  U5        / nURY                  XU5        [        RF                  R[                  U5        GMN  A[6        R8                  R                  5         g! [         a     Nbf = f! [         a     Nrf = f! A[6        R8                  R                  5         f = f)aa  Execute a musical keyboard example for the Church Organ instrument

This is a piano keyboard example, with a two octave keyboard, starting at
note F3. Left mouse down over a key starts a note, left up stops it. The
notes are also mapped to the computer keyboard keys, assuming an American
English PC keyboard (sorry everyone else, but I don't know if I can map to
absolute key position instead of value.) The white keys are on the second
row, TAB to BACKSLASH, starting with note F3. The black keys map to the top
row, '1' to BACKSPACE, starting with F#3. 'r' is middle C. Close the
window or press ESCAPE to quit the program. Key velocity (note
amplitude) varies vertically on the keyboard image, with minimum velocity
at the top of a key and maximum velocity at bottom.

Default Midi output, no device_id given, is to the default output device
for the computer.

   5      Nzusing output_id :r'   r   )Fmake_key_mappingr*   K_TABK_1K_qK_2K_wK_3K_eK_rK_5K_tK_6K_yK_uK_8K_iK_9K_oK_0K_pK_LEFTBRACKETK_EQUALSK_RIGHTBRACKETK_BACKSPACEK_BACKSLASHr   r   r   r   get_default_output_idr   Outputset_instrumentKeyboardr-   r.   rectsizefillBACKGROUNDCOLORflipSurfaceget_sizedrawupdatemap_regionsr/   set_blockedMOUSEMOTIONsetwaitr1   MOUSEBUTTONDOWNget_atposkey_downnote_onaddMOUSEBUTTONUPnote_offkey_upremover2   r3   keyK_ESCAPEKeyErrorKEYUPr   )r8   CHURCH_ORGAN
instrument
start_noten_noteskey_mappingportmidi_outkeyboardscreen
backgrounddirty_rectsregions
mouse_noteon_notesr=   velocity__notes                      r   output_mainr   X   s3   V LJJG"HHFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFKKNNNN1	
4 	7K< GGI
KK{{002	dV1
%&{{!!$*HB
+J0$$X]]%7%78O$


ZZ 12
(f+6


+&**V__./W%
R^^,
5Avv+++/6~~aee/D,
Hb"*"<%%j1$$Z:LL,!"J2+++%%j1OOJ/OOJ/!"J277"2::%55BKK'+%0%7ND( 8+ ))$/ ((x8 T*288#.*551HD" x'DJ,> - ))$2 -KMM&k:JJk*W Z /       sW   J8W9 W AW9 2W) A6W9 
W&#W9 %W&&W9 )
W63W9 5W66W9 9!Xc                 B    0 n[        U 5       H  u  p4X-   S4X$'   M     U$ )zEReturn a dictionary of (note, velocity) by computer keyboard key code   )	enumerate)keysr   mappingr   r{   s        r   rF   rF      s*    GD/", "Nr   c                   0    \ rS rSrSrS rS rS rS rSr	g)	NullKeyi  zA dummy key that ignores events passed to it by other keys

A NullKey instance is the left key instance used by default
for the left most keyboard key.

c                     g r   r   selfs    r   _right_white_downNullKey._right_white_down
      r   c                     g r   r   r   s    r   _right_white_upNullKey._right_white_up  r   r   c                     g r   r   r   s    r   _right_black_downNullKey._right_black_down  r   r   c                     g r   r   r   s    r   _right_black_upNullKey._right_black_up  r   r   r   N)
__name__
__module____qualname____firstlineno____doc__r   r   r   r   __static_attributes__r   r   r   r   r     s    r   r   c                      \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \R                  \S'   \
\S'   \
\S	'   \\   \S
'   \\\\\R                  4   4   \S'   \\\\\R                  4   4   \S'   \R                  \S'   \\\\\\R                  S4   4   4   \S'   \\\\\\R                  S4   4   4   \S'   \\\\\\R                  S4   4   4   \S'   \\\\\\R                  S4   4   4   \S'   Srg)KeyDatai  z8Used for passing in data to subclasses of the Key class.is_white_keyc_widthc_heightc_down_state_initialc_down_state_rect_initialc_notify_down_methodc_notify_up_method	c_updatesc_event_down
c_event_upc_image_stripNc_event_right_white_downc_event_right_white_upc_event_right_black_downc_event_right_black_upr   )r   r   r   r   r   bool__annotations__intr*   Rectstrr	   r   r   r
   rh   r   r   r   r   r   r   r     s   BLM!ww&3xsE#rww,//00S%RWW--..::"3c5$3G.G(H#HII eCrww}1E,E&F!FGG"3c5$3G.G(H#HII eCrww}1E,E&F!FGGr   r   c                   j    \ rS rSr% Sr\\S'   SS jrS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)Keyi/  ac  A key widget, maintains key state and draws the key's image

Constructor arguments:
ident - A unique key identifier. Any immutable type suitable as a key.
posn - The location of the key on the display surface.
key_left - Optional, the adjacent white key to the left. Changes in
    up and down state are propagated to that key.

A key has an associated position and state. Related to state is the
image drawn. State changes are managed with method calls, one method
per event type. The up and down event methods are public. Other
internal methods are for passing on state changes to the key_left
key instance.

key_dataNc                    Uc  [         n[        R                  " US   US   U R                  R                  U R                  R
                  5      nX@l        U R                  R                  U l        U R                  R                  U l
        Xl        [        U5      U l        [        X0R                  R                  5      U l        [        X0R                  R"                  5      U l        X0l        [        R                  " UR(                  UR*                  S-
  U R                  R                  S5      U l        U R                  R.                  R1                  U 5        U R                  R2                  U l        g)zbReturn a new Key instance

The initial state is up, with all adjacent keys to the right also
up.

Nr   r(   r)   )null_keyr*   r   r   r   r   rc   r   _stater   _source_rect_identhash_hashgetattrr   _notify_downr   
_notify_up	_key_leftleftbottom_background_rectr   rv   r   is_white)r   identposnkey_leftrc   s        r   __init__Key.__init__B  s    HwwtAwQ)>)>@V@VW	mm88 MMCC%[
#Hmm.P.PQ!(MM,L,LM! "IIt{{R')>)>!
 	##D)22r   c                     U R                   R                  U R                     u  U l        nUb<  Xl        U R                   R                  R                  U 5        U R                  5         gg)z1Signal that this key has been depressed (is down)N)r   r   r   r   r   rv   r   r   source_rects     r   downKey.downZ  sX     $(==#=#=dkk#J [" +MM##''- #r   c                     U R                   R                  U R                     u  U l        nUb<  Xl        U R                   R                  R                  U 5        U R                  5         gg)z.Signal that this key has been released (is up)N)r   r   r   r   r   rv   r   r   s     r   upKey.upc  sV     $(==#;#;DKK#H [" +MM##''-OO #r   c                     U R                   R                  U R                     u  U l        nUb,  Xl        U R                   R                  R                  U 5        gg)zSignal that the adjacent white key has been depressed

This method is for internal propagation of events between
key instances.

N)r   r   r   r   r   rv   r   s     r   r   Key._right_white_downl  L     $(==#I#I$++#V [" +MM##''- #r   c                     U R                   R                  U R                     u  U l        nUb,  Xl        U R                   R                  R                  U 5        gg)zSignal that the adjacent white key has been released

This method is for internal propagation of events between
key instances.

N)r   r   r   r   r   rv   r   s     r   r   Key._right_white_upy  L     $(==#G#G#T [" +MM##''- #r   c                     U R                   R                  U R                     u  U l        nUb,  Xl        U R                   R                  R                  U 5        gg)zSignal that the adjacent black key has been depressed

This method is for internal propagation of events between
key instances.

N)r   r   r   r   r   rv   r   s     r   r   Key._right_black_down  r   r   c                     U R                   R                  U R                     u  U l        nUb,  Xl        U R                   R                  R                  U 5        gg)zSignal that the adjacent black key has been released

This method is for internal propagation of events between
key instances.

N)r   r   r   r   r   rv   r   s     r   r   Key._right_black_up  r   r   c                 4    U R                   UR                   :H  $ )zTrue if same identifiers)r   )r   others     r   __eq__
Key.__eq__  s     {{ell**r   c                     U R                   $ )zReturn the immutable hash value)r   r   s    r   __hash__Key.__hash__  s     zzr   c                 v    SU R                   U R                  R                  U R                  R                  4-  $ )z4Return the key's identifier and position as a stringz<Key %s at (%d, %d)>)r   rc   topr   r   s    r   __str__Key.__str__  s*     &diimmTYY^^(TTTr   c                     UR                  X R                  U R                  5        UR                  U R                  R                  U R                  U R
                  5        UR                  U R                  5        g)zuRedraw the key on the surface surf

The background is redrawn. The altered region is added to the
dirty_rects list.

N)blitr   r   r   rc   r   append)r   surfr   r   s       r   rj   Key.draw  sT     			*33T5J5JK		$----tyy$:K:KL499%r   )
r   r   r   r   r   r   r   r   r   rc   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rj   r   r   r   r   r   r   /  sG      30 ....+

U

&r   r   image_rectsc                   ^^^^^^^^^^^^^^^ SnSnUS-  nXV-  nUS-  nXX-  n	Xh-  n
XZ-  nUmUS   mU mUmUS   R                   u  mmT(       a  SnOSnSU S3mSU S3mXEUS   40mXTUS   40mXDS4XUS40mTR                  5       mTR                  5       mTR                  5       m[        U5      S	:  aP  XrS	   4TU'   XbS   4TU'   US4TU'   UUS	   4TU'   US4TU'   UUS   4TU'   US4TU'   US4TU'   US4TU'   US4TU'   [        U5      S
:  a  XS   4TU'   XS   4TU
'   XS
   4TU	'   XS
   4TU'   U
S4TU'   UUS   4TU	'   US4TU
'   XS   4TU'   XS
   4TU'   U	US   4TU'   U
US
   4TU'   UUS   4TU'   XBS   4TU'   UUS   4TU	'   UUS   4TU
'   XrS	   4TU'    " UUUUUUUUUUUUUUU4S jS[        5      nU$ )a  Return a keyboard key widget class

Arguments:
updates - a set into which a key instance adds itself if it needs
    redrawing.
image_strip - The surface containing the images of all key states.
image_rects - A list of Rects giving the regions within image_strip that
    are relevant to this key class.
is_white_key (default True) - Set false if this is a black key.

This function automates the creation of a key widget class for the
three basic key types. A key has two basic states, up or down (
depressed). Corresponding up and down images are drawn for each
of these two states. But to give the illusion of depth, a key
may have shadows cast upon it by the adjacent keys to its right.
These shadows change depending on the up/down state of the key and
its neighbors. So a key may support multiple images and states
depending on the shadows. A key type is determined by the length
of image_rects and the value of is_white.

r   r(   whiteblack_right__down_upN            c                   `   > \ rS rSr\"  Y Y Y Y  Y Y
 Y Y Y Y Y	 Y Y Y Y5      rSrg)key_class.<locals>.OurKeyiS  r   N)r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   r   OurKeyr  S  s:     % $"$"
r   r	  )rd   copylenr   )updatesimage_stripr   r   down_state_nonedown_state_selfdown_state_whitedown_state_self_whitedown_state_blackdown_state_self_blackdown_state_white_blackdown_state_all	key_colorr	  r   r   r   r   r   r   r   r   r   r   r   r   r   r   s      `          @@@@@@@@@@@@@@r   	key_classr    sf   P OO&!++>'1,+>-@$=N + +AIM#A++GX 		$YKu5"9+S1( 	;q>:8L 	;q>:6J 	4040Q 6::<7<<>5::<
;!*?Q)P%&-=1~,N
()5Et4L 1!N5
 1 5DT3J/0N9
45 7G5M !12;PRV:W !674Dd3K/09NPT8U45
;!*?Q)P%&0>A/O+,-=1~,N
()&<!n%M
>"6Ld5S !12N;
 !67 ;KD9Q562GUV1X~.5EST~4V 1!N5
 1
 #N6
 !12
 N;
 !67 5DQR^3T/0N9
45
 N:
56 3HUV1X~.
 
 
 
& Mr   returnc                     [         R                  R                  [         R                  R                  [        5      5      S   n [         R                  R                  U SS5      nSnSnSnSn[        R                  R                  U5      n/ SQn0 n[        S	5       H"  n	[        R                  " X-  SXE5      XU	   '   M$     [        S	[        U5      5       H"  n	[        R                  " X-  SX#5      XU	   '   M$     Xh4$ )
a  Return a keyboard keys image strip and a mapping of image locations

The return tuple is a pygame.Surface and a dictionary keyed by key name and valued by a pygame.Rect.

This function encapsulates the constants relevant to the keyboard image
file. There are five key types. One is the black key. The other four
white keys are determined by the proximity of the black keys. The plain
white key has no black key adjacent to it. A white-left and white-right
key has a black key to the left or right of it respectively. A white-center
key has a black key on both sides. A key may have up to six related
images depending on the state of adjacent keys to its right.

r   datazmidikeys.png*         ^   )
black none
black self
white none
white selfwhite self-whitewhite-left nonewhite-left selfwhite-left blackwhite-left self-blackwhite-left self-whitewhite-left allwhite-center nonewhite-center selfwhite-center blackwhite-center self-blackwhite-center self-whitewhite-center allwhite-right nonewhite-right selfwhite-right self-whiter  )ospathsplitabspath__file__joinr*   imageloadr   r   r  )
my_dir
strip_filewhite_key_widthwhite_key_heightblack_key_widthblack_key_heightstripnamesrectsr   s
             r   
key_imagesrD  i  s     WW]]277??845a8Fffn=JOOHHMM*%EE, E1X''O
Ah  1c%j!''O
Ah " <r   c                      \ rS rSr% Sr\" 5       u  rr\S   R                  u  r	r
\S   R                  u  rr\" 5       r\\   \S'   \" \\\S   \S   /S5      r\" \\\S   \S   \S	   /5      r\" \\\S
   \S   \S   \S   \S   \S   /5      r\" \\\S   \S   \S   \S   \S   \S   /5      r\" \\\S   \S   \S   /5      rS\S\4S jrS#S jrS rS rS  rS! rS"rg)$rb   i  aK  Musical keyboard widget

Constructor arguments:
start_note: midi note value of the starting note on the keyboard.
n_notes: number of notes (keys) on the keyboard.

A Keyboard instance draws the musical keyboard and maintains the state of
all the keyboard keys. Individual keys can be in a down (depressed) or
up (released) state.

r!  r  _updatesr   Fr"  r#  r$  r%  r(  r&  r'  r)  r*  r+  r.  r,  r-  r/  r0  r1  r2  r   r   c                 H    Xl         X-   S-
  U l        U R                  5         g)z/Return a new Keyboard instance with n_note keysr(   N)_start_note	_end_note	_add_keys)r   r   r   s      r   r   Keyboard.__init__  s#     &#-1r   Nc                    S/S-  nU R                   nU R                  nU R                  S-  nSnS=pg[        U5      (       a  SnOXd-  nSn[	        X#S-   5       H  n	U	n
[        U	5      (       a  U(       aB  X:X  d  [        U	S-   5      (       a  U R                  XU4U5      nOVU R                  XU4U5      nOAX:X  d  [        U	S-   5      (       a  U R                  XU4U5      nOU R                  XU4U5      nSnX`R                  -  nUnOU R                  XU-
  U4U5      nSnXU	'   M     Xl        XR                     nUc  SnOUR                  R                  nU R                  n[        R                   " SSX5      U l        g)zNPopulate the keyboard with key instances

Set the _keys and rect attributes.

N   r  r   TFr(   )rH  rI  r?  r   r   WhiteKeyWhiteKeyLeftWhiteKeyRightWhiteKeyCenterr=  BlackKey_keysrc   rightr>  r*   r   )r   key_mapr   end_noteblack_offsetprev_white_keyxyis_prev_whiter   r   r{   the_keykb_width	kb_heights                  r   rJ  Keyboard._add_keys  s    /3Vc\%%
>>++q0	
## MA!M*l3DED!! '<q+A+A"mmEq6>J"//1v~N'<q+A+A"00AO"11%QP $)))!$mmE,<a+@.Q %DM' 4( 
..)?H||))H))	GGAq(6	r   c                 ^   U R                   n/ n[        U R                  U R                  S-   5       HQ  nU R                  U   nUb*  UR
                  (       a  [        XUR                  U5        M?  UR                  XE45        MS     U H!  u  pEUc  M
  [        XUR                  U5        M#     g)zDraw the key regions onto surface regions.

Regions must have at least 3 byte pixels. Each pixel of the keyboard
rectangle is set to the color (note, velocity, 0). The regions surface
must be at least as large as (0, 0, self.rect.left, self.rect.bottom)

r(   N)	r@  r   rH  rI  rS  r   fill_regionrc   r   )r   r   cutoff
black_keysr   r{   s         r   rl   Keyboard.map_regions!  s     &&
$**DNNQ,>?D**T"C3<<G388V<!!4+. @ $IDG388V< $r   c                 ~    U R                   nU(       a*  UR                  5       R                  XU5        U(       a  M)  gg)z Redraw all altered keyboard keysN)rF  poprj   )r   r   r   r   changed_keyss        r   rj   Keyboard.draw9  s0     }}##DkB lr   c                 J    U R                   U   nUb  UR                  5         gg)z Signal a key down event for noteN)rS  r   r   r   r{   s      r   rt   Keyboard.key_down@  s#    jj?HHJ r   c                 J    U R                   U   nUb  UR                  5         gg)zSignal a key up event for noteN)rS  r   rj  s      r   ry   Keyboard.key_upF  s#    jj?FFH r   )rI  rS  rH  rc   )r  N) r   r   r   r   r   rD  _image_strip_rectsrd   r=  r>  r?  r@  ro   rF  r	   r   r   r  rR  rN  rO  rQ  rP  r   r   rJ  rl   rj   rt   ry   r   r   r   r   rb   rb     s   
 &<L&(.|(<(A(A%O%(.|(<(A(A%O%Hc#h ,!5vl7K LeH 		vl3V<N5OPH
 $%$%*+%&*+#$	
L &'&',-'(,-%&	
N %&%&+,	
M3  47l=0Cr   rb   c           	          Uu  pEpgUc  UnUS-  nU R                  USS4XEXh45        U R                  USS4XEU-   Xh45        U R                  USS4XESU-  -   XgSU-  -
  45        g)a  Fill the region defined by rect with a (note, velocity, 0) color

The velocity varies from a small value at the top of the region to
127 at the bottom. The vertical region 0 to cutoff is split into
three parts, with velocities 42, 84 and 127. Everything below cutoff
has velocity 127.

Nr  r  r   T   r   r  )re   )	r   r   rc   rb  rY  rZ  widthheightdelta_heights	            r   ra  ra  M  s     A%~Q;LLL$Au ;<LL$A$4e JKLL	sAL 00%!lBR9RSr   c                 0    / SQnXS-
  [        U5      -     $ )z*True if note is represented by a white key)TFTTFTFTTFTF   )r  )r   key_patterns     r   r   r   b  s"    K r	S%5566r   c                  F    [        S5        [        S5        [        S5        g )Nz)--input [device_id] : Midi message loggerz*--output [device_id] : Midi piano keyboardz$--list : list available midi devices)r   r   r   r   usagery  v  s    	
56	
67	
01r   c                     U S:X  a  [        U5        gU S:X  a  [        U5        gU S:X  a  [        5         g[        SU  S35      e)aI  Run a Midi example

Arguments:
mode - if 'output' run a midi keyboard output example
          'input' run a midi event logger input example
          'list' list available midi devices
       (default 'output')
device_id - midi device number; if None then use the default midi input or
            output device for the system

r"   r#   listzUnknown mode option ''N)rA   r   r   
ValueError)moder8   s     r   mainr  |  sE     w9		I	0a899r   __main__r8   z--inputz-iz--outputz-oz--listz-lr   )T)r#   N),r   dataclassesr   sysr3  typingr   r   r   r   r   r	   r
   r   r   r*   pygame.midirf   r   r   rA   r   rF   r   r   r   r   r   r  rh   r   rD  rb   ra  r   ry  r  r   r8   r   r   argvr}  r   r   r   r   <module>r     s  	 " 
 	 H H H   
"%P_D * 9 H H H(J& J&Zjbgg jZ5E"**d3<&889 5pi iX*7(2:. z#Ix}#%	 CHH 09	sxx	4388#3I	SXX	!1GGI#   	s   E: :FF