
    \
j}I                     b   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  e
d          Z G d	 d
e          Z G d d          Z G d de          Z G d de          Z G d de          Z edddg          Z G d de          Z G d de          Z G d de          ZdS )    N)
namedtuple   )
lib_openal)lib_alc)debug_print)MediaExceptiondebug_mediac                       e Zd ZddZd ZdS )OpenALExceptionNc                 0    || _         || _        || _        d S Nmessage
error_codeerror_stringselfr   r   r   s       _/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/media/drivers/openal/interface.py__init__zOpenALException.__init__2   s    $(    c                 X    | j         
d| j         S d| j          d| j         d| j         S )NzOpenAL Exception: zOpenAL Exception [z: z]: )r   r   r   r   s    r   __str__zOpenALException.__str__7   sA    ?"6666___4;L__QUQ]___r   )NNN)__name__
__module____qualname__r   r    r   r   r   r   1   s<        ) ) ) )
` ` ` ` `r   r   c                   @    e Zd ZdZedd            Zed             ZdS )OpenALObjectzBase class for OpenAL objects.Nc                     t          j                    }|dk    rWt          j        |          }t          j        |t          j                  }t          ||t          |j                            dS zFCheck whether there is an OpenAL error and raise exception if present.r   r   N)	al
alGetErroralGetStringctypescastc_char_pr   strvalue)clsr   r   r   s       r   _check_errorzOpenALObject._check_error@   so     ]__
??>*55L!;|V_EEL!'-7/2<3E/F/FH H H H	 ?r   c                 J    |                      |           t          |          z;Raise an exception. Try to check for OpenAL error code too.)r+   r   )r*   r   s     r   _raise_errorzOpenALObject._raise_errorL   s&     	!!!g&&&r   r   )r   r   r   __doc__classmethodr+   r.   r   r   r   r   r   >   sW        ((	H 	H 	H [	H ' ' [' ' 'r   r   c                   \    e Zd ZdZddZd Zd Zed             Zd Z	d Z
d	 Zdd
Zd ZdS )OpenALDevicezOpenAL audio device.Nc                     t          j        |          | _        |                     d           | j        t	          d          d S )NzFailed to open device.zNo OpenAL devices.)alcalcOpenDevice
_al_devicecheck_context_errorr   )r   device_names     r   r   zOpenALDevice.__init__U   sH    +K88  !9:::?"!"6777 #"r   c                 P    t          d          sJ |                                  d S )NzDelete interface.OpenALDevice_debugdeleter   s    r   __del__zOpenALDevice.__del__[   (    566666r   c                     | j         Et          j        | j                   t          j        k    r|                     d           d | _         d S d S )NzFailed to close device.)r6   r4   alcCloseDevice	ALC_FALSE_raise_context_errorr   s    r   r<   zOpenALDevice.delete_   sL    ?&!$/22cmCC))*CDDD"DOOO '&r   c                     | j         d uS r   )r6   r   s    r   is_readyzOpenALDevice.is_readye   s    d**r   c                     t          j        | j        d           }|                     d           t	          | |          S )NzFailed to create context)r4   alcCreateContextr6   r7   OpenALContext)r   
al_contexts     r   create_contextzOpenALDevice.create_contexti   s;    )$/4@@
  !;<<<T:...r   c                    t          j                    }t          j                    }t          j        | j        t           j        t          j        |          |           |                     d           t          j        | j        t           j        t          j        |          |           |                     d           |j	        |j	        fS )NzFailed to get version.)
r4   ALCintalcGetIntegervr6   ALC_MAJOR_VERSIONr%   sizeofr7   ALC_MINOR_VERSIONr)   )r   majorminors      r   get_versionzOpenALDevice.get_versionn   s    

4?C,A!=//	8 	8 	8  !9:::4?C,A!=//	8 	8 	8  !9:::{EK''r   c                    t          j        | j        t           j                  }|                     d           t          j        |t
          j                  j        	                    d          
                                S )NzFailed to get extensions.ascii)r4   alcGetStringr6   ALC_EXTENSIONSr7   r%   r&   r'   r)   decodesplit)r   
extensionss     r   get_extensionszOpenALDevice.get_extensionsy   s_    %dos7IJJ
  !<==={:v77=DDWMMSSUUUr   c                     t          j        | j                  }|dk    r]t          j        | j        |          }t	          j        |t          j                  }t          ||t          |j	                            dS r!   )
r4   alcGetErrorr6   rU   r%   r&   r'   r   r(   r)   r   s       r   r7   z OpenALDevice.check_context_error~   sx    _T_55
??+DOZHHL!;|V_EEL!'-7/2<3E/F/FH H H H	 ?r   c                 J    |                      |           t          |          r-   )r7   r   )r   r   s     r   rB   z!OpenALDevice._raise_context_error   s$      )))g&&&r   r   )r   r   r   r/   r   r=   r<   propertyrD   rI   rR   rZ   r7   rB   r   r   r   r2   r2   S   s        8 8 8 8  # # # + + X+/ / /
	( 	( 	(V V V
	H 	H 	H 	H' ' ' ' 'r   r2   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )rG   c                 J    || _         || _        |                                  d S r   )device_al_contextmake_current)r   ra   rH   s      r   r   zOpenALContext.__init__   s)    %r   c                 P    t          d          sJ |                                  d S )NzDelete interface.OpenALContextr:   r   s    r   r=   zOpenALContext.__del__   s(    677777r   c                     | j         jt          j        d            | j                            d           t          j        | j                    | j                            d           d | _         d S d S )Nz)Failed to make context no longer current.zFailed to destroy context.)rb   r4   alcMakeContextCurrentra   r7   alcDestroyContextr   s    r   r<   zOpenALContext.delete   st    '%d+++K++,WXXX!$"2333K++,HIII#D ('r   c                 l    t          j        | j                   | j                            d           d S )NzFailed to make context current.)r4   rf   rb   ra   r7   r   s    r   rc   zOpenALContext.make_current   s3    !$"2333''(IJJJJJr   c                 H    |                                   t          |           S r   )rc   OpenALSourcer   s    r   create_sourcezOpenALContext.create_source   s"    D!!!r   N)r   r   r   r   r=   r<   rc   rk   r   r   r   rG   rG      sb          
  $ $ $K K K" " " " "r   rG   c                   0   e Zd Zd Zd Zd Zed             Zed             Zed             Z	ed             Z
d Zd	 Zd
 Z eej                  Z eej                  Z eej                  Z eej                  Z eej                  Z eej                  Z eej                  Z eej                  Z eej                  Z  eej!                  Z" eej#                  Z$ eej%                  Z& eej'                  Z( eej)                  Z* eej+                  Z, eej-                  Z. eej/                  Z0 eej1                  Z2[[[d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBdS )rj   c                 <   t          j        |          | _        t          | j                  | _        t          j                    | _        t          j        d| j                   | 	                    d           d | _
        |                                  i | _        d S )Nr   zFailed to create source.)weakrefrefcontextOpenALBufferPoolbuffer_poolr"   ALuint
_al_sourcealGenSourcesr+   _state
_get_state_owned_buffersr   rp   s     r   r   zOpenALSource.__init__   s    {7+++DL99)++
4?+++4555 r   c                 P    t          d          sJ |                                  d S )NzDelete interface.OpenALSourcer:   r   s    r   r=   zOpenALSource.__del__   r>   r   c                     |                                  rX| j        St          j        d| j                   |                     d           | j                                         d | _        d S d S d S )Nr   zFailed to delete source.)rp   rt   r"   alDeleteSourcesr+   rr   clearr   s    r   r<   zOpenALSource.delete   ss    <<>> 	#do9q$/2228999""$$$"DOOO	# 	#99r   c                 T    |                                   | j        t          j        k    S r   )rw   rv   r"   
AL_INITIALr   s    r   
is_initialzOpenALSource.is_initial   !    {bm++r   c                 T    |                                   | j        t          j        k    S r   )rw   rv   r"   
AL_PLAYINGr   s    r   
is_playingzOpenALSource.is_playing   r   r   c                 T    |                                   | j        t          j        k    S r   )rw   rv   r"   	AL_PAUSEDr   s    r   	is_pausedzOpenALSource.is_paused   s!    {bl**r   c                 T    |                                   | j        t          j        k    S r   )rw   rv   r"   
AL_STOPPEDr   s    r   
is_stoppedzOpenALSource.is_stopped   r   r   c                 0     t           fd fd          S )Nc                 .    |                                S r   )_get_intr   	attributes    r   <lambda>z3OpenALSource._int_source_property.<locals>.<lambda>   s    T]]9%=%= r   c                 0    |                      |          S r   )_set_intr   r)   r   s     r   r   z3OpenALSource._int_source_property.<locals>.<lambda>   s    DMM)U,K,K r   r^   r   s   `r   _int_source_propertyz!OpenALSource._int_source_property   s0    ====KKKKM M 	Mr   c                 0     t           fd fd          S )Nc                 .    |                                S r   )
_get_floatr   s    r   r   z5OpenALSource._float_source_property.<locals>.<lambda>   s    T__Y%?%? r   c                 0    |                      |          S r   )
_set_floatr   s     r   r   z5OpenALSource._float_source_property.<locals>.<lambda>   s    DOOIu,M,M r   r   r   s   `r   _float_source_propertyz#OpenALSource._float_source_property   s0    ????MMMMO O 	Or   c                 0     t           fd fd          S )Nc                 .    |                                S r   )_get_3floatsr   s    r   r   z7OpenALSource._3floats_source_property.<locals>.<lambda>   s    T%6%6y%A%A r   c                 0    |                      |          S r   )_set_3floatsr   s     r   r   z7OpenALSource._3floats_source_property.<locals>.<lambda>   s    D,=,=i,O,O r   r   r   s   `r   _3floats_source_propertyz%OpenALSource._3floats_source_property   s0    AAAAOOOOQ Q 	Qr   c                 b    t          j        | j                   |                     d           d S )NzFailed to play source.)r"   alSourcePlayrt   r+   r   s    r   playzOpenALSource.play   /    
(((233333r   c                 b    t          j        | j                   |                     d           d S )NzFailed to pause source.)r"   alSourcePausert   r+   r   s    r   pausezOpenALSource.pause   s0    
)))344444r   c                 b    t          j        | j                   |                     d           d S )NzFailed to stop source.)r"   alSourceStoprt   r+   r   s    r   stopzOpenALSource.stop  r   r   c                     |                      t          j        t          j                   | j        r?| j                                        \  }}| j                            |           | j        =d S d S r   )r   r"   	AL_BUFFERAL_NONErx   popitemrr   unqueue_buffer)r   buf_namebufs      r   r}   zOpenALSource.clear  su    blBJ///! 	1 /7799MHc++C000 ! 	1 	1 	1 	1 	1r   c                 4    | j                                         S r   )rr   
get_bufferr   s    r   r   zOpenALSource.get_buffer  s    **,,,r   c                     |j         sJ t          j        | j        dt	          j        |j                             |                     d           |                     |           d S )Nr   zFailed to queue buffer.)	is_validr"   alSourceQueueBuffersrt   r%   byref	al_bufferr+   _add_bufferr   r   s     r   queue_bufferzOpenALSource.queue_buffer  sa    ||
FL4O4OPPP3444r   c                 r   | j         }t          d                    |                    sJ |dk    rt          j        |z              }t          j        | j        t          |          |           |                     d           |D ]/}| j	        
                    |                     |                     0|S )NzProcessed buffer count: {}r   z&Failed to unqueue buffers from source.)buffers_processedr;   formatr"   rs   alSourceUnqueueBuffersrt   lenr+   rr   r   _pop_buffer)r   	processedbuffersr   s       r   unqueue_bufferszOpenALSource.unqueue_buffers  s    *	299)DDEEEEEq==y9,//G%dos7||WMMMFGGG G G //0@0@0E0EFFFFr   c                 `    | j         &|                     t          j                  | _        d S d S r   )rt   r   r"   AL_SOURCE_STATErv   r   s    r   rw   zOpenALSource._get_state"  s,    ?&--(:;;DKKK '&r   c                     | j         J t          j                    }t          j        | j         ||           |                     d           |j        S NFailed to get value)rt   r"   ALintalGetSourceir+   r)   )r   keyal_ints      r   r   zOpenALSource._get_int&  sN    ***
