【Python】楽譜作成ができるmusic21のインストール

【Python】楽譜作成ができるmusic21のインストール プログラミング

「楽譜や音声をPythonで分析したい」
「プログラムで自動的に楽譜を作成したい」

このような場合には、Pythonライブラリのmusic21を利用します。

本記事の内容

  • music21とは?
  • music21のシステム要件
  • music21のインストール
  • music21の動作確認

それでは、上記に沿って解説していきます。

music21とは?

music21は、Pythonの音楽情報処理ライブラリです。
楽譜や音声を分析するために、利用されています。

例えば、MIDIデータを読み込んでピッチをヒストグラムで表現するなどです。

分析機能以外では、楽譜作成機能があります。
と言っても、music21自体では楽譜を作成できません。

作成できるのは、楽譜の元データです。
その元データをMusescoreなどに渡して、楽譜を作成します。

つまり、music21はMusescoreなどと連携するということです。
こういう形式のPythonライブラリは、よく存在します。

FFmpegを利用するPythonライブラリ

FFmpegとImageMagickを利用するPythonライブラリ

Graphvizを利用するPythonライブラリ

このような感じで、普通に存在します。
music21は、そのようなライブラリである側面も強いです。

以上、music21についての説明でした。
次は、music21のシステム要件を確認します。

music21のシステム要件

現時点(2021年10月)でのmusic21の最新バージョンは、7.1.0となります。
この最新バージョンは、2021年9月9日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは以下となります。

    'Programming Language :: Python :: 3 :: Only',

Python 3であれば、OKということです。
ここまでを見れば、システム要件としては何も複雑なことはありません。

ただ、music21を機能させるには次の二つのソフトウェアが必要です。
連携の部分の話です。

  • Musescore
  • LilyPond

それぞれは、無料で利用することができます。
インストールは、ともに難しいこともありません。

基本的には、次へ次へで進みます。
インストール先は、各自の好みで変更してもよいかもしれません。

以上、music21のシステム要件を説明しました。
次は、music21をインストールします。

music21のインストール

今回の検証で利用しているPythonは、以下。

>python -V 
Python 3.9.7

まずは、現状のインストール済みパッケージを確認しておきます。

>pip list 
Package    Version 
---------- ------- 
pip        21.2.4 
setuptools 58.2.0

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、music21のインストールです。
music21のインストールは、以下のコマンドとなります。

pip install music21

インストールは、少し時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。

>pip list 
Package         Version 
--------------- ------- 
chardet         4.0.0 
cycler          0.10.0 
joblib          1.1.0 
jsonpickle      2.0.0 
kiwisolver      1.3.2 
matplotlib      3.4.3 
more-itertools  8.10.0 
music21         7.1.0 
numpy           1.21.2 
Pillow          8.3.2 
pip             21.2.4 
pyparsing       2.4.7 
python-dateutil 2.8.2 
setuptools      58.2.0 
six             1.16.0 
webcolors       1.11.1

依存するパッケージは、そこそこ多いですね。
この結果を見ると、Pythonの仮想環境を利用することをおススメします。

Windowsなら、IDEにPyCharmを使えば簡単に仮想環境を利用できます。
プロジェクト毎に仮想環境となり、面倒なことをする必要がありません。

また、以下のようにコマンドでも簡単に仮想環境を利用できます。

以上、music21のインストールについて説明しました。
最後は、music21の動作確認を行います。

music21の動作確認

music21の動作確認では、Musescoreとの連携を行います。
そのためには、環境変数の設定が必要になります。

  • 環境変数の設定
  • music21とMusescoreの連携

それぞれを下記で説明します。

環境変数の設定

最初に、music21の環境変数を確認しましょう。

from music21 import * 

us = environment.UserSettings() 
for key in sorted(us.keys()): 
    print(key + " = " + str(us[key]))

上記コードを実行した結果は、以下。
※【ROOT】は、Python仮想環境でのルートディレクトリ

autoDownload = ask 
braillePath = None 
debug = 0 
directoryScratch = None 
graphicsPath = None 
ipythonShowFormat = ipython.musicxml.png 
lilypondBackend = ps 
lilypondFormat = pdf 
lilypondPath = 【ROOT】\lilypond 
lilypondVersion = None 
localCorporaSettings = {} 
localCorpusPath = None 
localCorpusSettings = LocalCorpusSettings([]) 
manualCoreCorpusPath = None 
midiPath = None 
musescoreDirectPNGPath = 【ROOT】\C:\Program Files\MuseScore 3\MuseScore.exe 
musicxmlPath = 【ROOT】\C:\Program Files\MuseScore 3\MuseScore.exe 
pdfPath = None 
showFormat = musicxml 
vectorPath = None 
warnings = 1 
writeFormat = musicxml

