Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2021 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 :
23 : #ifndef MUSE_MPE_SOUNDID_H
24 : #define MUSE_MPE_SOUNDID_H
25 :
26 : #include <set>
27 : #include <unordered_map>
28 :
29 : #include "types/string.h"
30 :
31 : namespace muse::mpe {
32 : enum class SoundId
33 : {
34 : Undefined = -1,
35 : Unknown,
36 :
37 : Accordion,
38 : Bandoneon,
39 : Concertina,
40 : Harmonica,
41 : Melodica,
42 : Sheng,
43 : Celesta,
44 : Clavichord,
45 : Harpsichord,
46 : Virginal,
47 : Piano,
48 : Organ,
49 : Harmonium,
50 : Synthesizer,
51 : Theremin,
52 : OndesMartenot,
53 :
54 : Harp,
55 : Cavaquinho,
56 : Guitar,
57 : BassGuitar,
58 : Banjo,
59 : Ukulele,
60 : Mandolin,
61 : MtnDulcimer,
62 : Lute,
63 : Theorbo,
64 : Archlute,
65 : Balalaika,
66 : Guzheng,
67 : Guqin,
68 : Pipa,
69 : Yangqin,
70 : Koto,
71 : Oud,
72 : Shamisen,
73 : Sitar,
74 : Prim,
75 : Brac,
76 : Bugarija,
77 : Berda,
78 : Celo,
79 : Bandurria,
80 : Laud,
81 : StringsGroup,
82 : Violin,
83 : Viola,
84 : ViolaDaGamba,
85 : Violoncello,
86 : Viol,
87 : PardessusViol,
88 : Baryton,
89 : Violone,
90 : Nyckelharpa,
91 : Erhu,
92 : Ajaeng,
93 : Gayageum,
94 : Contrabass,
95 : Octobass,
96 : TimpleCanario,
97 :
98 : WindsGroup,
99 : Piccolo,
100 : Dulzaina,
101 : Heckelphone,
102 : HeckelphoneClarinet,
103 : Oboe,
104 : Lupophone,
105 : Flute,
106 : PanFlute,
107 : Danso,
108 : Daegeum,
109 : Traverso,
110 : Dizi,
111 : Shakuhachi,
112 : Hichiriki,
113 : Sho,
114 : Fife,
115 : Whistle,
116 : Flageolet,
117 : Recorder,
118 : Ocarina,
119 : Gemshorn,
120 : Quena,
121 : Horn,
122 : Bassethorn,
123 : Shawm,
124 : Cromorne,
125 : Crumhorn,
126 : Cornamuse,
127 : Kelhorn,
128 : Rauschpfeife,
129 : Duduk,
130 : Shenai,
131 : Clarinet,
132 : Chalumeau,
133 : Xaphoon,
134 : Tarogato,
135 : Octavin,
136 : Saxophone,
137 : Aulochrome,
138 : Bassoon,
139 : Contrabassoon,
140 : Dulcian,
141 : Rackett,
142 : Sarrusophone,
143 : Bagpipe,
144 : Tuba,
145 : Cornet,
146 : Posthorn,
147 : BrassGroup,
148 : Trumpet,
149 : Bugle,
150 : MellophoneBugle,
151 : EuphoniumBugle,
152 : Euphonium,
153 : Fiscorn,
154 : Flugelhorn,
155 : Kuhlohorn,
156 : Ophicleide,
157 : Cornettino,
158 : Cornett,
159 : Serpent,
160 : Trombone,
161 : Cimbasso,
162 : Sackbut,
163 : Sousaphone,
164 : Helicon,
165 : Conch,
166 : Saxhorn,
167 : Horagai,
168 : Alphorn,
169 : RagDung,
170 : Didgeridoo,
171 : Shofar,
172 : Vuvuzela,
173 :
174 : Timpani,
175 : RotoToms,
176 : Tubaphone,
177 : SteelDrums,
178 : Glockenspiel,
179 : Xylophone,
180 : Xylomarimba,
181 : Vibraphone,
182 : Dulcimer,
183 : Cimbalom,
184 : Marimba,
185 : Crotales,
186 : Chimes,
187 : Carillon,
188 : Gong,
189 : Metallophone,
190 : Flexatone,
191 : MusicalSaw,
192 : MusicalGlasses,
193 : KlaxonHorns,
194 : Kalimba,
195 : Bongos,
196 : Xiaogu,
197 : Bangu,
198 : Dagu,
199 : Daluo,
200 : Xiaoluo,
201 : Ban,
202 : Dabo,
203 : Naobo,
204 : Bangzi,
205 : Janggu,
206 : Buk,
207 : SamulBuk,
208 : SamulJanggu,
209 : SanjoJanggu,
210 : SoriBuk,
211 : Sogo,
212 : Kkwaenggwari,
213 : Jing,
214 : TomToms,
215 : KoTsuzumi,
216 : OTsuzumi,
217 : Kakko,
218 : ShimeDaiko,
219 : MiyaDaiko,
220 : TsuriDaiko,
221 : OkedoDaiko,
222 : Kane,
223 : Shoko,
224 : Conga,
225 : Djembe,
226 : Doumbek,
227 : Cajon,
228 : Cuica,
229 : Drumset,
230 : Drum,
231 : Tablas,
232 : Timbales,
233 : Anvil,
234 : BellTree,
235 : Bell,
236 : Chain,
237 : Cymbal,
238 : HiHat,
239 : Pipe,
240 : MarkTree,
241 : Castanet,
242 : TamTam,
243 : Thundersheet,
244 : Triangle,
245 : Claves,
246 : Guiro,
247 : Block,
248 : Cabasa,
249 : Maraca,
250 : Quijada,
251 : Ratchet,
252 : Shaker,
253 : Shekere,
254 : Stones,
255 : Tambourine,
256 : Tubo,
257 : Vibraslap,
258 : Whip,
259 : Cannon,
260 : BirdCall,
261 : Snap,
262 : Clap,
263 : Slap,
264 : Stamp,
265 : Choir,
266 : Kazoo,
267 : Taiko,
268 : Metronome,
269 :
270 : Last
271 : };
272 :
273 : enum class SoundCategory
274 : {
275 : Undefined = -1,
276 : Keyboards,
277 : Strings,
278 : Winds,
279 : Percussions,
280 : Voices,
281 :
282 : Last
283 : };
284 :
285 : enum class SoundSubCategory
286 : {
287 : Undefined = -1,
288 : Unknown,
289 :
290 : English,
291 : Armenian,
292 : Alpine,
293 : Australian,
294 : Irish,
295 : French,
296 : Chinese,
297 : Vienna,
298 : Greek,
299 : Japanese,
300 : Korean,
301 : Tibetan,
302 : African,
303 : Indian,
304 : Spanish,
305 : Castilian,
306 : Swedish,
307 : Hungarian,
308 : Romanian,
309 : CentralEuropean,
310 :
311 : Baroque,
312 : Classical,
313 : Modern,
314 : Orchestral,
315 :
316 : Hammond,
317 : Wagner,
318 : Orff,
319 : Huang,
320 : Hohner,
321 :
322 : Percussive,
323 : Piped,
324 : Rotary,
325 : Reed,
326 : Foot,
327 : Hand,
328 : Finger,
329 : Boy,
330 : Girl,
331 : Male,
332 : Female,
333 : Pad,
334 : Plucked,
335 :
336 : FourPiece,
337 : FivePiece,
338 :
339 : Temple,
340 : Military,
341 : Ride,
342 : Sleigh,
343 : Cow,
344 : Agogo,
345 : Marching,
346 : Show_Style,
347 : Opera,
348 : China,
349 :
350 : Splash,
351 : Crash,
352 : Plate,
353 : Bowl,
354 : Frame,
355 : Slit,
356 : Log,
357 : Ocean,
358 : Field,
359 : Snare,
360 : Brake,
361 : Slide,
362 : Pocket,
363 : Garklein,
364 : Toy,
365 : String,
366 : TwelveString,
367 :
368 : Grand,
369 : HonkyTonk,
370 : Upright,
371 : Prima,
372 : Secunda,
373 :
374 : Electric,
375 : Electronic,
376 : Acoustic,
377 : Fretless,
378 : Pedal,
379 : Steel,
380 : Metal,
381 : Iron,
382 : Brass,
383 : Tin,
384 : Nylon,
385 : Wooden,
386 : Sandpaper,
387 : Glass,
388 : Shell,
389 : Wind,
390 : Soft,
391 :
392 : Treble,
393 : Diatonic,
394 : Chromatic,
395 : Octave,
396 :
397 : Piccolo,
398 : Alto,
399 : Tenor,
400 : Baritone,
401 : Soprano,
402 : Mezzo_Soprano,
403 : Sopranino,
404 : Sopranissimo,
405 : Counter_Tenor,
406 : Contra,
407 : Contra_Alto,
408 : Sub_Contra_Alto,
409 : Contra_Bass,
410 : Sub_Contra_Bass,
411 : Double_Contra_Bass,
412 : Bass,
413 : Bowed,
414 : Great_Bass,
415 : Hyper_Bass,
416 : Melody,
417 :
418 : FX_Goblins,
419 : FX_Atmosphere,
420 : FX_Brightness,
421 : FX_Crystal,
422 : FX_Echoes,
423 : FX_Rain,
424 : FX_SciFi,
425 : FX_SoundTrack,
426 :
427 : Sweep,
428 : Warm,
429 : NewAge,
430 : Polysynth,
431 : Halo,
432 : Metallic,
433 : Choir,
434 :
435 : Sine_Wave,
436 : Square_Wave,
437 : Sawtooth_Wave,
438 :
439 : Primary,
440 : Secondary,
441 : Section,
442 :
443 : In_C,
444 : In_D,
445 : In_D_flat,
446 : In_E,
447 : In_E_flat,
448 : In_F,
449 : In_G,
450 : In_G_flat,
451 : In_A,
452 : In_A_flat,
453 : In_B,
454 : In_B_flat,
455 :
456 : Last
457 : };
458 :
459 : inline const std::unordered_map<SoundId, String> ID_STRINGS
460 : {
461 : { SoundId::Undefined, String(u"undefined") },
462 : { SoundId::Unknown, String(u"unknown") },
463 : { SoundId::Accordion, String(u"accordion") },
464 : { SoundId::Bandoneon, String(u"bandoneon") },
465 : { SoundId::Concertina, String(u"concertina") },
466 : { SoundId::Harmonica, String(u"harmonica") },
467 : { SoundId::Melodica, String(u"melodica") },
468 : { SoundId::Sheng, String(u"sheng") },
469 : { SoundId::Celesta, String(u"celesta") },
470 : { SoundId::Clavichord, String(u"clavichord") },
471 : { SoundId::Harpsichord, String(u"harpsichord") },
472 : { SoundId::Virginal, String(u"virginal") },
473 : { SoundId::Piano, String(u"piano") },
474 : { SoundId::Organ, String(u"organ") },
475 : { SoundId::Harmonium, String(u"harmonium") },
476 : { SoundId::Synthesizer, String(u"synthesizer") },
477 : { SoundId::Theremin, String(u"theremin") },
478 : { SoundId::OndesMartenot, String(u"ondes_martenot") },
479 :
480 : { SoundId::Harp, String(u"harp") },
481 : { SoundId::Cavaquinho, String(u"cavaquinho") },
482 : { SoundId::Guitar, String(u"guitar") },
483 : { SoundId::BassGuitar, String(u"bass_guitar") },
484 : { SoundId::Banjo, String(u"banjo") },
485 : { SoundId::Ukulele, String(u"ukulele") },
486 : { SoundId::Mandolin, String(u"mandolin") },
487 : { SoundId::MtnDulcimer, String(u"mtn_dulcimer") },
488 : { SoundId::Lute, String(u"lute") },
489 : { SoundId::Theorbo, String(u"theorbo") },
490 : { SoundId::Archlute, String(u"archlute") },
491 : { SoundId::Balalaika, String(u"balalaika") },
492 : { SoundId::Guzheng, String(u"guzheng") },
493 : { SoundId::Guqin, String(u"guqin") },
494 : { SoundId::Pipa, String(u"pipa") },
495 : { SoundId::Yangqin, String(u"yangqin") },
496 : { SoundId::Koto, String(u"koto") },
497 : { SoundId::Oud, String(u"oud") },
498 : { SoundId::Shamisen, String(u"shamisen") },
499 : { SoundId::Sitar, String(u"sitar") },
500 : { SoundId::Prim, String(u"prim") },
501 : { SoundId::Brac, String(u"brac") },
502 : { SoundId::Bugarija, String(u"bugarija") },
503 : { SoundId::Berda, String(u"berda") },
504 : { SoundId::Celo, String(u"celo") },
505 : { SoundId::Bandurria, String(u"bandurria") },
506 : { SoundId::Laud, String(u"laud") },
507 : { SoundId::StringsGroup, String(u"strings_group") },
508 : { SoundId::Violin, String(u"violin") },
509 : { SoundId::Viola, String(u"viola") },
510 : { SoundId::ViolaDaGamba, String(u"viola_dagamba") },
511 : { SoundId::Violoncello, String(u"violoncello") },
512 : { SoundId::Viol, String(u"viol") },
513 : { SoundId::PardessusViol, String(u"pardessus_viol") },
514 : { SoundId::Baryton, String(u"baryton") },
515 : { SoundId::Violone, String(u"violone") },
516 : { SoundId::Nyckelharpa, String(u"nyckelharpa") },
517 : { SoundId::Erhu, String(u"erhu") },
518 : { SoundId::Ajaeng, String(u"ajaeng") },
519 : { SoundId::Gayageum, String(u"gayageum") },
520 : { SoundId::Contrabass, String(u"contrabass") },
521 : { SoundId::Octobass, String(u"octobass") },
522 : { SoundId::TimpleCanario, String(u"timple_canario") },
523 :
524 : { SoundId::WindsGroup, String(u"winds_group") },
525 : { SoundId::Piccolo, String(u"piccolo") },
526 : { SoundId::Dulzaina, String(u"dulzaina") },
527 : { SoundId::Heckelphone, String(u"heckelphone") },
528 : { SoundId::HeckelphoneClarinet, String(u"heckelphone_clarinet") },
529 : { SoundId::Oboe, String(u"oboe") },
530 : { SoundId::Lupophone, String(u"lupophone") },
531 : { SoundId::Flute, String(u"flute") },
532 : { SoundId::PanFlute, String(u"pan_flute") },
533 : { SoundId::Danso, String(u"danso") },
534 : { SoundId::Daegeum, String(u"daegeum") },
535 : { SoundId::Traverso, String(u"traverso") },
536 : { SoundId::Dizi, String(u"dizi") },
537 : { SoundId::Shakuhachi, String(u"shakuhachi") },
538 : { SoundId::Hichiriki, String(u"hichiriki") },
539 : { SoundId::Sho, String(u"sho") },
540 : { SoundId::Fife, String(u"fife") },
541 : { SoundId::Whistle, String(u"whistle") },
542 : { SoundId::Flageolet, String(u"flageolet") },
543 : { SoundId::Recorder, String(u"recorder") },
544 : { SoundId::Ocarina, String(u"ocarina") },
545 : { SoundId::Gemshorn, String(u"gemshorn") },
546 : { SoundId::Quena, String(u"quena") },
547 : { SoundId::Horn, String(u"horn") },
548 : { SoundId::Bassethorn, String(u"bassethorn") },
549 : { SoundId::Shawm, String(u"shawm") },
550 : { SoundId::Cromorne, String(u"cromorne") },
551 : { SoundId::Crumhorn, String(u"crumhorn") },
552 : { SoundId::Cornamuse, String(u"cornamuse") },
553 : { SoundId::Kelhorn, String(u"kelhorn") },
554 : { SoundId::Rauschpfeife, String(u"rauschpfeife") },
555 : { SoundId::Duduk, String(u"duduk") },
556 : { SoundId::Shenai, String(u"shenai") },
557 : { SoundId::Clarinet, String(u"clarinet") },
558 : { SoundId::Chalumeau, String(u"chalumeau") },
559 : { SoundId::Xaphoon, String(u"xaphoon") },
560 : { SoundId::Tarogato, String(u"tarogato") },
561 : { SoundId::Octavin, String(u"octavin") },
562 : { SoundId::Saxophone, String(u"saxophone") },
563 : { SoundId::Aulochrome, String(u"aulochrome") },
564 : { SoundId::Bassoon, String(u"bassoon") },
565 : { SoundId::Contrabassoon, String(u"contrabassoon") },
566 : { SoundId::Dulcian, String(u"dulcian") },
567 : { SoundId::Rackett, String(u"rackett") },
568 : { SoundId::Sarrusophone, String(u"sarrusophone") },
569 : { SoundId::Bagpipe, String(u"bagpipe") },
570 : { SoundId::Tuba, String(u"tuba") },
571 : { SoundId::Cornet, String(u"cornet") },
572 : { SoundId::Posthorn, String(u"posthorn") },
573 : { SoundId::BrassGroup, String(u"brass_group") },
574 : { SoundId::Trumpet, String(u"trumpet") },
575 : { SoundId::Bugle, String(u"bugle") },
576 : { SoundId::MellophoneBugle, String(u"mellophone_bugle") },
577 : { SoundId::EuphoniumBugle, String(u"euphonium_bugle") },
578 : { SoundId::Euphonium, String(u"euphonium") },
579 : { SoundId::Fiscorn, String(u"fiscorn") },
580 : { SoundId::Flugelhorn, String(u"flugelhorn") },
581 : { SoundId::Kuhlohorn, String(u"kuhlohorn") },
582 : { SoundId::Ophicleide, String(u"ophicleide") },
583 : { SoundId::Cornettino, String(u"cornettino") },
584 : { SoundId::Cornett, String(u"cornett") },
585 : { SoundId::Serpent, String(u"serpent") },
586 : { SoundId::Trombone, String(u"trombone") },
587 : { SoundId::Cimbasso, String(u"cimbasso") },
588 : { SoundId::Sackbut, String(u"sackbut") },
589 : { SoundId::Sousaphone, String(u"sousaphone") },
590 : { SoundId::Helicon, String(u"helicon") },
591 : { SoundId::Conch, String(u"conch") },
592 : { SoundId::Saxhorn, String(u"saxhorn") },
593 : { SoundId::Horagai, String(u"horagai") },
594 : { SoundId::Alphorn, String(u"alphorn") },
595 : { SoundId::RagDung, String(u"rag_dung") },
596 : { SoundId::Didgeridoo, String(u"didgeridoo") },
597 : { SoundId::Shofar, String(u"shofar") },
598 : { SoundId::Vuvuzela, String(u"vuvuzela") },
599 :
600 : { SoundId::Timpani, String(u"timpani") },
601 : { SoundId::RotoToms, String(u"roto_toms") },
602 : { SoundId::Tubaphone, String(u"tubaphone") },
603 : { SoundId::SteelDrums, String(u"steel_drums") },
604 : { SoundId::Glockenspiel, String(u"glockenspiel") },
605 : { SoundId::Xylophone, String(u"xylophone") },
606 : { SoundId::Xylomarimba, String(u"xylomarimba") },
607 : { SoundId::Vibraphone, String(u"vibraphone") },
608 : { SoundId::Dulcimer, String(u"dulcimer") },
609 : { SoundId::Cimbalom, String(u"cimbalom") },
610 : { SoundId::Marimba, String(u"marimba") },
611 : { SoundId::Crotales, String(u"crotales") },
612 : { SoundId::Chimes, String(u"chimes") },
613 : { SoundId::Carillon, String(u"carillon") },
614 : { SoundId::Gong, String(u"gong") },
615 : { SoundId::Metallophone, String(u"metallophone") },
616 : { SoundId::Flexatone, String(u"flexatone") },
617 : { SoundId::MusicalSaw, String(u"musical_saw") },
618 : { SoundId::MusicalGlasses, String(u"musical_glasses") },
619 : { SoundId::KlaxonHorns, String(u"klaxon_horns") },
620 : { SoundId::Kalimba, String(u"kalimba") },
621 : { SoundId::Bongos, String(u"bongos") },
622 : { SoundId::Xiaogu, String(u"xiaogu") },
623 : { SoundId::Bangu, String(u"bangu") },
624 : { SoundId::Dagu, String(u"dagu") },
625 : { SoundId::Daluo, String(u"daluo") },
626 : { SoundId::Xiaoluo, String(u"xiaoluo") },
627 : { SoundId::Ban, String(u"ban") },
628 : { SoundId::Dabo, String(u"dabo") },
629 : { SoundId::Naobo, String(u"naobo") },
630 : { SoundId::Bangzi, String(u"bangzi") },
631 : { SoundId::Janggu, String(u"janggu") },
632 : { SoundId::Buk, String(u"buk") },
633 : { SoundId::SamulBuk, String(u"samul_buk") },
634 : { SoundId::SamulJanggu, String(u"samul_janggu") },
635 : { SoundId::SanjoJanggu, String(u"sanjo_janggu") },
636 : { SoundId::SoriBuk, String(u"sori_buk") },
637 : { SoundId::Sogo, String(u"sogo") },
638 : { SoundId::Kkwaenggwari, String(u"kkwaenggwari") },
639 : { SoundId::Jing, String(u"jing") },
640 : { SoundId::TomToms, String(u"tom_toms") },
641 : { SoundId::KoTsuzumi, String(u"ko_tsuzumi") },
642 : { SoundId::OTsuzumi, String(u"o_tsuzumi") },
643 : { SoundId::Kakko, String(u"kakko") },
644 : { SoundId::ShimeDaiko, String(u"shime_daiko") },
645 : { SoundId::MiyaDaiko, String(u"miya_daiko") },
646 : { SoundId::TsuriDaiko, String(u"tsuri_daiko") },
647 : { SoundId::OkedoDaiko, String(u"okedo_daiko") },
648 : { SoundId::Kane, String(u"kane") },
649 : { SoundId::Shoko, String(u"shoko") },
650 : { SoundId::Conga, String(u"conga") },
651 : { SoundId::Djembe, String(u"djembe") },
652 : { SoundId::Doumbek, String(u"doumbek") },
653 : { SoundId::Cajon, String(u"cajon") },
654 : { SoundId::Cuica, String(u"cuica") },
655 : { SoundId::Drumset, String(u"drumset") },
656 : { SoundId::Drum, String(u"drum") },
657 : { SoundId::Tablas, String(u"tablas") },
658 : { SoundId::Timbales, String(u"timbales") },
659 : { SoundId::Anvil, String(u"anvil") },
660 : { SoundId::BellTree, String(u"bell_tree") },
661 : { SoundId::Bell, String(u"bell") },
662 : { SoundId::Chain, String(u"chain") },
663 : { SoundId::Cymbal, String(u"cymbal") },
664 : { SoundId::HiHat, String(u"hi_hat") },
665 : { SoundId::Pipe, String(u"pipe") },
666 : { SoundId::MarkTree, String(u"mark_tree") },
667 : { SoundId::Castanet, String(u"castanet") },
668 : { SoundId::TamTam, String(u"tam_tam") },
669 : { SoundId::Thundersheet, String(u"thunder_sheet") },
670 : { SoundId::Triangle, String(u"triangle") },
671 : { SoundId::Claves, String(u"claves") },
672 : { SoundId::Guiro, String(u"guiro") },
673 : { SoundId::Block, String(u"block") },
674 : { SoundId::Cabasa, String(u"cabasa") },
675 : { SoundId::Maraca, String(u"maraca") },
676 : { SoundId::Quijada, String(u"quijada") },
677 : { SoundId::Ratchet, String(u"ratchet") },
678 : { SoundId::Shaker, String(u"shaker") },
679 : { SoundId::Shekere, String(u"shekere") },
680 : { SoundId::Stones, String(u"stones") },
681 : { SoundId::Tambourine, String(u"tambourine") },
682 : { SoundId::Tubo, String(u"tubo") },
683 : { SoundId::Vibraslap, String(u"vibraslap") },
684 : { SoundId::Whip, String(u"whip") },
685 : { SoundId::Cannon, String(u"cannon") },
686 : { SoundId::BirdCall, String(u"bird_call") },
687 : { SoundId::Snap, String(u"snap") },
688 : { SoundId::Clap, String(u"clap") },
689 : { SoundId::Slap, String(u"slap") },
690 : { SoundId::Stamp, String(u"stamp") },
691 : { SoundId::Choir, String(u"choir") },
692 : { SoundId::Kazoo, String(u"kazoo") },
693 : { SoundId::Taiko, String(u"taiko") },
694 : { SoundId::Metronome, String(u"metronome") },
695 : { SoundId::Last, String(u"last") }
696 : };
697 :
698 861 : inline const String& soundIdToString(const SoundId id)
699 : {
700 861 : auto search = ID_STRINGS.find(id);
701 861 : if (search == ID_STRINGS.cend()) {
702 0 : return ID_STRINGS.at(SoundId::Unknown);
703 : }
704 :
705 861 : return search->second;
706 : }
707 :
708 30 : inline SoundId soundIdFromString(const String& str)
709 : {
710 30 : if (str.empty()) {
711 0 : return SoundId::Undefined;
712 : }
713 :
714 30 : auto search = std::find_if(ID_STRINGS.cbegin(),
715 : ID_STRINGS.cend(),
716 4311 : [str](const auto& pair) { return pair.second == str; });
717 :
718 30 : if (search == ID_STRINGS.cend()) {
719 0 : return SoundId::Unknown;
720 : }
721 :
722 30 : return search->first;
723 : }
724 :
725 : inline const std::unordered_map<SoundCategory, String> CATEGORY_STRINGS
726 : {
727 : { SoundCategory::Keyboards, String(u"keyboards") },
728 : { SoundCategory::Strings, String(u"strings") },
729 : { SoundCategory::Winds, String(u"winds") },
730 : { SoundCategory::Percussions, String(u"percussions") },
731 : { SoundCategory::Voices, String(u"voices") },
732 : { SoundCategory::Last, String(u"last") }
733 : };
734 :
735 184 : inline const String& soundCategoryToString(const SoundCategory category)
736 : {
737 184 : auto search = CATEGORY_STRINGS.find(category);
738 184 : if (search == CATEGORY_STRINGS.cend()) {
739 31 : static const String UNDEFINED_SUBCATEGORY_STR(u"undefined");
740 0 : return UNDEFINED_SUBCATEGORY_STR;
741 : }
742 :
743 184 : return search->second;
744 : }
745 :
746 0 : inline SoundCategory soundCategoryFromString(const String& str)
747 : {
748 0 : auto search = std::find_if(CATEGORY_STRINGS.cbegin(),
749 : CATEGORY_STRINGS.cend(),
750 0 : [str](const auto& pair) { return pair.second == str; });
751 :
752 0 : if (search == CATEGORY_STRINGS.cend()) {
753 0 : return SoundCategory::Undefined;
754 : }
755 :
756 0 : return search->first;
757 : }
758 :
759 : inline const std::unordered_map<SoundSubCategory, String> SUBCATEGORY_STRINGS
760 : {
761 : { SoundSubCategory::Undefined, String(u"undefined") },
762 : { SoundSubCategory::Unknown, String(u"unknown") },
763 : { SoundSubCategory::English, String(u"english") },
764 : { SoundSubCategory::Armenian, String(u"armenian") },
765 : { SoundSubCategory::Alpine, String(u"alpine") },
766 : { SoundSubCategory::Australian, String(u"australian") },
767 : { SoundSubCategory::Irish, String(u"irish") },
768 : { SoundSubCategory::French, String(u"french") },
769 : { SoundSubCategory::Chinese, String(u"chinese") },
770 : { SoundSubCategory::Vienna, String(u"vienna") },
771 : { SoundSubCategory::Greek, String(u"greek") },
772 : { SoundSubCategory::Japanese, String(u"japanese") },
773 : { SoundSubCategory::Korean, String(u"korean") },
774 : { SoundSubCategory::Tibetan, String(u"tibetan") },
775 : { SoundSubCategory::African, String(u"african") },
776 : { SoundSubCategory::Indian, String(u"indian") },
777 : { SoundSubCategory::Spanish, String(u"spanish") },
778 : { SoundSubCategory::Castilian, String(u"castilian") },
779 : { SoundSubCategory::Swedish, String(u"swedish") },
780 : { SoundSubCategory::Hungarian, String(u"hungarian") },
781 : { SoundSubCategory::Romanian, String(u"romanian") },
782 : { SoundSubCategory::CentralEuropean, String(u"central_european") },
783 :
784 : { SoundSubCategory::Baroque, String(u"baroque") },
785 : { SoundSubCategory::Classical, String(u"classical") },
786 : { SoundSubCategory::Modern, String(u"modern") },
787 : { SoundSubCategory::Orchestral, String(u"orchestral") },
788 :
789 : { SoundSubCategory::Hammond, String(u"hammond") },
790 : { SoundSubCategory::Wagner, String(u"wagner") },
791 : { SoundSubCategory::Orff, String(u"orff") },
792 : { SoundSubCategory::Huang, String(u"huang") },
793 : { SoundSubCategory::Hohner, String(u"hohner") },
794 :
795 : { SoundSubCategory::Percussive, String(u"percussive") },
796 : { SoundSubCategory::Piped, String(u"piped") },
797 : { SoundSubCategory::Rotary, String(u"rotary") },
798 : { SoundSubCategory::Reed, String(u"reed") },
799 : { SoundSubCategory::Foot, String(u"foot") },
800 : { SoundSubCategory::Hand, String(u"hand") },
801 : { SoundSubCategory::Finger, String(u"finger") },
802 : { SoundSubCategory::Boy, String(u"boy") },
803 : { SoundSubCategory::Girl, String(u"girl") },
804 : { SoundSubCategory::Male, String(u"male") },
805 : { SoundSubCategory::Female, String(u"female") },
806 : { SoundSubCategory::Pad, String(u"pad") },
807 : { SoundSubCategory::Plucked, String(u"plucked") },
808 :
809 : { SoundSubCategory::FourPiece, String(u"4_piece") },
810 : { SoundSubCategory::FivePiece, String(u"5_piece") },
811 :
812 : { SoundSubCategory::Temple, String(u"temple") },
813 : { SoundSubCategory::Military, String(u"military") },
814 : { SoundSubCategory::Ride, String(u"ride") },
815 : { SoundSubCategory::Sleigh, String(u"sleigh") },
816 : { SoundSubCategory::Cow, String(u"cow") },
817 : { SoundSubCategory::Agogo, String(u"agogo") },
818 : { SoundSubCategory::Marching, String(u"marching") },
819 : { SoundSubCategory::Show_Style, String(u"show_style") },
820 : { SoundSubCategory::Opera, String(u"opera") },
821 : { SoundSubCategory::China, String(u"china") },
822 :
823 : { SoundSubCategory::Splash, String(u"splash") },
824 : { SoundSubCategory::Crash, String(u"crash") },
825 : { SoundSubCategory::Plate, String(u"plate") },
826 : { SoundSubCategory::Bowl, String(u"bowl") },
827 : { SoundSubCategory::Frame, String(u"frame") },
828 : { SoundSubCategory::Slit, String(u"slit") },
829 : { SoundSubCategory::Log, String(u"log") },
830 : { SoundSubCategory::Ocean, String(u"ocean") },
831 : { SoundSubCategory::Field, String(u"field") },
832 : { SoundSubCategory::Snare, String(u"snare") },
833 : { SoundSubCategory::Brake, String(u"brake") },
834 : { SoundSubCategory::Slide, String(u"slide") },
835 : { SoundSubCategory::Pocket, String(u"pocket") },
836 : { SoundSubCategory::Garklein, String(u"garklein") },
837 : { SoundSubCategory::Toy, String(u"toy") },
838 : { SoundSubCategory::String, String(u"string") },
839 : { SoundSubCategory::TwelveString, String(u"twelve_string") },
840 :
841 : { SoundSubCategory::Grand, String(u"grand") },
842 : { SoundSubCategory::HonkyTonk, String(u"honky_tonk") },
843 : { SoundSubCategory::Upright, String(u"upright") },
844 : { SoundSubCategory::Prima, String(u"prima") },
845 : { SoundSubCategory::Secunda, String(u"secunda") },
846 :
847 : { SoundSubCategory::Electric, String(u"electric") },
848 : { SoundSubCategory::Electronic, String(u"electronic") },
849 : { SoundSubCategory::Acoustic, String(u"acoustic") },
850 : { SoundSubCategory::Fretless, String(u"fretless") },
851 : { SoundSubCategory::Pedal, String(u"pedal") },
852 : { SoundSubCategory::Steel, String(u"steel") },
853 : { SoundSubCategory::Metal, String(u"metal") },
854 : { SoundSubCategory::Iron, String(u"iron") },
855 : { SoundSubCategory::Brass, String(u"brass") },
856 : { SoundSubCategory::Tin, String(u"tin") },
857 : { SoundSubCategory::Nylon, String(u"nylon") },
858 : { SoundSubCategory::Wooden, String(u"wooden") },
859 : { SoundSubCategory::Sandpaper, String(u"sandpaper") },
860 : { SoundSubCategory::Glass, String(u"glass") },
861 : { SoundSubCategory::Shell, String(u"shell") },
862 : { SoundSubCategory::Wind, String(u"wind") },
863 : { SoundSubCategory::Soft, String(u"soft") },
864 :
865 : { SoundSubCategory::Treble, String(u"treble") },
866 : { SoundSubCategory::Diatonic, String(u"diatonic") },
867 : { SoundSubCategory::Chromatic, String(u"chromatic") },
868 : { SoundSubCategory::Octave, String(u"octave") },
869 :
870 : { SoundSubCategory::Piccolo, String(u"piccolo") },
871 : { SoundSubCategory::Alto, String(u"alto") },
872 : { SoundSubCategory::Tenor, String(u"tenor") },
873 : { SoundSubCategory::Baritone, String(u"baritone") },
874 : { SoundSubCategory::Soprano, String(u"soprano") },
875 : { SoundSubCategory::Mezzo_Soprano, String(u"mezzo_soprano") },
876 : { SoundSubCategory::Sopranino, String(u"sopranino") },
877 : { SoundSubCategory::Sopranissimo, String(u"sopranissimo") },
878 : { SoundSubCategory::Counter_Tenor, String(u"counter_tenor") },
879 : { SoundSubCategory::Contra, String(u"contra") },
880 : { SoundSubCategory::Contra_Alto, String(u"contra_alto") },
881 : { SoundSubCategory::Sub_Contra_Alto, String(u"sub_contra_alto") },
882 : { SoundSubCategory::Contra_Bass, String(u"contra_bass") },
883 : { SoundSubCategory::Sub_Contra_Bass, String(u"sub_contra_bass") },
884 : { SoundSubCategory::Double_Contra_Bass, String(u"double_contra_bass") },
885 : { SoundSubCategory::Bass, String(u"bass") },
886 : { SoundSubCategory::Bowed, String(u"bowed") },
887 : { SoundSubCategory::Great_Bass, String(u"great_bass") },
888 : { SoundSubCategory::Hyper_Bass, String(u"hyper_bass") },
889 : { SoundSubCategory::Melody, String(u"melody") },
890 :
891 : { SoundSubCategory::FX_Goblins, String(u"fx_goblins") },
892 : { SoundSubCategory::FX_Atmosphere, String(u"fx_atmosphere") },
893 : { SoundSubCategory::FX_Brightness, String(u"fx_brightness") },
894 : { SoundSubCategory::FX_Crystal, String(u"fx_crystal") },
895 : { SoundSubCategory::FX_Echoes, String(u"fx_echoes") },
896 : { SoundSubCategory::FX_Rain, String(u"fx_rain") },
897 : { SoundSubCategory::FX_SciFi, String(u"fx_scifi") },
898 : { SoundSubCategory::FX_SoundTrack, String(u"fx_soundtrack") },
899 :
900 : { SoundSubCategory::Sweep, String(u"sweep") },
901 : { SoundSubCategory::Warm, String(u"warm") },
902 : { SoundSubCategory::NewAge, String(u"new_age") },
903 : { SoundSubCategory::Polysynth, String(u"polysynth") },
904 : { SoundSubCategory::Halo, String(u"halo") },
905 : { SoundSubCategory::Metallic, String(u"metallic") },
906 : { SoundSubCategory::Choir, String(u"choir") },
907 :
908 : { SoundSubCategory::Sine_Wave, String(u"sine_wave") },
909 : { SoundSubCategory::Square_Wave, String(u"square_wave") },
910 : { SoundSubCategory::Sawtooth_Wave, String(u"sawtooth_wave") },
911 :
912 : { SoundSubCategory::Primary, String(u"primary") },
913 : { SoundSubCategory::Secondary, String(u"secondary") },
914 : { SoundSubCategory::Section, String(u"section") },
915 :
916 : { SoundSubCategory::In_C, String(u"in_c") },
917 : { SoundSubCategory::In_D, String(u"in_d") },
918 : { SoundSubCategory::In_D_flat, String(u"in_d_flat") },
919 : { SoundSubCategory::In_E, String(u"in_e") },
920 : { SoundSubCategory::In_E_flat, String(u"in_e_flat") },
921 : { SoundSubCategory::In_F, String(u"in_f") },
922 : { SoundSubCategory::In_G, String(u"in_g") },
923 : { SoundSubCategory::In_G_flat, String(u"in_g_flat") },
924 : { SoundSubCategory::In_A, String(u"in_a") },
925 : { SoundSubCategory::In_A_flat, String(u"in_a_flat") },
926 : { SoundSubCategory::In_B, String(u"in_b") },
927 : { SoundSubCategory::In_B_flat, String(u"in_b_flat") },
928 :
929 : { SoundSubCategory::Last, String(u"last") }
930 : };
931 :
932 : using SoundSubCategories = std::set<SoundSubCategory>;
933 :
934 946 : inline const String& soundSubCategoryToString(const SoundSubCategory& subCategory)
935 : {
936 946 : auto search = SUBCATEGORY_STRINGS.find(subCategory);
937 946 : if (search == SUBCATEGORY_STRINGS.cend()) {
938 0 : return SUBCATEGORY_STRINGS.at(SoundSubCategory::Unknown);
939 : }
940 :
941 946 : return search->second;
942 : }
943 :
944 16 : inline SoundSubCategory soundSubCategoryFromString(const String& str)
945 : {
946 16 : if (str.empty()) {
947 0 : return SoundSubCategory::Undefined;
948 : }
949 :
950 16 : auto search = std::find_if(SUBCATEGORY_STRINGS.cbegin(),
951 : SUBCATEGORY_STRINGS.cend(),
952 1344 : [str](const auto& pair) { return pair.second == str; });
953 :
954 16 : if (search == SUBCATEGORY_STRINGS.cend()) {
955 0 : return SoundSubCategory::Unknown;
956 : }
957 :
958 16 : return search->first;
959 : }
960 : }
961 :
962 : #endif // MUSE_MPE_SOUNDID_H
|