Umsci
Upmix Spatial Control Interface — OCA/OCP.1 spatial audio utility
Loading...
Searching...
No Matches
UmsciAppConfiguration.h
Go to the documentation of this file.
1/* Copyright (c) 2026, Christian Ahrens
2 *
3 * This file is part of Umsci <https://github.com/ChristianAhrens/Umsci>
4 *
5 * This tool is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU Lesser General Public License version 3.0 as published
7 * by the Free Software Foundation.
8 *
9 * This tool is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12 * details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this tool; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 */
18
19#pragma once
20
21#include <JuceHeader.h>
22
23#include <AppConfigurationBase.h>
24
25
26#define Umsci_CONFIG_VERSION "1.0.0"
27
28
54class UmsciAppConfiguration : public JUCEAppBasics::AppConfigurationBase
55{
56
57public:
86 static juce::String getTagName(TagID ID)
87 {
88 switch(ID)
89 {
91 return "CONNECTIONCONFIG";
92 case VISUCONFIG:
93 return "VISUCONFIG";
94 case CONTROLCOLOUR:
95 return "CONTROLCOLOUR";
96 case LOOKANDFEEL:
97 return "LOOKANDFEEL";
98 case CONTROLCONFIG:
99 return "CONTROLCONFIG";
100 case CONTROLFORMAT:
101 return "CONTROLFORMAT";
102 case UPMIXCONFIG:
103 return "UPMIXCONFIG";
104 case CONTROLSIZE:
105 return "CONTROLSIZE";
107 return "EXTERNALCONTROLCONFIG";
108 case MIDIINPUTDEVICE:
109 return "MIDIINPUTDEVICE";
110 case MIDI_UPMIXROT:
111 return "MIDI_UPMIXROT";
112 case MIDI_UPMIXSCALE:
113 return "MIDI_UPMIXSCALE";
115 return "MIDI_UPMIXHEIGHTSCALE";
117 return "MIDI_UPMIXANGLESTRETCH";
119 return "MIDI_UPMIXOFFSETX";
121 return "MIDI_UPMIXOFFSETY";
123 return "UPMIXSNAPSHOTCONFIG";
124 case OSCINPUTPORT:
125 return "OSCINPUTPORT";
126 case OSC_UPMIXROT:
127 return "OSC_UPMIXROT";
128 case OSC_UPMIXSCALE:
129 return "OSC_UPMIXSCALE";
131 return "OSC_UPMIXHEIGHTSCALE";
133 return "OSC_UPMIXANGLESTRETCH";
134 case OSC_UPMIXOFFSETX:
135 return "OSC_UPMIXOFFSETX";
136 case OSC_UPMIXOFFSETY:
137 return "OSC_UPMIXOFFSETY";
138 default:
139 return "INVALID";
140 }
141 };
142
155 static juce::String getAttributeName(AttributeID ID)
156 {
157 switch (ID)
158 {
159 case ENABLED:
160 return "ENABLED";
161 case IP:
162 return "IP";
163 case PORT:
164 return "PORT";
165 case IOSIZE:
166 return "IOSIZE";
168 return "UPMIXSOURCESTARTID";
169 case UPMIXLIVEMODE:
170 return "UPMIXLIVEMODE";
171 case UPMIXSHAPE:
172 return "UPMIXSHAPE";
174 return "UPMIXSHOWALLSOURCES";
175 default:
176 return "-";
177 }
178 };
179
180public:
181 explicit UmsciAppConfiguration(const File &file);
182 ~UmsciAppConfiguration() override;
183
185 bool isValid() override;
187 static bool isValid(const std::unique_ptr<juce::XmlElement>& xmlConfig);
188
190 bool ResetToDefault();
191
192protected:
198 bool HandleConfigVersionConflict(const Version& configVersionFound) override;
199
200private:
201
202 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UmsciAppConfiguration)
203};
204
Persists all Umsci user settings to an XML file via the JUCEAppBasics::AppConfigurationBase framework...
bool isValid() override
Returns true if the XML file exists and contains the expected root tags.
AttributeID
Enumerates every XML attribute name used within config elements.
@ IP
String: target device IP address.
@ UPMIXLIVEMODE
Boolean: follow live DS100 source positions.
@ ENABLED
Boolean: whether the connection is active.
@ UPMIXSHOWALLSOURCES
Boolean: render all sources or only upmix group.
@ UPMIXSHAPE
String: "Circle" or "Rectangle".
@ IOSIZE
String: "inputs,outputs" channel count pair.
@ PORT
Integer: target OCP.1 port (default 50014).
@ UPMIXSOURCESTARTID
Integer: 1-based first DS100 channel for upmix inputs.
bool HandleConfigVersionConflict(const Version &configVersionFound) override
Called by the base class when the config file's version string does not match Umsci_CONFIG_VERSION....
bool ResetToDefault()
Overwrites all settings with built-in defaults and triggers a dump.
static juce::String getTagName(TagID ID)
static juce::String getAttributeName(AttributeID ID)
TagID
Enumerates every XML element tag used in the config file.
@ MIDI_UPMIXOFFSETX
MIDI assignment for upmix X offset.
@ MIDI_UPMIXHEIGHTSCALE
MIDI assignment for upmix height translation.
@ CONTROLCONFIG
Control-component settings.
@ OSC_UPMIXHEIGHTSCALE
OSC address for upmix height translation.
@ CONNECTIONCONFIG
OCP.1 connection parameters.
@ OSC_UPMIXANGLESTRETCH
OSC address for upmix angle stretch.
@ MIDIINPUTDEVICE
Selected MIDI input device identifier.
@ UPMIXSNAPSHOTCONFIG
Upmix snapshot container (optional; absent = no snapshot stored).
@ CONTROLCOLOUR
Source/speaker icon colour.
@ OSC_UPMIXOFFSETX
OSC address for upmix X offset.
@ OSC_UPMIXROT
OSC address for upmix rotation.
@ MIDI_UPMIXSCALE
MIDI assignment for upmix translation (radial scale).
@ EXTERNALCONTROLCONFIG
External (MIDI) control assignments container.
@ CONTROLSIZE
Icon size (S/M/L).
@ MIDI_UPMIXOFFSETY
MIDI assignment for upmix Y offset.
@ CONTROLFORMAT
Upmix channel format.
@ MIDI_UPMIXANGLESTRETCH
MIDI assignment for upmix angle stretch.
@ OSC_UPMIXOFFSETY
OSC address for upmix Y offset.
@ OSCINPUTPORT
OSC UDP listen port.
@ MIDI_UPMIXROT
MIDI assignment for upmix rotation.
@ OSC_UPMIXSCALE
OSC address for upmix translation (radial scale).
@ LOOKANDFEEL
Look-and-feel variant.
@ UPMIXCONFIG
Upmix behaviour settings.
@ VISUCONFIG
Visual appearance settings.