Umsci
Upmix Spatial Control Interface — OCA/OCP.1 spatial audio utility
Loading...
Searching...
No Matches
UmsciExternalControlComponent.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 <MidiCommandRangeAssignment.h>
24#include <MidiLearnerComponent.h>
25
26
45class UmsciExternalControlComponent : public juce::Component
46{
47public:
59
61 static const std::array<std::pair<float, float>, UpmixMidiParam_COUNT> s_paramRanges;
62
64 static const juce::String s_paramLabels[UpmixMidiParam_COUNT];
65
67 static const juce::String s_oscDefaultAddresses[UpmixMidiParam_COUNT];
68
69public:
72
73 //==============================================================================
74 void resized() override;
75
76 //==============================================================================
77 // MIDI API
78 void setMidiInputDeviceIdentifier(const juce::String& identifier);
79 const juce::String& getMidiInputDeviceIdentifier() const;
80 void setMidiAssi(UpmixMidiParam param, const JUCEAppBasics::MidiCommandRangeAssignment& assi);
81 const JUCEAppBasics::MidiCommandRangeAssignment& getMidiAssi(UpmixMidiParam param) const;
82
83 std::function<void(const juce::String&)> onMidiInputDeviceChanged;
84 std::function<void(UpmixMidiParam, JUCEAppBasics::MidiCommandRangeAssignment)> onMidiAssiChanged;
85
86 //==============================================================================
87 // OSC API
88 void setOscInputPort(int port);
89 int getOscInputPort() const;
90 void setOscAddr(UpmixMidiParam param, const juce::String& address);
91 juce::String getOscAddr(UpmixMidiParam param) const;
92
93 std::function<void(int)> onOscInputPortChanged;
94 std::function<void(UpmixMidiParam, juce::String)> onOscAddrChanged;
95
96private:
97 class MidiTab;
98 class OscTab;
99
100 std::unique_ptr<juce::TabbedComponent> m_tabs;
101 MidiTab* m_midiTab = nullptr;
102 OscTab* m_oscTab = nullptr;
103
104 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UmsciExternalControlComponent)
105};
Settings panel for MIDI- and OSC-based external control of the six upmix transform parameters (rotati...
std::function< void(UpmixMidiParam, JUCEAppBasics::MidiCommandRangeAssignment)> onMidiAssiChanged
std::function< void(int)> onOscInputPortChanged
static const juce::String s_oscDefaultAddresses[UpmixMidiParam_COUNT]
Default OSC address for each parameter, indexed by UpmixMidiParam.
void setMidiAssi(UpmixMidiParam param, const JUCEAppBasics::MidiCommandRangeAssignment &assi)
static const juce::String s_paramLabels[UpmixMidiParam_COUNT]
Human-readable parameter labels shared by both tabs.
static const std::array< std::pair< float, float >, UpmixMidiParam_COUNT > s_paramRanges
Natural parameter ranges for normalised MIDI→domain mapping. Indexed by UpmixMidiParam.
const juce::String & getMidiInputDeviceIdentifier() const
const JUCEAppBasics::MidiCommandRangeAssignment & getMidiAssi(UpmixMidiParam param) const
UpmixMidiParam
Identifies each controllable upmix transform parameter.
@ UpmixMidiParam_OffsetX
m_upmixOffsetX — ring centre X offset.
@ UpmixMidiParam_HeightTranslation
m_upmixHeightTrans — height ring fraction.
@ UpmixMidiParam_Translation
m_upmixTrans — radial scale factor.
@ UpmixMidiParam_OffsetY
m_upmixOffsetY — ring centre Y offset.
@ UpmixMidiParam_Rotation
m_upmixRot — ring rotation (−π – +π rad).
@ UpmixMidiParam_AngleStretch
m_upmixAngleStretch — angular spread.
juce::String getOscAddr(UpmixMidiParam param) const
void setOscAddr(UpmixMidiParam param, const juce::String &address)
std::function< void(const juce::String &)> onMidiInputDeviceChanged
std::function< void(UpmixMidiParam, juce::String)> onOscAddrChanged
void setMidiInputDeviceIdentifier(const juce::String &identifier)