
    \
j?                         d dl Z d dlZddlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ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)debug_print)
MediaEvent)PlayerWorkerThread)AbstractAudioDriverAbstractAudioPlayer)AbstractListenerdebug_mediac                     | \  }}}||| fS N )coordinatesxyzs       e/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/media/drivers/directsound/adaptation.py_convert_coordinatesr   1   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   6   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"   C   s    8D%))F*+++r   c                        e Zd ZdZdZdZ f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d Zd Z d Z!d Z"d  Z#d! Z$d" Z% xZ&S )#DirectSoundAudioPlayerih  i%  c                    t          t          |                               ||           || _        || _        d| _        d | _        d| _        d| _        d | _	        d| _
        d| _        g | _        g | _        |j        }| j                            |          | _        | j        j        | _        d| j        _        |                     | j                   d S )NFr   )superr$   __init__driver
_ds_driver_playing_audiodata_buffer_write_cursor_play_cursor_eos_cursor_play_cursor_ring_write_cursor_ring_events_timestampsaudio_formatcreate_buffer
_ds_bufferbuffer_size_buffer_sizecurrent_positionrefill)selfr(   	ds_driversourceplayerr3   	__class__s         r   r'   zDirectSoundAudioPlayer.__init__P   s    $d++44VVDDD
 # 
 "&
   
 "#"#  * /77EE O7+,(D%&&&&&r   c                 L    | j         j        j                                         d S r   )r(   r)   _native_dsoundReleaser:   s    r   __del__zDirectSoundAudioPlayer.__del__   s"    -5577777r   c                 D    | j         j                            |            d S r   )r(   workerremoverB   s    r   deletezDirectSoundAudioPlayer.delete   s!    !!$'''''r   c                     t          d          sJ | j        j                            |            | j        s4|                                  d| _        | j                                         t          d          sJ d S )NzDirectSound playTzreturn DirectSound play)_debugr(   rE   addr*   _get_audiodatar5   playrB   s    r   rL   zDirectSoundAudioPlayer.play   s    ()))))t$$$} 	#!!! DMO  """/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)rI   r(   rE   rF   r*   r5   stoprB   s    r   rN   zDirectSoundAudioPlayer.stop   sp    ()))))!!$'''= 	#!DMO  """/0000000r   c                    t          d          sJ t          t          |                                            d| j        _        dx| _        | _        | j        | _	        d | _
        d | _        | j        d d = | j        d d = d S )NzDirectSound clearr   )rI   r&   r$   clearr5   r8   r/   r0   r,   r-   r.   r+   r1   r2   )r:   r>   s    r   rP   zDirectSoundAudioPlayer.clear   s    )*****$d++11333+,(;<<!8 .!%LOQQQr   c                 T   |dk    rt          d|          sJ |                                 }|Ht          d|j                  sJ t          ||j                  }|                     ||           ||z  }n)t          d          sJ |                     d |           d}|dk    d S d S )Nr   zrefill, write_size =writezwrite silence)rI   rK   lengthr   rR   )r:   
write_size
audio_datarS   s       r   r9   zDirectSoundAudioPlayer.refill   s    1nn0*=====,,..J%gz'899999Z):;;

:v...f$

o.....

4,,,
 1nnnnnnr   c                 4    | j         d uo| j        | j         k    S r   )r.   r-   rB   s    r   _has_underrunz$DirectSoundAudioPlayer._has_underrun   s%     , 9%(88	:r   c                 V    t          d|                              | j                   d S Nr   )r   _sync_dispatch_to_playerr=   )r:   
event_names     r   _dispatch_new_eventz*DirectSoundAudioPlayer._dispatch_new_event   s(    1j!!::4;GGGGGr   c                 f    | j         | j         j        dk    r|                                  | j         S rY   )r+   rS   _get_new_audiodatarB   s    r   rK   z%DirectSoundAudioPlayer._get_audiodata   s6    !)T-C-Ja-O-O##%%%%%r   c                     t          d          sJ |                                 }| j                            | j        |          | _        | j        t          d                    | j        j                            sJ | j        | 	                                 | 
                    | j                   |                     | j                   d | _        d S | j        t          d          sJ | j        | _        d S d S )NzGetting new audio data buffer.z"New audio data available: {} byteszNo more audio data.)rI   get_audio_time_diffr<   get_audio_datar7   r+   formatrS   r.   _move_write_cursor_after_eos_add_audiodata_events_add_audiodata_timestampr,   )r:   compensation_times     r   r^   z)DirectSoundAudioPlayer._get_new_audiodata   s	   677777 !4466!%!;!;D<MO`!a!a!->EEdF\Fcddeeeee+11333&&t'=>>>))$*@AAA#D%/00000#1D &%r   c                 r   | j         | j        k     rT| j        | j        z
  }t          d|          sJ | j        | _        | xj        |z  c_        | xj        | j        z  c_        d S | j         | j        z
  }t          d|          sJ | j         | _        | xj        |z  c_        | xj        | j        z  c_        d S )NzMoving cursor back)r-   r.   r,   rI   r0   r7   )r:   cursor_diffs     r   rc   z3DirectSoundAudioPlayer._move_write_cursor_after_eos   s    t///,t/??K.<<<<<!%!1D##{2####t'88#### +d.>>K.<<<<<!%!2D##{2####t'88####r   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<   r3   bytes_per_secondrI   r1   append)r:   rU   eventevent_cursors       r   rd   z,DirectSoundAudioPlayer._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,   rS   r2   rn   rl   duration)r:   rU   	ts_cursors      r   re   z/DirectSoundAudioPlayer._add_audiodata_timestamp   sO    &)::	
,z/BBC	E 	E 	E 	E 	Er   c                 <   | j         j        j        }|| j        k     r$| xj        | j        | j        z
  z  c_        d| _        | xj        || j        z
  z  c_        || _        |                                  |                                  |                                  d S rY   )	r5   r8   play_cursorr/   r-   r7   _dispatch_pending_events_cleanup_timestamps_check_underrun)r:   play_cursor_rings     r   update_play_cursorz)DirectSoundAudioPlayer.update_play_cursor   s    ?;Gd444!2T5K!KK%&D"-0FFF!1%%'''  """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: {})r1   r-   poprn   rI   rb   rZ   r=   )r:   pending_events_ro   s       r   rv   z/DirectSoundAudioPlayer._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 rY   )r2   r-   rB   s    r   rw   z*DirectSoundAudioPlayer._cleanup_timestamps  sy     	$4#3A#6q#9D<M#M#M #  	$4#3A#6q#9D<M#M#M#M#M 	$ 	$ 	$ 	$#M#Mr   c                     | j         rP|                                 r>t          d          sJ |                                  |                     d           d S d S d S )Nzunderrun, stoppingon_eos)r*   rW   rI   rN   r\   rB   s    r   rx   z&DirectSoundAudioPlayer._check_underrun  so    = 	/T//11 	/./////IIKKK$$X.....	/ 	/ 	/ 	/r   c                 |    |                                   | j        }| j        }| j        t	          ||z
  d          z
  S rY   )rz   r-   r,   r7   r   )r:   ru   write_cursors      r   get_write_sizez%DirectSoundAudioPlayer.get_write_size  sA    !!!') 3|k'A1#E#EEEr   c                    |dk    rdS | j                             | j        |          }d|cxk     r| j        k    sn J ||j        j        |j        j        z   k    sJ |rt          j        |j	        |j
        |j        j                   |                    |j        j        | j        j                   |j        j        dk    rTt          j        |j        |j
        |j        j                   |                    |j        j        | j        j                   nt| j        j        j        dk    rd}nd}t          j        |j	        ||j        j                   |j        j        dk    r%t          j        |j        ||j        j                   | j                             |           | xj        |z  c_        | xj        |z  c_        | xj        | j        z  c_        d S )Nr         )r5   lockr0   r7   audio_length_1valueaudio_length_2ctypesmemmoveaudio_ptr_1dataconsumer<   r3   audio_ptr_2sample_sizememsetunlockr,   )r:   rU   rS   	write_ptrcs        r   rR   zDirectSoundAudioPlayer.write   s   Q;;1O(()@&II	6....T.......17):R:XXXXXX 	XN90*/9C[Cabbby7=t{?WXXX'-11y4joyG_Gefff""9#;#A4;C[\\\{'3q88M)/I4L4RSSS'-11i3Q	8P8VWWWy)))f$6)4#44r   c                     |                                   | j        r=| j        d         \  }}|| j        |z
  t          | j        j        j                  z  z   }nd }|S rY   )rz   r2   r-   r    r<   r3   rm   )r:   cursortsresults       r   get_timezDirectSoundAudioPlayer.get_time=  sc    !!! 	)!,JFB4,v5t{?W?h9i9iiiFFFr   c                 8    t          |          | j        _        d S r   )r   r5   volumer:   r   s     r   
