Initial commit: KeySelector implementation

This commit is contained in:
Jannik committed 2026-08-26 00:32:17 +02:00
commit 48cdda01ca
30 files changed
+2272

No files matched your search

+20
View File
@@ -0,0 +1,20 @@
const codeToAngle = {
'12B': 0, '12A': 0,
'1B': 15, '1A': 15,
'2B': 30, '2A': 30,
'3B': 45, '3A': 45,
'4B': 60, '4A': 60,
'5B': 75, '5A': 75,
'6B': 90, '6A': 90,
'7B': 105, '7A': 105,
'8B': 120, '8A': 120,
'9B': 135, '9A': 135,
'10B': 150, '10A': 150,
'11B': 165, '11A': 165,
};
if (typeof module !== 'undefined' && module.exports) {
module.exports = codeToAngle;
} else {
window.codeToAngle = codeToAngle;
}
+20
View File
@@ -0,0 +1,20 @@
const camelotToMusicKey = {
'1B': 'C', '1A': 'Am',
'2B': 'G', '2A': 'Em',
'3B': 'D', '3A': 'Bm',
'4B': 'A', '4A': 'F#m',
'5B': 'E', '5A': 'C#m',
'6B': 'B', '6A': 'G#m',
'7B': 'F#', '7A': 'D#m',
'8B': 'Db', '8A': 'Bbm',
'9B': 'Ab', '9A': 'Fm',
'10B': 'Eb', '10A': 'Cm',
'11B': 'Bb', '11A': 'Gm',
'12B': 'F', '12A': 'Dm',
};
if (typeof module !== 'undefined' && module.exports) {
module.exports = camelotToMusicKey;
} else {
window.camelotToMusicKey = camelotToMusicKey;
}
+20
View File
@@ -0,0 +1,20 @@
const colorMatrix = {
'12B': '#2EC4B6', '12A': '#2EC4B6',
'1B': '#D62828', '1A': '#D62828',
'2B': '#E77D11', '2A': '#E77D11',
'3B': '#E0B423', '3A': '#E0B423',
'4B': '#4F9D69', '4A': '#4F9D69',
'5B': '#1B998B', '5A': '#1B998B',
'6B': '#6B4E9C', '6A': '#6B4E9C',
'7B': '#3B7DD8', '7A': '#3B7DD8',
'8B': '#3461A8', '8A': '#3461A8',
'9B': '#5B3A8C', '9A': '#5B3A8C',
'10B': '#B07ECC', '10A': '#B07ECC',
'11B': '#D64966', '11A': '#D64966',
};
if (typeof module !== 'undefined' && module.exports) {
module.exports = colorMatrix;
} else {
window.colorMatrix = colorMatrix;
}
+35
View File
@@ -0,0 +1,35 @@
const mixingRules = {
'1A': ['1A', '12A', '2A', '3A', '1B', '12B', '8A', '4B' ],
'2A': ['2A', '1A', '3A', '4A', '2B', '1B', '9A', '5B' ],
'3A': ['3A', '2A', '4A', '5A', '3B', '2B', '10A', '6B' ],
'4A': ['4A', '3A', '5A', '6A', '4B', '3B', '11A', '7B' ],
'5A': ['5A', '4A', '6A', '7A', '5B', '4B', '12A', '8B' ],
'6A': ['6A', '5A', '7A', '8A', '6B', '5B', '1A', '9B' ],
'7A': ['7A', '6A', '8A', '9A', '7B', '6B', '2A', '10B'],
'8A': ['8A', '7A', '9A', '10A', '8B', '7B', '3A', '11B'],
'9A': ['9A', '8A', '10A', '11A', '9B', '8B', '4A', '12B'],
'10A': ['10A', '9A', '11A', '12A', '10B', '9B', '5A', '1B' ],
'11A': ['11A', '10A', '12A', '1A', '11B', '10B', '6A', '2B' ],
'12A': ['12A', '11A', '1A', '2A', '12B', '11B', '7A', '3B' ],
'1B': ['1B', '12B', '2B', '3B', '1A', '2A', '8B', '10A'],
'2B': ['2B', '1B', '3B', '4B', '2A', '3A', '9B', '11A'],
'3B': ['3B', '2B', '4B', '5B', '3A', '4A', '10B', '12A'],
'4B': ['4B', '3B', '5B', '6B', '4A', '5A', '11B', '1A' ],
'5B': ['5B', '4B', '6B', '7B', '5A', '6A', '12B', '2A' ],
'6B': ['6B', '5B', '7B', '8B', '6A', '7A', '1B', '3A' ],
'7B': ['7B', '6B', '8B', '9B', '7A', '8A', '2B', '4A' ],
'8B': ['8B', '7B', '9B', '10B', '8A', '9A', '3B', '5A' ],
'9B': ['9B', '8B', '10B', '11B', '9A', '10A', '4B', '6A' ],
'10B': ['10B', '9B', '11B', '12B', '10A', '11A', '5B', '7A' ],
'11B': ['11B', '10B', '12B', '1B', '11A', '12A', '6B', '8A' ],
'12B': ['12B', '11B', '1B', '2B', '12A', '1A', '7B', '9A' ],
};
const compatLabels = ['Perfect', 'Quinte -1', 'Quinte +1', 'Energy', 'Scale', 'Diagonal', "Jaw's", 'Mood'];
if (typeof module !== 'undefined' && module.exports) {
module.exports = { mixingRules, compatLabels };
} else {
window.mixingRules = mixingRules;
window.compatLabels = compatLabels;
}