Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple lines of text #374

Open
eroux opened this issue May 6, 2015 · 21 comments
Open

Multiple lines of text #374

eroux opened this issue May 6, 2015 · 21 comments

Comments

@eroux
Copy link
Contributor

eroux commented May 6, 2015

This long-awaited feature will add the possibility for users to associate multiple lines of text (with all their syllables aligned) with one line of notes.

It would contain the following features:

  • possibility to have syllables centered, left-aligned or right-aligned (different for each syllable)
  • possibility to insert small horizontal lines between text lines
  • as many text lines as user wants
  • possibility of line numbering
  • possibility of curly brace at the end of the lines
  • possibility of vertical rules between syllables

example-lilypond

multiplelineswithrules

This is quite a lot of work...

@henryso
Copy link
Contributor

henryso commented May 6, 2015

How do you see this notated in gabc?

@eroux
Copy link
Contributor Author

eroux commented May 6, 2015

good question... I guess the two different approaches would be

ma(e)gni(gh)fi(h)cat(h) (h) (hr) (hr) (hr) [sync1,leftline]spi(hg)
& line: nonumber, aligned:left, 
Et[l] ex[l]sultavit spi[sync1]

and

ma[1:Et,2:Qui](e)gni[1:ex,2:a](gh)ficat[1:sultavit,2:respexit](h) (h) (h) (hr) (hr) (hr) spi[1:an,2:ma](hg)

it's just to show the global idea: one line per line, or just one line... We should also take a look at how Lilypond and ABC handle this.

In any case, that's not something to focus on now, it's for when there will be less urgent priorities...

@henryso
Copy link
Contributor

henryso commented May 6, 2015

Lilypond has two ways of generating lyrics.

  1. You specify durations for each syllable and Lilypond placed them according to those durations.
  2. You tell Lilypond that the lyrics go according to a specific voice. Lilypond then matches up each syllable to a note in the voice.

Either can be used to provide multiple lyrics, which can be placed at any point in the score, even separated.

