Music21と生成的な作曲手法
楽譜をプログラムで生成したり、解析したりするためのPythonライブラリにMusic21があります。
ここではMusic21の基本的な使い方と、生成音楽の例を紹介します。
ランダムなピッチを出力するコード
from music21 import stream, note, pitch, meter
import random
def make_random_notes(n=10, octaves=[3, 4, 5]):
pitch_classes = list(range(12)) # 0=C, 1=C#, ..., 11=B
# すべての可能な組み合わせを生成
all_combinations = [(pc, oc) for pc in pitch_classes for oc in octaves]
# nが可能数より大きい場合はエラー
if n > len(all_combinations):
raise ValueError(f"n={n} is too large; max is {len(all_combinations)}")
# 組み合わせからランダムにn個選ぶ
selected = random.sample(all_combinations, n)
# ストリームを作成
s = stream.Stream()
s.append(meter.TimeSignature(f'{n}/1'))
for pc, oc in selected:
p = pitch.Pitch()
p.pitchClass = pc
p.octave = oc
n_note = note.Note(p)
n_note.quarterLength = 4
s.append(n_note)
return s
s = make_random_notes()
s.show()