Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
track.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2018-2022, 2024 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __SCHEMAS_AUDIO_TRACK_H__
11#define __SCHEMAS_AUDIO_TRACK_H__
12
20#include "gui/backend/backend/cyaml_schemas/dsp/track_lane.h"
23#include "utils/yaml.h"
24
25typedef enum TrackType_v1
26{
27 TRACK_TYPE_INSTRUMENT_v1,
28 TRACK_TYPE_AUDIO_v1,
29 TRACK_TYPE_MASTER_v1,
30 TRACK_TYPE_CHORD_v1,
31 TRACK_TYPE_MARKER_v1,
32 TRACK_TYPE_TEMPO_v1,
33 TRACK_TYPE_MODULATOR_v1,
34 TRACK_TYPE_AUDIO_BUS_v1,
35 TRACK_TYPE_AUDIO_GROUP_v1,
36 TRACK_TYPE_MIDI_v1,
37 TRACK_TYPE_MIDI_BUS_v1,
38 TRACK_TYPE_MIDI_GROUP_v1,
39 TRACK_TYPE_FOLDER_v1,
40} TrackType_v1;
41
42static const cyaml_strval_t track_type_strings_v1[] = {
43 { "Instrument", TRACK_TYPE_INSTRUMENT_v1 },
44 { "Audio", TRACK_TYPE_AUDIO_v1 },
45 { "Master", TRACK_TYPE_MASTER_v1 },
46 { "Chord", TRACK_TYPE_CHORD_v1 },
47 { "Marker", TRACK_TYPE_MARKER_v1 },
48 { "Tempo", TRACK_TYPE_TEMPO_v1 },
49 { "Modulator", TRACK_TYPE_MODULATOR_v1 },
50 { "Audio FX", TRACK_TYPE_AUDIO_BUS_v1 },
51 { "Audio Group", TRACK_TYPE_AUDIO_GROUP_v1 },
52 { "MIDI", TRACK_TYPE_MIDI_v1 },
53 { "MIDI FX", TRACK_TYPE_MIDI_BUS_v1 },
54 { "MIDI Group", TRACK_TYPE_MIDI_GROUP_v1 },
55 { "Folder", TRACK_TYPE_FOLDER_v1 },
56};
57
58typedef struct Track_v1
59{
60 int schema_version;
61 int pos;
62 TrackType_v1 type;
63 char * name;
64 unsigned int name_hash;
65 char * icon_name;
66 bool automation_visible;
67 bool lanes_visible;
68 bool visible;
69 double main_height;
70 Port_v1 * recording;
71 bool record_set_automatically;
72 bool enabled;
73 GdkRGBA color;
74 TrackLane_v1 ** lanes;
75 int num_lanes;
76 uint8_t midi_ch;
77 bool drum_mode;
78 int passthrough_midi_input;
79 ZRegion_v1 * recording_region;
80 bool recording_start_sent;
81 bool recording_stop_sent;
82 bool recording_paused;
83 int last_lane_idx;
84 ZRegion_v1 ** chord_regions;
85 int num_chord_regions;
86 ScaleObject_v1 ** scales;
87 int num_scales;
88 Marker_v1 ** markers;
89 int num_markers;
90 Port_v1 * bpm_port;
91 Port_v1 * beats_per_bar_port;
92 Port_v1 * beat_unit_port;
93 int size;
94 bool folded;
95 Plugin_v1 ** modulators;
96 int num_modulators;
97 ModulatorMacroProcessor_v1 * modulator_macros[128];
98 int num_modulator_macros;
99 int num_visible_modulator_macros;
100 Channel_v1 * channel;
101 TrackProcessor_v1 * processor;
102 AutomationTracklist_v1 automation_tracklist;
103 bool trigger_midi_activity;
104 PortType_v1 in_signal_type;
105 PortType_v1 out_signal_type;
106 char * comment;
107 bool bounce;
108 bool bounce_to_master;
109 unsigned int * children;
110 int num_children;
111 bool frozen;
112 int pool_id;
113 int magic;
114 bool disconnecting;
115} Track_v1;
116
117static const cyaml_schema_field_t track_fields_schema_v1[] = {
118 YAML_FIELD_INT (Track_v1, schema_version),
119 YAML_FIELD_STRING_PTR (Track_v1, name),
120 YAML_FIELD_STRING_PTR (Track_v1, icon_name),
121 YAML_FIELD_ENUM (Track_v1, type, track_type_strings_v1),
122 YAML_FIELD_INT (Track_v1, pos),
123 YAML_FIELD_INT (Track_v1, lanes_visible),
124 YAML_FIELD_INT (Track_v1, automation_visible),
125 YAML_FIELD_INT (Track_v1, visible),
126 YAML_FIELD_FLOAT (Track_v1, main_height),
127 YAML_FIELD_INT (Track_v1, passthrough_midi_input),
128 YAML_FIELD_MAPPING_PTR_OPTIONAL (Track_v1, recording, port_fields_schema_v1),
129 YAML_FIELD_INT (Track_v1, enabled),
130 YAML_FIELD_MAPPING_EMBEDDED (Track_v1, color, gdk_rgba_fields_schema),
131 YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT (Track_v1, lanes, track_lane_schema_v1),
132 YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT_OPT (Track_v1, chord_regions, region_schema_v1),
133 YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT_OPT (Track_v1, scales, scale_object_schema_v1),
134 YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT_OPT (Track_v1, markers, marker_schema_v1),
135 YAML_FIELD_MAPPING_PTR_OPTIONAL (Track_v1, channel, channel_fields_schema_v1),
136 YAML_FIELD_MAPPING_PTR_OPTIONAL (Track_v1, bpm_port, port_fields_schema_v1),
137 YAML_FIELD_MAPPING_PTR_OPTIONAL (
138 Track_v1,
139 beats_per_bar_port,
140 port_fields_schema_v1),
141 YAML_FIELD_MAPPING_PTR_OPTIONAL (Track_v1, beat_unit_port, port_fields_schema_v1),
142 YAML_FIELD_DYN_ARRAY_VAR_COUNT (Track_v1, modulators, plugin_schema_v1),
143 YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT (
144 Track_v1,
145 modulator_macros,
146 modulator_macro_processor_schema_v1),
147 YAML_FIELD_INT (Track_v1, num_visible_modulator_macros),
148 YAML_FIELD_MAPPING_PTR (Track_v1, processor, track_processor_fields_schema_v1),
149 YAML_FIELD_MAPPING_EMBEDDED (
150 Track_v1,
151 automation_tracklist,
152 automation_tracklist_fields_schema_v1),
153 YAML_FIELD_ENUM (Track_v1, in_signal_type, port_type_strings_v1),
154 YAML_FIELD_ENUM (Track_v1, out_signal_type, port_type_strings_v1),
155 YAML_FIELD_UINT (Track_v1, midi_ch),
156 YAML_FIELD_STRING_PTR (Track_v1, comment),
157 YAML_FIELD_DYN_ARRAY_VAR_COUNT_PRIMITIVES (
158 Track_v1,
159 children,
160 unsigned_int_schema),
161 YAML_FIELD_INT (Track_v1, frozen),
162 YAML_FIELD_INT (Track_v1, pool_id),
163 YAML_FIELD_INT (Track_v1, size),
164 YAML_FIELD_INT (Track_v1, folded),
165 YAML_FIELD_INT (Track_v1, record_set_automatically),
166 YAML_FIELD_INT (Track_v1, drum_mode),
167
168 CYAML_FIELD_END
169};
170
171static const cyaml_schema_value_t track_schema_v1 = {
172 YAML_VALUE_PTR (Track_v1, track_fields_schema_v1),
173};
174
175typedef struct Track_v2
176{
177 int schema_version;
178 int pos;
179 TrackType_v1 type;
180 char * name;
181 unsigned int name_hash;
182 char * icon_name;
183 bool automation_visible;
184 bool lanes_visible;
185 bool visible;
186 double main_height;
187 Port_v1 * recording;
188 bool record_set_automatically;
189 bool enabled;
190 GdkRGBA color;
191 TrackLane_v1 ** lanes;
192 int num_lanes;
193 uint8_t midi_ch;
194 bool drum_mode;
195 int passthrough_midi_input;
196 ZRegion_v1 * recording_region;
197 bool recording_start_sent;
198 bool recording_stop_sent;
199 bool recording_paused;
200 int last_lane_idx;
201 ZRegion_v1 ** chord_regions;
202 int num_chord_regions;
203 ScaleObject_v1 ** scales;
204 int num_scales;
205 Marker_v1 ** markers;
206 int num_markers;
207 Port_v1 * bpm_port;
208 Port_v1 * beats_per_bar_port;
209 Port_v1 * beat_unit_port;
210 int size;
211 bool folded;
212 Plugin_v1 ** modulators;
213 int num_modulators;
214 ModulatorMacroProcessor_v1 * modulator_macros[128];
215 int num_modulator_macros;
216 int num_visible_modulator_macros;
217 Channel_v2 * channel;
218 TrackProcessor_v1 * processor;
219 AutomationTracklist_v1 automation_tracklist;
220 bool trigger_midi_activity;
221 PortType_v1 in_signal_type;
222 PortType_v1 out_signal_type;
223 char * comment;
224 bool bounce;
225 bool bounce_to_master;
226 unsigned int * children;
227 int num_children;
228 bool frozen;
229 int pool_id;
230 int magic;
231 bool disconnecting;
232} Track_v2;
233
234static const cyaml_schema_field_t track_fields_schema_v2[] = {
235 YAML_FIELD_INT (Track_v2, schema_version),
236 YAML_FIELD_STRING_PTR (Track_v2, name),
237 YAML_FIELD_STRING_PTR (Track_v2, icon_name),
238 YAML_FIELD_ENUM (Track_v2, type, track_type_strings_v1),
239 YAML_FIELD_INT (Track_v2, pos),
240 YAML_FIELD_INT (Track_v2, lanes_visible),
241 YAML_FIELD_INT (Track_v2, automation_visible),
242 YAML_FIELD_INT (Track_v2, visible),
243 YAML_FIELD_FLOAT (Track_v2, main_height),
244 YAML_FIELD_INT (Track_v2, passthrough_midi_input),
245 YAML_FIELD_MAPPING_PTR_OPTIONAL (Track_v2, recording, port_fields_schema_v1),
246 YAML_FIELD_INT (Track_v2, enabled),
247 YAML_FIELD_MAPPING_EMBEDDED (Track_v2, color, gdk_rgba_fields_schema),
248 YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT (Track_v2, lanes, track_lane_schema_v1),
249 YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT_OPT (Track_v2, chord_regions, region_schema_v1),
250 YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT_OPT (Track_v2, scales, scale_object_schema_v1),
251 YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT_OPT (Track_v2, markers, marker_schema_v1),
252 YAML_FIELD_MAPPING_PTR_OPTIONAL (Track_v2, channel, channel_fields_schema_v2),
253 YAML_FIELD_MAPPING_PTR_OPTIONAL (Track_v2, bpm_port, port_fields_schema_v1),
254 YAML_FIELD_MAPPING_PTR_OPTIONAL (
255 Track_v2,
256 beats_per_bar_port,
257 port_fields_schema_v1),
258 YAML_FIELD_MAPPING_PTR_OPTIONAL (Track_v2, beat_unit_port, port_fields_schema_v1),
259 YAML_FIELD_DYN_ARRAY_VAR_COUNT (Track_v2, modulators, plugin_schema_v1),
260 YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT (
261 Track_v2,
262 modulator_macros,
263 modulator_macro_processor_schema_v1),
264 YAML_FIELD_INT (Track_v2, num_visible_modulator_macros),
265 YAML_FIELD_MAPPING_PTR (Track_v2, processor, track_processor_fields_schema_v1),
266 YAML_FIELD_MAPPING_EMBEDDED (
267 Track_v2,
268 automation_tracklist,
269 automation_tracklist_fields_schema_v1),
270 YAML_FIELD_ENUM (Track_v2, in_signal_type, port_type_strings_v1),
271 YAML_FIELD_ENUM (Track_v2, out_signal_type, port_type_strings_v1),
272 YAML_FIELD_UINT (Track_v2, midi_ch),
273 YAML_FIELD_STRING_PTR (Track_v2, comment),
274 YAML_FIELD_DYN_ARRAY_VAR_COUNT_PRIMITIVES (
275 Track_v2,
276 children,
277 unsigned_int_schema),
278 YAML_FIELD_INT (Track_v2, frozen),
279 YAML_FIELD_INT (Track_v2, pool_id),
280 YAML_FIELD_INT (Track_v2, size),
281 YAML_FIELD_INT (Track_v2, folded),
282 YAML_FIELD_INT (Track_v2, record_set_automatically),
283 YAML_FIELD_INT (Track_v2, drum_mode),
284
285 CYAML_FIELD_END
286};
287
288static const cyaml_schema_value_t track_schema_v2 = {
289 YAML_VALUE_PTR (Track_v2, track_fields_schema_v2),
290};
291
292Track_v2 *
293track_upgrade_from_v1 (Track_v1 * old);
294
295#endif
Automation tracklist schema.
Marker schema.
Modulator macro button processor schema.
Port schema.
Region schema.
Scale object schema.
Track processor schema.
Plugin schema.
Channel schema.
Definition port.h:18
YAML utils.