「楽譜や音声を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の動作確認の説明でした。