
    ^j1                     <   d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	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rd d
lmZmZmZ d dlmZ  ed          Zdeeeef         deeeef         fdZ G d de	          Z G d de          Z G d de
          ZdS )    )dequeN)DequeTupleTYPE_CHECKING)AbstractAudioDriverAbstractAudioPlayer
MediaEvent)PlayerWorkerThread)AbstractListener)debug_print   )	interface)	AudioDataAudioFormatSource)Playerdebug_mediacoordinatesreturnc                     | \  }}}||| fS N )r   xyzs       b/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/media/drivers/xaudio2/adaptation.py_convert_coordinatesr      s    GAq!a!8O    c                   N    e Zd ZddZdej        j        fdZdd
ZddZ	ddZ
dS )XAudio2Driverr   Nc                    t          j                    | _        | j                                        | _        t          | j        | j                  | _        t                      | _        | j        	                                 d S r   )
r   r    _xa2_drivercreate_listener_xa2_listenerXAudio2Listener	_listenerr
   workerstartselfs    r   __init__zXAudio2Driver.__init__   sh    $244!-==??();T=MNN(**r   c                 F    | j         J | j                                         S r   )r"   get_performancer)   s    r   r-   zXAudio2Driver.get_performance"   s&    +++//111r   sourcer   playerr   XAudio2AudioPlayerc                 6    | j         J t          | ||          S r   )r"   r0   )r*   r.   r/   s      r   create_audio_playerz!XAudio2Driver.create_audio_player&   s#    +++!$777r   r%   c                     | j         S r   )r&   r)   s    r   get_listenerzXAudio2Driver.get_listener*   s
    ~r   c                     | j         I| j                                         d | _        | j                                          d | _         d | _        d S d S r   )r"   r'   stop_delete_driverr$   r)   s    r   deletezXAudio2Driver.delete-   sY    'KDK++---#D!%D ('r   r   N)r.   r   r/   r   r   r0   )r   r%   )__name__
__module____qualname__r+   r   libXAUDIO2_PERFORMANCE_DATAr-   r2   r4   r8   r   r   r   r    r       s           2!G 2 2 2 28 8 8 8   & & & & & &r   r    c                       e Zd ZddZdeddfdZdeeeef         ddfdZdeeeef         ddfd	Zdeeeef         ddfd
Z	ddZ
dS )r%   r   Nc                 "    || _         || _        d S r   )r$   r"   )r*   xa2_listener
xa2_drivers      r   r+   zXAudio2Listener.__init__7   s    )%r   volumec                 ,    || _         || j        _        d S r   )_volumer"   rC   r*   rC   s     r   _set_volumezXAudio2Listener._set_volume;   s    "(r   positionc                 F    || _         t          |          | j        _        d S r   )	_positionr   r$   rH   r*   rH   s     r   _set_positionzXAudio2Listener._set_position?   s"    !&:8&D&D###r   orientationc                 <    || _         |                                  d S r   )_forward_orientation_set_orientationr*   rM   s     r   _set_forward_orientationz(XAudio2Listener._set_forward_orientationC   s"    $/!r   c                 <    || _         |                                  d S r   )_up_orientationrP   rQ   s     r   _set_up_orientationz#XAudio2Listener._set_up_orientationG   s"    *r   c                 l    t          | j                  t          | j                  z   | j        _        d S r   )r   rO   rT   r$   rM   r)   s    r   rP   z XAudio2Listener._set_orientationK   s4     !:;; !5667 	&&&r   r9   )r:   r;   r<   r+   floatrG   r   rL   rR   rU   rP   r   r   r   r%   r%   6   s        & & & &)% )D ) ) ) )EeE5%,?&@ ET E E E E E%:M4N  SW         uUE55H/I  d        8 8 8 8 8 8r   r%   c                   `    e Zd Zd, fd	Zd-d
Zd-dZd-dZd-dZd-dZd- fdZ	de
ddfdZde
ddfdZd-dZde
fdZd-dZdefdZd-dZdeddfdZdeeeef         ddfdZdeddfdZdeddfd Zd!eddfd"Zd#eeeef         ddfd$Zd%eddfd&Zd'eddfd(Zd-d)Zd*eddfd+Z xZS ).r0   driverr    r.   r   r/   r   r   Nc                 X   t                                          ||           || _        d| _        d| _        d| _        d| _        d| _        t                      | _	        d| _
        t          j                    | _        | j        j                            |j        |           | _        d S )Nih  Fr   )superr+   rY   _cone_inner_angle_cone_outer_angle_playing_write_cursor_play_cursorr   _audio_data_in_use_pyglet_source_exhausted	threadingLock_audio_data_lockr"   get_source_voiceaudio_format_xa2_source_voice)r*   rY   r.   r/   	__class__s       r   r+   zXAudio2AudioPlayer.__init__R   s    (((  "%!$ 
 6;gg(-%
 !* 0 0!%!8!I!I&J]_c!d!dr   c                 <    |                                   d | _        d S r   )r6   rh   r)   s    r   on_driver_destroyz$XAudio2AudioPlayer.on_driver_destroyr   s    		!%r   c                     | j         j                            | j        j        |           | _        | j        D ]0}t          j        |          }| j        	                    |           1d S r   )
