音乐编码之道(十七)|music21拍号和节拍
到目前为止,我们所处理的音乐几乎都是4/4拍号的。这并不是因为我们特别喜欢常规拍号,而是因为如我们在第4章中所提到的,4/4拍号是music21
库中TimeSignature
对象的默认拍号,对于没有应用其他拍号的对象来说。
一般来说,Stream
对象存在于TimeSignature
对象(Stream
的子类)中。然而,在某些情况下,Measure
对象可以直接存在于Stream中。
作为TimeSignature
的子类,TimeSignature对象具有偏移量,并可以在Stream中的任意位置定位。当放置在一个小节中时,TimeSignature对象通常放置在开始位置,即偏移量为零的位置。小节的属性Music21Object
可以用于设置或获取偏移量为零的TimeSignature。如果一个小节没有TimeSignature,该属性timeSignature
将返回None。
我们需要使用其他拍号的所有内容都包含在timeSignature
模块中,当您键入meter
时,该模块将被导入。该模块中有很多东西,但我们最关心的是from music21 import *
对象。让我们创建一些音符和一个TimeSignature
对象。
这里还有一个简单的方法来获取这个字符串,调用
现在我们有了对象,让我们创建一个使用这些音符和TimeSignature对象的
stream1 = stream.Stream()
for thisThing in [tsThreeFour, noteC, noteD, noteE, noteF]:
stream1.append(thisThing)
的stream1
方法来查看:
stream1.show('text')
为什么时间签名和第一个音符都从偏移量0.0开始?因为默认情况下,时间签名对象没有长度:
{
0.0} <music21.meter.TimeSignature 3/4>
{
0.0} <music21.note.Note C>
{
2.0} <music21.note.Note D>
{
3.0} <music21.note.Note E>
{
4.0} <music21.note.Note F>
0.0 in the Stream? That’s because by default TimeSignature objects have no length:
offset
tsThreeFour.duration.quarterLength
如果我们
0.0
the show()
without using Stream
, we see that there are two measures of 3/4:
show('text')
The
stream1.show()
对象有助于显示模块了解如何将流分割为TimeSignature
对象。如果我们从具有小节的Measure
创建一个新的流Stream
,我们可以直接看到这个过程使用stream1
命令:
makeMeasures()
{
0.0}<music21.stream.Measure1offset=0.0>{
0.0}<music21.clef.TrebleClef>{
0.0}<music21.meter.TimeSignature3/4>{
0.0}<music21.note.NoteC>{
2.0}<music21.note.NoteD>{
3.0}<music21.stream.Measure2offset=3.0>{
0.0}<music21.note.NoteE>{
1.0}<music21.note.NoteF>{
3.0}
<音乐21.bar.终止线类型=最终>
顺便说一下,makeMeasures命令还将一个TrebleClef放入了
{
0.0} <music21.stream.Measure 1 offset=0.0>
{
0.0} <music21.clef.TrebleClef>
{
0.0} <music21.meter.TimeSignature 3/4>
{
0.0} <music21.note.Note C>
{
2.0} <music21.note.Note D>
{
3.0} <music21.stream.Measure 2 offset=3.0>
{
0.0} <music21.note.Note E>
{
1.0