Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
scale.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_SCALE_H__
11#define __SCHEMAS_AUDIO_SCALE_H__
12
13#include <cstdint>
14
16
17typedef enum MusicalScaleType_v2
18{
19 SCALE_CHROMATIC_v2,
20 SCALE_MAJOR_v2,
21 SCALE_MINOR_v2,
22 SCALE_IONIAN_v2,
23 SCALE_DORIAN_v2,
24 SCALE_PHRYGIAN_v2,
25 SCALE_LYDIAN_v2,
26 SCALE_MIXOLYDIAN_v2,
27 SCALE_AEOLIAN_v2,
28 SCALE_LOCRIAN_v2,
29 SCALE_MELODIC_MINOR_v2,
30 SCALE_HARMONIC_MINOR_v2,
31 SCALE_WHOLE_TONE_v2,
32 SCALE_MAJOR_PENTATONIC_v2,
33 SCALE_MINOR_PENTATONIC_v2,
34 SCALE_OCTATONIC_HALF_WHOLE_v2,
35 SCALE_OCTATONIC_WHOLE_HALF_v2,
36 SCALE_ACOUSTIC_v2,
37 SCALE_HARMONIC_MAJOR_v2,
38 SCALE_PHRYGIAN_DOMINANT_v2,
39 SCALE_MAJOR_LOCRIAN_v2,
40 SCALE_ALGERIAN_v2,
41 SCALE_AUGMENTED_v2,
42 SCALE_DOUBLE_HARMONIC_v2,
43 SCALE_CHINESE_v2,
44 SCALE_DIMINISHED_v2,
45 SCALE_DOMINANT_DIMINISHED_v2,
46 SCALE_EGYPTIAN_v2,
47 SCALE_EIGHT_TONE_SPANISH_v2,
48 SCALE_ENIGMATIC_v2,
49 SCALE_GEEZ_v2,
50 SCALE_HINDU_v2,
51 SCALE_HIRAJOSHI_v2,
52 SCALE_HUNGARIAN_GYPSY_v2,
53 SCALE_INSEN_v2,
54 SCALE_NEAPOLITAN_MAJOR_v2,
55 SCALE_NEAPOLITAN_MINOR_v2,
56 SCALE_ORIENTAL_v2,
57 SCALE_ROMANIAN_MINOR_v2,
58 SCALE_ALTERED_v2,
59 SCALE_MAQAM_v2,
60 SCALE_YO_v2,
61 SCALE_BEBOP_LOCRIAN_v2,
62 SCALE_BEBOP_DOMINANT_v2,
63 SCALE_BEBOP_MAJOR_v2,
64 SCALE_SUPER_LOCRIAN_v2,
65 SCALE_ENIGMATIC_MINOR_v2,
66 SCALE_COMPOSITE_v2,
67 SCALE_BHAIRAV_v2,
68 SCALE_HUNGARIAN_MINOR_v2,
69 SCALE_PERSIAN_v2,
70 SCALE_IWATO_v2,
71 SCALE_KUMOI_v2,
72 SCALE_PELOG_v2,
73 SCALE_PROMETHEUS_v2,
74 SCALE_PROMETHEUS_NEAPOLITAN_v2,
75 SCALE_PROMETHEUS_LISZT_v2,
76 SCALE_BALINESE_v2,
77 SCALE_RAGATODI_v2,
78 SCALE_JAPANESE1_v2,
79 SCALE_JAPANESE2_v2,
80 SCALE_BLUES_v2,
81 SCALE_FLAMENCO_v2,
82 SCALE_GYPSY_v2,
83 SCALE_HALF_DIMINISHED_v2,
84 SCALE_IN_v2,
85 SCALE_ISTRIAN_v2,
86 SCALE_LYDIAN_AUGMENTED_v2,
87 SCALE_TRITONE_v2,
88 SCALE_UKRANIAN_DORIAN_v2,
89 NUM_SCALES_v2,
90} MusicalScaleType_v2;
91
92static const cyaml_strval_t musical_scale_type_strings_v2[] = {
93 { ("Chromatic"), SCALE_CHROMATIC_v2 },
94 { ("Major"), SCALE_MAJOR_v2 },
95 { ("Minor"), SCALE_MINOR_v2 },
96 { ("Ionian"), SCALE_IONIAN_v2 },
97 { ("Dorian"), SCALE_DORIAN_v2 },
98 { ("Phrygian"), SCALE_PHRYGIAN_v2 },
99 { ("Lydian"), SCALE_LYDIAN_v2 },
100 { ("Mixolydian"), SCALE_MIXOLYDIAN_v2 },
101 { ("Aeolian"), SCALE_AEOLIAN_v2 },
102 { ("Locrian"), SCALE_LOCRIAN_v2 },
103 { ("Melodic Minor"), SCALE_MELODIC_MINOR_v2 },
104 { ("Harmonic Minor"), SCALE_HARMONIC_MINOR_v2 },
105 { ("Whole Tone"), SCALE_WHOLE_TONE_v2 },
106 { ("Major Pentatonic"), SCALE_MAJOR_PENTATONIC_v2 },
107 { ("Minor Pentatonic"), SCALE_MINOR_PENTATONIC_v2 },
108 { ("Octatonic Half Whole"), SCALE_OCTATONIC_HALF_WHOLE_v2 },
109 { ("Octatonic Whole Half"), SCALE_OCTATONIC_WHOLE_HALF_v2 },
110 { ("Acoustic"), SCALE_ACOUSTIC_v2 },
111 { ("Harmonic Major"), SCALE_HARMONIC_MAJOR_v2 },
112 { ("Phrygian Dominant"), SCALE_PHRYGIAN_DOMINANT_v2 },
113 { ("Major Locrian"), SCALE_MAJOR_LOCRIAN_v2 },
114 { ("Algerian"), SCALE_ALGERIAN_v2 },
115 { ("Augmented"), SCALE_AUGMENTED_v2 },
116 { ("Double Harmonic"), SCALE_DOUBLE_HARMONIC_v2 },
117 { ("Chinese"), SCALE_CHINESE_v2 },
118 { ("Diminished"), SCALE_DIMINISHED_v2 },
119 { ("Dominant Diminished"), SCALE_DOMINANT_DIMINISHED_v2 },
120 { ("Egyptian"), SCALE_EGYPTIAN_v2 },
121 { ("Eight Tone Spanish"), SCALE_EIGHT_TONE_SPANISH_v2 },
122 { ("Enigmatic"), SCALE_ENIGMATIC_v2 },
123 { ("Geez"), SCALE_GEEZ_v2 },
124 { ("Hindu"), SCALE_HINDU_v2 },
125 { ("Hirajoshi"), SCALE_HIRAJOSHI_v2 },
126 { ("Hungarian Gypsy"), SCALE_HUNGARIAN_GYPSY_v2 },
127 { ("Insen"), SCALE_INSEN_v2 },
128 { ("Neapolitan Major"), SCALE_NEAPOLITAN_MAJOR_v2 },
129 { ("Neapolitan Minor"), SCALE_NEAPOLITAN_MINOR_v2 },
130 { ("Oriental"), SCALE_ORIENTAL_v2 },
131 { ("Romanian Minor"), SCALE_ROMANIAN_MINOR_v2 },
132 { ("Altered"), SCALE_ALTERED_v2 },
133 { ("Maqam"), SCALE_MAQAM_v2 },
134 { ("Yo"), SCALE_YO_v2 },
135 { ("Bebop Locrian"), SCALE_BEBOP_LOCRIAN_v2 },
136 { ("Bebop Dominant"), SCALE_BEBOP_DOMINANT_v2 },
137 { ("Bebop Major"), SCALE_BEBOP_MAJOR_v2 },
138 { ("Super Locrian"), SCALE_SUPER_LOCRIAN_v2 },
139 { ("Enigmatic Minor"), SCALE_ENIGMATIC_MINOR_v2 },
140 { ("Composite"), SCALE_COMPOSITE_v2 },
141 { ("Bhairav"), SCALE_BHAIRAV_v2 },
142 { ("Hungarian Minor"), SCALE_HUNGARIAN_MINOR_v2 },
143 { ("Persian"), SCALE_PERSIAN_v2 },
144 { ("Iwato"), SCALE_IWATO_v2 },
145 { ("Kumoi"), SCALE_KUMOI_v2 },
146 { ("Pelog"), SCALE_PELOG_v2 },
147 { ("Prometheus"), SCALE_PROMETHEUS_v2 },
148 { ("Prometheus Neapolitan"), SCALE_PROMETHEUS_NEAPOLITAN_v2 },
149 { ("Prometheus Liszt"), SCALE_PROMETHEUS_LISZT_v2 },
150 { ("Balinese"), SCALE_BALINESE_v2 },
151 { ("RagaTodi"), SCALE_RAGATODI_v2 },
152 { ("Japanese 1"), SCALE_JAPANESE1_v2 },
153 { ("Japanese 2"), SCALE_JAPANESE2_v2 },
154};
155
156typedef struct MusicalScale_v2
157{
158 int schema_version;
159 MusicalScaleType_v2 type;
160 MusicalNote_v1 root_key;
162
163static const cyaml_schema_field_t musical_scale_fields_schema_v2[] = {
164 YAML_FIELD_INT (MusicalScale_v2, schema_version),
165 YAML_FIELD_ENUM (MusicalScale_v2, type, musical_scale_type_strings_v2),
166 YAML_FIELD_ENUM (MusicalScale_v2, root_key, musical_note_strings_v1),
167
168 CYAML_FIELD_END
169};
170
171static const cyaml_schema_value_t musical_scale_schema_v2 = {
172 YAML_VALUE_PTR (MusicalScale_v2, musical_scale_fields_schema_v2),
173};
174
175#endif
Chord descriptor schema.