
M÷]©+  ã               @   sÍ  d  d l  Z  d  d l  m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l	 Z	 d  d l
 Z
 Gd d „  d e j ƒ Z e ƒ  Z d Z d a d d	 „  Z d
 d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d  d! „  Z d" d# „  Z d$ d% „  Z d& d' „  Z d( d) „  Z  d* d+ „  Z! d, d- „  Z" d a# d. d/ „  Z$ d0 d1 „  Z% d2 Z& e  j' e& ƒ Z  d S)3é    N)ÚNS)ÚQueue)ÚStringIOc               @   s(   e  Z d  Z d d „  Z d d „  Z d S)ÚExceptionThreadc             O   s   t  j j |  | | Ž d  S)N)Ú	threadingÚThreadÚ__init__)ÚselfÚargsÚkwargs© r   ú./mnt/c/git_repos/PolyDigit/UI/ingen_wrapper.pyr      s    zExceptionThread.__init__c             C   sO   y# |  j  r" |  j  |  j |  j Ž  Wn% t k
 rJ t j t j ƒ  ƒ Yn Xd  S)N)Z_targetZ_argsZ_kwargsÚ	ExceptionÚloggingÚerrorÚ	tracebackZ
format_exc)r	   r   r   r   Úrun   s
    	zExceptionThread.runN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   r   Fc             C   s€   t  j ƒ  | d } xB t  j ƒ  | k  rX y |  j d d ƒ SWq t j k
 rT Yq Xq W|  j d t d | d t  j ƒ  ƒ ƒ S)Né   Útimeoutr   )ÚtimeZ	monotonicÚgetÚqueueÚEmptyÚmax)Úqr   Zstoploopr   r   r   Úget_timed_interruptable   s    	r   c              C   sa   xZ t  r
 Py7 t t d ƒ }  |  d } |  d d  … } | | Œ  Wq t j k
 rX Yq Xq Wd  S)Nr   r   )Ú_FINISHr   r   r   r   )ÚitemsÚfuncr
   r   r   r   ÚDestinationThread&   s    
r"   c             C   s7   d |  }  t  j t j |  d t | ƒ j ƒ  f ƒ d  S)Nz/main/zingen:enabled )r   ÚputÚingenÚstrÚlower)Ú	effect_idZactiver   r   r   Ú
set_bypass2   s    
r(   c             C   s'   t  j t j |  d t | ƒ f ƒ d  S)Nzingen:value )r   r#   r$   r%   )ZportÚvaluer   r   r   Úset_parameter_value:   s    r*   c             C   s+   t  j t j d |  d | | f f ƒ d  S)Nz/main/z<ingen:canvasX "%s"^^xsd:float; ingen:canvasY "%s"^^xsd:float)r   r#   r$   )r'   ÚxÚyr   r   r   Úset_plugin_position?   s    r-   c             C   s-   t  j t j d |  d d | d f ƒ d  S)Nz/main/zpingen:canvasX "200.0"^^xsd:float ;
    ingen:canvasY "200.0"^^xsd:float ;
    a ingen:Block ;
    lv2:prototype ú<ú>)r   r#   r$   )r'   Z
effect_urlr   r   r   Ú
add_pluginB   s    r0   c             C   s+   t  j t j d |  d | | f f ƒ d  S)Nz/main/ziingen:canvasX "%s"^^xsd:float ;
    ingen:canvasY "%s"^^xsd:float ;
    a lv2:InputPort ; a lv2:AudioPort)r   r#   r$   )Úport_idr+   r,   r   r   r   Ú	add_inputJ   s    r2   c             C   s+   t  j t j d |  d | | f f ƒ d  S)Nz/main/zjingen:canvasX "%s"^^xsd:float ;
    ingen:canvasY "%s"^^xsd:float ;
    a lv2:OutputPort ; a lv2:AudioPort)r   r#   r$   )r1   r+   r,   r   r   r   Ú
add_outputP   s    r3   c             C   sY   d |  }  | r4 t  j t j |  d | d f ƒ n! t  j t j |  d | d f ƒ d  S)Nz/main/zRpatch:property <http://gareus.org/oss/lv2/convoLV2#impulse> ; patch:value <file://r/   zOpatch:property <http://polyeffects.com/lv2/polyconvo#ir> ; patch:value <file://)r   r#   r$   )r'   Ú	file_nameZis_cabr   r   r   Úset_fileU   s    
$r5   c             C   s   t  j t j d d f ƒ d  S)Nz/main/z-file:///home/loki/Documents/small_delay.ingen)r   r#   r$   Úcopy)Únamer   r   r   Úsave_pedalboard\   s    r8   c             C   s   t  j t j d d f ƒ d  S)Nz-file:///home/loki/Documents/small_delay.ingenz/main/)r   r#   r$   r6   )r7   r   r   r   Úload_pedalboard_   s    r9   c             C   s   t  j t j |  f ƒ d  S)N)r   r#   r$   Zdelete)r'   r   r   r   Úremove_pluginb   s    r:   c             C   s   t  j t j |  | f ƒ d  S)N)r   r#   r$   Zconnect)Úsrc_portÚtarget_portr   r   r   Úconnect_porte   s    r=   c             C   s   t  j t j |  | f ƒ d  S)N)r   r#   r$   Z
disconnect)r;   r<   r   r   r   Údisconnect_porti   s    r>   c               C   s   d  S)Nr   r   r   r   r   Úset_midi_ccl   s    r?   c               C   s   d  S)Nr   r   r   r   r   Úset_bpmo   s    r@   c               C   s   d  S)Nr   r   r   r   r   Úget_parameter_valuer   s    rA   c              C   sŽ   x‡ t  r
 Pt j ƒ  }  xm |  j d ƒ D]\ } t | ƒ d k r& t | ƒ d k  oe d | k pe d | k s& t j ƒ  | } t | ƒ q& Wq Wd  S)Nz