f555/000|r   c                     | j         J t          j        | j         |t          |                     |                     d           d S NzFailed to set value.)rt   r"   	alSourceiintr+   r   r   r)   s      r   r   zOpenALSource._set_int-  sG    ***
T_c3u::666011111r   c                     | j         J t          j                    }t          j        | j         ||           |                     d           |j        S r   )rt   r"   ALfloatalGetSourcefr+   r)   r   r   al_floats      r   r   zOpenALSource._get_float2  sN    ***:<<
h777/000~r   c                     | j         J t          j        | j         |t          |                     |                     d           d S r   )rt   r"   	alSourceffloatr+   r   s      r   r   zOpenALSource._set_float9  sG    ***
T_c5<<888011111r   c                    | j         J t          j                    }t          j                    }t          j                    }t          j        | j         ||||           |                     d           |j        |j        |j        fS r   )rt   r"   r   alGetSource3fr+   r)   r   r   xyzs        r   r   zOpenALSource._get_3floats>  st    ***JLLJLLJLL
#q!Q777/000w((r   c                     | j         J t          t          |          \  }}}t          j        | j         ||||           |                     d           d S r   )rt   mapr   r"   
alSource3fr+   r   r   valuesr   r   r   s         r   r   zOpenALSource._set_3floatsG  sZ    ***eV$$1a
dosAq!444011111r   c                 $    || j         |j        <   d S r   )rx   namer   s     r   r   zOpenALSource._add_bufferM  s    (+CH%%%r   c                 D    | j                             |d           }|J |S r   )rx   pop)r   r   r   s      r   r   zOpenALSource._pop_bufferP  s(    !%%i66
r   N)Cr   r   r   r   r=   r<   r^   r   r   r   r   r   r   r   r"   AL_POSITIONpositionAL_VELOCITYvelocityAL_GAINgainAL_BUFFERS_QUEUEDbuffers_queuedAL_BUFFERS_PROCESSEDr   AL_MIN_GAINmin_gainAL_MAX_GAINmax_gainAL_REFERENCE_DISTANCEreference_distanceAL_ROLLOFF_FACTORrolloff_factorAL_PITCHpitchAL_MAX_DISTANCEmax_distanceAL_DIRECTION	directionAL_CONE_INNER_ANGLEcone_inner_angleAL_CONE_OUTER_ANGLEcone_outer_angleAL_CONE_OUTER_GAINcone_outer_gainAL_SEC_OFFSET
sec_offsetAL_SAMPLE_OFFSETsample_offsetAL_BYTE_OFFSETbyte_offsetr   r   r   r}   r   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   rj   rj      s1       ! ! !  # # # , , X, , , X, + + X+ , , X,M M MO O OQ Q Q ('77H''77H!!"*--D))"*>??N,,R-DEE%%bn55H%%bn55H//0HII++B,@AAN""2;//E))"*<==L((99I--b.DEE--b.DEE,,R-BCCO''(899J**2+>??M(():;;K 4 4 45 5 54 4 41 1 1- - -  	 	 	< < <  2 2 2
  2 2 2
) ) )2 2 2, , ,    r   rj   OpenALOrientationatupc                   
   e Zd Zed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zd	 Z	d
 Z
