music21 如何创建一个 element.lyric 即使在该偏移处没有音符或元素(创建一个不可见的元素?)

music21 how to create an element.lyric even if there's no note or element at that offset (create an invisible element?)

即使乐谱中该偏移量处没有相应的元素,我如何才能定期获得歌词?

我需要做的:

myElement.lyric = 'bla bla'

我可以创建隐形元素吗?

如果您想在 music21 的 "empty" 处添加歌词,答案很简单。只需创建一个 note.Lyric 对象并将其放入 base.ElementWrapper 中。例如:

s = stream.Measure()

n = note.Note()
n.lyric = "Hel-"

s.insert(0, n)

l = note.Lyric('-lo')
ew = base.ElementWrapper(l)

s.insert(1, ew)

现在你有一个带有音符的流,第 1 拍(偏移 0)有歌词,第 2 拍(偏移 1)有裸露的歌词。

虽然我已经猜到你的下一个问题了,"Why doesn't it show up when I show it in [Finale/MuseScore/Sibelius/VexFlow/Lilypond]?"

可以在 music21 中表示的内容与可以以任何给定格式导出的内容之间存在差异。某些格式,例如 Lilypond 或 Humdrum,可以将歌词直接放入乐谱中。某些可能的格式支持 music21(我相信只有 Lilypond)。有些格式支持它,但 music21 不支持。还有不支持的格式,例如 MusicXML。但是,有一些解决方法,例如在特定位置创建休止符,将歌词附加到其中,然后隐藏休止符。这是大多数 MusicXML 客户端所做的。然后是 music21 可能支持某个功能的问题,格式可能支持该功能,但乐谱客户端可能不支持(例如,music21 支持 ossias;MusicXML 也支持;Finale 也支持;但 Finale 支持不支持导入或导出 MusicXML ossias。)

查看可能性的最佳方法是在制谱软件中创建您想要的内容,然后将其导出到 musicxml。将 musicxml 导入 music21 并查看哪些类型的 music21 对象代表这些歌词。然后从 music21 导出回 musicxml,然后重新导入您的制谱软件。

抱歉,这不是一个简单的答案。这是比较复杂的事情之一。

作为一种解决方法——许多人选择在该位置放置一个 TextExpression() 对象,并希望它看起来像歌词。