aboutsummaryrefslogtreecommitdiff
path: root/src/utils.js
blob: 4dc3458eb7f4a743a4853b4368cff8b4c235da35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
module.exports = {
  // Take some solfege input and normalize it
  normalize: function(str) {
    var tokens = str.toLowerCase().split(/\s+/);
    var normalized = '';
    var table = {
      'do': 'a',
      'do+': 'b',
      'do#': 'b',
      'doh': 'a',
      'doh+': 'b',
      'doh#': 'b',
      're-': 'b',
      'reb': 'b',
      're': 'c',
      're+': 'd',
      're#': 'd',
      'mi-': 'd',
      'mib': 'd',
      'mi': 'e',
      'fa': 'f',
      'fa+': 'g',
      'fa#': 'g',
      'so-': 'g',
      'sob': 'g',
      'so': 'h',
      'so+': 'i',
      'so#': 'i',
      'sol-': 'g',
      'solb': 'g',
      'sol': 'h',
      'sol+': 'i',
      'sol#': 'i',
      'la-': 'i',
      'lab': 'i',
      'la': 'j',
      'la+': 'k',
      'la#': 'k',
      'ti-': 'k',
      'tib': 'k',
      'ti': 'l',
      'si-': 'k',
      'sib': 'k',
      'si': 'l'
    };

    for (var i = 0; i < tokens.length; i++) {
      if (table[tokens[i]]) {
        normalized += table[tokens[i]];
      }
    }

    return normalized;
  },

  // Take some solfege from the DB and translate it back
  // to something readable
  denormalize: function(str) {
    var table = {
      'a': 'do',
      'b': 'do+',
      'c': 're',
      'd': 're+',
      'e': 'mi',
      'f': 'fa',
      'g': 'fa+',
      'h': 'so',
      'i': 'so+',
      'j': 'la',
      'k': 'la+',
      'l': 'ti'
    };
    var ret = '';

    for (var i = 0; i < str.length; i++) {
      ret += table[str.charAt(i)] + ' ';
    }

    return ret.trim();
  }
};