即使乐谱中的那个偏移处没有对应的元素,我如何也要定期有歌词?

我需要去做:

myElement.lyric = 'bla bla'


我可以创建隐形元素吗?

最佳答案

如果要在music21的“空”位置放歌词,答案很简单。只需创建一个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)上带有纯歌词。

我已经可以猜到您的下一个问题,“为什么当我在[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()对象放在该位置,并希望可以使它看起来像歌词一样。

10-08 02:53