d Zd Zd Zd ZdS )OpenALListenerc                 @    |                      t          j                  S r   )r   r"   r   r   s    r   r   zOpenALListener.positionZ        000r   c                 F    |                      t          j        |           d S r   )r   r"   r   r   r   s     r   r   zOpenALListener.position^       ".&11111r   c                 @    |                      t          j                  S r   )r   r"   r   r   s    r   r   zOpenALListener.velocityb  r  r   c                 F    |                      t          j        |           d S r   )r   r"   r   r  s     r   r   zOpenALListener.velocityf  r  r   c                 @    |                      t          j                  S r   )r   r"   r   r   s    r   r   zOpenALListener.gainj  s    rz***r   c                 F    |                      t          j        |           d S r   )r   r"   r   )r   r)   s     r   r   zOpenALListener.gainn  s    
E*****r   c                     |                      t          j        d          }t          |dd         |dd                   S )N   r      )_get_float_vectorr"   AL_ORIENTATIONr  r  s     r   orientationzOpenALListener.orientationr  s:    ''(91== !fQqSk:::r   c                    t          |          dk    r|d         |d         z   }nt          |          dk    r|}ng }t          |          dk    rt          d          |                     t          j        |           d S )N   r   r   r  z#Need 2 tuples of 3 or 1 tuple of 6.)r   
ValueError_set_float_vectorr"   r!  )r   r   actual_valuess      r   r"  zOpenALListener.orientationw  s    v;;!"1Iq	1MM[[A"MMM}""BCCCr0-@@@@@r   c                     t          j                    }t          j        ||           |                     d           |j        S r   )r"   r   alGetListenerfr+   r)   r   s      r   r   zOpenALListener._get_float  s=    :<<
#x(((/000~r   c                 t    t          j        |t          |                     |                     d           d S r   )r"   alListenerfr   r+   r   s      r   r   zOpenALListener._set_float  s5    
sE%LL)))011111r   c                     t          j                    }t          j                    }t          j                    }t          j        ||||           |                     d           |j        |j        |j        fS r   )r"   r   alGetListener3fr+   r)   r   s        r   r   zOpenALListener._get_3floats  sb    JLLJLLJLL
31a(((/000w((r   c                     t          t          |          \  }}}t          j        ||||           |                     d           d S r   )r   r   r"   alListener3fr+   r   s         r   r   zOpenALListener._set_3floats  sH    eV$$1a
Q1%%%011111r   c                     t          j        |z              }t          j        ||           |                     d           d |D             S )Nr   c                     g | ]}|S r   r   ).0r   s     r   
<listcomp>z4OpenALListener._get_float_vector.<locals>.<listcomp>  s    +++a+++r   )r"   r   alGetListenerfvr+   )r   r   countal_float_vectors       r   r   z OpenALListener._get_float_vector  sP    :-00
3000/000++?++++r   c                     t          j        t          |          z  | }t          j        ||           |                     d           d S r   )r"   r   r   alListenerfvr+   )r   r   r   r6  s       r   r&  z OpenALListener._set_float_vector  sF    :F3f=
_---011111r   N)r   r   r   r^   r   setterr   r   r"  r   r   r   r   r   r&  r   r   r   r  r  Y  sQ       1 1 X1 _2 2 _2 1 1 X1 _2 2 _2 + + X+ 
[+ + [+ ; ; X; 	A 	A 	A  2 2 2) ) )2 2 2
, , ,2 2 2 2 2r   r  c                       e Zd Zej        ej        ej        ej        dZd Z	d Z
ed             Zed             Zed             Zd Zd
d	ZdS )OpenALBuffer))r      )r      )r$  r<  )r$  r=  c                 4    || _         || _        | j        sJ d S r   )
_al_bufferrp   r   )r   r   rp   s      r   r   zOpenALBuffer.__init__  s#    #}}r   c                 P    t          d          sJ |                                  d S )NzDelete interface.OpenALBufferr:   r   s    r   r=   zOpenALBuffer.__del__  r>   r   c                     |                      d           | j        dS t          t          j        | j                            }|st          j                     |S )NzBefore validate buffer.F)r+   r?  boolr"   
alIsBufferr#   )r   valids     r   r   zOpenALBuffer.is_valid  sU    3444?"5R]4?3344 	MOOOr   c                 "    | j         sJ | j        S r   )r   r?  r   s    r   r   zOpenALBuffer.al_buffer  s    }}r   c                 ,    | j         sJ | j        j        S r   )r   r?  r)   r   s    r   r   zOpenALBuffer.name  s    }}$$r   c                     | j         e|                                 rS| j        rNt          j        dt          j        | j                              |                     d           d | _         d S d S d S d S )Nr   zError deleting buffer.)r?  rp   r   r"   alDeleteBuffersr%   r   r+   r   s    r   r<   zOpenALBuffer.delete  sq    ?&4<<>>&dm&q&,t"?"?@@@6777"DOOO '&&&&&r   Nc                 $   | j         sJ |p|j        }	 | j        |j        |j        f         }n&# t
          $ r t          d|j         d          w xY wt          j        | j	        ||j
        ||j                   |                     d           d S )NzOpenAL does not support 'zbit' audio.zFailed to add data to buffer.)r   length_format_mapchannelssample_sizeKeyErrorr   r"   alBufferDatar?  datasample_rater+   )r   