I think putting the text inline (the second of your suggestions) makes it pretty difficult to read (it's already a little unwieldy when styling), so I'm more inclined to the former, only I might simplify it a bit:

Et# ex#sultavit spi#

You would skip a syllable with ##, etc.

I would also suggest having as much configuration (i.e., nonumber) as possible in TeX. I like the idea of the square brackets in the first line of text. Things like alignment can go there too.

@henryso
Copy link
Contributor

henryso commented May 6, 2015

ABC handles lyrics with the w: and W: tags. The w: tag places lyrics under the staves and you use special characters like ~, -, *, and _ to control how it places syllables. The W: tag simply dumps lyrcs at the bottom of the score with no need for spacing syllables.

@eroux
Copy link
Contributor Author

eroux commented May 6, 2015

Indeed, at first I thought that many configurations should go in gabc, but when I see the difficulty I had to make this post above with the example, that will be simply too complex to parse... so indeed, TeX configuration is best.

@kbartek7
Copy link

Will this feature shortly available?

@henryso
Copy link
Contributor

henryso commented Nov 18, 2015

I think it's safe to say no.

@eroux
Copy link
Contributor Author

eroux commented Dec 13, 2015

Another example (from #707 ): Antiphonale Monasticum p.1222

@rpspringuel
Copy link
Contributor

On the notation front, I think it may be easier to adapt the gly notation that @igneus just announced to this than our current gabc notation. We might, therefore, want to consider incorporating that notation into the base program as an interim step.

Of course, I'm not likely the one taking on that project, so feel free to ignore me if you so choose.

@eroux
Copy link
Contributor Author

eroux commented Jan 7, 2016

Another example:

ferretti001

@eroux
Copy link
Contributor Author

eroux commented Jan 7, 2016

The direction it's taking is not to involve Gregorio too much in this but give users LaTeX templates they can use, the only thing Gregorio might do is writing the sizes of the different areas to the aux file, but more on this later....

@Nokel81
Copy link

Nokel81 commented Jul 10, 2019

How about separating each part with | so that you might write vi|De(g)ta|us(h) to get

vi-  ta
De-  us

@Nokel81
Copy link

Nokel81 commented Jul 16, 2019

If I wanted to play around with the generation, where in the code should I start to explore? @rpspringuel

@rpspringuel
Copy link
Contributor

What do you mean by "the generation"? There's three representations and two translations steps involved here. The representations are:

  1. gabc syntax
  2. gtex syntax
  3. printed score

1 is translated into 2 by the command line tool, whose source is in src
2 is translated into 3 by the TeX code in the files in tex. Of particular import here is \GreSyllable.

@Nokel81
Copy link

Nokel81 commented Jul 16, 2019

I think I mean 1 -> 2 because I figure that is where the location of the lyrics is placed. I am thinking of tinkering around to see how to output a satisfactory multi-lyric score by hand and then work backwards

@rpspringuel
Copy link
Contributor

Again, depends on what you mean by "the location of the lyrics is placed":

The association of the lyrics syllable with a particular set of notes happens in 1.

The translation of 1 to 2 involves the identification of the vowel of the syllable so that the syllable can be divided into three parts: first (everything before the vowel), middle (the vowel), and end (everything after the vowel). Also involved here is the identification of the necessary neumes needed to represent the given sequence of notes.

2 has to represent the results of the previous translation

The translation from 2 to 3 uses the information given to determine the actual location of the text and notes on the page. This is the step that actually "places" things on the page, but it's only possible because of the information provided by the steps further up the chain. For instance, given default alignment rules, the text alignment point is the middle of the vowel in the syllable while the notes alignment point is the middle of the first neume. Both of these pieces of information were determined in the translation from 1 to 2.

@Nokel81
Copy link

Nokel81 commented Jul 16, 2019

So does the current # 2 representation not have any notion of multiple syllables per neume? I guess another question would be if the translation from 2->3 assumes only one syllable per neume as well.

@rpspringuel
Copy link
Contributor

Currently there is no concept of multiple syllables (vertically) per neume in any representation and all translation steps assume that.

Here's and example of the current representations:

name: test;
%%

(c4) vi(g)ta(h)

Fairly simple, just a clef, and a single word of two syllables. This is translated by the command-line tool into:

% File generated by gregorio 5.2.0
\GregorioTeXAPIVersion{5.2.0}%
% Name: test
\GreBeginHeaders %
\GreHeader{name}{test}%
\GreEndHeaders %
\GreBeginScore{904af4e195a4e665cfe4bee29e9565b6b00bce56}{10}{9}{0}{0}{}{4}{\GreInitialClefPosition{4}{0}}%
\GreSetLargestClef{c}{4}{3}{c}{0}{3}%
\GreScoreOpening{%
}{%
\GreSetInitialClef{c}{4}{3}{c}{0}{3}{1}%
}{%
}{\GreSyllable}{\GreSetFirstSyllableText{v}{i}{}{{}{\GreFirstWord{\GreFirstSyllable{\GreFirstSyllableInitial{i}}}}{}}{{\GreFirstWord{\GreFirstSyllable{\GreFirstSyllableInitial{v}}}}{\GreFirstWord{\GreFirstSyllable{i}}}{}}{}}{}{\GreFirstWord}{0}{\GreSetNextSyllable{\GreFirstWord{t}}{\GreFirstWord{a}}{}{\GreFirstWord{t}}{\GreFirstWord{a}}}{}{0}{}{%
\GreSyllableNoteCount{1}%
\GreGlyph{\GreCPPunctum}{9}{\GreNextCustos{10}{}}{0}%
{%
\GreGlyphHeights{9}{9}%
}{}{}%
}%
\GreSyllable{\GreSetThisSyllable{\GreFirstWord{t}}{\GreFirstWord{a}}{}{\GreFirstWord{t}}{\GreFirstWord{a}}}{}{\GreFirstWord}{1}{\GreSetNextSyllable{}{}{}{}{}\GreLastOfLine}{}{16}{}{%
\GreSyllableNoteCount{1}%
\GreLastOfScore\GreGlyph{\GreCPPunctum}{10}{\GreNextCustos{9}{}}{0}%
{%
\GreGlyphHeights{10}{10}%
}{}{}%
}%
%
\GreEndScore %
\endinput %

Which the TeX makes look like this:

Main.pdf

@Geremia
Copy link

Geremia commented Aug 14, 2024

How is Litaniae (in Vigil. pasch.) on GregoBase done?

Litaniae (in Vigil. pasch.)

It's split into 4 GABC files:
su--litaniae_(in_vigil._pasch.)--solesmes.1.gabc

name:Litaniae (in Vigil. pasch.);
office-part:Supplicatio;
book:Graduale Romanum, 1961, p. 239G & The Liber Usualis, 1961, p. 776V & Chants of the Church, 1956, p. 105 & Gregorian Missal, 1990, p. 340;
%%
(c3) KY(h)ri(f)e,(f) e(f)lé(f)i(e)son. <i>ij.</i>(f.) (::) Chri(h)ste,(f) e(f)lé(f)i(e)son. <i>ij.</i>(f.) (::) Ký(h)ri(f)e,(f) e(f)lé(f)i(e)son. <i>ij.</i>(f.) (::) Chri(h)ste,(gh) au(f)di(g) nos. <i>ij.</i>(h.) (::) Chri(h)ste,(g) ex(h)áu(f)di(g) nos. <i>ij.</i>(h.) (::) (Z) () Pa(h)ter(h) ( ) de(h) ( ) cae(h)lis(h) ( / ) <b>De</b>(i)us,(g.) (,) mi(g)se(g)<i>ré</i>(f)<i>re</i>(g) no(h)bis.(h.) (::)

su--litaniae_(in_vigil._pasch.)--solesmes.2.gabc

name:Litaniae (in Vigil. pasch.);
office-part:Supplicatio;
book:Graduale Romanum, 1961, p. 239G & The Liber Usualis, 1961, p. 776V & Chants of the Church, 1956, p. 105 & Gregorian Missal, 1990, p. 340;
%%
(c3) (//) San(h)cta(h) ( / ) Ma(h)<b>rí</b>(i)(gr)a,(g.) (/) (,) (/) o(g)<i>ra</i>(f) <i>pro</i>(g) no(h)bis.(h.) (::)

su--litaniae_(in_vigil._pasch.)--solesmes.3.gabc

name:Litaniae (in Vigil. pasch.);
office-part:Supplicatio;
book:Graduale Romanum, 1961, p. 239G & The Liber Usualis, 1961, p. 776V & Chants of the Church, 1956, p. 105 & Gregorian Missal, 1990, p. 340;
%%
(c3) O(h)mnes(h) san(h)cti(h) <v>~</v>() An(h)ge(h)li(h) et(h) Arch(h)<b>án</b>(i)ge(gr)li,(g.) (,) o(g)rá(g)<i>te</i>(f) <i>pro</i>(g) no(h)bis.(h.) (::)

su--litaniae_(in_vigil._pasch.)--solesmes.4.gabc

name:Litaniae (in Vigil. pasch.);
office-part:Supplicatio;
book:Graduale Romanum, 1961, p. 239G & The Liber Usualis, 1961, p. 776V & Chants of the Church, 1956, p. 105 & Gregorian Missal, 1990, p. 340;
%%
(c3) () San(h)cte(h) <b>Pe</b>(i gr)tre,(g.) (,) o(g)<i>ra</i>(f) <i>pro</i>(g) no(h)bis.(h.) (::)

But all the lyrics aren't in these GABC files.

I know (Z) is the line break sequence, but that doesn't work for lyrics; that makes a whole new line for staff.

@rpspringuel
Copy link
Contributor

Gregobase is probably using some variation of http://gregorio-project.github.io/tips/litany.html. Most of the lyrics would reside in the TeX file, which Gregobase unfortunately doesn’t make available for download.

@MRoth1910
Copy link

As to the Gregobase example, I see that @Geremia has now seen the internal workings. It uses a tabbing environment. I'd have to check the site's preamble to see if it also uses the ˋzref` part of the example.

As to the rest…I don't want to leave a useless comment because I know that it's a much-requested feature and difficult to solve, but I was working on transforming the litany of the BVM from an A5 sheet to letter, and now have to do a few more, and it's not fun to have to guess where to put tabs and horizontal spacing. But maybe some things addressed with 6.1 now have opened the path forward?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants