void AddControlsToPath(MixerPath path, IEnumerable <XElement> ctlElements) { var xElements = ctlElements as XElement[] ?? ctlElements.ToArray(); for (var i = 0; i < xElements.Length; i++) { var ctlElement = xElements[i]; var name = ctlElement.Attribute("name")?.Value; if (string.IsNullOrWhiteSpace(name)) { _logger.LogWarning("ctl with no name in path {PathName} at index {CtlIndex}, skipping", path.Name, i); continue; } var id = ctlElement.Attribute("id")?.Value; var ctlKey = $"{name}:{id ?? ""}"; if (!MixerControls.TryGetValue(ctlKey, out var ctl)) { if (string.IsNullOrWhiteSpace(id)) { _logger.LogWarning("Path {PathName} uses undefined control {CtlName}", path.Name, name); } else { _logger.LogWarning("Path {PathName} uses undefined control {CtlName}, id {CtlId}", path.Name, name, id); } continue; } var value = ctlElement.Attribute("value")?.Value; path.MixerControls.Add(new MixerControl(name, id, value)); if (string.IsNullOrWhiteSpace(id)) { _logger.LogDebug("Path {PathName} uses control {CtlName}", path.Name, name); } else { _logger.LogDebug("Path {PathName} uses control {CtlName} id {CtlId}, value {CtlDefaultValue} => {CtlValue}", path.Name, name, id, ctl.Value, value); } } }
void PopulateMixerControls(IEnumerable <XElement> ctlElements) { var xElements = ctlElements as XElement[] ?? ctlElements.ToArray(); for (var i = 0; i < xElements.Length; i++) { var ctlElement = xElements[i]; var name = ctlElement.Attribute("name")?.Value; if (string.IsNullOrWhiteSpace(name)) { _logger.LogWarning("ctl with no name at index {CtlIndex}, skipping", i); continue; } var id = ctlElement.Attribute("id")?.Value; var ctlKey = $"{name}:{id ?? ""}"; if (MixerControls.ContainsKey(ctlKey)) { if (string.IsNullOrWhiteSpace(id)) { _logger.LogWarning("Duplicate control {CtlName}, skipping", name); } else { _logger.LogWarning("Duplicate control {CtlName} id {CtlId}, skipping", name, id); } continue; } var value = ctlElement.Attribute("value")?.Value; MixerControls[ctlKey] = new MixerControl(name, id, value); _logger.LogDebug("Found control {CtlName} with default value {CtlValue}", name, value); } }