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()