Exemplo n.º 1
0
        /*
         * Handles Initial Setup of AudioDevices
         * Connects OBS-AudioDevices with Windows-Devices (for this application)
         */
        private void SetupAudio()
        {
            SpecialSources obsSpecialSources       = this.obsSocket.GetSpecialSources(); //Not very special actually...
            List <string>  connectedSpecialSources = new List <string>();

            foreach (Source s in this.obsSocket.GetSourcesList())
            {
                if (s.typeId.Contains("wasapi"))
                {
                    connectedSpecialSources.Add(s.name);
                }
            }

            this.specialSources = new Dictionary <SpecialSourceType, SpecialSourceObject>()
            {
                {
                    SpecialSourceType.desktop1, new SpecialSourceObject(SpecialSourceType.desktop1)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.desktop1]
                    }
                }, {
                    SpecialSourceType.desktop2, new SpecialSourceObject(SpecialSourceType.desktop2)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.desktop2]
                    }
                }, {
                    SpecialSourceType.mic1, new SpecialSourceObject(SpecialSourceType.mic1)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.mic1]
                    }
                }, {
                    SpecialSourceType.mic2, new SpecialSourceObject(SpecialSourceType.mic2)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.mic2]
                    }
                }, {
                    SpecialSourceType.mic3, new SpecialSourceObject(SpecialSourceType.mic3)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.mic3]
                    }
                }
            };

            foreach (SpecialSourceObject specialSource in this.specialSources.Values)
            {
                specialSource.connected = connectedSpecialSources.Contains(specialSource.obsSourceName);
                if (specialSource.connected)
                {
                    string pid = this.obsSocket.GetPIDOfAudioDevice(specialSource.obsSourceName);
                    if (pid != "default")                                                     //OBS-"default"-assigned devices-PID is not transmitted by WebSocket. So we cant actually control their volume...
                    {
                        string guid = pid.Replace("}.{", "@").Split('@')[1].Substring(0, 36); //Convert the PID to GUID Format
                        try                                                                   //If the device is not actually connected
                        {
                            specialSource.windowsDevice = new AudioDevice(guid);
                            specialSource.windowsDevice.OnMuteStateChanged += WindowsDevice_OnMuteStateChanged;
                        }
                        catch (Exception e) {
                            this.LogWarning(e.Message);
                            this.Dispose();
                        }
                    }
                    else
                    {
                        this.LogWarning("Audio-source \"{0}\" is assigned per default by OBS. Windows volume control will not be available, unless you set a specific Source.", specialSource.obsSourceName);
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void SetupAudio()
        {
            SpecialSources obsSpecialSources       = this.obsSocket.GetSpecialSources();
            List <string>  connectedSpecialSources = new List <string>();

            foreach (Source s in this.obsSocket.GetSourcesList())
            {
                if (s.typeId.Contains("wasapi"))
                {
                    connectedSpecialSources.Add(s.name);
                }
            }
            this.specialSources = new Dictionary <SpecialSourceType, SpecialSourceObject>()
            {
                {
                    SpecialSourceType.desktop1, new SpecialSourceObject(SpecialSourceType.desktop1)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.desktop1]
                    }
                }, {
                    SpecialSourceType.desktop2, new SpecialSourceObject(SpecialSourceType.desktop2)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.desktop2]
                    }
                }, {
                    SpecialSourceType.mic1, new SpecialSourceObject(SpecialSourceType.mic1)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.mic1]
                    }
                }, {
                    SpecialSourceType.mic2, new SpecialSourceObject(SpecialSourceType.mic2)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.mic2]
                    }
                }, {
                    SpecialSourceType.mic3, new SpecialSourceObject(SpecialSourceType.mic3)
                    {
                        obsSourceName = obsSpecialSources.specialSourceNames[SpecialSourceType.mic3]
                    }
                }
            };

            foreach (SpecialSourceObject specialSource in this.specialSources.Values)
            {
                specialSource.connected = connectedSpecialSources.Contains(specialSource.obsSourceName);
                if (specialSource.connected)
                {
                    string pid = this.obsSocket.GetPIDOfAudioDevice(specialSource.obsSourceName);
                    if (pid != "default")
                    {
                        string guid = pid.Replace("}.{", "@").Split('@')[1].Substring(0, 36);
                        specialSource.windowsDevice = new AudioDevice(guid);
                        specialSource.windowsDevice.OnMuteStateChanged += WindowsDevice_OnMuteStateChanged;
                    }
                    else
                    {
                        this.LogWarning("Audio-source \"{0}\" is assigned per default. Window volume control will not be available, unless you set a specific Source.");
                    }
                }
            }
        }