Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
snap_grid.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2018-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __SCHEMAS_AUDIO_SNAP_GRID_H__
11#define __SCHEMAS_AUDIO_SNAP_GRID_H__
12
14
15typedef enum NoteLength_v1
16{
17 NOTE_LENGTH_BAR_v1,
18 NOTE_LENGTH_BEAT_v1,
19 NOTE_LENGTH_2_1_v1,
20 NOTE_LENGTH_1_1_v1,
21 NOTE_LENGTH_1_2_v1,
22 NOTE_LENGTH_1_4_v1,
23 NOTE_LENGTH_1_8_v1,
24 NOTE_LENGTH_1_16_v1,
25 NOTE_LENGTH_1_32_v1,
26 NOTE_LENGTH_1_64_v1,
27 NOTE_LENGTH_1_128_v1,
28} NoteLength_v1;
29
30static const cyaml_strval_t note_length_strings_v1[] = {
31 { "bar", NOTE_LENGTH_BAR_v1 },
32 { "beat", NOTE_LENGTH_BEAT_v1 },
33 { "2/1", NOTE_LENGTH_2_1_v1 },
34 { "1/1", NOTE_LENGTH_1_1_v1 },
35 { "1/2", NOTE_LENGTH_1_2_v1 },
36 { "1/4", NOTE_LENGTH_1_4_v1 },
37 { "1/8", NOTE_LENGTH_1_8_v1 },
38 { "1/16", NOTE_LENGTH_1_16_v1 },
39 { "1/32", NOTE_LENGTH_1_32_v1 },
40 { "1/64", NOTE_LENGTH_1_64_v1 },
41 { "1/128", NOTE_LENGTH_1_128_v1 },
42};
43
44typedef enum NoteType_v1
45{
46 NOTE_TYPE_NORMAL_v1,
47 NOTE_TYPE_DOTTED_v1,
48 NOTE_TYPE_TRIPLET_v1,
49} NoteType_v1;
50
51static const cyaml_strval_t note_type_strings_v1[] = {
52 { "normal", NOTE_TYPE_NORMAL_v1 },
53 { "dotted", NOTE_TYPE_DOTTED_v1 },
54 { "triplet", NOTE_TYPE_TRIPLET_v1 },
55};
56
57typedef enum NoteLengthType_v1
58{
59 NOTE_LENGTH_CUSTOM_v1,
60 NOTE_LENGTH_LINK_v1,
61 NOTE_LENGTH_LAST_OBJECT_v1,
62} NoteLengthType_v1;
63
64static const cyaml_strval_t note_length_type_strings_v1[] = {
65 { "custom", NOTE_LENGTH_CUSTOM_v1 },
66 { "link", NOTE_LENGTH_LINK_v1 },
67 { "last object", NOTE_LENGTH_LAST_OBJECT_v1 },
68};
69
70typedef enum SnapGridType_v1
71{
72 SNAP_GRID_TYPE_TIMELINE_v1,
73 SNAP_GRID_TYPE_EDITOR_v1,
74} SnapGridType_v1;
75
76static const cyaml_strval_t snap_grid_type_strings_v1[] = {
77 { "timeline", SNAP_GRID_TYPE_TIMELINE_v1 },
78 { "editor", SNAP_GRID_TYPE_EDITOR_v1 },
79};
80
81typedef struct SnapGrid_v1
82{
83 int schema_version;
84 SnapGridType_v1 type;
85 bool snap_adaptive;
86 NoteLength_v1 snap_note_length;
87 NoteType_v1 snap_note_type;
88 bool snap_to_grid;
89 bool snap_to_grid_keep_offset;
90 bool snap_to_events;
91 NoteLength_v1 default_note_length;
92 NoteType_v1 default_note_type;
93 bool default_adaptive;
94 NoteLengthType_v1 length_type;
96
97static const cyaml_schema_field_t snap_grid_fields_schema_v1[] = {
98 YAML_FIELD_INT (SnapGrid_v1, schema_version),
99 YAML_FIELD_ENUM (SnapGrid_v1, type, snap_grid_type_strings_v1),
100 YAML_FIELD_ENUM (SnapGrid_v1, snap_note_length, note_length_strings_v1),
101 YAML_FIELD_ENUM (SnapGrid_v1, snap_note_type, note_type_strings_v1),
102 YAML_FIELD_INT (SnapGrid_v1, snap_adaptive),
103 YAML_FIELD_ENUM (SnapGrid_v1, default_note_length, note_length_strings_v1),
104 YAML_FIELD_ENUM (SnapGrid_v1, default_note_type, note_type_strings_v1),
105 YAML_FIELD_INT (SnapGrid_v1, default_adaptive),
106 YAML_FIELD_ENUM (SnapGrid_v1, length_type, note_length_type_strings_v1),
107 YAML_FIELD_INT (SnapGrid_v1, snap_to_grid),
108 YAML_FIELD_INT (SnapGrid_v1, snap_to_grid_keep_offset),
109 YAML_FIELD_INT (SnapGrid_v1, snap_to_events),
110
111 CYAML_FIELD_END
112};
113
114static const cyaml_schema_value_t snap_grid_schema_v1 = {
115 YAML_VALUE_PTR (SnapGrid_v1, snap_grid_fields_schema_v1),
116};
117
118#endif
Position schema.