この記事では、Pythonで楽譜を作ることができるmusic21について説明します!
Pythonで楽譜を作るメリットは以下のようなものがあります。
- 明示的に楽譜を作ることができる
- AIでの自動作曲に応用できる
- 楽譜に歌詞を簡単につけることができる
それでは早速見てみましょう!
Python環境の構築
まず、Pythonで楽譜作成をする上で必要なものはこちらになります。
・ Python(バージョンは3.Xなら大丈夫です)
・ musescore
・ music21(Pythonのモジュール)
musescoreのインストール
musescoreとは、楽譜を作成できるソフトです。
今回は、このソフトをPythonを使って動かすという趣旨です。
ダウンロードは自分のOSのソフトをこちらからできます。
music21のインストール
music21は、musescoreを動かすことができるツールです。
コマンドプロンプトやターミナルからインストールしてください。
# pip環境の場合
pip install music21
# conda環境の場合
conda install music21
続いて、以下のコードを実行してください。
python -m music21.configure
実行すると、ライセンスに関する同意が何回か出てきますが、必要に応じてコマンドを入力してください。
基本的にどう答えても大丈夫だと思います!
最後に、
The music21 Configuration Assistant is complete. Press return to continue.
とでたら完了です。
楽譜の作成方法
それでは、楽譜の作成方法を簡単にご紹介します!
モジュールのインポート
まずは、先ほどインストールしたmusic21をインポートします。
from music21 import *
音符の入力
まずは、コードを見てみましょう!
score = stream.Stream()
note = note.Note("C4")
note.quarterLength = 1
note.lyric = "あ"
score.append(note)
score.show()
これを実行すると、下のように出力されます。
![](https://icochan1.net/wp-content/uploads/2022/10/tmpgciprjra-1.png)
これを一行ずつ説明したいと思います。
score = stream.Stream()
これは、これから作る楽譜の大枠の定義をしています。
イメージとしては、大きなコンテナを作っているような感じです。
note = note.Note(“C4”)
これは、入力する音階を定義しています。
日本語で言う「ド」を「C」とする英語表記で入力します。
休符の場合は、note = note.Rest()とします。
音の対応表はこちらになります。
![](https://icochan1.net/wp-content/uploads/2022/10/5251e0228747f025bbbb1b24bb5e2b25-1024x285.png)
note.quarterLength = 1
次に、音の長さを指定します。
この場合だと、4分の4拍子での長さを指定します。
例えば、四分音符の場合は「1」、8部音符の場合は「0.5」、全音符の場合は「4」となります。
note.lyric = “あ”
これは、音符の下に表示する歌詞を指定します。
歌詞は入力しなければ何も書かず、複数文字でも入力できます。
score.append(note)
ここまでで定義した音符をコンテナに追加します。
score.show()
作った楽譜を表示します。
複数音符の入力
曲はいろんな音符の組み合わせなので、このように入力します。
score = stream.Stream()
note1 = music21.note.Note("C4")
note1.quarterLength = 2
note1.lyric = "ド"
score.append(note1)
note2 = music21.note.Note("E4")
note2.quarterLength = 1
note2.lyric = "ミ"
score.append(note2)
note3 = music21.note.Note("G4")
note3.quarterLength = 1
note3.lyric = "ソ"
score.append(note3)
note4 = music21.note.Note("C5")
note4.quarterLength = 2
note4.lyric = "ド"
score.append(note4)
note5 = music21.note.Note("G4")
note5.quarterLength = 1
note5.lyric = "ソ"
score.append(note5)
note6 = music21.note.Note("E4")
note6.quarterLength = 1
note6.lyric = "ミ"
score.append(note6)
note7 = music21.note.Note("C4")
note7.quarterLength = 3
note7.lyric = "ド"
score.append(note7)
note8 = music21.note.Rest()
note8.quarterLength = 1
score.append(note8)
score.show()
これを出力するとこのようになります。
![](https://icochan1.net/wp-content/uploads/2022/10/tmpt_bsig91-1-1024x102.png)
調の設定
楽譜を作る場合にハ長調やト長調といった調を指定することがあると思います。
例えば、ト長調の場合はこのように入力します。
score = stream.Stream()
score.append(key.KeySignature(1))
二行目の数字部分を変えることで調を指定することができます。
対応表は以下のようになっています。
調 | KeySignature | 調 | KeySignature |
---|---|---|---|
ハ長調 | 0 | へ長調 | -1 |
ト長調 | 1 | 変ロ長調 | -2 |
ニ長調 | 2 | 変ホ短調 | -3 |
ホ長調 | 3 | 変イ長調 | -4 |
ロ長調 | 4 | 変ニ長調 | -5 |
嬰ヘ長調 | 5 | 変ト長調 | -6 |
嬰ハ長調 | 6 | 変ハ長調 | -7 |
楽譜の出力
作った楽譜はいろんな形式で出力することができます。
# python上に表示する
score.show()
# pythonで演奏させる
score.show("midi")
# musescore上に表示する
score.show('musicxml')
# pngで出力する
score.show('musicxml.png')
# pdfで出力する
score.show('musicxml.pdf')
大きな古時計を作成
それでは、大きな古時計をつくってみたいと思います。
from music21 import *
score = stream.Stream()
# タイトルを入力
score.insert(0, metadata.Metadata())
score.metadata.title = '大きな古時計'
# 調の設定
score.append(key.KeySignature(1))
# 楽譜を[音符, 長さ, 歌詞]で配列に保存
melody = [["Rest",3,""],["D4",1,"お"],["G4",1,"お"],["F#4",0.5,"き"],["G4",0.5,"な"],
["A4",1,"のっ"],["G4",0.5,"ぽ"],["A4",0.5,"の"],["B4",0.5,"ふ"],["B4",0.5,"る"],
["C5",0.5,"ど"],["B4",0.5,"け"],["E4",1,"い"],["A4",0.5,"お"],["A4",0.5,"じ"],
["G4",1,"い"],["G4",0.5,"さ"],["G4",0.5,"ん"],["F#4",1,"の"],["E4",0.5,"と"],
["F#4",0.5,"け"],["G4",4,"い"]]
for m in melody:
if m[0] == "Rest":
note = music21.note.Rest()
else:
note = music21.note.Note(m[0])
note.quarterLength = m[1]
note.lyric = m[2]
score.append(note)
![](https://icochan1.net/wp-content/uploads/2022/10/tmpn0saukax-1-1024x262.png)
コメント