private void OnDeviceStateCallBack(AudioDeviceChangeData audioDeviceData)
        {
            switch (audioDeviceData.DeviceState)
            {
            case AudioDeviceState.DEVICE_STATE_ACTIVE:
            case AudioDeviceState.DEVICE_STATE_NOTPRESENT:
            case AudioDeviceState.DEVICE_STATE_DISABLED:
            case AudioDeviceState.DEVICE_STATE_UNPLUGGED:
                UnInitializeAudioDevice();
                InitializeAudioDevice();
                break;

            default:
                break;
            }
        }
Exemple #2
0
        /// <summary>
        /// The Audio Device Change event and collect audio data to client
        /// </summary>
        /// <param name="deviceId"></param>
        /// <param name="newState"></param>
        private void OnAudioDeviceChange(string deviceId, Enums.AudioDeviceState newState)
        {
            System.Threading.Tasks.Task.Factory.StartNew(() =>
            {
                int propCnt = -1;
                AudioDeviceChangeData audioData = new AudioDeviceChangeData()
                {
                    DeviceState = newState
                };
                PropertyKey proKey;
                PropVariant proVar;
                COMResult comRev;
                comRev = _deviceEnumerator.GetDevice(deviceId, out IMMDevice device);
                comRev = device.OpenPropertyStore(Enums.StorageAccessMode.STGM_READ, out IPropertyStore ppp);
                comRev = ppp.GetCount(out propCnt);
                for (int j = 0; j < propCnt; j++)
                {
                    try
                    {
                        //Get values
                        //TODO:use keys get you want data
                        comRev = ppp.GetAt(j, out proKey);
                        comRev = ppp.GetValue(ref proKey, out proVar);

                        if (proVar.DataType == System.Runtime.InteropServices.VarEnum.VT_LPWSTR ||
                            proVar.DataType == System.Runtime.InteropServices.VarEnum.VT_LPSTR)
                        {
#if DEBUG
                            if (proVar.Value != null)
                            {
                                //OmenCommonLib.Utilities.OMENEventSource.Log.Info("OnAudioDeviceChange: " + proKey.formatId.ToString() + "[" + proKey.propertyId + "]=" + proVar.Value.ToString());
                            }
#endif
                            if (proKey.formatId.ToString().Equals(PKEY_AUDIOENDPOINT_JACKSUBTYPE.formatId.ToString()) &&
                                proKey.propertyId == PKEY_AUDIOENDPOINT_JACKSUBTYPE.propertyId)
                            {
                                audioData.PKEY_AudioEndpoint_JackSubType = proVar.Value.ToString();
                            }
                            if (proKey.formatId.ToString().Equals(PKEY_AUDIOENDPOINT_INTERFACE.formatId.ToString()) &&
                                proKey.propertyId == PKEY_AUDIOENDPOINT_INTERFACE.propertyId)
                            {
                                audioData.PKEY_AudioEndPoint_Interface = proVar.Value.ToString();
                            }
                            if (proKey.formatId.ToString().Equals(PKEY_AUDIOENDPOINT_NAME.formatId.ToString()) &&
                                proKey.propertyId == PKEY_AUDIOENDPOINT_NAME.propertyId)
                            {
                                audioData.PKEY_AudioEndpoint_Name = proVar.Value.ToString();
                            }
                            if (proKey.formatId.ToString().Equals(PKEY_AUDIOENDPOINT_HWID.formatId.ToString()) &&
                                proKey.propertyId == PKEY_AUDIOENDPOINT_HWID.propertyId)
                            {
                                audioData.PKEY_AudioEndpoint_HWID = proVar.Value.ToString();
                            }
                            if (proKey.formatId.ToString().Equals(PKEY_AUDIOENDPOINT_INFO.formatId.ToString()) &&
                                proKey.propertyId == PKEY_AUDIOENDPOINT_INFO.propertyId)
                            {
                                audioData.PKEY_AudioEndpoint_Info = proVar.Value.ToString();
                            }
                            if (proKey.formatId.ToString().Equals(PKEY_AUDIOENDPOINT_FULL_NAME.formatId.ToString()) &&
                                proKey.propertyId == PKEY_AUDIOENDPOINT_FULL_NAME.propertyId)
                            {
                                audioData.PKEY_audioendpoint_full_name = proVar.Value.ToString();
                                _deviceChangeCallBack?.Invoke(audioData);
                                break;
                            }
                        }
                    }
                    catch (Exception)
                    {
                        //Some reason Microphone will occur exception.
                    }
                }
            });
        }