
    ̺i                     ~    S r SSKrSSKrSSKrSSKJr  SSKJrJrJ	r	   S r
S r " S	 S
\	\5      r " S S\	\5      rg)zMido amidi backend

Very experimental backend using amidi to access the ALSA rawmidi
interface.

TODO:

* use parser instead of from_hex()?
* default port name
* do sysex messages work?
* starting amidi for every message sent is costly
    N   )Message   )InputMethodsOutputMethodsPortMethodsc                     / n [         R                  " SS/SS9R                  5       nUSS   HP  nUR                  5       R	                  S S5      u  p4nU R                  UR                  5       USU;   SU;   S	.5        MR     U $ )
Namidiz-lzutf-8)encodingr   r   IO)namedeviceis_input	is_output)
subprocesscheck_output
splitlinesstripsplitappend)deviceslineslinemoder   r   s         R/var/www/piano.thomer.com/venv/lib/python3.13/site-packages/mido/backends/amidi.pyget_devicesr       s    G##	$ jl 
 ab	!ZZ\//a8d

"($'4K%(D[ 	  N    c                 p    [        5        H  nXS   :X  d  M  X!   (       d  M  Us  $    [        SU < 35      e)Nr   zunknown port )r   OSError)r   r   devs      r   _get_devicer"   3   s7    }v;399J  dX.//r   c                   :    \ rS rSrS	S jrS rS
S jrS rS rSr	g)Input;   Nc                    Xl         SU l        S U l        [        R                  " 5       U l        [        R                  " 5       U l        [        U R                   S5      n[        R                  " SSSUS   /[        R                  S9U l        U R
                  R                  U R                  R                  [        R                  5        g )NFr   r
   z-d-pr   )stdout)r   closed_procselectpoll_poller	threadingRLock_lockr"   r   PopenPIPEregisterr(   POLLIN)selfr   kwargsr!   s       r   __init__Input.__init__<   s    	
{{}__&
$))Z0%%w'+S]'<-7__>
 	djj//?r   c                     U R                   R                  R                  5       R                  5       R	                  S5      nU(       a  [
        R                  " U5      $ g )Nascii)r*   r(   readliner   decoder   from_hex)r5   r   s     r   _read_messageInput._read_messageK   sG    zz  ))+113::7C##D)) r   c                     U(       d  U R                  5       $  U R                  5       nU(       a  U$ U R                  R                  5         M5  N)r,   r-   )r5   blockmsgs      r   receiveInput.receiveS   s>    99;))+C
 LL r   c                    U R                      U R                  R                  S5      (       a@  U R                  5       nUb  UsS S S 5        $ U R                  R                  S5      (       a  M@  S S S 5        g ! , (       d  f       g = f)Nr   )r0   r-   r,   r>   )r5   rC   s     r   r,   
Input.poll_   sZ    ZZ,,##A&&((*?	 Z,,##A&& ZZs   5A7 A77
Bc                     U R                   (       d:  U R                  (       a!  U R                  R                  5         S U l        SU l         g g NT)r)   r*   killr5   s    r   closeInput.closef   s1    {{zz

!!
DK	 r   )r0   r-   r*   r)   r   rA   )T)
__name__
__module____qualname____firstlineno__r7   r>   rD   r,   rL   __static_attributes__ r   r   r$   r$   ;   s    @
 r   r$   c                   *    \ rS rSrSS jrS rS rSrg)Outputn   Nc                 `    Xl         X l        SU l        [        U R                   S5      U l        g )NFr   )r   	autoresetr)   r"   _dev)r5   r   rX   r6   s       r   r7   Output.__init__o   s%    	"		;7	r   c                     [         R                  " SSUR                  5       SU R                  S   /5      nUR	                  5         g )Nr
   z
--send-hexr'   r   )r   r1   hexrY   wait)r5   rC   procs      r   sendOutput.sendv   s:    ,	!%tyy':!< =		r   c                 x    U R                   (       d)  U R                  (       a  U R                  5         SU l         g g rI   )r)   rX   resetrK   s    r   rL   Output.close{   s%    {{~~

DK	 r   )rY   rX   r)   r   )NF)rN   rO   rP   rQ   r7   r_   rL   rR   rS   r   r   rU   rU   n   s    8
r   rU   )__doc__r+   r   r.   messagesr   _commonr   r   r   r   r"   r$   rU   rS   r   r   <module>rg      sJ   
     = =&00K 0f[- r   