
    g
f                         d Z dZdZdZdZdZddlZddlmZ 	  ej                  d	d
       ddlm
Z
  e
j                  d      \  aZddlmZ ddlmZmZ  G d d      Z e       Zd Zy# e$ r daY ,w xY w)zUtilities for playing sounds.z$Id:$z$Revision:$z$Date:$zCopyright (c) 2016 Orca TeamLGPL    N)GLibGstz1.0)r   F   )debug)IconTonec                   T    e Zd ZdZd Zd Zd Zd ZddZddZ	d Z
dd	ZddZd Zy
)PlayerzPlays Icons and Tones.c                     d| _         d | _        d | _        d | _        d | _        t
        s(d}t        j                  t        j                  |d       y | j                          y )NFz'SOUND ERROR: Gstreamer is not availableT)
_initialized_source_sink_player	_pipeline_gstreamerAvailabler   printMessage
LEVEL_INFOinit)selfmsgs     ,/usr/lib/python3/dist-packages/orca/sound.py__init__zPlayer.__init__-   sR    !
";Cu//d;		    c                    |j                   t        j                  j                  k(  r4| j                  j                  t        j                  j                         y |j                   t        j                  j                  k(  rq| j                  j                  t        j                  j                         |j                         \  }}d| }t        j                  t        j                  |d       y y NzSOUND ERROR: T)typer   MessageTypeEOSr   	set_stateStateNULLERRORparse_errorr   r   r   r   busmessageerrorinfor   s         r   _onPlayerMessagezPlayer._onPlayerMessage;   s    <<3??...LL""399>>2\\S__222LL""399>>2!--/KE4!%)Cu//d;	 3r   c                    |j                   t        j                  j                  k(  r4| j                  j                  t        j                  j                         y |j                   t        j                  j                  k(  rq| j                  j                  t        j                  j                         |j                         \  }}d| }t        j                  t        j                  |d       y y r   )r   r   r   r   r   r    r!   r"   r#   r$   r   r   r   r%   s         r   _onPipelineMessagezPlayer._onPipelineMessageD   s    <<3??...NN$$SYY^^4\\S__222NN$$SYY^^4!--/KE4!%)Cu//d;	 3r   c                 V    |j                  t        j                  j                         y)NF)r    r   r!   r"   r   elements     r   
_onTimeoutzPlayer._onTimeoutM   s    #))..)r   c                 &   |r3| j                   j                  t        j                  j                         | j                   j                  dd|j                          | j                   j                  t        j                  j                         y)zIPlays a sound icon, interrupting the current play first unless specified.urizfile://N)r   r    r   r!   r"   set_propertypathPLAYING)r   icon	interrupts      r   	_playIconzPlayer._playIconQ   s\     LL""399>>2!!%7499+)>?syy001r   c                 >   |r3| j                   j                  t        j                  j                         | j
                  j                  d|j                         | j
                  j                  d|j                         | j
                  j                  d|j                         | j                   j                  t        j                  j                         t        d|j                  z        }t        j                  || j                  | j                          y)zCPlays a tone, interrupting the current play first unless specified.volumefreqwavei  N)r   r    r   r!   r"   r   r3   r:   	frequencyr<   r5   intdurationr   timeout_addr0   )r   toner7   r?   s       r   	_playTonezPlayer._playToneZ   s     NN$$SYY^^4!!(DKK8!!&$..9!!&$))4  !2!23tdmm+,4??DNNCr   c                    | j                   ryt        syt        j                  j	                  dd      | _        | j
                  (d}t        j                  t        j                  |d       y| j
                  j                         }|j                          |j                  d| j                         t        j                  d      | _        | j                  j                         }|j                          |j                  d| j                         t        j                  j	                  d	d
      | _        t        j                  j	                  dd      | _        | j                   | j"                  y| j                  j%                  | j                          | j                  j%                  | j"                         | j                   j'                  | j"                         d| _         y)z(Re)Initializes the Player.Nplaybinplayerz7SOUND ERROR: Gstreamer is available, but player is NoneTr'   zorca-pipeline)nameaudiotestsrcsrcautoaudiosinkoutput)r   r   r   ElementFactorymaker   r   r   r   get_busadd_signal_watchconnectr*   Pipeliner   r,   r   r   addlink)r   r   r&   s      r   r   zPlayer.initg   sb    "))..y(C<<KCu//d;ll""$It445?;nn$$&It667))..~uE'',,_hG
<<4::#54<<(4::&$**% r   c                     t        |t              r| j                  ||       yt        |t              r| j	                  ||       yd|dg}t        j                  t
        j                  |d       y)zDPlays a sound, interrupting the current play first unless specified.zSOUND ERROR:zis not an Icon or ToneTN)
isinstancer   r8   r	   rB   r   printTokensr   )r   itemr7   tokenss       r   playzPlayer.play   sY     dD!NN4+d#NN4+$d,DEFe..=r   Nc                 h   t         sy|r*|j                  t        j                  j                         y| j
                  r3| j
                  j                  t        j                  j                         | j                  r4| j                  j                  t        j                  j                         yy)zStops play.N)r   r    r   r!   r"   r   r   r.   s     r   stopzPlayer.stop   sm     #ciinn-<<LL""399>>2>>NN$$SYY^^4 r   c                 D    t         sy| j                          d| _        da y)zShuts down the sound utilities.NF)r   rZ   r   )r   s    r   shutdownzPlayer.shutdown   s!     #		!#r   )TN)__name__
__module____qualname____doc__r   r*   r,   r0   r8   rB   r   rX   rZ   r\    r   r   r   r   *   s9     <<2D!!F	>5 	$r   r   c                      t         S r]   )r   rb   r   r   	getPlayerrd      s    Nr   )ra   __id____version____date____copyright____license__gigi.repositoryr   require_versionr   
init_checkr   args	Exception r   sound_generatorr   r	   r   r   rd   rb   r   r   <module>rr      s   ( $. 	 5Bue$! !/t 4  'D$ D$L (a    s   A) )A32A3