
    \
j6                         d dl 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 d dlmZ  ed	          Z G d
 de          Z G d de          Z G d de	          ZdS )    N   )	interface)debug_print)
MediaEvent)AbstractAudioDriverAbstractAudioPlayer)PlayerWorkerThread)AbstractListenerdebug_mediac                   P     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	d	 Z
d
 Z xZS )OpenALDriverNc                 h   t                                                       t          j        |          | _        | j                                        | _        | j                                         t          |           | _	        t                      | _        | j                                         d S N)super__init__r   OpenALDevicedevicecreate_contextcontextmake_currentOpenALListener	_listenerr	   workerstart)selfdevice_name	__class__s     `/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/media/drivers/openal/adaptation.pyr   zOpenALDriver.__init__1   s    ,[99{1133!!###'--(**    c                 P    t          d          sJ |                                  d S )NzDelete OpenALDriver)_debugdeleter   s    r   __del__zOpenALDriver.__del__=   s(    +,,,,,r   c                 F    | j         
J d            t          | ||          S NzDevice was closed)r   OpenALAudioPlayer)r   sourceplayers      r   create_audio_playerz OpenALDriver.create_audio_playerA   s+    {&&(;&&& vv666r   c                 F    | j                                          d | _        d S r   )r   stopr   r#   s    r   r"   zOpenALDriver.deleteE   s!    r   c                 6    ||f|                                  k    S r   )get_version)r   majorminors      r   have_versionzOpenALDriver.have_versionI   s    u~!1!1!3!333r   c                 V    | j         
J d            | j                                         S r&   )r   r.   r#   s    r   r.   zOpenALDriver.get_versionL   s-    {&&(;&&&{&&(((r   c                 V    | j         
J d            | j                                         S r&   )r   get_extensionsr#   s    r   r4   zOpenALDriver.get_extensionsP   s-    {&&(;&&&{))+++r   c                 .    ||                                  v S r   )r4   )r   	extensions     r   have_extensionzOpenALDriver.have_extensionT   s    D//1111r   c                     | j         S r   )r   r#   s    r   get_listenerzOpenALDriver.get_listenerW   s
    ~r   r   )__name__
__module____qualname__r   r$   r*   r"   r1   r.   r4   r7   r9   __classcell__r   s   @r   r   r   0   s        
 
 
 
 
 
  7 7 7  4 4 4) ) ), , ,2 2 2      r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )r   c                 h    t          j        |          | _        t          j                    | _        d S r   )weakrefproxy_driverr   r   _al_listener)r   drivers     r   r   zOpenALListener.__init__\   s*    }V,,%466r   c                 (    t          d          sJ d S )NzDelete OpenALListener)r!   r#   s    r   r$   zOpenALListener.__del__`   s    -.......r   c                 ,    || j         _        || _        d S r   )rD   gain_volumer   volumes     r   _set_volumezOpenALListener._set_volumec   s    !'r   c                 ,    || j         _        || _        d S r   )rD   position	_positionr   rN   s     r   _set_positionzOpenALListener._set_positiong   s    %-"!r   c                 <    || j         z   | j        _        || _        d S r   )_up_orientationrD   orientation_forward_orientationr   rT   s     r   _set_forward_orientationz'OpenALListener._set_forward_orientationk   s#    (3d6J(J%$/!!!r   c                 <    | j         |z   | j        _        || _        d S r   )rU   rD   rT   rS   rV   s     r   _set_up_orientationz"OpenALListener._set_up_orientationo   s#    (,(AK(O%*r   N)	r:   r;   r<   r   r$   rL   rQ   rW   rY    r   r   r   r   [   sn        7 7 7/ / /  " " "0 0 0+ + + + +r   r   c                        e Zd ZdZdZ fdZd Zd Ze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$ xZ%S )"r'   i   g      ?c                 d   t          t          |                               ||           || _        |j                                        | _        d| _        d| _        d| _	        g | _
        g | _        d | _        g | _        d| _        d| _        d | _        |                     | j                   d S )Nr   F)r   r'   r   rE   r   create_sourcealsource_buffer_cursor_play_cursor_write_cursor_buffer_sizes_buffer_timestamps_underrun_timestamp_events_playing	_clearing_audiodata_bufferrefillideal_buffer_size)r   rE   r(   r)   r   s       r   r   zOpenALAudioPlayer.__init__{   s    &&//???4466       #% $(    
 "&D*+++++r   c                 .    |                                   d S r   )r"   r#   s    r   r$   zOpenALAudioPlayer.__del__   s    r   c                 R    | j         j                            |            d | _        d S r   )rE   r   remover^   r#   s    r   r"   zOpenALAudioPlayer.delete   s&    !!$'''r   c                 N    t          | j        | j        j        j        z            S r   )int_ideal_buffer_sizer(   audio_formatbytes_per_secondr#   s    r   rj   z#OpenALAudioPlayer.ideal_buffer_size   s     4*T[-E-VVWWWr   c                     t          d          sJ | j        J | j        J | j        j        s| j                                         d| _        d| _        | j        j                            |            d S )NzOpenALAudioPlayer.play()TF)	r!   rE   r^   