Python仮想環境を利用していることもあり、若干変なパスが設定されています。
ただ、MuseScore.exeのパスが決め打ちは困ります。

それに「lilypondPath」は、「Program Files」の下ですらありません。
よって、次の3つは各自の環境に合わせて変更する必要があります。

  • lilypondPath
  • musescoreDirectPNGPath
  • musicxmlPath

変更するには、次のコードを実行します。

from music21 import * 

us = environment.UserSettings() 

# config作成 
us.create() 

us['lilypondPath'] = 'C:/soft/lilypond/usr/bin/lilypond.exe' 
us['musescoreDirectPNGPath'] = 'C:/soft/musescore3/bin/MuseScore3.exe' 
us['musicxmlPath'] = 'C:/soft/musescore3/bin/MuseScore3.exe'

上記を実行すると、「music21-settings.xml」が作成されます。
Windowsの場合は、以下のパスとなります。

C:\Users\ユーザー\AppData\Roaming\music21-settings.xml

ここで、再度music21の環境変数を確認してみましょう。

autoDownload = ask 
braillePath = None 
debug = 0 
directoryScratch = None 
graphicsPath = None 
ipythonShowFormat = ipython.musicxml.png 
lilypondBackend = ps 
lilypondFormat = pdf 
lilypondPath = C:\soft\lilypond\usr\bin\lilypond.exe 
lilypondVersion = None 
localCorporaSettings = {} 
localCorpusPath = None 
localCorpusSettings = LocalCorpusSettings([]) 
manualCoreCorpusPath = None 
midiPath = None 
musescoreDirectPNGPath = C:\soft\musescore3\bin\MuseScore3.exe 
musicxmlPath = C:\soft\musescore3\bin\MuseScore3.exe 
pdfPath = None 
showFormat = musicxml 
vectorPath = None 
warnings = 1 
writeFormat = musicxml

変更した通りになっています。
ちなみに、「music21-settings.xml」の中身は以下。

<settings encoding="utf-8"> 
  <preference name="autoDownload" value="ask" /> 
  <preference name="braillePath" /> 
  <preference name="debug" value="0" /> 
  <preference name="directoryScratch" /> 
  <preference name="graphicsPath" /> 
  <preference name="ipythonShowFormat" value="ipython.musicxml.png" /> 
  <preference name="lilypondBackend" value="ps" /> 
  <preference name="lilypondFormat" value="pdf" /> 
  <preference name="lilypondPath" value="C:\soft\lilypond\usr\bin\lilypond.exe" /> 
  <preference name="lilypondVersion" /> 
  <localCorporaSettings /> 
  <localCorpusSettings /> 
  <preference name="manualCoreCorpusPath" /> 
  <preference name="midiPath" /> 
  <preference name="musescoreDirectPNGPath" value="C:\soft\musescore3\bin\MuseScore3.exe" /> 
  <preference name="musicxmlPath" value="C:\soft\musescore3\bin\MuseScore3.exe" /> 
  <preference name="pdfPath" /> 
  <preference name="showFormat" value="musicxml" /> 
  <preference name="vectorPath" /> 
  <preference name="warnings" value="1" /> 
  <preference name="writeFormat" value="musicxml" /> 
  </settings>

「music21-settings.xml」が存在する限り、music21の環境変数は永続化します。
変更する場合は、直接「music21-settings.xml」を修正すればよいでしょう。

music21とMusescoreの連携

music21でXMLを読み込んで、Musescore上で楽譜として確認します。
そのコードは、以下。

from music21 import * 

s = corpus.parse('bach/bwv65.2.xml') 
s.show()

「bach/bwv65.2.xml」は、music21のインストール時に自動で取得しています。
そのため、上記コードをそのまま実行できます。

実行すると、Musescoreが自動的に起動。
指定したXMLのデータが、楽譜として表示されます。

music21とMusescoreの連携が、確認できました。
正確には、PythonとMusescoreの連携と言ったほうがよいかもしれません。

以上、music21の動作確認の説明でした。

タイトルとURLをコピーしました