set_volumez!DirectSoundAudioPlayer.set_volumeG  s    !)&!1!1r   c                 T    | j         j        rt          |          | j         _        d S d S r   )r5   is3dr   positionr:   r   s     r   set_positionz#DirectSoundAudioPlayer.set_positionJ  s4    ? 	F';H'E'EDO$$$	F 	Fr   c                 :    | j         j        r|| j         _        d S d S r   )r5   r   min_distance)r:   r   s     r   set_min_distancez'DirectSoundAudioPlayer.set_min_distanceN  )    ? 	8+7DO(((	8 	8r   c                 :    | j         j        r|| j         _        d S d S r   )r5   r   max_distance)r:   r   s     r   set_max_distancez'DirectSoundAudioPlayer.set_max_distanceR  r   r   c                 `    t          || j        j        j        z            }|| j        _        d S r   )r   r<   r3   sample_rater5   	frequency)r:   pitchr   s      r   	set_pitchz DirectSoundAudioPlayer.set_pitchV  s,     8 DDEE	$-!!!r   c                 T    | j         j        rt          |          | j         _        d S d S r   )r5   r   r   cone_orientation)r:   r   s     r   set_cone_orientationz+DirectSoundAudioPlayer.set_cone_orientationZ  s5    ? 	V/CDT/U/UDO,,,	V 	Vr   c                 r    | j         j        r*t          |          | _        |                                  d S d S r   )r5   r   r   _cone_inner_angle_set_cone_angles)r:   cone_inner_angles     r   set_cone_inner_anglez+DirectSoundAudioPlayer.set_cone_inner_angle^  B    ? 	$%()9%:%:D"!!#####	$ 	$r   c                 r    | j         j        r*t          |          | _        |                                  d S d S r   )r5   r   r   _cone_outer_angler   )r:   cone_outer_angles     r   set_cone_outer_anglez+DirectSoundAudioPlayer.set_cone_outer_anglec  r   r   c                     t          | j        | j                  }t          | j        | j                  }| j                            ||           d S r   )r   r   r   r   r5   set_cone_angles)r:   innerouters      r   r   z'DirectSoundAudioPlayer._set_cone_anglesh  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   )r5   r   r   cone_outside_volume)r:   cone_outer_gainr   s      r   set_cone_outer_gainz*DirectSoundAudioPlayer.set_cone_outer_gainm  s6    ? 	9o..F28DO///	9 	9r   c                 X    |                                  }|                     |           d S r   )r   r9   )r:   rT   s     r   prefill_audioz$DirectSoundAudioPlayer.prefill_audior  s+    ((**
Jr   )'__name__
__module____qualname__r   r   min_buffer_sizer'   rC   rG   rL   rN   rP   r9   rW   r\   rK   r^   rc   rd   re   rz   rv   rw   rx   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r>   s   @r   r$   r$   H   s6        O1' 1' 1' 1' 1'f8 8 8( ( (	1 	1 	11 1 1	  	  	  	  	   : : :H H H& & &2 2 2(9 9 9 7 7 7E E E
  	8 	8 	8$ $ $/ / /F F F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   r$   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )DirectSoundDriverc                     t          j                    | _        | j                                        | _        | j        J | j        J t                      | _        | j                                         d S r   )r   r   r)   create_listener_ds_listenerr   rE   startrB   s    r   r'   zDirectSoundDriver.__init__x  sl    #577 O;;==*** ,,,(**r   c                 .    |                                   d S r   )rG   rB   s    r   rC   zDirectSoundDriver.__del__  s    r   c                 ~    | j         J | j         j                                         t          | | j         ||          S r   )r)   r@   AddRefr$   )r:   r<   r=   s      r   create_audio_playerz%DirectSoundDriver.create_audio_player  s?    *** 	&--///%dDOVVLLLr   c                 d    | j         J | j        J t          | j        | j         j                  S r   )r)   r   DirectSoundListenerprimary_bufferrB   s    r   get_listenerzDirectSoundDriver.get_listener  s7    *** ,,,"4#4do6TUUUr   c                 F    | j                                          d | _        d S r   )rE   rN   r   rB   s    r   rG   zDirectSoundDriver.delete  s$     r   N)r   r   r   r'   rC   r   r   rG   r   r   r   r   r   w  se            M M MV V V
! ! ! ! !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   r5   )r:   ds_listener	ds_buffers      r   r'   zDirectSoundListener.__init__  s    '#r   c                 F    || _         t          |          | j        _        d S r   )_volumer   r5   r   r   s     r   _set_volumezDirectSoundListener._set_volume  s!    !)&!1!1r   c                 F    || _         t          |          | j        _        d S r   )	_positionr   r   r   r   s     r   _set_positionz!DirectSoundListener._set_position  s"    !%9(%C%C"""r   c                 <    || _         |                                  d S r   )_forward_orientation_set_orientationr:   orientations     r   _set_forward_orientationz,DirectSoundListener._set_forward_orientation  s"    $/!r   c                 <    || _         |                                  d S r   )_up_orientationr   r   s     r   _set_up_orientationz'DirectSoundListener._set_up_orientation  s"    *r   c                 l    t          | j                  t          | j                  z   | j        _        d S r   )r   r   r   r   r   rB   s    r   r   z$DirectSoundListener._set_orientation  s2    )=d>W)X)X+?@T+U+U*V%%%r   N)	r   r   r   r'   r   r   r   r   r   r   r   r   r   r     sv        $ $ $2 2 2D D D          W W W W Wr   r   )r   r    r   pyglet.utilr   pyglet.media.eventsr   pyglet.media.mediathreadsr   pyglet.media.drivers.baser   r	   pyglet.media.drivers.listenerr
   rI   r   r   r"   r$   r   r   r   r   r   <module>r      sj  H         # # # # # # * * * * * * 8 8 8 8 8 8 N N N N N N N N : : : : : :	]	#	#  

D 
D 
D, , ,
l  l  l  l  l 0 l  l  l ^	! ! ! ! !+ ! ! !BW W W W W* W W W W Wr   