
    ̺i8@                     :   S r SSKrSSKrSSKJr  SSKJr  SSKJrJ	r	  Sq
 " S S	\5      rS
 r0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$_S%S&_S'S(_S)S*_S+S,_S-S.S/S0S1S2S3S4S5S6S7S8S9S:.Er\" \5      rS;S<S=S>S?.r\" \5      rS@ rSA rSB rSC rSD rSE r\SF 5       rSG rSH r " SI SJ5      r " SK SL\5      r " SM SN\5      r " SO SP\5      r " SQ SR\5      r " SS ST\5      r  " SU SV\5      r! " SW SX\5      r" " SY SZ\5      r# " S[ S\\5      r$ " S] S^\5      r% " S_ S`\5      r& " Sa Sb\5      r' " Sc Sd\5      r( " Se Sf\5      r) " Sg Sh\5      r* " Si Sj\5      r+ " Sk Sl\5      r,Sm r-0 r.0 r/Sn r0\0" 5         StSo jr1 " Sp Sq\5      r2 " Sr Ss\25      r3g)uaA  
Meta messages for MIDI files.

TODO:
     - what if an unknown meta message is implemented and someone depends on
       the 'data' attribute?
     - is 'type_byte' a good name?
     - 'values' is not a good name for a dictionary.
     - type and value safety?
     - copy().
     - expose _key_signature_encode/decode?
    N)contextmanager)Integral   )BaseMessage
check_timelatin1c                       \ rS rSrSrSrg)KeySignatureError   z@Raised when key cannot be converted from key/mode to key letter  N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       R/var/www/piano.thomer.com/venv/lib/python3.13/site-packages/mido/midifiles/meta.pyr
   r
      s    Kr   r
   c                 X    U R                  5        VVs0 s H  u  pX!_M	     snn$ s  snnf )z!Return value: key for dictionary.)items)tablekeyvalues      r   _reverse_tabler       s$    +0;;=9=<CEJ=999s   &)r   Cb)r   Gb)r   Db)r   Ab)r   Eb)r   Bb)r   F)r   r   C)   r   G)r   r   D)   r   A)   r   E)   r   B)   r   zF#)   r   zC#)r   r*   Abm)r   r*   EbmBbmFmCmGmDmAmEmBmzF#mzC#mzG#mzD#mzA#m))r   r*   )r!   r*   )r#   r*   )r%   r*   )r'   r*   )r   r*   )r*   r*   )r   r*   )r-   r*   )r/   r*   )r1   r*   )r3   r*   )r4   r*         gQ=@   )r   r*   r   r-   c                 "   SSSSSSS.n X    u  p4 [        R                  " X15      n[        R                  " XF5      S	   $ ! [          a  n[        SU  35      UeS nAff = f! [        R
                   a  n[        UR                  6 UeS nAff = f)
Nr&   HhLlbBhHlL)byteshortlongubyteushortulongzinvalid integer type r   )KeyError
ValueErrorstructpackunpackerrorargs)to_typenformatspack_formatunpack_formatkepackederrs           r   signedr]   P   s    GD%,%5"-[,}}]3A66  D0	:;CD << -#((#,-s.   A .A" 
AAA"B6B		Bc                      [        SU  3U5      $ )Nu)r]   )rU   rV   s     r   unsignedr`   e   s    AgY-##r   c                 0   [        U [        5      (       a  U S:  a  [        S5      e/ nU (       a"  UR                  U S-  5        U S-  n U (       a  M"  U(       a<  UR	                  5         [        [        U5      S-
  5       H  nX==   S-  ss'   M     U$ S/$ )zEncode variable length integer.

Returns the integer as a list of bytes,
where the last byte is < 128.

This is used for delta times and meta message payload
length.
r   z+variable int must be a non-negative integer   r4   r*      )
isinstancer   rO   appendreverserangelen)r   bytesis      r   encode_variable_intrk   i   s     eX&&%!)FGGE
UT\"! %  s5zA~&AHH 's
r   c                     [        [        U 5      S-
  5       H  nX==   S-  ss'   M     SnU  H  nUS-  nX!-  nM     U$ )z]Decode a list to a variable length integer.

Does the opposite of encode_variable_int(value)
r*   ir   r4   )rg   rh   )r   rj   vals      r   decode_variable_intrn      sM    
 3u:>"E #
