Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
arranger_object.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2019-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __SCHEMAS_GUI_BACKEND_ARRANGER_OBJECT_H__
11#define __SCHEMAS_GUI_BACKEND_ARRANGER_OBJECT_H__
12
16#include "utils/yaml.h"
17
18typedef enum ArrangerObjectType_v1
19{
20 ARRANGER_OBJECT_TYPE_NONE_v1,
21 ARRANGER_OBJECT_TYPE_ALL_v1,
22 ARRANGER_OBJECT_TYPE_REGION_v1,
23 ARRANGER_OBJECT_TYPE_MIDI_NOTE_v1,
24 ARRANGER_OBJECT_TYPE_CHORD_OBJECT_v1,
25 ARRANGER_OBJECT_TYPE_SCALE_OBJECT_v1,
26 ARRANGER_OBJECT_TYPE_MARKER_v1,
27 ARRANGER_OBJECT_TYPE_AUTOMATION_POINT_v1,
28 ARRANGER_OBJECT_TYPE_VELOCITY_v1,
29} ArrangerObjectType_v1;
30
31static const cyaml_strval_t arranger_object_type_strings_v1[] = {
32 { ("None"), ARRANGER_OBJECT_TYPE_NONE_v1 },
33 { ("All"), ARRANGER_OBJECT_TYPE_ALL_v1 },
34 { ("Region"), ARRANGER_OBJECT_TYPE_REGION_v1 },
35 { ("Midi Note"), ARRANGER_OBJECT_TYPE_MIDI_NOTE_v1 },
36 { ("Chord Object"), ARRANGER_OBJECT_TYPE_CHORD_OBJECT_v1 },
37 { ("Scale Object"), ARRANGER_OBJECT_TYPE_SCALE_OBJECT_v1 },
38 { ("Marker"), ARRANGER_OBJECT_TYPE_MARKER_v1 },
39 { ("Automation Point"), ARRANGER_OBJECT_TYPE_AUTOMATION_POINT_v1 },
40 { ("Velocity"), ARRANGER_OBJECT_TYPE_VELOCITY_v1 },
41};
42
43typedef enum ArrangerObjectFlags_v1
44{
45 ARRANGER_OBJECT_FLAG_NON_PROJECT_V1 = 1 << 0,
46} ArrangerObjectFlags_v1;
47
48static const cyaml_bitdef_t arranger_object_flags_bitvals_v1[] = {
49 { .name = "non_project", .offset = 0, .bits = 1 },
50};
51
52typedef struct ArrangerObject_v1
53{
54 int schema_version;
55 ArrangerObjectType_v1 type;
56 ArrangerObjectFlags_v1 flags;
57 Position_v1 pos;
58 Position_v1 end_pos;
59 Position_v1 clip_start_pos;
60 Position_v1 loop_start_pos;
61 Position_v1 loop_end_pos;
62 Position_v1 fade_in_pos;
63 Position_v1 fade_out_pos;
64 CurveOptions_v1 fade_in_opts;
65 CurveOptions_v1 fade_out_opts;
66 bool muted;
67 RegionIdentifier_v1 region_id;
69
70static const cyaml_schema_field_t arranger_object_fields_schema_v1[] = {
71 YAML_FIELD_INT (ArrangerObject_v1, schema_version),
72 YAML_FIELD_ENUM (ArrangerObject_v1, type, arranger_object_type_strings_v1),
73 CYAML_FIELD_BITFIELD (
74 "flags",
75 CYAML_FLAG_DEFAULT,
77 flags,
78 arranger_object_flags_bitvals_v1,
79 CYAML_ARRAY_LEN (arranger_object_flags_bitvals_v1)),
80 YAML_FIELD_INT (ArrangerObject_v1, muted),
81 YAML_FIELD_MAPPING_EMBEDDED (ArrangerObject_v1, pos, position_fields_schema_v1),
82 YAML_FIELD_MAPPING_EMBEDDED (
84 end_pos,
85 position_fields_schema_v1),
86 YAML_FIELD_MAPPING_EMBEDDED (
88 clip_start_pos,
89 position_fields_schema_v1),
90 YAML_FIELD_MAPPING_EMBEDDED (
92 loop_start_pos,
93 position_fields_schema_v1),
94 YAML_FIELD_MAPPING_EMBEDDED (
96 loop_end_pos,
97 position_fields_schema_v1),
98 YAML_FIELD_MAPPING_EMBEDDED (
100 fade_in_pos,
101 position_fields_schema_v1),
102 YAML_FIELD_MAPPING_EMBEDDED (
104 fade_out_pos,
105 position_fields_schema_v1),
106 YAML_FIELD_MAPPING_EMBEDDED (
108 fade_in_opts,
109 curve_options_fields_schema_v1),
110 YAML_FIELD_MAPPING_EMBEDDED (
112 fade_out_opts,
113 curve_options_fields_schema_v1),
114 YAML_FIELD_MAPPING_EMBEDDED (
116 region_id,
117 region_identifier_fields_schema_v1),
118
119 CYAML_FIELD_END
120};
121
122static const cyaml_schema_value_t arranger_object_schema_v1 = {
123 YAML_VALUE_PTR (ArrangerObject_v1, arranger_object_fields_schema_v1),
124};
125
126#endif
Curve schema.
Position schema.
Region identifier schema.
YAML utils.