audio_dataaudio_formatrJ  	al_formats        r   rP  zOpenALBuffer.data  s    }},:,	d(,*?AY)Z[II 	d 	d 	d !b\=U!b!b!bccc	d 	!"$0		2 	2 	2
 	9:::::s	   . #Ar   )r   r   r   r"   AL_FORMAT_MONO8AL_FORMAT_MONO16AL_FORMAT_STEREO8AL_FORMAT_STEREO16rK  r   r=   r^   r   r   r   r<   rP  r   r   r   r;  r;    s        #$%&	 K  
     X   X % % X%# # #; ; ; ; ; ;r   r;  c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )rq   zAt least Mac OS X doesn't free buffers when a source is deleted; it just
    detaches them from the source.  So keep our own recycled queue.
    c                 "    || _         g | _        d S r   )rp   _buffersry   s     r   r   zOpenALBufferPool.__init__  s    r   c                 P    t          d          sJ |                                  d S )Nz!Delete interface.OpenALBufferPool)r;   r}   r   s    r   r=   zOpenALBufferPool.__del__  s(    9:::::

r   c                 *    t          | j                  S r   )r   r[  r   s    r   __len__zOpenALBufferPool.__len__  s    4=!!!r   c                 |    | j         r4| j                                                                          | j         2d S d S r   )r[  r   r<   r   s    r   r}   zOpenALBufferPool.clear  sL    m 	)M&&((( m 	) 	) 	) 	) 	)r   c                 8    |                      d          d         S )z)Convenience for returning one buffer namer   r   )get_buffersr   s    r   r   zOpenALBufferPool.get_buffer  s    ""1%%r   c                     g }|dk    r\| j         r| j                                         }n|                                 }|j        r|                    |           |dz  }|dk    \|S )zReturns an array containing `number` buffer names.  The returned list must
        not be modified in any way, and may get changed by subsequent calls to
        get_buffers.
        r   r   )r[  r   _create_bufferr   append)r   numberr   bs       r   ra  zOpenALBufferPool.get_buffers  s{    
 qjj} *M%%''''))z  q!!!! qjj r   c                 L    |j         r| j                            |           dS dS )z'A buffer has finished playing, free it.N)r   r[  rd  r   s     r   r   zOpenALBufferPool.unqueue_buffer  s2    < 	&M  %%%%%	& 	&r   c                     t          j                    }t          j        d|           |                     d           t	          || j                  S )zCreate a new buffer.r   zError allocating buffer.)r"   rs   alGenBuffersr+   r;  rp   )r   r   s     r   rc  zOpenALBufferPool._create_buffer  sF    IKK	
9%%%4555It|444r   N)r   r   r   r/   r   r=   r^  r}   r   ra  r   rc  r   r   r   rq   rq     s             " " ") ) )& & &  && & &
5 5 5 5 5r   rq   )r%   rn   collectionsr    r   r"   r   r4   pyglet.utilr   pyglet.media.exceptionsr   r;   r   r   r2   rG   rj   r  r  r;  rq   r   r   r   <module>rn     s  H   " " " " " "             # # # # # # 2 2 2 2 2 2	]	#	#
` 
` 
` 
` 
`n 
` 
` 
`' ' ' ' ' ' ' '*9' 9' 9' 9' 9'< 9' 9' 9'x" " " " "L " " "8h h h h h< h h hV J2T4LAA J2 J2 J2 J2 J2\ J2 J2 J2Z:; :; :; :; :;< :; :; :;z45 45 45 45 45| 45 45 45 45 45r   