
    ^j0                        d dl mZmZmZmZ d dlmZmZmZm	Z	 d dl
mZmZmZ d dl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d	          Ze	Zd Zd
ZdZdZe	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, G d de          Z- ee-          Z. e- ej/        ddddddddddd          d          Z0 e- ej/        ddddddddddd          d          Z1 e- ej/        dd d!d"d#d$d%d&d'd(d)          d          Z2 G d* d+ej3                  Z4 ej/        d,d-d.d/d0d1d2d3d4d5d6          Z5 ej/        d7d8d9d:dd;d<d=d>d?d@          Z6 G dA dBej7                  Z8 ej/        dCdDdEd$dFdGdHdIdJdKdL          Z9 G dM dNej3                  Z: G dO dPej;                  Z< G dQ dRej3                  Z= G dS dTej3                  Z> G dU dVej3                  Z? G dW dXej@                  ZA G dY dZejB                  ZCd[S )\    )POINTER	Structurebyrefc_void_p)DWORDLPCWSTRLPWSTRUINT)ListOptionalTuple)PROPVARIANTcom)_ole32)CLSCTX_INPROC_SERVER)base)debug_printdebug_input                     c                   .    e Zd Zdej        fdefgZd ZdS )PROPERTYKEYfmtidpidc                 B    d                     | j        | j                  S )NzPROPERTYKEY({}, pid={}))formatr   r   selfs    U/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/media/devices/win32.py__repr__zPROPERTYKEY.__repr__3   s    (//
DHEEE    N)__name__
__module____qualname__r   GUIDr   _fields_r%    r&   r$   r   r   -   s@        	#(	H
F F F F Fr&   r   l   N%H i  iN         g      F      P         inQni  iKA           m   o      H   "   c            	           e Zd Zd ej         ee                    fd ej        e ee                    fd ej        e ee	                    fd ej                    fd ej                    fgZ
dS )IPropertyStoreGetCountGetAtGetValueSetValueCommitN)r'   r(   r)   r   	STDMETHODr   r   r   REFPROPERTYKEYr   	_methods_r,   r&   r$   r?   r?   A   s        		wwu~~	&	&	(		uggk22	3	3	5		~ww{';';	<	<	>						IIIr&   r?   l   y i/  i|F     =      W         i   .   l   dR i  i5O              6         c            	           e Zd Zd ej        ee          fd ej        e          fd ej        e          fd ej        eee          fd ej        ee	          fgZ
dS )IMMNotificationClientOnDeviceStateChangedOnDeviceAddedOnDeviceRemovedOnDefaultDeviceChangedOnPropertyValueChangedN)r'   r(   r)   r   rE   r   r   	EDataFlowERoler   rG   r,   r&   r$   rX   rX   T   s        		w	&	&	(		w			!		w			!	!	y%	1	1	3	!	w	,	,	.IIIr&   rX   iih  i@        *   l   &   Z      c                   F    e Zd Zd ej         ee                    fgZdS )IMMEndpointGetDataFlowN)r'   r(   r)   r   rE   r   r^   rG   r,   r&   r$   rh   rh   f   s6        		wwy))	*	*	,IIIr&   rh   c                   D     e Zd ZegZd	 fdZd Zd Zd Zd Z	d Z
 xZS )
AudioNotificationCBaudio_devicesWin32AudioDeviceManagerc                 d    t                                                       || _        d| _        d S )NF)super__init__rl   _lost)r#   rl   	__class__s     r$   rp   zAudioNotificationCB.__init__p   s,    *


