-
Notifications
You must be signed in to change notification settings - Fork 19
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
Basic lyrics support #354
Comments
Wow! This is beyond "Basic" lyrics support. Super well thought through! Quick-thought comments:
I don't think that we'll get away with omitting a The I am so glad that JSON will allow the |
Do both I agree with @mscuthbert some way to tie a set of syllables together as being part of given verse(s) or group(s) is needed. For me, a use case would be showing and hiding verses in a hymn with several verses, possibly with a chorus that would always be visible. Should asides always be detached (if so, is the Do we need to consider a single line of lyrics tied to more than one part? Do you think this will be flexible enough to cleanly handle multiple syllables on a single note, or multiple notes for a single syllable? Or the first verse with two syllables on a note and the second verse with only one syllable on a note? |
For multiple syllables in a note, I guess you could just put the whole thing in the text property: For multiple notes on a syllable: |
I like the 'continues' idea since there are languages like Chinese that have multi-syllable words but no hyphens inbetween (if written with CJK characters). |
There might also be dense typesetting situations where hyphens are not shown at all. However, sometimes a hyphen should be enforced even in such dense typesetting, and for such situation there should be an explicit 'hyphen' object. In other words, I consider using 'continues' as a helpful means to separate content from layout. |
I think that the lines array might not be enough to account for gaps in the
verses.
For instance a note that would only have lyrics for the 2nd verse.
Or another that would have lyrics for verse 1 and 3.
…On Thu, Sep 12, 2024 at 6:46 AM Werner Lemberg ***@***.***> wrote:
There might also be dense typesetting situations where hyphens are not
shown at all. However, sometimes a hyphen should be enforced even in such
dense typesetting, and for such situation there should be an explicit
'hyphen' object.
In other words, I consider using 'continue' as a helpful means to separate
content from layout.
—
Reply to this email directly, view it on GitHub
<#354 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAJTEWBA4ZTOT4THRL6SFRDZWEMATAVCNFSM6AAAAABOBWVJV6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNBVGI3DENRWHA>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
I assumed that the lyrics were associated with the note, and the lyric syllable would know which verse it is in, so the lines array is simply an additional data structure that has the syllables of the line on it (useful to scan through all the syllables on a line to put the hyphens and melismas in the right places) but also useful information pertaining to the line itself such as line position and spacing.
|
Responding to @samuelbradshaw:
I agree that would be simpler and perhaps better. In fact that's how our own internal format at Soundslice works — a lyrics syllable simply has a boolean that answers the question "Is this syllable meant to continue into the next one?" That's worked well enough for us for 7+ years of lyrics support. And we support non-trivial stuff like lyrics-only view. I don't immediately see the need for |
Chairs meeting noted that we need a way of encoding line-break (or start-of-line) for being able to extract lyrics to poetic blocks. (e.g., https://www.soundslice.com/slices/bwZcc/ -- then click microphone at bottom right) |
I would very much like improvements that make it easier to extract lyrics into words, phrases, and poetic blocks. Some of the challenges I'm aware of currently are:
If the new line is just part of the text, I think the standard way to encode that in JSON is with two slashes: |
I've put pull request #355 together, which adds basic lyrics support to the MNX spec. I just wanted to get the "bones" of it in — lyric lines and hyphens — as opposed to dealing with the various special cases discussed in this thread. The most important thing is that the basic structure of the encoding will be forwards-compatible with the various special cases. Feedback welcome! |
One place I frequently used a start-end indicator in Calliope (though start-end was calculated at display time rather than in the file contents) is when a continuation (either hyphen or melisma) extended over more than one system, even as many as three systems. In florid monody of the early C17, it is common to see this.
|
All right, as of 230dab7 we now have basic lyrics support! I'm closing this issue to keep things focused. We'll open separate issues for the various other lyric cases, as @samuelbradshaw has done with #357. |
Just to get a discussion going, here's a rough first draft of what lyrics support in MNX might look like.
Obviously there's a lot to lyrics — formatting, language encoding, extender (melisma) lines, non-word sounds such as MusicXML's
<laughing>
and<humming>
. I'd like to design this in a way that gets us a solid foundation that we can elegantly extend later, rather than getting forever bogged down in obscure features.For prior art, see MusicXML's approach to lyrics:
https://w3c.github.io/musicxml/musicxml-reference/elements/lyric/
My approach here is to sketch out a simple example, then provide some thoughts on how it could be extended to support more obscure aspects of lyrics.
Proposed simple example
A pretty basic starting point. Lyrics would live on events. Each event would have an optional
"lyrics"
key, which would be a lyrics object. Its"lines"
key would be an array of lyric syllable objects. Each lyric syllable is required to have a"text"
. (Eventually I could envision loosening this: each lyric syllable would be required to have a"text"
or something like"laugh": true
.)Hyphens
The hyphen between "sleep" and "ing?" in that example is encoded as
"hyphen": "start"
and"hyphen": "end"
on the two lyrics. This is inspired by MusicXML's syllabic element and syllabic data type. The default (if not provided) would be"single"
.Multi-line lyrics
Multi-line lyrics would be supported via multiple objects in a single event's
"lines"
array.There would need to be a way for a given event's lyric lines to "skip" a position. For example, see this old engraving of "My Way," in which there are three lines, then only the top line, then only lines 2/3:
Pretext for lyric syllables
A common practice is to display a verse number directly within the lyrics, such as the "2." here:
This could be encoded on the lyric line object as "pretext" (better name likely needed!).
Obviously it's possible to just encode this as
{"text": "2. I"}
, but it's much nicer to split out the pretext. That gives the consuming application more possibilities in lyric display. Plus the engraving is subtly different: the text should be centered under the note, as if the pretext doesn't exist.Another example:
Lyrics above the staff vs. below
Sometimes a single staff (multivoice, but not necessarily) contains lyrics both above and below the staff:
This could be encoded on the lyric line object:
Perhaps we could also support setting the default placement on a sequence — that way it's only set in a single place.
We'll need to support multiline lyrics above the staff as well.
Non-lyric text that gets rendered with lyrics
It's also reasonably common in pop music to engrave non-lyric text as one of the lyric lines. It's more of an instruction, but it's important to engrave it in the lyrics area. For example:
This could be encoded as a lyric line with an empty
"text"
(?) and some other object, perhaps called"aside"
. There's also a need to specify "though this text is rendered in the lyrics space, the default lyrics spacing algorithm does not apply to it" — for which I've used"detached": true
here.Other data in the lyrics object
Apart from
"lines"
, the lyrics object would contain data about the event's lyrics in general (that is, not referring to any of the specific lines). One thing that comes to mind is encoding a bracket before a particular event's lyrics, like this:This could be encoded as
"startBracket"
, with an optional size (measured in number of lyric lines?):Formatting
Finally, a quick thought on formatting. I think font choices shouldn't live at this low level, as that would lead to a lot of duplication. There should be a way to set the lyric font for the document in a single place, perhaps in a layout.
The text was updated successfully, but these errors were encountered: