Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
port_identifier.h
1// SPDX-FileCopyrightText: © 2018-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#ifndef __SCHEMAS_AUDIO_PORT_IDENTIFIER_H__
5#define __SCHEMAS_AUDIO_PORT_IDENTIFIER_H__
6
8#include "utils/yaml.h"
9
10typedef enum PortFlow_v1
11{
12 Z_PORT_FLOW_UNKNOWN_v1,
13 Z_PORT_FLOW_INPUT_v1,
14 Z_PORT_FLOW_OUTPUT_v1,
15} PortFlow_v1;
16
17static const cyaml_strval_t port_flow_strings_v1[] = {
18 { "unknown", Z_PORT_FLOW_UNKNOWN_v1 },
19 { "input", Z_PORT_FLOW_INPUT_v1 },
20 { "output", Z_PORT_FLOW_OUTPUT_v1 },
21};
22
23typedef enum PortType_v1
24{
25 TYPE_UNKNOWN_v1,
26 Z_PORT_TYPE_CONTROL_v1,
27 Z_PORT_TYPE_AUDIO_v1,
28 Z_PORT_TYPE_EVENT_v1,
29 Z_PORT_TYPE_CV_v1,
30} PortType_v1;
31
32static const cyaml_strval_t port_type_strings_v1[] = {
33 { "unknown", TYPE_UNKNOWN_v1 },
34 { "control", Z_PORT_TYPE_CONTROL_v1 },
35 { "audio", Z_PORT_TYPE_AUDIO_v1 },
36 { "event", Z_PORT_TYPE_EVENT_v1 },
37 { "cv", Z_PORT_TYPE_CV_v1 },
38};
39
40typedef enum PortUnit_v1
41{
42 PORT_UNIT_NONE_v1,
43 PORT_UNIT_HZ_v1,
44 PORT_UNIT_MHZ_v1,
45 PORT_UNIT_DB_v1,
46 PORT_UNIT_DEGREES_v1,
47 PORT_UNIT_SECONDS_v1,
48 PORT_UNIT_MS_v1,
49 PORT_UNIT_US_v1,
50} PortUnit_v1;
51
52static const cyaml_strval_t port_unit_strings_v1[] = {
53 { "none", PORT_UNIT_NONE_v1 },
54 { "Hz", PORT_UNIT_HZ_v1 },
55 { "MHz", PORT_UNIT_MHZ_v1 },
56 { "dB", PORT_UNIT_DB_v1 },
57 { "°", PORT_UNIT_DEGREES_v1 },
58 { "s", PORT_UNIT_SECONDS_v1 },
59 { "ms", PORT_UNIT_MS_v1 },
60 { "μs", PORT_UNIT_US_v1 },
61};
62
63typedef enum ZPortOwnerType_v1
64{
65 Z_PORT_OWNER_TYPE_AUDIO_ENGINE_v1,
66 Z_PORT_OWNER_TYPE_PLUGIN_v1,
67 Z_PORT_OWNER_TYPE_TRACK_v1,
68 Z_PORT_OWNER_TYPE_CHANNEL_v1,
69 Z_PORT_OWNER_TYPE_FADER_v1,
70 Z_PORT_OWNER_TYPE_CHANNEL_SEND_v1,
71 Z_PORT_OWNER_TYPE_TRACK_PROCESSOR_v1,
72 Z_PORT_OWNER_TYPE_HW_v1,
73 Z_PORT_OWNER_TYPE_TRANSPORT_v1,
74 Z_PORT_OWNER_TYPE_MODULATOR_MACRO_PROCESSOR_v1,
75} ZPortOwnerType_v1;
76
77static const cyaml_strval_t port_owner_type_strings_v1[] = {
78 { "audio engine", Z_PORT_OWNER_TYPE_AUDIO_ENGINE_v1 },
79 { "plugin", Z_PORT_OWNER_TYPE_PLUGIN_v1 },
80 { "track", Z_PORT_OWNER_TYPE_TRACK_v1 },
81 { "channel", Z_PORT_OWNER_TYPE_CHANNEL_v1 },
82 { "fader", Z_PORT_OWNER_TYPE_FADER_v1 },
83 { "channel send", Z_PORT_OWNER_TYPE_CHANNEL_SEND_v1 },
84 { "track processor", Z_PORT_OWNER_TYPE_TRACK_PROCESSOR_v1 },
85 { "hw", Z_PORT_OWNER_TYPE_HW_v1 },
86 { "transport", Z_PORT_OWNER_TYPE_TRANSPORT_v1 },
87 { "modulator macro processor", Z_PORT_OWNER_TYPE_MODULATOR_MACRO_PROCESSOR_v1 },
88};
89
93typedef enum ZPortFlags_v1
94{
95 Z_PORT_FLAG_STEREO_L_v1 = 1 << 0,
96 Z_PORT_FLAG_STEREO_R_v1 = 1 << 1,
97 Z_PORT_FLAG_PIANO_ROLL_v1 = 1 << 2,
98 Z_PORT_FLAG_SIDECHAIN_v1 = 1 << 3,
99 Z_PORT_FLAG_MAIN_PORT_v1 = 1 << 4,
100 Z_PORT_FLAG_MANUAL_PRESS_v1 = 1 << 5,
101 Z_PORT_FLAG_AMPLITUDE_v1 = 1 << 6,
102 Z_PORT_FLAG_STEREO_BALANCE_v1 = 1 << 7,
103 Z_PORT_FLAG_WANT_POSITION_v1 = 1 << 8,
104 Z_PORT_FLAG_TRIGGER_v1 = 1 << 9,
105 Z_PORT_FLAG_TOGGLE_v1 = 1 << 10,
106 Z_PORT_FLAG_INTEGER_v1 = 1 << 11,
107 Z_PORT_FLAG_FREEWHEEL_v1 = 1 << 12,
108 Z_PORT_FLAG_REPORTS_LATENCY_v1 = 1 << 13,
109 Z_PORT_FLAG_NOT_ON_GUI_v1 = 1 << 14,
110 Z_PORT_FLAG_PLUGIN_ENABLED_v1 = 1 << 15,
111 Z_PORT_FLAG_PLUGIN_CONTROL_v1 = 1 << 16,
112 Z_PORT_FLAG_CHANNEL_MUTE_v1 = 1 << 17,
113 Z_PORT_FLAG_CHANNEL_FADER_v1 = 1 << 18,
114 Z_PORT_FLAG_AUTOMATABLE_v1 = 1 << 19,
115 Z_PORT_FLAG_MIDI_AUTOMATABLE_v1 = 1 << 20,
116 Z_PORT_FLAG_SEND_RECEIVABLE_v1 = 1 << 21,
117 Z_PORT_FLAG_BPM_v1 = 1 << 22,
118 Z_PORT_FLAG_GENERIC_PLUGIN_PORT_v1 = 1 << 23,
119 Z_PORT_FLAG_PLUGIN_GAIN_v1 = 1 << 24,
120 Z_PORT_FLAG_TP_MONO_v1 = 1 << 25,
121 Z_PORT_FLAG_TP_INPUT_GAIN_v1 = 1 << 26,
122 Z_PORT_FLAG_HW_v1 = 1 << 27,
123 Z_PORT_FLAG_MODULATOR_MACRO_v1 = 1 << 28,
124 Z_PORT_FLAG_LOGARITHMIC_v1 = 1 << 29,
125 Z_PORT_FLAG_IS_PROPERTY_v1 = 1 << 30,
126} ZPortFlags_v1;
127
128typedef enum ZPortFlags2_v1
129{
131 Z_PORT_FLAG2_TRANSPORT_ROLL_v1 = 1 << 0,
132 Z_PORT_FLAG2_TRANSPORT_STOP_v1 = 1 << 1,
133 Z_PORT_FLAG2_TRANSPORT_BACKWARD_v1 = 1 << 2,
134 Z_PORT_FLAG2_TRANSPORT_FORWARD_v1 = 1 << 3,
135 Z_PORT_FLAG2_TRANSPORT_LOOP_TOGGLE_v1 = 1 << 4,
136 Z_PORT_FLAG2_TRANSPORT_REC_TOGGLE_v1 = 1 << 5,
137 Z_PORT_FLAG2_SUPPORTS_PATCH_MESSAGE_v1 = 1 << 6,
138 Z_PORT_FLAG2_ENUMERATION_v1 = 1 << 7,
139 Z_PORT_FLAG2_URI_PARAM_v1 = 1 << 8,
140 Z_PORT_FLAG2_SEQUENCE_v1 = 1 << 9,
141 Z_PORT_FLAG2_SUPPORTS_MIDI_v1 = 1 << 10,
142 Z_PORT_FLAG2_TP_OUTPUT_GAIN_v1 = 1 << 11,
143 Z_PORT_FLAG2_MIDI_PITCH_BEND_v1 = 1 << 12,
144 Z_PORT_FLAG2_MIDI_POLY_KEY_PRESSURE_v1 = 1 << 13,
145 Z_PORT_FLAG2_MIDI_CHANNEL_PRESSURE_v1 = 1 << 14,
146 Z_PORT_FLAG2_CHANNEL_SEND_ENABLED_v1 = 1 << 15,
147 Z_PORT_FLAG2_CHANNEL_SEND_AMOUNT_v1 = 1 << 16,
148 Z_PORT_FLAG2_BEATS_PER_BAR_v1 = 1 << 17,
149 Z_PORT_FLAG2_BEAT_UNIT_v1 = 1 << 18,
150 Z_PORT_FLAG2_FADER_SOLO_v1 = 1 << 19,
151 Z_PORT_FLAG2_FADER_LISTEN_v1 = 1 << 20,
152 Z_PORT_FLAG2_FADER_MONO_COMPAT_v1 = 1 << 21,
153 Z_PORT_FLAG2_TRACK_RECORDING_v1 = 1 << 22,
154 Z_PORT_FLAG2_TP_MONITOR_AUDIO_v1 = 1 << 23,
155 Z_PORT_FLAG2_PREFADER_v1 = 1 << 24,
156 Z_PORT_FLAG2_POSTFADER_v1 = 1 << 25,
157 Z_PORT_FLAG2_MONITOR_FADER_v1 = 1 << 26,
158 Z_PORT_FLAG2_SAMPLE_PROCESSOR_FADER_v1 = 1 << 27,
159 Z_PORT_FLAG2_SAMPLE_PROCESSOR_TRACK_v1 = 1 << 28,
160 Z_PORT_FLAG2_FADER_SWAP_PHASE_v1 = 1 << 29,
161} ZPortFlags2_v1;
162
163static const cyaml_bitdef_t port_flags_bitvals_v1[] = {
164 { .name = "stereo_l", .offset = 0, .bits = 1 },
165 { .name = "stereo_r", .offset = 1, .bits = 1 },
166 { .name = "piano_roll", .offset = 2, .bits = 1 },
167 { .name = "sidechain", .offset = 3, .bits = 1 },
168 { .name = "main_port", .offset = 4, .bits = 1 },
169 { .name = "manual_press", .offset = 5, .bits = 1 },
170 { .name = "amplitude", .offset = 6, .bits = 1 },
171 { .name = "stereo_balance", .offset = 7, .bits = 1 },
172 { .name = "want_position", .offset = 8, .bits = 1 },
173 { .name = "trigger", .offset = 9, .bits = 1 },
174 { .name = "toggle", .offset = 10, .bits = 1 },
175 { .name = "integer", .offset = 11, .bits = 1 },
176 { .name = "freewheel", .offset = 12, .bits = 1 },
177 { .name = "reports_latency", .offset = 13, .bits = 1 },
178 { .name = "not_on_gui", .offset = 14, .bits = 1 },
179 { .name = "plugin_enabled", .offset = 15, .bits = 1 },
180 { .name = "plugin_control", .offset = 16, .bits = 1 },
181 { .name = "fader_mute", .offset = 17, .bits = 1 },
182 { .name = "channel_fader", .offset = 18, .bits = 1 },
183 { .name = "automatable", .offset = 19, .bits = 1 },
184 { .name = "midi_automatable", .offset = 20, .bits = 1 },
185 { .name = "send_receivable", .offset = 21, .bits = 1 },
186 { .name = "bpm", .offset = 22, .bits = 1 },
187 { .name = "generic_plugin_port", .offset = 23, .bits = 1 },
188 { .name = "plugin_gain", .offset = 24, .bits = 1 },
189 { .name = "tp_mono", .offset = 25, .bits = 1 },
190 { .name = "tp_input_gain", .offset = 26, .bits = 1 },
191 { .name = "hw", .offset = 27, .bits = 1 },
192 { .name = "modulator_macro", .offset = 28, .bits = 1 },
193 { .name = "logarithmic", .offset = 29, .bits = 1 },
194 { .name = "is_property", .offset = 30, .bits = 1 },
195};
196
197static const cyaml_bitdef_t port_flags2_bitvals_v1[] = {
198 YAML_BITVAL ("transport_roll", 0),
199 YAML_BITVAL ("transport_stop", 1),
200 YAML_BITVAL ("transport_backward", 2),
201 YAML_BITVAL ("transport_forward", 3),
202 YAML_BITVAL ("transport_loop_toggle", 4),
203 YAML_BITVAL ("transport_rec_toggle", 5),
204 YAML_BITVAL ("patch_message", 6),
205 YAML_BITVAL ("enumeration", 7),
206 YAML_BITVAL ("uri_param", 8),
207 YAML_BITVAL ("sequence", 9),
208 YAML_BITVAL ("supports_midi", 10),
209 YAML_BITVAL ("output_gain", 11),
210 YAML_BITVAL ("pitch_bend", 12),
211 YAML_BITVAL ("poly_key_pressure", 13),
212 YAML_BITVAL ("channel_pressure", 14),
213 YAML_BITVAL ("ch_send_enabled", 15),
214 YAML_BITVAL ("ch_send_amount", 16),
215 YAML_BITVAL ("beats_per_bar", 17),
216 YAML_BITVAL ("beat_unit", 18),
217 YAML_BITVAL ("fader_solo", 19),
218 YAML_BITVAL ("fader_listen", 20),
219 YAML_BITVAL ("fader_mono_compat", 21),
220 YAML_BITVAL ("track_recording", 22),
221 YAML_BITVAL ("tp_monitor_audio", 23),
222 YAML_BITVAL ("prefader", 24),
223 YAML_BITVAL ("postfader", 25),
224 YAML_BITVAL ("monitor_fader", 26),
225 YAML_BITVAL ("sample_processor_fader", 27),
226 YAML_BITVAL ("sample_processor_track", 28),
227 YAML_BITVAL ("fader_swap_phase", 29),
228 YAML_BITVAL ("midi_clock", 30),
229};
230
231typedef struct PortIdentifier_v1
232{
233 int schema_version;
234 char * label;
235 char * sym;
236 char * uri;
237 char * comment;
238 ZPortOwnerType_v1 owner_type;
239 PortType_v1 type;
240 PortFlow_v1 flow;
241 ZPortFlags_v1 flags;
242 ZPortFlags2_v1 flags2;
243 PortUnit_v1 unit;
244 PluginIdentifier_v1 plugin_id;
245 char * port_group;
246 char * ext_port_id;
247 unsigned int track_name_hash;
248 int port_index;
250
251static const cyaml_schema_field_t port_identifier_fields_schema_v1[] = {
252 YAML_FIELD_INT (PortIdentifier_v1, schema_version),
253 YAML_FIELD_STRING_PTR_OPTIONAL (PortIdentifier_v1, label),
254 YAML_FIELD_STRING_PTR_OPTIONAL (PortIdentifier_v1, sym),
255 YAML_FIELD_STRING_PTR_OPTIONAL (PortIdentifier_v1, uri),
256 YAML_FIELD_STRING_PTR_OPTIONAL (PortIdentifier_v1, comment),
257 YAML_FIELD_ENUM (PortIdentifier_v1, owner_type, port_owner_type_strings_v1),
258 YAML_FIELD_ENUM (PortIdentifier_v1, type, port_type_strings_v1),
259 YAML_FIELD_ENUM (PortIdentifier_v1, flow, port_flow_strings_v1),
260 YAML_FIELD_ENUM (PortIdentifier_v1, unit, port_unit_strings_v1),
261 YAML_FIELD_BITFIELD (PortIdentifier_v1, flags, port_flags_bitvals_v1),
262 YAML_FIELD_BITFIELD (PortIdentifier_v1, flags2, port_flags2_bitvals_v1),
263 YAML_FIELD_UINT (PortIdentifier_v1, track_name_hash),
264 YAML_FIELD_MAPPING_EMBEDDED (
266 plugin_id,
267 plugin_identifier_fields_schema_v1),
268 YAML_FIELD_STRING_PTR_OPTIONAL (PortIdentifier_v1, port_group),
269 YAML_FIELD_STRING_PTR_OPTIONAL (PortIdentifier_v1, ext_port_id),
270 YAML_FIELD_INT (PortIdentifier_v1, port_index),
271
272 CYAML_FIELD_END,
273};
274
275static const cyaml_schema_value_t port_identifier_schema_v1 = {
276 CYAML_VALUE_MAPPING (
277 CYAML_FLAG_POINTER,
279 port_identifier_fields_schema_v1),
280};
281
282static const cyaml_schema_value_t port_identifier_schema_default_v1 = {
283 CYAML_VALUE_MAPPING (
284 CYAML_FLAG_DEFAULT,
286 port_identifier_fields_schema_v1),
287};
288
289#endif
Plugin identifier.
YAML utils.