表題のライブラリ、先月中旬に機能を更に充実したVer 5がリリースされ、いいタイミングなので紹介を兼ねて久しぶりに音楽ネタでも。
14~15世紀に発明されてから現代まで使われている「五線記譜法」。(Wikiの受け売り)
通常は「楽譜」といえばこれのこと。
最近の音楽制作の多くがPC上での波形の切り貼りとその素材選びというコラージュになってしまったこともあり(自省)、読み書きの習得に時間のかかる楽譜はもしかしたら今後徐々に廃れていくかもしれないという危惧を抱きながら、個人的にはかなりの割合で楽譜に依存している。
この楽譜とコンピュータというのが本当に仲が悪いというか相性がよくない。
というよりユーザの母数が少ないのでソフトの進化が非常に遅いというか、20年以上前から状況にあまり変化がない。
個人的には楽譜ソフトを初めて触ったのが今は亡き「Encore」。その後「Finale」や「Sibelius」や「LogicのScore機能(結局これが一番性に合って愛用していたがその後Windows版は廃版。)」なども触ってみたが、いずれもなんとも言えない違和感を感じていた。
つまり、このあたりの楽譜ソフトは清書…つまり出版用の綺麗な楽譜を作ることを目的としているため(Logicはちょっと違うが)、アイデアをさっさとメモするとかインタラクティブにアルゴリズミックなやり方でリアルタイムに楽譜を生成・試行錯誤するというような機能はあまり充実していない。
前者のメモ用途に関してはとりあえず作業中にMIDI信号を記録しておけばなんとか事足りる。概ね鍵盤楽器に限ってだが。
しかしながら後者の「インタラクティブにアルゴリズミックに」楽譜を生成できるフレームワークはまともなものはあまりない。
やりたいことは、沸いてきたアイデアを基にCやPythonからAPIを叩いて楽譜の断片が即座に作れてすぐに響きを確かめられるのが理想なのだが、その理想に現在最も近くて完成度が高いのが今回ネタにするMIT謹製のmusic21というPython用の音楽情報処理ライブラリ。
http://web.mit.edu/music21/
まあおそらく放っておいたら日本語できちんと紹介されることはないだろうから、このライブラリに普段お世話になっている謝辞をこめて使い方入門でも書ければということで。
基本的にmusic21が扱えるのは楽譜とMIDIデータなのだが、とりわけ前者をきちんとプログラムで扱えるライブラリはほぼ皆無に近い。
ここで書くのも前者について。
ただ、music21自身は楽譜を作成する機能は持たず、MusescoreもしくはLilypondを裏で呼び出しており、前者はmusicxml、後者はly言語(いずれもテキストベースで楽譜を記述するデータ形式)を用いてデータのやり取りを行っている。
個人的には結果を保存・流用したいときはMusescore、その場限りの確認や画像出力する時はLilypondという風に使い分けている。
これを使って何ができるかというと、例えば個人的に過去にやった例はたとえば…
・Slonimsky本のスケールを生成して全12キーで書き出したい。(上の画像)
・あるPitch ClassのすべてのVoicingの可能性を書き出したい。
・コードトーンやテンションノートに[E,B]という2音を含むすべてのコードを書き出したい。(アコギストには重要)
などなど、人力でやれば結構な時間がかかることが(慣れれば)短いコードを書いて実行するだけで実現できる。
以下、Pythonの基本を理解していることが前提になります。
現在最新のVersion5.1.0+Windows7&10で動作確認。
[準備]
・お好みのPython(3.x)環境をインストール。個人的にはanacondaを使用。Python2系はサポートされていない。
・MuseScoreとLilypondをインストール。
https://musescore.org/ja
http://lilypond.org/index.ja.html
・必要であればPython用のMIDI入出力ライブラリをインストール。個人的にはpygameを使用。
[インストール]
以前はいろいろややこしかったが、最新バージョンは普通に
pip install music21
でインストールできる。
詳しくは本家のサイト参照。
[動作確認]
コマンドウインドウ上でpython -iを開いて以下を入力してエラーが出なければ無事インストールされているはず。
from music21 import *
[環境設定]
まずMuseScoreとLilypondの場所を教える必要がある。
(以下続けてやる場合はfrom music21 import *は不要)
環境上のpythonにて
from music21 import * us = environment.UserSettings() us.create() #first time only us['lilypondPath'] = 'C:/LilyPond/usr/bin/lilypond.exe' us['musescoreDirectPNGPath'] = 'C:/Program Files/MuseScore/bin/mscore.exe' us['musicxmlPath'] = 'C:/Program Files/MuseScore/bin/mscore.exe'
を実行。環境に応じてパスは変更。
変更・間違いなどで二度目以降の場合はus.create()は省略しないとエラーになる。
これらの設定は最初に一度行っておけばアンインストールしない限りずっと記憶してくれる。
[とりあえず一音]
コマンドウインドウ上でpython -iを開いて
from music21 import * n = note.Note("C4",quarterLength = 1) n.show('musicxml')
でMuseScoreが開いてオタマ一個だけの楽譜が表示されればとりあえずは入門完了。
試しに最終行の
n.show('musicxml')
を
n.show('lilypond')
もしくは
n.show('lily.png')
に置き換えてみると、lilypondが呼ばれて楽譜のpngが表示されるはず。(複雑になってくるとlilypondとMuseScoreとでは同じコードでも挙動が異なることがあるので要注意)
n.show('midi')
に置き換えてみると、midiがプレイバック。
n.show('text')
に置き換えてみると、楽譜内容をテキスト出力。あまり使わないが…
結果をファイルに出力したい場合はそれぞれ以下の通り。lilypond使用時は拡張子不要なようです。
fn=n.write('lily.png',"./hoge")
fn=n.write('musicxml',"./hoge.xml")
fn=n.write('midi',"./hoge.mid")
飛び飛びになるかもしれませんが、時間を見つけて続きを書きます。
********************************************************
後日補足
・基本編
・実践例