C	  Jr   c                 P    [        [        U R                  [        5      5      5      $ N)list	bytearrayencode_charset)strings    r   encode_stringrv      s    	&--1233r   c                 >    [        U 5      R                  [        5      $ rp   )rr   decodert   )datas    r   decode_stringrz      s    T?!!(++r   c              #   (   #    [         nU q S v   Uq g 7frp   )rt   )tmp_charsetolds     r   meta_charsetr~      s      CH	Hs   c                     [        U [        5      (       d  [        S5      eXs=::  a  U::  d  O  [        SU SU 35      eg )Nzattribute must be an integerzattribute must be in range z..)rd   r   	TypeErrorrO   )r   lowhighs      r   	check_intr      sD    eX&&677!T!6se2dVDEE "r   c                 D    [        U [        5      (       d  [        S5      eg )Nzattribute must be a string)rd   strr   )r   s    r   	check_strr      s     eS!!455 "r   c                       \ rS rSrS rSrg)MetaSpec   c                     g rp   r   selfnamer   s      r   checkMetaSpec.check       r   r   N)r   r   r   r   r   r   r   r   r   r   r      s    r   r   c                   6    \ rS rSrSrS/rS/rS rS rS r	Sr
g)	MetaSpec_sequence_number   r   numberc                 X    [        U5      S:X  a  SUl        g US   S-  US   -  Ul        g )Nr      r*   )rh   r   r   messagery   s      r   rx   MetaSpec_sequence_number.decode   s.    t9> GN"1gld1g5GNr   c                 >    UR                   S-	  UR                   S-  /$ )Nr      )r   r   r   s     r   rs   MetaSpec_sequence_number.encode   s    !#W^^d%:;;r   c                     [        USS5        g )Nr   i  r   r   s      r   r   MetaSpec_sequence_number.check   s    %F#r   r   Nr   r   r   r   	type_byte
attributesdefaultsrx   rs   r   r   r   r   r   r   r      s$    IJsH6<$r   r   c                   6    \ rS rSrSrS/rS/rS rS rS r	Sr
g	)
MetaSpec_text   r*   text c                 $    [        U5      Ul        g rp   )rz   r   r   s      r   rx   MetaSpec_text.decode       $T*r   c                 ,    [        UR                  5      $ rp   )rv   r   r   s     r   rs   MetaSpec_text.encode       W\\**r   c                     [        U5        g rp   )r   r   s      r   r   MetaSpec_text.check   s
    %r   r   Nr   r   r   r   r   r      s$    IJtH++r   r   c                       \ rS rSrSrSrg)MetaSpec_copyright   r   r   Nr   r   r   r   r   r   r   r   r   r   r          Ir   r   c                   0    \ rS rSrSrS/rS/rS rS rSr	g)	MetaSpec_track_name   r-   r   r   c                 $    [        U5      Ul        g rp   )rz   r   r   s      r   rx   MetaSpec_track_name.decode   r   r   c                 ,    [        UR                  5      $ rp   )rv   r   r   s     r   rs   MetaSpec_track_name.encode   r   r   r   N
