lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to put chords on a score automatically


From: Rick Hansen (aka RickH)
Subject: Re: How to put chords on a score automatically
Date: Mon, 12 Nov 2007 12:18:05 -0800 (PST)



Father Gordon Gilbert wrote:
> 
> Rune -
> 
> Your example works on its own, and is roughly what I'm looking for, but
> when
> I try to incorporate that syntax into my own (2.11.32) score, it doesn't
> work.  I'd like to see the chordnames at the top of the choirstaff so I
> can
> check my work.
> 
> My score is such that I can't really boil it down to a minimum example,
> but
> here is the whole thing so you can see what I'm doing.  (Keep in mind that
> it's not finished -- but it does compile at this stage.  And having used
> templates from previous works it's probably got a whole bunch of sloppy
> code.)
> 
> Thanks for any help you can give.
> 
> Fr. Gordon_
> 
> \header {
>     filename = "AmazingGrace-Sweet-Ads.ly"
>     enteredby = "Gordon Gilbert"
>     composer = "Traditional American Melody"
>     poet = "words: Rev'd John Newton, 1779"
>     arranger = "arr. Gordon Gilbert 2007"
>     date=""
>     title = "Amazing Grace"
>     subtitle = "Arr. for Barbershop Chorus"
>     metre = ""
>     meter = \metre
>     copyright = "Public Domain - Permission granted to perform this
> arrangement in a not-for-profit setting"
>     style = "Hymn"
> 
> }
> 
> \version "2.11.23"
> \paper{
>     #(set-paper-size "letter")
> }
> 
> global= {
>     \time 3/4
>     \key g \major
> 
> 
> 
> }
> 
> tenor = \context Voice = "tenor"  \relative c' {
>    \voiceOne
>        \override NoteHead #'color = #green
>     \override Stem #'color = #green
>     \override Beam #'color = #green {
>     \partial 4 r4
>     b'2 d8 b d2 dis4 e2 c4 b2
>     a4 b2 d4 e2 e4 fis2 e4 ^ "like" d4( ^ "me" c)
>     b4 b2 d4 d2 b4 c4.( e8 e c) b2
>     a4 b2 d4 d cis c b4( d) c4 ^ "I" b2 ^ "see"
>     r4
>     b4 c \times 2/3 {d8( c b)} d2 dis4 e( d) c4 b4 c
>     a4 b2 \times 2/3 {d8( c b)} e4( fis) g4 fis4( g) ( e4 d c)
>     b4 d2 \times 2/3 {d4 e8} f2 d4 c2 c4 b2
>     a4 b4 c d4 d( cis) c b2 c4 b2
>     r4
>     b2 ^ \markup \italic {"Bluesy"} d4 d2 d4 ees2 c4 b2
>     a4 b2 d4 ees2 ees4 f2 e4 d2
>     d4 b2 d4 d2 b4 c4.( ees8 ees c) b2
>     a4 b2 d4 d cis c b2.
>     e2. d e b2
>      \new Voice = tenorDivisi { \voiceOne
>          \transpose g b'
>          {
>         \override NoteHead #'color = #green
>         \override Stem #'color = #green
>         \override Beam #'color = #green {
>     r4 r b4 b r4 r d'4 d'4 dis' e'2. c'4 b2. r4
>     r d' e' e'4 fis'4 fis'4 fis' g' a' g' fis' e'
>     d'( e'4 f'2 ~ f'4) f'4 d'2. d'4 g'2. d'4 c'2. c'4 b a
>     b2. d'4 c'( d' e') g' g'2
>     a'2 gis'1
> 
>          }}
>    }}
>          }
> 
> 
> lead = \context Voice = "lead"  \relative c'  {
>     \voiceTwo
>     \override NoteHead #'color = #red
>     \override Stem #'color = #red
>     \override Beam #'color = #red {
>     \partial 4 d4
>     g2 b8( g) b2 a4 g2 e4 d2
>     d4 g2 b8( g) b2 a4 d2. ~ d2
>     b4 d4.^ "x"( b8) d( b) g2 d4 e4.( g8) g( e) d2
>     d4 g2 b8( g) b2 a4 g2 ( fis4 g2)
>     %verse 2
>     d4
>     g2 \times 2/3 {b8( a g)} b2 a4 g2 e4 d2
>     d4 g2 \times 2/3 {b8( a g)} b2 \times 2/3 {a4( b8)} d2. ~ d2
>     b4 d2 \times 2/3 {b8( a g)} b2 \times 2/3{b4( a8)} g2 \times 2/3 {e4(
> d8)} d2
>     \times 2/3 {d4( e8)} g2 \times 2/3 {b8( a g)} b2 a4 g2. ~ g2
>     %verse 3
>     d4
>     g2 b8( g) b2 a4 g2 e4 d2
>     d4 g2 b8( g) b2 a8( b) d2. ~ d2
>     b4 d4.^ "x"( b8) d( b) g2 d4 e4.( g8) g( e) d2
>     d4 g2 b8( g) b2 a4 g2.
>     %bridge
>     a ^ \markup \italic {"Bridge"} b g fis2
>     %verse 4
>     \key b \major
>         \transpose g b'
>     {
>     d4 \time 4/4
>     g2. b8( g) b2. a4 g2. e4 d2.
>     d4 g2. b8( g) b2. a8( b) d'1 ~ d'2.
>     b4 d'2 ~ d'8( b8) d'( b) g2. d4 e2 ~ e8 ( g8) g( e) d2.
>     d4 g2. b8( g) b2. a4 g2 g2
>     b1 ^ \markup \italic {"Tag"}
>     a4 ^ \fermata b ^ \fermata c' ^ \fermata
>     r8 ^ \fermata d'8 d'1  d' ^ \fermata
>     }
>     \bar "||"
>     }
> }
> 
> bari = \context Voice = "bari" \relative c''   {
>     \voiceOne
>     \override NoteHead #'color = #blue
>     \override Stem #'color = #blue
>     \override Beam #'color = #blue {
>     \partial 4 d,4
>     g2 g4 g2 fis4 g2 a4 g2
>     a4 b2 b4 cis2 a4 d2 a4 ^ "like" a2 ^ "me"
>     g4 g2 g4 d2 g4 c2 a4 g2
>     a4 b2 g4 fis4. g8 fis4 g4( b) a ^ "I" g2 ^ "see"
>     d4
>     g2 g4 d'2 b4 c2 a4 g2
>     a4 b2 b4 a2 a4 d2 a4 a2
>     g4 b2 b4 d2 b4 c2 a4 g2
>     a4 b2 g4 fis4. e8 fis4 g2. ~ g2
>     d4
>     f2 ^ \markup \italic {"Bluesy"} f4 c'2 b4 bes2 bes4 g2
>     a4 f'2 f4 g2 g4 d2 a'4 a2
>     g4 f2 f4 d2 b4 bes2 a4 g2
>     a4 d2 f,4 fis4. e8 fis4 g2.
>     cis2. g b dis2
>     \new Voice = bariDivisi { \voiceOne
>          \transpose g b'
>          {
>         \override NoteHead #'color = #blue
>         \override Stem #'color = #blue
>         \override Beam #'color = #blue {
>         r4 r f f r r b b
>         fis bes2. c'4 b?2.
>         r4 r d' d' e' fis'2. e'4 d'
> 
> 
>     }}}
> 
> }
> }
> 
> bass = \context Voice = "bass" \relative c'  {
>     \voiceTwo
>         \override NoteHead #'color = #magenta
>         \override Stem #'color = #magenta
>         \override Beam #'color = #magenta {
>     \partial 4 d4
>     d2 b4 d2 b4 c2 e4 g2
>     fis4 e2 e4 a2 cis,4 d2 e4 _ "like " fis( _ "me " e)
>     d b2 d4 g,2 d'4 c2 e4 g2
>     fis4 e2 e4 d e fis g2 d4 _ "I" g,2 _ "see"
>     d'4
>     g,4 b d4 g4 d4 b c4. d8 e fis g2
>     fis4 e2 e4 a,4 b c4 b2.( a2) d4
>     g2 g4 g2 b4 c2 a4 g4( g)
>     fis4 e2 e4 d e fis g2 d4 g2
>     d4
>     g,2 b4 f'2 f4 c2 e4 e2
>     fis4 g2 g4 a2 cis4 d2( e4 fis d) d
>     b2 d4 g,2 b,4 c2 e4 g2
>     f4 e2 e4 d e fis f2.
>     fis2. e cis b2
>     \key b \major
>     \new Voice = bassDivisi { \voiceTwo
>         \transpose g b
>     {
>         \override NoteHead #'color = #magenta
>         \override Stem #'color = #magenta
>         \override Beam #'color = #magenta {
>     r4 r
>     g4  g r r g4 g b4 c'2. e'4 f'2.
>     r4 r g'4 a' a'4 a2. cis'4 d' d' d' e'4 fis' e' d'4 r r d'
>     b' r r d'4 g' b4 c'2. e'4 g'2.
>     r4 r fis'4 e' r r e'4  e'4 fis' g'2 f'2 e'1
>     c'4 b a r8 g g1 ~ g
> 
>     }}}
> }}
> 
> %accomp=\chordmode \chords
> 
> 
> 
> 
> stanzaa = \lyricmode {
>     \set stanza = "1."
>     A -- ma -- zing Grace, how sweet the sound
>     That saved a wretch like me;__
>     I once was lost, but now am found,
>     Was blind but now I see.
> 
>     \set stanza = "2."
>     'Twas grace that taught my heart to fear,
>     And grace my fears re -- lieved;
>     How pre -- cious did that grace ap -- pear
>     The hour I first be -- lieved._
> 
>     \set stanza = "3."
>     Thro' ma -- ny dan -- gers, toils and snares
>     I have al -- rea -- dy come;
>     'Tis grace hath brought me safe thus far,
>     And grace will lead me home.
>     %bridge
>     Lead us home, Lord!
> 
>     \set stanza = "4."
>     When we've been there ten thou -- sand years
>     Bright shin -- ing as the sun,
>     We've no less days to sing God's praise
>     Than when we first be -- gun!
>     %tag
>     be -- gun! We've on -- ly just be -- gun!!
> }
> tenorwords = \lyricmode {
>     When we've been there ten thou -- sand years
>     Bright shi -- ning as the sun,
>     Bright shi -- ning as the sun,
>     We've no less days to sing God's praise
>     Than when we first be -- gun!
>     %tag
>     be -- gun
> }
> bariwords = \lyricmode {
>     When we've been there ten thou -- sand years
>     Bright shi -- ning as the sun,
>     We've no less days to sing God's praise
>     Than when we first be -- gun!
> }
> basswords = \lyricmode {
> 
>     When we've been there ten thou -- sand years
>     Bright shi -- ning as the sun,
>     Bright shi -- ning as the sun,
>     We've no less days to sing God's praise
>     Than when we first be -- gun!
>     %tag
>     be -- gun!
> }
> \score {
>     \transpose g ees
>  \context ChoirStaff <<
>          % \new ChordNames
>         %\unset ChoirStaff.melismaBusyProperties
>        \context Staff ="upper"  { \clef "G" <<
>            \global
>            \tenor
>            \lead
>        >>}
>         \new Lyrics \with{ alignAboveContext = "upper" } \lyricsto
> "tenorDivisi" \tenorwords
> 
>        \lyricsto "lead" \context Lyrics = "stanza-1" {
>            %\set stanza = "1."
>                \stanzaa }
> 
>        \context Staff = "lower"  { \clef "F^8"<<
>            \global
>            \bari
>            \bass
>        >>}
>        \new Lyrics \with { alignAboveContext = "lower" } \lyricsto
> "bariDivisi" \bariwords
>     \new Lyrics \with { alignBelowContext = "lower" } \lyricsto
> "bassDivisi" \basswords
>    >>
> 
> 
> 
> 
>     \layout{
>         indent = 0.0\pt
>         \context {
>             \ChordNames
>             \override ChordName  #'style = #'american
>             chordChanges = ##t
>             }
>     }
>     \midi {
>         \context {
>       \Score
>       tempoWholesPerMinute = #(ly:make-moment 60 2)
>       }
> }}
> 
> 
> On 10/11/2007, Rune Zedeler <address@hidden> wrote:
>>
>> Father Gordon Gilbert skrev:
>>
>>
>> > My question is this:  As I arrange this, I want to have the chords I am
>> > creating displayed
>>
>> I am not sure I understand.
>> Something like this?
>>
>> %%% BEGIN %%%
>> \version "2.10.0"
>>
>> sop = { g' a' }
>> alt = { e' f' }
>> bas = { c' d' }
>>
>> {
>>    <<
>>      \new ChordNames << \sop \alt \bas >>
>>      \new ChoirStaff <<
>>        \new Staff \sop
>>        \new Staff \alt
>>        \new Staff \bas
>>      >>
>>    >>
>> }
>> %%% END %%%
>>
>> -Rune
>>
> 
> 
> 
> -- 
> Fr. Gordon Gilbert
> Penetanguishene, ON
> 
> _______________________________________________
> lilypond-user mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/lilypond-user
> 
> 


Such a program could not make the assumption that the root of the chord is
always being sung by the bass or any other voice, or being sung at all.  But
if the lp syntax allowed "marking" what note is the current chord root at
any point in time, then it could generate possible names for the harmony at
that point in time.  Otherwise I could see a lot of wrong and weird chord
names being generated by an algorithm that is not being told what is the
root note.  Also the root of the chord may not always appear in the score,
its common to remove the root or the 5th as they are more "expendable" than
the 3rd or 7th, because the 3rd and 7th dedermine maj/min or dominant
leading tones, often the root is even more expendable than the 5th for
deletion.  So what this algorithm would really need is an "invisible staff"
that allows you to just name to root notes and duration thereof, this staff
is never printed, nor would it participate in midi, etc. it's just there to
tell the algorithm what the current root is at that pont in time, then the
real notes in the score are used to come up with a suitable chord name.

BTW your idea sounds like a very cool idea, as I dont know of any notation
program that can also do harmony analysis.  It would be a quick way to
generate the names, then go back and correct the "wrong" ones.  Nice.


-- 
View this message in context: 
http://www.nabble.com/How-to-put-chords-on-a-score-automatically-tf4783962.html#a13713334
Sent from the Gnu - Lilypond - User mailing list archive at Nabble.com.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]