PMXで楽譜作成

PMXとは、

こういう楽譜を作るツールである。フリーウェアであること、出力される楽譜が綺麗であることもさることながら、入力データをテキストファイルで書けるのが魅力である。

表示されている楽譜の上にマウス操作で音符を乗せていくようなソフトは多数あるが、入力し易いものに出会ったことが無い。筆者が細かいマウス操作が苦手なこともあるが、五線譜の上から2番目と3番目の線の間に音符を持っていって、次の音符は2番目の線の上に乗せて...という作業は苦痛である。ドラッグしているその音符をあと半音上に動かす必要がある時、今マウスが止まってるので、マウスが反応するぎりぎりの速度を狙ってゆっくりとマウスを前に動かし、マウスが反応したらすぐ手を止めないといけない。手を止めるのが少し遅くて目的地より半音上に行ってしまったら、今度は同様に慎重にマウスをバックさせてカーソルが動いた瞬間に手を止めないといけない。そうこうしていると、ボタンを押す指が疲れて一瞬震え、上か下かに半音ずれた所で音符が確定しまう。それを思い出して文章にしてるだけでイライラしてくる。
昔、MSXの「MUE」(ハル研究所)という、マウスが無かったので当然(パソコンの)キーボードで音符を入力する作曲ソフトを買ったことがあるが、そっちの方がずっと入力し易かった。音符はキーボードで入力できる方が便利なのである。

そこでMusiXTeXである。TeXのマクロであり、当然入力はテキストファイルなので音符はキーボード操作で入力できる。そして、フリーソフトであるにも関わらず、出力される楽譜は出版物並みに綺麗である。
MusiXTeXの書式は大変難しいが、そのプリプロセッサであるPMXM-Txを使うと、かなり容易である。M-Txは楽譜無いに歌詞も書けるようにPMXを拡張したものだが、若干PMXと書式が異なる。M-Txを使うにはPMXの知識も必要になるので、歌詞が要らないならPMXだけで充分と思う。

上の楽譜は、次のソースファイルから生成されたものである。

2 1 3 4 3 4 1 0
0 8 20 0.0

bt
./

It144ipipi
Ap

r4 rp ( a82 e+ a ) r r4 ( e82 e+ gs ) r r4 ( a82 e+ a ) r r4 /
( e85 ds e ds e b dn c a4 ) r8 ( c- e a b4 ) r8 ( e- gs b c4 ) r2 /

"./"までの部分は、PMXファイルとして必須の、楽譜全体に関する設定(ヘッダ)であり、"r4"より下の部分が各小節のデータ(ブロックの集まり)である。最低それらが含まれていれば、PMXのソースファイルとして成立する。
このファイルをforelise.pmxとして保存し、PMXがインストールされている環境で
pmx forelise.pmx
または、
pmxab forelise
musixflx forelise
musixtex forelise
とすると、TeXでお馴染みのDVIファイルができる。dvipsでPSファイルに、dvipdfでPDFファイルに変換できる。上の楽譜画像は、DVIファイルをdvipsでPSファイルにしてImageMagickでPNGに変換したものである。
1つ目のpmxコマンド一発でコンパイルする方法だと、ソースファイルに"I"コマンドがあると、ついでにMIDIファイルもできる。

上のソースファイルを解説する。
●ヘッダーの先頭から12個の数字(必須)

通称上での値意味
nv2パートの数
noinst1楽器の数
mtrnuml3(小節の境目の判定に使う)何分の何拍子の分子
mtrdenl4(小節の境目の判定に使う)何分の何拍子の分母
mtrnump3(実際の表示に使う)何分の何拍子の分子
mtrdenp4(実際の表示に使う)何分の何拍子の分母
xmtrnum01弱起(最初の小節が不完全)の場合の最初の小節の拍子数
isig0五線譜の左端の調を決める#や♭の数(負だと♭)
npages0出力ページ数、0は自動
nsyst8五線譜の段数(全ページ分)npages=0の時は1段当たりの小節数
musicsize20音符のサイズ
fracindent0.0五線譜の1段目のインデント量
●ヘッダーのそれ以降の行(必須)
項目上での値内容
楽器名 (noinst)行分の、楽器名(ここでは空行)
音符記号bt各パートの、ト音記号(t)かヘ音記号(b)かの設定(下のパートから)
出力先./出力先ディレクトリ("./"はカレントディレクトリ)
●楽譜全体の設定
"I"で始まる行はMIDIファイル出力の設定
 "t144"はテンポ
 "i...."は(nv)個分の楽器("pi"はピアノ)
