
    ^je/                         d dl Z d dlZddl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  ed          Zd	 Zd
 Zd Z G d de          Z G d de	          Z G d de          ZdS )    N   )	interface)AbstractAudioDriverAbstractAudioPlayer
MediaEvent)AbstractListener)PlayerWorkerThread)debug_printdebug_mediac                     | \  }}}||| fS N )coordinatesxyzs       f/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/media/drivers/directsound/adaptation.py_convert_coordinatesr      s    GAq!a!8O    c                     | dk    rdS t          dt          t          dt          j        t          | d                    z            d                    S )z
    Convert linear gain in range [0.0, 1.0] to 100ths of dB.

    Power gain = P1/P2
    dB = 2 log(P1/P2)
    dB * 100 = 1000 * log(power gain)
    r   ii  r   )maxminintmathlog2)gains    r   _gain2dbr      sK     qyyvvs3tdiD!&=&==>>BBCCCr   c                 L    t          j        dt          |           dz            S )z$Convert 100ths of dB to linear gain.g      $@g     @@)r   powfloat)dbs    r   _db2gainr"      s    8D%))F*+++r   c                   &    e Zd Zd Zd Zd Zd ZdS )DirectSoundDriverc                 6   t          j                    | _        | j                                        | _        t          | j        | j        j                  | _        | j        J | j        J t                      | _	        | j	        
                                 d S r   )r   r$   
_ds_drivercreate_listener_ds_listenerDirectSoundListenerprimary_buffer	_listenerr	   workerstartselfs    r   __init__zDirectSoundDriver.__init__%   s    #577 O;;==,T->@^__*** ,,,(**r   c                 6    | j         J t          | ||          S r   )r&   DirectSoundAudioPlayer)r/   sourceplayers      r   create_audio_playerz%DirectSoundDriver.create_audio_player0   s"    ***%dFF;;;r   c                 4    | j         J | j        J | j        S r   )r&   r(   r+   r.   s    r   get_listenerzDirectSoundDriver.get_listener4   s'    *** ,,,~r   c                 0   | j         t          d          sJ d S t          d          sJ | j                                         | j                                          d | _         | j                                         d | _        t          d          sJ d S )Nz6DirectSoundDriver.delete() on deleted driver, ignoringzDeleting DirectSoundDriverzDirectSoundDriver deleted.)r(   _debugr,   stopdeleter&   r.   s    r   r;   zDirectSoundDriver.delete9   s    $RSSSSSF233333  """    23333333r   N)__name__
__module____qualname__r0   r5   r7   r;   r   r   r   r$   r$   $   sP        	 	 	< < <  
4 4 4 4 4r   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(   _ds_primary_buffer)r/   ds_listenerds_primary_buffers      r   r0   zDirectSoundListener.__init__I   s    '"3r   c                 F    || _         t          |          | j        _        d S r   )_volumer   rA   volumer/   rF   s     r   _set_volumezDirectSoundListener._set_volumeM   s"    )1&)9)9&&&r   c                 F    || _         t          |          | j        _        d S r   )	_positionr   r(   positionr/   rK   s     r   _set_positionz!DirectSoundListener._set_positionQ   s"    !%9(%C%C"""r   c                 <    || _         |                                  d S r   )_forward_orientation_set_orientationr/   orientations     r   _set_forward_orientationz,DirectSoundListener._set_forward_orientationU   s"    $/!r   c                 <    || _         |                                  d S r   )_up_orientationrP   rQ   s     r   _set_up_orientationz'DirectSoundListener._set_up_orientationY   s"    *r   c                 l    t          | j                  t          | j                  z   | j        _        d S r   )r   rO   rU   r(   rR   r.   s    r   rP   z$DirectSoundListener._set_orientation]   s2    )=d>W)X)X+?@T+U+U*V%%%r   N)	r<   r=   r>   r0   rH   rM   rS   rV   rP   r   r   r   r)   r)   H   sv        4 4 4: : :D D D          W W W W Wr   r)   c                        e Zd Z f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 xZS )r2   c                    t                                          ||           || _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d | _
        d| _        d| _        | j        | _        | j        j                            |j        | j                  | _        d| j        _        | j        j        | j        k    sJ d S )NFih  r   )superr0   driver_playing_cone_inner_angle_cone_outer_angle_play_cursor_ring_write_cursor_ring_write_cursor_play_cursor_eos_cursor_possible_eos_cursor_has_underrun_buffered_data_ideal_size_buffer_sizer&   create_bufferaudio_format
