
    \
j9                         d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
 ddlmZ  e
d          Zd	 Z G d
 de          Z G d de          Z G d de          ZdS )    N)AbstractAudioDriverAbstractAudioPlayer)AbstractListener)
MediaEvent)debug_print   )	interfacedebug_mediac                     | \  }}}||| fS N )coordinatesxyzs       a/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/media/drivers/xaudio2/adaptation.py_convert_coordinatesr   0   s    GAq!a!8O    c                        e Zd ZdZdZdZdZ fdZd Zd Z	d Z
d Zd	 Zd
 Z fdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z! xZ"S )XAudio2AudioPlayerih  i%     c                 v   t          t          |                               ||           || _        || _        d| _        d| _        d| _        d| _        d| _	        g | _
        g | _        d| _        g | _        | j                            ||           | _        t!          |j        j        dz            | _        d S )NFr      )superr   __init__driver_xa2_driver	_flushing_deleted_playing_write_cursor_play_cursor_events_timestampsbuffer_end_submitted_buffersget_source_voice_xa2_source_voiceintaudio_formatsample_rate_buffer_size)selfr   
xa2_driversourceplayer	__class__s        r   r   zXAudio2AudioPlayer.__init__?   s     $''00@@@ %   
    %*!!%!1!B!B64!P!P 3 ?! CDDr   c                 <    |                                   d | _        d S r   )stopr(   r-   s    r   on_driver_destroyz$XAudio2AudioPlayer.on_driver_destroyg   s    		!%r   c                     | j                             | j        |           | _        | j        D ]}| j                            |           d S r   )r   r'   r/   r(   r&   submit_buffer)r-   