"Ap"はMusiXTeXの「Type Kスラー」(またはPostscriptスラー)という綺麗なスラーを使う設定(要インストール)
●楽譜本体
・下のパートから書く
・パートの切り替えは"/"
・音符と音符の間はスペースで区切る
・音符について
 cdefgabはドレミファソラシ、rは休符
 音符内の数字は、音の長さ(1,2,4,8,16,32分音符はそれぞれ0,2,4,8,1,3)とオクターブ(4がト音記号の普通の所)
  長さを省略すると1つ前の音と同じ長さ
  オクターブを省略すると1つ前の音に一番近い高さ(c b(ド、シ)ならシは1つ下のオクターブのシ)
 +/-はオクターブの上下移動
 "s"は#(♭なら"f")
・()はタイ/スラー
・rpは全休符
・小節の区切りは自動的に計算される


もう1つサンプルを作ってみた。解説は省略する。
csikospost.pmx(PMXソースファイル)
csikospost.pdf(できた楽譜)
csikospost.mid(できた音楽ファイル)

ついでにもう1つ公開する。
Nukenin1.pmx(PMXソースファイル)
Nukenin1.pdf(できた楽譜)
Nukenin1.mid(できた音楽ファイル)

参考資料:マニュアル(英語、PDF)

viやEmacsで楽譜を入力する。TeXで楽譜を作る。何とエレガントな響きであることか。


他にもいくつか作ったのだが、どうも法的根拠が明確でないのだが、日本国内では自作の楽譜、自作のMIDIファイル共に曲自体が版権物であれば公衆送信権の侵害の疑いがあるらしいので、公開は見送る。
MusiXTeXが出力する楽譜、PMXが出力するMIDIファイル共に、著作権の構成要件が脱落した、単純化された符号であり、筆者は限りなくホワイトに近いグレーゾーンであると思う。MusiXTeXの音符のデザインもMIDIファイル再生時に使われる音も著作物とは関係なく存在するものである。誰かがある数式のグラフをモチーフにして美術作品として発表したら、以後その数式をインターネットで使用するのは著作権侵害だとか言うようなものである。
それに、耳コピーして作った楽譜を公開してはいけないというのは、何かがおかしい。某組織に独占禁止法違反の嫌疑がかかるのも仕方ないと思う。

筆者は先月からPMXにベタ惚れでドハマリ中なのだが、残念なことに2009年11月現在、FreeBSDのportsには含まれていないようである(MusiXTeXは含まれている)。Debianのパッケージには含まれている(M-Txは含まれていない)ので、ライセンスに関連する問題ではなく、単にportsのメンテナーがいないようだ。MusiXTeXはもうマイナーなのだろうか?

おまけ的についているPMXのMIDIファイル作成機能は、本当におまけのようで、装飾符は鳴らないし、ppやffなどの強弱記号も反映されない。マニュアルの4章の説明ではファイルの途中でもIvコマンドでボリュームの変更ができるように読める(楽器を指定するIiコマンドはファイルに1つしか反映されないと書いてある、テンポを指定するItコマンドはそう書かれておらず何回でも反映されることを確認済み)が、筆者が試した所、途中のボリューム変更は無効で、最後に指定したボリュームがファイル全体のボリュームとなるようである。筆者としてはあとボリューム変更さえできればPMXでやりたいことが全てできるのだが、実に惜しい。

楽譜入力とは別に、音楽をASCII文字でどうやって表現するか、というのは昔からのテーマである。例えば、電子メールで「この曲何て曲?」と聞きたい時、その曲をどうやって伝えるか。
楽器があって演奏できるなら録音して音楽ファイルにすればいいし、スキャナーがあるなら手書きの楽譜を画像ファイルにすればいいかも知れない。楽器が無くても音楽作成ソフトがあれば音楽データを作ればいいし、スキャナーが無くても楽譜入力ソフトがあれば楽譜画像を作ればいい。
しかし、テキストで表現が可能なのなら、その方が手軽だとは思わないだろうか。通信量の節約にもなるし、テキスト検索もできる。10年くらい前にネット上でそんな議論を見て、賛成の人が少なからずいたが、なぜかBASICでお馴染みの昔からあるMML(Music Macro Language)はあまり話題に上らず、代わりにABCという言語が取り上げられていた。MMLの何が悪いのだろうか。BASICの方言が多かったのが悪かったのだろうか?

O5L8ed+ed+e<b>dca2
これで1つのメロディーが表現できるし、巷のMML対応ソフトで演奏できる。拙作の本サイトにある簡易MMLプレーヤー(Javaアプレット)でも鳴らせる。コンパクトで、あっという間に入力できる。ハ長調やイ単調でない場合に特定の音に+(#)や-(♭)を毎回付けないといけないという不満はあるが、それさえ目を瞑れば、シンプルで手軽ではないだろうか。筆者はMMLで事足りることは少なくないと思うし、もしHTMLに埋め込まれたMMLをWebブラウザが演奏するならかなり多く使われるに違いないとすら思う。