é
   éP   zingen:BundleEndzingen:BundleStart)r   r$   ZrecvÚsplitÚlenZ_get_prefixes_stringÚparse_ingen)ÚrÚsÚar   r   r   Úingen_recv_threadx   s    *rJ   c          
   C   sn  t  j ƒ  } | j t |  ƒ d d ƒt d |  ƒ xJ| j d  t j j t j	 j
 g ƒ D]$} | d } t | j | t j	 j d  ƒ ƒ d d  … } | d d  … } | j | t j	 j d  ƒ } | d  k	 rW | d k rÏd } d } d }	 d }
 xª | j | d  d  g ƒ D]� } | d	 t j j k r;d
 }
 t | d ƒ } q| d	 t j j k rjt | d ƒ } d
 }
 q| d	 t j j k rt | d ƒ }	 d
 }
 qWt d | | | |	 ƒ |
 rÏt j d | | |	 f ƒ | t j j t j j f | k rÛd } d } d } x˜ | j | d  d  g ƒ D]~ } | d	 t j j k rJt | d ƒ } q| d	 t j j k rst | d ƒ } q| d	 t j j k rt | d ƒ } qWt d | d | d | d | ƒ t j d | | | | f ƒ qW | t j j d  f | k rCt | j | t j j d  ƒ ƒ } t d | d | ƒ t j d | | f ƒ qW | t j j t j j f | k r"d } d } xo | j | d  d  g ƒ D]U } | d	 t j j k r¸t | d ƒ } q‰| d	 t j j k r‰t | d ƒ } q‰Wt d | d | ƒ t j d | d d  … | d d  … f ƒ qW | t j j d  f | k r
d  } d  } x€ | j | t j j d  g ƒ D]` } | d t j j k r�d } qh| d t j j  k r¬d
 } qh| d t j j! k rhd
 } qhW| d  k	 rô| rôt d | d | ƒ q{t d | d | ƒ qW | t j j" d  f | k rW | j | t j j" d  ƒ } t d | d | d t# | ƒ ƒ t j d | t# | ƒ f ƒ qW Wx@| j d  t j j t j	 j$ g ƒ D]} | d } t | j | t j	 j d  ƒ ƒ d d  … } | t j	 j% t j j f | k rG| j | t j	 j d  ƒ } t d | d | ƒ t j d | | f ƒ q¤| t j	 j% t j j" f | k r¤| j | t j	 j d  ƒ } t d  | d | d t# | ƒ ƒ t j d | t# | ƒ f ƒ q¤Wx¥| j d  t j j t j	 j& g ƒ D]} | d } | j | t j	 j d  ƒ } | d  k r~| j | t j	 j d  ƒ } | d  k	 rft | ƒ d d  … } t d! | ƒ t j d" | f ƒ qç| t j j t j j f | k rçd } d } xo | j | d  d  g ƒ D]U } | d	 t j j k rót | d ƒ } qÄ| d	 t j j k rÄt | d ƒ } qÄW| rç| rçt d# | d | ƒ t j d$ | d d  … | d d  … f ƒ qçWd  S)%NÚformatZn3Zparsingr   é   é   z/engineFr   Té   zload subjectZdsp_loadÚ r+   r,   ÚpluginÚsubjectr0   r)   Zvalue_changezarc headÚtailZadd_connectionz
port is_inzNone! port is_inzin put enabledzb valueZenabled_changeé   zin set subjectzin set enabledzin delete subjectr:   zin remove arc headZremove_connection)'ÚrdflibZGraphZparser   ÚprintZtriplesr   ZrdfÚtypeZpatchZPutr%   r)   rQ   Úbodyr$   Z
maxRunLoadÚfloatZmeanRunLoadZ
minRunLoadÚui_queuer#   ZBlockZlv2Z	prototypeZcanvasYZcanvasXZArcÚheadrR   r7   Z
OutputPortZ	InputPortZ	AudioPortÚenabledÚboolÚSetÚpropertyZDelete)Zto_parseÚgÚtZresponseZ	r_subjectrQ   rW   Zmax_loadZ	mean_loadZmin_loadÚsendÚpr+   r,   rP   r)   rZ   rR   Zis_inZis_audior   r   r   rF   „   sÌ    +
+	
!!!-%		
 +
+!! +
!rF   c             C   s#   |  a  t d t ƒ a t j ƒ  d  S)NÚtarget)rY   r   rJ   Úr_threadÚstart)Zr_qr   r   r   Ústart_recv_threadø   s    rf   c              C   s   t  d t ƒ }  |  j ƒ  d  S)Nrc   )r   r"   re   )r`   r   r   r   Ústart_send_threadÿ   s    rg   ztcp://192.168.1.140:16180)(r$   r   r   r   rT   r   r   Úior   r   r   r   r   r   r   rY   r   r"   r(   r*   r-   r0   r2   r3   r5   r8   r9   r:   r=   r>   r?   r@   rA   rJ   rF   rd   rf   rg   ZserverZRemoter   r   r   r   Ú<module>   sJ   	
s