cx2_buffers     r   on_driver_resetz"XAudio2AudioPlayer.on_driver_resetk   sW    !%!1!B!B4;PT!U!U
 - 	= 	=J"00<<<<	= 	=r   c                 &    | j         r	d | _         d S d S r   )r(   r4   s    r   __del__zXAudio2AudioPlayer.__del__t   s%    ! 	*%)D"""	* 	*r   c                 v    | j         r/d| _        | j        s#| j                            | j                    dS dS dS )z[Called from Player. Docs says to cleanup resources, but other drivers wait for GC to do it?TN)r(   r   r&   r   return_voicer4   s    r   deletezXAudio2AudioPlayer.deletex   sX    ! 	F DM= F --d.DEEEEE		F 	FF Fr   c                     t          d          sJ | j        s'd| _        | j        s| j                                         t          d          sJ d S )NzXAudio2 playTzreturn XAudio2 play)_debugr    r   r(   playr4   s    r   rA   zXAudio2AudioPlayer.play   sa    n%%%%%} 	. DM> .&++---+,,,,,,,r   c                     t          d          sJ | j        r'd| _        d| _        | j                                         t          d          sJ d S )NzXAudio2 stopFzreturn XAudio2 stop)r@   r    r%   r(   r3   r4   s    r   r3   zXAudio2AudioPlayer.stop   s_    n%%%%%= 	*!DM(-D%"'')))+,,,,,,,r   c                 X   t          d          sJ t          t          |                                            d| _        d| _        d| _        d| _        | j        rd| _	        | j
                                         | j                                         | j        d d = | j        d d = d S )NzXAudio2 clearr   FT)r@   r   r   clearr"   r!   r%   r   r&   r   r(   flushr#   r$   )r-   r1   s    r   rD   zXAudio2AudioPlayer.clear   s    o&&&&& $''--///$)!= 	"!DN$$&&&LOQQQr   c                     | j         r6| j        r1|                                  | j                                         dS dS dS )z*Prefill audio and attempt to replay audio.N)r    r(   refill_source_playerrA   )r-   dts     r   _restartzXAudio2AudioPlayer._restart   sW    = 	*T3 	*%%'''"'')))))	* 	* 	* 	*r   c                    | j         sdS | j         j        }t          | j                  |k    rH| j                            d          }| xj        |j        z  c_        ~t          | j                  |k    H| j        r4|dk    r,d| _        t          j	        
                    | j        d           dS | j        r.|dk    r&d| _        | j                            | j                    dS | j        rI|dk    rA| j                                          t#          dd                              | j                   n0g }|| j        k     r| j                            | j        d          }|rt1          d                    |j        |j        | j                            sJ |j        dk    rn| j                            |          }|                    |           | xj        |j        z  c_        |                     |           |                      |           |dz  }nd| _        n|| j        k     |D ]}| j         !                    |           | j        "                    |           | #                                 dS )	a  Obtains audio data from the source, puts it into a buffer to submit to the voice.
        Unlike the other drivers this does not carve pieces of audio from the buffer and slowly
        consume it. This submits the buffer retrieved from the decoder in it's entirety.
        Nr   Fon_eosg        z?Xaudio2: audio data - length: {}, duration: {}, buffer size: {}r   T)$r(   buffers_queuedlenr&   popr"   
AudioBytesr   pygletclockschedule_oncerI   r   r   r=   r%   r3   r   _sync_dispatch_to_playerr0   max_buffer_countr/   get_audio_datar,   r@   formatlengthdurationcreate_bufferappendr!   _add_audiodata_events_add_audiodata_timestampr7   extend_dispatch_pending_events)r-   rL   buffercurrent_buffers
audio_data	x2_bufferr8   s          r   rG   z'XAudio2AudioPlayer.refill_source_player   s   
 % 	F/> $-  >11]&&q))F!22	 $-  >11 > 	""!& **4=!<<<F= 	"" % --d.DEEEF $ %	2""&++---1h''@@MMM O 4#888![778I3OO
 !Y``akarakataeart tu u u u u
 "(A--  $ 0 > >z J JI#**9555&&)*>>&&..z:::11*==="a'NN 15D-1 !4#8886 . A A
&44Z@@@@ M  111%%'''''r   c                 V    t          d|                              | j                   d S Nr   )r   rS   r0   )r-   
event_names     r   _dispatch_new_eventz&XAudio2AudioPlayer._dispatch_new_event   s(    1j!!::4;GGGGGr   c                     |j         D ]S}| j        |j        | j        j        j        z  z   }t          d|d|          sJ | j                            ||f           Td S )NzAdding eventat)	eventsr!   	timestampr/   r*   bytes_per_secondr@   r#   rZ   )r-   ra   eventevent_cursors       r   r[   z(XAudio2AudioPlayer._add_audiodata_events   sy    & 	7 	7E-;3D1E EL.%|DDDDDLu 56666		7 	7r   c                 v    | j         |j        z   }| j                            ||j        |j        z   f           d S r   )r!   rW   r$   rZ   rj   rX   )r-   ra   	ts_cursors      r   r\   z+XAudio2AudioPlayer._add_audiodata_timestamp  sO    &)::	
,z/BBC	E 	E 	E 	E 	Er   c                    g }| j         rq| j         d         d         | j        k    rU| j                             d          \  }}|                    |           | j         r| j         d         d         | j        k    Ut	          d                    |                    sJ t	          d                    | j                             sJ |D ]}|                    | j                   d S )Nr   zDispatching pending events: {}zRemaining events: {})r#   r"   rN   rZ   r@   rV   rS   r0   )r-   pending_events_rl   s       r   r^   z+XAudio2AudioPlayer._dispatch_pending_events  s    l 	)t|Aq1T5FFF|''**HAu!!%((( l 	)t|Aq1T5FFF 6==nMMNNNNN,33DLAABBBBB# 	8 	8E**4;7777	8 	8r   c                     | j         rI| j         d         d         | j        k     r1| j         d= | j         r | j         d         d         | j        k     +d S d S d S d S rd   )r$   r"   r4   s    r   _cleanup_timestampsz&XAudio2AudioPlayer._cleanup_timestamps  sy     	$4#3A#6q#9D<M#M#M #  	$4#3A#6q#9D<M#M#M#M#M 	$ 	$ 	$ 	$#M#Mr   c                     |                                   | j        r=| j        d         \  }}|| j        |z
  t          | j        j        j                  z  z   }nd }|S rd   )update_play_cursorr$   r"   floatr/   r*   rk   )r-   cursortsresults       r   get_timezXAudio2AudioPlayer.get_time  sc    !!! 	)!,JFB4,v5t{?W?h9i9iiiFFFr   c                     || j         _        d S r   )r(   volumer-   r}   s     r   
