[fix] detect key signature correctly
need to look at cursor.keySignature to properly name the notes Also, fixed soprano recorder octaves
This commit is contained in:
@ -55,34 +55,34 @@ const woodwinds = [
|
|||||||
{
|
{
|
||||||
name: "Soprano Recorder",
|
name: "Soprano Recorder",
|
||||||
fingering: {
|
fingering: {
|
||||||
"C4": "11111111",
|
"C5": "11111111",
|
||||||
"C#4": "1111111|",
|
"C#5": "1111111|",
|
||||||
"D4": "11111110",
|
"D5": "11111110",
|
||||||
"D#4": "111111|o",
|
"D#5": "111111|o",
|
||||||
"E4": "111111oo",
|
"E5": "111111oo",
|
||||||
"F4": "11110011",
|
"F5": "11110011",
|
||||||
"F#4": "1111011o",
|
"F#5": "1111011o",
|
||||||
"G4": "111100oo",
|
"G5": "111100oo",
|
||||||
"G#4": "111011|o",
|
"G#5": "111011|o",
|
||||||
"A4": "111000oo",
|
"A5": "111000oo",
|
||||||
"A#4": "110110oo",
|
"A#5": "110110oo",
|
||||||
"B4": "110000oo",
|
"B5": "110000oo",
|
||||||
"C5": "101000oo",
|
"C6": "101000oo",
|
||||||
"C#5": "011000oo",
|
"C#6": "011000oo",
|
||||||
"D5": "001000oo",
|
"D6": "001000oo",
|
||||||
"D#5": "0011111o",
|
"D#6": "0011111o",
|
||||||
"E5": "-11111oo",
|
"E6": "-11111oo",
|
||||||
"F5": "-111101o",
|
"F6": "-111101o",
|
||||||
"F#5": "-11101oo",
|
"F#6": "-11101oo",
|
||||||
"G5": "-11100oo",
|
"G6": "-11100oo",
|
||||||
"G#5": "-11010oo",
|
"G#6": "-11010oo",
|
||||||
"A5": "-11000oo",
|
"A6": "-11000oo",
|
||||||
"A#5": "-110011|",
|
"A#6": "-110011|",
|
||||||
"B5": "-11011oo",
|
"B6": "-11011oo",
|
||||||
"C6": "-10011oo",
|
"C7": "-10011oo",
|
||||||
"C#6": "-1011011",
|
"C#7": "-1011011",
|
||||||
"D6": "-1011011",
|
"D7": "-1011011",
|
||||||
"D#6": "-011011o",
|
"D#7": "-011011o",
|
||||||
},
|
},
|
||||||
format:
|
format:
|
||||||
`$note
|
`$note
|
||||||
|
|||||||
@ -339,40 +339,82 @@ MuseScore {
|
|||||||
return String.fromCharCode(0x2080 + n)
|
return String.fromCharCode(0x2080 + n)
|
||||||
}
|
}
|
||||||
|
|
||||||
function noteToName(note) {
|
function noteToPitchName(accidental, pitchClass, defaultValue) {
|
||||||
var mapping = {
|
switch (accidental) {
|
||||||
[Accidental.FLAT]: {
|
case Accidental.FLAT:
|
||||||
1: "D♭",
|
case Accidental.NATURAL_FLAT:
|
||||||
3: "E♭",
|
switch (pitchClass) {
|
||||||
4: "F♭",
|
case 1: return "D♭"
|
||||||
6: "G♭",
|
case 3: return "E♭"
|
||||||
8: "A♭",
|
case 4: return "F♭"
|
||||||
10: "B♭",
|
case 6: return "G♭"
|
||||||
11: "C♭"
|
case 8: return "A♭"
|
||||||
},
|
case 10: return "B♭"
|
||||||
[Accidental.SHARP]: {
|
case 11: return "C♭"
|
||||||
0: "B♯",
|
default: return defaultValue
|
||||||
1: "C♯",
|
}
|
||||||
3: "D♯",
|
case Accidental.SHARP:
|
||||||
5: "E♯",
|
case Accidental.NATURAL_SHARP:
|
||||||
6: "F♯",
|
switch (pitchClass) {
|
||||||
8: "G♯",
|
case 0: return "B♯"
|
||||||
10: "A♯"
|
case 1: return "C♯"
|
||||||
},
|
case 3: return "D♯"
|
||||||
[Accidental.NONE]: {
|
case 5: return "E♯"
|
||||||
0: "C",
|
case 6: return "F♯"
|
||||||
2: "D",
|
case 8: return "G♯"
|
||||||
4: "E",
|
case 10: return "A♯"
|
||||||
5: "F",
|
default: return defaultValue
|
||||||
7: "G",
|
}
|
||||||
9: "A",
|
case Accidental.NONE:
|
||||||
11: "B"
|
case Accidental.NATURAL:
|
||||||
}
|
switch (pitchClass) {
|
||||||
|
case 0: return "C"
|
||||||
|
case 2: return "D"
|
||||||
|
case 4: return "E"
|
||||||
|
case 5: return "F"
|
||||||
|
case 7: return "G"
|
||||||
|
case 9: return "A"
|
||||||
|
case 11: return "B"
|
||||||
|
default: return defaultValue
|
||||||
|
}
|
||||||
|
default: return "!" + defaultValue
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function isSharp(pitch, keySig) {
|
||||||
|
var p = 6
|
||||||
|
for (var i = 0; i < keySig; ++i) {
|
||||||
|
if (pitch == p) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
p = (p + 7) % 12
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
function isFlat(pitch, keySig) {
|
||||||
|
var p = 10
|
||||||
|
for (var i = 0; i > keySig; --i) {
|
||||||
|
if (pitch == p) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
p = (p + 5) % 12
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
function noteToName(note, keySig, defaultValue) {
|
||||||
|
var accidental = note.accidentalType
|
||||||
var pitchClass = note.pitch % 12
|
var pitchClass = note.pitch % 12
|
||||||
|
if (accidental == Accidental.NONE && isSharp(pitchClass, keySig)) {
|
||||||
|
accidental = Accidental.SHARP
|
||||||
|
}
|
||||||
|
if (accidental == Accidental.NONE && isFlat(pitchClass, keySig)) {
|
||||||
|
accidental = Accidental.FLAT
|
||||||
|
}
|
||||||
var octave = Math.floor(note.pitch / 12) - 1
|
var octave = Math.floor(note.pitch / 12) - 1
|
||||||
var name = (mapping[note.accidentalType] || {}) [pitchClass] || "?"
|
var pitchName = noteToPitchName(accidental, pitchClass, defaultValue)
|
||||||
return name + subscriptDigit(octave)
|
return pitchName + subscriptDigit(octave)
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------
|
//---------------------------------------------------------
|
||||||
@ -609,12 +651,13 @@ MuseScore {
|
|||||||
while (cursor.segment) {
|
while (cursor.segment) {
|
||||||
if (cursor.element && cursor.element.type === Element.CHORD) {
|
if (cursor.element && cursor.element.type === Element.CHORD) {
|
||||||
var chord = cursor.element
|
var chord = cursor.element
|
||||||
|
var keySignature = cursor.keySignature
|
||||||
var midi = chord.notes[0].pitch
|
var midi = chord.notes[0].pitch
|
||||||
|
|
||||||
if (userTransposed) midi += 12
|
if (userTransposed) midi += 12
|
||||||
|
|
||||||
var noteId = pitchToName(midi)
|
var noteId = pitchToName(midi)
|
||||||
var noteName = noteToName(chord.notes[0])
|
var noteName = noteToName(chord.notes[0], keySignature, "?")
|
||||||
|
|
||||||
var text = newElement(Element.STAFF_TEXT)
|
var text = newElement(Element.STAFF_TEXT)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user