タグ「PMX」が付けられているもの

PMX/MusiXTeXで日本語を使えるようにした

PMXとは、TeXで楽譜を作るパッケージであるMusiXTeXを簡単に使えるようにするツールである。筆者はたまにちょっとした楽譜を書き留めたい時とかにPMXを使うのだが、楽譜のタイトルや作曲者の所に日本語を使えないので、いつも諦めてローマ字で書いていた。

しかし、最近、タイトルを日本語で書いた楽譜を書いて印刷したいことがあった。
MacのGarageBandではタイトルが日本語の楽譜を印刷できることがわかったので、最初はこれで作ろうとしたが、GarageBandで楽譜を入力するのは私にはかなり難しかった。メトロノームの音に合わせてタイミング良くソフトウェアキーボード入力(またはMIDI端子で接続した電子ピアノから入力)した後で微調整するくらいで済むならできそうだが、私にはタイミング良くキーボード入力(鍵盤入力)するのができない。
Webで探すと、pTeXを使えばMusiXTeXで日本語を出せるという情報が多数あり、pTeXはインストール済みだったので、PMXで日本語を使う方法を探すことにした。

改めて、日本語のタイトルと作曲者名を含む、

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

bt
./
Tt
For Elise(エリーゼのために)
%"Für Elise"とするとドイツ語フォント問題が加わる
Tc
Ludwig van Beethoven(ベートーベン)
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 /

このようなソースコード(test.pmx)を作り、

pmxab test
musixtex test

としてできたPDFを見ると、やはり日本語フォントが出ず、ひらがなとカタカナ部分が消失した。

使用した環境は、Ubuntu系のOSで、apt-getでtexlive-musicとtexlive-lang-japaneseをインストールしたもので、PMXとMusiXTeXのバージョンはそれぞれ2.7.4と0.16、platexやeuptexでは普通に日本語が出る。

Webの情報を頼りに、

pmxab test
euptex test
musixflx test
euptex test
dvipdf test

としてみる(musixtexコマンドはetex, musixfix, etex, dvips, ps2pdfを順に実行するのと等価らしいので、実質etexをeuptexに変えただけ)と、日本語が出たが、日本語のフォントが小さくなった。

これはhttp://kuuku.no.coocan.jp/pub/musixtex/font/index.htmlに答えが書かれており、PMXが悪さをしているらしい。
同ページにて過去のpTeX用の、この問題を解決するマクロ(musixjfn-20080801.tar.gz内のmusixjfn.tex)が提供されているので、これを拾って、test.texの"\input musixtex"の次に"\input musixjfn"を追加してみたら、dvipdfで"dvips: ! invalid char 65288 from font jis"というエラーになった(65288=FF08hは「(」のUnicode)。

upTeXの既定の横書和文フォントのTFM名は
明朝: upjisr-h
ゴシック: upjisg-h
らしいので、musixjfn.texの中身を
jis → upjisr-h
jisg → upjisg-h
と置換してやり直すと、日本語フォントが大きくなった。

これで成功だが、pmxabが出力した.texファイルを編集しないといけないのでは、pmxabを実行する度に.texファイルの編集が必要になり、面倒である。PMXのドキュメント(pmx274.pdf)の"Putting TeX Commands into the PMX File"の所に、\\で始めると.texの上の方に埋め込まれると書かれているので、PMXのソースコードを次のようにしてみると、出力された.tex内の"\input musixjfn"の場所はだいぶ下になったが、上の画像と同じ、望み通りの結果が得られた。

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

bt
./

%日本語フォントのサイズを修正する
\\input musixjfn\

Tt
For Elise(エリーゼのために)
Tc
Ludwig van Beethoven(ベートーベン)
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で楽譜作成

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で楽譜を作る。何とエレガントな響きであることか。