is_playingplayrf   rg   r   addr#   s    r   ru   zOpenALAudioPlayer.play   s    011111{&&&}(((}' 	!M   t$$$$$r   c                     | j         j                            |            t          d          sJ | j         J | j        J | j                                         d| _        d S )NzOpenALAudioPlayer.stop()F)rE   r   rm   r!   r^   pauserf   r#   s    r   r,   zOpenALAudioPlayer.stop   sk    !!$'''011111{&&&}(((r   c                    t          d          sJ | j        J | j        J t                                                       | j                                         |                                  | j                                         d| j        _        d| _        d| _	        d | _
        d| _        d| _        d| _        | j        d d = | j        d d = | j        d d = d S )NzOpenALAudioPlayer.clear()r   FT)r!   rE   r^   r   clearr,   _handle_processed_buffersbyte_offsetrf   rg   rh   r_   r`   ra   re   rb   rc   )r   r   s    r   rz   zOpenALAudioPlayer.clear   s    122222{&&&}(((&&((($%!!%LOqqq!#AAA&&&r   c                     | j         J | j        J |                                  | j        r| j        | _        n| j        | j        j        z   | _        |                                 sJ |                                  d S r   )	rE   r^   r{   rg   r_   r`   r|   _check_cursors_dispatch_eventsr#   s    r   _update_play_cursorz%OpenALAudioPlayer._update_play_cursor   s    {&&&}(((&&((( > 	P $ 3D $ 3dm6O OD""$$$$$r   c                 X   | j                                         }|dk    rt          | j                  |k    r]| j        d         Pt	          d          sJ | j        d         | j        d         t          | j        j        j	                  z  z   | _
        |                     |           |S )Nr   zOpenALAudioPlayer: Underrun)r^   unqueue_bufferslenrc   r!   rb   floatr(   rq   rr   rd   _update_buffer_cursorr   	processeds     r   r{   z+OpenALAudioPlayer._handle_processed_buffers   s    M1133	q==D+,,	99/3?;<<<<< ,0+B2+F&r*U4;3K3\-]-]],^(&&y111r   c                     | xj         t          | j        d |                   z  c_         | j        d |= | j        d |= d S r   )r_   sumrb   rc   r   s     r   r   z'OpenALAudioPlayer._update_buffer_cursor   sN    s4#5jyj#ABBBz	z*#JYJ///r   c                    | j         rx| j         d         d         | j        k    r`| j                             d          \  }}|                    | j                   | j         r | j         d         d         | j        k    Zd S d S d S d S Nr   )re   r`   pop_sync_dispatch_to_playerr)   )r   _events      r   r   z"OpenALAudioPlayer._dispatch_events   s    l 	8t|Aq1T5FFF|''**HAu**4;777 l 	8t|Aq1T5FFFFF 	8 	8 	8 	8FFr   c                     |                                   t          | j        | j        z
            }t	          | j        |z
  d          }t          d                    |                    sJ |S )Nr   zWrite size {} bytes)r   ro   ra   r`   maxrj   r!   format)r   buffer_size
write_sizes      r   get_write_sizez OpenALAudioPlayer.get_write_size  sn      """$,t/@@AA /+=qAA
+22:>>?????r   c                    t          d|          sJ || j        k    r|                                 }|nwt          ||j                  }|dk    rt          d          sJ n?t          d                    |                    sJ |                     ||           ||z  }|| j        k    | j        r8| j        j	        s.t          d          sJ | j        
                                 d S d S d S )Nri   r   zEmpty AudioData. Discard it.zWriting {} bytesunderrun)r!   min_buffer_size_get_audiodataminlengthr   _queue_audio_datarf   r^   rt   ru   )r   r   
audio_datar   s       r   ri   zOpenALAudioPlayer.refill  s"   h
+++++4///,,..J!Z%677F{{<====== 077??@@@@@&&z6:::f$
 4///  = 	!!9 	!*%%%%%M     	! 	! 	! 	!r   c                 f    | j         | j         j        dk    r|                                  | j         S r   )rh   r   _get_new_audiodatar#   s    r   r   z OpenALAudioPlayer._get_audiodata&  s6    !)T-C-Ja-O-O##%%%%%r   c                    t          d          sJ |                                 }| j                            | j        |          | _        | j        Jt          d                    | j        j                            sJ |                     | j                   d S t          d          sJ | 	                                r;t          d          sJ t          dd                              | j                   d S d S )NzGetting new audio data buffer.z"New audio data available: {} byteszNo audio data leftUnderrunr   on_eos)r!   get_audio_time_diffr(   get_audio_datarj   rh   r   r   _queue_events_has_underrunr   r   r)   )r   compensation_times     r   r   z$OpenALAudioPlayer._get_new_audiodata,  s   677777 4466 $ : :4;QSd e e!->EEdF\Fcddeeeeet566666./////!!## Nj)))))1h''@@MMMMMN Nr   c                     | j                                         }|                    || j        j        |           | j                             |           |                     ||           d S r   )r^   
get_bufferdatar(   rq   queue_buffer_update_write_cursor)r   r   r   bufs       r   r   z#OpenALAudioPlayer._queue_audio_data:  sb    m&&((T[5v>>>""3'''!!*f55555r   c                    | xj         |z  c_         | j                            |           | j                            |j                   |                    || j        j                   |                                 sJ d S r   )	ra   rb   appendrc   	timestampconsumer(   rq   r~   )r   r   r   s      r   r   z&OpenALAudioPlayer._update_write_cursor@  s    f$!!&)))&&z';<<<64;#;<<<""$$$$$$$r   c                     |j         D ]?}| j        |j        | j        j        j        z  z   }| j                            ||f           @d S r   )eventsra   r   r(   rq   rr   re   r   )r   r   r   cursors       r   r   zOpenALAudioPlayer._queue_eventsG  s\    & 	1 	1E'%/(9+: :FL0000	1 	1r   c                 "    | j         j        dk    S r   )r^   buffers_queuedr#   s    r   r   zOpenALAudioPlayer._has_underrunM  s    }+q00r   c                 ~   |                                   | j        s| j        }t          d          sJ nd| j        d         }t          d                    |                    sJ |1|| j        | j        z
  t          | j        j	        j
                  z  z  }t          d                    |                    sJ |S )Nz,OpenALAudioPlayer: Return underrun timestampr   z'OpenALAudioPlayer: Buffer timestamp: {}z OpenALAudioPlayer: get_time = {})r   rc   rd   r!   r   r`   r_   r   r(   rq   rr   )r   r   s     r   get_timezOpenALAudioPlayer.get_timeP  s      """& 		F0IHIIIIII/2ICJJ9UUVVVVV$t043FF$+2CDDE F	 8??	JJKKKKKr   c                    | j         dk    sJ | j        dk    sJ | j        dk    sJ | j        | j         k    sJ | j         | j        k    sJ t          d                    | j        | j         | j                            sJ dS )Nr   zBuffer[{}], Play[{}], Write[{}]T)r`   r_   ra   r!   r   r#   s    r   r~   z OpenALAudioPlayer._check_cursorsc  s     A%%%%"a''''!Q&&&&"d&77777 D$666667>>t?REIEVEIEWY Y Z Z 	Z 	Z Z tr   c                     || j         _        d S r   )r^   rH   rJ   s     r   
set_volumezOpenALAudioPlayer.set_volumen  s    #r   c                     || j         _        d S r   )r^   rN   rP   s     r   set_positionzOpenALAudioPlayer.set_positionq  s    !)r   c                     || j         _        d S r   )r^   reference_distance)r   min_distances     r   set_min_distancez"OpenALAudioPlayer.set_min_distancet  s    +7(((r   c                     || j         _        d S r   )r^   max_distance)r   r   s     r   set_max_distancez"OpenALAudioPlayer.set_max_distancew  s    %1"""r   c                     || j         _        d S r   )r^   pitch)r   r   s     r   	set_pitchzOpenALAudioPlayer.set_pitchz  s    #r   c                     || j         _        d S r   )r^   	direction)r   cone_orientations     r   set_cone_orientationz&OpenALAudioPlayer.set_cone_orientation}  s    "2r   c                     || j         _        d S r   )r^   cone_inner_angle)r   r   s     r   set_cone_inner_anglez&OpenALAudioPlayer.set_cone_inner_angle      )9&&&r   c                     || j         _        d S r   )r^   cone_outer_angle)r   r   s     r   set_cone_outer_anglez&OpenALAudioPlayer.set_cone_outer_angle  r   r   c                     || j         _        d S r   )r^   cone_outer_gain)r   r   s     r   set_cone_outer_gainz%OpenALAudioPlayer.set_cone_outer_gain  s    (7%%%r   c                 X    |                                  }|                     |           d S r   )r   ri   )r   r   s     r   prefill_audiozOpenALAudioPlayer.prefill_audio  s+    ((**
Jr   )&r:   r;   r<   r   rp   r   r$   r"   propertyrj   ru   r,   rz   r   r{   r   r   r   ri   r   r   r   r   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r=   r>   s   @r   r'   r'   t   s$       O ), ), ), ), ),V     X X XX% % %  ' ' ' ' ',        0 0 0
8 8 8
  ! ! !.& & &N N N6 6 6% % %1 1 11 1 1  &	 	 	$ $ $* * *8 8 82 2 2$ $ $3 3 3: : :: : :8 8 8             r   r'   )rA    r   pyglet.utilr   pyglet.media.eventsr   pyglet.media.drivers.baser   r   pyglet.media.mediathreadsr	   pyglet.media.drivers.listenerr
   r!   r   r   r'   rZ   r   r   <module>r      s(  H        # # # # # # * * * * * * N N N N N N N N 8 8 8 8 8 8 : : : : : :	]	#	#( ( ( ( (& ( ( (V+ + + + +% + + +2W  W  W  W  W + W  W  W  W  W r   