diff --git a/Resources/Templates/default.lyt b/Resources/Templates/default.lyt index b645f7c..f8b90e5 100644 --- a/Resources/Templates/default.lyt +++ b/Resources/Templates/default.lyt @@ -17,10 +17,67 @@ } #(set-global-staff-size <{STAFFSIZE}>) +% +% Rather than write a principled formatting procedure, we just define special cases for +% all the chords we're interested in. +% +vlMaj = \markup {\smaller \whiteTriangleMarkup} +vlSus = \markup {\fontsize #-4.0 "sus"} +vlSusKern = \markup {\hspace #-1.0 \vlSus} +vlSharp = #(alteration->text-accidental-markup SHARP) +vlFlat = #(markup #:hspace 0.2 (alteration->text-accidental-markup FLAT)) + +#(define-markup-command (vlStack layout props top bottom) (markup? markup?) + "Stack two accidentals" + (interpret-markup layout props + (markup #:raise 3.0 #:fontsize -5.0 #:column (#:with-dimensions '(0 . 3) '(0 . 5) top bottom)))) +#(define-public (vlBassNamer pitch) + "Return pitch markup for PITCH." + (markup #:sub #:line (#:raise 1.0 "/" (note-name->markup pitch)))) + +vlExceptionMusic = { + 1-\markup { \super "13" } + 1-\markup { \super "6/9" } + 1-\markup { "m" \super "6/9" } + 1-\markup { \super {\vlMaj "13"} } + 1-\markup { "m" \super { "9" \vlFlat "5" } } + 1-\markup { "m" \super { "11" \vlFlat "5" } } + 1-\markup { \vlSus} + 1-\markup { \super "7" \vlSusKern } + 1-\markup { \super "9" \vlSusKern } + 1-\markup { \super "13" \vlSusKern } + 1-\markup { \super "7" \vlSusKern \super {\vlFlat "9"}} + 1-\markup { \super "13" \vlSusKern \super {\vlFlat "9"}} + -\markup { \super {\vlMaj \vlSharp "11" } } + -\markup { \super {\vlMaj "9" \vlSharp "11" } } + -\markup { \super {\vlMaj "13" \vlSharp "11" } } + 1-\markup { \super { "9" \vlFlat "5" } } + 1-\markup { \super { "13" \vlFlat "5" } } + 1-\markup { \super { "13" \vlFlat "9" } } + 1-\markup { \super { "13" \vlSharp "11" } } + 1-\markup { \super { "9" \vlSharp "5" } } + 1-\markup { \super "7" \vlStack \line {\vlFlat "9"} \line {\vlFlat "5"}} + 1-\markup { \super "7" \vlStack \line {\vlFlat "9"} \line {\vlSharp "5"}} + 1-\markup { \super "7" \vlStack \line {\vlSharp "9"} \line {\vlFlat "5"}} + 1-\markup { \super "7" \vlStack \line {\vlSharp "9"} \line {\vlSharp "5"}} + 1-\markup { \super { "7" \vlSharp "11" } } + 1-\markup { \super { "9" \vlSharp "11" } } + 1-\markup { \super "7" \vlStack \line {\vlSharp "11"} \line {\vlFlat "9"}} + 1-\markup { \super "7" \vlStack \line {\vlSharp "11"} \line {\vlSharp "9"}} +} + +vlExceptions = #(append + (sequential-music-to-chord-exceptions vlExceptionMusic #t) + ignatzekExceptions) \score { << \context ChordNames \chords { \override ChordName #'font-size = #6 + \set chordNameExceptions = #vlExceptions + \set chordNameSeparator = "" + \set chordRootNamer = #note-name->markup + \set chordNoteNamer = #vlBassNamer + \set majorSevenSymbol = \vlMaj <{CHORDS}> } \context Voice = "mel" { diff --git a/Sources/VLLilypondWriter.cpp b/Sources/VLLilypondWriter.cpp index 4f58d7e..cbb816f 100644 --- a/Sources/VLLilypondWriter.cpp +++ b/Sources/VLLilypondWriter.cpp @@ -263,14 +263,13 @@ void VLLilypondWriter::VisitChord(VLChord & c) // Maj // if (steps & VLChord::kmMaj7th) { - if (ext.size()) - ext += '.'; - ext += "maj"; + bool hasMinor = ext.size(); + ext += hasMinor ? "7+" : "maj"; if (steps & VLChord::kmMaj9th) { - ext += "9"; + ext += hasMinor ? ".9" : "9"; steps &= ~VLChord::kmMaj9th; } else - ext += "7"; + ext += hasMinor ? "" : "7"; steps&= ~VLChord::kmMaj7th; } // diff --git a/TestData/Chords.vlsong/Properties b/TestData/Chords.vlsong/Properties new file mode 100644 index 0000000..b96606d --- /dev/null +++ b/TestData/Chords.vlsong/Properties @@ -0,0 +1,10 @@ + + + + + songGroove + Swing + songTempo + 120 + + diff --git a/TestData/Chords.vlsong/Song b/TestData/Chords.vlsong/Song new file mode 100644 index 0000000..0615fde --- /dev/null +++ b/TestData/Chords.vlsong/Song @@ -0,0 +1,2723 @@ + + + + + + + + + + + + 2007-06-03 + VocalEasel 1.0a4 + + + + + Chords + + + Melody + + + + + + 3 + + 0 + major + + + + G + 2 + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + A + 4 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + A + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + + A + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + + A + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + A + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + A + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + + A + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + A + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + -1 + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + A + -1 + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + F + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + F + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + F + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + F + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + + A + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + A + -1 + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + + G + -1 + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + G + -1 + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + + G + -1 + 5 + + 6 + 1 + + + + + A + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + A + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + A + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + -1 + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + E + -1 + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + -1 + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + A + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + E + -1 + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + A + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + -1 + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + G + -1 + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + G + -1 + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + -1 + 5 + + 6 + 1 + + + + + G + -1 + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + E + -1 + 5 + + 6 + 1 + + + + + G + -1 + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + -1 + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + + A + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + -1 + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + + A + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + E + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + + G + -1 + 5 + + 6 + 1 + + + + + A + 5 + + 6 + 1 + + + + + + C + 4 + + 6 + 1 + + + + + F + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + -1 + 5 + + 6 + 1 + + + + C + 4 + + 6 + 1 + + + + + F + 4 + + 6 + 1 + + + + + G + 4 + + 6 + 1 + + + + + B + -1 + 4 + + 6 + 1 + + + + + D + -1 + 5 + + 6 + 1 + + + + + F + 5 + + 6 + 1 + + + + + A + 5 + + 6 + 1 + + + + + + E + 3 + + 12 + 1 + + + + + C + 4 + + 12 + 1 + + + + + E + 4 + + 12 + 1 + + + + + G + 4 + + 12 + 1 + + + + + + + 3 + + 0 + major + + + + G + 2 + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + + + 12 + 1 + + + + \ No newline at end of file diff --git a/VocalEasel.xcodeproj/project.pbxproj b/VocalEasel.xcodeproj/project.pbxproj index 4c98457..6bd34e1 100644 --- a/VocalEasel.xcodeproj/project.pbxproj +++ b/VocalEasel.xcodeproj/project.pbxproj @@ -598,7 +598,6 @@ mainGroup = 2A37F4AAFDCFA73011CA2CEA /* Vocalese */; projectDirPath = ""; projectRoot = ""; - shouldCheckCompatibility = 1; targets = ( 8D15AC270486D014006FF6A4 /* VocalEasel */, 955E595B0957C0FC0045FDA5 /* TVLChord */,