Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
project.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2018-2024 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __SCHEMAS_PROJECT_H__
11#define __SCHEMAS_PROJECT_H__
12
13#include "zrythm-config.h"
14
15#ifdef HAVE_CYAML
16
19# include "gui/backend/backend/cyaml_schemas/dsp/port_connections_manager.h"
30# include "gui/backend/backend/cyaml_schemas/gui/backend/timeline.h"
33
34typedef enum SelectionType_v1
35{
36 Z_PROJECT_SELECTION_TYPE_TRACKLIST_v1,
37 Z_PROJECT_SELECTION_TYPE_TIMELINE_v1,
38 Z_PROJECT_SELECTION_TYPE_INSERT_v1,
39 Z_PROJECT_SELECTION_TYPE_MIDI_FX_v1,
40 Z_PROJECT_SELECTION_TYPE_INSTRUMENT_v1,
41 Z_PROJECT_SELECTION_TYPE_MODULATOR_v1,
42 Z_PROJECT_SELECTION_TYPE_EDITOR_v1,
43} SelectionType_v1;
44
45static const cyaml_strval_t selection_type_strings_v1[] = {
46 { "Tracklist", Z_PROJECT_SELECTION_TYPE_TRACKLIST_v1 },
47 { "Timeline", Z_PROJECT_SELECTION_TYPE_TIMELINE_v1 },
48 { "Insert", Z_PROJECT_SELECTION_TYPE_INSERT_v1 },
49 { "MIDI FX", Z_PROJECT_SELECTION_TYPE_MIDI_FX_v1 },
50 { "Instrument", Z_PROJECT_SELECTION_TYPE_INSTRUMENT_v1 },
51 { "Modulator", Z_PROJECT_SELECTION_TYPE_MODULATOR_v1 },
52 { "Editor", Z_PROJECT_SELECTION_TYPE_EDITOR_v1 },
53};
54
55typedef struct Project_v1
56{
57 int schema_version;
58 char * title;
59 char * datetime_str;
60 char * version;
61 Tracklist_v1 * tracklist;
62 ClipEditor_v1 * clip_editor;
63 Timeline_v1 * timeline;
64 SnapGrid_v1 * snap_grid_timeline;
65 QuantizeOptions_v1 * quantize_opts_timeline;
66 SnapGrid_v1 * snap_grid_editor;
67 QuantizeOptions_v1 * quantize_opts_editor;
68 TracklistSelections_v1 * tracklist_selections;
69 RegionLinkGroupManager_v1 * region_link_group_manager;
70 PortConnectionsManager_v1 * port_connections_manager;
71 AudioEngine_v1 * audio_engine;
72 MidiMappings_v1 * midi_mappings;
73 SelectionType_v1 last_selection;
74} Project_v1;
75
76static const cyaml_schema_field_t project_fields_schema_v1[] = {
77 YAML_FIELD_INT (Project_v1, schema_version),
78 YAML_FIELD_STRING_PTR (Project_v1, title),
79 YAML_FIELD_STRING_PTR (Project_v1, datetime_str),
80 YAML_FIELD_STRING_PTR (Project_v1, version),
81 YAML_FIELD_MAPPING_PTR (Project_v1, tracklist, tracklist_fields_schema_v1),
82 YAML_FIELD_MAPPING_PTR (Project_v1, clip_editor, clip_editor_fields_schema_v1),
83 YAML_FIELD_MAPPING_PTR (Project_v1, timeline, timeline_fields_schema_v1),
84 YAML_FIELD_MAPPING_PTR (
85 Project_v1,
86 snap_grid_timeline,
87 snap_grid_fields_schema_v1),
88 YAML_FIELD_MAPPING_PTR (Project_v1, snap_grid_editor, snap_grid_fields_schema_v1),
89 YAML_FIELD_MAPPING_PTR (
90 Project_v1,
91 quantize_opts_timeline,
92 quantize_options_fields_schema_v1),
93 YAML_FIELD_MAPPING_PTR (
94 Project_v1,
95 quantize_opts_editor,
96 quantize_options_fields_schema_v1),
97 YAML_FIELD_MAPPING_PTR (Project_v1, audio_engine, engine_fields_schema_v1),
98 YAML_FIELD_IGNORE_OPT ("mixer_selections"),
99 YAML_FIELD_IGNORE_OPT ("timeline_selections"),
100 YAML_FIELD_IGNORE_OPT ("midi_arranger_selections"),
101 YAML_FIELD_IGNORE_OPT ("automation_selections"),
102 YAML_FIELD_IGNORE_OPT ("chord_selections"),
103 YAML_FIELD_IGNORE_OPT ("audio_selections"),
104 YAML_FIELD_MAPPING_PTR (
105 Project_v1,
106 tracklist_selections,
107 tracklist_selections_fields_schema_v1),
108 YAML_FIELD_MAPPING_PTR (
109 Project_v1,
110 region_link_group_manager,
111 region_link_group_manager_fields_schema_v1),
112 YAML_FIELD_MAPPING_PTR (
113 Project_v1,
114 port_connections_manager,
115 port_connections_manager_fields_schema_v1),
116 YAML_FIELD_MAPPING_PTR (Project_v1, midi_mappings, midi_mappings_fields_schema_v1),
117 /* ignore undo history */
118 YAML_FIELD_IGNORE_OPT ("undo_manager"),
119 YAML_FIELD_ENUM (Project_v1, last_selection, selection_type_strings_v1),
120
121 CYAML_FIELD_END
122};
123
124static const cyaml_schema_value_t project_schema_v1 = {
125 YAML_VALUE_PTR (Project_v1, project_fields_schema_v1),
126};
127
129typedef struct Project_v5
130{
131 int schema_version;
132 char * title;
133 char * datetime_str;
134 char * version;
135 Tracklist_v2 * tracklist;
136 ClipEditor_v1 * clip_editor;
137 Timeline_v1 * timeline;
138 SnapGrid_v1 * snap_grid_timeline;
139 QuantizeOptions_v1 * quantize_opts_timeline;
140 SnapGrid_v1 * snap_grid_editor;
141 QuantizeOptions_v1 * quantize_opts_editor;
142 TracklistSelections_v2 * tracklist_selections;
143 RegionLinkGroupManager_v1 * region_link_group_manager;
144 PortConnectionsManager_v1 * port_connections_manager;
145 AudioEngine_v2 * audio_engine;
146 MidiMappings_v1 * midi_mappings;
147 SelectionType_v1 last_selection;
148} Project_v5;
149
150static const cyaml_schema_field_t project_fields_schema_v5[] = {
151 YAML_FIELD_INT (Project_v5, schema_version),
152 YAML_FIELD_STRING_PTR (Project_v5, title),
153 YAML_FIELD_STRING_PTR (Project_v5, datetime_str),
154 YAML_FIELD_STRING_PTR (Project_v5, version),
155 YAML_FIELD_MAPPING_PTR (Project_v5, tracklist, tracklist_fields_schema_v2),
156 YAML_FIELD_MAPPING_PTR (Project_v5, clip_editor, clip_editor_fields_schema_v1),
157 YAML_FIELD_MAPPING_PTR (Project_v5, timeline, timeline_fields_schema_v1),
158 YAML_FIELD_MAPPING_PTR (
159 Project_v5,
160 snap_grid_timeline,
161 snap_grid_fields_schema_v1),
162 YAML_FIELD_MAPPING_PTR (Project_v5, snap_grid_editor, snap_grid_fields_schema_v1),
163 YAML_FIELD_MAPPING_PTR (
164 Project_v5,
165 quantize_opts_timeline,
166 quantize_options_fields_schema_v1),
167 YAML_FIELD_MAPPING_PTR (
168 Project_v5,
169 quantize_opts_editor,
170 quantize_options_fields_schema_v1),
171 YAML_FIELD_MAPPING_PTR (Project_v5, audio_engine, engine_fields_schema_v2),
172 YAML_FIELD_IGNORE_OPT ("mixer_selections"),
173 YAML_FIELD_IGNORE_OPT ("timeline_selections"),
174 YAML_FIELD_IGNORE_OPT ("midi_arranger_selections"),
175 YAML_FIELD_IGNORE_OPT ("automation_selections"),
176 YAML_FIELD_IGNORE_OPT ("chord_selections"),
177 YAML_FIELD_IGNORE_OPT ("audio_selections"),
178 YAML_FIELD_MAPPING_PTR (
179 Project_v5,
180 tracklist_selections,
181 tracklist_selections_fields_schema_v2),
182 YAML_FIELD_MAPPING_PTR (
183 Project_v5,
184 region_link_group_manager,
185 region_link_group_manager_fields_schema_v1),
186 YAML_FIELD_MAPPING_PTR (
187 Project_v5,
188 port_connections_manager,
189 port_connections_manager_fields_schema_v1),
190 YAML_FIELD_MAPPING_PTR (Project_v5, midi_mappings, midi_mappings_fields_schema_v1),
191 /* ignore undo history */
192 YAML_FIELD_IGNORE_OPT ("undo_manager"),
193 YAML_FIELD_ENUM (Project_v5, last_selection, selection_type_strings_v1),
194
195 CYAML_FIELD_END
196};
197
198static const cyaml_schema_value_t project_schema_v5 = {
199 YAML_VALUE_PTR (Project_v5, project_fields_schema_v5),
200};
201
209zrythm::utils::string::CStringRAII
210project_v5_serialize_to_json_str (const Project_v5 * prj);
211
212#endif /* HAVE_CYAML */
213
214#endif /* __SCHEMAS_PROJECT_H__ */
Audio selections schema.
Automation selections schema.
Audio engine schema.
MIDI mapping schema.
Quantize options.
Snap/grid schema.
Tracklist schema.
Clip editor schema.
Chord selections schema.
API for selections in the piano roll.
Mixer selections schema.
Timeline selections schema.
Tracklist selections schema.