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