r&   c                    | j                             |          }|j        }t          j        |         }t          j        |         }t          d|j         d| d|           sJ ||_        | j                             d|||           d S )NzAudio device 'z' changed state. From: z to: on_device_state_changed)rl   get_cached_devicestateWin32AudioDeviceplatform_state_debugnamedispatch_event)r#   pwstrDeviceId
dwNewStatedevice	old_statepyglet_old_statepyglet_new_states          r$   rY   z(AudioNotificationCB.OnDeviceStateChangedu   s    #55mDDL	+:9E+::FjV[jjAQjjXhjjl l 	l 	l l "))*CVM]_opppppr&   c                     | j                             |          }t          d| d|           sJ | j                             d|           d S )NzAudio device was added z: on_device_added)rl   
add_devicery   r{   r#   r|   devs      r$   rZ   z!AudioNotificationCB.OnDeviceAdded   s]     ++M::FFFFFGGGGG))*;SAAAAAr&   c                     | j                             |          }t          d| d|           sJ | j                             d|           d S )NzAudio device was removed z : on_device_removed)rl   remove_devicery   r{   r   s      r$   r[   z#AudioNotificationCB.OnDeviceRemoved   s]     ..}==I-IICIIJJJJJ))*=sCCCCCr&   c                     |dk    rg|d }n| j                             |          }t          j        |         }t	          d| d| d          sJ | j                             d||           d S d S )Nr   zDefault device was changed to: z ()on_default_changed)rl   ru   rw   platform_flowry   r{   )r#   flowroler|   r~   pyglet_flows         r$   r\   z*AudioNotificationCB.OnDefaultDeviceChanged   s    199$+==mLL*8>KTFTTkTTTUUUUU--.BFKXXXXX 9r&   c                     d S Nr,   )r#   r|   keys      r$   r]   z*AudioNotificationCB.OnPropertyValueChanged   s    r&   )rl   rm   )r'   r(   r)   rX   _interfaces_rp   rY   rZ   r[   r\   r]   __classcell__rr   s   @r$   rk   rk   m   s        )*L     
q q qB B B
D D D
Y Y Y      r&   rk   c            	           e Zd Zd ej        ej        e ee                    fd ej        e	 ee
                    fd ej         ee                    fd ej         ee                    fgZdS )	IMMDeviceActivateOpenPropertyStoreGetIdGetStateN)r'   r(   r)   r   rE   REFIIDr   r   r   r
   r?   r	   rG   r,   r&   r$   r   r      s        		sz5''+*>*>	?	?	A		tWW^44	5	5	7		wwv	'	'	)		wwu~~	&	&	(	IIIr&   r   c                   |    e Zd Zd ej         ee                    fd ej        e ee                    fgZdS )IMMDeviceCollectionr@   ItemN)	r'   r(   r)   r   rE   r   r
   r   rG   r,   r&   r$   r   r      sW        		wwt}}	%	%	'		tWWY//	0	0	2IIIr&   r   c            	           e Zd Zd ej        eee          fd ej        ee e	e
                    fd ej        e e	e
                    fd ej         e	e                    fd ej                    fgZdS )IMMDeviceEnumeratorEnumAudioEndpointsGetDefaultAudioEndpoint	GetDevice$RegisterEndpointNotificationCallback&UnregisterEndpointNotificationCallbackN)r'   r(   r)   r   rE   r^   r   r   r_   r   r   r   rX   rG   r,   r&   r$   r   r      s        		y%	2	2	4	"	y%););	<	<	>		w	 2 2	3	3	5	/	ww455	6	6	8	1		IIIr&   r   c                       e Zd Zeej        j        eej        j        e	ej        j
        eej        j        iZeej        j        eej        j        eej        j        iZdS )rw   N)r'   r(   r)   DEVICE_STATE_ACTIVEr   DeviceStateACTIVEDEVICE_STATE_DISABLEDDISABLEDDEVICE_STATE_NOTPRESENTMISSINGDEVICE_STATE_UNPLUGGED	UNPLUGGEDrx   eRender
DeviceFlowOUTPUTeCaptureINPUTeAllINPUT_OUTPUTr   r,   r&   r$   rw   rw      sh        T-4t/8!1!9 0 :	N 	'$/'do*MMMr&   rw   c                   B    e Zd Z fdZdedefdZdedefdZdedefdZde	e         fdZ
de	e         fdZdefd	Zefdee         fd
Zefdee         fdZdee         fdZdee         fdZdedeeeeef         fdZeefdZededefd            Z xZS )rm   c           	      x   t                      | _        t          j        t          d t
          t          t          | j                             |                                 | _	        t                                                       t          |           | _        | j                            | j                   d S r   )r   _device_enumole32CoCreateInstanceCLSID_MMDeviceEnumeratorr   IID_IMMDeviceEnumeratorr   _query_all_devicesdevicesro   rp   rk   	_callbackr   )r#   rr   s    r$   rp   z Win32AudioDeviceManager.__init__   s    /117?SUl$T%677	9 	9 	9 04/F/F/H/H,T22>>t~NNNNNr&   r|   returnc                 d    |                      |          }| j                            |           |S r   )
