pythonプログラミング で楽譜作成!| music21 ~基本操作①
- 2022.02.18
- music21(pythonプログラム)

みなさん、こんにちは!
今回は前回の記事の続きとして「music21」の使い方を調べました。
音の定義、譜面の表示、MIDIの再生、シャープとフラット、メロディーの生成を行いましたので、手順を紹介します!
目次
モジュールのインポート
from music21 import *
音を定義する(note.Noteオブジェクトを生成する)
例として、第4オクターブのCを定義します。
音名、オクターブ、ピッチ、周波数は以下の様に取得できます。
f= note.Note("C4")
print(
'音名:'+ f.name + '\n' +
'オクターブ:第'+ str(f.octave) + 'オクターブ\n' +
'ピッチ:'+str(f.pitch) + '\n' +
'周波数:'+str(f.pitch.frequency) + '[Hz]'
)

譜面を表示する
f = note.Note("C4")
f.show()

音を出す
下図のようなmidiプレーヤーが表示されます。
f= note.Note("C4")
f.show('midi')

シャープとフラット
シャープは数字の前に「#」、フラットは数字の前に「-」を付けます。
f= note.Note("G4")
f_sharp= note.Note("G#4") #シャープは数字の前に「#」
f_flat= note.Note("G-4") #フラットは数字の前に「-」
print('↓ピッチ:'+ str(f.pitch))
f.show()
print('↓ピッチ:'+ str(f_sharp.pitch))
f_sharp.show()
print('↓ピッチ:'+ str(f_flat.pitch))
f_flat.show()

メロディーを定義する
streamオブジェクトを定義し、note.Noteオブジェクトを追加します。
showメソッドを用いる事で、「楽譜を表示」や「midi再生」を行います。
note1 = note.Note("C4")
note2 = note.Note("D4")
note3 = note.Note("E4")
note4 = note.Note("F4")
melody = stream.Stream()
melody.append([note1,note2,note3,note4])
melody.show()
melody.show('midi')

RepeatApendメソッド
同じ音を複数回繰り返したい場合、repeatAppendメソッドが使えます。
note1 = note.Note("C4")
melody = stream.Stream()
melody.repeatAppend(note1,6)
melody.show()

ちょっと遊んでみる ~乱数で楽譜生成~
note.Noteオブジェクトですが、MIDIノートナンバーを引数にすることもできます。
88鍵ピアノの音域は「21~108」の範囲とのことで、randint(21,108)としてメロディーを作ってみます。
import random
melody = stream.Stream()
for i in range(12):
melody.append(note.Note(random.randint(21, 108)))
melody.show()
melody.show('midi')

工夫次第では、規則性を持った値を引数とした場合の音楽も作れそうですね!
音の長さを設定する
NoteオブジェクトのquarterLengthプロパティを変更することで、長さ調整が可能です。
※ quarter:拍、 Length:長さ
例1)quarterLengthの値を増やした場合(2分音符、全音符など)
note1 = note.Note("C4")
note2 = note.Note("D4")
note3 = note.Note("E4")
note4 = note.Note("F4")
note1.quarterLength=1
note2.quarterLength=2
note3.quarterLength=3
note4.quarterLength=4
melody = stream.Stream()
melody.append([note1,note2,note3,note4])
melody.show()

例2)quarterLengthの値を減らした場合(8分音符、16部音符など)
note1 = note.Note("C4")
note2 = note.Note("D4")
note3 = note.Note("E4")
note4 = note.Note("F4")
note1.quarterLength=1
note2.quarterLength=0.5
note3.quarterLength=0.25
note4.quarterLength=0.125
melody = stream.Stream()
melody.append([note1,note2,note3,note4])
melody.show()

休符を定義する
Restオブジェクトを定義します。
note1 = note.Note("C4")
note2 = note.Rest()
note3 = note.Note("E4")
note4 = note.Note("F4")
melody = stream.Stream()
melody.append([note1,note2,note3,note4])
melody.show()

もちろん、quarterLengthプロパティを設定すれば、長さも変更可能です。
note1 = note.Note("C4")
note2 = note.Rest()
note3 = note.Note("E4")
note4 = note.Rest()
note1.quarterLength=1
note2.quarterLength=0.5
note3.quarterLength=0.25
note4.quarterLength=0.125
melody = stream.Stream()
melody.append([note1,note2,note3,note4])
melody.show()

次のステップへ
楽譜の取り込み、移調方法について紹介します。
エラー: データの取得に失敗しました。
-
前の記事
pythonプログラミング で楽譜作成!| music21 ~インストール 2022.02.14
-
次の記事
pythonプログラミング で楽譜作成!| music21 ~基本操作② 2022.02.19