ENG_INDEX = {'C': 0, 'C#': 1, 'Db': 1, 'D': 2, 'D#': 3, 'Eb': 3, 'E': 4, 'Fb': 4, 'F': 5, 'E#': 5, 'F#': 6, 'Gb': 6, 'G': 7, 'G#': 8, 'Ab': 8, 'A': 9, 'A#': 10, 'Bb': 10, 'B': 11, 'Cb': 11, 'B#': 0} LAT_INDEX = {'Do': 0, 'Do#': 1, 'Reb': 1, 'Re': 2, 'Re#': 3, 'Mib': 3, 'Mi': 4, 'Fab': 4, 'Fa': 5, 'Mi#': 5, 'Fa#': 6, 'Solb': 6, 'Sol': 7, 'Sol#': 8, 'Lab': 8, 'La': 9, 'La#': 10, 'Sib': 10, 'Si': 11, 'Dob': 11, 'Si#': 0} CHORDS_LAT = ['Do', 'Do#', 'Re', 'Re#', 'Mi', 'Fa', 'Fa#', 'Sol', 'Sol#', 'La', 'Sib', 'Si'] CHORDS_ENG = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'Bb', 'B'] /** Changes all chords to a given semitone relative to the original */ function transpose(n) { transposeAdd(n - getTranspose()) } /** Transposes all chords by n steps */ function transposeAdd(n) { for (c of document.getElementsByClassName('c')) { chord = c.innerHTML if (LAT_INDEX[chord] == undefined) { throw Error("Unknown chord: " + chord) } i = LAT_INDEX[chord] j = (i + n + 12) % 12 c.innerHTML = CHORDS_LAT[j] } setTransposeSelector(getTranspose() + n) } function setTransposeSelector(n) { while (n > 6) { n -= 12 } while (n < -6) { n += 12 } document.getElementById("transposeSelect").value = n } function getTranspose() { return Number.parseInt(document.getElementById("transposeSelect").value) }