问题描述
在 mingus 中,以下代码创建一个带有高音谱号和 C2 音符的五线谱。
from mingus.containers.bar import Bar
from mingus.containers.track import Track
from mingus.extra.lilypond import *
b = Bar("C")
t = Track(b)
t.add_notes("C-2")
sheet = from_Track(t)
to_png(sheet,"example1")
或者,以下代码创建两个谱表,每个谱表都有一个高音谱号以及一个 C5 和 C2。分别。
from mingus.containers.bar import Bar
from mingus.containers.track import Track
from mingus.containers.composition import Composition
from mingus.extra.lilypond import *
b1 = Bar("C")
b2 = Bar("C")
t1 = Track(b1)
t2 = Track(b2)
t1.add_notes("C-5")
t2.add_notes("C-2")
c = Composition()
c.add_track(t1)
c.add_track(t2)
sheet = from_Composition(c)
to_png(sheet,"example2")
如何强制 mingus/lilypond 在这两个示例中使用低音谱号?
谢谢
解决方法
通读源码,貌似不支持!
我能够编写一个变通方法。它依赖于使用 Instrument 类,其中应该定义 clef
属性。请注意,当您定义 Track()
对象时,您不应该传递Bar()
对象,而应该只传递 Instrument()
对象。
我的方法覆盖了 lilypond 中的默认 from_Track()
函数。它调用 from_Track()
的原始版本,然后确保从此处添加您想要的任何谱号符号: https://lilypond.org/doc/v2.22/Documentation/notation/clef-styles 。这是一个简单的补丁,因此如果您选择了错误的谱号样式,则不会进行错误检查,因此只需确保它有效,否则它将恢复为默认的高音。
这是我的工作:
from mingus.containers.bar import Bar
from mingus.containers.instrument import Instrument
from mingus.containers.track import Track
from mingus.containers.composition import Composition
import mingus.extra.lilypond as lilypond
from_Track_Orig = lilypond.from_Track
def from_Track(track):
global from_Track_Orig
result = from_Track_Orig(track)
if isinstance(result,str) and track.instrument is not None and isinstance(track.instrument.clef,str):
result = "%s \clef %s %s" % (result[:1],track.instrument.clef.split()[0],result[1:])
return result
lilypond.from_Track = from_Track
i = Instrument()
i.clef = 'bass'
b1 = Bar("C")
b2 = Bar("C")
t1 = Track()
t1.add_bar(b1)
t2 = Track(i)
t2.add_bar(b2)
t1.add_notes("C-5")
t2.add_notes("C-2")
c = Composition()
c.add_track(t1)
c.add_track(t2)
sheet = lilypond.from_Composition(c)
lilypond.to_png(sheet,"example2")