set_volumezXAudio2AudioPlayer.set_volume   s    (.%%%r   c                 T    | j         j        rt          |          | j         _        d S d S r   )r(   
is_emitterr   positionr-   r   s     r   set_positionzXAudio2AudioPlayer.set_position#  s6    !, 	M.B8.L.LD"+++	M 	Mr   c                 :    | j         j        r|| j         _        dS dS )zVNot a true min distance, but similar effect. Changes CurveDistanceScaler default is 1.N)r(   r   distance_scaler)r-   min_distances     r   set_min_distancez#XAudio2AudioPlayer.set_min_distance'  s.    !, 	B5AD"222	B 	Br   c                     dS )z No such thing built into xaudio2Nr   )r-   max_distances     r   set_max_distancez#XAudio2AudioPlayer.set_max_distance,  s    r   c                     || j         _        d S r   )r(   	frequency)r-   pitchs     r   	set_pitchzXAudio2AudioPlayer.set_pitch0  s    +0(((r   c                 T    | j         j        rt          |          | j         _        d S d S r   )r(   r   r   cone_orientation)r-   r   s     r   set_cone_orientationz'XAudio2AudioPlayer.set_cone_orientation3  s7    !, 	]6JK[6\6\D"333	] 	]r   c                 r    | j         j        r*t          |          | _        |                                  d S d S r   )r(   r   r)   _cone_inner_angle_set_cone_angles)r-   cone_inner_angles     r   set_cone_inner_anglez'XAudio2AudioPlayer.set_cone_inner_angle7  C    !, 	$%()9%:%:D"!!#####	$ 	$r   c                 r    | j         j        r*t          |          | _        |                                  d S d S r   )r(   r   r)   _cone_outer_angler   )r-   cone_outer_angles     r   set_cone_outer_anglez'XAudio2AudioPlayer.set_cone_outer_angle<  r   r   c                     t          | j        | j                  }t          | j        | j                  }| j                            t          j        |          t          j        |                     d S r   )minr   r   maxr(   set_cone_anglesmathradians)r-   innerouters      r   r   z#XAudio2AudioPlayer._set_cone_anglesA  s`    D*D,BCCD*D,BCC..t|E/B/BDLQVDWDWXXXXXr   c                 :    | j         j        r|| j         _        d S d S r   )r(   r   cone_outside_volume)r-   cone_outer_gains     r   set_cone_outer_gainz&XAudio2AudioPlayer.set_cone_outer_gainF  s.    !, 	I9HD"666	I 	Ir   c                 @    | j         s|                                  d S d S r   )r   rG   r4   s    r   prefill_audioz XAudio2AudioPlayer.prefill_audioJ  s.    ~ 	(%%'''''	( 	(r   )#__name__
__module____qualname__r   r   min_buffer_sizerT   r   r5   r9   r;   r>   rA   r3   rD   rI   rG   rf   r[   r\   r^   rt   r{   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r1   s   @r   r   r   5   s        O&E &E &E &E &EP& & &= = =* * *F F F- - -- - -          * * *J( J( J(XH H H7 7 7E E E

8 
8 
8$ $ $  / / /M M MB B B
  1 1 1] ] ]$ $ $
$ $ $
Y Y Y
I I I( ( ( ( ( ( (r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )XAudio2Driverc                     t          j                    | _        | j                                        | _        | j        J | j        J d S r   )r	   r   r   create_listener_xa2_listenerr4   s    r   r   zXAudio2Driver.__init__Q  sN    $244!-==??+++!-----r   c                 .    |                                   d S r   )r>   r4   s    r   r;   zXAudio2Driver.__del__X  s    r   c                 F    | j         J | j                                         S r   )r   get_performancer4   s    r   r   zXAudio2Driver.get_performance[  s&    +++//111r   c                 B    | j         J t          | | j         ||          S r   )r   r   )r-   r/   r0   s      r   create_audio_playerz!XAudio2Driver.create_audio_player_  s(    +++!$(8&&IIIr   c                 Z    | j         J | j        J t          | j        | j                   S r   )r   r   XAudio2Listenerr4   s    r   get_listenerzXAudio2Driver.get_listenerc  s6    +++!---t143CDDDr   c                     d | _         d S r   )r   r4   s    r   r>   zXAudio2Driver.deleteh  s    !r   N)	r   r   r   r   r;   r   r   r   r>   r   r   r   r   r   P  st        . . .  2 2 2J J JE E E
" " " " "r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )r   c                 "    || _         || _        d S r   )r   r   )r-   xa2_listenerr.   s      r   r   zXAudio2Listener.__init__m  s    )%r   c                 ,    || _         || j        _        d S r   )_volumer   r}   r~   s     r   _set_volumezXAudio2Listener._set_volumeq  s    "(r   c                 F    || _         t          |          | j        _        d S r   )	_positionr   r   r   r   s     r   _set_positionzXAudio2Listener._set_positionu  s"    !&:8&D&D###r   c                 <    || _         |                                  d S r   )_forward_orientation_set_orientationr-   orientations     r   _set_forward_orientationz(XAudio2Listener._set_forward_orientationy  s"    $/!r   c                 <    || _         |                                  d S r   )_up_orientationr   r   s     r   _set_up_orientationz#XAudio2Listener._set_up_orientation}  s"    *r   c                 l    t          | j                  t          | j                  z   | j        _        d S r   )r   r   r   r   r   r4   s    r   r   z XAudio2Listener._set_orientation  s8    )=d>W)X)X[o \" \" *"&&&r   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r   l  sq        & & &) ) )E E E          " " " " "r   r   )r   rP   pyglet.media.drivers.baser   r   pyglet.media.drivers.listenerr   pyglet.media.eventsr   pyglet.utilr    r	   r@   r   r   r   r   r   r   r   <module>r      s,  H   N N N N N N N N : : : : : : * * * * * * # # # # # #      	]	#	#  
X( X( X( X( X(, X( X( X(v" " " " "' " " "8" " " " "& " " " " "r   