r   r   r   r   r   r   r   rx   rs   r   r   r   r   r   r      s    IJtH++r   r   c                       \ rS rSrSrSrg)MetaSpec_instrument_name   r/   r   Nr   r   r   r   r   r      r   r   r   c                       \ rS rSrSrSrg)MetaSpec_lyrics   r1   r   Nr   r   r   r   r   r      r   r   r   c                       \ rS rSrSrSrg)MetaSpec_marker   r3   r   Nr   r   r   r   r   r      r   r   r   c                       \ rS rSrSrSrg)MetaSpec_cue_marker   r4   r   Nr   r   r   r   r   r      r   r   r   c                       \ rS rSrSrSrg)MetaSpec_device_name   	   r   Nr   r   r   r   r   r      r   r   r   c                   6    \ rS rSrSrS/rS/rS rS rS r	Sr
g	)
MetaSpec_channel_prefix       channelr   c                     US   Ul         g Nr   r   r   s      r   rx   MetaSpec_channel_prefix.decode  s    q'r   c                     UR                   /$ rp   r   r   s     r   rs   MetaSpec_channel_prefix.encode  s      r   c                     [        USS5        g Nr   r   r   r   s      r   r   MetaSpec_channel_prefix.check  s    %D!r   r   Nr   r   r   r   r   r      s$    IJsH"!"r   r   c                   6    \ rS rSrSrS/rS/rS rS rS r	Sr
g	)
MetaSpec_midi_porti  !   portr   c                 F    [        U5      S:X  a  SUl        g US   Ul        g r   )rh   r   r   s      r   rx   MetaSpec_midi_port.decode  s!    t9> GL7GLr   c                     UR                   /$ rp   )r   r   s     r   rs   MetaSpec_midi_port.encode  s    ~r   c                     [        USS5        g r   r   r   s      r   r   MetaSpec_midi_port.check  s    %C r   r   Nr   r   r   r   r   r     s$    IJsH#!r   r   c                   ,    \ rS rSrSr/ r/ rS rS rSr	g)MetaSpec_end_of_tracki   /   c                     g rp   r   r   s      r   rx   MetaSpec_end_of_track.decode%  r   r   c                     / $ rp   r   r   s     r   rs   MetaSpec_end_of_track.encode(  s    	r   r   Nr   r   r   r   r   r      s    IJHr   r   c                   6    \ rS rSrSrS/rS/rS rS rS r	Sr
g	)
MetaSpec_set_tempoi,  Q   tempoi  c                 <    US   S-  US   S-  -  US   -  Ul         g )Nr      r*   r   r   r   r   s      r   rx   MetaSpec_set_tempo.decode1  s'    aB47a<8DGDr   c                 <    UR                   nUS-	  US-	  S-  US-  /$ )Nr   r   r   r   )r   r   r   s      r   rs   MetaSpec_set_tempo.encode4  s)    UaZ$.==r   c                     [        USS5        g )Nr   i r   r   s      r   r   MetaSpec_set_tempo.check8  s    %H%r   r   Nr   r   r   r   r   r   ,  s%    IJxHE>&r   r   c                   :    \ rS rSrSr/ SQr/ SQrS rS rS r	Sr
g	)
MetaSpec_smpte_offseti<  T   )
frame_ratehoursminutessecondsframes
sub_frames)r?   r   r   r   r   r   c                     [         US   S-	     Ul        US   S-  Ul        US   Ul        US   Ul        US   Ul        US   Ul        g )Nr   r1      r*   r   r-   r/   )_smpte_framerate_decoder   r   r   r   r  r  r   s      r   rx   MetaSpec_smpte_offset.decodeH  sT    4d1glDa;.q'q'a!!Wr   c                     [         UR                     S-  nX!R                  -  UR                  UR                  UR
                  UR                  /$ )Nr1   )_smpte_framerate_encoder   r   r   r   r  r  )r   r   frame_rate_lookups      r   rs   MetaSpec_smpte_offset.encodeP  sJ    3G4F4FG1L!MM1""	$ 	$r   c                 :   US:X  aE  U[         ;  a:  SR                  [        [         R                  5       5      5      n[	        SU 35      eg US:X  a  [        USS5        g US;   a  [        USS5        g US	:X  a  [        USS5        g US
:X  a  [        USS5        g g )Nr   z, zframe_rate must be one of r   r   r   )r   r   ;   r  r  c   )r  joinsortedkeysrO   r   )r   r   r   valids       r   r   MetaSpec_smpte_offset.checkX  s    <33		&)@)E)E)G"HI #=eW!EFF 4 W_eQ$++eQ#XeQ$\!eQ# "r   r   Nr   r   r   r   r   r   <  s$    IJ #H%$$r   r   c                   :    \ rS rSrSr/ SQr/ SQrS rS rS r	Sr
g	)
MetaSpec_time_signatureig  X   	numeratordenominatorclocks_per_clicknotated_32nd_notes_per_beat)r/   r/   r?   r   c                 Z    US   Ul         SUS   -  Ul        US   Ul        US   Ul        g )Nr   r   r*   r-   r  r   s      r   rx   MetaSpec_time_signature.decodep  s6     G47l#'7 .21g+r   c                     UR                   [        [        R                  " UR                  S5      5      UR
                  UR                  /$ )Nr   )r  intmathlogr  r  r  r   s     r   rs   MetaSpec_time_signature.encodev  s@    !!DHHW00!45((33 	r   c                     US:X  aC  [        USSS-  5        [        R                  " US5      n[        U5      nX4:w  a  [	        S5      eg [        USS5        g )Nr  r*   r   r   z denominator must be a power of 2r   )r   r  r   r  rO   )r   r   r   encodedencoded_ints        r   r   MetaSpec_time_signature.check}  sZ    =  eQS)hhua(Gg,K% !CDD & eQ$r   r   Nr   r   r   r   r  r  g  s$    I1J H6%r   r  c                   6    \ rS rSrSrS/rS/rS rS rS r	Sr
g	)
MetaSpec_key_signaturei  Y   r   r)   c                     [        SUS   5      nUS   n [        X44   Ul        g ! [         aD  nUS:  a  SR	                  [        U5      U5      nOSR	                  X45      n[        U5      UeS nAff = f)NrH   r   r*   r4   z.Could not decode key with {} flats and mode {}z/Could not decode key with {} sharps and mode {})r]   _key_signature_decoder   rN   formatabsr
   )r   r   ry   r   moderZ   msgs          r   rx   MetaSpec_key_signature.decode  s    VT!W%Aw		1/<GK 	1Qw++16#c(D+A ,,2F3,= #C(b0	1s   & 
A4?A//A4c                 H    [         UR                     u  p#[        SU5      U/$ )NrH   )_key_signature_encoder   r`   )r   r   r   r-  s       r   rs   MetaSpec_key_signature.encode  s$    )'++6	%t,,r   c                 6    U[         ;  a  [        SU< 35      eg )Nzinvalid key )r1  rO   r   s      r   r   MetaSpec_key_signature.check  s"    --|E9566 .r   r   Nr   r   r   r   r'  r'    s$    IJuH1-7r   r'  c                   0    \ rS rSrSrS/r/ /rS rS rSr	g)MetaSpec_sequencer_specifici  rb   ry   c                 $    [        U5      Ul        g rp   )tuplery   r   s      r   rx   "MetaSpec_sequencer_specific.decode  s    T{r   c                 ,    [        UR                  5      $ rp   )rq   ry   r   s     r   rs   "MetaSpec_sequencer_specific.encode  s    GLL!!r   r   Nr   r   r   r   r6  r6    s    IJtH#"r   r6  c                 &   U " 5       n[        US5      (       d"  U R                  R                  SS5      nX!l        [	        UR
                  5      S1-  Ul        U[        UR                  '   U[        UR                  '   U[        UR                  '   g )Ntype	MetaSpec_r   time)
hasattrr   replacer=  setr   settable_attributes_META_SPECSr   _META_SPEC_BY_TYPE)klassspecr   s      r   add_meta_specrH    sv    7D4  ~~%%k26	  #4??3vh>D"&K!K		$(tyy!r   c                      [        5       R                  5        H(  u  pU R                  S5      (       d  M  [        U5        M*     g )Nr>  )globalsr   
startswithrH  )r   rG  s     r   _add_builtin_meta_specsrL    s.    ioo'
??;''$ (r   c                      [         U    n[        UR                  US9nUR                  XA5        U$ ! [         a    [        X5      s $ f = f)N)r?  )rD  MetaMessager=  rx   rN   UnknownMetaMessage)	meta_typery   deltarG  r.  s        r   build_meta_messagerR    sR    
9% $))%0 	C
  3!)223s   	2 A
	A
c                   N    \ rS rSrSrSS jrS rS r\rS r	\
S 5       rS rS	rg
)rN  i  Tc                 ^   [         U   n[        U 5      nXS'   U(       d2  U H,  nXdR                  ;  d  M  [        SR	                  U5      5      e   [        UR                  UR                  5       H	  u  pgXuU'   M     SUS'   UR                  5        H  u  pgU R                  Xg5        M     g )Nr=  z0{} is not a valid argument for this message typer   r?  )
rE  varsrC  rO   r+  zipr   r   r   _setattr)r   r=  skip_checkskwargsrG  	self_varsr   r   s           r   __init__MetaMessage.__init__  s     "$'J	 &777$JQQ "# #  t>KD#dO ?	&!<<>KDMM$& *r   c                 d   U(       dJ  U R                   R                  U R                   5      n[        U5      R                  [        U 5      5        U$ SU;   a  US   U R                  :w  a  [        S5      e[        U 5      R                  5       nUR                  U5        U R                   " S0 UD6$ )zReturn a copy of the message

Attributes will be overridden by the passed keyword arguments.
Only message specific attributes can be overridden. The message
type can not be changed.
r=  zcopy must be same message typer   )	__class____new__rU  updater=  rO   copy)r   	overridesr.  attrss       r   ra  MetaMessage.copy  s     ..((8CIT$Z(JY9V#4		#A=>>T
!Y~~&&&r   c                    [         U R                     n[        U 5      nXR                  ;   a(  US:X  a  [	        U5        OUR                  X5        X$U'   g X;   a  [        U S35      e[        U R                   SU 35      e)Nr?  z attribute is read onlyz message has no attribute )rE  r=  rU  rC  r   r   AttributeError)r   r   r   rG  rZ  s        r   rW  MetaMessage._setattr  s    !$)),J	+++v~5!

4'#dO D6)@!ABB 99+7v>@ @r   c                     [         U R                     nUR                  U 5      nSUR                  /[	        [        U5      5      -   U-   $ Nr   )rE  r=  rs   r   rk   rh   )r   rG  ry   s      r   ri   MetaMessage.bytes  sA    !$)),{{4 t~~&)<SY)GG$NOr   c                 ,   US   S:w  a  [        S5      eSn/ nSnU(       aQ  U[        U5      :  aB  US-  nUSU n[        U5      nXS  nU[        U5      :X  a  SnU(       a  U[        U5      :  a  MB  U(       a  [        S5      e[        US   U5      nU$ )	Nr   r   z+bytes does not correspond to a MetaMessage.r   Tr*   Fz)Bad data. Cannot be converted to message.)rO   rh   rn   rR  )cls	msg_bytesscan_endry   flaglength_datalengthr.  s           r   
from_bytesMetaMessage.from_bytes$  s    Q<4JKKx#i.0MH#Ah/K(5FY'DT" x#i.0 HII 1t4
r   c                 H    [         U R                     nUR                  S/-   $ )zUsed by BaseMessage.__repr__().r?  )rE  r=  r   )r   rG  s     r   _get_value_namesMetaMessage._get_value_names7  s!    !$)),&))r   r   N)F)r   r   r   r   is_metar[  ra  rW  __setattr__ri   classmethodrr  ru  r   r   r   r   rN  rN    s=    G',',@" KP  $*r   rN  c                   0    \ rS rSrSS jrS rS rS rSrg)	rO  i=  Nc                 d    Uc  SnO[        U5      n[        U 5      R                  UUUUS.5        g )Nr   )r=  r   ry   r?  )r8  rU  r`  )r   r   ry   r?  r=  rY  s         r   r[  UnknownMetaMessage.__init__>  s8    <D;DT
"	 	r   c                 h    SnUR                  U R                  U R                  U R                  5      $ )Nz2UnknownMetaMessage(type_byte={}, data={}, time={}))r+  r   ry   r?  )r   fmts     r   __repr__UnknownMetaMessage.__repr__J  s&    Bzz$..$))TYY??r   c                      U[        U 5      U'   g rp   )rU  r   s      r   rx  UnknownMetaMessage.__setattr__N  s     !T
4r   c                     [        [        U R                  5      5      nSU R                  /U-   [	        U R                  5      -   $ ri  )rk   rh   ry   r   rq   )r   rq  s     r   ri   UnknownMetaMessage.bytesS  s5    $S^4t~~&/$tyy/ABr   r   )Nr   unknown_meta)	r   r   r   r   r[  r  rx  ri   r   r   r   r   rO  rO  =  s    
@!
Cr   rO  )r   )4r   r  rP   
contextlibr   numbersr   messagesr   r   rt   	Exceptionr
   r   r*  r1  r  r  r]   r`   rk   rn   rv   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r'  r6  rH  rD  rE  rL  rR  rN  rO  r   r   r   <module>r     s  
   %  .		 	
:
$  $ $ !$ !$	
 !$ !#                 !%  !%!" #("&"&"&"&!%!%!%!&!&!&!&!&; @ ''<=   #   ))@A -*$84,  F6
 $x $(H  	+- 	+2 m m - . "h "! !(	H 	& & ($H ($V!%h !%H7X 78	"( 	"
)     ^*+ ^*BC Cr   