即使乐谱中的那个偏移处没有对应的元素,我如何也要定期有歌词?
我需要去做:
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()对象放在该位置,并希望可以使它看起来像歌词一样。