move mode/scale/key definitions out of push2 code and into libardour; Aeolian is...
[ardour.git] / libs / ardour / mode.cc
1 /*
2     Copyright (C) 1999-2016 Paul Davis
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #include "ardour/mode.h"
21
22 MusicalMode::MusicalMode (MusicalMode::Type t)
23 {
24         fill (*this, t);
25 }
26
27 MusicalMode::~MusicalMode()
28 {
29 }
30
31 void
32 MusicalMode::fill (MusicalMode& m, MusicalMode::Type t)
33 {
34         m.steps.clear ();
35
36         /* scales/modes as distances from root, expressed
37            in fractional whole tones.
38         */
39
40         switch (t) {
41         case Dorian:
42                 m.steps.push_back (1.0);
43                 m.steps.push_back (1.5);
44                 m.steps.push_back (2.0);
45                 m.steps.push_back (3.0);
46                 m.steps.push_back (4.0);
47                 m.steps.push_back (4.5);
48                 m.steps.push_back (5.5);
49                 break;
50         case IonianMajor:
51                 m.steps.push_back (1.0);
52                 m.steps.push_back (2.0);
53                 m.steps.push_back (2.5);
54                 m.steps.push_back (3.5);
55                 m.steps.push_back (4.5);
56                 m.steps.push_back (5.5);
57                 break;
58         case AeolianMinor:
59                 m.steps.push_back (1.0);
60                 m.steps.push_back (1.5);
61                 m.steps.push_back (2.5);
62                 m.steps.push_back (3.5);
63                 m.steps.push_back (4.0);
64                 m.steps.push_back (5.0);
65                 break;
66         case HarmonicMinor:
67                 m.steps.push_back (1.0);
68                 m.steps.push_back (1.5);
69                 m.steps.push_back (2.5);
70                 m.steps.push_back (3.5);
71                 m.steps.push_back (5.0);
72                 m.steps.push_back (5.5);
73                 break;
74         case  BluesScale:
75                 m.steps.push_back (1.0);
76                 m.steps.push_back (1.5);
77                 m.steps.push_back (2.5);
78                 m.steps.push_back (3);
79                 m.steps.push_back (3.5);
80                 m.steps.push_back (4.5);
81                 m.steps.push_back (5.0);
82                 m.steps.push_back (5.5);
83                 break;
84         case MelodicMinorAscending:
85                 m.steps.push_back (1.0);
86                 m.steps.push_back (1.5);
87                 m.steps.push_back (2.5);
88                 m.steps.push_back (3.5);
89                 m.steps.push_back (4.5);
90                 m.steps.push_back (5.5);
91                 break;
92         case MelodicMinorDescending:
93                 m.steps.push_back (1.0);
94                 m.steps.push_back (2.0);
95                 m.steps.push_back (2.5);
96                 m.steps.push_back (3.5);
97                 m.steps.push_back (4.5);
98                 m.steps.push_back (5.0);
99                 break;
100         case Phrygian:
101                 m.steps.push_back (0.5);
102                 m.steps.push_back (1.5);
103                 m.steps.push_back (2.5);
104                 m.steps.push_back (3.5);
105                 m.steps.push_back (4.0);
106                 m.steps.push_back (5.0);
107                 break;
108         case Lydian:
109                 m.steps.push_back (1.0);
110                 m.steps.push_back (2.0);
111                 m.steps.push_back (3.0);
112                 m.steps.push_back (3.5);
113                 m.steps.push_back (4.5);
114                 m.steps.push_back (5.5);
115                 break;
116         case Mixolydian:
117                 m.steps.push_back (1.0);
118                 m.steps.push_back (2.0);
119                 m.steps.push_back (2.5);
120                 m.steps.push_back (3.5);
121                 m.steps.push_back (4.5);
122                 m.steps.push_back (5.0);
123                 break;
124         case Locrian:
125                 m.steps.push_back (0.5);
126                 m.steps.push_back (1.5);
127                 m.steps.push_back (2.0);
128                 m.steps.push_back (3.0);
129                 m.steps.push_back (4.0);
130                 m.steps.push_back (5.0);
131                 break;
132         case PentatonicMajor:
133                 m.steps.push_back (1.0);
134                 m.steps.push_back (2.0);
135                 m.steps.push_back (2.5);
136                 m.steps.push_back (3.5);
137                 break;
138         case PentatonicMinor:
139                 m.steps.push_back (1.5);
140                 m.steps.push_back (2.5);
141                 m.steps.push_back (3.5);
142                 m.steps.push_back (5.0);
143                 break;
144         case  Chromatic:
145                 m.steps.push_back (0.5);
146                 m.steps.push_back (1.0);
147                 m.steps.push_back (1.5);
148                 m.steps.push_back (2.0);
149                 m.steps.push_back (2.5);
150                 m.steps.push_back (3.0);
151                 m.steps.push_back (3.5);
152                 m.steps.push_back (4.0);
153                 m.steps.push_back (4.5);
154                 m.steps.push_back (5.0);
155                 m.steps.push_back (5.5);
156                 break;
157         case  NeapolitanMinor:
158                 m.steps.push_back (0.5);
159                 m.steps.push_back (1.5);
160                 m.steps.push_back (2.5);
161                 m.steps.push_back (2.5);
162                 m.steps.push_back (4.0);
163                 m.steps.push_back (5.5);
164                 break;
165         case  NeapolitanMajor:
166                 m.steps.push_back (0.5);
167                 m.steps.push_back (1.5);
168                 m.steps.push_back (2.5);
169                 m.steps.push_back (3.5);
170                 m.steps.push_back (4.5);
171                 m.steps.push_back (5.5);
172                 break;
173         case  Oriental:
174                 m.steps.push_back (0.5);
175                 m.steps.push_back (2.0);
176                 m.steps.push_back (2.5);
177                 m.steps.push_back (3.0);
178                 m.steps.push_back (4.5);
179                 m.steps.push_back (5.0);
180                 break;
181         case  DoubleHarmonic:
182                 m.steps.push_back (0.5);
183                 m.steps.push_back (2.0);
184                 m.steps.push_back (2.5);
185                 m.steps.push_back (3.5);
186                 m.steps.push_back (4.0);
187                 m.steps.push_back (5.5);
188                 break;
189         case  Enigmatic:
190                 m.steps.push_back (0.5);
191                 m.steps.push_back (2.0);
192                 m.steps.push_back (3.0);
193                 m.steps.push_back (4.0);
194                 m.steps.push_back (5.0);
195                 m.steps.push_back (5.5);
196                 break;
197         case  Hirajoshi:
198                 m.steps.push_back (1.0);
199                 m.steps.push_back (1.5);
200                 m.steps.push_back (3.5);
201                 m.steps.push_back (4.0);
202                 break;
203         case  HungarianMinor:
204                 m.steps.push_back (1.0);
205                 m.steps.push_back (1.5);
206                 m.steps.push_back (3.0);
207                 m.steps.push_back (3.5);
208                 m.steps.push_back (4.0);
209                 m.steps.push_back (5.5);
210                 break;
211         case  HungarianMajor:
212                 m.steps.push_back (1.0);
213                 m.steps.push_back (2.0);
214                 m.steps.push_back (3.0);
215                 m.steps.push_back (3.5);
216                 m.steps.push_back (4.0);
217                 m.steps.push_back (5.0);
218                 break;
219         case  Kumoi:
220                 m.steps.push_back (0.5);
221                 m.steps.push_back (2.5);
222                 m.steps.push_back (3.5);
223                 m.steps.push_back (4.0);
224                 break;
225         case  Iwato:
226                 m.steps.push_back (0.5);
227                 m.steps.push_back (2.5);
228                 m.steps.push_back (3.0);
229                 m.steps.push_back (5.0);
230                 break;
231         case  Hindu:
232                 m.steps.push_back (1.0);
233                 m.steps.push_back (2.0);
234                 m.steps.push_back (2.5);
235                 m.steps.push_back (3.5);
236                 m.steps.push_back (4.0);
237                 m.steps.push_back (5.0);
238                 break;
239         case  Spanish8Tone:
240                 m.steps.push_back (0.5);
241                 m.steps.push_back (1.5);
242                 m.steps.push_back (2.0);
243                 m.steps.push_back (2.5);
244                 m.steps.push_back (3.0);
245                 m.steps.push_back (4.0);
246                 m.steps.push_back (5.0);
247                 break;
248         case  Pelog:
249                 m.steps.push_back (0.5);
250                 m.steps.push_back (1.5);
251                 m.steps.push_back (3.5);
252                 m.steps.push_back (5.0);
253                 break;
254         case  HungarianGypsy:
255                 m.steps.push_back (1.0);
256                 m.steps.push_back (1.5);
257                 m.steps.push_back (3.0);
258                 m.steps.push_back (3.5);
259                 m.steps.push_back (4.0);
260                 m.steps.push_back (5.0);
261                 break;
262         case  Overtone:
263                 m.steps.push_back (1.0);
264                 m.steps.push_back (2.0);
265                 m.steps.push_back (3.0);
266                 m.steps.push_back (3.5);
267                 m.steps.push_back (4.5);
268                 m.steps.push_back (5.0);
269                 break;
270         case  LeadingWholeTone:
271                 m.steps.push_back (1.0);
272                 m.steps.push_back (2.0);
273                 m.steps.push_back (3.0);
274                 m.steps.push_back (4.0);
275                 m.steps.push_back (5.0);
276                 m.steps.push_back (5.5);
277                 break;
278         case  Arabian:
279                 m.steps.push_back (1.0);
280                 m.steps.push_back (2.0);
281                 m.steps.push_back (2.5);
282                 m.steps.push_back (3.0);
283                 m.steps.push_back (4.0);
284                 m.steps.push_back (5.0);
285                 break;
286         case  Balinese:
287                 m.steps.push_back (0.5);
288                 m.steps.push_back (1.5);
289                 m.steps.push_back (3.5);
290                 m.steps.push_back (4.0);
291                 break;
292         case  Gypsy:
293                 m.steps.push_back (0.5);
294                 m.steps.push_back (2.0);
295                 m.steps.push_back (2.5);
296                 m.steps.push_back (3.5);
297                 m.steps.push_back (4.0);
298                 m.steps.push_back (5.5);
299                 break;
300         case  Mohammedan:
301                 m.steps.push_back (1.0);
302                 m.steps.push_back (1.5);
303                 m.steps.push_back (2.5);
304                 m.steps.push_back (3.5);
305                 m.steps.push_back (4.0);
306                 m.steps.push_back (5.5);
307                 break;
308         case  Javanese:
309                 m.steps.push_back (0.5);
310                 m.steps.push_back (1.5);
311                 m.steps.push_back (2.5);
312                 m.steps.push_back (3.5);
313                 m.steps.push_back (4.5);
314                 m.steps.push_back (5.0);
315                 break;
316         case  Persian:
317                 m.steps.push_back (0.5);
318                 m.steps.push_back (2.0);
319                 m.steps.push_back (2.5);
320                 m.steps.push_back (3.0);
321                 m.steps.push_back (4.0);
322                 m.steps.push_back (5.5);
323                 break;
324         case  Algerian:
325                 m.steps.push_back (1.0);
326                 m.steps.push_back (1.5);
327                 m.steps.push_back (3.0);
328                 m.steps.push_back (3.5);
329                 m.steps.push_back (4.0);
330                 m.steps.push_back (5.5);
331                 m.steps.push_back (6.0);
332                 m.steps.push_back (7.0);
333                 m.steps.push_back (7.5);
334                 m.steps.push_back (8.5);
335                 break;
336         }
337 }