pythonプログラミング で楽譜作成!| music21 ~ 繰り返し処理 | パート | コード
- 2022.03.13
- music21(pythonプログラム)

みなさん、こんにちは!
今回はmusic21を用いた繰り返し処理のsampleを紹介します。
今回作るもの
以下のイメージのような楽譜を作ります。
① 3つのパートに分ける
② パート1は「C D E D」の繰り返し
③ パート2は「E F G F」の繰り返し
④ パート3は「C major」のコードを全音符で繰り返し

参考にしたユーザガイド↓
プログラム
以下のとおりです。
from music21 import *
s = stream.Score(id="mainsheet")
p0 = stream.Part(id="part0")
p1 = stream.Part(id="part1")
p2 = stream.Part(id="part2")
for i in range(8):
#Part0
p0.append(note.Note('C4'))
p0.append(note.Note('D4'))
p0.append(note.Note('E4'))
p0.append(note.Note('D4'))
#Part1
p1.append(note.Note('E4'))
p1.append(note.Note('F4'))
p1.append(note.Note('G4'))
p1.append(note.Note('F4'))
#コード
cMaj = chord.Chord(["C4","E4","G4"])
cMaj.quarterLength=4
p2.append(cMaj)
s.insert(0,p0)
s.insert(0,p1)
s.insert(0,p2)
s.show()
s.show('midi')
1小節毎に移調をする場合
transposeを用いる事で、1小節毎に移調させることも可能です。

from music21 import *
s = stream.Score(id="mainsheet")
p0 = stream.Part(id="part0")
p1 = stream.Part(id="part1")
p2 = stream.Part(id="part2")
for i in range(8):
#Part0
p0.append(note.Note('C4').transpose(i))
p0.append(note.Note('D4').transpose(i))
p0.append(note.Note('E4').transpose(i))
p0.append(note.Note('D4').transpose(i))
#Part1
p1.append(note.Note('E4').transpose(i))
p1.append(note.Note('F4').transpose(i))
p1.append(note.Note('G4').transpose(i))
p1.append(note.Note('F4').transpose(i))
#コード
cMaj = chord.Chord(["C4","E4","G4"])
cMaj.quarterLength=4
p2.append(cMaj.transpose(i))
s.insert(0,p0)
s.insert(0,p1)
s.insert(0,p2)
s.show()
s.show('midi')
輪唱させる場合
サンプルプログラムは以下の通りです。

from music21 import *
s = stream.Score(id="mainsheet")
p0 = stream.Part(id="part0")
p1 = stream.Part(id="part1")
p2 = stream.Part(id="part2")
#かえるの歌
sStr = 'c4 d4 e4 f4 e4 d4 c2 e4 f4 g4 a4 g4 f4 e2 '
sStr +='c4 r4 c4 r4 c4 r4 c4 r4 '
sStr +='c8 c8 d8 d8 e8 e8 f8 f8 e4 d4 c2'
p0 = converter.parse('tinyNotation: 4/4 ' + sStr)
p1 = converter.parse('tinyNotation: 4/4 ' + 'r1 r1 ' + sStr)
p2 = converter.parse('tinyNotation: 4/4 ' + 'r1 r1 r1 r1 ' + sStr)
s.insert(0,p0)
s.insert(0,p1)
s.insert(0,p2)
s.show()
s.show('midi')
輪唱の人数を可変的に変えるのであれば、以下の様な書き方でしょうか?
例では4名の輪唱です。
tinyNotationの書き方として、「同じ長さの音符が連続する時は数字を省略できる」ルールがありますので、今回はその書き方を元に楽譜を書きました。(上記のカエルの歌と同意です。)
from music21 import *
class vocalist:
def __init__(self,arg1,arg2):
junban = arg1
kyoku = arg2
self.p = stream.Part()
self.p = converter.parse('tinyNotation: 4/4 ' + (' r1 r1 ')*junban + kyoku)
#かえるの歌
uta = 'c4 d e f e d c2 e4 f g a g f e2 '
uta +='c4 r c r c r c r '
uta +='c8 c d d e e f f e4 d c2'
vocalists = 4
s = stream.Score(id="mainsheet")
for i in range(vocalists):
tmp_vocalist = vocalist(i,uta)
s.insert(0, tmp_vocalist.p)
s.show()
s.show('midi')

次のステップへ
エラー: データの取得に失敗しました。
-
前の記事
pythonプログラミング で楽譜作成!| music21 ~基本操作④ TinyNotationを学ぼう! 2022.02.24
-
次の記事
pythonプログラミング で楽譜作成!| music21 ~ チャーチモード(教会旋法)とプログラム 2022.03.14