
    \
j.1                        d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
T 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$j%                  Z& e'e&          Z( e& ej)        ddddddddddd          d          Z* e& ej)        ddddddddddd          d
          Z+ e& ej)        ddd d!d"d#d$d%d&d'd(          d
          Z, G d) d*ej-                  Z. ej)        d+d,d-d.d/d0d1d2d3d4d5          Z/ ej)        d6d7d8d9dd:d;d<d=d>d?          Z0 G d@ dAej1                  Z2 ej)        dBdCdDd#dEdFdGdHdIdJdK          Z3 G dL dMej-                  Z4 G dN dOej5                  Z6 G dP dQej-                  Z7 G dR dSej-                  Z8 G dT dUej-                  Z9 G dV dWej:                  Z; G dX dYej<                  Z=dZS )[    )ListOptionalTuple)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    T/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/media/devices/win32.py__repr__zPROPERTYKEY.__repr__2   s    (//
DHEEE    N)__name__
__module____qualname__r   GUIDDWORD_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   	STDMETHODPOINTERr#   r   REFPROPERTYKEYPROPVARIANT	_methods_r%   r   r   r8   r8   @   s        		wwu~~	&	&	(		uggk22	3	3	5		~ww{';';	<	<	>						IIIr   r8   l   y i/  i|F     =      W         i   .   l   dR i  i5O              6         c                   <   e Zd Zd ej        ej        ej        ee          fd ej        ej        ej        e          fd ej        ej        ej        e          fd ej        ej        ej        e	e
e          fd ej        ej        ej        ee          fgZdS )IMMNotificationClientOnDeviceStateChangedOnDeviceAddedOnDeviceRemovedOnDefaultDeviceChangedOnPropertyValueChangedN)r   r    r!   r   METHODctypesc_void_pLPCWSTRr#   	EDataFlowERoler   rB   r%   r   r   rS   rS   S   s        		FOV_gu	E	E	G		FOV_g	>	>	@		FOV_g	>	>	@	!	FOV_i	P	P	R	!	FOV_g{	K	K	MIIIr   rS   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   r>   r?   r]   rB   r%   r   r   rg   rg   e   s6        		wwy))	*	*	,IIIr   rg   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__rk   _lost)r   rk   	__class__s     r   ro   zAudioNotificationCB.__init__o   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)rk   get_cached_devicestateWin32AudioDeviceplatform_state_debugnamedispatch_event)r   thispwstrDeviceId
dwNewStatedevice	old_statepyglet_old_statepyglet_new_states           r   rT   z(AudioNotificationCB.OnDeviceStateChangedt   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)rk   
add_devicerx   rz   r   r{   r|   devs       r   rU   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)rk   remove_devicerx   rz   r   s       r   rV   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)rk   rt   rv   platform_flowrx   rz   )r   r{   flowroler|   r~   pyglet_flows          r   rW   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{   r|   keys       r   rX   z*AudioNotificationCB.OnPropertyValueChanged   s    r   )rk   rl   )r   r    r!   rS   _interfaces_ro   rT   rU   rV   rW   rX   __classcell__rq   s   @r   rj   rj   l   s        )*L     
q q qB B B
D D D
Y Y Y      r   rj   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   r>   REFIIDr#   r?   rA   UINTr8   LPWSTRrB   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 )IMMDeviceCollectionr9   ItemN)	r   r    r!   r   r>   r?   r   r   rB   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   r>   r]   r#   r[   r^   rZ   r?   r   r\   rS   rB   r%   r   r   r   r      s        		y%	2	2	4	"	y%	)B)B	C	C	E		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 )rv   N)r   r    r!   DEVICE_STATE_ACTIVEr
   DeviceStateACTIVEDEVICE_STATE_DISABLEDDISABLEDDEVICE_STATE_NOTPRESENTMISSINGDEVICE_STATE_UNPLUGGED	UNPLUGGEDrw   eRender
DeviceFlowOUTPUTeCaptureINPUTeAllINPUT_OUTPUTr   r%   r   r   rv   rv      sh        T-4t/8!1!9 0 :	N 	'$/'do*MMMr   rv   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 )rl   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_IMMDeviceEnumeratorbyref_query_all_devicesdevicesrn   ro   rj   	_callbackr   )r   rq   s    r   ro   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   appendr   r|   r   s      r   r   z"Win32AudioDeviceManager.add_device   s.    oom,,C   
r   c                 x    | j                             |          }| j         j                            |           |S r   )rk   rt   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_inforg   QueryInterfaceIID_IMMEndpointr]   rh   valuerv   Release)r   r|   r~   dev_idry   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                 r   	 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   rt   ru   OSErrorrx   r   r~   r   ry   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 	 	 	>DDDDD44444	   BB 
B6B11B6c                 r   	 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   rt   ru   r   rx   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 	 	 	>DDDDD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   rt   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%   )ru   r   r   .0r~   ru   s     r   
<listcomp>z>Win32AudioDeviceManager.get_output_devices.<locals>.<listcomp>!  s2    fff6V\U5J5Jv{^eOeOeOeOeOer   r   r   ru   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%   )ru   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   ru   )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.)r8   r   	STGM_READr   r   r   get_pkey_valuePKEY_Device_FriendlyNamePKEY_Device_DeviceDescr#   r   r   r   )r   r~   storer   ry   descriptionru   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 )zGGet's all of the specified devices (by default, all output and active).)r   r   r   r   r   r9   ranger   r   r   r   rv   r   r   )r   r   ru   
collectioncountr   idev_itfr   ry   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)rA   r;   r   pwszValr   PropVariantClearr   )r   r  propvarr   s       r   r   z&Win32AudioDeviceManager.get_pkey_valueU  sv    	!mmGNN4w000OE"5>>2222 	 	 	EEE	 s   AA A+*A+)r   r    r!   ro   strrv   r   r   r   r   r   r   rt   r   r   r   r   r   r   r   r   intr   r   r   staticmethodr8   r   r   r   r   s   @r   rl   rl      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   rl   N)>typingr   r   r   pyglet.libs.win32r   r   r   pyglet.libs.win32.constantsr   pyglet.libs.win32.typespyglet.media.devicesr
   pyglet.utilr   rx   r   r]   r   r   r   EDataFlow_enum_countr^   r   eMultimediaeCommunicationsERole_enum_countr   r   r   r   r   r   
STGM_WRITESTGM_READWRITE	VT_LPWSTRrZ   	Structurer   r?   r@   r"   r   r   !PKEY_DeviceInterface_FriendlyName	pIUnknownr8   r   r   IUnknownrS   r   rg   	COMObjectrj   r   r   r   AudioDevicerv   AbstractAudioDeviceManagerrl   r%   r   r   <module>r      s   ( ( ( ( ( ( ( ( ( ( ! ! ! ! ! ! - - - - - - < < < < < < % % % % % % % % % % # # # # # #	]	#	#	
  	    " $ # ! 	
	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   