get_devicer   appendr   s      r$   r   z"Win32AudioDeviceManager.add_device   s.    oom,,C   
r&   c                 x    | j                             |          }| j         j                            |           |S r   )rl   ru   r   remover   s      r$   r   z%Win32AudioDeviceManager.remove_device   s7     22=AA"))#...
r&   c                    t                      }| j                            |t          |                     |                     |          \  }}}}t                      }|                    t          t          |                     t                      }|	                    t          |                     |j
        }	t          ||||	|          }
|                                 |                                 |
S r   )r   r   r   r   get_device_inforh   QueryInterfaceIID_IMMEndpointr^   ri   valuerw   Release)r#   r|   r~   dev_idrz   desc	dev_stateepdataflowr   	windevices              r$   r   z"Win32AudioDeviceManager.get_device   s    ##M5==AAA(,(<(<V(D(D%dI]]ouRyy999;;
uX'''~$VT4yII	


r&   c                 v   	 t                      }| j                            t          t          t          |                     |                     |          \  }}}}|                                 |                     |          }||_	        |S # t          $ r}t          d|           sJ Y d}~dS d}~ww xY w)zgAttempts to retrieve a default audio output for the system. Returns None if no available devices found.z#No default audio output was found. N)r   r   r   r   eConsoler   r   r   ru   rv   OSErrorry   r#   r~   r   rz   r   r   
cached_deverrs           r$   get_default_outputz*Win32AudioDeviceManager.get_default_output   s    	[[F55gxvWWW,0,@,@,H,H)FD$	NN//77J(J 	 	 	EEEFFFFF44444	   BB 
B8B33B8c                 v   	 t                      }| j                            t          t          t          |                     |                     |          \  }}}}|                                 |                     |          }||_	        |S # t          $ r}t          d|           sJ Y d}~dS d}~ww xY w)zfAttempts to retrieve a default audio input for the system. Returns None if no available devices found.z#No default input output was found. N)r   r   r   r   r   r   r   r   ru   rv   r   ry   r   s           r$   get_default_inputz)Win32AudioDeviceManager.get_default_input
  s    	[[F55h%PV--XXX,0,@,@,H,H)FD$	NN//77J(J 	 	 	EEEFFFFF44444	r   c                 T    | j         D ]}|j        |k    r|c S t          d|          )z\Gets the cached devices, so we can reduce calls to COM and tell current state vs new states.z.Attempted to get a device that does not exist.)r   id	Exception)r#   r   r~   s      r$   ru   z)Win32AudioDeviceManager.get_cached_device  sA    l 	 	FyF"" # H&QQQr&   c                 *    fd| j         D             S )Nc                 J    g | ]}|j         k    |j        t          k    | S r,   )rv   r   r   .0r~   rv   s     r$   
<listcomp>z>Win32AudioDeviceManager.get_output_devices.<locals>.<listcomp>"  s2    fff6V\U5J5Jv{^eOeOeOeOeOer&   r   r#   rv   s    `r$   get_output_devicesz*Win32AudioDeviceManager.get_output_devices!  s    ffffT\ffffr&   c                 *    fd| j         D             S )Nc                 J    g | ]}|j         k    |j        t          k    | S r,   )rv   r   r   r   s     r$   r   z=Win32AudioDeviceManager.get_input_devices.<locals>.<listcomp>%  s2    ggg6V\U5J5Jv{^fOfOfOfOfOfr&   r   r   s    `r$   get_input_devicesz)Win32AudioDeviceManager.get_input_devices$  s    ggggT\ggggr&   c                     | j         S r   r   r"   s    r$   get_all_devicesz'Win32AudioDeviceManager.get_all_devices'  s
    |r&   c                     |                      t          t                    |                      t          t                    z   S )N)r   rv   )get_devicesr   DEVICE_STATEMASK_ALLr   r"   s    r$   r   z*Win32AudioDeviceManager._query_all_devices*  sH    W4HIIDL\L\bjcw M] My My y 	yr&   r~   c                    t                      }|                    t          t          |                     t	                      }|                    t          |                     |                     |t                    }|                     |t                    }t                      }|
                    t          |                     |                                 |j        |||j        fS )z9Return the ID, Name, and Description of the Audio Device.)r?   r   	STGM_READr   r	   r   get_pkey_valuePKEY_Device_FriendlyNamePKEY_Device_DeviceDescr   r   r   r   )r#   r~   storer   rz   descriptionrv   s          r$   r   z'Win32AudioDeviceManager.get_device_info.  s        E%LL999U6]]###""5*BCC))%1GHHe%%%|T;;;r&   c                 <   t                      }| j                            ||t          |                     t	                      }|                    t          |                     g }t          |j                  D ]}t                      }|	                    |t          |                     | 
                    |          \  }}	}
}t          ||	|
||          }|                                 |                    |           |                                 |S )zFGets all of the specified devices (by default, all output and active).)r   r   r   r   r
   r@   ranger   r   r   r   rw   r   r   )r#   r   rv   
collectioncountr   idev_itfr   rz   r   r   r~   s                r$   r   z#Win32AudioDeviceManager.get_devices@  s   (**
,,T5%
:K:KLLLE%LL)))u{## 	# 	#AkkGOOAuW~~...,0,@,@,I,I)FD$	%fdD$	JJFOONN6""""r&   r   pkeyc                     	 t                      }|                     |t          |                     |j        }t	          j        t          |                     n# t          $ r d}Y nw xY w|S )NUnknown)r   rB   r   pwszValr   PropVariantClearr   )r   r   propvarr   s       r$   r   z&Win32AudioDeviceManager.get_pkey_valueV  sv    	!mmGNN4w000OE"5>>2222 	 	 	EEE	 s   AA A+*A+)r'   r(   r)   rp   strrw   r   r   r   r   r   r   ru   r   r   r   r   r   r   r   r   intr   r   r   staticmethodr?   r   r   r   r   s   @r$   rm   rm      s,       O O O O O 0@    
3 3C    
 0@    $H-=$>    8,<#=    R+; R R R R (; g gtDT?U g g g g ': h hdCS>T h h h h&6!7    yD)9$: y y y y<i <E#sC:L4M < < < <$  '.A    , 	n 	K 	 	 	 \	 	 	 	 	r&   rm   N)Dctypesr   r   r   r   ctypes.wintypesr   r   r	   r
   typingr   r   r   pyglet.libs.win32r   r   r   r   pyglet.libs.win32.constantsr   pyglet.media.devicesr   pyglet.utilr   ry   r^   r   r   r   EDataFlow_enum_countr_   r   eMultimediaeCommunicationsERole_enum_countr   r   r   r   r   r   
STGM_WRITESTGM_READWRITE	VT_LPWSTRr   rF   r*   r   r   !PKEY_DeviceInterface_FriendlyName	pIUnknownr?   r   r   IUnknownrX   r   rh   	COMObjectrk   r   r   r   AudioDevicerw   AbstractAudioDeviceManagerrm   r,   r&   r$   <module>r     s]   6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 ( ( ( ( ( ( ( ( ( ( . . . . . . . . - - - - - - < < < < < < % % % % % % # # # # # #	]	#	#	
  	    " $ # ! 	
	F F F F F) F F F %%&;CHZtT4tTSWXXZ\^ ^ $CHZtT4tTSWXXZ[] ] $/KCHZtT4tTSWXXZ[%] %] !    S]    $38JdDRVX\^bdhjnoo "#(:vvtT4QUW[]acgimnn     CL    #(:vvtT4tUY[_aeff    #-   - - - - -#- - - -`
 
 
 
 
 
 
 
    #-       #-       t'   O O O O Od= O O O O Or&   