rY   r"   rf   r.   rg   rh   ra   r   create_xa2_buffersubmit_buffer)r*   
audio_data
xa2_buffers      r   on_driver_resetz"XAudio2AudioPlayer.on_driver_resetv   sm    !%!8!I!I$+Jbdh!i!i 1 	= 	=J"4Z@@J"00<<<<	= 	=r   c                 L   | j         j        :t          d          sJ d | _         d | _        | j                                         d S t          d          sJ |                                  | j         j                            | j        | j                   d | _         d | _        d S )Nz'Xaudio2: Player deleted, driver is gonez(XAudio2: Player deleted, returning voice)rY   r"   _debugrh   ra   clearr6   return_voicer)   s    r   r8   zXAudio2AudioPlayer.delete   s    ;"*CDDDDDDK%)D"#))+++F@AAAAA		,,T-CTE\]]]!%r   c                     t          d| j                  sJ | j        s?d| _        | j                                         | j        j                            |            t          d          sJ d S )NzXAudio2 play: self._playing=Tzreturn XAudio2 play)rs   r^   rh   playrY   r'   addr)   s    r   rw   zXAudio2AudioPlayer.play   s{    7t}7788888} 	) DM"'')))K""4(((+,,,,,,,r   c                 (   t          d          sJ | j        rh| j        j                            |            | j        j        j        5  | j                                         d d d            n# 1 swxY w Y   d| _        t          d          sJ d S )NzXAudio2 stopFzreturn XAudio2 stop)	rs   r^   rY   r'   remover"   lockrh   r6   r)   s    r   r6   zXAudio2AudioPlayer.stop   s    n%%%%%= 	"K%%d+++(- . .&++---. . . . . . . . . . . . . . .!DM+,,,,,,,s   	A//A36A3c                 4   t          d          sJ t                                                       d| _        d| _        d| _        | j        j                            | j	        | j
                   t                      | _
        | j        j                            | j        j        |           | _	        | j        j        | j	        _        | j        j        | j	        _        | j	        j        rt)          | j        j                  | j	        _        | j        j        | j	        _        t)          | j        j                  | j	        _        | j        j        | j	        _        |                                  | j        j                            | j	                   d S d S )NzXAudio2 clearr   F)rs   r[   rt   r`   r_   rb   rY   r"   ru   rh   ra   r   rf   r.   rg   r/   rC   pitch	frequency
is_emitterr   rH   min_distancedistance_scalercone_orientationcone_outer_gaincone_outside_volume_set_cone_anglesapply3d)r*   ri   s    r   rt   zXAudio2AudioPlayer.clear   sO   o&&&&&(-%,,T-CTE\]]]"'''!%!8!I!I$+Jbdh!i!i(,(:%+/;+<(!, 	D.B4;CW.X.XD"+59[5MD"26J4;Kg6h6hD"39=9TD"6!!###K#++D,BCCCCC	D 	Dr   buffer_context_ptrc                    | j         5  | j        sJ | j                                         | j        r4t          dt	          | j                            sJ 	 d d d            d S | j        j        dk    sJ | j        r9t          d          sJ t          d          	                    | j
                   nt          d          sJ d d d            d S # 1 swxY w Y   d S )Nz:Buffer ended, others remain: len(self._audio_data_in_use)=r   z+Last buffer ended normally, dispatching eoson_eosz4Last buffer ended normally, source is lagging behind)re   ra   popleftrs   lenrh   buffers_queuedrb   r	   sync_dispatch_to_playerr/   )r*   r   s     r   on_buffer_endz XAudio2AudioPlayer.on_buffer_end   s    " 	V 	V****#++--- & ]c$BY>Z>Z]]^^^^^	V 	V 	V 	V 	V 	V 	V 	V )8A====, VKLLLLL8$$<<T[IIII
 TUUUUU'	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	Vs   AC&A#CCCrefill_sizec                    t          d| d          sJ | j                                         |                     || j                  }| j                                         |Ht          d          sJ d| _        | j        s't          d          	                    | j
                   dS t          j        |          }| j                            |           | j                            |           t          d|j         d          sJ |                     | j        |j                   | xj        |j        z  c_        dS )zGet one piece of AudioData and submit it to the voice.
        This method will release the lock around the call to `get_audio_data`,
        so make sure it's held upon calling.
        z"XAudio2: Retrieving new buffer of BNzXAudio2: Source is out of dataTr   z"XAudio2: Submitted buffer of size )rs   re   release_get_and_compensate_audio_datar`   acquirerb   ra   r	   r   r/   r   rm   appendrh   rn   lengthappend_eventsr_   events)r*   r   ro   rp   s       r   _refillzXAudio2AudioPlayer._refill   sR   
 I;IIIJJJJJ%%'''88dFWXX
%%''';<<<<<,0D)* J8$$<<T[IIIF0<<
&&z222,,Z888O:;LOOOPPPPP4-z/@AAAj//r   c                 `    | j         }|j        |j        z
  | j        j        j        z  | _        d S r   )rh   samples_playedsamples_played_at_last_recycler.   rg   bytes_per_framer`   )r*   voices     r   _update_play_cursorz&XAudio2AudioPlayer._update_play_cursor   s6    &!E$HHK$45 	r   c                     | j         S r   )r`   r)   s    r   get_play_cursorz"XAudio2AudioPlayer.get_play_cursor   s      r   c                     | j         5  |                                  |                     | j                   |                                  d d d            d S # 1 swxY w Y   d S r   )re   r   dispatch_media_eventsr`   _maybe_refillr)   s    r   workzXAudio2AudioPlayer.work   s    " 	! 	!$$&&&&&t'8999   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   AAAAc                     | j         rdS | j        | j        z
  }|| j        k    rdS | j        |z
  }|                     | j        j                            |                     dS )NFT)	rb   r_   r`    _buffered_data_comfortable_limit_buffered_data_ideal_sizer   r.   rg   
align_ceil)r*   remaining_bytesmissing_bytess      r   r   z XAudio2AudioPlayer._maybe_refill   sl    ( 	5,t/@@dCCC56HT[-88GGHHHtr   c                 n    | j         5  |                                  d d d            d S # 1 swxY w Y   d S r   )re   r   r)   s    r   prefill_audioz XAudio2AudioPlayer.prefill_audio
  s    " 	! 	!   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   *..rC   c                     || j         _        d S r   )rh   rC   rF   s     r   
set_volumezXAudio2AudioPlayer.set_volume  s    (.%%%r   rH   c                 T    | j         j        rt          |          | j         _        d S d S r   )rh   r   r   rH   rK   s     r   set_positionzXAudio2AudioPlayer.set_position  s6    !, 	M.B8.L.LD"+++	M 	Mr   r   c                 :    | j         j        r|| j         _        dS dS )zVNot a true min distance, but similar effect. Changes CurveDistanceScaler default is 1.N)rh   r   r   )r*   r   s     r   set_min_distancez#XAudio2AudioPlayer.set_min_distance  s.    !, 	B5AD"222	B 	Br   max_distancec                     dS )z No such thing built into xaudio2Nr   )r*   r   s     r   set_max_distancez#XAudio2AudioPlayer.set_max_distance  s    r   r}   c                     || j         _        d S r   )rh   r~   )r*   r}   s     r   	set_pitchzXAudio2AudioPlayer.set_pitch  s    +0(((r   r   c                 T    | j         j        rt          |          | j         _        d S d S r   )rh   r   r   r   )r*   r   s     r   set_cone_orientationz'XAudio2AudioPlayer.set_cone_orientation!  s7    !, 	]6JK[6\6\D"333	] 	]r   cone_inner_anglec                 r    | j         j        r*t          |          | _        |                                  d S d S r   )rh   r   intr\   r   )r*   r   s     r   set_cone_inner_anglez'XAudio2AudioPlayer.set_cone_inner_angle%  C    !, 	$%()9%:%:D"!!#####	$ 	$r   cone_outer_anglec                 r    | j         j        r*t          |          | _        |                                  d S d S r   )rh   r   r   r]   r   )r*   r   s     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]   maxrh   set_cone_anglesmathradians)r*   innerouters      r   r   z#XAudio2AudioPlayer._set_cone_angles/  s`    D*D,BCCD*D,BCC..t|E/B/BDLQVDWDWXXXXXr   r   c                 :    | j         j        r|| j         _        d S d S r   )rh   r   r   )r*   r   s     r   set_cone_outer_gainz&XAudio2AudioPlayer.set_cone_outer_gain4  s.    !, 	I9HD"666	I 	Ir   )rY   r    r.   r   r/   r   r   Nr9   ) r:   r;   r<   r+   rk   rq   r8   rw   r6   rt   r   r   r   r   r   r   boolr   r   rW   r   r   r   r   r   r   r   r   r   r   r   __classcell__)ri   s   @r   r0   r0   Q   s       e e e e e e@& & & &
= 
= 
= 
=& & & & - - - -
- 
- 
- 
-D D D D D D(V V V V V V003 04 0 0 0 04
 
 
 
! ! ! ! !! ! ! !
t 
 
 
 
! ! ! !/ /4 / / / /MU5%+>%? MD M M M MBU Bt B B B B
U t    1u 1 1 1 1 1]U5%;N5O ]TX ] ] ] ]$U $t $ $ $ $
$U $t $ $ $ $
Y Y Y Y
I5 IT I I I I I I I Ir   r0   ) collectionsr   r   rc   typingr   r   r   pyglet.media.drivers.baser   r   r	   !pyglet.media.player_worker_threadr
   pyglet.media.drivers.listenerr   pyglet.utilr    r   pyglet.media.codecsr   r   r   pyglet.media.playerr   rs   rW   r   r    r%   r0   r   r   r   <module>r      s              . . . . . . . . . . Z Z Z Z Z Z Z Z Z Z @ @ @ @ @ @ : : : : : : # # # # # #       +BBBBBBBBBB****** 
]	#	#eE5%,?&@ U5RWY^K^E_    
& & & & &' & & &:8 8 8 8 8& 8 8 86eI eI eI eI eI, eI eI eI eI eIr   