_ds_buffercurrent_positionbuffer_size)r/   r[   r3   r4   	__class__s       r   r0   zDirectSoundAudioPlayer.__init__c   s    (((
 
  "%!$ "#"#
   
 %&! # !:+0>>v?RTXTeff+,(*d.???????r   c                     | j         j        :| j         j                            |            | j                                         d S d S r   )r[   r&   r,   removerj   r;   r.   s    r   r;   zDirectSoundAudioPlayer.delete   sH    ;!-K%%d+++O""$$$$$ .-r   c                     t          d          sJ | j        s d| _        | j                                         | j        j                            |            t          d          sJ d S )NzDirectSound playTzreturn DirectSound play)r9   r\   rj   playr[   r,   addr.   s    r   rq   zDirectSoundAudioPlayer.play   sp    ()))))} 	# DMO  """t$$$/0000000r   c                     t          d          sJ | j        j                            |            | j        r d| _        | j                                         t          d          sJ d S )NzDirectSound stopFzreturn DirectSound stop)r9   r[   r,   ro   r\   rj   r:   r.   s    r   r:   zDirectSoundAudioPlayer.stop   sp    ()))))!!$'''= 	#!DMO  """/0000000r   c                     t          d          sJ t                                                       d| j        _        dx| _        | _        dx| _        | _        d | _	        d| _
        d| _        d S )NzDirectSound clearr   F)r9   rZ   clearrj   rk   r_   r`   rb   ra   rc   rd   re   )r/   rm   s    r   ru   zDirectSoundAudioPlayer.clear   sq    )*****+,(;<<!8122D.$%!"r   c                     | j         S r   )rb   r.   s    r   get_play_cursorz&DirectSoundAudioPlayer.get_play_cursor   s      r   c                    | j         sJ |                                  |                     | j                   | j        |                                  d S | j        sO| j        | j        k    r?d| _        t          d          sJ t          d          	                    | j
                   |                                 x}| j        k     r |                     d | j        |z
             d S d S )NTz'DirectSoundAudioPlayer: Dispatching eoson_eos)r\   _update_play_cursordispatch_media_eventsrb   rc   _maybe_fillre   r9   r   sync_dispatch_to_playerr4   _get_used_buffer_space _buffered_data_comfortable_limit_writerg   r/   useds     r   workzDirectSoundAudioPlayer.work   s    }}  """""4#4555#F ! 	Fd&7$:J&J&J!%DCDDDDDx  88EEE
 //111DT5ZZZKKd/$677777 [Zr   c                     |                                  x}| j        k     r<|                     | j        j                            | j        |z
                       d S d S r   )r~   r   _refillr3   ri   alignrg   r   s     r   r|   z"DirectSoundAudioPlayer._maybe_fill   s]    //111DT5ZZZLL1778ID8PQQRRRRR [Zr   c                 X   |                      || j                  }|<t          d          sJ | j        | j        | _        |                     d|           dS t          d|j         d          sJ |                     | j        |j	                   |                     ||           dS )zeRefill the next `size` bytes in the buffer using the source.
        `size` must be aligned.
        Nz)DirectSoundAudioPlayer: Out of audio datazDirectSoundAudioPlayer: Got z bytes of audio data)
_get_and_compensate_audio_datarb   r9   rc   rd   r   lengthappend_eventsra   events)r/   size
audio_datas      r   r   zDirectSoundAudioPlayer._refill   s     88t?PQQ
EFFFFF'#'#< KKd##### `9J```aaaaat1:3DEEEKK
D)))))r   c                     | j         j        j        }|| j        k     r.| xj        | j        | j        z
  z  c_        | xj        |z  c_        n| xj        || j        z
  z  c_        || _        d S r   )rj   rk   play_cursorr_   rb   rg   )r/   play_cursor_rings     r   rz   z*DirectSoundAudioPlayer._update_play_cursor   s    ?;Gd444!2T5K!KK!11!1D4J!JJ!1r   c                 <    t          | j        | j        z
  d          S )Nr   )r   ra   rb   r.   s    r   r~   z-DirectSoundAudioPlayer._get_used_buffer_space   s    4%(991===r   c           	         |dk    rdS |d}n+t          ||j                  }| j        |z   | _        |j        }t          d| d| d||z
   d          sJ | j                            | j        |          }|j	        j
        }|j        j
        }d|cxk     r| j        k    sn J |||z   k    sJ |}| j        j        j        dk    rdnd}	||k     rH|dk    rt!          j        |j        ||           t!          j        |j        j
        |z   |	||z
             nV|dk    rt!          j        |j        ||           |j        r.||z
  x}
dk    r#t!          j        |j        ||z   |
           ||
z  }|j        r,|dk    r&t!          j        |j        j
        ||z
  z   |	|           | j                            |           | xj        |z  c_        | xj        |z  c_        | xj        | j        z  c_        dS )	a  Write data into the circular DSBuffer, starting at _write_cursor_ring.
        May supply None as audio_data to only write silence.
        If the audio data is not sufficient, will fill silence afterwards.
        If too much audio data is supplied, will write as much as fits.
        r   NzWriting zB (zB data, z
B silence)      )r   r   ra   rd   pointerr9   rj   lockr`   audio_length_1valueaudio_length_2rg   r3   ri   sample_sizectypesmemmoveaudio_ptr_1memsetaudio_ptr_2unlock)r/   r   region_size
audio_size	audio_ptr	write_ptra1_sizea2_size
a2_silencesa2_audios              r   r   zDirectSoundAudioPlayer._write   s]    !FJJ[**;<<J(,(:Z(GD%"*Iiiiii[S]E]iiijjjjjO(()@+NN	*0*0;3333$"3333333g/////
K,8A==DD1A~~y4iLLLM)/5
BAwQ[G[\\\\{{y4iIII$ 'zG7K*L(PQ)Q)Qy4i'6I8TTTh&
  	_Z!^^M)/5:9MNPQS]^^^y)))k);.4#44r   c                 8    t          |          | j        _        d S r   )r   rj   rF   rG   s     r   
set_volumez!DirectSoundAudioPlayer.set_volume!  s    !)&!1!1r   c                 T    | j         j        rt          |          | j         _        d S d S r   )rj   is3dr   rK   rL   s     r   set_positionz#DirectSoundAudioPlayer.set_position$  s4    ? 	F';H'E'EDO$$$	F 	Fr   c                 :    | j         j        r|| j         _        d S d S r   )rj   r   min_distance)r/   r   s     r   set_min_distancez'DirectSoundAudioPlayer.set_min_distance(  )    ? 	8+7DO(((	8 	8r   c                 :    | j         j        r|| j         _        d S d S r   )rj   r   max_distance)r/   r   s     r   set_max_distancez'DirectSoundAudioPlayer.set_max_distance,  r   r   c                 `    t          || j        j        j        z            }|| j        _        d S r   )r   r3   ri   sample_raterj   	frequency)r/   pitchr   s      r   	set_pitchz DirectSoundAudioPlayer.set_pitch0  s,     8 DDEE	$-!!!r   c                 T    | j         j        rt          |          | j         _        d S d S r   )rj   r   r   cone_orientation)r/   r   s     r   set_cone_orientationz+DirectSoundAudioPlayer.set_cone_orientation4  s5    ? 	V/CDT/U/UDO,,,	V 	Vr   c                 r    | j         j        r*t          |          | _        |                                  d S d S r   )rj   r   r   r]   _set_cone_angles)r/   cone_inner_angles     r   set_cone_inner_anglez+DirectSoundAudioPlayer.set_cone_inner_angle8  B    ? 	$%()9%:%:D"!!#####	$ 	$r   c                 r    | j         j        r*t          |          | _        |                                  d S d S r   )rj   r   r   r^   r   )r/   cone_outer_angles     r   set_cone_outer_anglez+DirectSoundAudioPlayer.set_cone_outer_angle=  r   r   c                     t          | j        | j                  }t          | j        | j                  }| j                            ||           d S r   )r   r]   r^   r   rj   set_cone_angles)r/   innerouters      r   r   z'DirectSoundAudioPlayer._set_cone_anglesB  sJ    D*D,BCCD*D,BCC''u55555r   c                 X    | j         j        rt          |          }|| j         _        d S d S r   )rj   r   r   cone_outside_volume)r/   cone_outer_gainrF   s      r   set_cone_outer_gainz*DirectSoundAudioPlayer.set_cone_outer_gainG  s6    ? 	9o..F28DO///	9 	9r   c                 .    |                                   d S r   )r|   r.   s    r   prefill_audioz$DirectSoundAudioPlayer.prefill_audioL  s    r   )r<   r=   r>   r0   r;   rq   r:   ru   rw   r   r|   r   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rm   s   @r   r2   r2   b   s       /@ /@ /@ /@ /@b% % %
1 1 11 1 1# # # # #! ! !8 8 8,S S S* * * 2 2 2> > >.5 .5 .5`2 2 2F F F8 8 88 8 8. . .V V V$ $ $
$ $ $
6 6 6
9 9 9
      r   r2   )r   r    r   pyglet.media.drivers.baser   r   r   pyglet.media.drivers.listenerr   !pyglet.media.player_worker_threadr	   pyglet.utilr
   r9   r   r   r"   r$   r)   r2   r   r   r   <module>r      sZ           Z Z Z Z Z Z Z Z Z Z : : : : : : @ @ @ @ @ @ # # # # # #	]	#	#  

D 
D 
D, , ,
!4 !4 !4 !4 !4+ !4 !4 !4HW W W W W* W W W4k k k k k0 k k k k kr   