/* * 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); } } } }
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."); } } } }