Z-MUSICとは?
以下、どちらかというと歴史的なお話になります。
Z-MUSICとは?
Z-MUSICとは、元々 西川善司氏によって作成された、 X680x0用内蔵音源(FM音源とADPCM音源)/MIDI音源制御システムの総称です。
って書いても、X680x0という昔のパソコンをご存じない方には、 なんのことだかサッパリですよね(^^;
このあたりの歴史的な話はmuteさんのページに詳しいので、詳細はそちらに譲ります。
X680x0以外の環境向け(Windows向けとか)でのZ-MUSICはオフィシャルには発表されていません。 その予定はあったみたいなのですが、待てど暮らせど出てこない、ということで、 MIDIに特化した部分(X680x0の内蔵音源部分を除いたもの)を勝手に私が作ってしまいました。 それが zmc2とztom、 zmc3とz2m3です。
Z-MUSICにはV2とV3の2種類があります。 (昔々、V1というのも存在はしましたが、V2に完全に置き換えられています)
V2(オフィシャルな最終版はVer.2.08)は、 ゲームなどで使うためのドライバとしての機能が重視されていて、 処理が軽い代わりにあまり音楽的に高度な記述はできませんでした。
V3(最新版はVer.3.02C)は、V2をベースにより音楽的な方向への進化がはかられ、 MIDI4ポートに対応したり、より音楽的に高度な記述が可能になるなどしました。
このページで紹介しているソフトでは、 zmc2とztomがV2に対応し、 zmc3とz2m3がV3に対応します。
MMLの方言という面では、 V3はV2の上位互換です。つまり、V2のMML文法をそのままV3で使用可能です。 しかしながら、V2とV3では内部的には互換性が全く無いので、 単なるバージョン違いでなく「別物」だと思っていた方が無難です。 (なので、対応するソフトが全く異なっている、とご理解ください)
新しくZ-MUSICを始められる向きには、 (より使いやすいであろう)V3を素直に使われることをおすすめします。
zmc2/ztom, zmc3/z2m3の簡単な説明
先ほどちらっと書いたように、 zmc2とztom、 zmc3とz2m3は、 X680x0以外の環境でも動作する、Z-MUSIC互換のMML処理系です。 つまりこれを使えば、 例えばWindows上で、Z-MUSICのMML文法を用いた音楽作成を行うことができます。 元々のZ-MUSIC(オリジナル)はX680x0専用にアセンブラで記述されていましたが、 上記の互換処理系はANSI Cで記述され、 容易に他の環境へ移植が可能・・・ってのは、普通の方にはどーでもいい話ですね。 すみません。
実際、Linux/FreeBSD/Windows/BeOSなどでも動作する旨ご連絡をいただいています。 Mac向けには、 よこむむさんによる移植版をお使い頂けます。
Z-MUSICで扱うファイル形式には、 ZMSファイルというものと、ZMDファイルというものの2種類が存在します。 ZMSファイルは「Z-MUSICのSourceファイル」、ということで、 あなたがMMLを直接記述するテキストファイルのことです。 ZMDファイルは、「Z-MUSICが内部的に扱うDataファイル(バイナリ)」で、 ZMSファイルをコンパイル(変換)することで得られるファイルです。
元々のZ-MUSICは、音楽演奏時はZMDファイルしか扱うことができず、 ZMSファイルを演奏する際には内部でいちいちZMDファイルに変換していました。
zmc2とztom、 zmc3とz2m3は、 この構成を再現しており、zmc2とzmc3が ZMS→ZMD の変換(コンパイル)を担当し、 ztomとz2m3が ZMD→MID の変換(コンバート)を担当します。
普通に考えると、直接 ZMS→MID な変換(コンパイル)をする1つのソフトがあった方が使いやすいに決まっているんですが、 色々あってこのような構成になっています。ごめんなさい。
ただ実際に使用する場合は、 上記のように2つのソフトを順々に手で実行してやる必要があるのは面倒、 ということで、 親切な方がこれらのツールを便利に使うためのソフトを作ってくださっています。
- Windows向けには、 MASAさんがZEDIT [v0.5] / [v0.62] という専用エディタを作ってくださいました。 これを使えば、この専用エディタでMMLを書いた後、 MIDIファイルへの変換と演奏がそれぞれボタン一つでできるようになります。
- Windowsでxyzzyを お使いの方向けには、 M.Hiroiさんが Zmusicモードを作ってくださっています。
- Mac向けには、よこむむさんがZCoderという専用エディタを作ってくださってます。 (ZEDITライクな操作感です)
- UNIXなどでMuleをお使いの方には、 wabeeさんがzmusic-mode.elを作ってくださっています。
周辺ツールを作っていただいている方に、 この場を借りて、お礼を申し上げます。 どうもありがとうございます。大変感謝しています。
他のMML処理系と比較した場合の、Z-MUSICの特徴
以下、他のMML処理系である程度MMLに精通されている方(「違いが分かる」方)を対象に、 Z-MUSICの(私が魅力的に感じた)特徴を列挙いたします。 追加ネタ募集中。
以下、「他のMML処理系」といちいち書くのが面倒なので、 単に「他のMML」としています。
また、具体例のところでは「ある程度意味が伝わる程度に」 具体性を持たせていますが、 (Z-MUSICを除き)既存のあるMML仕様に厳密に一致させてはおりません。
フリーフォーマット
よくあるじゃないですか、1trackにつき1行なフォーマット。 実は私、これが大嫌いだったりします。
A: ......
B: .......
C: ........
(t1) ......
.......
.......
(t2) ......
従来のMMLでの、1trk 1行表記の例
Z-MUSICでの、トラック表記例
Z-MUSICでは、おおむねフリーフォーマットです。 行頭は必ずトラック名でなければならないというような制限はありません。
# なお自明ながら、Z-MUSICで1track 1行って書き方も可能です。 行頭文字が増えるのがネックですが。
ベロシティ値を先行して指定できる
Z-MUSICでは音階の記述に先立って、 ベロシティ値を先行して記述できます。 これは「見やすいMML記述」に大いに貢献しています。
例えば、ドレミファソという音階を、 それぞれベロシティ値 100,90,80,70,60で発音させたい場合、
c,,100 d,,90 e,,80 f,,70 g,,60
z100,90,80,70,60 cdefg
従来のMMLでの、ベロシティ値指定(一例)
Z-MUSICでの、ベロシティ値指定
というように、Z-MUSICではすっきりと記述できます。
一般に、凝った曲データを作成しようとすると、 どうしても1音1音ベロシティ値を変更したくなりますが、 通常MMLでこれを行うと記述が煩雑になり、 人手での管理がしづらくなるという問題がありました。 Z-MUSICでは上記のようにすっきりとした記述が可能です。
(もちろん、従来のようなぐちゃぐちゃした記述も可能です)
Z-MUSICでは、 ベロシティ値のほかにモジュレーションなどの各種コントロールチェンジ値も先行指定できます。
ちなみに、zmc3ではベロシティ指定に関してもう一段上を目指しており、
- 人間的なベロシティ値を、ある程度自動的に設定してくれる
- 自動設定でうまくいかないところのみを、個別にちょちょっと修正
といったところを検討しています。 これらが実現すればさらにMMLが見やすくなること請け合いなのですが、 まあ色々あって、お察しの通り、実装が順調に遅れています(^_^;;;
和音を素直に記述できる
一般に、よくあるMMLでは、 (PSGなどのように)制御対象音源がMONO音源だった頃の仕様を引きずっているのか、 和音の記述が煩雑になる傾向があります。
例えば、ドミソの和音を鳴らすような場合、 従来のMMLでは和音を表現したいためだけに以下のようなアクロバチックな技を強いられることがあります。
c*0& e*0& g4
c4& *p-4 e4& *p-4 g4
(t1) c4
(t2) e4
(t3) g4
従来MML TYPE1 step値=0を使う類のもの
従来MML TYPE2 タイムポインタを戻す類のもの
従来MML TYPE3 トラックごとに和音要素を分けて記述する類のもの
これに対し、Z-MUSICでは和音であることがわかりやすく、 かつすっきりと記述できます。
どうせならコード名を直接記述するくらいまで行くべきだと思っていますが、 この辺の実装にはもう少し時間をください(^_^;;;
その場その場でいくらでも子トラックを生成できる (zmc2/zmc3のみ)
例えば
'ceg'
Z-MUSICでの、和音
[back 'c1eg'] c8e8g8e8c2
とすると、(ある別トラックで)cegの和音を鳴らしながら、 c8e8..な旋律が鳴ります。 フリーフォーマットでないと「その場で」 子トラック作成というのはなかなか難しいと思います。
この書き方も言ってしまえば「裏に回す演奏の先行指定」 であり、Z-MUSICの先行指定の思想を受け継いだだけのものではありますが、 キーボードやギターなど、「コードを鳴らしながら主旋律が展開する」 類のシーケンスには絶大な威力を発揮します。
なお蛇足ながら、個人的にこの機能は、 本家Z-MUSICに対する機能拡張の中で、2番目に気に入っています。 (1番目は和音構成音の個別ベロシティ先行指定)