• R/O
  • HTTP
  • SSH
  • HTTPS

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

private knowhow


File Info

Rev. 40901d4de83c5f5e08ebff7dfd1f905fb667dae1
大小 493,830 字节
时间 2024-11-04 23:14:31
作者 hyperoga
Log Message

add trouble shoot

Content


{ -- ZM0.MAN ------------------------------------------------
ZMUSIC SYSTEM MANUAL ('93/10/04)

			まえがき

  初版発売後、読者の皆さんから寄せられたご意見・要望の数々。

それらを可能な限り取り入れて再構成されたのが今回のバージョンです。

ずいぶんと新機能が追加されましたので、前バージョン以上に

マニアックなものになりました。最初から全部の機能を使いこなそうとは思わず、

人の演奏データを聴いたり、打ち込んだり、既存データのアレンジなどを

したりしつつ、徐々にZMUSICに慣れていって下さい。

  では、ZMUSICがあなたの発想のペンに、

X68kがキャンバスになりえますように。

						   西川善司

マニュアルデバッグ協力(敬称略):NOVA,ぽぜ,M.ODAKI,LastTear,ゆきごん,あほみ他


{ -- ZM1.MAN ------------------------------------------------
	    MEASURE  1
		イントロダクション


  ここではZMUSICシステムの概要を簡単に説明します。









1.1.  はじめに


  コンピュータミュージックを楽しむには幾つかの方法があります。

1.  実際に弾いたものをコンピュータ、シーケンサのメモリに記憶しておくもの

2.  コンピュータ、シーケンサのメモリに直接演奏データを書き込んでいくもの

3.  1. と2. の複合的な方法

などです。2.はコンピュータのキーボードを叩くことから「打ち込み」と

呼ばれます。3.はつまり、人間が弾いたものを後でコンピュータを用いて

修正するといったものです。

  ちょっと昔までは3.の方法が圧倒的にメジャーでしたが、音源の進歩と

ミュージック・ツールの進化により最近は2.の方法もメジャー化してきています。

最近は譜面も起こさずに直接「打ち込み」を始める作曲者も少なくないようですし、

スタジオのマニピュレータ(平たくいえば打ち込み人)の中には実際に弾いた

ものよりも人間臭さを表現する人もいるとききます。

  さて、本書でお話しするのは2.の方法です。2.の方法の魅力といえば、

自分が楽器の演奏が出来なくてもイメージ通りの演奏が可能という点でしょう。

さらに、一度仕上げた曲は、ディスクなどの記憶装置に保存しておけばいつでも

再現可能というのもこの方法の魅力です。

  打ち込みの方法にも実は色々な方法があります。一番原始的なものとしては

完全な数値入力です。音階、発音時間、など全てをこまごまと入力していくものです。

最近は「ステップ入力」と呼ばれます。数年前にMZやPC8001用に出ていた

ローランドCMU800シリーズはこの方法でした。これを進化させものが

譜面入力による「打ち込み」です。要するに五線譜に音符を置いていくタイプの

ものですね。楽器の演奏はおろか譜面を読むことが出来ない人にでも簡単に音楽を

作ることが出来るため初心者層には圧倒的な人気を誇ります。また印刷機能が

充実していれば美しい譜面を得ることが出来ますので、プロでもこのタイプを

使っている人が多くいます。

  さて、「ZMUSIC」では現在(注)MMLという「打ち込み」方式を

採用しています。これはいわば「音楽記述言語」というもので

「音楽をプログラム」するというイメージが正しいでしょう。完全な数値入力よりは

ずっとドキュメント性が高い上、入力する量も少ないのでパソコンを基盤として

音楽を楽しむ人にはピッタリのものといえます。欠点としては、小中学校程度の

音楽知識が必要なこと、ある程度コンピュータを扱える人(DIRやCOPYが

分かればOK!)でないと駄目なこと、ドキュメント性が譜面入力よりは低いこと、

などです。まあ、ドレミが読めて、ディスクをフォーマットしたことが

あれば素質十分です。

  MMLの利点としては、慣れればあらゆる方式よりも高速に一曲を仕上げることが

出来ること、細かいニュアンスなどに凝ることが出来るなどが挙げられます。

また、移植性が高い点も見逃せません。殆ど方言のような感覚で他の機種の

演奏データや他の音楽ドライバ用のデータを、自分の使っているMMLに

修正利用することが出来るのです。

  さあ、「ZMUSIC」を懸け橋にしてあなたもコンピュータ・ミュージックの

世界に浸りませんか。

(注)今後、違った入力方式に対応した支援プログラムが発表されれば、

別の入力方式(例えば譜面入力方式)も可能です。


1.2.  ZMUSIC.Xとは


  ZMUSIC.XとはX68k本体付属のOPMDRV.Xを改造したりするもの

ではなく、全く新しくゼロから開発されたミュージックプログラム開発言語です。

X68kの内蔵音源であるFM音源8声とADPCM1声(PCM8.X  (C) H.ETOHを

使用すれば8声まで)、MIDIインターフェースが接続されていれば

MIDI楽器も同時にコントロールする事が出来ます。

  一般の他のドライバでは1つのMIDI楽器をX68kの外部音源という感じで

扱っていましたが「ZMUSIC.X」ではX68kをホストに複数の

MIDI楽器をコントロールする事が出来るように設計されているのでどんどん

自分のMIDIシステムを広げていくことが可能です。

  ここでZMUSIC.Xの特長を列挙してみます。

1.  OPMDRV.Xに上位コンパチ

2.  FM音源,ADPCM,MIDI楽器を同時に演奏可能

3.  もちろんMIDI楽器を持っていない人でも多彩なコマンドを内蔵音源に
      対して使用可能

4.  汎用トラックを80本持ち、その内最大32トラックを同時に演奏可能

5.  ADPCMを音階MMLでコントロール可能。独自のADPCMドライバ搭載

6.  ポルタメントやオートベンド、和音やLFOなどの特殊コマンド系が
      FM/MIDIの両方で使用可能

7.  ADPCMコンフィギュレーションファイルで、ADPCMデータの音程と
      ボリュームが変更可能。合成、エンベロープの変更も可能

8.  任意の時間に演奏中の任意のトラックに任意の演奏データを割り込ませて
      演奏することが可能(効果音モード)

9.  演奏処理がOPMDRV.Xの平均3倍以上高速。さらにテンポずれが
      起こりにくい設計

10.MT32の他にU220/M1/SC55等に対応した楽器個別の
      コマンドを装備

11.MIDI楽器側の音色や設定をファイルに吸い出す機能を装備

12,オブジェクトレベルの演奏データを得ることが可能(コンパイル機能)

13.あらゆる命令が機械語レベルで操作可能。ゲーム等のBGMドライバとして
      威力を発揮

14.専用A/Dコンバータによってサンプリングされた高音質のADPCMデータ
      ライブラリの標準装備

15.全情報公開。ライセンスフリー

16.PCM8.X  (C)江藤  啓に完全対応。ADPCM音を最大同時に8声まで
      シーケンス可能

17.複数のX68000による同期演奏

とまあ、大袈裟なところもありますがこんな感じてす。

  同人ソフトなどの製作者やグループにとっては8, 9, 12, 13, 15辺りが

魅力でしょうか。



1.3.  著作権について


  法律上、日本では著作権の放棄ができませんので、著作権は作者西川善司に

保留されます。しかし、プログラムの性質上、「ZMUSIC.X」のオリジナルを

開発した私西川善司は「ZMUSIC.X」及びこれらを支援するプログラム

(サブルーチンを含む)全ての使用権に関するライセンス権を放棄します。

よってとくに断らずに商的利用が出来ます。つまり市販だろうが同人だろうが勝手に

「ZMUSIC.X」を組み込んだソフトを売ってもいいということです。

  ただし、一つだけ守って欲しいことがあります。それは「ZMUSIC.X」の

改造についてです。改造は勿論各自に自由で行って構わないのですが、

データの完全な互換性が保持されないような改造を施した際には

バージョンID番号を$F0以上にして欲しいのです(オリジナルは$20です。

ソースリストZMSC.HAS参照)。また、オリジナルのZMUSIC.Xで演奏できない

データフォーマットにした場合はファイルの拡張子も変更しておいて下さい。

これは混乱を防止するためです。今後のバージョンアップ版との兼ね合いも

ありますし、とにかく改造を施したものではオリジナルバージョン用のデータを

頭っからはじいて欲しいのです。是非ご協力下さい。

  移植に関しても自由に行って構いません(ただし、完全にコンパチでない場合は

バージョン番号をやはり$F0以上にして下さい)。移植版をOh!X編集部へ

送ってくれればUSER’S  WORK等のコーナーで紹介したいと思います。


1.4.  ZMUSIC.Xの概要(ZMD,ZMSとは)


  ZMUSIC.X上で演奏するデータを作るためには2通りの開発方法が

あります。

  1つは「MUSICZ.FNC」を組み込んだX−BASIC上で

開発する方法です(MEASURE3参照)。基本的には「MUSICZ.FNC」に

設けられたZMUSIC.X制御命令を記述していくことにより演奏プログラムを

作成していきます。同じ処理を繰り返したい時は「for〜next」、条件分岐を

させたいなら「if 〜 then 〜」…‥というようにX−BASICに用意された

多彩な命令を折り混ぜて開発を行うことができます。また、文字変数などを

うまく使えば少ない手間で長い曲も作れそうです。さらに、曲データ以外の

音楽関係のツール、たとえば音色エディタ等も作ることができるでしょう。

  2番目の方法はCOMMAND.X上からエディタを使ってMMLファイルを作成する

方式です(MEASURE4参照)。ZMUSICシステムではこのMMLファイルを、

拡張子'.ZMS'を付けることを前提に特にZMSファイルと呼ぶことにします。

この形式ではZMSコマンド(MEASURE4参照)と呼ばれるZMUSIC.X制御命令を

一行一行に記述していくことで演奏プログラムを作成していきます。

X−BASICのような制御文はないので一見開発が不便そうですが、

エディタに備えられたマクロ機能や複写機能を駆使すればBASIC以上の

開発環境になりえます。また、X−BASICで作られた演奏プログラムも

このZMSファイルに変換することができます。これには'm_switch()'命令を

使用します(MEASURE3参照)。

  実はX−BASICで記述された演奏プログラム、エディタによって記述された

ZMSファイルがZMUSIC.Xへ受け渡されるとZMUSIC.Xは内部で

$47,$30,$30…のような16進数のデータ列で構成されたオブジェクトに変換しています。

演奏しながらいちいち命令語を認識していたのでは処理が追い付きませんから、演奏直前に

必要な計算を全て済ませてしまうわけです。X−BASICで記述された

演奏プログラム、エディタによって記述されたZMSファイルを演奏する時、

ほんの一瞬ですが待たされますが、この時そのオブジェクト・データへ変換して

いるのです。ZMUSICシステムではこのオブジェクト・データを特に

ZMDデータと呼ぶことにします。

  通常はZMDデータを意識する必要はないのですが、あえてこのZMDデータを

取り出す方法があります。ZMUSIC.Xに備わっているコンパイル機能がそれです。

具体的には

A>zmusic -c ZMSファイル名

のようにします(ZMUSIC.XはアセンブラやCコンパイラのようにも機能します)。

するとZMSファイルの主ファイル名に拡張子'.ZMD'を添付したファイルが

生成されます。これをZMUSICシステムでは特にZMDファイルと呼びます。

  このZMDファイルも演奏可能で、その際は当然ZMDデータに変換する作業が

ありませんので全く待たされずに演奏が開始されます。高速応答が要求される場合

(たとえば自作ゲームに曲を入れる場合など)は演奏データをZMDデータで

管理した方がよいでしょう。ただし、データや環境の変更が困難ですので、

音楽データの配布を目的とした場合はZMDデータ形式は避けるべきです。

{ -- ZM2.MAN ------------------------------------------------
	    MEASURE  2
     ZMUSIC.Xのオプション・スイッチ解説


  ここではZMUSIC.Xのコマンドオプションについて解説します。







2.1.  はじめに


  ZMUSIC.Xというプログラムには大きく分けて2つの機能が

ある。1つはシステムに常駐して音楽演奏をする機能、もう1つは前章で

述べたZMDファイルの生成機能である。よってZMUSIC.Xの

コマンドオプション/コマンドスイッチも大きく2つの機能に分けられる。

1つは常駐する際のパラメータとしての機能、もう1つは演奏データを

コンパイルする際にこれを支援するものである。

  各スイッチは「/」「−」の後ろにこれから解説するコマンドスイッチの

アルファベットを記述し、さらに必要であればその直後に数値等のパラメータを

記述することによって指定する。具体的には

A>zmusic −または/[各スイッチの英数字][パラメータ]

のようになる。スイッチは(例外を除いて)順不同でいくつでも記述することが

できる。また、

A>zmusic -h  または  -?

でコマンドスイッチの簡単な説明を見ることができる。

  それではそれぞれのスイッチを解説することにする。


2.2.  ドライバ組み込み時のスイッチ


−A

    割り込みにタイマAを使用する。デフォルトではタイマBを使用する。

  タイマAはテンポ77から300までを有効範囲とし、かなり正確なテンポを

  キープ出来る。外部シーケンサ/リズムマシンとの同期演奏にはこちらの

  モードを勧める。

  よく分からない人は特に設定する必要はない。


−Bファイルネーム

    ADPCMブロックデータ(ZPDデータ)をドライバ起動時に読み込む。

  後述の'−P'スイッチでADPCMバッファのサイズを指定していない場合は自動的に

  そのブロックデータのサイズがバッファサイズになる。ファイルネームの

  拡張子を省略すると自動的に'.ZPD'が添付される(MEASURE6参照)。


−E

    外部シーケンサ/リズムマシンとの同期演奏を行う。X68kをホストにした

  MUSICシステムならばこのスイッチは設定する必要はない。複数のX68kを

 同期させて演奏させるにはこのスイッチを設定すること。

  具体的には、演奏開始時にスタートメッセージ$FA、演奏再開時にコンティニュー

  メッセージ$FB、演奏停止時にストップメッセージ$FCを送信するようになる。

  また、演奏データ中で指定したテンポに合わせてタイミングクロック$F8を

  送信する。


−G

    ZMUSIC.X起動時にロゴや常駐を報告するメッセージを表示しない。


−M

    MFPの多重割り込み対応モードにする。ラスタースクロール等の処理を

  ジャマしない。高度な割り込みを駆使したアプリケーションと併用する場合には

  このスイッチを指定すると良いだろう。通常やよく意味の分からない人は

  設定する必要は全くない。


−N

    初期化なしモードにする。このスイッチを指定してZMUSIC.Xを

  常駐させると以後、演奏データの変り目等で楽器等やワークの初期化を

  行わない。これはゲーム等のBGMを機械語レベルで演奏する時に

  曲の変り目の処理を軽くするためのものである。通常は設定する必要は

  ない。


−On

    PCM8.Xが先に組み込んであることが前提のスイッチ。従来の

  ADPCM1声の曲データをPCM8.Xを用いてむりやりポリフォニックで

  鳴らしてしまおうというものである。ただし、本来のPCM8モードとは

  違うものなので注意すること(2.5.参照)。パラメータのnは音楽演奏に8声ある

  ADPCMチャンネルを何声音楽用に確保するかを設定するものである。

  nは1≦n≦8でn省略時は自動的にn=8が採択される。余ったチャンネル数は

  効果音専用とみなして音楽演奏には使用しない。例えば

  A>zmusic -o6

  とした場合、BGM演奏用にチャンネル1〜6をBGM専用にし

  チャンネル7,8を効果音専用とする。


−Pn

    ADPCMデータバッファとしてnキロバイト確保する。'−P'スイッチを

  設定しないとADPCMバッファサイズは256となる。0と設定した場合は、

  ADPCMに関係するコマンドは無効になる(MEASURE6参照)。


−R

    常駐しているZMUSIC.Xをシステムから削除する。コマンドラインから

  常駐させた場合のみ有効で'CONFIG.SYS'から'DEVICE='で組み込んだ場合は

  常駐解除はできない。


−Sファイルネーム

    MIDIのダンプデータ、ADPCMデータのコンフィギュレーションファイル

  などのセットアップファイルを読み込みドライバ起動時に実行する。

  ADPCMコンフィギュレーションファイル中、データの加工を行うように

  設定してある場合には必要分のワークを確保しないといけない(MEASURE6参照)。

  ファイルネームは拡張子等の省略は認められず、さらにMIDIダンプデータは

  拡張子'.MDD'の時のみ有効である。

    さて、ここに演奏データのファイル名を書けばドライバ起動時に曲を演奏させる

  ことも可能。もちろんその際、ADPCMを使用していたりするならば

  それらに関係するバッファも確保しなければならない。

  例

  A>zmusic -bdrum.zpd -w30 -p100 -s music.zmd


−Tn
#n

    トラックバッファをnキロバイト確保する。デフォルトでは128キロバイト確保する。

  サイズの大きいデータを演奏する際には状況に応じて設定すべきである。


−Wn

    ワークエリアとしてnキロバイト確保する。ワークエリアはADPCMデータの加工や

  コンフィギュレーションファイルのバッファ、MIDI楽器の設定の取り込み用

  バッファ、波形メモリバッファと多目的に使用されるため、作業内容に応じて

  設定すべきである。ADPCMのデータ加工用のワークとして設定する場合の目安は、

  加工するデータのうち最長のものの長さを4倍した大きさである。


−Xn

    EOX(エンド・オブ・エクスクルーシブ)メッセージを送った後、

     n  
    ──
     60  秒

  のウェイトを与える。デフォルトは3で通常は設定する必要はないが、

  極端に応答の遅いMIDI楽器に対しては設定するとよい(U110/220,D70…など)。


2.3.  CONFIG.SYSからの組み込み


  ZMUSIC.Xはデバイスドライバでもあるので、もちろん

CONFIG.SYSから組み込むことが出来る。書式は他のデバイスドライバ

同様に

DEVICE=ZMUSIC.X  オプションスイッチ…

のようにする。

  また

DEVICE=ZMUSIC.X -s曲ファイル名

  のようにすればデバイスドライバ組み込み時から曲を流すことが出来る。

もちろん演奏に必要なバッファは取る必要がある。


2.4.  コンパイル支援系


−C ファイルネーム1  ファイルネーム2

 
   ファイルネーム1をコンパイルし生成されるオブシェクトをファイルネーム2で

  セーブする。ファイルネーム2は省略可能で省略時はファイルネーム1に

  拡張子'.ZMD'を付けたファイルネームでセーブされる。

  例

  A>zmusic -c music.opm   →   music.ZMD

    この’−C’スイッチは必ずコマンドラインの最後に書かなければならない。

  '−C'スイッチの後ろに書かれたスイッチは無視される。

  例

  A>zmusic -c music.opm -w100  ←'-w100'は無視される。

  また、大文字の’C’でこのスイッチを設定した場合は最適化処理

  (空トラックの削除処理)を行なわずに動作を行なう。


−Q ファイルネーム1  ファイルネーム2

    コンパイル後その演奏データのトータルステップカウントを計算する。

  MML命令[do]〜[loop]以外(例えば[coda]〜[tocoda]など)を用いて無限ループを

  構成していると半永久的に計算を繰り返してしまうので注意。チェックサム的な

  役割を果たすためOh!Xなどの雑誌メディアに投稿する際はこのトータルステップ

  カウントを原稿等に添えること。


−Tn
#n

    トラックバッファを確保する。デフォルトで128キロバイト確保するが

  コンパイル中'out of memory'が出た時設定すると良いだろう。常駐時と

  同じイメージでコンパイルが行えるよう敢えてこういう仕様にした。


−Wn

    コンパイルされたデータを整理する際にこのエリアを使用する。デフォルトで

  128キロバイト確保しているので殆どの場合は設定する必要はない。

  極端に長い曲をコンパイルする際には設定の必要がある。


2.5.  PCM8.Xモードについて


  PCM8.Xとは江藤  啓氏により作成されたX68k本体の改造をせずに

ADPCM音を8和音までリアルタイムに発音できるアプリケーションである。

このPCM8.Xを事前に組み込んでからZMUSIC.Xを組み込むと

ZMUSIC.Xは自動的にPCM8.Xモードで動作する。

ZMUSIC.Xを組み込んだ後にPCM8.Xを組み込むことはできない(

エラーが発生する)。

  さて、ZMUSIC.XのPCM8モードには2通りある。

  1つはADPCM音源を8つのほぼ独立したチャンネルとして使用する

モードである。このモードにするにはZMUSIC.Xを組み込む時に特別な

スイッチ等を設定する必要はない。このモードを特にPCM8独立チャンネル

モードと呼ぶことにする。

  もう1つはPCM8.Xを組み込んだあと'−O'スイッチをつけて

ZMUSIC.Xを組み込むと設定されるモードである。これは

PCM8.X用ではない曲、つまりADPCM1声用の曲データのADPCM音を

むりやりポリフォニックに演奏するモードである。例えばシンバルを

叩いた後このシンバルが鳴り終らないうちにスネアを叩いたとすると、

ADPCM1声の従来の曲ではシンバルの音がブツリと切れてスネアの音に

切り替わっていた。ここをブツ切りにしないで(PCM8.Xを用いて)

ちゃんと前後の音を重ねて演奏してしまおうというのがこのモードである。

このモードはPCM8ポリモードと呼ぶことする。

  PCM8独立チャンネルモード時の具体的な操作方法に関しては後述する。


2.6.  3タイプのZMUSIC.X


 ZMUSICには

●シャープ純正(または互換)のMIDIインターフェースに対応した標準的な

UNIVERSALバージョン

●RS232Cポートを使ってMIDI出力を行うRS232Cバージョン

●ネオ・コンピュータ・システム(NCS)製のサブボード、ポリフォンを使用して

MIDI出力を行うPOLYPHONバージョン

の3つのタイプが存在する。

  3タイプとも内蔵音源(FM音源、ADPCM音源)の制御部分は、全く同じ

プログラムで構成されており、違うのはMIDI出力に関する点のみである。

3タイプともX68000/X68030の両方に対応している。

●RS232Cバージョン

  RS232CバージョンはX68本体後面パネルのRS232C端子に市販の

RS232C−MIDIアダプタ(例:COME ON MUSIC製 MA01 ¥10,000)を装着し、

これを使用してMIDI制御を行うZMUSICである。標準のUNIVERSAL

バージョンとは以下の相違点がある。

・MIDI出力の処理速度がUNIVERSALバージョンと比べて少し遅い。

・純正MIDIインターフェース・ボードを装着していてもRS232C−MIDIを

強制的に選択する。

・外部同期モード(オプション'-E')がない。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃			RS232C版の注意				      ┃
┃									      ┃
┃  RS232C版はRS232C関連の割り込みベクタ等を占有する	      ┃
┃									      ┃
┃アプリケーションとは共存できません。(RSDRV.SYSなど)			      ┃
┃									      ┃
┃  ベクタが占有されている時は						      ┃
┃									      ┃
┃The interrupt-vector has already been occupied by some other applications.  ┃
┃									      ┃
┃というエラーメッセージが表示され、ZMUSICは起動されません。	      ┃
┃									      ┃
┃ベクタを占有しているアプリケーションを一度解除してからもう一度	      ┃
┃									      ┃
┃ZMUSICを起動してください。					      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

●POLYPHONバージョン

  POLYPHONバージョンはサブボード「ポリフォン」をポリフォンに同梱の

プログラム「PCM8SB.X」で制御し、MIDI出力を行うZMUSICである。

ZMUSICの組み込みよりも先にポリフォンに同梱のプログラム「PCM8SB.X」を

組み込まなくてはMIDI制御が行えない。PCM8SB.Xを組み込まずにZMUSIC

のみを組み込んだ場合は内蔵音源の制御のみ可能となる。標準のUNIVERSAL

バージョンとは以下の相違点がある。

・MIDI出力の処理速度がUNIVERSALバージョンと比べて少し遅い。

・MIDIインターフェース・ボードを装着していてもPOLYPHON−MIDIを

強制的に選択する。

・ポリフォン−MIDIによるMIDI−INはサポートされない。

・外部同期モード(オプション'-E')がない。


2.7. 機能縮小版ZMSC.X


  MMLコンパイル処理部分などを省いたZMD再生専用のZMUSICが、

ZMSC.Xである。ZMSを扱う機能は全く持っていないため、ZMSファイルを

演奏したりすることはできない。しかし、常駐サイズはZMUSIC.Xの半分程度で

済むため、ゲームやその他のアプリケーションから使用する場合には適している。

  ZMUSIC.X同様にUNIVERSALバージョン、RS232Cバージョン、

POLYPHONバージョンの3タイプがある。

 以下にZMUSIC.XとZMSC.Xとの相違点を述べる。

・ファンクション$01 m_alloc
  ファンクション$02 m_assign
  ファンクション$03 m_vget
  ファンクション$06 m_trk
  ファンクション$07 m_free
  ファンクション$3e set_fm_master_vol

はなんの機能も実行しない(削除されている)。

  ファンクション$3c get_play_workは、戻り値のd0.lが意味をなさなくなる

(a0.lにはZMUSIC.X同様の正しい戻り値を返す)。

・ファイル名'OPM'への出力による制御も行なえるが、ZMDまたはZPD以外を

出力した場合は何の機能も実行しない(ZMSコマンドの使用もできない)。

・ファイル名'MIDI'によるMIDI楽器のデータ吸い取り機能はそのまま使用できる。

MDDの転送も行なえる。

・IOCS	_OPMDRVによるコントロールはできない。TRAP #3でのみファンクション

コールを実行できる。

・ZMDの演奏やZPDの変更登録はZMUSIC.X同様にZP.Rで行なえる。

ただし、ZMSの再生は行なえない。

・MUSICZ.FNCは使用できるが

'm_alloc'
'm_assign'
'm_vget'
'm_trk'
'm_trk2'
'm_free'
'fm_master'
'm_debug'

は、なんの機能も実行しない(削除されている)。

・デフォルトでトラックバッファを32キロバイト、ワークエリアを0キロバイト、

ADPCMバッファを256キロバイト確保して常駐する。ZMUSIC.Xとは

デフォルトが違うので注意すること。
{ -- ZM3.MAN ------------------------------------------------
	    MEASURE  3
	X−BASIC用外部関数MUSICZ.FNC


  X68k本体付属のBASIC「X−BASIC」からZMUSICを

使う方法について述べます。









3.1.  はじめに


  BASICからZMUSICを使うには外部関数「MUSICZ.FNC」を

組み込んだX−BASICを起動しなければならない。具体的には、

BASICディレクトリ中のBASIC.CNFの内容のうち

	FUNC=MUSIC

の部分を

	FUNC=MUSICZ

のように変更し、さらにこのディレクトリにMUSICZ.FNCをコピーする。そして

	A>basic

でX−BASICを起動すればよい。しかし、各自のシステムの環境によっては

多少の食い違いもあるのでよく分からない人は「BASICマニュアル」を参照すること。

  また、1990年10月号のOh!Xに発表された「ZMUSIC.FNC」とは

全く無関係である。このZMUSICシステムは「ZMUSIC.FNC」とは

全く関係ない。互換性もない。

  MEASURE1で述べたようにZMUSIC.Xは一部を除いて

X68k本体付属の「OPMDRV.X」と「MUSIC.FNC」との互換性を

保っている。このことからMUSICZ.FNCのコマンドの一部は

MUSIC.FNCのものと仕様が同じである。そのため、ここでは

「X−BASICマニュアル」にあるコマンドも重複して説明がなされている。

しかし、MUSICZ.FNCでは仕様が拡張変更されたものもあるので

注意すること。

  また、従来のMUSIC.FNCでもZMUSICは操作可能である。

その場合もちろんZMUSIC.Xの100%の性能を発揮することは出来ない。

逆にMUSICZ.FNCでOPMDRV.Xは操作出来ないので注意すること。


3.2.  コマンドの使用にあたっての注意


  MIDI楽器専用のコマンドは場合によっては楽器のメモリを書き換える。

よく楽器側のマニュアルを読んでから実行すること。楽器側に大切なデータが

存在する場合は、楽器のメモリをファイルに保存しておくとよい(MEASURE9参照)。


3.3.  MUSICZ.FNC命令一覧


●初期化
--------------------------------------------------------------------------------
関数名  m_init()

機能    音源の初期化、ドライバのワークの初期化

引数    なし

戻り値  なし

備考    MIDIボード装着時MIDI楽器に対して以下のコマンドメッセージを送出する。
    	システムリセット($FF)
	リセットオールコントローラーズ($Bn,$79,$00)
	オムニモードオン($Bn,7D,$00)
	モノモードオフ($Bn,$7F,$00)
	ローカルオン($Bn,$7A,$7F)
	マスターチューン・微調整=中央($Bn,$65,$00,$Bn,$64,$01,$Bn,$06,$40,$Bn,$26,$00)
	マスターチューン・コース=中央($Bn,$65,$00,$Bn,$64,$02,$BN,$06,$40)
--------------------------------------------------------------------------------
関数名  m_count(n)

機能    全音符の絶対音長指定

引数    n=全音符の絶対音長(char:1≦n≦254)

戻り値  なし

備考    'm_init()'でデフォルト値である192が設定される。
	通常は設定する必要無し。
	ゲーム用のBGM等を作成する時など、割り込み回数を減らす目的で使うとよい。
	192, 144, 128, 96といった数値が一般的。
--------------------------------------------------------------------------------
●トラック確保/チャンネルアサイン
--------------------------------------------------------------------------------
関数名  m_alloc(tr,size)

機能    トラックバッファの確保

引数    tr:トラック番号(char:1〜80)
	size:バッファサイズ(int:100〜65535)

戻り値  なし
--------------------------------------------------------------------------------
関数名  m_assign(ch,tr)

機能    チャンネル番号chをトラック番号trに割り当てる

引数    ch:チャンネル番号(char:1〜32)
	tr:トラック番号(char:1〜80)

戻り値  なし

備考    複数のトラックを1つのチャンネルに割り当てることも出来る。
	チャンネル番号は後述の'm_ch()'コマンドによって対象デバイスが変化する
	ただし、PCM8.X組み込み時は'm_ch()'によらずチャンネル番号26〜32が
	ADPCM2〜8になる。
--------------------------------------------------------------------------------
関数名  m_assign2(ch,tr)

機能    チャンネル番号chをトラック番号trに割り当てる

引数    ch:チャンネル番号(str:"FM1〜8","MIDI1〜16","ADPCM","ADPCM1〜8")
	tr:トラック番号(char:1〜80)

戻り値  なし

備考    1つのチャンネルを複数のトラックに割り当てることが出来る。

例      m_assign2(1,"fm1")
	m_assign2(1,"midi10")
	"adpcm2〜8"が実用できるのはPCM8モード時のみである。
--------------------------------------------------------------------------------
関数名  m_ch(dv)

機能    ベースチャンネルを変更する

引数    dv:デバイス名(str:"FM" or "MIDI")

戻り値  なし

備考    "FM"を設定するとチャンネル番号1〜8がFM音源, 9がADPCMチャンネル1
	10〜25がMIDIになる。
	"MIDI"を設定するとチャンネル番号1〜16がMIDI17〜24がFM音源, 
	25がADPCMチャンネル1になる
	また、PCM8.X組み込み時は'm_ch()'によらずチャンネル番号26〜32が
	ADPCM2〜8になる。

例      m_ch("midi")
	m_ch("fm")
--------------------------------------------------------------------------------
関数名  m_free(tr)

機能    トラックバッファのフリーエリアを得る

引数    tr=トラック番号(char:1〜80)

戻り値  int
--------------------------------------------------------------------------------
●演奏制御
--------------------------------------------------------------------------------
関数名  m_play(tr1,tr2,…,tr10)

機能    演奏の開始

引数    tr1〜10:トラック番号(char:1〜80)
	全て省略すると全トラックを演奏する

戻り値  なし
--------------------------------------------------------------------------------
関数名  m_stop(tr1,tr2,…,tr10)

機能    演奏の停止

引数    tr1〜10:トラック番号(char:1〜80)
	全て省略すると全トラックの演奏を停止する

戻り値  なし
--------------------------------------------------------------------------------
関数名  m_cont(tr1,tr2,…,tr10)

機能    演奏の再開

引数    tr1〜10:トラック番号(char:1〜80)
	全て省略すると全トラックの演奏を再開する

戻り値  なし
--------------------------------------------------------------------------------
関数名  m_solo(ch1,ch2,…ch10)

機能    演奏チャンネルのマスク(その1)

引数    ch1〜10=チャンネル番号(char)

戻り値  なし

備考    指定したチャンネルのみを演奏しそれ以外のチャンネル演奏を一時停止する。
	演奏中に実行可能。またパラメータを省略し
	m_solo()
	とすると通常演奏に戻る。
	m_ch("FM")の時はチャンネル番号1〜8がFM音源,9がADPCMチャンネル1
	10〜25がMIDIに対応する。
	m_ch("MIDI")の時はチャンネル番号1〜16がMIDI,17〜24がFM音源,
	25がADPCMチャンネル1に対応する。
	また、PCM8.X組み込み時は'm_ch()'によらずチャンネル番号26〜32が
	ADPCM2〜8に対応する。
	  演奏が停止したトラックも内部処理は続行するため、マスクを解除した時は
	他のトラックに遅れを取らずに何事も無かったように演奏が再開される。
	ただし、このコマンド実行時は効果音モードが正常に動作しない。
------------------------------------------------------------------------------
関数名  m_mute(ch1,ch2,…ch10)

機能    演奏チャンネルのマスク(その2)

引数    ch1〜10=チャンネル番号(char)

戻り値  なし

備考    指定したチャンネルの演奏を一時停止し、それ以外のチャンネルは通常に
	演奏を行う。演奏中に実行可能。またパラメータを省略し
	m_mute()
	とすると通常演奏に戻る。
	m_ch("FM")の時はチャンネル番号1〜8がFM音源,9がADPCMチャンネル1
	10〜25がMIDIに対応する。
	m_ch("MIDI")の時はチャンネル番号1〜16がMIDI,17〜24がFM音源,
	25がADPCMチャンネル1に対応する
	また、PCM8.X組み込み時は'm_ch()'によらずチャンネル番号26〜32が
	ADPCM2〜8に対応する。
	  演奏が停止したトラックも内部処理は続行するため、マスクを解除した時は
	他のトラックに遅れを取らずに何事も無かったように演奏が再開される。
	ただし、このコマンド実行時は効果音モードが正常に動作しない。
--------------------------------------------------------------------------------
関数名  m_fadeout(spd)

機能    演奏中のデータをフェードアウト/インする

引数    spd=フェードアウト/イン・スピード(int:−85〜85)

戻り値  なし

備考    spdを省略するとデフォルト値16が設定される。
	spdは正値がフェードアウト、負値がフェードインの指定となる。
	絶対値が大きいほど音量の増減スピードは速くなる。
--------------------------------------------------------------------------------
関数名  m_stat(ch)

機能    演奏状態のチェック

引数    チャンネル番号(char:1〜25)  (注1)
	全て省略すると全チャンネルの演奏状態をチェック出来る

戻り値  int
	チャンネル番号を指定した場合、そのチャンネルが演奏中ならば1、
	演奏中でないなら0。チャンネル番号を省略した場合は演奏中の
	チャンネル番号に対応したビットが1に、演奏していないチャンネル番号に
	対応したビットが0になる。
	m_ch("FM")の場合はビット0〜7がFMチャンネル1〜8に、ビット8が
	ADPCMチャンネル1に、ビット9〜24がMIDIチャンネル1〜16に
	対応する。
	  m_ch("MIDI")の場合はビット0〜15がMIDIチャンネル1〜16に
	ビット16〜23がFMチャンネル1〜8に、ビット24が
	ADPCMチャンネル1に対応する。
	また、PCM8.Xを組み込み時には'm_ch()'によらずビット25〜31が
	ADPCM2〜8チャンネルに対応する。
--------------------------------------------------------------------------------
●開発補助
--------------------------------------------------------------------------------
関数名  m_debug(sw)

機能    MMLの'[@]','[!]','[end]'コマンドの有効/無効化

引数    sw=数値(char:0=off,nz=on)

戻り値  なし
--------------------------------------------------------------------------------
関数名  m_total()

機能    各トラックにセットされたMMLの総ステップタイム数を計算し
	結果を画面に出力する

引数    なし

戻り値  なし

備考    トラック番号:ループ外の総カウント数  ループ内の総カウント数
	というフォーマットで出力される。
	X−BASICは独自の仮想画面で画面を管理しているのに対して
	本命令はむりやり表示を行っているため画面下部で本命令を実行すると
	表示の一部がずれることがある。
--------------------------------------------------------------------------------
●テンポ
--------------------------------------------------------------------------------
関数名  m_tempo(tm)

機能    テンポの設定

引数    tm=トラック番号(int:20〜300)

戻り値  tmを省略すると現在のテンポ値を返す

備考    タイマAモード(MEASURE2参照)で動作中時はテンポ77以下は強制的に77になる。
--------------------------------------------------------------------------------
●MMLの書き込み
--------------------------------------------------------------------------------
関数名  m_trk(tr,str)

機能    MMLをトラックへ書き込む

引数    tr:トラック番号(char:1〜80)
	str:MMLデータ(str)

戻り値  なし

備考    MMLに関してはMEASURE5を参照のこと。
--------------------------------------------------------------------------------
関数名  m_trk2(str,tr1,tr2,tr3,tr4,tr5,tr6,tr7,tr8)

機能    MMLを複数のトラックへ書き込む

引数	str:MMLデータ(str)
    	tr1〜8:トラック番号(char:1〜80)

戻り値  なし

備考	tr2〜tr8は省略可能。
	MMLに関してはMEASURE5を参照のこと。
--------------------------------------------------------------------------------
●FM音源の音色設定
--------------------------------------------------------------------------------
関数名  m_vset(vn,ary)

機能    FM音源の音色登録

引数    vn:音色番号(char:1〜200)
	ary:音色データ(dim char ary(4,10))

戻り値  なし

備考
       10 /*設定例
        20 dim char v(4,10)
        30 /* AF  OM  WF SYC SPD PMD AMD PMS AMS PAN
        40 v={59, 15,  2,  1,200,127,  0,  0,  0,  3,  0,
      50 /* AR  DR  SR  RR  SL  OL  KS  ML DT1 DT2 AME 
        60    31,  8,  1,  8,  7, 20,  2,  1,  5,  3,  0,
        70    31,  8,  8,  7,  5, 24,  1,  2,  1,  1,  0,
        80    31,  3,  7,  8,  1, 21,  1,  1,  3,  0,  0,
        90    31,  0,  0,  9,  0,  0,  2,  8,  5,  2,  0}
       100 m_vset(1,v)

      パラメータ概説
		       0                         1〜4(オペレータ)
   0        AF(フィードバック/アルゴリズム) (0〜63)  |  AR(アタックレート)        (0〜31)
   1        OM(スロットマスク)            (0〜15)  |  1DR(1stディケイレート)   (0〜31)
   2        WF(ウェーヴフォーム)          (0〜3)   |  2DR(2ndディケイレート)   (0〜31)
   3        SYC(シンクロ)              (0,1)    |  RR(リリースレート)        (0〜15)
   4        SPD(スピード)            (0〜255) |  1DL(1stディケイレベル)  (0〜15)
   5        PMD                    (0〜127) |  TL(トータルレベル)       (0〜127)
   6        AMD                    (0〜127) |  KS(キースケーリング)      (0〜3)
   7        PMS                    (0〜7)   |  MUL(フェーズマルチプライ)  (0〜15)
   8        AMS                    (0〜3)   |  DT1(ディチューン1)      (0〜7)
   9        PAN                    (0〜3)   |  DT2(ディチューン2)      (0〜3)
   10        DUMMY			     |  AME(AMSイネーブル)     (0,1)

  パラメータの機能や詳しい解説は専門書や「BASICマニュアル」の
M_VSET()やM_VGET()の項を参照。
--------------------------------------------------------------------------------
関数名  m_vget(vn,ary)

機能    FM音源の音色データの取り出し

引数    vn:音色番号(char:1〜200)
	ary:音色バッファ(dim char ary(4,10))

戻り値  ary(4,10)に音色データが格納される
--------------------------------------------------------------------------------
関数名  m_fmvset(vn,ary)

機能    FM音源の音色登録(AL/FB分離形式)

引数    vn:音色番号(char:1〜200)
	ary:音色データ(dim char ary(4,10))

戻り値  なし

例
        10 dim char v(4,10)
        20 /*   AR 1DR 2DR  RR 1DL  TL  RS MUL DT1 DT2 AME 
        30 v={  31,  0,  2,  0,  0, 21,  0,  1,  0,  0,  0,
        40      31,  0,  0,  8,  0,  3,  0,  3,  0,  0,  0, 
        50      31,  0,  0,  8,  0,  3,  0,  1,  0,  0,  0, 
        60      31,  0,  0,  8,  0,  3,  0,  1,  0,  0,  0,
        70 /*  CON FBL OM PAN WF SYC SPD PMD AMD PMS AMS
        80       5,  7,15,  3  0,  0,  0,  0,  0,  0,  0}
        90 m_fmvset(1,v)

備考    AL/FB(CON/FB)分離形式とはFM音源のパラメータである
	アルゴリズム(またはコネクション)とフィードバックレベルを
	従来の書式では1つにまとめていたのを分かりやすく分割して
	指定できるようにしたもの。
--------------------------------------------------------------------------------
●ADPCMコンフィギュレーション
--------------------------------------------------------------------------------
関数名  m_pcmset(nt,fn,pt,vl,mx,dl,ct,rv,fd)

機能    ノート番号ntにファイルネームfnのADPCM音をセットする

引数    nt=ノート番号(int:0〜511)
	fn=ファイルネーム(str)
	pt=ピッチシフトパラメータ(int:0〜11=ピッチダウン,12=ニュートラル,13〜24=ピッチアップ)
	vl=ボリュームパラメータ(int:1%〜300%)
	mx=ミックス対象ノート番号(int:0〜511)
	dl=ミックスディレイパラメータ(int:0〜65535)
	ct=カットパラメータ(int:0〜$ffffffff)
	rv=リバーススイッチ(char:0=normal/1=reverse)
	fd=フェード  イン/アウトパラメータ(int:0〜$ffffffff)

戻り値  なし

備考    カットパラメータ=オフセット(0〜65535)×65536+カットサイズ(0〜65535)
	フェードイン/アウト・パラメータ=オフセット(0〜65535)×65536
	+モード(−1=フェードイン,+1=フェードアウト)×256
	+フェードイン/アウト・レベル(0〜127)
	fnがカレントより見つからない場合は環境変数'zmusic'のパスを参照する。
	pt,vl,mx,dl,ct,rv,fdはそれぞれ省略可能。
	pt,vl,mx,dl,ct,rv,fdのいずれかを設定した場合はADPCMデータの加工を
	行うので多少の時間を要する。
	また、加工には相当量のメモリを必要とするためドライバ起動時の'−W'スイッチ
	でワークエリアを十分に確保していないとエラーとなる。
	パラメータの具体的な説明はMEASURE6を参照のこと。

例      m_pcmset(10,"snare.pcm",13,120,8,1000,&h10001000,1,&h1000ff01)
--------------------------------------------------------------------------------
関数名  m_pcmcnf(fn)

機能    ADPCMコンフィギュレーションファイルで
	ADPCM音をドライバに登録する

引数    fn=ファイルネーム(str)

戻り値  なし

備考    fnがカレントより見つからない場合は環境変数'zmusic'のパスを参照する。
--------------------------------------------------------------------------------
関数名  m_adpcm_block(fn)

機能    ADPCMブロックデータを読み込む

引数    fn=ファイルネーム(str)

戻り値  なし

備考    fnがカレントより見つからない場合は環境変数'zmusic'のパスを参照する。
	ADPCMバッファがブロックデータの大きさより小さい場合はエラーとなる。
--------------------------------------------------------------------------------
●MIDIデータ出力
--------------------------------------------------------------------------------
関数名  m_out(data1,data2,…,data10)

機能    MIDIデータを送信する

引数    data1〜10=MIDIデータ(char)

戻り値  なし

備考    data2以降は省略可,X−BASICの制約からデータは10個まで。

例      m_out(&HC0,10)
--------------------------------------------------------------------------------
関数名  m_dirout(ary,size)

機能    1次元配列に格納されたデータを送信する

引数    ary=1次元配列(dim char ary(n))
	size=送信データ数(int:1〜65536)

戻り値  なし

備考    sizeを省略した場合は配列内全てのデータを送信する。
--------------------------------------------------------------------------------
関数名  m_exc(ary,size)

機能    1次元配列に格納されたデータをエクスクルーシブデータとして送信する

引数    ary=1次元配列(dim char ary(n))
	size=送信データ数(int:1〜65536)

戻り値  なし

備考    sizeを省略した場合は配列内全てのデータを送信する。
	頭に$f0、後尾に$f7を自動的に付けて送信するだけで機能的には
	ほとんど'm_dirout()'と同じ。
--------------------------------------------------------------------------------
関数名  m_roland(dev,mdl,ary,size)

機能    1次元配列に格納されたデータを
	ローランドエクスクルーシブデータと見なし送信する

引数    dev=転送先の楽器のデバイスID(char)
	mdl=転送先の楽器のモデルID(char)
	ary=1次元配列(dim char ary(n))
	size=送信データ数(int:1〜65536)

戻り値  なし

備考    sizeを省略した場合は配列内全てのデータを送信する。
	エクスクルーシブヘッダやチェックサムのデータは自動発信する。
--------------------------------------------------------------------------------
関数名  m_trans(fn)

機能    MIDIダンプデータファイルをMIDI楽器へ送信する

引数    fn=ファイルネーム(str)

戻り値  なし

備考    fnがカレントより見つからない場合は環境変数'zmusic'のパスを参照する。
	MEASURE9参照。
--------------------------------------------------------------------------------
●MIDIデータ入力
--------------------------------------------------------------------------------
関数名  m_inp(mode)

機能    MIDIデータを送信する

引数    mode=入力モード(char:0,1〜255)
	mode=0		入力データがない場合はエラーコードを持って帰還
	mode=1〜255	データが受信されるまでmode×(1/60)秒間待つ

戻り値  0〜255:入力されたデータ
	-1:エラー
--------------------------------------------------------------------------------
関数名  m_rec()

機能    MIDI楽器よりデータを受信するモードにする

引数    なし

戻り値  なし

備考    MEASURE9参照。
--------------------------------------------------------------------------------
関数名  m_rstop()

機能    MIDI楽器からのデータを受信するモードを解除する

引数    なし

戻り値  なし

備考    MEASURE9参照。
--------------------------------------------------------------------------------
関数名  m_save(fn)

機能    m_rec()で受信したMIDIデータをセーブする

引数    fn=ファイルネーム(str)

戻り値  なし

備考    MEASURE9参照。
--------------------------------------------------------------------------------
●SC55/SC155/CM300/CM500のGSパート専用命令
  パラメータの意味などは楽器のマニュアルを参照のこと
--------------------------------------------------------------------------------
関数名  sc55_init(id)

機能    SC55の初期化を行なう

引数    id=SC55のデバイスID(char)

戻り値  なし

備考    IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
--------------------------------------------------------------------------------
関数名  sc55_v_reserve(ary,id)

機能    SC55のボイスリザーブ

引数    ary=各パートのボイスリザーブ値(dim char ary(15)={vr1,…,vr16})
	id=SC55のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は15でリザーブ値は16パート分書かなければならない。
	また、合計が楽器の最大同時発生数である24以下にならなければならない。
	ary(0)=パート1,ary(1)=パート2…,ary(15)=パート16というふうに対応する。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
--------------------------------------------------------------------------------
関数名  sc55_reverb(ary,id)

機能    SC55のリバーブパラメータ設定

引数    ary=リバーブパラメータ(dim char ary(6)={rv1,…,rv7})
	id=SC55のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は6以内で配列の内容全部がSC55へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される
	ary(0):REVERB MACRO 00:Room1,01:Room2,02:Room3,03:Hall1,04:Hall2
			    05:Plate,06:Delay,07:Panning Delay(FB)
	ary(1):REVERB CHARACTER			($00〜$07)
	ary(2):REVERB PRE-LPF			($00〜$07)
	ary(3):REVERB LEVEL			($00〜$7F)
	ary(4):REVERB TIME			($00〜$7F)
	ary(5):REVERB DELAY FEEDBACK		($00〜$7F)
	ary(6):REVERB SEND LEVEL TO CHORUS	($00〜$7F)
	(SC55マニュアルp79参照)
--------------------------------------------------------------------------------
関数名  sc55_chorus(ary,id)

機能    SC55のコーラスパラメータ設定

引数    ary=コーラスパラメータ(dim char ary(7)={co1,…,co8})
	id=SC55のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は7以内で配列の内容全部がSC55へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):CHORUS MACRO 00:Chorus1,01:Chorus2,02:Chorus3,03:Chorus4
			    04:Feedback Chorus,05:Flanger,06:Short Delay
			    07:Short Delay(FB)
	ary(1):CHORUS PRE-LPF			($00〜$07)
	ary(2):CHORUS LEVEL			($00〜$7F)
	ary(3):CHORUS FEEDBACK			($00〜$7F)
	ary(4):CHORUS DELAY			($00〜$7F)
	ary(5):CHORUS RATE			($00〜$7F)
	ary(6):CHORUS DEPTH			($00〜$7F)
	ary(7):CHORUS SEND LEVEL TO REVERB	($00〜$7F)
	(SC55マニュアルp79参照)
--------------------------------------------------------------------------------
関数名  sc55_part_setup(pt,ary,id)

機能    SC55のパートパラメータ設定

引数    pt=パートナンバー(char:1〜16)
	ary=パートパラメータ(dim char ary(118)={pp1,…,pp119})
	id=SC55のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は118以内で配列の内容全部がSC55へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	 ary(0):Rx CHANNEL                 (1〜16,17=OFF)
	 ary(1):Rx PITCH BEND              (0〜1:OFF/ON)
	 ary(2):Rx CH PRESSURE(CAf)        (0〜1:OFF/ON)
	 ary(3):Rx PROGRAM CHANGE          (0〜1:OFF/ON)
	 ary(4):Rx CONTROL CHANGE          (0〜1:OFF/ON)
	 ary(5):Rx POLY PRESSURE(PAf)      (0〜1:OFF/ON)
	 ary(6):Rx NOTE MESSAGE            (0〜1:OFF/ON)
	 ary(7):Rx RPN                     (0〜1:OFF/ON)
	 ary(8):Rx NRPN                    (0〜1:OFF/ON)
	 ary(9):Rx MODURATION              (0〜1:OFF/ON)
	ary(10):Rx VOLUME                  (0〜1:OFF/ON)
	ary(11):Rx PANPOT                  (0〜1:OFF/ON)
	ary(12):Rx EXPRESSION              (0〜1:OFF/ON)
	ary(13):Rx HOLD1                   (0〜1:OFF/ON)
	ary(14):Rx PORTAMENTO              (0〜1:OFF/ON)
	ary(15):Rx SOSTENUTO               (0〜1:OFF/ON)
	ary(16):Rx SOFT                    (0〜1:OFF/ON)
	ary(17):MONO/POLY MODE             (0〜1:MONO/POLY)
	ary(18):ASSIGN MODE                (0:SINGLE,1:LIMITED-MULTI,2:FULL-MULTI)
	ary(19):USE FOR RHYTHM PART        (0:OFF,1:MAP1,2:MAP2)
	ary(20):PITCH KEY SHIFT            ($28〜$58:−24〜+24[semitone])
	ary(21):PITCH OFFSET FINE(upper)   ($08〜$F8:−12.0〜+12.0[Hz])
	ary(22):PITCH OFFSET FINE(lower)         〃
	ary(23):PART LEVEL                 (0〜127)
	ary(24):VELOCITY SENSE DEPTH       (0〜127)
	ary(25):VELOCITY SENSE OFFSET      (0〜127)
	ary(26):PART PANPOT                (0:RANDOM,01(LEFT)〜64〜127(RIGHT))
	ary(27):KEY RANGE LOW              (0〜127:C-1〜G9)
	ary(28):KEY RANGE HIGH             (0〜127:C-1〜G9)
	ary(29):CC1 CONTROL NUMBER         (0〜127)
	ary(30):CC2 CONTROL NUMBER         (0〜127)
	ary(31):CHORUS SEND DEPTH          (0〜127)
	ary(32):REVERB SEND DEPTH          (0〜127)

	ary(33):Vibrato rate               ($0E〜$72:−50〜+50)
	ary(34):Vibrato depth              ($0E〜$72:−50〜+50)
	ary(35):TVF cutoff freq.           ($0E〜$50:−50〜+16)
	ary(36):TVF resonance              ($0E〜$72:−50〜+50)
	ary(37):TVF&TVA Env.attack         ($0E〜$72:−50〜+50)
	ary(38):TVF&TVA Env.decay          ($0E〜$72:−50〜+50)
	ary(39):TVF&TVA Env.release        ($0E〜$72:−50〜+50)
	ary(40):Vibrato delay              ($0E〜$72:−50〜+50)

	ary(41):SCALE TUNING C		   ($00〜$7F:−64〜+63[cent])
	ary(42):SCALE TUNING C#		   ($00〜$7F:−64〜+63[cent])
	ary(43):SCALE TUNING D		   ($00〜$7F:−64〜+63[cent])
	ary(44):SCALE TUNING D#		   ($00〜$7F:−64〜+63[cent])
	ary(45):SCALE TUNING E		   ($00〜$7F:−64〜+63[cent])
	ary(46):SCALE TUNING F		   ($00〜$7F:−64〜+63[cent])
	ary(47):SCALE TUNING F#		   ($00〜$7F:−64〜+63[cent])
	ary(48):SCALE TUNING G		   ($00〜$7F:−64〜+63[cent])
	ary(49):SCALE TUNING G#		   ($00〜$7F:−64〜+63[cent])
	ary(50):SCALE TUNING A		   ($00〜$7F:−64〜+63[cent])
	ary(51):SCALE TUNING A#		   ($00〜$7F:−64〜+63[cent])
	ary(52):SCALE TUNING B		   ($00〜$7F:−64〜+63[cent])

	ary(53):MOD PITCH CONTROL	   ($28〜$58:−24〜+24[semitone])
	ary(54):MOD TVF CUTOFF CONTROL	   ($00〜$7F:−9600〜+9600[CENT])
	ary(55):MOD AMPLITUDE CONTROL	   ($00〜$7F:−100.0〜+100.0[%])
	ary(56):MOD LFO1 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
	ary(57):MOD LFO1 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
	ary(58):MOD LFO1 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
	ary(59):MOD LFO1 TVA DEPTH	   ($00〜$7F:0〜100.0[%])
	ary(60):MOD LFO2 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
	ary(61):MOD LFO2 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
	ary(62):MOD LFO2 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
	ary(63):MOD LFO2 TVA DEPTH	   ($00〜$7F:0〜100.0[%])

	ary(64):BEND PITCH CONTROL	   ($28〜$58:−24〜+24[semitone])
	ary(65):BEND TVF CUTOFF CONTROL	   ($00〜$7F:−9600〜+9600[CENT])
	ary(66):BEND AMPLITUDE CONTROL	   ($00〜$7F:−100.0〜+100.0[%])
	ary(67):BEND LFO1 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
	ary(68):BEND LFO1 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
	ary(69):BEND LFO1 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
	ary(70):BEND LFO1 TVA DEPTH	   ($00〜$7F:0〜100.0[%])
	ary(71):BEND LFO2 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
	ary(72):BEND LFO2 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
	ary(73):BEND LFO2 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
	ary(74):BEND LFO2 TVA DEPTH	   ($00〜$7F:0〜100.0[%])

	ary(75):CAf PITCH CONTROL	   ($28〜$58:−24〜+24[semitone])
	ary(76):CAf TVF CUTOFF CONTROL	   ($00〜$7F:−9600〜+9600[CENT])
	ary(77):CAf AMPLITUDE CONTROL	   ($00〜$7F:−100.0〜+100.0[%])
	ary(78):CAf LFO1 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
	ary(79):CAf LFO1 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
	ary(80):CAf LFO1 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
	ary(81):CAf LFO1 TVA DEPTH	   ($00〜$7F:0〜100.0[%])
	ary(82):CAf LFO2 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
	ary(83):CAf LFO2 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
	ary(84):CAf LFO2 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
	ary(85):CAf LFO2 TVA DEPTH	   ($00〜$7F:0〜100.0[%])

	ary(86):PAf PITCH CONTROL	   ($28〜$58:−24〜+24[semitone])
	ary(87):PAf TVF CUTOFF CONTROL	   ($00〜$7F:−9600〜+9600[CENT])
	ary(88):PAf AMPLITUDE CONTROL	   ($00〜$7F:−100.0〜+100.0[%])
	ary(89):PAf LFO1 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
	ary(90):PAf LFO1 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
	ary(91):PAf LFO1 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
	ary(92):PAf LFO1 TVA DEPTH	   ($00〜$7F:0〜100.0[%])
	ary(93):PAf LFO2 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
	ary(94):PAf LFO2 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
	ary(95):PAf LFO2 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
	ary(96):PAf LFO2 TVA DEPTH	   ($00〜$7F:0〜100.0[%])

	ary(97):CC1 PITCH CONTROL	   ($28〜$58:−24〜+24[semitone])
	ary(98):CC1 TVF CUTOFF CONTROL	   ($00〜$7F:−9600〜+9600[CENT])
	ary(99):CC1 AMPLITUDE CONTROL	   ($00〜$7F:−100.0〜+100.0[%])
       ary(100):CC1 LFO1 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
       ary(101):CC1 LFO1 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
       ary(102):CC1 LFO1 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
       ary(103):CC1 LFO1 TVA DEPTH	   ($00〜$7F:0〜100.0[%])
       ary(104):CC1 LFO2 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
       ary(105):CC1 LFO2 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
       ary(106):CC1 LFO2 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
       ary(107):CC1 LFO2 TVA DEPTH	   ($00〜$7F:0〜100.0[%])

       ary(108):CC2 PITCH CONTROL	   ($28〜$58:−24〜+24[semitone])
       ary(109):CC2 TVF CUTOFF CONTROL	   ($00〜$7F:−9600〜+9600[CENT])
       ary(110):CC2 AMPLITUDE CONTROL	   ($00〜$7F:−100.0〜+100.0[%])
       ary(111):CC2 LFO1 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
       ary(112):CC2 LFO1 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
       ary(113):CC2 LFO1 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
       ary(114):CC2 LFO1 TVA DEPTH	   ($00〜$7F:0〜100.0[%])
       ary(115):CC2 LFO2 RATE CONTROL	   ($00〜$7F:−10.0〜+10.0[Hz])
       ary(116):CC2 LFO2 PITCH DEPTH	   ($00〜$7F:0〜600[cent])
       ary(117):CC2 LFO2 TVF DEPTH	   ($00〜$7F:0〜2400[cent])
       ary(118):CC2 LFO2 TVA DEPTH	   ($00〜$7F:0〜100.0[%])
       (SC55のマニュアルP75,P79〜P80参照)
--------------------------------------------------------------------------------
関数名  sc55_drum_setup(mp,nt,ary,id)

機能    SC55のドラムパラメータ設定

引数    mp=マップナンバー(char:0〜1)
	nt=ノート番号(char:0〜127)
	ary=ドラムパラメータ(dim char ary(7)={dr1,…,dr8})
	id=SC55のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は7以内で配列の内容全部がSC55へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):PLAY KEY NUMBER            (0〜127)
	ary(1):LEVEL                      (0〜127)
	ary(2):ASSIGN GROUP NUMBER        (0:NON,1〜127)
	ary(3):PANPOT                     (0:RANDOM,01(LEFT)〜64〜127(RIGHT))
	ary(4):REVERB DEPTH               (0〜127:0.0〜1.0)
	ary(5):CHORUS DEPTH               (0〜127:0.0〜1.0)
	ary(6):Rx NOTE OFF                (0〜1:OFF/ON)
	ary(7):Rx NOTE ON                 (0〜1:OFF/ON)
	(SC55マニュアルp75,p82参照)
--------------------------------------------------------------------------------
関数名  sc55_print(ms,id)

機能    SC55のディスプレイに文字列を表示する

引数    ms=文字列(str:32文字以内)
	id=SC55のデバイスID(char)

戻り値  なし

備考    IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
--------------------------------------------------------------------------------
関数名  sc55_display(ary,id)

機能    SC55のディスプレイにドットパターン(16×16)を表示する

引数    ary=ドットパターンデータ(dim int a(15)={dt1,…,dt16})
	id=SC55のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、int型で添え字は必ず15でなければならない。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。

例
       5 /*SC55の画面に"善"を表示する
      10 dim int d(a5)={ %0001000000010000,
      20                 %0000100000100000,
      30                 %0111111111111100,
        40                 %0000000100000000,
        50                 %0011111111111000,
        60                 %0000000100000000,
        70                 %0111111111111100,
        80                 %0001000100010000,
        90                 %0000100100100000,
       100                 %1111111111111110,
       110                 %0000000000000000,
       120                 %0011111111111000,
       130                 %0010000000001000,
       140                 %0010000000001000,
       150                 %0011111111111000,
       160                 %0010000000001000}
       170 sc55_display(d,&h10)
--------------------------------------------------------------------------------
●MT32/CM32L/(CM64/CM500のLAパート)専用命令
  パラメータの意味などは楽器のマニュアルを参照のこと
--------------------------------------------------------------------------------
関数名  mt32_init(id)

機能    MT32の初期化を行なう

引数    id=MT32のデバイスID(char)

戻り値  なし

備考    IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。

注意    MT32用の命令はCM32L/CM64/CM500にも使用できる。以下同様。
--------------------------------------------------------------------------------
関数名  mt32_p_reserve(ary,id)

機能    MT32のパーシャルリザーブを行う

引数    ary=各パートのパーシャルリザーブ値(dim char ary(8)={pr1,…,pr9})
	id=MT32のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、char型で添え字は必ず8でなければならない。
	9番目のデータ(添え字で8番目)はリズムパートに相当する。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
--------------------------------------------------------------------------------
関数名  mt32_reverb(ary,id)

機能    MT32のリバーブパラメータの設定

引数    ary=リバーブパラメータ(dim char ary(2)={pr1,pr2,pr3})
	id=MT32のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は2以内で配列の内容全部がMT32へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):REVERB MODE                (0:Room,1:Hall,2:Plate,3:Tap Delay)
	ary(1):REVERB TIME                (0〜7)
	ary(2):REVERB LEVEL               (0〜7)
	(MT32マニュアルp35,CM64マニュアルp30参照)
--------------------------------------------------------------------------------
関数名  mt32_part_setup(ary,id)

機能    MT32の各パートのMIDIチャンネルの設定

引数    ary=各パートのMIDIチャンネル値(1〜16,17:OFF)
					   (dim char ary(8)={pr1,…,pr9})
	id=MT32のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は8以内で配列の内容全部がMT32へ送信される。
	9番目のデータ(添え字で8番目)はリズムパートに相当する。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
--------------------------------------------------------------------------------
関数名  mt32_drum_setup(nt,ary,id)

機能    MT32のリズムパートの設定

引数    nt=設定を変更するリズムノートナンバー(char:24〜87)
	ary=リズムパートのセットアップパラメータ(dim char ary(3)={pr1,…,pr4})
	id=MT32のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は3以内で配列の内容全部がMT32へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):TIMBRE                   (0〜63:i1〜64,64〜127:r1〜64)
	ary(1):OUTPUT LEVEL             (0〜100)
	ary(2):PANPOT                   (0〜14)
	ary(3):REVERB SWITCH            (0〜1:OFF/ON)
        (MT32マニュアルp35,CM64マニュアルp30参照)
--------------------------------------------------------------------------------
関数名  mt32_common(tm,nm,ary,id)

機能    MT32のティンバーコモンパラメータの設定

引数    tm=ティンバーの番号(char:1〜64)
	nm=ティンバーの名前(str:10文字以内)
	ary=コモンパラメータ(dim char ary(3)={pr1,…,pr4})
	id=MT32のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は3以内で配列の内容全部がMT32へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):Structure of Partial#1&2        (0〜12:1〜13)
	ary(1):Structure of Partial#3&4        (0〜12:1〜13)
	ary(2):PARTIAL MUTE                    (0〜15)
	ary(3):ENV MODE                        (0〜1:NORMAL,NO SUSTAIN)
        (MT32マニュアルp34,CM64マニュアルp29参照)
--------------------------------------------------------------------------------
関数名  mt32_patch(pt,ary,id)

機能    MT32のパッチパラメータの設定

引数    pt=パッチ(program)番号(char:1〜128)
	ary=パッチパラメータ(dim char ary(6)={pr1,…,pr7})
	id=MT32のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は6以内で配列の内容全部がMT32へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):TIMBRE GROUP               (0〜3:a,b,i,r)
	ary(1):TIMBRE NUMBER              (0〜63)
	ary(2):KEY SHIFT                  (0〜48:−24〜+24)
	ary(3):FINE TUNE                  (0〜100:−50〜+50)
	ary(4):BENDER RANGE               (0〜24)
	ary(5):ASSIGN MODE                (0〜3:POLY1〜4)
	ary(6):REVERB SWITCH              (0〜1:OFF/ON)
    (MT32マニュアルp35,CM64マニュアルp30参照)
--------------------------------------------------------------------------------
関数名  mt32_partial(tm,pt,ary,id)

機能    MT32の音色のパーシャル・パラメータの設定

引数    tm=ティンバーの番号(char:1〜64)
	pt=パーシャル番号(char:1〜4)
	ary=パッチパラメータ(dim char ary(57)={pr1,…,pr58})
	id=MT32のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は57以内で配列の内容全部がMT32へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):WG PITCH COARSE                    (0〜96:C1,C#1,〜,C9)
	ary(1):WG PITCH FINE                      (0〜100:−50〜+50)
	ary(2):WG PITCH KEYFOLLOW                 (0〜16:−1,−1/2,−1/4,0,1/8,1/4,
							 3/8,1/2,5/8,3/4,7/8,1,
							 5/4,3/2,2,s1,s2)
	ary(3):WG PITCH BENDER SW                 (0〜1:OFF/ON)
	ary(4):WG WAVEFORM/PCM BANK               (0〜3:SQU1,SAW1,SQU2,SAW2)
	ary(5):WG PCM WAVE                        (0〜127:1〜128)
	ary(6):WG PULSE WIDTH                     (0〜100)
	ary(7):WG PW VELO SENS                    (0〜14:−7〜+7)
	ary(8):P-ENV DEPTH                        (0〜10)
	ary(9):P-ENV VELO SENS                    (0〜3)
       ary(10):P-ENV TIME KEYF                    (0〜4)
       ary(11):P-ENV TIME 1                       (0〜100)
       ary(12):P-ENV TIME 2                       (0〜100)
       ary(13):P-ENV TIME 3                       (0〜100)
       ary(14):P-ENV TIME 4                       (0〜100)
       ary(15):P-ENV LEVEL 0                      (0〜100:−50〜+50)
       ary(16):P-ENV LEVEL 1                      (0〜100:−50〜+50))
       ary(17):P-ENV LEVEL 2                      (0〜100:−50〜+50)
       ary(18):P-ENV SUSTAIN LEVEL                (0〜100:−50〜+50)
       ary(19):END LEVEL                          (0〜100:−50〜+50)
       ary(20):P-LFO RATE                         (0〜100)
       ary(21):P-LFO DEPTH                        (0〜100)
       ary(22):P-LFO MOD SENS                     (0〜100)
       ary(23):TVF CUTOFF FREQ                    (0〜100)
       ary(24):TVF RESONANCE                      (0〜30)
       ary(25):TVF KEYFOLLOW                      (0〜14:−1,−1/2,−1/4,0,1/8,1/4,
							 3/8,1/2,5/8,3/4,7/8,1,
							 5/4,3/2,2)
       ary(26):TVF BIAS POINT/DIR                 (0〜127)
       ary(27):TVF BIAS LEVEL                     (0〜14:−7〜+7)
       ary(28):TVF ENV DEPTH                      (0〜100)
       ary(29):TVF ENV VELO SENS                  (0〜100)
       ary(30):TVF ENV DEPTH KEYF                 (0〜4)
       ary(31):TVF ENV TIME KEYF                  (0〜4)
       ary(32):TVF ENV TIME 1                     (0〜100)
       ary(33):TVF ENV TIME 2                     (0〜100)
       ary(34):TVF ENV TIME 3                     (0〜100)
       ary(35):TVF ENV TIME 4                     (0〜100)
       ary(36):TVF ENV TIME 5                     (0〜100)
       ary(37):TVF ENV LEVEL 1                    (0〜100)
       ary(38):TVF ENV LEVEL 2                    (0〜100)
       ary(39):TVF ENV LEVEL 3                    (0〜100)
       ary(40):TVF ENV SUSTAIN LEVEL              (0〜100)
       ary(41):TVA LEVEL                          (0〜100)
       ary(42):TVA VELO SENS                      (0〜100:−50〜+50
       ary(43):TVA BIAS POINT 1                   (0〜127)
       ary(44):TVA BIAS LEVEL 1                   (0〜12:−12〜0)
       ary(45):TVA BIAS POINT 2                   (0〜127)
       ary(46):TVA BIAS LEVEL 2                   (0〜12:−12〜0)
       ary(47):TVA ENV TIME KEYF                  (0〜4)
       ary(48):TVA ENV TIME V_FOLLOW              (0〜4)
       ary(49):TVA ENV TIME 1                     (0〜100)
       ary(50):TVA ENV TIME 2                     (0〜100)
       ary(51):TVA ENV TIME 3                     (0〜100)
       ary(52):TVA ENV TIME 4                     (0〜100)
       ary(53):TVA ENV TIME 5                     (0〜100)
       ary(54):TVA ENV LEVEL 1                    (0〜100)
       ary(55):TVA ENV LEVEL 2                    (0〜100)
       ary(56):TVA ENV LEVEL 3                    (0〜100)
       ary(57):TVA ENV SUSTAIN LEVEL              (0〜100)
       (MT32マニュアルp34,CM64マニュアルp29参照)
--------------------------------------------------------------------------------
関数名  mt32_print(ms,id)

機能    MT32のコンソールに文字列を表示する

引数    ms=文字列(str:20文字以内)
	id=MT32のデバイスID(char)

戻り値  なし

備考    IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
--------------------------------------------------------------------------------
●U220/U20専用命令
  パラメータの意味などは楽器のマニュアルを参照のこと
--------------------------------------------------------------------------------
関数名  u220_setup(ary,id)

機能    U220のセットアップパラメータの設定

引数    ary=パラメータ(dim char ary(6)={pr1,…,pr7})
	id=U220のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、char型で添え字は必ず6でなければならない。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):Chorus SW                          (0〜1:OFF/ON)
	ary(1):Reverb SW                          (0〜1:OFF/ON)
	ary(2):Rx Cntrl Channel                   (1〜17:1〜16,OFF)
	ary(3):Patch Change                       (0〜5:MAP1〜MAP4,Dir,OFF)
	ary(4):Timbre Change                      (0〜5:MAP1〜MAP4,Dir,OFF)
	ary(5):Rhythm Change                      (0〜5:MAP1〜MAP4,Dir,OFF)
	ary(6):R.Inst Assign                      (0〜5:MAP1〜MAP4,Dir,OFF)
     (U220マニュアルp46,p146〜148参照)

注意    U220用の命令はU20に対しても使用できる。以下同様。
--------------------------------------------------------------------------------
関数名  u220_part_setup(pt,ary,id)

機能    U220のテンポラリ・パート・セットアップパラメータの設定

引数    pt=パート番号(char:1〜6)
	ary=パラメータ(dim char ary(12)={pr1,…,pr13})
	id=U220のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、char型で添え字は必ず12でなければならない。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):Timbre Number                  (1〜128)
	ary(1):Voice Reserve                  (0〜30)
	ary(2):Receive Channel                (1〜17:1〜16,OFF)
	ary(3):Key Range Low                  (0〜127:C-1〜G9)
	ary(4):Key Range High                 (0〜127:C-1〜G9)
	ary(5):Velo Level                     (0〜1:Above/Below)
	ary(6):Velo Threshold                 (0〜127)
	ary(7):Output Assign                  (0〜4:Dry,Rev,Cho,Dir1,Dir2)
	ary(8):Level                          (0〜127)
	ary(9):Pan                            (0〜15:L7〜M〜R7)
       ary(10):Rx Volume                      (0〜1:OFF/ON)
       ary(11):Rx Pan                         (0〜1:OFF/ON)
       ary(12):Rx Hold                        (0〜1:OFF/ON)
       (U220マニュアルp58,p149参照)
--------------------------------------------------------------------------------
関数名  u220_common(ary,id)

機能    U220のテンポラリパッチ・コモンパラメータの設定

引数    ary=パラメータ(dim char ary(17)={pr1,…,pr18})
	id=U220のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、char型で添え字は必ず17でなければならない。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):Chorus Type                    (0〜4:Chorus1,Chorus2,FB-Chorus,
						    Flanger,Short Delay)
	ary(1):Chorus Out Mode                (0〜1:Pre Rev,Post Rev)
	ary(2):Chorus Level                   (0〜31)
	ary(3):Chorus Delay                   (0〜31)
	ary(4):Chorus Rate                    (0〜31)
	ary(5):Chorus Depth                   (0〜31)
	ary(6):Chorus Feedback                (1〜63:−31〜0〜+31)
	ary(7):Reverb Type                    (0〜7:Room1〜3,Hall1〜2,Gate
						    Delay,CrossDelay)
	ary(8):Reverb Time                    (0〜31)
	ary(9):Reverb Level                   (0〜31)
       ary(10):Reverb Delay Feedback          (0〜31)
       ary(11):Reverb Pre Delay Feedback      (0〜31)
       ary(12):Param1 #                       (0〜63:0〜5,7〜31,64〜95,OFF)
       ary(13):Param1 Param                   (0:Timbre Level,1:Env Attack
					       2:Env Decay,3:Env Sustain
					       4:Env Release,5:A.Bend Depth
					       6:A.Bend Rate,7:Detune Depth
					       8:Vib Rate,9:Vib Wave Form
					      10:Vib Depth,11:Vib Delay
					      12:Vib Rise Time,13:Vib Mod Depth
					      14:Chorus Level,15:Chorus Rate
					      16:Chorus Feedback,17:Reverb Level
					      18:Delay Feedback)
       ary(14):Param2 #                       (Same as Param1 #)
       ary(15):Param2 Param                   (Same as Param1 Param)
       ary(16):Param3 #                       (Same as Param1 #)
       ary(17):Param3 Param                   (Same as Param1 Param)
       (U220マニュアルp54,p149参照)
--------------------------------------------------------------------------------
関数名  u220_timbre(tm,name,ary,id)

機能    U220のティンバーパラメータの設定

引数    tm=ティンバー番号(char:1〜128)
	name=ティンバーの名前(str:12文字以内)
	ary=パラメータ(dim char ary(25)={pr1,…,pr26})
	id=U220のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、char型で添え字は必ず25でなければならない。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):Tone Media                      (0〜31:I,1〜31)
	ary(1):Tone Number                     (1〜128)
	ary(2):Timbre Level                    (0〜127)
	ary(3):Velocity Sens                   (1〜15:−7〜+7)
	ary(4):Channel Press Sens              (1〜15:−7〜+7)
	ary(5):Env Attack Rate                 (1〜15:−7〜+7)
	ary(6):Env Decay Rate                  (1〜15:−7〜+7)
	ary(7):Env Sustain Level               (1〜15:−7〜+7)
	ary(8):Env Release Rate                (1〜15:−7〜+7)
	ary(9):Pitch Shift Coarse              (8〜56:−24〜+24)
       ary(10):Pitch Shift Fine                (14〜114:−50〜+50)
       ary(11):Bend Range Lower                (0〜15:−36,−24,−12〜0)
       ary(12):Bend Range Upper                (0〜12)
       ary(13):Channel After Sens              (0〜27:−36,−24,−12〜+12)
       ary(14):Poly After Sens                 (0〜27:−36,−24,−12〜+12)
       ary(15):Auto Bend Depth                 (0〜27:−36,−24,−12〜+12)
       ary(16):Auto Bend Rate                  (0〜15)
       ary(17):Detune Depth                    (0〜15)
       ary(18):Rate                            (0〜63)
       ary(19):Waveform                        (0〜8)
       ary(20):Depth                           (0〜15)
       ary(21):Delay                           (0〜15)
       ary(22):Rise Time                       (0〜15)
       ary(23):Modulation Depth                (0〜15)
       ary(24):Ch After Sens                   (0〜15)
       ary(25):Poly After Sens                 (0〜15)
       (U220マニュアルp65,p149参照)
--------------------------------------------------------------------------------
関数名  u220_drum_setup(ary,id)

機能    U220のテンポラリ・ドラム・セットアップパラメータの設定

引数    ary=パラメータ(dim char ary(6)={pr1,…,pr7})
	id=U220のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、char型で添え字は必ず6でなければならない。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):Rhythm Setup #                  (0〜3:1〜4)
	ary(1):Voice Reserve                   (0〜30)
	ary(2):Receive Channel                 (1〜17:1〜16,OFF)
	ary(3):Level                           (0〜127)
	ary(4):Level Boost Sw                  (0〜1:OFF/ON)
	ary(5):Rx Volume                       (0〜1:OFF/ON)
	ary(6):Rx Hold                         (0〜1:OFF/ON)
        (U220マニュアルp63,p149参照)
--------------------------------------------------------------------------------
関数名  u220_drum_inst(nt,ary,id)

機能    U220のドラムインストパラメータの設定

引数    nt=ノートナンバー(char:35〜99)
	ary=パラメータ(dim char ary(19)={pr1,…,pr20})
	id=U220のデバイスID(char)

戻り値  なし

備考    配列は必ず1次元、添え字は19以内で配列の内容全部がU220へ送信される。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	ary(0):Tone Media                      (0〜31:I,1〜31)
	ary(1):Tone Number                     (0〜127:1〜128)
	ary(2):Source Key                      (0〜127:C−1〜G9)
	ary(3):Mute Inst                       (34〜98:OFF,B1〜D7)
	ary(4):Inst Level                      (0〜31)
	ary(5):Velocity Sens                   (0〜15)
	ary(6):Env Mode                        (0〜1:Sustain,No Sustain)
	ary(7):Env Attack Rate                 (1〜15:−7〜+7)
	ary(8):Env Decay Rate                  (1〜15:−7〜+7)
	ary(9):Env Release Rate                (1〜15:−7〜+7)
       ary(10):Pitch Shift Coarse              (0〜27:−36,−24,−12〜+12)
       ary(11):Pitch Shift Fine                (14〜114:−50〜+50)
       ary(12):Channel After Sens              (0〜27:−36,−24,−12〜+12)
       ary(13):Poly After Sens                 (0〜27:−36,−24,−12〜+12)
       ary(14):Random                          (0〜15)
       ary(15):Auto Bend Depth                 (0〜27:−36,−24,−12〜+12)
       ary(16):Auto Bend Rate                  (0〜15)
       ary(17):Detune Depth                    (0〜15)
       ary(18):Output Assign                   (0〜3:Dry,Rev,Cho,Dir1)
       ary(19):Pan                             (0〜15:L7〜M〜R7)
       (U220マニュアルp72,p149)
--------------------------------------------------------------------------------
関数名  u220_print(ms,id)

機能    U220のコンソールに文字列を表示する

引数    ms=文字列(str:12文字以内)
	id=U220のデバイスID(char)

戻り値  なし

備考    IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
--------------------------------------------------------------------------------
●M1/M1EX/M1R/M1REX専用命令
  パラメータの意味などは楽器のマニュアルを参照のこと
--------------------------------------------------------------------------------
関数名  m1_midi_ch(ary)  (注2)

機能    M1のシーケンサのSONG0の各トラックのMIDIチャンネルを設定する

引数    ary=各パートのチャンネル値(1〜16,17:OFF)
				   (dim char ary(7)={ch1,…,ch8})

戻り値  なし

備考    配列は必ず1次元、char型で添え字は必ず7でなければならない。

注意    M1用の命令はM1EX/M1R/M1REXに対しても使用できる。以下同様。
--------------------------------------------------------------------------------
関数名  m1_part_setup(ary)     (注2)

機能    M1のシーケンサのSONG0の各トラックのパラメータを設定する

引数    ary=各パートのパラメータ(dim char ary(39)={pr1,…,pr40})

戻り値  なし

備考    配列は必ず1次元、char型で添え字は必ず39でなければならない。
	TRACK 1
	ary(0):PROGRAM NUMBER                  (0〜199:I00〜C99)
	ary(1):OUTPUT LEVEL                    (0〜99)
	ary(2):KEY TRANSPOSE                   ($F4〜$0C:−12〜12)
	ary(3):DETUNE                          ($CE〜$32:−50〜+50)
	ary(4):PAN                             (0〜13:10:0〜0:10,C,C+D,D)
	TRACK 2〜8
	以下同様
    (M1マニュアルp126参照)
--------------------------------------------------------------------------------
関数名  m1_effect_setup(ary)    (注2)

機能    M1のシーケンサのSONG0のエフェクトパラメータを設定する

引数    ary=エフェクトパラメータ(dim char ary(24)={pr1,…,pr25})

戻り値  なし

備考    配列は必ず1次元、char型で添え字は必ず24でなければならない。
	ary(0):Effect 1 Pattern No.            (0〜33:1〜32,Thru)
	ary(1):Effect 2 Pattern No.            (0〜33:1〜32,Thru)
	ary(2):Effect 1 L-Ch E.Balnc           (0〜100)
	ary(3):Effect 1 R-Ch E.Balnc           (0〜100)
	ary(4):Effect 2 L-Ch E.Balnc           (0〜100)
	ary(5):Effect 2 R-Ch E.Balnc           (0〜100)
	ary(6):Output 3 Pan                    (0〜101:OFF,100:0〜0:100)
	ary(7):Output 4 Pan                    (0〜101:OFF,100:0〜0:100)
	ary(8):Effect I/O                      (BIT0:Effect 1 L-Ch 0=OFF/1=ON
						BIT1:Effect 1 R-Ch 0=OFF/1=ON
						BIT2:Effect 2 L-Ch 0=OFF/1=ON
						BIT3:Effect 2 R-Ch 0=OFF/1=ON)
						BIT4:Effect 2 0=PARALLEL/1=SERIAL)
	ary(9〜16):Effect 1 Parameter 
       ary(17〜24):Effect 2 Parameter

	Structure  of  Effect  Parameter
						     (ofs=9 or 17)
	1〜3:Hall (4,5:Room,6:Live Stage)
	ary(ofs+0):Reverb Time                 (0〜97:0.2〜9.9),(0〜48:0.2〜5.0)
	ary(ofs+1):Dummy                       0
	ary(ofs+2):High Damp                   (0〜99)
	ary(ofs+3):Pre Delay                   (0〜200)
	ary(ofs+4):E/R Level                   (0〜99)
	ary(ofs+5):Dummy                       0
	ary(ofs+6):EQ High                     ($F4〜$0C:−12〜+12)
	ary(ofs+7):EQ Low                      ($F4〜$0C:−12〜+12)

	7〜9:Early Reflection 1,2,3
	ary(ofs+0):E/R Time                    (0〜70:100〜800)
	ary(ofs+1):Pre Delay                   (0〜200)
	ary(ofs+2):Dummy                       0
	      :                                :
	ary(ofs+5):Dummy                       0
	ary(ofs+6):EQ High                     ($F4〜$0C:−12〜+12)
	ary(ofs+7):EQ Low                      ($F4〜$0C:−12〜+12)

	10:Stereo Delayt,11:Cross Delay
	ary(ofs+0):Delay Time L (L)            (0〜500)
	ary(ofs+1):Delay Time L (H)
	ary(ofs+2):Feedback                    ($9D〜$63:−99〜99)
	ary(ofs+3):High Damp                   (0〜99)
	ary(ofs+4):Delay Time R (L)            (0〜500)
	ary(ofs+5):Delay Time R (H)
	ary(ofs+6):EQ High                     ($F4〜$0C:−12〜+12)
	ary(ofs+7):EQ Low                      ($F4〜$0C:−12〜+12)

	12〜13:Stereo Chorus 1〜2 (14〜15:Flanger)
	ary(ofs+0):Depth                       (0〜99)
	ary(ofs+1):Speed                       (0〜99:0.03〜3.00 0.03step
						100〜199:3.1〜13.0 0.1step
						200〜216:14.0〜30.0 1.0step)
	ary(ofs+2):LFO Status                  (BIT0:Waveform =0:Sin,=1:Tri
						BIT1:Phase =0:0.0゚,=1:180゚
						BIT2:Wave Shape =0:Normal
								=1:for Flanger)
	ary(ofs+3):Feedback                    ($9D〜$63:−99〜+99)
	ary(ofs+4):Delay Time                  (0〜200),(0〜50)
	ary(ofs+5):Dummy                       0
	ary(ofs+6):EQ High                     ($F4〜$0C:−12〜+12)
	ary(ofs+7):EQ Low                      ($F4〜$0C:−12〜+12)

	16〜17:Phase Shifter 1〜2
	ary(ofs+0):Depth                       (0〜99)
	ary(ofs+1):Speed                       (0〜99:0.03〜3.00 0.03step
						100〜199:3.1〜13.0 0.1step
						200〜216:14.0〜30.0 1.0step)
	ary(ofs+2):LFO Status                  (BIT0:Waveform =0:Sin,=1:Tri
						BIT1:Phase =0:0.0゚,=1:180゚
						BIT2:Wave Shape =0:Normal
								=1:for Flanger)
	ary(ofs+3):Feedback                    ($9D〜$63:−99〜+99)
	ary(ofs+4):Manual                      (0〜99)
	ary(ofs+5):Dummy                       0
	ary(ofs+6):Dummy                       0
	ary(ofs+7):Dummy                       0

	18〜19:Stereo Toremolo 1〜2
	ary(ofs+0):Depth                       (0〜99)
	ary(ofs+1):Speed                       (0〜99:0.03〜3.00 0.03step
						100〜199:3.1〜13.0 0.1step
						200〜216:14.0〜30.0 1.0step)
	ary(ofs+2):LFO Status                  (BIT0:Waveform =0:Sin,=1:Tri
						BIT1:Phase =0:0.0゚,=1:180゚
						BIT2:Wave Shape =0:Normal
								=1:for Flanger)
	ary(ofs+3):Shape                       ($9D〜$63:−99〜+99)
	ary(ofs+4):Dummy                       0
	ary(ofs+5):Dummy                       0
	ary(ofs+6):EQ High                     ($F4〜$0C:−12〜+12)
	ary(ofs+7):EQ Low                      ($F4〜$0C:−12〜+12)

	20:Equalizer
	ary(ofs+0):Dummy                       0
	     :                                 :
	ary(ofs+3):Dummy                       0
	ary(ofs+4):Low fc                      (0〜2:0.25k,0.50k,1.00k)
	ary(ofs+5):High fc                     (0〜2:1k,2k,4k)
	ary(ofs+6):High Gain                   ($F4〜$0C:−12〜+12)
	ary(ofs+7):Low Gain                    ($F4〜$0C:−12〜+12)

	21:Overdrive
	ary(ofs+0):Dummy                       0
	ary(ofs+1):Dummy                       0
	ary(ofs+2):Drive                       (0〜99)
	ary(ofs+3):Level                       (0〜99)
	ary(ofs+4):Dummy                       0
	ary(ofs+5):Dummy                       0
	ary(ofs+6):EQ High                     ($F4〜$0C:−12〜+12)
	ary(ofs+7):EQ Low                      ($F4〜$0C:−12〜+12)

	22:Distortion
	ary(ofs+0):Dummy                       0
	ary(ofs+1):Dummy                       0
	ary(ofs+2):Distortion                  (0〜99)
	ary(ofs+3):Level                       (0〜99)
	ary(ofs+4):Dummy                       0
	ary(ofs+5):Dummy                       0
	ary(ofs+6):Dummy                       0
	ary(ofs+7):EQ Low Gain                 ($F4〜$0C:−12〜+12)

	23:Exciter

	ary(ofs+0):Blend                       ($9D〜$63:−99〜+99)
	ary(ofs+1):Emphatic Point              (0〜9:1〜10)
	ary(ofs+2):Dummy                       0
	     :                                 :
	ary(ofs+5):Dummy                       0
	ary(ofs+6):EQ High                     ($F4〜$0C:−12〜+12)
	ary(ofs+7):EQ Low                      ($F4〜$0C:−12〜+12)

	24:Synphonic Ensamble
	ary(ofs+0):Depth                       (0〜99)
	ary(ofs+1):Dummy                       0
	     :                                 :
	ary(ofs+5):Dummy                       0
	ary(ofs+6):EQ High                     ($F4〜$0C:−12〜+12)
	ary(ofs+7):EQ Low                      ($F4〜$0C:−12〜+12)

	25:Rotary Speaker
	ary(ofs+0):Depth                       (0〜99)
	ary(ofs+1):Dummy                       0
	ary(ofs+2):Speed Rate                  ($F6〜$0A:−10〜+10)
	ary(ofs+3):Dummy                       0
	     :                                 :
	ary(ofs+7):Dummy                       0

	26:Delay/Hall
	ary(ofs+0):Delay Time (L)              (0〜500)
	ary(ofs+1):Delay Time (H)
	ary(ofs+2):Feedback                    ($9D〜$63:−99〜99)
	ary(ofs+3):High Damp                   (0〜99)
	ary(ofs+4):Reverb Time                 (0〜97:0.2〜9.9)
	ary(ofs+5):Dummy                       0
	ary(ofs+6):High Damp                   (0〜99)
	ary(ofs+7):Pre Delay                   (0〜150)

	27:Delay/Room
	ary(ofs+0):Delay Time (L)              (0〜500)
	ary(ofs+1):Delay Time (H)
	ary(ofs+2):Feedback                    ($9D〜$63:−99〜99)
	ary(ofs+3):High Damp                   (0〜99)
	ary(ofs+4):Reverb Time                 (0〜97:0.2〜9.9)
	ary(ofs+5):Dummy                       0
	ary(ofs+6):High Damp                   (0〜99)
	ary(ofs+7):Pre Delay                   (0〜150)

	28:Delay/Early Reflection
	ary(ofs+0):Delay Time (L)              (0〜500)
	ary(ofs+1):Delay Time (H)
	ary(ofs+2):Feedback                    ($9D〜$63:−99〜99)
	ary(ofs+3):High Damp                   (0〜99)
	ary(ofs+4):E/R Time                    (0〜30:100〜400)
	ary(ofs+5):Pre Delay                   (0〜150)
	ary(ofs+6):Dummy                       0
	ary(ofs+7):Dummy                       0

	29:Delay/Chorus
	ary(ofs+0):Delay Time L (L)            (0〜500)
	ary(ofs+1):Delay Time L (H)
	ary(ofs+2):Feedback L                  ($9D〜$63:−99〜99)
	ary(ofs+3):High Damp L                 (0〜99)
	ary(ofs+4):Delay Time R (L)            (0〜500)
	ary(ofs+5):Delay Time R (H)
	ary(ofs+6):Feedback R                  ($9D〜$63:−99〜99)
	ary(ofs+7):High Damp R                 (0〜99)

	30:Delay/Chorus (31:Delay Flanger)
	ary(ofs+0):Delay Time (L)              (0〜500)
	ary(ofs+1):Delay Time (H)
	ary(ofs+2):Feedback                    ($9D〜$63:−99〜99)
	ary(ofs+3):High Damp                   (0〜99)
	ary(ofs+4):Depth                       (0〜99)
	ary(ofs+5):Speed                       (0〜99:0.03〜3.00 0.03step
						100〜199:3.1〜13.0 0.1step
						200〜216:14.0〜30.0 1.0step)
	ary(ofs+6):LFO Status                  (BIT0:Waveform =0:Sin,=1:Tri
						BIT1:Phase =0:0.0゚,=1:180゚
						BIT2:Wave Shape =0:Normal
								=1:for Flanger)
	ary(ofs+7):Feedback                    0,($9D〜$63:−99〜99)

	32:Delay/Phaser
	ary(ofs+0):Delay Time (L)              (0〜500)
	ary(ofs+1):Delay Time (H)
	ary(ofs+2):Feedback                    ($9D〜$63:−99〜99)
	ary(ofs+3):High Damp                   (0〜99)
	ary(ofs+4):Depth                       (0〜99)
	ary(ofs+5):Speed                       (0〜99:0.03〜3.00 0.03step
	ary(ofs+6):Feedback                    ($9D〜$63:−99〜99)
	ary(ofs+7):Dummy                       0

	33:Delay/Tremolo
	ary(ofs+0):Delay Time (L)              (0〜500)
	ary(ofs+1):Delay Time (H)
	ary(ofs+2):Feedback                    ($9D〜$63:−99〜99)
	ary(ofs+3):High Damp                   (0〜99)
	ary(ofs+4):Depth                       (0〜99)
	ary(ofs+5):Speed                       (0〜99:0.03〜3.00 0.03step
	ary(ofs+6):Dummy                       0
	ary(ofs+7):Shape                       ($9D〜$63:−99〜99)
        (M1マニュアルp127参照)
--------------------------------------------------------------------------------
関数名  m1_print(ms)            (注2)

機能    M1のシーケンサのSONG0の名前を設定する

引数    ms=文字列(str:10文字以内)

戻り値  なし
--------------------------------------------------------------------------------
関数名  send_to_m1(id)          (注2)

機能    'm1_midi_ch()'〜'm1_print()'までの設定値をM1へ送信する

引数    id=MIDIのデバイスID値(char:&h30〜&h3f)

戻り値  なし

備考    デバイスID=&H30+(グローバルチャンネル−1)
	グローバルチャンネルとはGLOBALモードのF5−1で設定出来る。
	IDは省略可能。省略すると以前設定したものが選択される。最初の使用時に
	省略した場合はドライバ内のデフォルト値が選択される。
	必ず'm1_midi_ch()'〜'm1_print()'を設定してからこの命令を実行すること。
	'm1_effect_setup'のみ省略が可能。この時はドライバのデフォルトデータが
	送信される。
	'm1_midi_ch()'〜'm1_print()'の間にM1関係以外のコマンドがあると正常なデータが
	送信されないので注意すること。

例
        10 dim char a(7)={2,1,4,3,6,5,8,7}
        20 m1_midi_ch(a)
        25 /*音色,音量,キートランスポーズ,デチューン,パンのフォーマット
        30 dim char b(39)={  0,99,0,0,5,  /*TRACK 1
        40                   0,99,0,0,5,  /*TRACK 2
        50                   0,99,0,0,5,  /*TRACK 3
        60                   0,99,0,0,5,  /*TRACK 4
        70                   0,99,0,0,5,  /*TRACK 5
        80                   0,99,0,0,5,  /*TRACK 6
        90                   0,99,0,0,5,  /*TRACK 7
       100                   0,99,0,0,5}  /*TRACK 8
       110 m1_part_setup(b)
       120 dim char c(24)={&H21,&H21}
       130 m1_effect_setup(c)
       140 m1_print("Zenji.N")
       150 send_to_m1(&H30)
--------------------------------------------------------------------------------
●その他
--------------------------------------------------------------------------------
関数名  m_wave_form(wv,lt,lp,ary)

機能    波形メモリの登録

引数    wv=登録先波形番号(char:8〜31)
	lt=ループタイプ(char:0〜2)
	lp=ループポイント(int:0〜65535)
	ary=波形データ(dim int ary(0〜65535)={.....})

戻り値  なし

備考    波形番号8〜31に登録できる(波形番号0〜7はプリセット波形などが
	設定されておりリザーブ)。
	ループタイプとは波形を最後まで処理終えたあと、どうループさせるかを
	設定するもの。
	0 →            ワンショット    (波形を一度実行したら最後の値を継続する)
	1 →→→→....  リピート        (波形の終点までいったならば
					ループポイントに戻る)
	2 →←→←....  オルタニティヴ  (波形のループポイントから終点まで
					交互に反復する)
	ループポイントは0〜65535までが有効。これは何番目のデータを
	ループポイントに設定するかを決めるパラメータで省略すると
	ループポイントは0、すなわちデータの先頭がループポイントと見なされる。
	波形データは符号付き16ビット整数で構成する。
	(−32768〜+32767($8000〜$7fff))データの個数は65535個まで。
	それ以上は設定できない。
	波形メモリの具体的な使用方法についてはMEASURE5参照。
--------------------------------------------------------------------------------
関数名  fm_master(v)

機能    FM音源のトラックのマスターボリューム

引数    v:ボリューム値(char:0最小〜255最大)

戻り値  なし

備考    コンパイル時や中間言語変換時にのみ有効なコマンドなので演奏中に
	指定しても無意味。用途としてはADPCM、MIDI楽器との
	最終的な音量バランスを決定するときなど。通常は演奏データよりも先に
	書くと良いだろう。'm_init()'でデフォルトとして255が設定される。
	増減は線形的でなく指数関数的であるので注意のこと。
--------------------------------------------------------------------------------
関数名  m_print(ms)

機能    単なる文字表示

引数    ms=文字列(str:96文字以内)

戻り値  なし
--------------------------------------------------------------------------------
関数名  zmd_play(fn)

機能    コンパイルされたデータの演奏

引数    fn=ファイル名(str)

戻り値  なし

備考    拡張子を省略した場合は自動的に'.ZMD'を付け足す。 fnがカレントより
	見つからない場合は環境変数'zmusic'のパスを参照する。
--------------------------------------------------------------------------------
関数名  m_pcmplay(nt,pn,fr)

機能    登録してあるノート番号ntのADPCM音を鳴らす

引数    nt=ノート番号(int:0〜511)
	pn=パンポット(char:0〜3)
	fr=再生周波数(char:0〜4)

戻り値  なし

備考    fr:     0= 3.9kHz
		1= 5.2kHz
		2= 7.8kHz
		3=10.4kHz
		4=15.6kHz

例  
        m_pcmplay(10,3,4)
--------------------------------------------------------------------------------
関数名  m_switch(sw,fn)

機能    ZMSファイル(OPMファイル)のジェネレートスイッチ

引数    sw=スイッチ(char:0=off,1=on)
	fn=ファイルネーム(str)

戻り値  なし

備考    fnを省略するとデフォルトファイルネームとして
	'ZMUSIC.OPM'がカレントに作成される。
	なお本命令はステートメントでなくコマンドであるため
	プログラム中に書くことは出来ない。書いた場合はエラーとなる。
--------------------------------------------------------------------------------
関数名  zm_ver()

機能    ZMUSICとPCM8.Xの常駐チェック

引数    なし

戻り値:	上位16ビット=0		PCM8は常駐していない
	上位16ビット=-1	PCM8が常駐している
	下位16ビット=0		ZMUSICは常駐していない
	下位16ビット≠0		ZMUSICが常駐している

備考    ZMUSICが常駐している場合はそのバージョンIDを返す。
	上位バイト	バージョン整数部, バージョン少数第1桁
	下位バイト	対応バージョンコード, バージョン少数第2桁
	対応バージョンコード
			UNIVERSAL VERSION	0
			16bit VERSION		1
			RS-MIDI VERSION		2
			POLYPHON VERSION	3
	例
			ポリフォン・バージョン1.49 → バージョンID=$1439
--------------------------------------------------------------------------------
関数名  exec_zms(zms)

機能    ZMSコマンドの実行

引数    zms=ZMSコマンド文字列(str)

戻り値  なし
--------------------------------------------------------------------------------
関数名  adpcm_to_pcm(adpcm_data_buffer,size,pcm_data_buffer)

機能    ADPCMデータを符号つき16ビットPCMデータへ変換する

引数    adpcm_data_buffer:入力ADPCMデータ格納バッファ(dim char ary(0〜65535))
	size:入力ADPCMデータの個数(int:0〜65535)
	pcm_data_buffer:出力PCMデータ格納用バッファ(dim int ary(0〜65535))

戻り値  なし

備考	出力PCMデータ格納用配列のサイズは入力ADPCMデータ格納配列のサイズの
	2倍は必要。
--------------------------------------------------------------------------------
関数名  pcm_to_adpcm(pcm_data_buffer,size,adpcm_data_buffer)

機能    符号つき16ビットPCMデータをADPCMデータへ変換する

引数    pcm_data_buffer:入力PCMデータ格納バッファ(dim int ary(0〜65535))
	size:入力PCMデータの個数(int:0〜65535)
	adpcm_data_buffer:出力ADPCMデータ格納用バッファ(dim int ary(0〜65535))

戻り値  なし

備考	出力ADPCMデータ格納用配列のサイズは入力PCMデータ格納配列のサイズの
	半分以上必要。
--------------------------------------------------------------------------------
(注1)チャンネル番号は'm_ch()'コマンドで対応するデバイスが変動する。

        'm_ch()'コマンドの項を参照。

(注2)M1専用命令は途中でM1関係以外の命令が入ると正常なデータが

        楽器側へ送信されないので注意。
{ -- ZM4.MAN ------------------------------------------------
	    MEASURE  4
	     ZMSコマンド


  ここではCOMMAND.X上から音楽プログラムを書くための書式、

つまりZMSファイル(OPMファイル)の文法について解説します。








4.1.  ZMSファイルとは


  ZMUSIC.XではエディタからMMLやコマンドを記述したファイルを

演奏することが出来る。これをZMUSICシステムでは「ZMSファイル」と

呼ぶ。X68k本体に付属している「OPMDRV.X」用の「OPMファイル」と

概念的には、ほとんど同じである。

  ZMSファイルはED.Xなどのスクリーンエディタを使って、ここで解説する

「ZMSコマンド」を記述することによって作成していく。

(ZMSコマンド(Tn)以外のトラックに依存しないZMSコマンドを特に

「共通コマンド/コモンコマンド」と呼ぶ)。MUSICZ.FNCに

揃っているコマンドは、ほとんどZMSコマンドで記述することができ、

BASICの時と同じ感覚で曲を作ることが出来る。

  X−BASIC上で記述した音楽プログラムをMUSICZ.FNCの

'm_switch()'コマンドを使用してから実行するとZMSファイルを自動生成する

ことが出来る(MEASURE3参照)。ZMSファイル形式はCOMMAND.X

レベルから手軽に演奏出来たり、コンパイルすることも出来て便利なので、

X−BASICで作った曲をZMSファイルにコンバートして管理するのも

良いだろう。


4.2.  コマンド解説を読むにあたって


  略しても良いパラメータはその旨を記述してあるがそれ以外は省略不可である。

コマンドは大文字小文字どちらで記述しても構わないが、ここでは説明の都合上

コマンド名を大文字、パラメータを小文字で記述している。

  '*'を付けたものはパラメータを複数行に渡って記述出来る。それ以外の

コマンドではその1行で全てのパラメータを記述しなければならない。

  MUSICZ.FNCの外部関数命令と対応するものはそのコマンド名を

挙げてある。詳しいパラメータ範囲等はそちらの説明を参照すること。


4.3.  ZMSファイル用コマンド


●初期化
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(I)

  各種音源やZMUSIC.X本体の初期化を行う。

通常はZMSの先頭に書く。

MIDI楽器に対して初期化メッセージを送出する

(具体的な送信メッセージ内容に関してはMEASURE3のm_init()の項を参照)。

(ZMDデータとしては生成されないコマンド)
(MEASURE3 m_init()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Zn)

  全音符の絶対音長を設定する。設定範囲は1≦n≦254。

(I)コマンドでデフォルト値192が自動設定される。通常は設定する必要はない。

ゲーム等のBGMを制作する際、割り込みを軽くする目的で使うと良い。

192, 144, 128, 96といった数値を設定するのが一般的である。

(MEASURE3 m_count()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●トラック確保/チャンネルアサイン
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Mtr,sz)

  トラックtrにバッファサイズszバイト確保する。1≦tr≦80, 100≦sz≦65535。

例
  (m2,3000)           トラック2を3000バイト確保する

(ZMDデータとしては生成されないコマンド)
(MEASURE3 m_alloc()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Ach,tr)

  チャンネルchをトラックtrへアサインする。1≦ch≦25, 1≦tr≦80。

PCM8モード時は26〜32が実用可能。

チャンネル番号はベースチャンネル変更コマンドによって、その対象デバイスが

変動する((Bn)コマンド参照)。

  chの部分に規定の文字列を指定することによって(Bn)コマンドの影響を

受けずに絶対的に指定することも可能である。

  具体的には
	FM1〜8          FM音源チャンネル1〜8
	MIDI1〜16       MIDIチャンネル1〜16
	ADPCM           ADPCM音源
	ADPCM1〜8       PCM8モード時
例
  (a1,2)          チャンネル1をトラック2へ割り当てる
  (aFM1,3)        FM音源チャンネル1をトラック3へ割り当てる。

(ZMDデータとしては生成されないコマンド)
(MEASURE3 m_assign(),m_assign2()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Bn)

  ベースチャンネルを設定する。

0=FM基準    1=MIDI基準

n=0を設定するとチャンネル番号1〜8がFM音源,9がADPCM,10〜25がMIDIになる。

n=1を設定するとチャンネル番号1〜16がMIDI,17〜24がFM音源,25がADPCMになる。

  ただしPCM8モードの時は(Bn)の値によらずチャンネル番号26〜32が

ADPCMチャンネル2〜8に対応する。

(ZMDデータとしては生成されないコマンド)
(MEASURE3 m_ch()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●演奏制御
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Pn1,n2,…,ni)または(P)

  演奏を開始する。

n1〜はトラック番号で、1≦ni≦80。全パラメータを省略して

(P)のみでは全トラックの演奏を開始する。

例
  (p1,2,3)

(ZMDデータ作成時には全く無視されるコマンド)
(MEASURE3 m_play()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Sn1,n2,…,ni)または(S)

  演奏を停止する。

n1〜はトラック番号で、1≦ni≦80。全パラメータを省略して

(S)のみでは全トラックの演奏を停止する。

例
  (s1,2,3)

(ZMDデータ作成時には全く無視されるコマンド)
(MEASURE3 m_stop()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Cn1,n2,…,ni)または(C)

  演奏を再開する。

n1〜はトラック番号で、1≦ni≦80。全パラメータを省略して

(C)のみでは全トラックの演奏を再開する。

例
  (c1,2,3)

(ZMDデータ作成時には全く無視されるコマンド)
(MEASURE3 m_cont()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Ech1,ch2,…,chi)

  演奏中のチャンネルをリアルタイムにマスク/解除することができる。任意の個数の

チャンネル番号を書くことによって指定以外のチャンネルをマスクできる。

チャンネル番号は1≦chi≦25、ただしPCM8モード時は1≦chi≦32となる。

(Bn),'m_ch()'によってチャンネル番号と対象デバイスは変動する点に注意。

  後述のZP.Rのオプションスイッチ'−E'と全く同様の機能。

例
  (e1,2)          チャンネル1,2以外をマスク

  必ず(Mtr,size),(Ach,tr),'m_alloc()','m_assign()'以降に書くこと。トラック確保、

チャンネルアサイン前に記述しても意味を持たない。(P)などの直前に書くのが

スタンダードな使い方。

  ZP -DとしてZP.Rを常駐させたあとに使用できる再演奏機能([SHIFT]+[XF4])を実行した

時にも影響を与えるので、1つのチャンネルの演奏チェックを何度も行う時には便利。

(ZMDデータとしては生成されないコマンド)
(MEASURE3 m_solo()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Fn)

  正数でフェードアウト、負数でフェードインを行うことができる。この指定を

行った時点から演奏中の全トラックがフェードイン/アウトし始める。

ただし、1トラックでもすでにフェードイン/アウトしていた場合は無視される。

−85≦n≦−1  フェードイン指定、絶対値が大きいほど音量増加スピードが速い
n=0         フェードイン/アウトの解除
1≦n≦85    フェードアウト指定、絶対値が大きいほど音量の減衰スピードが速い

(ZMDデータ作成時には全く無視されるコマンド)
(MEASURE3 m_fadeout()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●開発補助
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Dn)

  [@],[!],[end]コマンドの有効無効化スイッチ。

n=0で無効、n=1で有効となる。

  コンパイル時のみ有効で演奏中に指定しても無意味。

(ZMDデータとしては生成されないコマンド)
(MEASURE3 m_debug()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Q)

  各トラックにセットされたMMLの総ステップタイム数を計算し画面に出力する。

(ZMDデータ作成時には全く無視されるコマンド)
(MEASURE3 m_total()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●テンポ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(On)

  テンポnを設定する。

  設定後、1分間にn個の4分音符を演奏するようになる。20≦n≦300。ただし、

タイマーAモードの時は77以下は強制的に77となる。

例
  (o120)

(MEASURE3 m_tempo()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●MMLの書き込み
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Tn1,n2,…,n8) 

  MMLをトラックn1〜n8へ書き込む。1≦ni≦80。n2以降は省略可能。

m_trk(10,"abcde")は(t10)abcdeに相当する。

(MEASURE3 m_trk()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●FM音源の音色設定
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Vn,0,v1,v2,…,v55)                      *

  FM音源の音色設定を行う。

  nは定義する音色番号で1≦n≦200。

例
  (v1,0
/        AF  OM  WF  SY  SP PMD AMD PMS AMS PAN
	 60, 15,  2,  0,210, 40,  0,  2,  0,  3,  0
/        AR  DR  SR  RR  SL  OL  KS  ML DT1 DT2 AME
	 31,  5,  0, 12,  2, 30,  1,  2,  7,  0,  0
	 31,  5,  0, 12,  8,  6,  1,  2,  5,  0,  0
	 31,  5,  0, 12,  8, 28,  1,  2,  3,  0,  0
	 31,  5,  0, 12,  8,  6,  1,  2,  5,  0,  0)

(MEASURE3 m_vset()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(@n,v1,v2,…,v55)                    	*

  AL/FB分離形式によるFM音源の音色設定。

  nは定義する音色番号で1≦n≦200。

例
	/        AR  DR  SR  RR  SL  OL  KS  ML DT1 DT2 AME
  (@1,           31,  0,  2,  0,  0, 21,  0,  1,  0,  0,  0
		 31,  0,  0,  8,  0,  3,  0,  3,  0,  0,  0
		 31,  0,  0,  8,  0,  3,  0,  1,  0,  0,  0
		 31,  0,  0,  8,  0,  3,  0,  1,  0,  0,  0
	/        AL  FB  OM PAN  WF  SY  SP PMD AMD PMS AMS
		  5,  7, 15,  3   0,  0,  0,  0,  0,  0,  0)

(MEASURE3 m_fmvset()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.FM_VSETn {v1,v2,…,v55}                    *

  AL/FB分離形式によるFM音源の音色設定。

  nは定義する音色番号で1≦n≦200。

  機能とデータフォーマットは全く(@)コマンドと同じである。

例
	/        AR  DR  SR  RR  SL  OL  KS  ML DT1 DT2 AME
  fm_vset1 {     31,  0,  2,  0,  0, 21,  0,  1,  0,  0,  0
		 31,  0,  0,  8,  0,  3,  0,  3,  0,  0,  0
		 31,  0,  0,  8,  0,  3,  0,  1,  0,  0,  0
		 31,  0,  0,  8,  0,  3,  0,  1,  0,  0,  0
	/        AL  FB  OM PAN  WF  SY  SP PMD AMD PMS AMS
		  5,  7, 15,  3   0,  0,  0,  0,  0,  0,  0}

(MEASURE3 m_fmvset()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●ADPCMコンフィギュレーション
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
n=ファイルネーム,Pp,Vv,Mm,d,Cc,s,R,Ff,l

  ADPCM音の登録。

	n=設定音色番号(0〜511)
	p=ピッチシフトパラメータ(−12〜12)
	v=ボリュームパラメータ(1〜100(原音量)〜300)
	m=ミキシングノート番号(0〜511)
	d=ミキシングディレイパラメータ(0〜65535)
	c=カット・オフセットパラメータ(0〜65535)
	s=カット・サイズ(0〜65535)
	f=フェードイン/アウト・オフセット(0〜65535)
	l=フェードイン/アウト・レベル(0〜127)

  ファイルネーム以降は省略可能。詳しい使い方とパラメータの意味はMEASURE6参照。

(MEASURE3 m_pcmset(),MEASURE6参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.ADPCM_BANK n

  ADPCM音の登録先のバンクを指定する。

  n=バンク番号。1≦n≦4。

  '(I)'命令でデフォルト値1が設定される

(MEASURE6参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.Onk=ファイルネーム,Pp,Vv,Mm,d,Cc,s,R,Ff,l

  ADPCM音の登録。

	n=オクターブ値(−1〜9)
	k=音階MML(abcdefg,#,+,−)
	p=ピッチシフトパラメータ(−12〜12)
	v=ボリュームパラメータ(1〜100(原音量)〜300)
	m=ミキシングノート番号(0〜511)
	d=ミキシングディレイパラメータ(0〜65535)
	c=カット・オフセットパラメータ(0〜65535)
	s=カット・サイズ(0〜65535)
	f=フェードイン/アウトオフセット(0〜65535)
	l=フェードイン/アウトレベル(0〜127)

  ファイルネーム以降は省略可能。登録先ノート番号やミキシングノート番号は

'.ADPCM_BANK'命令のバンク番号が考慮される。

  詳しい使い方とパラメータの意味はMEASURE6参照。

(MEASURE3 m_pcmset(),MEASURE6参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.ERASE m 
または,
.ERASE .Onk    (.Oの'.'はあってもなくてもいい)

    m=ノート番号(0〜511)
       n=オクターブ値(-1〜9)
       k=音階MML(abcdefg,#,+,-)

 不要なAD PCMノートを削除する。

 ZPCNV.R専用の命令で,ZMS中に実行してもなんの機能も果たさない。

(MEASURE6参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.ADPCM_LIST ファイルネーム

  ADPCMデータのコンフィギュレーションファイルを読み込み実行する。

(MEASURE3 m_pcmcnf(),MEASURE6参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.ADPCM_BLOCK_DATA ファイルネーム

  ADPCMブロックデータ「ZPDデータ」の読み込み、登録を行う。

拡張子省略時には'.ZPD'が自動添付される。

(MEASURE3 m_adpcm_block(),MEASURE6参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●MIDIデータ出力
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(Xn1,n2,…,ni)                  *

  MIDIの生データを送信。MUSICZ.FNCの'm_out()'と

ほぼ同様のコマンドだがパラメータをいくつでも書くことが出来る(複数行に渡っても可)。

データは0≦ni≦255。256以上はその値を7ビットごとに分けて下位から送信される。

例
  8192→$00,$40
  32700→$3C,$7F,$01

(MEASURE3 m_out(), MEASURE9参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MIDI_DATA {n1,n2,…ni}               *

  MIDIの生データの送信。

データは0≦ni≦255。256以上はその値を7ビットごとに分けて下位から送信される。

例
  8192→$00,$40
  32700→$3C,$7F,$01

(MEASURE3 m_dirout(), MEASURE9参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.EXCLUSIVE {n1,n2,…,ni}               *

  エクスクルーシブデータの送信。

  データは0≦ni≦127。128以上はその値を7ビットごとに分けて下位から送信される。

例
  255→$01,$7F
  8192→$00,$40
  32700→$3C,$7F,$01

(MEASURE3 m_exc(), MEASURE9参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.ROLAND_EXCLUSIVE dev,mdl {n1,n2,…,ni}        *

  ローランド系の楽器へエクスクルーシブメッセージを送る。

  詳しい使い方はMEASURE9参照。

  dev=デバイスID, mdl=モデルID

  エクスクルーシブ・ヘッダやチェックサム・バイトは自動生成して送信してくれる。

  データは0≦ni≦127。128以上はその値を7ビットごとに分けて下位から送信される。

例
  255→$01,$7F
  8192→$00,$40
  32700→$3C,$7F,$01

(MEASURE3 m_roland(), MEASURE9参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MIDI_DUMP=ファイルネーム

  MIDIダンプデータ「MDDデータ」(MEASURE9参照)を楽器へ送信する。

拡張子省略時には'.MDD'が自動添付される。

(MEASURE3 m_trans(), MEASURE9参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●MIDIデータ入力
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(R)

  MIDIの生データを取り込み待機状態にする。

ミュージックプログラム中に記述しても意味を持たない。

詳しい使い方はMEASURE9を参照。

(ZMDデータとしては生成されないコマンド)
(MEASURE3 m_rec(), MEASURE9参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●SC55/SC155/CM300/CM500のGSパート専用命令
  パラメータの意味などは楽器のマニュアルあるいはMEASURE3を参照のこと
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.SC55_INIT id

  SC55の初期化を行なう

  id:SC55のデバイスID(省略可能、初期値$10)

(MEASURE3 sc55_init()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.SC55_V_RESERVE id  {n1,n2,…,n16}      *

  SC55の各パートのボイスリザーブを行う。

  id:SC55のデバイスID(省略可能、初期値$10)

  パラメータは必ず16個設定しなくてはならない。パラメータ各値の総和は24以内。

また、10番目のパラメータはリズムパートに相当する。

(SC55マニュアルp79, またはMEASURE3 sc55_v_reserve()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.SC55_REVERB id  {n1,n2,…,n7}         *

  SC55のリバーブパラメータの設定を行う。

  id:SC55のデバイスID(省略可能、初期値$10)

  パラメータは7個まで。

(SC55マニュアルp79, またはMEASURE3 sc55_reverb()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.SC55_CHORUS id  {n1,n2,…,n8}         *

  SC55のコーラスパラメータの設定を行う。

  id:SC55のデバイスID(省略可能、初期値$10)

  パラメータは8個まで。

(SC55マニュアルp79, またはMEASURE3 sc55_chorus()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.SC55_PART_SETUP pt,id  {n1,n2,…,n119}          *

  SC55のパートのパラメータを設定する。

  pt:パートナンバー(1≦pt≦16)省略不可(パートナンバー=10はリズムパート)
  id:SC55のデバイスID(省略可能、初期値$10)

  パラメータは119個まで。

(SC55マニュアルp79〜80, またはMEASURE3 sc55_part_setup()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.SC55_DRUM_SETUP map,key,id  {n1,n2,…,n8}             *

  SC55のドラムキットの設定を変える。

  map:マップナンバー(0,1)
  key:ノートナンバー(0≦key≦127)
  id:SC55のデバイスID(省略可能、初期値$10)

  パラメータは8個まで。

(SC55マニュアルp82, またはMEASURE3 sc55_drum_setup()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.SC55_PRINT id "文字列"

  SC55のコンソールに文字列を表示する。

  id:SC55のデバイスID(省略可能、初期値$10)

  文字列は32文字以内。

(MEASURE3 sc55_print()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.SC55_DISPLAY id  {n1,n2,…,n16}                *

  SC55のグラフィックディスプレイにドットパターンを表示する。

  id:SC55のデバイスID(省略可能、初期値$10)

  パラメータは必ず16個。

例
  /画面に'善'を出す
  .sc55_display$10 {      %0001000000010000
  			  %0000100000100000
			  %0111111111111100
			  %0000000100000000
			  %0011111111111000
			  %0000000100000000
			  %0111111111111100
			  %0001000100010000
			  %0000100100100000
			  %1111111111111110
			  %0000000000000000
			  %0011111111111000
			  %0010000000001000
			  %0010000000001000
			  %0011111111111000
			  %0010000000001000}

(MEASURE3 sc55_display()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●MT32/CM32L/(CM64/CM500のLAパート)専用命令
  パラメータの意味などは楽器のマニュアルあるいはMEASURE3を参照のこと
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MT32_INIT id

  MT32の初期化を行なう

  id:MT32のデバイスID(省略可能、初期値$10)

(MEASURE3 mt32_init()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MT32_P_RESERVE id  {n1,n2,…,n9}              *

  MT32の各パートのパーシャルリザーブを行う。

  id:MT32のデバイスID(省略可能、初期値$10)

  パラメータは必ず9個、パラメータ各値の総和は32以内。
  9番目はリズムパート。

(MEASURE3 mt32_p_reserve()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MT32_REVERB id  {n1,n2,n3}                 *

  MT32のリバーブパラメータを設定する。

  id:MT32のデバイスID(省略可能、初期値$10)

  パラメータは3個まで。

(MT32マニュアルp35, CM64マニュアルp30, またはMEASURE3 mt32_reverb()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MT32_PART_SETUP id  {n1,n2,…,n9}             *

  MT32の各パートのMIDIチャンネルを設定する。

  id:MT32のデバイスID(省略可能、初期値$10)

  パラメータは9個まで、9番目はリズムパート。
(パラメータはMIDIチャンネルなので1〜16まで有効。17以上はパートOFFとみなす。)

(MT32マニュアルp35, CM64マニュアルp30, またはMEASURE3 mt32_part_setup()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MT32_DRUM_SETUP n,id  {n1,n2,n3,n4}           *

  MT32のリズムキットの設定を変更する。

  n:変更対象ノートナンバー(24≦n≦87)
  id:MT32のデバイスID(省略可能、初期値$10)

  パラメータは4個まで。

(MT32マニュアルp35, CM64マニュアルp30, またはMEASURE3 mt32_drum_setup()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MT32_COMMON n,id  {"名前",n1,n2,n3,n4}        *

  MT32の音色のコモンパラメータを設定する。

  n:設定対象ティンバー番号(1≦n≦64)
  id:MT32のデバイスID(省略可能、初期値$10)
  名前は10文字以内(省略不可)

  パラメータは4個まで。

(MT32マニュアルp34, CM64マニュアルp29, または MEASURE3 mt32_common()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MT32_PATCH n,id  {n1,n2,…,n7}                *

  MT32のパッチを設定する。

  n:設定対象パッチナンバー(1≦n≦128)
  id:MT32のデバイスID(省略可能、初期値$10)

  パラメータは7個まで。

(MT32マニュアルp35, CM64マニュアルp30, またはMEASURE3 mt32_patch()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MT32_PARTIAL n,p,id  {n1,n2,…,n58}            *

  MT32の音色のパーシャルパラメータを設定する。

  n:設定対象ティンバー番号(1≦n≦64)
  p:設定対象パーシャルナンバー(1≦p≦4)
  id:MT32のデバイスID(省略可能、初期値$10)

  パラメータは58個まで。

(MT32マニュアルp34, CM64マニュアルp29, またはMEASURE3 mt32_partial()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.MT32_PRINT id "文字列"

  MT32のコンソールに文字列を表示する。

  id:MT32のデバイスID(省略可能、初期値$10)

  文字列は20文字以内。

(MEASURE3 mt32_print()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●U220/U20専用命令
  パラメータの意味などは楽器のマニュアルあるいはMEASURE3を参照のこと
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.U220_SETUP id  {n1,n2,…,n7}                  *

  U220のセットアップパラメータを設定する。

  id:U220デバイスID(省略可能、初期値$10)

  パラメータは必ず7個。

(U220マニュアルp46,p146,p148, またはMEASURE3 u220_setup()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.U220_PART_SETUP pt,id  {n1,n2,…,n13}                  *

  U220のテンポラリ・パッチのパートパラメータを設定する。

  pt:パートナンバー(1≦pt≦6)
  id:U220のデバイスID(省略可能、初期値$10)

  パラメータは必ず13個。

(U220マニュアルp58,p149, またはMEASURE3 u220_part_setup()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.U220_COMMON id  {n1,n2,…,n18}                 *

  U220のテンポラリ・パッチのコモンパラメータを設定する。

  id:U220のデバイスID(省略可能、初期値$10)

  パラメータは必ず18個。

(U220マニュアルp54,p149, またはMEASURE3 u220_common()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.U220_TIMBRE n,id  {"音色名",n1,n2,…,n12}              *

  U220に音色パラメータを設定する。

  n:セット先音色ナンバー(1≦n≦128)
  id:U220のデバイスID(省略可能、初期値$10)

  音色名は12文字以内。
  パラメータは必ず26個。

(U220マニュアルp72,p149, またはMEASURE3 u220_timbre()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.U220_DRUM_SETUP id  {n1,n2,…,n7}              *

  U220のテンポラリ・パッチのドラム・パラメータを設定する。

  id=U220のデバイスID(省略可能、初期値$10)

  パラメータは必ず7個。

(U220マニュアルp63,p149, またはMEASURE3 u220_drum_setup()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.U220_DRUM_INST n,id  {n1,n2,…,n20}            *

  U220のテンポラリ・ドラムキットの各ノートにおけるパラメータを設定する。

  n:ノートナンバー(35≦n≦99)
  id:U220のデバイスID(省略可能、初期値$10)

  パラメータは20個以内。

(U220マニュアルp72,p149, またはMEASURE3 u220_midi_inst()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.U220_PRINT id  {"文字列"}

  U220のテンポラリ・パッチの名前を設定する。

  id:U220のデバイスID(省略可能、初期値$10)

  文字列は12文字以内。

(MEASURE3 u220_print()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●M1専用命令
  M1専用命令は途中でM1関係以外の命令が入ると正常なデータが楽器側へ
 送信されないので注意
  パラメータの意味などは楽器のマニュアルあるいはMEASURE3を参照のこと
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.M1_MIDI_CH {ch1,ch2,…,ch8}

  M1のSEQ0の各パートの受信チャンネルを設定する。

  パラメータは必ず8個(1≦chi≦16:MIDI CH,17≦chi:off)。

例
  .m1_midi_ch {1,2,3,4,5,6,17,10}
  (パート1〜6をMIDIチャンネル1〜6に設定し、パート7はOFF,
  パート8をMIDIチャンネル10に設定)

(MEASURE3 m1_midi_ch()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.M1_PART_SETUP {n1,n2,…,n40}                   *

  M1のSEQ0の各パートのパラメータを設定する。

  パラメータは必ず5×8パート分=40個。

(M1マニュアルp126, またはMEASURE3 m1_part_set_up()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.M1_EFFECT_SETUP {n1,n2,…,n25}                 *

  M1のSEQ0のエフェクトパラメータの設定。

  パラメータは必ず25個。

(M1マニュアルp127, またはMEASURE3 m1_effect_setup()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.M1_PRINT "文字列"

  M1のSEQ0のソングネームの設定。

  文字列は10文字以内。

(MEASURE3 m1_print()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.SEND_TO_M1 id

  '.M1_MIDI_CH', '.M1_PART_SEUP', '.M1_EFFECT_SETUP', '.M1_PRINT'で設定した
パラメータをM1へ送信する。

	id:M1のデバイスID(省略可能、初期値$30)

備考    デバイスIDは$30+グローバルチャンネル(0〜$f)で求められる。
	グローバルチャンネルとはGLOBALモードのF5−1で設定出来る。
	必ず'.M1_MIDI_CH'〜'.M1_PRINT'を設定してからこの命令を実行すること。
	'.M1_EFFECT_SETUP'のみ省略が可能。この時はドライバのデフォルトデータが
	送信される。
	'.M1_MIDI_CH'〜'.M1_PRINT'の間にM1関係以外のコマンドがあると正常なデータが
	送信されないので注意すること。

(MEASURE3 send_to_m1()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●その他
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.WAVE_FORM wv,lt,lp {dt0,dt1,dt2,…,dt65535}

  波形メモリの登録。

  wv:波形番号(8≦wv≦31)
  lt:ループタイプ(0≦lt≦2)
  lp:ループポイント(0≦lp≦65535)
  dt0,dt1,dt2,…,dt65535:波形データ(−32768≦dti≦32767)

備考    波形番号8〜31に登録できる(波形番号0〜7はプリセット波形などが
	設定されておりリザーブ)。
	パラメータのループタイプとは波形を最後まで処理を終えたあと、
	どうループさせるかを設定するもの。
	0 →            ワンショット    (波形を一度実行したら最後の値を継続する)
	1 →→→→....  リピート        (波形の終点までいったならば
					ループポイントに戻る)
	2 →←→←....  オルタニティヴ  (波形のループポイントから終点まで
					交互に反復する)
	ループポイントは0〜65535までが有効。これは何番目のデータを
	ループポイントに設定するかを決めるパラメータで省略すると
	ループポイントは0、すなわちデータの先頭がループポイントと見なされる。
	波形データは符号付き16ビット整数で構成する。
	(−32768〜+32767($8000〜$7fff))データの個数は65535個まで。
	それ以上は設定できない。

例
  .wave_form 8,0,10 {0,5,−5,10,3,−300,10,6,80,10}

(MEASURE3 m_wave_form(), 詳しい使い方はMEASURE5参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.FM_MASTER_VOLUME n

  FM音源のマスターボリュームの設定。

  設定範囲は0≦n≦255で255が最大音量。通常は255。

  コンパイル時のみ有効で演奏中に指定しても無意味。

(ZMDデータとしては生成されないコマンド)
(MEASURE3 fm_master()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
/  文字列

  '/'より後ろをコメントとして無視する。

例
  / ORGAN SOLO

(ZMDデータとしては生成されないコマンド)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
.COMMENT 文字列

  後ろをコメントとして無視する。

  単なるコメント行だが'/'と違うのはコンパイルされたデータ(ZMDデータ)にも

残るという点(ただし演奏には影響なし)。

  曲のタイトル、制作日時、自分の名前等をZMSファイル先頭に記述するのが一般的。

例
  .comment STAGE 1 BGM VERSION 1.10 (c)1992/11 XVI
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
{ -- ZM5.MAN ------------------------------------------------
	    MEASURE  5
		MML


  ここではZMUSICのMMLについて解説します。










5.1.  MMLの文法解説を読むにあたって


  ZMUSIC.Xは基本的にシャープ/Hudson製のOPMDRV.Xに

上位コンパチである。つまりOPMDRV.Xに存在したMMLはほぼ共通に

使用することができ、OPMDRV.X用のデータをほとんど変更無しで演奏が

可能である。

  ZMUSIC.XではMMLの小文字、大文字の区別を一切していない。

よって状況、ユーザー各位の趣味に応じて自由に使いわけが可能である。ここでは

説明の都合上MMLを大文字で、パラメータを小文字で記述している。

  省略しても良いパラメータはその旨を記述してあるがそれ以外は

省略不可である。また、数値パラメータは頭に'$'をつければ16進数が、'%'を

つければ2進数を設定することができる。何もつけなければ10進数である。

  各コマンドの頭についている印は各音源の種類を表している。全てのコマンドが

全ての音源に対応しているわけではないので注意すること。対応していない

デバイスに対してそのコマンドを用いるとエラーになるケースと無視されるケースが

ある。
	
	○内蔵FM音源
	◎内蔵ADPCM
	●MIDI音源


5.2.  MML


−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■音階、休符
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
An〜Gn

  音階。ABC〜Gはハ長調のラシド〜ソに対応する。

後ろに#,+を付ければ半音上がり、−を付けると半音下がる。

nは音長を表し、1が全音符、2が2分音符…となる。

nはマスタークロック設定コマンド'm_count()'や(Zn)によって設定範囲が変動する。

具体的には

1≦n≦マスタークロックの値

が設定範囲となる。以下にデフォルトのマスタークロック=192のときの

音楽的音長と絶対音長との対応を示す。

  音楽的音長  絶対音長    音楽的音長  絶対音長
	  1    192          12      16
	  2      96          16      12
	  3      64          24        8
	  4      48          32        6
	  6      32          64        3
	  8      24        192        1

  絶対音長=int(マスタークロック/音楽的音長)。

nは省略可能で、省略時は後述のL/@Lコマンドで設定したデフォルト音長で 

演奏される。

nの前に'*'をつけると絶対音長指定になる。絶対音長とはZMUSICが処理する

カウンタのことでデフォルトでは全音符が192になっている。このとき例えばC4と

C*48は同時間発音されるわけである。'*'の後ろには0〜65534までの数値を

書くことができる。

例
  a#4
  b*386
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
Rn

  休符。nは音長を表す。nは音階と同様の指定が可能。

  n省略時はデフォルト音長が起用される。

例
  r8
  r*96
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@Wn

  指定時間、前の状態を保存する。nは音長を表す。nは音階と同様の指定が可能。

  n省略時はデフォルト音長が起用される。

例
  @w*64
  @w4..
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■変化記号/調号
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
#
+

  シャープ(♯,嬰記号)。音階MMLの直後につけると半音高く演奏する。

2つ以上記述することもできる。

例
  c#4 f+8 g##16
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
−

  フラット(♭,変記号)。音階MMLの直後につけると半音低く演奏する。

2つ以上記述することもできる。

例
  c-4 e-8 g--16
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
[K.SIGN 〜]

  調号を設定する。どの音階にどの変化記号(♯,♭)がつくのかを設定できる。

〜の部分は変化記号、音階の順に設定し、1個ずつ , で区切る。

例
  [K.SIGN +c,+d,+f,+g]  (ホ長調)
			cdfgに自動的に#(シャープ)がつく

  [K.SIGN -a,-b,-d,-e]  (変イ長調)
			abdeに自動的に−(フラット)がつく
  [K.SIGN -a,+b]
			aに−(フラット)が、bに#(シャープ)が自動的につく
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
!

  ナチュラル(本位記号)。音階MMLの直後に設定することによって[K.SIGN 〜]で設定した

調号を臨時に取り消す事ができる。

例
  [K.SIGN -a] a a!

  としたとき、1回目のaは a- で2回目のaはフラットなしで a で演奏される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■オクターブ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
On

  オクターブを設定する。初期値は4。nは−1〜9まで設定可能。

  実際の発音域は各操作デバイスによって異なる。

・FM音源
  オクターブ0のD#からオクターブ8のDまで。

・ADPCM
  登録しなければ発音はしないが、セレクトバンク内の(@コマンド、MEASURE6参照)
オクターブ−1のCからオクターブ9のGまで対応。

・MIDI
  オクターブ−1のCからオクターブ9のGまで。実際は各楽器によって違う。
各操作MIDI楽器のマニュアルのインプリメンテーション・チャートを参照。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
<
>

  オクターブを相対的に変更する。<はオクターブを+1し、>はオクターブを

−1する。設定範囲を越えた場合はエラーとなる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■音長制御
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
Ln
@Ln

  デフォルト音長を設定する(シーケンサでいうステップタイムに相当する)。

音長をパラメータに持つMMLにおいて音長が省略された場合、このコマンドで

設定したものがパラメータとして与えられる。

  Lのパラメータnは音楽的音長、絶対音長のいずれかを書くことができる。

  音楽的音長の場合はn分音符といった意味をなす(設定範囲については音階MMLの

説明を参照)。符点も設定可能。絶対音長は音名の時と同じように数値の前に'*'を

書いて設定できる。設定範囲は0≦n≦65534。

  @Lのパラメータnは絶対音長のみで設定範囲は0≦n≦65534。

  初期値はL4(=@L48)である。

例
  l16.
  @l96
  l*2000
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
.

  符点。音長を示す数値の後ろに付けると0.5倍されたものが加算される。

さらに続けると元の音長の0.25倍、0.125倍…といったものが加算されていく。

ただし加算結果が65534以下でなければならない。

  絶対音長指定の後ろに付けることも出来る。また、加算する音長カウントは整数で

処理されるため、算出された音長がアンダーフローするとエラーになる。

  音長を省略した時に符点がついた場合は、その時点でのデフォルト音長に対して

符点処理された音長が、その音符の音長となる。

例
  a4..
  r8.
  c*1000.   (c*1500と同じ)
  l4 c.     (c4.と同じ)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
Qn

  1音中で実際に発音している時間を音長のn/8時間単位で設定する

(シーケンサでいうゲートタイムに相当する)。

  初期値 n=8、設定範囲は1〜8。1が発音時間がもっとも短く、8が最も長い(テヌート)。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@Qn

  キーオフ(発音をやめること)を絶対音長でnカウント早める。

発音音長より大きい値の場合、@Qは機能せずQ8の状態で演奏される。

例えば  @Q96  C*16の場合は発音長が 16−96<0 となるので

@Qの処理はされず発音長は16カウントとなる。

  初期値は@Q0に相当し設定範囲は0〜32768。

  @Qを設定した時はQは機能せず、逆にQを設定した時は@Qは機能しない。

つまり後に設定したものが有効となる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■タイ/スラー
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
&

  前後の音をつなぐ。同音名の場合は全デバイスにおいてタイとなる。

例
  a4&a16.

  異音名の場合は、各デバイスによって対応が異なる。

・FM音源
  スラーとなる
例
  a4&a#4

・ADPCM
  '&'を除いた時のように処理される
例
  a4&a#4  →  a4a#4のように演奏される

・MIDI
  後述のタイ・モード(@Jコマンドにより設定)によって対応が異なる。

通常モード時(@J0)
  '&'を除いた時のように処理される
例
  a4&a#4  →  a4a#4のように演奏される

FM音源部互換モード時(@J1)
 スラーとなる。
例
  a4&a#4
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
^n

  音符の直後に書くことによって、nで指定した音長分をその音符の音長に加算する。

nの後ろに符点を書けば、符点を考慮した音長が加算される。nには絶対音長を

書くこともできる。

例
  c4^16
  d^*1000
  'ceg4^16'
  (d2^8<d)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
@Jn

  MIDI部におけるタイの処理モードを設定する。

  n=0で通常モード(初期値)、n=1でFM音源部互換モードになる。

  c&d

とした場合、通常(@J0時)はMIDIでは & のない

  c d

として処理される。

  しかし@J1時ではFM音源部と同様に、ある音の発音後、その音の持続音(減衰音)で

つぎの音の音程へ変化してくれるようになる。よって、FM音源部の

  (c<d)&(d>c)

や、後のコラムで動作の相違があると書かれている

  (g,e)24&e

  @b0,683 c4&c+4

のような表記もFM音源部と同様に機能するようになる(ただし、最初にキーオンした

音階から1オクターブを超えることはできない)。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■連符
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
{〜}n

 {〜}で囲まれたMML群を合計の音長がn分音符音長になるように演奏する。

nには符点を付けたり、'*'を付けて絶対音長による指定も行なえる。

 {〜}の中には音長を操作するMMLを書くことは出来ない。(符点,L,@L,Q,@Qなど)

  n省略時はデフォルト音長が起用される。

例
  {cdef}2
  {abc}4..
  {cd&de}*192
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■和音
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
'MML…'nn,dly(&)

  和音を発音する。'〜'間に書けるMMLは以下の通りである。

	音階            c〜b(8個まで) 
	調号            # + - !
	音長            1〜(符点も可)
	絶対音長        *1〜*65534
	オクターブコマンド     O-1〜O9
	オクターブスイッチ      < >

  1度に8和音まで発音が可能。8音以上音階を書くとエラーとなる。

  オクターブスイッチは'〜'(シングルコーテーション)内だけ有効。

'〜'内に音長を書かずに外に数値を書くと、これは絶対音長の指定になる。

設定範囲は0≦nn≦65534で全音符以上の発音時間も設定できる。

  ディレイパラメータdlyを設定することによって、和音を一度に発音せず、各音を

絶対音長dlyずつ時間的にずらして1音ずつ発声する(アルペジオ奏法)。

ディレイは初期値0で、省略可能だが省略時は以前設定した値がそのまま起用される。

例    
  'c4eg'          

  ドミソを4分音符で演奏する。

  o4'gb<d'96      

  ソシレを絶対音長96で演奏する。和音発音後のデフォルトオクターブは4に

変わり無いことに注意。

  'c4eg<c',6

  まずcが発音され、その6カウント後にeが発音され、更に6カウント後ずつ

g, <cが発音される。

  ディレイ値は必ず全部の音が発声可能な値でなければエラーとなる。

例えば
	'c4eg',30

などはgが発音出来ないのでエラーとなる。

  同構成音の和音〜和音間、異構成音の和音〜和音間、単音〜和音間、和音〜単音間を

'&'で結んでのタイ/スラーが可能。ただし処理の関係上、タイでつながれた和音の

ディレイは強制的に0に設定される。つまり

'c4eg',6&'e4gb-',6

は

'c4eg',6&'e4gb-',0

として処理される。

  また、オートベンドやモジュレーション、アフタータッチ・シーケンス、ARCCなど

全ての特殊コマンドが和音においても有効である(当然のことながら

FM音源に対してのARCCは無効だが)。もちろん同時にこれらを和音に対して使用出来る。

  FM音源部での和音を用いた場合、チャンネルがかちあうと正常に発音されないので

注意。例えば

(t1)'CEG'48
(t2)cde             ←正常に演奏されない
(t3)efg             ←正常に演奏されない

  以下のようにしなければならない。

(t1)'CEG'48
(t2)@w4
(t3)@w4

  この例の場合でトラック2や3が未使用の場合は問題はない。

(t1)'CEG'48        (トラック2,3はアサインも確保もしていない)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                 絶対音長0と1			      ┃
┃                                                                            ┃
┃                                                                            ┃
┃  OPMDRV.Xでは絶対音長1の音符はキーオフしないというバグが          ┃
┃									      ┃
┃ありましたが、これを逆手に取ってピッチエンベロープなどを実現するテクニックが┃
┃									      ┃
┃いつのまにか一般的となってしまいました。ZMUSICでもこのバグ技を	      ┃
┃									      ┃
┃使えるようにしてあります。つまり絶対音長1では			      ┃
┃									      ┃
┃	@l1 c&d&e&f&g			         			      ┃
┃									      ┃
┃と									      ┃
┃									      ┃
┃      @l1 cedfg							      ┃
┃									      ┃
┃は同じということになります。						      ┃
┃									      ┃
┃  また、ZMUSICでは休符、ウェイト、和音とポルタメントを除いて          ┃
┃									      ┃
┃絶対音長0も使用可能になっています(音楽的音長0は使用不可)。音長がゼロの    ┃
┃									      ┃
┃音符は発音処理を行うだけです。操作対象デバイスによって多少の効果の相違が    ┃
┃									      ┃
┃ありますので注意して下さい。						      ┃
┃									      ┃
┃●MIDI								      ┃
┃									      ┃
┃	c*0e*0g*0							      ┃
┃									      ┃
┃ではcegの和音が鳴りっぱなしになります。				      ┃
┃									      ┃
┃ MIDI楽器の中にはリズムキットを持つものが多くあり、大抵、ノートオンの  ┃
┃									      ┃
┃メッセージのみで操作可能です(ノートオフの処理を省略してもかまわない)。      ┃
┃									      ┃
┃こういったリズムキットをシーケンスする場合に絶対音長0は有用です。	      ┃
┃									      ┃
┃  たとえばO2C=バスドラム, O2D=スネアドラム, O3C+=クラッシュシンバルの    ┃
┃                                           ┃
┃ような ローランド系リズムキットで				              ┃
┃									      ┃
┃ 	l4 O3C+*0 |:4 O2 CDCD :|					      ┃
┃									      ┃
┃とすると、最初の小節の頭だけシンバルが鳴り、2回目以降は鳴らないといった    ┃
┃									      ┃
┃シーケンスができます。						      ┃
┃									      ┃
┃  絶対音長0の音符は楽器の最大同時発声数内で1トラックにつきいくつでも      ┃
┃									      ┃
┃設定可能です。							      ┃
┃									      ┃
┃  絶対音長0の音符はそのままでは鳴りっぱなし状態になりますが、これを        ┃
┃									      ┃
┃('&'をつけて)タイで通常音符へつなぐとその通常音符が鳴り終わった時点で      ┃
┃									      ┃
┃絶対音長0の音もノートオフすることができます。                              ┃
┃									      ┃
┃  	c*0&e*0&g4							      ┃
┃									      ┃
┃とするとcegの和音が4分音符長で鳴ります。専用和音コマンドでは和音の         ┃
┃									      ┃
┃各構成音に対してベロシティのバラツキを設定できませんが、この絶対音長0の    ┃
┃									      ┃
┃音符を用いて								      ┃
┃									      ┃
┃ 	@u110c*0& @u105e*0& @u88g4					      ┃
┃									      ┃
┃のようにして実現できます。						      ┃
┃									      ┃
┃  この'&'で結ぶ書式では最大8和音までが記述できます。8和音の時は	      ┃
┃									      ┃
┃音長ゼロの音符が7つと通常音長の音符が1つという構成になることになります。  ┃
┃									      ┃
┃音長ゼロの音符を8つ以上記述した場合は古い順にノートオフされない音が出て    ┃
┃									      ┃
┃きます。また、従来の和音コマンドとの混在はもちろん可能で、状況状況に応じて  ┃
┃									      ┃
┃使い分けができます。また、この2つの書式間のタイ/スラーも可能です。	      ┃
┃									      ┃
┃●FM音源								      ┃
┃									      ┃
┃  基本的にモノフォニックですので					      ┃
┃									      ┃
┃	c*0e*0g*0							      ┃
┃									      ┃
┃のような表記で和音を発音させることはできません。しかし、MIDIと同じように┃
┃									      ┃
┃絶対音長0の音符を'&'で通常音符へつなぐことによって和音を発音させることは  ┃
┃									      ┃
┃できます。ですから、FM音源でも					      ┃
┃									      ┃
┃  	c*0&e*0&g4							      ┃
┃									      ┃
┃ 	v10c*0& v12e*0& v11g4						      ┃
┃									      ┃
┃のような記述で和音の発音が可能です。もちろん、従来の和音コマンドとの混在も  ┃
┃									      ┃
┃でき、この2つの書式間のタイ/スラーも可能です。    			      ┃
┃									      ┃
┃●ADPCM								      ┃
┃									      ┃
┃  完全にモノフォニックであるため、絶対音長0による和音発音はできません。    ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■音量/ベロシティ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
Vn

  音量の設定を行う。設定範囲は0≦n≦16。初期値は8。

ADPCM音源部で使用可能となるのはPCM8独立チャンネルモードの時のみである。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@Vn

  音量の設定を細かく行う(絶対音量と呼ぶ)。設定範囲は0≦n≦127。

ADPCM音源部で使用可能となるのはPCM8独立チャンネルモードの時のみである。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
_n

 ̄n

  音量の相対指定を行う。~は音量増加を表し_は音量減少を表す。設定範囲は

0≦n≦127で、演算の結果、アンダーフローを起こした場合は0へ、オバーフローを

起こした場合は127へ修正される。また計算は@Vnで表される絶対音量レベルで

行われる。

  nを省略した場合は以前に設定したものが起用される。nの初期値は1。

  なお、ADPCM音源部で使用可能となるのはPCM8独立チャンネルモードの

時のみである。

例
  @v120 _10 c _ d ~ e  (cは@120−10=@v110で、dは@v110−10=@v100で、
			eは@v100+10=@v110で演奏される)
  |:10 _10 c :|        (段々と音量が下がりながらcが演奏される)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                  Vと@V				      ┃
┃									      ┃
┃									      ┃
┃  MIDI音源によっては音量をベロシティでのみ決定するものがあります    ┃
┃                                      ┃
┃(RX-8など)。                                ┃
┃									      ┃
┃そういう楽器に対してのV/@Vコマンド動作は全く保証されません。	      ┃
┃									      ┃
┃  FM音源、ADPCM(PCM8独立チャンネルモード時)/MIDI音源では    ┃
┃									      ┃
┃@VとVの対応値が異なります。これはFM音源の出力音量が		      ┃
┃									      ┃
┃指数関数的に増減するのに対してMIDI(&ADPCM)では線形に増減するから  ┃
┃									      ┃
┃です。以下に音源別にに@VとVの対応表を示します。			      ┃
┃									      ┃
┃        FM音源							      ┃
┃									      ┃
┃      Vn       0 1  2  3  4  5  6   7   8   9   10  11  12  13  14  15  16  ┃
┃      @Vn     85 87 90 93 95 98 101 103 106 109 111 114 117 119 122 125 127 ┃
┃									      ┃
┃									      ┃
┃									      ┃
┃        MIDI音源(&ADPCM)					      ┃
┃									      ┃
┃      Vn        0  1  2  3  4  5  6  7  8  9 10 11 12  13  14  15  16       ┃
┃      @Vn       0  7 15 23 31 39 47 55 63 71 79 87 95 103 111 119 127       ┃
┃									      ┃
┃									      ┃
┃  以上のことから相対ボリューム_n ~nの使用結果においても結果が異なります。   ┃
┃									      ┃
┃例えば								      ┃
┃									      ┃
┃        v8 _1								      ┃
┃									      ┃
┃とした場合FMでは結果が@V105に相当しますがMIDIでは@V62になります。     ┃
┃									      ┃
┃  また、FM音源ではベロシティーとボリュームが全く同じ機能をします。例えば  ┃
┃									      ┃
┃    V8  @U106  @V106             				      ┃
┃									      ┃
┃は同じ機能を果たします。						      ┃
┃									      ┃
┃  なお、PCM8独立チャンネルモード時のADPCM音はV9が元音量です。     ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@Un
Un

  ベロシティの設定を行う。ベロシティとは鍵盤を押す強さ、すなわち音量のこと。

  MIDI楽器によってはこれによって音のニュアンスを変えることが出来る。

設定範囲は 0≦n≦127で127が最強(大)に相当。またFM音源では単純に音量として

扱われる。

  初期値は127である。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@U+n
@U−n
U+n
U−n

  ベロシティの相対指定を行う。設定範囲は−127≦n≦+127。演算によって

アンダーフローを起こした場合は0、オーバーフローを起こした場合は127に

修正される。

  初期値は+1。

例
  @u127c @u-10d @u+5e
  u127c  u-10d  u+5e
c, d, eはそれぞれベロシティ127, 117, 122でキーオンする。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@U

  以前設定した相対ベロシティの値でもう一度相対ベロシティの指定を行う。

例
  @u127 @u-10 @u
最後の@uもまた@u-10で機能する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
U

  以前設定した@Uの値を再設定する。

例
  @u127c u-10d ue
c, d, eがそれぞれベロシティ127, 117, 127でキーオンされる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                  Uと@U				      ┃
┃									      ┃
┃									      ┃
┃  機能的にはまったく同じですが、演奏時にリアルタイムに考慮されるか否かの    ┃
┃									      ┃
┃相違があります。							      ┃
┃									      ┃
┃  	@u100|:4 @u+5 c :|						      ┃
┃									      ┃
┃としたとき4回とも@u105でcが演奏されますが				      ┃
┃									      ┃
┃    	@u100|:4 u+5 c :|						      ┃
┃									      ┃
┃としたときは@u105, @u110, @u115, @u120でそれぞれ演奏されます。              ┃
┃									      ┃
┃  なお、管理は@uとuはまったく別です。ですから				      ┃
┃									      ┃
┃  	@u5  |:3 @u+50 c u-5:| d				              ┃
┃									      ┃
┃としたとき@u55で3回cが演奏され@u50でdが演奏されます。			      ┃
┃									      ┃
┃  uのみではそれまでに最後に設定した@uをもう1回設定するので		      ┃
┃									      ┃
┃  	@u110|:10 u+2 c :|u e						      ┃
┃									      ┃
┃のように、ループで変化してしまったベロシティを元に戻すことが出来ます。     ┃
┃									      ┃
┃この例では、直前のベロシティ値によらずeは@u110で演奏されます。              ┃
┃									      ┃
┃  このようにU,@Uを使い分ければ、かなり複雑なシーケンスをすることが出来ます。┃
┃									      ┃
┃  @uは、ループの影響を受けないグローバルな存在、uはループ等の影響を         ┃
┃									      ┃
┃受ける局所的な存在というわけです。					      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
Zn1,…,n16

  ベロシティのばらつきを設定する。これをZMUSICでは

ベロシティー・シーケンスと呼ぶ。各値の設定範囲は0≦ni≦127。

  これはこの先最大16個の音階MML、和音MML、ポルタメントMMLの

ベロシティを先に設定するものである。

例えば
	z127,99,80      cdefg

とするとcはベロシティ127で、dはベロシティ99で、eはベロシティ80で、

ここでfは再びベロシティ127で、gはベロシティ99で発音される。

値は最大16個まで記述することができ、1個のみ指定した時は@Uと全く同様に機能

する。数値の頭に±を記述すれば相対指定が可能である。

数値を全く書かずに'Z'のみ記述するとベロシティ・シーケンスのOFFと解釈される。

  ベロシティ・シーケンスはループコマンドを無視して処理されるので

	z99,100,127 |:100 c :| d e

とした場合cが100回ベロシティ99で、ループ外のdがベロシティ100で、

eがベロシティ127で演奏される。

  このコマンドを効果的に使えばピアノソロ等を極めて人間的にシーケンスすることが

できる。MIDI楽器によってはベロシティの変化にともなってニュアンスや

音色を変えることが出来るのでそういった機能と合わせて使えばかなり興味深い

効果を得ることが出来る。

注意
  FM音源にこれを用いた場合は単純にその値に対応した絶対音量で発音される。
  ベロシティコマンド@U/Uを使用すると自動的にベロシティ・シーケンスは解除される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■ピッチシフト/ディチューン/オートベンド
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
Kn

  音程を半音単位で上下させる(キートランスポーズ)。nはn半音を意味し、

設定範囲は−128≦n≦127(±10オクターブ程度に相当)。

初期値は0、またニュートラル(中央値)も0である。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@Kn

  キートランスポーズを1/64半音単位で行う(いわゆるディチューン)。

設定可能範囲は−768≦n≦768(±12半音程度に相当)。

初期値は0、またニュートラルも0である。

  Kと@Kは全く管理が別である。例えば

	   @k10 cdefg

の頭に  k1  をつけて

	k1 @k10 cdefg

としたとすると1半音と10/64半音上にピッチシフトされてcdefgが演奏される。

  いちいちMMLを書き直すこと無く各パートのMMLの頭にKコマンドを書くだけで

ディチューン等も考慮した転調が実現出来る。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@Bn

  ベンド値(ディチューン)を設定する。@Kと全く同じ機能をすると考えて良いが

1オクターブ≒8192で換算される点が違う。ユーザーがMIDI音源に

慣れている場合は@Bを、FM音源に慣れている場合は@Kを使うと良いだろう。

設定範囲は−8192≦n≦8191で、初期値は0、ニュートラルも0である。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@Kn1,n2,dly

  オートベンドの設定を行う。@Kの後ろに2つ以上のパラメータを書くと

オートベンドの設定となる。この場合、n1はベンドスタート値、

n2はベンドエンド値、dlyはディレイ値を表す。それぞれ

	−768≦n1≦768, −768≦n2≦+768, 0≦dly≦32767。

具体的な使用方法を示すとする。ベンドレンジが1オクターブになっている場合に

	@k0,-64,24     (64=1半音)

とすると発音後、24絶対カウント後から音程が下がり始めキーオフまでに

半音下がる。

ディレイは省略可能で省略時は以前の設定値が起用される。初期値は

n1,n2,dlyともに0である。

ベンドレンジはFMは1オクターブに固定、MIDIは後述の@Gコマンドで  

変更可能である。

  @Kおよび@Bにてディチューンを設定した場合はオートベンドは以降

強制的にOFFとなる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@Bn1,n2,dly

  オートベンドの設定を行う。@Bの後ろに2つ以上のパラメータを書くと

オートベンドの設定となる。この場合、n1はベンドスタート値、

n2はベンドエンド値、dlyはディレイ値を表す。それぞれ

	−8192≦n1≦8191, −8192≦n2≦8191, 0≦dly≦32767。

具体的な使用方法を示すとする。ベンドレンジが1オクターブになっている場合に

	@b0,-683,24     (683≒8192/12≒1半音)

とすると発音後、24絶対カウント後から音程が下がり始めキーオフ時までに

半音下がる。

ディレイは省略可能で省略時は以前の設定値が起用される。初期値は

n1,n2,dlyともに0である。

ベンドレンジはFMは1オクターブに固定、MIDIは後述の@Gコマンドで

変更可能である。

  @Kおよび@Bにてディチューンを設定した場合はオートベンドは以降

強制的にOFFとなる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
(k1k2)n,dly

  ポルタメントを行う。k1はポルタメント・スタート・キー・MML、

k2はエンド・キー・MML。以下のMMLコマンドを()内に記述できる。

	音階            c〜b 
	調号            # + - !
	音長            1〜(符点も可)
	絶対音長        *1〜*32767
	オクターブコマンド     O−1〜O9
	オクターブスイッチ      < >

和音コマンドとは違ってオクターブスイッチは(〜)外へも影響する。

  音長は和音コマンド同様にキーの後ろに書くことも、(〜)の外に書くこともできる。

外に書いた場合は絶対カウントとみなされる。絶対音長ではnは0≦n≦32767まで

設定可能なので全音符以上の発音時間を設定することも可能である。

  dlyはディレイで絶対カウント単位でポルタメントのかかり方を遅らせることが出来る。

設定可能範囲は0≦dly≦32767。dlyは省略すると以前の設定値が起用される。

  音長を省略するとデフォルトの音長(Lまたは@Lコマンドで指定したもの)が起用される。

  MIDI楽器において、後述の@Gコマンドでベンドレンジを12(1オクターブ)以外に

変更したとき、あるいはMIDI楽器のベンドレンジが12に設定されていない時の

動作は表記通りにならない。

例
  o4(g2<g)
  オクターブ4のgでキーオンし、2分音符分鳴り終えるまでにオクターブ5のgまで
なめらかに音程をシフトしていく。
コマンド終了後はオクターブは5になっていることに注意。

  (o3d*96,e),48
  オクターブ3のdでキーオンし、このピッチで48カウント分演奏し、それ以降 
絶対音長96でキーオフするまでにオクターブ3のeまで音程をシフトしていく。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
@Gn

  ベンドレンジの設定を行う。nはMIDI楽器によって設定範囲が異なる。

また、外部からベンドレンジを操作出来ないものや、プログラムチェンジ

(音色切り換え)時に初期化されてしまうものなどがあるので、楽器のマニュアルを

よく読んでから使用したほうが良い。また、ベンドレンジを変更するとポルタメントの

効果も変化してくるので注意。逆にベンドレンジを変更すればオートベンドコマンドを

用いて1オクターブ以上のベンドを実現したりすることも可能である。

初期値はn=12を設定しているが楽器側がベンドレンジを変更出来ないものであれば

不定である。

  FM音源対象トラックにおいては無効(12に固定)である。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                         オートベンドとポルタメント			      ┃
┃									      ┃
┃									      ┃
┃  オートベンドとポルタメントの具体例と両コマンドの対象デバイスにおける      ┃
┃									      ┃
┃効果の相違点について少し解説します。					      ┃
┃									      ┃
┃        (c+4<<c+),8							      ┃
┃									      ┃
┃はc+をディレイで指定した8カウント分演奏した後、4分音符−8カウントの時間内に┃
┃									      ┃
┃2オクターブ上のc+まで上昇します。オクターブスイッチの影響で以降2オクターブ┃
┃									      ┃
┃上になることに注意してください。					      ┃
┃									      ┃
┃        (g,e)24&e							      ┃
┃									      ┃
┃は絶対カウント24の時間内にgからeへピッチダウンを行いキーオフせずeへ         ┃
┃									      ┃
┃つなぐことになります。						      ┃
┃									      ┃
┃  ここで注意が1つあります。以上2つの例はFM音源においてのみ有効です。  ┃
┃									      ┃
┃  1つ目が実現不可能なのは、MIDIでは楽器側のベンドレンジが1オクターブと┃
┃									      ┃
┃想定して処理しているため1オクターブを超えたポルタメントは不可能だからです。┃
┃									      ┃
┃  内蔵FM音源は音程がリニアな構造をしているため発音可能範囲内であれば      ┃
┃									      ┃
┃任意の音程を出力可能ですがMIDIにおいてはポルタメントは(オートベンドも)  ┃
┃									      ┃
┃ベンダーホイールの上げ下げでピッチをコントロールしているため2つ目の例を    ┃
┃									      ┃
┃MIDIに対して行うとFMとは違った動作を示してしまいます。2つ目の例を    ┃
┃									      ┃
┃FMと同じ効果をMIDIで実現したい場合は                                  ┃
┃									      ┃
┃        (g,e)24&g							      ┃
┃									      ┃
┃ということになります。つまりMIDIにおいてのタイはキーオフせず、	      ┃
┃									      ┃
┃ベンダー値を以前のまま保持する事を意味しているのです。同様に		      ┃
┃									      ┃
┃        o4 (c<c)&c							      ┃
┃									      ┃
┃はFM音源ではo4のcから1オクターブ上のo5のcへポルタメントを実行し	      ┃
┃									      ┃
┃o5のcへ音をつなぐ事が出来ますがこれと同じ事をMIDIで実現するためには     ┃
┃									      ┃
┃        o4 (c<c)&>c							      ┃
┃									      ┃
┃あるいは								      ┃
┃									      ┃
┃        o4 (c<c)&o4c							      ┃
┃									      ┃
┃としなければなりません。MIDIの場合は発音後どれくらいベンダーホイールを  ┃
┃									      ┃
┃動かしたかで音程をコントロールするのでタイの場合はポルタメントの開始音程を  ┃
┃									      ┃
┃書かなければならないのです。						      ┃
┃									      ┃
┃ このような相違点はオートベンドコマンドにも見られます。		      ┃
┃									      ┃
┃        @b0,683,0 c4            (683≒8192/12≒1半音)			      ┃
┃									      ┃
┃ではFM音源ではc4がc+4へ向かって上昇しますがc+4を持続したい場合は	      ┃
┃									      ┃
┃FMの場合は								      ┃
┃									      ┃
┃        @b0,683,0 c4&c+4						      ┃
┃									      ┃
┃とすれば良いのですがMIDIの場合は					      ┃
┃									      ┃
┃        @b0,683,0 c4&c4						      ┃
┃									      ┃
┃としなければならないわけです。					      ┃
┃									      ┃
┃  オートベンド、ホルタメント共にQコマンドの影響を受ける点にも注意して      ┃
┃									      ┃
┃ください。例えば							      ┃
┃									      ┃
┃        q4 (b-<b-)							      ┃
┃									      ┃
┃とした場合は1オクターブ上のb-に達する前にキーオフしてしまいます。	      ┃
┃									      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■パンポット
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
Pn

  パンポットの設定を行う。設定範囲は0≦n≦3である。初期値は3。

  0は出力停止、1は左、2は右、3は中央。

  FM音源ではP0はミュートに相当するがMIDIではこれに対応する機能がないので

便宜上@V0 @U0を行う。通常はMIDIではP0は用いないこと。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@Pn

  パンポットを多段階指定する。一応MIDI専用だがFM/ADPCMに   

設定した場合は値に応じて3段階のL/M/Rに変換される。

  設定範囲は0≦n≦127であるがMIDI楽器によっては無効となる場合がある

(M1,SY77など)ため各MIDI楽器のマニュアルを参照のこと。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@P+n
@P−n

  パンポット(@P)を相対的に設定する。設定範囲は−127≦n≦+127で、演算の結果、

アンダーフローを起こした場合は0へ、オーバーフローを起こした場合は127へ

修正される。

例
  @p64|:10 @p+5 c16 :|  (音がだんだん右から鳴るようになっていく)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                 パンポット				      ┃
┃									      ┃
┃									      ┃
┃  ローランドMT−32系(CM32L,CM32P,CM64L,CM500)の  ┃
┃									      ┃
┃パンポットは実はMIDI規格とは正反対の値で音場が切り換わります。	      ┃
┃									      ┃
┃よってP1,P2,P3はそれぞれMT32系においてはR,M,Lと音場が切り換わります。┃
┃									      ┃
┃  ZMUSIC.XはMIDI規格にのっとって左を@P0、中央を@P64、右を   ┃
┃									      ┃
┃@P127としています。							      ┃
┃									      ┃
┃  FM音源やその他のMIDI楽器と同じ音場を得るためにMT32系をご使用の ┃
┃									      ┃
┃方は背面のアウトプットを左右入れ換えて接続することをお勧めします。	      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■テンポ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
Tn

  テンポを設定する。nはタイマBモード(デフォルト状態)では30〜300、

タイマAモード(MEASURE2参照)では77〜300である。

  nは1分間の4分音符の数に相当する。

  初期値は120。1つのトラックで指定すれば全トラックに影響する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
T+n
T−n

  テンポを相対的に設定する。演算の結果有効範囲を超えてしまった場合は

設定可能範囲内に自動修正される。

  1つのトラックで指定すれば全トラックに影響する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@Tn

  割り込み周期を割り込みタイマーへ直接設定する。

機能的にはTコマンドと同じだがパラメータnが割り込み周期である点が違う。

  以下に各タイマーとテンポの相関を表す。

タイマA=1024−(78125/テンポ)
タイマB=256−(78125テンポ)/16

  1つのトラックで指定すれば全トラックに影響する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@T+n
@T−n

  タイマー値を相対的に設定する。演算の結果有効範囲を超えてしまった場合は

設定可能範囲内に自動修正される。

  1つのトラックで指定すれば全トラックに影響する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■音色/バンク切り換え
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@n

・FM音源
    音色を音色番号nに設定する。1≦n≦200。初期値なし。

・MIDI
    音色を音色番号nに設定する。1≦n≦128。初期値なし。

・ADPCM
    4つあるADPCMのバンクのうちどれを使用するかを設定する。
  1≦n≦4。初期値=1。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
In1,n2

  MIDI楽器の音色のバンク切り換えを行う。KORGのウェーブステーション、ROLANDのSC55など

では音色がバンクに分かれており、音色切り換えはこの命令でバンクを指定してから行う。

同一バンク内で切り換えを行う場合は一度設定すれば以降設定する必要はない。

n1はバンク番号上位、n2はバンク番号下位を表し設定範囲はn1,n2ともに0〜127まで

である。パラメータは省略すると強制的に0になる。

  SC55ではバンク切り換えパラメータの上位のみ有効としているので

	In1

のみでバンク(SC55のマニュアルではバリエーションと呼んでいるが)n1へ切り換える

ことが出来る。

  ウェーブステーションではバンク切り換えパラメータの下位のみ有効としているので

	I0,n2

でバンクn2へ切り換えることが出来る。

例
  i0 @128
  i0,12 @11
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■操作チャンネル変更
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
Nn

  そのトラックの操作対象デバイスの変更を行う。設定範囲は1≦n≦32で各数値に

対応したチャンネル番号はMUSICZ.FNCの'm_ch()'命令や

ZMSファイルコマンド(Bn)命令によって違ってくる。

  m_ch("FM")、(B0)の時
	n=     1〜8    内蔵FM音源チャンネル1〜8
		9       内蔵ADPCM音源
		10〜25  MIDIチャンネル1〜16
		26〜32  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)

  m_ch("MIDI")、(B1)の時
	n=     1〜16   MIDIチャンネル1〜16
		17〜24  内蔵FM音源チャンネル1〜8
		25      内蔵ADPCM音源
		26〜32  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@Nn

  Nコマンドと機能的には同じ。しかしMUSICZ.FNCの'm_ch()'命令、

ZMSファイルコマンドの(Bn)命令の状態に関わらず絶対的に指定が可能である。

nの設定範囲は
	n=     1〜8    内蔵FM音源チャンネル1〜8
		9       内蔵ADPCM音源
		10〜25  MIDIチャンネル1〜16
		26〜32  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)

でm_ch("FM")、(B0)の時のNコマンドとちょうど同じである。

  m_ch("MIDI")とするとN1〜16はそのままMIDIチャンネル1〜16に対応し、

@N1〜9は(当然だが)FM1〜8そしてADPCMに対応するので概念的に分かりやすい。 
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                          突然のチャンネル切り換え			      ┃
┃									      ┃
┃									      ┃
┃  キーオフしないまま異種のデバイスへチャンネルを切り換えてしまった場合、    ┃
┃									      ┃
┃音が鳴り続けてしまう場合があります。たとえばMIDI音源でタイを使って     ┃
┃									      ┃
┃キーオフしないうちにFM音源チャンネルに切り換えるとMIDIの音が          ┃
┃									      ┃
┃鳴り止まずに鳴り続けてしまいます。もしそうなってしまった場合は'm_stop()'で  ┃
┃									      ┃
┃音を止めるしかありません。						      ┃
┃									      ┃
┃例									      ┃
┃									      ┃
┃    @n10 c&@n1c     (MIDI楽器で発音されたcが鳴りっぱなしになります)   ┃
┃    ↑    ↑FM1チャンネル							      ┃
┃    MIDI1チャンネル							      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■アフタータッチ・シーケンス
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@Zn1,…,n8

  アフタータッチを音長の1/8時間単位で設定する。これをZMUSIC.Xでは

アフタータッチ・シーケンスと呼ぶ。各値の設定範囲は0≦ni≦127。

  発音後の音のニュアンスを細かく変化させることができる。

例えば

	@z127,120,110,127,80,60,50,10

として絶対音長192の音長でキーオンしたとすると192/8=24で24カウント毎に

アフタータッチを変化させる。順を追って説明すると

発音はベロシティ127でキーオンされる。その24カウント後アフタータッチ120

の強さで鍵盤を押さえた(鍵盤を押し込む強さを弱めたというべきか?)ことになり、

以降も同様である。

  MIDI楽器によっては発音後の鍵盤を押す強さ(即ちアフタータッチ)によって

音のニュアンスを変えることができ、サンプラーなどでは全く別の音色を発音させる

ことも可能なので使用方法によってはかなり興味深い効果を得ることが出来る。

  FM音源でこのコマンドを使用した場合は発音後の絶対音量を設定値で

変化させることができる。ソフトエンベロープなどを実現したい場合に威力を発揮する。

(もちろんMIDI楽器の設定でアフタータッチに対応する効果を音量に設定しておけば

FMと同じようにソフトエンベロープ的な効果を得ることが出来る。)

  パラメータは任意の位置で省略可能で、数値の頭に±を付けることによって

相対的な値の指定も可能である。例えば

	@z127,,,10
	@z,,,,120,,1
	@z,,120,,-10,+5

といった記述が可能である。省略した部分は前の値を持続するということになり、

その間はアフタータッチの情報は送信されない。

  先頭パラメータを省略した場合には発音は以前に設定したベロシティ@U/Uの値で

行われる。それ以外は先頭のパラメータの値のベロシティでキーオンされる。

  相対指定時にオーバーフロー/アンダーフローを起こした値は許容範囲内の

最大値最小値に修正される。

  値を全て省略した場合はアフタータッチ・シーケンス解除と解釈される。

例
  @z
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■ピッチ・モジュレーション(音程モジュレーション/PM/ビブラート)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@Mn1,…,n8 ...(1)
または
@Mn ...(2)

  ピッチ・モジュレーション(音程を細かく震わせる)の振幅設定を行う。

(1)1/8モード  ピッチ・モジュレーション

  発音後、音長の1/8時間単位で振幅(モジュレーション・デプス)を変化させることが

出来る。設定可能範囲はFM音源は−32768≦ni≦32767、MIDIのノーマルモードは

0≦ni≦127、拡張モード時は−768≦ni≦768(−8192≦ni≦8191)。値は任意の位置で

省略可能、8個まで記述でき、相対指定も可能で

	@m60,,,50,127
	@m,,,,127
	@m,,120,-10,+5

といった記述が出来る。

  こちらのモードを指定した場合は後述のディレイ・コマンドで設定したディレイ値は

無視される。


(2)ディレイ・モード  ピッチ・モジュレーション

  振幅(モジュレーション・デプス)を1つだけ設定する。振幅の設定範囲は

−32768≦n≦32767。

  後述のディレイ・コマンドで設定したディレイの後nの深さで

ピッチ・モジュレーションを実行する。

  初期値はいずれのモードにおいても0。また全ての値を省略した場合は

モジュレーション解除のスイッチとなる。

例
  @m
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■ARCC(Assignable real time control change)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
@Cn,r,m

  任意のコントロール・チェンジナンバーnを選び、これを本命令で登録しておき、

後述の@Aコマンドにて、そのコントロール・チェンジでMIDI音源をリアルタイムに

コントロールすることができる。これをZMUSICではアサイナブル・リアルタイム・

コントロール・チェンジ(Assignable realtime control change)と呼ぶ(以後ARCC)。

  コントロール・チェンジ番号の有効値はMIDI楽器によって異なるので

各楽器のマニュアルのインプリメンテーション・チャートを参考のこと。

  ARCCの実行を解除した時に登録したコントロール・チェンジnに対して

リセットという意味でなんらかの値を設定することができる。その設定する値

というのがパラメータrで、省略時は0となる。設定範囲は0≦r≦127

  後述の拡張ARCCモード使用時にはプリセット波形やユーザー波形が使用可能となるが

その波形の基準値となるのがmである。詳しくは5.3.節で解説する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
@An1,…,n8 ...(1)
または
@An ...(2)

(1)1/8モード  ARCC

  発音後音長の1/8時間単位で先述の@Cで登録したコントロール・チェンジへ値を

送信し音源を制御することが出来る。値の設定範囲は0≦ni≦127。

(拡張ARCCモード時には設定範囲は−127≦ni≦127)

値は任意の位置で省略可能、8個まで記述でき、相対指定も可能で

	@a60,,,50,127
	@a,,,,127
	@a,,120,-10,+5

といった記述が出来る。

  こちらのモードを指定した場合は後述のディレイ・コマンドで設定したディレイ値は

無視される。


(2)ディレイモード  ARCC

  ARCCの設定値を1つのみ設定する。設定範囲は0≦n≦127。

(拡張ARCCモード時には設定範囲は−127≦n≦127)

後述のディレイ・コマンドで設定したディレイの後、nの値で@C命令で登録した

コントロール・チェンジを実行する。

  初期値はいずれのケースにおいても0。また全ての値を省略した場合は

ARCC解除のスイッチとなる。

例
  @a
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■アンプリチュード・モジュレーション(音量モジュレーション/AM/トレモロ)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○
@Cm

  X68kのFM音源は4つのオペレータ(発信器)によって構成されているが

その1〜4の4つのオペレータのうちどのオペレータに対してアンプリチュード・

モジュレーションの処理を施すかを設定できる。特殊な効果(例えばワウワウ効果)を

狙いたい時など以外は特に設定する必要はない。

  パラメータのmはビット構成を取っており

	  d3d2d1d0
  □□□□■■■■
	  ↑↑↑↑
	  |||オペレータ1
	  ||オペレータ2
	  |オペレータ3
	  オペレータ4

ビット=1に対応するオペレータに対してモジュレーション処理を施す。

  なお、このコマンドで設定した設定値は次回の音色切り換えまで有効である。

音色切り換え時にはその音色のキャリア・オペレータに対してモジュレーション処理を

施すような設定値が自動的に設定される。

  本命令はFM音源に対して多少の知識を必要とする。

例
  @c%1001  (オペレータ1と4にモジュレーション処理をする)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○
@An1,…,n8 ...(1)
または
@An ...(2)

  アンプリチュード・モジュレーション(音量を細かく震わせる)の振幅設定を行う。

(1)1/8モード  アンプリチュード・モジュレーション

  発音後音長の1/8時間単位で振幅(モジュレーション・デプス)を変化させることが

出来る。値の設定範囲は−127≦ni≦127。値は任意の位置で省略可能、8個まで

記述でき、相対指定も可能で

	@a60,,,50,127
	@a,,,,127
	@a,,120,-10,+5

といった記述が出来る。

  こちらのモードを指定した場合は後述のディレイ・コマンドで設定したディレイ値は

無視される。


(2)ディレイモード  アンプリチュード・モジュレーション

  振幅を1つのみ設定する。設定範囲は−127≦n≦127。

後述のディレイ・コマンドで設定したディレイの後、nの振幅でモジュレーションを

開始する。

  初期値はいずれのケースにおいても0。また全ての値を省略した場合は

アンプリチュード・モジュレーションの解除スイッチとなる。

例
  @a
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■モジュレーション・サブ・パラメータ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@Hn1,n2

  FM音源のピッチ・モジュレーション、アンプリチュード・モジュレーション、

またはMIDIのピッチ・モジュレーション、ARCC、拡張ピッチ・モジュレーション、

拡張ARCCのディレイモード用のディレイクロックを設定する。

n1はピッチ・モジュレーション用のディレイ。設定範囲は0≦n1≦65534。

n2はアンプリチュード・モジュレーション/ARCC用のディレイ。設定範囲は0≦n2≦65534。

値はどちらか一方の省略は可能。初期値は共に0。

例
  @h24,10  (両方同時に設定)
  @h,10    (アンプリチュード・モジュレーション/ARCC/拡張ARCCの
	    ディレイのみ設定する)
  @h24     (ピッチ・モジュレーションのディレイのみ設定する)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
@Sn1,n2

  FM音源のピッチ・モジュレーション、アンプリチュード・モジュレーション

(またはMIDIの拡張ピッチ・モジュレーション、拡張ARCCモード時)の

モジュレーション・スピードを設定する。設定範囲は1≦n1,n2≦16383。

  本命令はMIDIのノーマル・モジュレーション・モードでは全く

考慮されないもので、拡張モードの時のみ有効である。

  実際の波形にどう影響するかは5.3.節で解説するが、値が小さいほど高速で、

値が大きいほど低速で音が振動する。

値はどちらか一方の省略は可能。初期値は共に6。

例
  @s24,10  (両方同時に設定)
  @s,10    (アンプリチュード・モジュレーション/拡張ARCCのスピードのみ設定する)
  @s24     (ピッチ・モジュレーションのスピードのみ設定する)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
Sn1,n2

  FM音源のピッチ・モジュレーション、アンプリチュード・モジュレーション

(またはMIDIの拡張ピッチ・モジュレーション、拡張ARCCモード時)の

モジュレーション波形をセレクトする。

  n1がピッチ・モジュレーション用の波形、n2がアンプリチュード・モジュレーション用

(または拡張ARCC)の波形に対応する。

  波形は波形番号0〜3がプリセット波形で、8〜31がユーザー定義波形となる。

スピードや振幅パラメータの波形への影響については5.3.節を参照のこと。

プリセット波形

0:鋸歯波  1:矩形波  2:三角波  3:ワンショット鋸歯波

  値はどちらか一方の省略は可能。初期値は共に2の三角波。

例
  s1,1   (両方同時に設定)
  s,2    (アンプリチュード・モジュレーション/拡張ARCCの波形のみ設定する)
  s3     (ピッチ・モジュレーションの波形のみ設定する)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
Hn1,n2

  FM音源のピッチ・モジュレーション、アンプリチュード・モジュレーション

(またはMIDIの拡張ピッチ・モジュレーション、拡張ARCCモード時)の

モジュレーション波形を、キーオンと同期して初期化させるか(同期モード)、

キーオンと同期して初期化せずに波形タイプの切り換えが起こるまで

継続させるか(非同期モード)を設定する。

  n1がピッチ・モジュレーション用、n2がアンプリチュード・モジュレーション用

(または拡張ARCC)の同期/非同期設定パラメータとなる。

  値はどちらか一方の省略は可能。初期値は共に0の同期モードが設定されている。

例
  h1,1   (両方同時に設定)
  h,1    (アンプリチュード・モジュレーション/拡張ARCCの波形を非同期モードに
	  設定する)
  h1     (ピッチ・モジュレーションの波形を非同期モードに設定する)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                        特殊効果機能の併用について			      ┃
┃									      ┃
┃									      ┃
┃  ZMUSICではさまざまな特殊機能を合わせて使うことが出来ますが、	      ┃
┃									      ┃
┃オートベンドとポルタメントは同時に使用出来ません。万一、オートベンド時に    ┃
┃									      ┃
┃ポルタメントを実行した場合にはポルタメントのみ機能し、オートベンドは        ┃
┃									      ┃
┃実行されません。							      ┃
┃									      ┃
┃  しかし、これ以外の組み合わせは可能です。たとえばポルタメントする音に対して┃
┃									      ┃
┃ピッチ・モジュレーション、ARCC/アンプリチュード・モジュレーションをかけ┃
┃									      ┃
┃てさらにアフタータッチ・シーケンスを実行する・・・といった複数の効果を1つの音┃
┃									      ┃
┃に対して同時にかけることも出来るわけです。				      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■モジュレーション・モード
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
Mp,a

  MIDIにはモジュレーションのモードが2つあり、ひとつは、ある指定された

タイミングにのみMIDI楽器へ制御メッセージを送信するモードで、これを

ノーマルモードと呼ぶ。

  もうひとつはリアルタイムに絶えずMIDI楽器へ制御メッセージを送るモードで

こちらを拡張モードと呼ぶ。

  ノーマルモードは楽器側のハードウェア的な処理によって特殊効果を実現するので

ZMUSICの負荷は少ない。一方、拡張モードは絶えず制御メッセージを送るため

多少の負荷はあるものの、FM音源部のようにSコマンドでセレクトされる波形に

従って制御できるためノーマルモードより多彩な表現が出来る。

  本命令はピッチ・モジュレーションとARCCをどのモードで実行するかを

決定するもの。

p:0   ノーマルモードの設定。@Mで設定された値を指定のタイミングで
      コントロール・チェンジ1番のピッチ・モジュレーションに書き込む。

p:1   拡張モード1の設定。設定された振幅の効用をFM音源の@Mと同じにして、
      (@Mで指定される振幅は半音=64ということになる)Sでセレクトした波形で
      ピッチ・モジュレーションを実現する。
      @Mで指定される振幅の範囲は−768≦@M≦768。

p:2   拡張モード2の設定。設定された振幅の値はそのまま14ビットのMIDIの
      ピッチベンダー直値に該当する。この振幅で、Sコマンドでセレクトした波形で
      ピッチ・モジュレーションを実現する(ベンドレンジ=12のとき、
      半音≒683)。@Mで指定される振幅の範囲は−8192≦@M≦8191。


a:0   ノーマルモードの設定。@Aで設定した値を指定されたタイミングで書き込む。

a:1   拡張モードの設定。@Aで−127〜127までの振幅を設定すると、
      Sコマンドでセレクトした波形に従って生成される値を@Cで登録した
      コントロールチェンジに対して出力出来る。

  パラメータはどちらか一方の省略は可能。初期値はともに0(ノーマルモード)。

例
  m2,1   (両方同時に設定)
  m,1    (ARCCのモードのみ設定する)
  m1     (ピッチ・モジュレーションのモードのみ設定する)

※注意
	本命例を実行するとそれまで設定されていた振幅(@M及び@Aの値)は
	無効となる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■特殊機能スイッチング
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○●
=n

  ピッチ・モジュレーション、ARCC、オートベンド、アフタータッチ・シーケンス、

ベロシティ・シーケンスの各機能のスイッチングを行う。

  nは各ビット毎に意味を持ち、対応は以下の通りである。

	    d7d6d5d4d3d2d1d0
	    □□□■■■■■
		  ││││└ピッチ・モジュレーション
		  │││└─ARCC
		  ││└──オート・ベンド
		  │└───アフタータッチ・シーケンス
		  └────ベロシティ・シーケンス

  各ビットを0にするとオフ、1にするとオンとなる。

  初期値は0(全機能OFF)である。

例
  =%00011  (ピッチ・モジュレーション/ARCCをON。それ以外をOFF)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                         スイッチング・オフについて			      ┃
┃									      ┃
┃									      ┃
┃  各特殊機能の制御MMLにパラメータなしや0を設定するとその機能は停止する  ┃
┃									      ┃
┃ことになります。例えば @M または @M0 でピッチ・モジュレーション機能を   ┃
┃									      ┃
┃解除することが出来ます。またはスイッチング・コマンド'='を使って制御すること┃
┃									      ┃
┃も出来ます。この2つのスイッチングには微妙な違いがあるので注意して下さい。  ┃
┃									      ┃
┃  まず、前者の場合では機能停止時になんらかの初期化措置を音源/楽器側に対して┃
┃									      ┃
┃実行します。たとえばMIDIで@M0とした場合はモジュレーション処理を終了  ┃
┃									      ┃
┃するともに楽器側へモジュレーションデプス0を送信しています。		      ┃
┃									      ┃
┃  一方後者の場合は純粋にZMUSICがモジュレーション処理を中断するだけで  ┃
┃									      ┃
┃楽器に対しては、なんら特殊な処置をしません。ですから例えばMIDIで       ┃
┃									      ┃
┃ @h40 @m127 c1 @m d1							      ┃
┃ @h40 @m127 c1 =0 d1							      ┃
┃									      ┃
┃とした場合、両者ともcがディレイ40クロックの後モジュレーションを             ┃
┃									      ┃
┃開始します。そして、次のdが前者と後者では食い違いが出てきます。	      ┃
┃									      ┃
┃  前者ではdはモジュレーションしないで普通に鳴ります。しかし、後者の方は     ┃
┃									      ┃
┃ZMUSICが「ディレイ40クロックのあとモジュレーションを開始」という処理を┃
┃									      ┃
┃止めただけで前の音符のcのモジュレーションがそのまま残ることになりdは        ┃
┃									      ┃
┃モジュレーションがかかったまま鳴ります。				      ┃
┃									      ┃
┃  こうしたことから'='によるスイッチングは前の状態を保存しつつ、特殊機能を  ┃
┃									      ┃
┃停止したいという時に用いると便利です。				      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■発音制御
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@Dn

  ダンパーペダルの状態の設定を行う。設定範囲は0がダンパーペダルオフ、

1≦n≦127がダンパーペダルオンである。

  ダンパーオンの状態では発音はされるがダンパーオフになるまでキーオフされない。

各楽器の最大同時発音数を超えた時には各楽器に処理が委ねられる。通常は

一番過去に発音された音がキーオフされそのボイスを用いて新たな音がキーオン

されることになる。

  ADPCMでは単に次の音が鳴るまで発音し続けるという動作をするだけである。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
@Rn

  そのトラックは以後ノートオフ処理をしない。リズムマシンや一部の楽器の

リズムキットは発音すればキーオフを送らずともよいものがある(そういった楽器には

「ノートオフモード」とか「ノーサスティン」といったパラメータがあるはずである)。

  こういった楽器やチャンネルに対してこのコマンドを使えばドライバの

ノートオフ処理を省略でき、割り込み演奏処理が幾分軽くなる。

  このモードにはいるとQコマンドの影響を受けず、エンベロープを最後まで

実行するため、音を細かく区切ったりなどというニュアンスは再現不可能になる。

  n=0でノートオフ処理をする、n=1でノートオフ処理をしない。

省略時、及び初期状態は@R0、つまり「ノートオフをする」モードに設定されている。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
 `

  強制的にキーオフを行う。そのトラック内において発音中の音を全てミュートする。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                      FM音源トラックの最大同時発声数		      ┃
┃									      ┃
┃									      ┃
┃  内蔵FM音源では和音とダンパーにおいての同時発声数は各トラックがどの      ┃
┃									      ┃
┃チャンネルにアサインされているかで異なります。例えばあるトラックが	      ┃
┃									      ┃
┃FM音源の第1チャンネルにアサインされている場合はそのトラックの同時発音数は┃
┃									      ┃
┃8だが第2チャンネルにアサインされている場合は7となります。つまり	      ┃
┃									      ┃
┃そのチャンネルから第8チャンネルまで幾つチャンネルが残っているかがFM音源に┃
┃									      ┃
┃アサインされたトラックの同時発音数になるわけです。			      ┃
┃									      ┃
┃  MIDIの場合はもちろん楽器の最大発音数を超えるまで自由に発音させる事が  ┃
┃									      ┃
┃出来ます。								      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■フェードイン/フェードアウト
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
¥n

  フェードインまたは、フェードアウトを行う。nは音量増減スピードを表し

絶対値が大きいほど増減スピードが速くなる。

−85≦n≦−1  フェードイン
      n=0    フェードイン/フェードアウトモード解除
   1≦n≦85   フェードアウト

各トラックごとに設定可能なので、各トラック違った速度でフェードインや

フェードアウトが実行可能。フェードアウトでは出力音量が0になった時点で

そのトラックの演奏を終了する。

  各音源の特性から均等な音量バランスではフェードアウトされないケースが出てくる。

  n=0のフェードイン/フェードアウト解除は処理そのものを中止するだけなので

元の演奏状態に戻したい場合はボリュームコマンドなどを再設定する必要がある。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■繰り返し/反復記号
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
|:n … |r1 … |r2 … :| ...(1)
または
|:n … | … :| ...(2)

(1)のケース

  |:n〜:|で囲まれたMMLをn回演奏する(n省略時はn=2が自動設定される)。

  |riを|:n〜:|の中に挿入すると、|riから:|までの演奏データを繰り返しri回目に

演奏させることが出来る。|:〜:|は8重まで括ることが可能で複雑なシーケンスも

可能である。

  各値の設定可能範囲は1≦n, ri≦255である。

例
  |:3 a |:2 b :| c:|    (abbc abbc abbcの様に演奏される)
  |:2 a |1 b :| |2 c:|  (ab ac の様に演奏される)


(2)のケース

  |riのriを省略した|を|:n〜:|の中に挿入すると|以降に書かれた演奏データは

最後の繰り返し時には演奏はしないといった特殊例になる。

例
  |:5 a | b :|  (ab ab ab ab aの様に演奏される)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                          多重ループ構造について			      ┃
┃									      ┃
┃									      ┃
┃  ZMUSICでは多重の繰り返し構造が設定可能ですが、必ずネスト構造に     ┃
┃									      ┃
┃なっていなければ希望通りの繰り返しを得ることが出来ません。		      ┃
┃									      ┃
┃例えば								      ┃
┃									      ┃
┃        |: a |: b |1 c :||2 d e :|					      ┃
┃									      ┃
┃という記述では正常に演奏することが出来ません。			      ┃
┃									      ┃
┃これは								      ┃
┃									      ┃
┃        |: a |: b |1 c :||2 d e :| :|					      ┃
┃									      ┃
┃としなくてはなりません。						      ┃
┃									      ┃
┃  多重ループを使用する際は|:に対応した:|が絶対必要ということなのです。      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
[〜]コマンド

[do]  〜  [loop]      囲まれた間を半永久的にループ演奏する。
[d.c.]                始めに飛ぶ(1回のみ有効)。
[d.s.]                [segno]または[$]へ飛ぶ(1回のみ有効)。
[segno](または[$])
[tocoda](または[*])   [coda]へ飛ぶ(1回以上有効)。
[coda]
[fine](または[^])     [d.c.],[d.s.]を実行した後にここで演奏終了する。

  この他に演奏データ作成を支援するコマンドがある。

 (これらのコマンドはm_debug(1)または(D1)の時のみ有効となる。
m_debug(0)または(D0)のときは無視される。MEASURE3 m_debug()コマンド、
MEASURE4 (Dn)コマンド参照)

[!]		次の[!]までジャンプする。ジャンプ後の音源やZMUSICの
		内部パラメータはそこまで通常に演奏を行った時と同じに
		なっている。[!]が遇数個設定されなかった場合は、正常に
		動作しない。

[@]		次の[@]までジャンプする。ジャンプ後の音源やZMUSICの
		内部パラメータはそこまで通常に演奏を行った時と同じに
		なっている。ほぼ[!]と同機能だが、あるひとつのトラックで
		設定すると他のトラックも同時にジャンプを開始する点が違う。
		[@]が遇数個設定されなかった場合は、正常に動作しない。

[end]		いかなる状態の時にもこれを発見するとそのトラックは
		演奏を終える。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                              [!]/[@]の動作				      ┃
┃									      ┃
┃									      ┃
┃        [!]/[@]の動作手順を以下に示します。				      ┃
┃									      ┃
┃        1. 音階/和音/ポルタメント以外の「発音しない」コマンドを実行	      ┃
┃        2. [!]/[@]を見付けるまで1. を繰り返す				      ┃
┃        3. [!]/[@]を発見						      ┃
┃        4. 通常演奏へ							      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■MIDI楽器制御命令
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
@In1,n2,n3

  ZMUSICにそのトラックの楽器のメーカーID、デバイスID、モデルIDを

設定する。各値はMIDI楽器のマニュアルを参照のこと。これは特に設定しなくても

通常のコマンドの動作には全く影響しない。ただし、

	X命令

に関しては楽器個別の動作をするため、これらのコマンドを使用する前には必ず

設定しなければならない。

	n1=メーカーID(例:ROLAND=$41, KORG=$42, YAMAHA=$43)
	n2=デバイスID(各ユーザーが楽器に設定した値。特に設定した覚えのない
		      場合はその楽器のデフォルトのデバイスIDを設定する)
	n3=モデルID(例:MT32=$16, SC55=$42 or $45)

  初期値は不定。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
Xn1…,ni

  ローランド系の楽器にエクスクルーシブメッセージ送信を行う。

@IコマンドでメーカーIDにローランドを設定しておくことが前提。

  現在ワン・ウェイ・コミュニケーションのデータセット(コマンドID=$12)のみ

対応。

  データはいくつでも記述可能。各値の設定範囲は0≦ni≦127であるが、これ以上の値を

設定した場合は7ビットずつに分割されて送信される。

  (例:8192→$00,40の様に下位、上位の順に送信される)

  もちろんチェックサムは自動的に送信してくれる。

  具体的な用途としてはリバーブパラメータの書き換えや音色のパラメータ単位の

書き換えを行うのに便利であるが、楽器のメモリーを直接操作するものなので、

各自の責任のもとで使用すること。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
@Xn1,…,xi

  MIDIの生データの送信を行う。もちろんメーカーや楽器の種類には無関係で

チェックサム等も発信しない。

  楽器のメモリーを書き換える場合もあるので各自の責任のもとで使用すること。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
@Er,c

  MIDI楽器のエフェクトをコントロールする。コントロールチェンジの

エフェクト1へrを、エフェクト3へcを出力する。ただし、楽器側が

対応していない場合は、コントロールできない。

  パラメータは片方のみ省略できる。パラメータの有効範囲は0≦r,c≦127。

初期値は不定。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●(MT32系専用命令)
@En1,n2

 @IコマンドにてIDをローランドMT32に設定してある事が前提。

パートn1のエフェクトのスイッチを設定する。n1はパートナンバーを表し

設定範囲は1≦n1≦8。n2はスイッチを表しn2=0がオフ、1がオンである。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
@Ya1,a2,d1,d2

  MIDI楽器のNRPNを設定する。

  MIDI楽器には、MIDI規格には定められていないレジスタを持つことが

許されており、このコマンドはそのレジスタへの書き込みを行う。

  a1,a2はそれぞれアドレス上位下位を表し、d1,d2はそれぞれデータの上位下位を表す。

設定範囲は全て0〜127でd2のみ省略可能。

  SC55では音色のコントロールをここで行うことが出来る(SC55マニュアルp75参照)。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■ADPCM制御命令
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
◎
@Fn

  内蔵ADPCM音源の再生周波数を変更する。設定範囲は0≦n≦4で各値は

	n=     0: 3.9kHz
		1: 5.2kHz
		2: 7.8kHz
		3:10.4kHz
		4:15.6kHz

  に対応する。初期値は4で値省略時は4に自動設定される。
PCM8独立チャンネルモード時には
	n=     5:16ビットPCMデータ方式
		6: 8ビットPCMデータ方式
の設定が可能となる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃           8,16ビットPCMデータ方式とは?		      ┃
┃									      ┃
┃									      ┃
┃ X68kの扱うADPCMデータとはいわばサンプリングしてできた	      ┃
┃									      ┃
┃PCMデータが一種のアルゴリズムで圧縮されていると考えられます。	      ┃
┃									      ┃
┃音量の変更や周波数変換、合成処理を行うにはこのADPCMデータ方式から      ┃
┃									      ┃
┃PCMデータ方式へ変換しなければなりません。PCM8ではこの変換処理を      ┃
┃									      ┃
┃割り込みでリアルタイムで行っていますが、もしこの処理を省けるならば          ┃
┃									      ┃
┃かなり割り込み処理を軽くすることが出来るはずです。そこでPCM8では	      ┃
┃									      ┃
┃無圧縮のPCMデータを演奏出来るようになっています。			      ┃
┃									      ┃
┃ 16ビットPCMデータ方式は符号付き16ビット整数により表現された	      ┃
┃									      ┃
┃データです(−32768〜32767)。同一音長のADPCMデータの4倍のデータ長に    ┃
┃									      ┃
┃なります。ちょうどZVT.Xで'−C'スイッチにより生成されるPCMデータと  ┃
┃									      ┃
┃同じものです。1つのデータが2バイト構成であることから必ずデータ長は偶数で  ┃
┃									      ┃
┃なければ正常に鳴りません。						      ┃
┃									      ┃
┃ 8ビットPCMデータは方式は同様に符号付き8ビット整数により表現された    ┃
┃									      ┃
┃データです(−128〜127)。同一音長のADPCMデータの2倍のデータ長に        ┃
┃									      ┃
┃なります。								      ┃
┃									      ┃
┃ 8ビットPCMデータ/16ビットPCMデータともに特別な設定もなしに      ┃
┃									      ┃
┃ZPCNVでZPDを作成出来ます(ただし、音量音程変更などの加工処理は実行で ┃
┃									      ┃
┃きません)。もちろんADPCMデータと混在させてZPDにすることも出来ます。 ┃					      ┃
┃									      ┃
┃ 再生周波数はどちらとも15.6kHz固定ですがADPCM方式との混在が    ┃
┃									      ┃
┃可能でADPCMデータ側はこの時も5段階の周波数が使用可能です。	      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■FM音源レジスタへの書き込み命令
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎
Ya,d

  FM音源のレジスタaへ値dの書き込みを行う。ADPCM音源部で使用した場合も

FM音源のレジスタへの書き込みが行なわれる。使用にはFM音源に関しての

知識と十分な理解が必要。

  またOPMD.Xで有効だった特殊Yコマンドが使用可能となっている。

  y2,n    ノート番号n番のADPCM音を鳴らす。0≦n≦511
  y3,n    ADPCMのパンを設定する。n=0:OFF, 1:LEFT, 2:RIGHT, 3:MIDDLE
  y13,n   ADPCMの再生周波数を変更する(n:@Fコマンドのパラメータと同じ)。
  y14,n   ADPCM発音モードの設定。n=0の時、後から発音要求があったものを
	  優先して発音していく。n=1のとき、現在発音中のADPCM音が
	  鳴り終えるまで後からくるADPCMの発音要求を無視する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■ノイズ発生
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○
@On

  FM音源のチャンネル8のオペレータ4(スロット32)からノイズを発生する。

nとノイズの周波数とは

	n=4000/(32×ノイズ周波数[kHz])

の関係があり、設定範囲は0≦n≦31。値を省略した場合はノイズモード解除とみなす。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■コントロール・チェンジ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●
Ya,d

  コントロールチェンジa番に値dを書き込む。パラメータa,dの設定範囲は

共に0≦a,d≦127。コントロールチェンジについての詳細はMIDI楽器の

マニュアルのインプリメンテーション・チャートを参照。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■演奏制御
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
W

  他のトラックから同期信号が来るまで演奏処理を中断する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
Wn

  同期待ちしているトラックに対して同期信号を送る。設定範囲は1≦n≦80。

例
  (t1)   @1 v15 o4 q8 cdef w2  ←トラック2へ同期送信
  (t2) w @1 v15 o4 q8 gab<c
    ↑どこからか同期信号が来るまで演奏を中断。
  この例では結果的にはcdefgab<cが演奏される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
Jn

  トラックnを強制的に初めから演奏開始にする。演奏が終了していても、演奏中で

あっても演奏開始を命じられたトラックは最初から演奏を始める。設定範囲は

1≦n≦80。

例
  (t1)   @1 v15 o4 q8 j2r2j2
  (t2)   @1 v15 o4 q8 l8cdef
  この例では結果的にはcdef cdefが演奏される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃              同期コマンドと強制演奏コマンド使用における注意		      ┃
┃									      ┃
┃									      ┃
┃  コンパイルによってZMDを得た時、トラック番号が最適化されるため、        ┃
┃									      ┃
┃ZMS時で同期が取れていたものがZMDだと希望通りに鳴らないことがあります。┃
┃									      ┃
┃例えば								      ┃
┃									      ┃
┃	(m1,1000)(a1,1)							      ┃
┃	(m2,1000)(a2,2)							      ┃
┃	(m3,1000)(a3,3)							      ┃
┃	(t1)   @1 v15 o4 q8 cdef w3					      ┃
┃	(t2)								      ┃
┃	(t3) w @1 v15 o4 q8 gab<c					      ┃
┃									      ┃
┃の場合、コンパイル時の最適化によってトラック2は消去されトラック3が	      ┃
┃									      ┃
┃トラック2になってしまうためトラック1の同期信号は意味をなさなくなります。  ┃
┃									      ┃
┃また、								      ┃
┃									      ┃
┃	(m1,1000)(a1,1)							      ┃
┃	(m2,1000)(a2,2)							      ┃
┃	(m3,1000)(a3,3)							      ┃
┃	(t1)								      ┃
┃	(t2)   @1 v15 o4 q8 cdef w3					      ┃
┃	(t3) w @1 v15 o4 q8 gab<c					      ┃
┃									      ┃
┃の場合も同様にトラック1が消去されトラック2が1、トラック3が2へと	      ┃
┃									      ┃
┃詰められるので同期コマンドは意味を持たなくなります。ですから、同期コマンドを┃
┃									      ┃
┃使用した曲をコンパイルしてZMDを得る場合は無意味なトラックを確保しては    ┃
┃									      ┃
┃いけません。								      ┃
┃									      ┃
┃  同様に強制演奏コマンドの場合も、参照したトラックとの間にダミーのトラックが┃
┃									      ┃
┃存在すると、同様の症状が起きます。					      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■特権命令
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
;n

  直接ZMDコードnを埋め込む。使用にはZMDの十分な理解を必要とする。

不当な与え方をした場合は最悪、暴走する。設定範囲は0≦n≦255。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○◎●
?a,d

  そのトラックの演奏ワークのa番に値dを書き込む。使用にはZMUSICの

ワークエリアについての十分な理解を必要とする。不当な与え方をした場合は最悪、

暴走する。値dは相対値の設定も可能。設定範囲は0≦a,d≦255。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                     OPMDRV.Xとの互換性について		      ┃
┃									      ┃
┃									      ┃
┃  ZMUSIC.Xでは初代のOPMDRV.Xと互換性がありますが以下の点に  ┃
┃									      ┃
┃注意して下さい(OPMDRV3.Xとは互換性はありません)。		      ┃
┃									      ┃
┃  レジスタ番号48〜55を操作するYコマンドは処理の都合上@Kコマンドに    ┃
┃									      ┃
┃変換してしまうため、アサインされたチャンネル以外のチャンネルの	      ┃
┃									      ┃
┃キーフラクションを操作した場合は無効となります。			      ┃
┃									      ┃
┃  また、1つの命令における中間言語やそのサイズが(当然ながら)	      ┃
┃									      ┃
┃OPMDRV.Xとは違うのでm_alloc命令や(Mtr,sz)コマンドで         ┃
┃									      ┃
┃トラックバッファをギリギリに確保してあるような曲は、場合によっては	      ┃
┃									      ┃
┃トラックバッファが不足してしまうことがあります。そういう場合は	      ┃
┃									      ┃
┃トラックバッファを大き目にとり直してください。			      ┃
┃									      ┃
┃例									      ┃
┃	M_ALLOC(1,1000)  →  M_ALLOC(1,5000)				      ┃
┃	(m1,1000)        →  (m1,5000)					      ┃
┃									      ┃
┃  OPMDRV.Xでは一度トラックヘッダを書けば以降同じトラックへMMLを  ┃
┃									      ┃
┃セットする場合はトラックヘッダの省略が出来ました。もちろんZMUSICでも  ┃
┃									      ┃
┃可能は可能なのですが一部制約があります。それはポルタメント命令です。	      ┃
┃									      ┃
┃ポルタメントは"()"という記号を使うためトラックヘッダを省略してこの命令を  ┃
┃									      ┃
┃書いた場合、ZMUSICのインタプリタはMMLとは認識できずZMSコマンドと┃
┃									      ┃
┃勘違いしてしまうのです。それ以外の命令ならばトラックヘッダを省略しても      ┃
┃									      ┃
┃大丈夫です。								      ┃
┃									      ┃
┃  さらにOPMDRV.Xでは'm_play()'や'm_cont()','m_stop()'などのパラメー┃
┃									      ┃
┃タにチャンネル番号を指定するような仕様でしたがZMUSICではトラック番号で┃
┃									      ┃
┃指定します。こちらの方が汎用性が高いと判断して採用しました。		      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


5.3.  モジュレーション波形について


●プリセット波形

  ZMUSICにはピッチ・モジュレーション用(以下PM)、

アンプリチュード・モジュレーション用(以下AM)両方に4つのプリセット波形が

登録されている。この波形が振幅(@M/@Aコマンド)、波長(@Sコマンド)、

ディレイ(@Hコマンド)などの各パラメータによってどう変化するかを図に示す。


●波形メモリについて

  ZMUSICでは

ZMSコマンド
.wave_form <wave number>,<loop type>[,loop point]={data.......}
MUSICZ.FNC関数
m_wave_form(<wave number>,<loop type>[,loop point],<ary1:data>)

を用いて作成したユーザー波形を波形番号8〜31に登録し使用することが出来る。

  この波形が振幅(@M/@Aコマンド)、波長(@Sコマンド)、

ディレイ(@Hコマンド)などの各パラメータによってどう影響するかを図に示す。

  また以下にユーザー波形使用時の留意点を示す。

・波形データはピッチ・モジュレーション/音量モジュレーション/ARCC共用と

なる。登録した波形データはMMLの'S'コマンドでプリセットの

ノコギリ波/矩形波/三角波同様に呼び出して使用する。

・MML'@S'で指定されたクロックの間、1つの波形データを使用する。(下図)
・実際の波形実行のオン/オフは通常の特殊機能と同様。
・振幅は各ポイントにおける波形データが直値で使用されるが、各特殊機能コマンドの
振幅設定コマンドの正負に応じて各値の正負を逆転して使用させることも可能。(下図)
ただし振幅の絶対値は無関係。
・1/8モードは波形メモリに振幅という観念がないため無効。

------------------------------------------------------------------------------------
ピッチ・モジュレーション(FM音源部/MIDI音源部拡張ピッチ・モジュレーションモード時)
------------------------------------------------------------------------------------

波形番号0:鋸歯波  振幅パラメータ:+
						   _
		 /      /      /      /      /↑@M
   @K→____/      /      /      /      /  ↓
       ←──→      /      /      /      /     ̄
	@Hの       /      /      /      /|
	第1パラメータ                          | |
					    @Sの第1パラメータ

波形番号0:鋸歯波  振幅パラメータ:−

		   \      \      \      \
   @K→____      \      \      \      \    _
       ←──→\      \      \      \      \  ↑
	@Hの     \      \      \      \     |\↓@M
	第1パラメータ                               | | ̄
						 @Sの第1パラメータ

波形番号1:矩形波  振幅バラメータ:+

	       ̄ ̄     ̄ ̄     ̄ ̄     ̄ ̄
  @K→____                                _
      ←──→                                ↑@M
	@Hの      __    __    __    __↓
	第1パラメータ                | |           ̄
				  @Sの第1パラメータ

波形番号1:矩形波  振幅バラメータ:−
				      _
		   ̄ ̄     ̄ ̄     ̄ ̄↑@M
  @K→____                        ↓
      ←──→                         ̄
	@Hの  __    __    __
	第1パラメータ            | |
			      @Sの第1パラメータ

波形番号2:三角波  振幅パラメータ:+
						   _
		 /\            /\            /↑@M
   @K→____/    \        /    \        /  ↓
       ←──→        \    /        \    /|    ̄
	@Hの             \/            \/  |
	第1パラメータ                          |   |
					    @Sの第1パラメータ

波形番号2:三角波  振幅パラメータ:−

			 /\            /\
   @K→____        /    \        /    \    _
       ←──→\    /        \    /       |\  ↑@M
	@Hの     \/            \/         |  \↓
	第1パラメータ                             |   | ̄
					       @Sの第1パラメータ

波形番号3:鋸歯波シングル  振幅パラメータ:+
		   _____________
		 /↑@M
   @K→____/| ↓
       ←──→| |  ̄
	 @Hの   @Sの第1パラメータ
	第1パラメータ


波形番号3:鋸歯波シングル  振幅パラメータ:−

   @K→____    _
       ←──→\  ↑
	 @Hの   |\↓@M
       第1パラメータ| | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
		 @Sの第1パラメータ

波形番号8〜31:ユーザー波形  振幅パラメータ:+

波形データ列が+5,−5,+10,+3,0の場合・・・

		     +10
	     +5       ̄ ̄
	     ̄ ̄         __  0
@K→────              +3 ──
    ←──→     __
      @Hの        -5
    第1パラメータ    ←→
		  @S第1パラメータ

波形番号8〜31:ユーザー波形  振幅パラメータ:−

波形データ列が+5,−5,+10,+3,0の場合・・・

		 +5 
		 ̄ ̄          0
@K→────             -3 ──
    ←──→__         ̄ ̄
      @Hの   -5     __
    第1パラメータ       -10
		    ←→
		     @S第1パラメータ


------------------------------------------------------------------------------
音量モジュレーション(FM音源部)
------------------------------------------------------------------------------

波形番号0:鋸歯波  振幅パラメータ:+

   @V→____                                _
       ←──→\      \      \      \      ↑
	 @Hの    \      \      \      \    |
       第2パラメータ   \      \      \      \  |@A
		     \      \      \     |\↓
					    | | ̄
					     @Sの第2パラメータ

波形番号0:鋸歯波  振幅パラメータ:−

   @V→____                                 _
       ←──→       /      /      /      /↑
	 @Hの       /      /      /      /  |@A
       第2パラメータ  /      /      /      /    |
		/      /      /      /|     ↓
					| |      ̄
					 @Sの第2パラメータ

波形番号1:矩形波  振幅バラメータ:+

   @V→____                                _
       ←──→ ̄ ̄     ̄ ̄     ̄ ̄     ̄ ̄    ↑
	 @Hの                                  |
       第2パラメータ                               |@A
		   __    __    __    __↓
				  | |           ̄
				   @Sの第2パラメータ

波形番号1:矩形波  振幅バラメータ:−

   @V→____                                 _
       ←──→     ̄ ̄     ̄ ̄     ̄ ̄     ̄ ̄ ↑
	 @Hの                                   |@A
       第2パラメータ                                |
	       __    __    __    __     ↓
			      | |                ̄
			       @Sの第2パラメータ

波形番号2:三角波  振幅バラメータ:+

   @V→____                                 _
       ←──→\            /\            / ↑
	 @Hの    \        /    \        /   |
       第2パラメータ  |\    /        \    /     |@Aのパラメータ
		  |  \/            \/       ↓
		   ←→                          ̄
		    @Sの第2パラメータ

波形番号2:三角波  振幅バラメータ:−

   @V→____                                 _
       ←──→      /\            /\       ↑
	 @Hの      /    \        /    \     |
       第2パラメータ /|       \    /        \   |@Aのパラメータ
	       /  |         \/            \ ↓
	       ←→                              ̄
		@Sの第2パラメータ

波形番号3:鋸歯波シングル  振幅パラメータ:+

   @V→____        _
       ←──→\      ↑
	 @Hの    \    |
       第2パラメータ   \  |@A
		    |\↓
		    | | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
		     @Sの第2パラメータ

波形番号3:鋸歯波シングル  振幅パラメータ:−

   @V→____        _____________
       ←──→      /↑
	 @Hの      /  |@A
       第2パラメータ /    |
	       /|     ↓
	       | |      ̄
		@Sの第2パラメータ

波形番号8〜31:ユーザー波形  振幅パラメータ:+

波形データ列が+5,−5,+10,+3,0の場合・・・


		     +10
	     +5       ̄ ̄
	     ̄ ̄         __  0
@V→────              +3 ──
    ←──→     __
      @Hの        -5
    第2パラメータ    ←→
		  @S第2パラメータ

波形番号8〜31:ユーザー波形  振幅パラメータ:−

波形データ列が+5,−5,+10,+3,0の場合・・・

		 +5 
		 ̄ ̄          0
@V→────             -3 ──
    ←──→__         ̄ ̄
      @Hの   -5     __
    第2パラメータ       -10
		    ←→
		     @S第2パラメータ

------------------------------------------------------------------------------
拡張ARCC
------------------------------------------------------------------------------
波形番号0:鋸歯波  振幅パラメータ:+

  @Cの
第3パラメータ→____                                _
	   ←──→\      \      \      \      ↑
	     @Hの    \      \      \      \    |
	   第2パラメータ   \      \      \      \  |@A
			 \      \      \     |\↓
						| | ̄
						 @Sの第2パラメータ

波形番号0:鋸歯波  振幅パラメータ:−

  @Cの
第3パラメータ→____                                 _
	   ←──→       /      /      /      /↑
	     @Hの       /      /      /      /  |@A
	   第2パラメータ  /      /      /      /    |
		    /      /      /      /|     ↓
					    | |      ̄
					     @Sの第2パラメータ

波形番号1:矩形波  振幅バラメータ:+

   @Cの
第3パラメータ→____                                _
	   ←──→ ̄ ̄     ̄ ̄     ̄ ̄     ̄ ̄    ↑
	     @Hの                                  |
	   第2パラメータ                               |@A
		       __    __    __    __↓
				      | |           ̄
				       @Sの第2パラメータ

波形番号1:矩形波  振幅バラメータ:−

   @Cの
第3パラメータ→____                                 _
	   ←──→     ̄ ̄     ̄ ̄     ̄ ̄     ̄ ̄ ↑
	     @Hの                                   |@A
	   第2パラメータ                                |
		   __    __    __    __     ↓
				  | |                ̄
				   @Sの第2パラメータ

波形番号2:三角波  振幅バラメータ:+

   @Cの
第3パラメータ→____                                 _
	   ←──→\            /\            / ↑
	     @Hの    \        /    \        /   |
	   第2パラメータ  |\    /        \    /     |@Aのパラメータ
		      |  \/            \/       ↓
		       ←→                          ̄
			@Sの第2パラメータ

波形番号2:三角波  振幅バラメータ:−

   @Cの
第3パラメータ→____                                 _
	   ←──→      /\            /\       ↑
	     @Hの      /    \        /    \     |
	   第2パラメータ /|       \    /        \   |@Aのパラメータ
		   /  |         \/            \ ↓
		   ←→                              ̄
		    @Sの第2パラメータ

波形番号3:鋸歯波シングル  振幅パラメータ:+

   @Cの
第3パラメータ→____        _
	   ←──→\      ↑
	     @Hの    \    |
	   第2パラメータ   \  |@A
			|\↓
			| | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
			 @Sの第2パラメータ

波形番号3:鋸歯波シングル  振幅パラメータ:−

   @Cの
第3パラメータ→____        _____________
	   ←──→      /↑
	     @Hの      /  |@A
	   第2パラメータ /    |
		   /|     ↓
		   | |      ̄
		    @Sの第2パラメータ

波形番号8〜31:ユーザー波形  振幅パラメータ:+

波形データ列が+5,−5,+10,+3,0の場合・・・

			    +10
		    +5       ̄ ̄
@Cの                ̄ ̄         __  0
第3パラメータ→────              +3 ──
	   ←──→     __
	     @Hの        -5
	   第2パラメータ    ←→
			 @S第2パラメータ

波形番号8〜31:ユーザー波形  振幅パラメータ:−

波形データ列が+5,−5,+10,+3,0の場合・・・

			+5 
@Cの                    ̄ ̄          0
第3パラメータ→────             -3 ──
	   ←──→__         ̄ ̄
	     @Hの   -5     __
	   第2パラメータ       -10
			   ←→
			    @S第2パラメータ

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                             波形メモリの応用例			      ┃
┃									      ┃
┃									      ┃
┃・FM音源のピッチ・モジュレーションで使う場合		        ┃
┃									      ┃
┃  波形データは半音を64とした値で処理されます。各値がそのチャンネルの        ┃
┃									      ┃
┃ディチューンと加算されて、それがその瞬間のピッチとして決定されます。        ┃
┃									      ┃
┃例えばディチューンが10の時に波形メモリのデータが0,5,−5の時は	              ┃
┃									      ┃
┃10+0=10, 10+5=15, 10−5=5がそれぞれその瞬間のピッチになります。	      ┃
┃									      ┃
┃例									      ┃
┃  (t1) @m1 @s6 s8 @h40            順位相で波形メモリ8番をFM・PMで実行      ┃
┃  (t1) @m-1 @s6 s8 @h40           逆位相で波形メモリ8番をFM・PMで実行       ┃
┃									      ┃
┃									      ┃
┃・FM音源のアンプリチュード・モジュレーションで使う場合		      ┃
┃									      ┃
┃  波形データはそのチャンネルのボリューム値に加算され、その和がその瞬間の    ┃
┃									      ┃
┃音量として決定されます。音量の範囲は0〜127ですがこの範囲を越えた場合は      ┃
┃									      ┃
┃この範囲内に修正されます。例えば音量が@V125のとき波形メモリのデータが     ┃
┃									      ┃
┃0,5,−5の時は125+0=125, 125+5=127(130), 125−5=120がそれぞれその瞬間の ┃
┃									      ┃
┃音量になります。							      ┃
┃									      ┃
┃例									      ┃
┃									      ┃
┃  (t1) @a1 @s,6 s,8 @h,40         順位相で波形メモリ8番をFM・PMで実行       ┃
┃  (t1) @a-1 @s,6 s,8 @h,40        逆位相で波形メモリ8番をFM・PMで実行       ┃
┃									      ┃
┃									      ┃
┃・MIDI音源のピッチ・モジュレーションで使う場合			      ┃
┃									      ┃
┃  拡張モジュレーション・モード時のみ有効です。効果はFM音源と同じです。    ┃
┃									      ┃
┃拡張モジュレーション・モードには振幅を半音=64にするか半音≒683(ベンドレンジ┃
┃									      ┃
┃=12の時)にするかの2つのモードがありますが波形データはこの影響を受けます。 ┃
┃									      ┃
┃たとえば波形データが683であったとすると半音=64モード時には683/64≒10半音分 ┃
┃									      ┃
┃の変化量になりますが半音≒683モード時には1半音分の変化量となります。	      ┃
┃									      ┃
┃用途や趣味に合わせて使い分けて下さい。				      ┃
┃									      ┃
┃例									      ┃
┃  (t1) m1 @m1 @s6 s8 @h40         順位相で波形メモリ8番をMIDI・拡張PMで実行 ┃
┃  (t1) m1 @m-1 @s6 s8 @h40        逆位相で波形メモリ8番をMIDI・拡張PMで実行 ┃
┃									      ┃
┃									      ┃
┃・MIDI音源の拡張ARCCで使う場合				      ┃
┃									      ┃
┃  波形メモリは拡張ARCCモード時にのみ有効です。各波形データは	      ┃
┃									      ┃
┃ARCCニュートラル値(@Cの第3パラメータ)と加算して、その和が	      ┃
┃									      ┃
┃コントロールチェンジへ出力されます。応用次第で			      ┃
┃									      ┃
┃疑似ランダム・オート・パンポットやFM音源の様な自由波形による	      ┃
┃									      ┃
┃音量モジュレーションなども実現できます。				      ┃
┃									      ┃
┃例									      ┃
┃ (t1) m,1 @a1 @s,6 s,8 @h,40     順位相で波形メモリ8番をMIDI・拡張ARCCで実行┃
┃ (t1) m,1 @a-1 @s,6 s,8 @h,40    逆位相で波形メモリ8番をMIDI・拡張ARCCで実行┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
{ -- ZM6.MAN ------------------------------------------------
	    MEASURE6
	    ADPCMを扱う


  ここではZMUSICシステムでのADPCMデータの取り扱いと、

支援ツール「ZPCNV.R」「ZPLK.R」について解説します。










6.1.  はじめに


  ZMUSIC起動時には当然だがADPCM音は一つもプリセットされて

いない。よってADPCM音を鳴らすためにはZMUSICに鳴らしたい

ADPCM音ファイルを登録することが必要になる。

  ZMUSICにADPCMデータを渡す方法は3通りあり、1つは

ADPCM登録コマンドをミュージック・プログラムに直接記述していく方法。

  2つめはADPCM登録ZMSコマンドを記述したファイルをエディタ

(ED.X等)で作成しこれを渡す方法である。

  3つ目はそのファイルをZPCNV.RでZPDファイルにコンバートし

これをZMUSICに渡す方法である。


6.2.  ADPCMコンフィギュレーションファイル


  ADPCM登録ZMSコマンドを箇条書きにしたファイルを、特に

「ADPCMコンフィギュレーションファイル」と呼び、これをZMUSICへ

受け渡すことでADPCMデータを登録することができる(奨励ファイル拡張子は

'.CNF')。

  ADPCM登録ZMSコマンドは

    <音階>=<ADPCMファイルネーム>[,ADPCM加工オプションスイッチ]

のスタイルをとるが(下図、MEASURE4参照)、この各パラメータについて詳しく

解説をする。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−┃
┃●ADPCMコンフィギュレーション					      ┃
┃−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−┃
┃n ファイルネーム,Pp,Vv,Mm,d,Cc,s,R,Ff,l				      ┃
┃  ADPCM音の登録							      ┃
┃        n=設定音色番号(0〜511)					      ┃
┃        p=ピッチシフトパラメータ(−12〜12)				      ┃
┃        v=ボリュームパラメータ(1〜100(原音量)〜300)			      ┃
┃        m=ミキシングノート番号(0〜511)				      ┃
┃        d=ミキシングディレイパラメータ(0〜65535)			      ┃
┃        c=カット・オフセットパラメータ(0〜65535)			      ┃
┃        s=カット・サイズ(0〜65535)					      ┃
┃        f=フェード・イン/アウトオフセット(0〜65535)			      ┃
┃        l=フェード・イン/アウトレベル(0〜127)			      ┃
┃  ファイルネーム以降は省略可能。					      ┃
┃  (MEASURE3 m_pcmset()参照)						      ┃
┃−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−┃
┃.ADPCM_BANK n								      ┃
┃  ADPCM音の登録先のバンクを指定	             			      ┃
┃  n=バンク番号(1≦n≦4)						      ┃
┃−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−┃
┃.Onk ファイルネーム,Pp,Vv,Mm,d,Cc,s,R,Ff,l				      ┃
┃  ADPCM音の登録							      ┃
┃        n=オクターブ値(−1〜9)					      ┃
┃        k=音階MML(abcdefg,#,+,-)					      ┃
┃        p=ピッチシフトパラメータ(−12〜12)				      ┃
┃        v=ボリュームパラメータ(1〜100(原音量)〜300)			      ┃
┃        m=ミキシングノート番号(0〜511)				      ┃
┃        d=ミキシングディレイパラメータ(0〜65535)			      ┃
┃        c=カット・オフセットパラメータ(0〜65535)			      ┃
┃        s=カット・サイズ(0〜65535)					      ┃
┃        f=フェード・イン/アウトオフセット(0〜65535)			      ┃
┃        l=フェード・イン/アウトレベル(0〜127)			      ┃
┃  ファイルネーム以降は省略可能。登録先ノート番号やミキシングノート番号は    ┃
┃  '.ADPCM_BANK'命令のバンク番号が考慮される。				      ┃
┃  (MEASURE3 m_pcmset()参照)						      ┃
┃−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

●音階


  ADPCM音を鍵盤上の一体どこに割り当てるのかを指定するパラメータ。

先頭にピリオド'.'またはシャープ'#'をつけてオクターブMMLと音階MMLを

記述することによって指定する方法と0〜511の登録先ノートナンバーを書いて

登録する方法がある

  音階MML指定の場合はオクターブ−1のドからオクターブ9のソ(.O−1C〜.O9G)

までの128から選択して指定できる。

  ZMUSICではADPCMは4つのグループ(バンク)に分けて管理ができ、

音階で登録する時はこのバンク内への登録となる。つまり、音階MML指定の

場合には、まず、登録先のバンクを決定し、それからそのバンク内の

音階を選択するというプロセスで行う。同一バンク内の登録は一度

バンク決定コマンドを実行すれば2回目は不用である。

  ノートナンバー指定の場合はこのセレクトしたバンクを超えた登録が可能である。

以下にその対応を示す。

ADPCMノート番号=(バンク番号−1)×128+(オクターブ+1)×12+音階

ADPCMノート番号:0〜511
バンク番号:1〜4
オクターブ:−1〜9
音階:CDEFGABがそれぞれ0〜11に対応

	      ADPCMノート番号

バンク1            0〜127
バンク2          128〜255
バンク3          256〜383
バンク4          384〜511


●ADPCMファイルネーム


  登録したいADPCMファイルをここに指定する。

  ADPCMのファイルは環境変数"zmusic"にパスを記述しておけば

(囲み参照)カレントからファイルが見つからない場合はそちらからも

検索してくれる。

  また、ここに音階MMLやノートナンバーを書くことによって、すでに登録した

ADPCM音を参照することが出来る。同じ音を二重に登録したり、ADPCM音を

二重に加工したい場合などに便利である。


●ADPCM加工オプションスイッチ


  単に記憶デバイスにあるADPCMファイルを登録するだけでなくZMUSICでは

そのデータに加工を施して登録することが出来る。


・音程変更


  'P'(小文字も可)の後ろに−12〜+12の数値を書くことによってADPCM音の

音程を半音単位で変えることが出来る。


・音量変更


  'V'(小文字も可)の後ろに1〜300の数値を書くことによってADPCM音の音量を

パーセント単位で変えることが出来る。


・切り出し


  'C'(小文字も可)の後ろにオフセット値と切り出しサイズを記述することによって

ADPCMデータ中の任意の一部分を取り出すことが出来る。

  サイズを省略するとオフセットより後ろすべてを切り出すことになる。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃			  size(0〜65535)		  ┃
┃			 ←──────→		  ┃
┃	┌───────┬───────┬───┐	  ┃
┃	│		│    有効部分  │	│	  ┃
┃	└───────┴───────┴───┘	  ┃
┃	 ───────→				  ┃
┃	 offset(0〜65535)				  ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


・逆転


  'R'(小文字も可)を書くことによって逆転再生を指定することが出来る。


・フェード・イン/フェード・アウト


  'F'(小文字も可)の後ろにオフセット値とスタートレベル(フェード・イン時)、

またはエンドレベル(フェード・アウト時)を設定すると波形のエンベロープを

変更することが出来る。オフセットの値を正にすることでフェード・アウト、

負にすることでフェード・インの指定となる。

  パラメータは両方とも省略可能だが、ただしその場合は両パラメータとも0が

設定される(「データ先頭からフェード・アウト」に相当)。

┏━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 		 offsetを正の値にした場合	    ┃
┃						    ┃
┃	     128_______			    ┃
┃	     		     |\		    ┃
┃			     |	\		    ┃
┃			     |	  \		    ┃
┃  			     |	    \		    ┃
┃  	                     |       ↑ level	    ┃
┃  	                     |       │(0〜127)	    ┃
┃  	       0 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄		    ┃
┃		──────→			    ┃
┃		   offset(0〜65535)		    ┃
┃						    ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃		  offsetを負の値にした場合	    ┃
┃						    ┃
┃	      128	 _______		    ┃
┃	               /|			    ┃
┃		     /  |			    ┃
┃		   /    |			    ┃
┃		 /      |			    ┃
┃	  level ↑       |			    ┃
┃	(0〜127)│       |			    ┃
┃	        0 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄		    ┃
┃	         ←───			    ┃
┃	          offset(−1〜−65535)		    ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━┛


・合成


  'M'(小文字も可)の後ろに0〜511の数値または音階MMLを書くことによって

そのノート番号や音階に以前登録されたADPCM音と合成することが出来る。

さらにその後ろに , で区切った後で数値を書くとそのバイト数分遅らせて

合成することが出来る。


●注意


  ADPCM加工オプションスイッチは、いずれも省略可能で、どれか1つのみの

指定でも構わない。また加工のプロセスは各スイッチの設定順序には無関係で

図3のような処理順序で行われる。

  また、ADPCM登録コマンドでZMUSICにADPCMを登録する時、

ADPCM加工スイッチを用いる場合にはZMUSICの組み込みスイッチの

'−W'でワークエリアを十分に取っておかないとエラーとなる(目安としては

コンフィギュレーションファイル内に存在する最大ファイルサイズの4倍くらい。

ミックスを用いる場合は更にその2倍くらい)。エラーとなった場合は加工も

指定されたノートへの登録も行われない。後述のZPCNV.RでZPDを

作成する場合にはZMUSICは無関係なのでADPCMバッファや

ワークエリアの確保は不要である。


		┏━━━━━━━━━━━━━━━━━━━━━━┓
		┃              音程・音量変更		      ┃
		┃                    ↓		      ┃
		┃                 切り出し		      ┃
		┃                    ↓		      ┃
		┃                   逆転		      ┃
		┃                    ↓		      ┃
		┃      フェード・イン/フェード・アウト      ┃
		┃                    ↓		      ┃
		┃                   合成		      ┃
		┗━━━━━━━━━━━━━━━━━━━━━━┛


●例


.ADPCM_BANK 2
.o2c=BASS.PCM
.o2d=SNARE.PCM,v150
  バンク2のオクターブ2のc(ADPCMノート番号=164)に"BASS.PCM"を、
そしてオクターブ2のd(ADPCMノート番号=166)に"SNARE.PCM"を
ボリューム150%にして登録する。

.o2d=SNARE.PCM,cV150,P+4
.o2d#=CLAP.PCM,mo2d
  "SNARE.PCM"をボリューム150%にし、さらに4半音下げたものをオクターブ2のdへ
登録。そしてこれと"CLAP.PCM"を合成したものをオクターブ2のd#へ登録する。

.o3d=CYMBAL.PCM,c1000,5000,r
  "CYMBAL.PCM"の1000バイト目から5000バイトを切り出し、これを逆転したものを
オクターブ2のdへ登録する。

.o2e-=VOICE.PCM,f1000,20,m200,2000
  "VOICE.PCM"の1000バイト目からデータ終端までを音量20まで滑らかに下げていき、
これに対してノート番号200(バンク2のオクターブ5のc)に登録されたデータを
2000カウント遅らせて合成してオクターブ2のe♭へ登録する。


●ADPCMコンフィギュレーション・ファイルのZMUSICへの登録法


  MUSICZ.FNCを用いてX−BASIC上で作られた曲データ中に

指定したい場合は

m_pcmcnf("ADPCMコンフィギュレーション・ファイルネーム")

を使う(MEASURE3参照)。

  ZMS中に指定したい場合は

.adpcm_list ADPCMコンフィギュレーション・ファイルネーム

を用いる(MEASURE4参照)。

  また、通常の演奏データのように

A>copy ADPCMコンフィギュレーション・ファイルネーム opm

としたり

A>zp ADPCMコンフィギュレーション・ファイルネーム

のようにZMUSICへ登録することも可能である(MEASURE7参照)。こちらの場合は

曲がたとえ演奏中であってもリアルタイムにADPCMセットを変更することが出来る。

  また、ZMUSIC常駐スイッチの'−S'を用いて

A>zmusic -w50 -p200 -sdrum.cnf     (拡張子の省略は不可)

のようにZMUSIC常駐時にADPCMコンフィギュレーション・ファイルを

登録することも出来る。ただし、その際には必要分のワークやADPCMバッファを

確保しなければならない。


6.3.  ZPCNV.RとZPD


  ZPCNV.Rは、前節で解説したコンフィギュレーションファイルに従って必要な

ADPCMデータをひとつのファイルにまとめてしまうアプリケーションである。

ひとまとめにする際に音程音量変換、合成作業といった加工処理もしてしまうため

ADPCMデータの登録処理にかかる時間は極めて少なくて済む(ADPCM

コンフィギュレーション・ファイルをZMUSICへ渡す方式では1個1個のデータを

読み込み、それから加工を行ったりするため、大量のADPCMデータを

登録する場合には、フロッピーディスクなどの中/低速メディアユーザーや

10MHzマシンユーザーは処理が終了するまで長時間待たされることがある)。

加工処理ルーチンやその際に使用するワークはZPCNV.Rが独自で持っているため、

実行にはZMUSICの常駐は必要ない。

  ZMUSICではADPCMコンフィギュレーション・ファイルをもとに

ひとまとめにしたこのデータをADPCMブロックデータ、「ZPD」と呼ぶ。


●ZPCNV.Rの使い方


A>zpcnv filename1 filename2

とするだけで良い。ワークエリアなどの指定は一切不要である。

filename1はコンバートしたいコンフィギュレーションファイル名(拡張子を省略した時は

'.CNF'が自動添付される)。

filename2は出来たブロックデータのファイルネームでこちらは省略することが可能。

省略時はfilename1に拡張子'.ZPD’を付けたものでセーブされる。


●ZPCNV.R専用ZMS命令


  例えば

.o2d=SNARE.PCM,v150,p+4
.o2d#=CLAP.PCM,mo2d
("SNARE.PCM"をボリューム150%にし、さらに4半音下げたものをオクターブ2のdへ
登録。そしてこれと"CLAP.PCM"を合成したものをオクターブ2のd#へ登録する)

というケースで、得たいのが.o2d#の方のみで.o2dは単なるテンポラリー的な

存在でしか無かった時に、

.ERASE o2d

をコンフィギュレーションファイル後尾に設定すると、そのデータを除外して

ZPDを生成してくれる。

  不本意にZPDが大きくなるのを防ぐことができる。

  本命令はZPCNV.R専用のZMS命令でZMUSICの曲データ中に

指定しても(エラーにはならないが)機能はしないダミー命令として扱われる。


●ZPDのZMUSICへの登録法


  MUSICZ.FNCを用いてX−BASIC上で作られた曲データ中に

指定したい場合は

m_adpcm_block("ADPCMコンフィギュレーション・ファイルネーム")

を使う(MEASURE3参照)。

  ZMS中に指定したい場合は

.adpcm_block_data ADPCMコンフィギュレーション・ファイルネーム

を用いる(MEASURE4参照)。

  また、通常の演奏データのように

A>copy ADPCMコンフィギュレーション・ファイルネーム opm

としたり

A>zp ADPCMコンフィギュレーション・ファイルネーム

のようにZMUSICへ登録することも可能である(MEASURE7参照)。こちらの場合は

曲がたとえ演奏中であってもリアルタイムにADPCMセットを変更することが出来る。

  また、ZMUSIC常駐スイッチの'−B'を用いて

A>zmusic -bdrum_set.zpd     (拡張子の省略は可能)

のようにZMUSIC常駐時にZPDを登録することも出来る。ワーク等の指定は

不要で、ADPCMバッファの確保は自動的に行われる。


6.4.  ADPCMバッファが0の時、不足している時


  ADPCMバッファを確保しなかった場合はADPCM関連の命令を用いると

エラーになります。

  ZPDを登録しようとした時にバッファが必要分より少ない場合はエラーと

なりますが、ADPCM登録コマンドでZMUSICにADPCMを登録しよう

とした時にバッファが不足している時はいちばん古く登録したものが切り捨てられ

登録されます。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                           環境変数zmusicについて			      ┃
┃									      ┃
┃									      ┃
┃  ZMUSICでは、カレントよりファイルが見つからない場合は		      ┃
┃									      ┃
┃環境変数'zmusic'に書かれたパスにしたがってファイルを検索します。なお、      ┃
┃									      ┃
┃ZMUSICシステムではADPCMデータに限らずファイルを読み込む時は      ┃
┃									      ┃
┃必ずこのルールに従うので、ハードディスク上など多くのディレクトリに分散されて┃
┃									      ┃
┃必要ファイルが収められている時は、なるべく設定しておくべきです。	      ┃
┃									      ┃
┃設定例								      ┃
┃set zmusic=a:\drums;a:\pcmfiles;b:\rythm\snare;			      ┃
┃     ↑小文字のみ可							      ┃
┃									      ┃
┃  環境変数はHuman68kの仕様から255文字を超えて設定することはできません。     ┃
┃									      ┃
┃255文字を超えてZ-MUSICのファイルパスを記述したい場合には、環境変数zmusic0〜 ┃
┃									      ┃
┃zmusic9に分けて設定して下さい。この時環境変数zmusicは木でいう幹に、	      ┃
┃									      ┃
┃環境変数zmusic0〜zmusic9は枝の扱いになります。幹から枝への参照は、	      ┃
┃									      ┃
┃環境変数zmusic中に'/'とその後ろに補助環境変数zmusic0〜zmusic9までを表す     ┃
┃									      ┃
┃数値'0'〜'9'を書き、さらにその後ろにベースとなるパスを書くことによって      ┃
┃									      ┃
┃指定できます。							      ┃
┃									      ┃
┃例えば								      ┃
┃									      ┃
┃zmusic標準のADPCMライブラリのディレクトリ名である			      ┃
┃									      ┃
┃BASS, SNARE, TOMTOM, CYMBAL, ETHNIC, EFFECTS, ACCENT, ORCH, RAP, ADDITION   ┃
┃									      ┃
┃を検索させる場合を考えます。これらのディレクトリが、FドライブのADPCM_LIB   ┃
┃									      ┃
┃の下に存在する場合、							      ┃
┃									      ┃
┃SET zmusic=/0F:\ADPCM_LIB;					      	      ┃
┃          ↑^zmusic0を示す数値					      ┃
┃          補助環境変数の検索を指示するコマンド記号'/'。('-'で代用も可能)    ┃
┃									      ┃
┃SET zmusic0=BASS;SNARE;TOMTOM;CYMBAL;ETHNIC;EFFECTS;ACCENT;ORCH;RAP;ADDITION┃
┃									      ┃
┃と指定すればよいことになります。これで				      ┃
┃									      ┃
┃	F:\ADPCM_LIB\BASS,   F:\ADPCM_LIB\SNARE,  F:\ADPCM_LIB\TOMTOM,	      ┃
┃	F:\ADPCM_LIB\CYMBAL, F:\ADPCM_LIB\ETHNIC, F:\ADPCM_LIB\EFFECTS,	      ┃
┃	F:\ADPCM_LIB\ACCENT, F:\ADPCM_LIB\ORCH,   F:\ADPCM_LIB\RAP,	      ┃
┃	F:\ADPCM_LIB\ADDITION						      ┃
┃									      ┃
┃を検索するようになります。通常の表記との混在ももちろん可能です。	      ┃
┃									      ┃
┃設定例								      ┃
┃									      ┃
┃SET zmusic=A:\ZPD_DATA;A:\PCMFILES;F:\BOSPCM;/0F:\ADPCM_LIB;/1F:\MUSIC_DATA;┃
┃SET zmusic0=BASS;SNARE;TOMTOM;CYMBAL;ETHNIC;EFFECTS;ACCENT;ORCH;RAP;ADDITION┃
┃SET zmusic1=SC55_DATA;CM64_DATA;INTERNAL_DATA;			      ┃
┃									      ┃
┃また、補助環境変数zmusic0〜zmusic9をカテゴリに分類して検索パスを設定すれば  ┃
┃									      ┃
┃簡潔にデータ格納ディレクトリ検索パスを記述することができます。上はzmusic0を ┃
┃									      ┃
┃ADPCMライブラリ、zmusic1を曲データのライブラリとして管理した例です。	      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


6.5.PCMファイルリンカ「ZPLK.R」


  ZMUSICシステム・バージョン2.0より、AD PCMデータの加工・リンクツール

「ZPLK.R」を正式な支援ツールとして追加した。

●その機能と特長

・最大32個の複数のファイルをつなげて1つのファイルにして出力できる。
1つのファイルにつき最大65535回の反復指定が可能。反復パターンは4種類。

・単一ファイルをいくつもつなげて1つの大きなファイルにすることも可能。

・入力ファイルとして16ビットPCMファイル、ADPCMファイルを
与えることができる。混在も可能。

・リンク作業の前に、各入力ファイルのサブ・データコンバートを行なうことが
できるので16ビットPCMにADPCMファイルをリンクさせたり、また、
その逆も可能。

・出力ファイルはその出力直前に16ビットPCMデータコンバート、
ADPCMデータコンバート、逆転再生、音量変換、周波数変換、ポルタメント、
エンベロープ変更など多彩な加工処理を行なう事ができる。

・インパルス・データを与えることにより、たたみ込み演算を行なうことができる。
したがって、任意の音声データに対してホールの残響効果やボコーダー処理などの
本格的なエフェクト処理をすることができる。

●文法

ZPLK.R <[オプション1] 入力ファイル1> [[オプション2〜32] 入力ファイル2〜32] <出力ファイル名>

 入力ファイルネームは最低1個は必要。書き込みファイル名は'PCM'に設定すると

ファイルを書き出さず、音声として出力できる(ZMUSIC.XやPCMDRV.SYS組み込み時)。

ファイルネームの指定は拡張子やパスの省略をせずきちんと書くこと。ファイルが

カレントより見つからない場合は環境変数'zmusic'に書かれたパスにしたがって

ファイルを検索する。

●オプションスイッチ

-A         出力ファイルを出力する前にそのデータを16ビットPCMデータと
	   見なしてADPCMデータへ変換する。

-Bs,d,p,s  出力ファイルを出力する前にそのデータを16ビットPCMデータと
	   見なしてポルタメントを行なう。(連続的に滑らかに周波数変更を行なう。)
  s	   開始時の周波数をs[Hz]とみなす。ただしsは1〜65535。
  d	   終了時の周波数をd[Hz]とする。ただしdは1〜65535。
  p	   出力ファイルのpバイト目から周波数変換を行なう。省略時はp=0。
  s	   変換するサイズをsバイトとする。省略時はpで指定された位置から
	   後ろ全部を変換対象領域とする。pも省略した場合は出力全域に対して
	   変換処理を施す。

-Cp,s	   出力ファイルを出力する前にそのデータの任意の一部分を摘出しそれを
	   出力する。
  p	   出力ファイルのpバイト目から切り出す。省略時はp=0。
  s	   切り出すサイズをsバイトとする。省略時はpで指定された位置から
	   後ろ全部を切り出す。pも省略した場合はエラーとなる。

-Fs,l,m	   出力ファイルを出力する前にそのデータを16ビットPCMデータと
	   見なしてエンベロープの形状を変化させる。
  s	   出力ファイルのsバイト目からエンベロープ形状を変更する。
	   省略時はs=0。
  l	   エンベロープ形状初期音量(m=0時)/最終音量(m=1時)を0〜127の128段階で
	   設定する。省略時はl=0。
  m	   エンベロープの変更パターンを設定する。省略時はm=1
	   0 フェード・イン・タイプ
	   1 フェード・アウト・タイプ

-Ifilename インバルスデータのファイルネームを与えると出力ファイル出力する前に
	  そのデータとのたたみ込み演算を行なう。ただし、与えられたファイルネームの
	   拡張子を'.P16'とした場合はそのインパルスデータを16ビットPCMデータ、
	   '.PCM'とした場合はADPCMデータとしてみなす。

-P	   出力ファイルを出力する前にそのデータをADPCMデータと見なして
	   16ビットPCMデータへ変換する。

-R	   出力ファイルを出力する前にそのデータを16ビットPCMデータと
	   見なして逆転させる。

-Vn	   出力ファイルを出力する前にそのデータの音量をパーセント単位で
	   指定する。nの範囲は0〜300。スイッチ無指定や値省略時は100とする。

-Ti,o,p,s  出力ファイルを出力する前にそのデータを16ビットPCMデータと
	   見なして周波数の変更を行なう。
  i	   元の周波数をs[Hz]とみなす。ただしsは1〜65535。
  o	   変換後の周波数をd[Hz]とする。ただしdは1〜65535。
  p	   出力ファイルのpバイト目から周波数変換を行なう。省略時はp=0。
  s	   変換するサイズをsバイトとする。省略時はpで指定された位置から
	   後ろ全部を変換対象領域とする。pも省略した場合は出力全域に対して
	   変換処理を施す。

-Xl,r,t	   リンク制御

  l	   ループタイプの設定。省略時 l=0。
	   0 そのまま。
	   1 正順、逆順の順にループさせる。
	   2 逆順、正順の順にループさせる。
	   3 入力ファイルの逆順をループさせる。

  r	   反復回数の設定。省略時 r=1。範囲1〜65535。

  t	   リンク作業の前に入力ファイルに対して加工を行なう。省略時 t=0。
	   0 何も行なわない。
	   1 入力ファイルを16ビットPCMデータと見なしてADPCMデータへ
	     変換する。
	   2 入力ファイルをADPCMデータと見なして16ビットPCMデータへ
	     変換する。

☆注意☆	複数の変換を指定した場合は以下の手順で各変換を行なう。

		┏━━━━━━━━━━━━━━━━━━━━━━┓
		┃            音量変更周波数変換              ┃
		┃                    ↓		      ┃
		┃               ポルタメント		      ┃
		┃                    ↓		      ┃
		┃                 切り出し		      ┃
		┃                    ↓		      ┃
		┃                   逆転		      ┃
		┃                    ↓		      ┃
		┃      フェード・イン/フェード・アウト      ┃
		┃                    ↓		      ┃
		┃              インパルス演算		      ┃
		┃                    ↓		      ┃
		┃      16ビットPCM/ADPCM変換      ┃
		┗━━━━━━━━━━━━━━━━━━━━━━┛

●パラメータの特殊設定

  周波数変換(-Tスイッチ)、ポルタメント変換(-Bスイッチ)において、2つの

周波数パラメータの設定をするかわりにZMUSICシステムで御馴染みの

半音ステップの変換パラメータで設定することもできる。

  例えばある音を半音下げたい時には

	-Tp-1

また、半音上げたい時は

	-Tp+1

とします。また、ポルタメントの時も同様で

	-Bp-10
	-Bp+6

といった記述ができる。サブスイッチ'p'の値の範囲は-144〜+144(ただし0は除く)。

●使用例

A>zplk a.p16 -x0,10 b.p16 -a c.pcm

	 a.p16 というファイルの後ろに b.p16 を10回くっつけて、
	ADPCMへコンバートし c.pcm というファイル名でセーブする。

A>zplk -x0,5 a.p16 -x,,2 b.pcm -v80 c.p16

	 a.p16 というファイルを5回繰り返し、これに b.pcm を16ビットPCMへ
	変換したものをくっつけて、それを音量を80%に設定し c.p16 という
	ファイル名でセーブする。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃  国際基準イ=a1=440Hzに基づく12平均率音階周波数表		      ┃
┃				(試験に出るX1より転載)		      ┃
┃								(単位はHz)    ┃
┃	O0	O1	O2	O3	O4	O5	O6	O7	O8    ┃
┃C	16.352	32.703	65.406	130.81	261.63	523.25	1046.5	2093.0	4186.0┃
┃C#	17.324	34.648	69.296	138.59	277.18	554.37	1108.7	2217.5	4434.9┃
┃D	18.354	36.708	73.416	146.83	293.66	587.33	1174.7	2349.3	4698.6┃
┃D#	19.445	38.891	77.782	155.56	311.13	622.25	1244.5	2489.0	4978.0┃
┃E	20.602	41.203	82.407	164.81	329.63	659.26	1318.5	2637.0	5274.0┃
┃F	21.827	43.654	87.307	174.61	349.23	698.46	1396.9	2793.8	5587.7┃
┃F#	23.125	46.249	92.499	185.00	369.99	739.99	1480.0	2960.0	5919.9┃
┃G	24.500	48.999	97.999	196.00	392.00	783.99	1568.0	3136.0	6271.9┃
┃G#	25.957	51.913	103.83	207.65	415.30	830.61	1661.2	3322.4	6644.9┃
┃A	27.500	55.000	110.00	220.00	440.00	880.00	1760.0	3520.0	7040.0┃
┃A#	29.135	58.270	116.54	233.08	466.16	932.33	1864.7	3729.3	7458.6┃
┃B	30.868	61.735	123.47	246.96	493.88	987.77	1975.5	3951.1	7902.1┃
┃									      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
{ -- ZM7.MAN ------------------------------------------------
	    MEASURE7
	    プレイヤーZP.R


  ここではZMUSIC.X支援ツールのサンプルとして作成した

プレイヤー「ZP.R」について解説します。









7.1.  ZP.Rについて


  ZMUSIC.Xは

A>copy  ファイルネーム  opm

とすることでコマンドラインから演奏データの演奏を行える。また、

A>copy con opm

としたあと、ZMSコマンドを入力することによって演奏の停止や継続、

再演奏などの制御を行うことが出来る。これらの演奏制御をより快適に、

手軽に行えるようにするために開発されたのがZP.Rである。

  ZP.Rは演奏ツールとしての機能の他に「ジュークボックス機能」や

「トータルステップカウントの計算」「キーボードによるリアルタイム演奏制御機能

(デバッグツール)」などの機能が備わっている。


7.2.  コマンドスイッチについて


●演奏制御
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−P 演奏データ・ファイルネーム,セットアップファイル1,…,セットアップファイル4


  演奏データをディスクから読み込んで演奏する。演奏データのファイル名の後ろに

','で区切って最高4つまでのセットアップファイルを演奏前に読み込み、実行が可能。

セットアップファイルとは、例えばADPCMデータのコンフィギュレーション・ファイル、

ADPCMのブロックデータ、MIDIダンプデータ(MDD)などのこと。(セットアップ

ファイルのMIDIダンプデータは拡張子'.MDD'の時のみ有効)

  セットアップファイルの拡張子は省略出来ないが演奏データの方は拡張子を省略でき、

その場合は'.ZMD'→'.ZMS'→'.OPM'の順で自動添付してファイルを検索する(見つから

なかった場合はエラー)。

例
  A>zp -p music.zms, drum.cnf, u220_seup.mdd
  A>zp -p etude

  スイッチ'−P'は省略することもでき、上の例は

  A>zp music.zms, drum.cnf, u220_seup.mdd
  A>zp etude

とすることも可能。

  さらに、演奏データを省略してZPDやMDD、ADPCMコンフィギュレーション

ファイルといったセットアップファイルのみの実行も可能である(拡張子の省略は

できない)。ZPDとADPCMコンフィギュレーション・ファイルは曲が演奏中で

あっても実行可能なので、演奏中の曲のADPCMのセットをリアルタイムに

変更することができる。

例
  A>zp list.cnf       (ADPCMコンフィギュレーション・ファイルlist.cnfを
		      実行する)
  A>zp drum_set.zpd   (ZPDファイルdrum_set.zpdを登録する)
  A>zp M1preset.mdd   (MDDファイルM1preset.mddを楽器へ転送する)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Pn1,n2,n3,…ni


  演奏を開始する。コマンドスイッチの後ろにトラック番号(1≦ni≦80)を書くと

そのトラックのみ演奏を開始する。トラック番号は横につなげていくつでも

書くことが出来る。また、トラック番号を書かずにコマンドスイッチのみを

指定した場合は演奏可能な全てのトラックの演奏を開始する。

例
  A>zp -p            (全トラック演奏開始) 
  A>zp -s1, 2, 10    (トラック1, 2, 10の演奏を開始する)

  (MEASURE3 m_play(), MEASURE4 (P)コマンド参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Sn1,n2,n3,…ni
−Cn1,n2,n3,…ni


  それぞれ演奏の停止、再開を行う。

コマンドスイッチの後ろにトラック番号(1≦ni≦80)を書くとそのトラックに対して

機能する。トラック番号は横につなげていくつでも書くことができる。

  また、トラック番号を書かずにコマンドスイッチのみを指定した場合は演奏中の

全トラックに対して機能する。

例
  A>zp -s            (全トラック演奏停止)
  A>zp -c            (全トラック演奏再開) 
  A>zp -s1, 2, 10    (トラック1, 2, 10の演奏を停止する)
  A>zp -c1, 2, 10    (トラック1, 2, 10の演奏を再開する)

  (MEASURE3 m_stop(), m_cont(), MEASURE4 (S)コマンド, (C)コマンド参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●チャンネル・マスク
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−En1,n2,n3,…,ni


  指定チャンネルのみを演奏しそれ以外のチャンネルの演奏をマスクする。

チャンネル番号はPCM8モードでない時は1≦ni≦25、PCM8独立チャンネルモード

では1≦ni≦32となる。チャンネル番号をすべて省略した場合は、マスクを総て解除

(全チャンネル演奏可能に)する。実行はリアルタイムに行うことができ、

演奏中の曲の任意のチャンネルをマスクしたり解除したりすることが可能。

例
  A>zp -e1, 2, 3      (チャンネル1〜3以外をマスクする)
  A>zp -e             (全チャンネルのマスクを解除する)

  チャンネル表現にFM1〜8, ADPCM1〜8, MIDI1〜16といった表記もできる。

例
  A>zp -efm1, adpcm2, midi3

  (MEASURE3 m_solo(), MEASURE4 (E)コマンド参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Mn1,n2,n3,…,ni


  指定チャンネルの演奏をマスクする。それ以外のチャンネルは通常演奏を行う。

チャンネル番号はPCM8モードでない時は1≦ni≦25、PCM8独立チャンネルモード

では1≦ni≦32となる。チャンネル番号をすべて省略した場合は、マスクを総て解除

(全チャンネル演奏可能に)する。実行はリアルタイムに行うことができ、

演奏中の曲の任意のチャンネルをマスクしたり解除したりすることが可能。

例
  A>zp -m1, 2, 3      (チャンネル1〜3をマスクする)
  A>zp -m             (全チャンネルのマスクを解除する)

  チャンネル表現にFM1〜8, ADPCM1〜8, MIDI1〜16といった表記もできる。

例
  A>zp -efm1, adpcm2, midi3

  (MEASURE3 m_mute()参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●出力レベルの変更
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Fn


  フェード・イン/アウトを行う。−85≦n≦−1のときフェード・イン、

1≦n≦85のときフェード・アウトの指定となり、数値の絶対値が大きいほど音量の

増減スピードは速くなる。n=0はフェード・イン/アウトの停止。

  パラメータを省略した場合はデフォルト値のスピードでフェード・アウトを行う。

例
  A>zp -f20    (フェード・アウトをフェード・アウト・スピード20で行う)
  A>zp -f-16   (フェード・インをフェード・イン・スピード16で行う)
  A>zp -f0     (フェード・イン/アウトを中断する)
  A>zp -f      (デフォルトスピードでフェード・アウトを行う)

  (MEASURE3 m_fadeout(), MEASURE4 (F)コマンド参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Olv,n1,n2,…,ni


  指定チャンネルの出力割合を設定する。

  lvは出力音量の割合で、設定範囲は0≦lv≦128。128が最大音量かつ基本状態。

lvの値が小さいほど音量も小さくなる。lvによって決定づけられる実際の音量は各楽器や

音源によって違うので注意(FM音源ではlv=80付近でほとんど無音状態になる)。

  niは出力割合lvの設定を行うチャンネル番号。チャンネル番号は

PCM8モードでない時は1≦ni≦25、PCM8独立チャンネルモードでは1≦ni≦32

となる。lvのみを設定し、チャンネル番号をすべて省略した場合は、全チャンネル

が出力レベルlvに設定される。

  全パラメータを省略した場合は、全チャンネルの出力割合を基本状態(lv=128)へ戻す。

  実行はリアルタイムに行うことができ、演奏中の曲の任意のチャンネルの出力割合を

変更することが可能。

例
  A>zp -o110, 1, 2, 3  (チャンネル1, 2, 3の出力割合を110/128に設定する)
  A>zp -o96            (全チャンネルの出力割合を96/128に設定する)
  A>zp -o              (全チャンネルの出力割合を通常状態(128/128)に戻す)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●初期化
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−I


  ZMUSICの演奏ワークやFM音源やMIDI楽器等を初期化する。曲が演奏中

であれば演奏を停止してから処理を行う。

例
  A>zp -i

(MEASURE3 m_init(), MEASURE4 (I)コマンド参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●トータルステップタイムの計算
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Q
−Q演奏データ・ファイルネーム


  '−Q'で、演奏中やその時点でZMUSICのトラックバッファに格納されている

演奏データのステップタイムの合計値を計算し表示する。ファイル名を後ろに付ければ

それを読み込みバッファに格納してから合計値を計算する。

  [do]〜[loop]以外で(例えば[coda]〜[tocoda]によって)無限ループを構成している

曲に対してこれを実行すると無限に計算を繰り返してしまう(NMIを押すしかない)。

  なお、

  トラック番号:ループ外の総カウント数  ループ内の総カウント数

というフォーマットで出力される(16進数)。

例
  A>zp -q
  A>zp -qmusic.zmd

 (MEASURE3 m_total(), MEASURE4 (Q)コマンド参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●MIDIダンプデータ(MDD)制御
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−A


  MIDI楽器からのデータを受信するためにZMUSICを待機状態にする。

 (MEASURE3 m_rec(), MEASURE4 (R)コマンド, MEASURE9参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Aファイルネーム


  '−A'として取り込んだ楽器のデータをファイルにセーブする。拡張子省略時は

'.MDD'が自動的に添付される。ZMUSICではこのファイルをMIDIダンプデータ

(MDD)と呼ぶ。

 (MEASURE3 m_save(), MEASURE9参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Xファイルネーム


  '−A'スイッチで作成したMIDIダンプデータを楽器へ転送する。拡張子を省略すると

'.MDD'が自動添付される。

例
  A>zp -xu220.mdd

 (MEASURE3 m_trans(), MEASURE4 .MIDI_DUMP命令, MEASURE9参照)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●ジュークボックス機能
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Jインデックスファイル,セットアップファイル1,…,セットアップファイル4


  '−J'を設定してその後ろにインデックスファイル(後述)の名前を書くとこれを読み込み

このファイルに書かれた演奏データを読み込み、これらを次々に演奏する(ジューク

ボックス機能)。インデックスファイルの拡張子を省略した場合は、拡張子'.JUK'が

自動添付される。

  演奏開始指定のスイッチ'−P'と同様に4つまでセットアップファイルを指定すれば、

ジュークボックス開始前に、これらをまず実行することが出来る。

例
  A>zp -jINDEX,MT32SOUND.MDD

  また、ジュークボックス機能実行中には以下のキー操作が可能となる。

	[SHIFT]+[OPT.1]	次の曲へ
	[SHIFT]+[OPT.2]	フェードアウトして次の曲へ
	[SHIFT]+[CTRL]		演奏の一時停止/再開
	[SHIFT]+[XF4]		再演奏
	[SHIFT]+[XF5]		フェードアウトして再演奏
	[CTRL]+[OPT.1]		前の曲へ
	[CTRL]+[OPT.2]		フェードアウトして前の曲へ


●インデックスファイル

  インデックスファイルは

      繰り返し回数(1〜255),演奏データファイル名

の書式をとる。ZP.Rのジュークボックス機能では最大64曲までの演奏データの

登録ができる。

  演奏データはZMDのみ有効。演奏データファイル名の拡張子は省略可能で、

省略時は'.ZMD'が自動添付される。

  繰り返し回数は省略可能で省略時は繰り返し回数=1が自動設定される。

  インデックスファイルに書かれた最後の曲の演奏を完了すると最初の曲へ戻る。

例
  2,ETUDE
  3,PRELUDE
  FUGE
  ('ETUDE.ZMD'を2ループ演奏し、次に'PRELUDE.ZMD'を3ループ演奏し、最後に
  'FUGE.ZMD'を1ループ演奏して、これが終了すると初めの'ETUDE.ZMD'へ戻る)


  なお、ジュークボックス演奏させるZMDには以下の条件がある。

1.無限ループは[do]〜[loop]命令を使用している場合のみ有効。

2.ジュークボックスで演奏させる曲データには、ZPD指定('.adpcm_block_data')

    以外のADPCMデータ登録命令が存在してはならない(例えば'.adpcm_list'命令

    や'.Onk ファイルネーム,Pp,Vv,Mm,d,Cc,s,R,Ff,l'命令)。


●キー定義の変更

  キーと機能の対応は上記のようにデフォルトでは定められているが、これを環境変数

'zp_jukectrl'にキービットマップ値を列記することによってユーザーの好みに変更可能

である。

set zp_jukectrl=<次の曲へ#1, 次の曲へ#2>
		<フェードアウト&次の曲へ#1,フェードアウト&次の曲へ#2>
		<停止/再開#1, 停止/再開#2>
		<再生#1, 再生#2>
		<フェードアウト&再生#1,フェードアウト&再生#2>
		<前の曲へ#1, 前の曲へ#2>
		<フェードアウト&前の曲へ#1,フェードアウト&前の曲へ#2>

キー例

	[SHIFT]=$E0 [CTRL]=$E1 [OPT.1]=$E2 [OPT.1]=$E3
	[XF1]=$A5 [XF2]=$A6 [XF3]=$A7 [XF4]=$B0 [XF5]=$B1

設定例

set zp_keyctrl=$e2,$b1  $e3,$b1  $e3,$b1  $e3,$e0  $e2,$e0  $e3,$a7  $e0,$a6
		  ↑
	「次の曲へ」は[OPT.1]+[XF5]を意味する


●注意

・インデックスファイルに指定されている曲やその曲が使用するデータは

ジュークボックス機能開始前に読み込んでしまうため、多くのメモリを消費する。

しかし、ジュークボックス機能では、演奏データやその他の必要データを

先読みしてしまうため、ZMUSIC.Xが確保した各バッファを一切使用しない。

よってZMUSIC.X側の各バッファの大きさはいくらでも構わない。

A>zmusic -t0 -p0 -w0   (トラックバッファ、ADPCMバッファ、ワークエリア=0)

として常駐しても問題なくジュークボックス機能は実行できる。

・処理の都合上、後述のデバッグ・ツールとの併用はできない(一度後述の

'-R'スイッチにて終了する必要がある)。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●デバッグ・ツール機能
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−D


  ZP.Rが常駐し以降、以下のキー操作が可能となる(デバッグ・ツール)。

	[SHIFT]+[OPT.1]	一時停止
	[SHIFT]+[OPT.2]	一時停止解除
	[SHIFT]+[XF5]		早送り(押している間有効)
	[SHIFT]+[XF4]		REPLAY
	[SHIFT]+[XF3]		低速演奏(押している間有効)
	[SHIFT]+[XF1]		フェードアウト
	[SHIFT]+[XF2]		フェードイン

例
  A>zp -d


●キー定義の変更

  キーと機能の対応は上記のようにデフォルトでは定められているが、これを環境変数

'zp_keyctrl'にキービットマップ値を列記することによってユーザーの好みに変更可能

である。

set zp_keyctrl=<再生#1, 再生#2> <停止#1, 停止#2> <再開#1, 再開#2>
		<早送り#1, 早送り#2> <低速#1, 低速#2>
		<フェードアウト#1, フェードアウト#2>
		<フェードイン#1, フェードイン#2>

キー例

	[SHIFT]=$E0 [CTRL]=$E1 [OPT.1]=$E2 [OPT.1]=$E3
	[XF1]=$A5 [XF2]=$A6 [XF3]=$A7 [XF4]=$B0 [XF5]=$B1

設定例

set zp_keyctrl=$e2,$b1  $e3,$b1  $e3,$b1  $e3,$e0  $e2,$e0  $e3,$a7
		  ↑
	「再生」は[OPT.1]+[XF5]を意味する


●注意

  処理の都合上、ジュークボックスとの併用はできない(一度後述の'-R'スイッチにて

終了する必要がある)。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●常駐解除
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−R


  '−J','−D'はZP.Rがシステムに常駐するので、機能を停止するためには

常駐解除を行わなければならない。'−R'を設定するとZP.Rがシステムに常駐

していた場合常駐解除の処理を行う。ただしZP.Rが常駐していないのにこの

スイッチを設定するとエラーとなる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●同期演奏機能
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−W 演奏データ・ファイルネーム,セットアップファイル1,…,セットアップファイル4


 −Pと同じく演奏開始の機能で設定パラメメータ−Pと同様。セットアップファイルの

実行後、演奏は開始せず、MIDIデータの$FA(スタートメッセージ)を受信するまで

待機状態になる。$FAを受信すると即座に演奏を開始する。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃			複数のX68による同期演奏			      ┃
┃									      ┃
┃0.ZMUSICを/Eオプションを設定して常駐する			      ┃
┃									      ┃
┃1.X68−AのMIDI OUTからX68−BのMIDI INへつなぐ      ┃
┃									      ┃
┃2.X68−BのMIDI OUTを楽器1へつなぐ			      ┃
┃									      ┃
┃3.X68−BのMIDI THRUを楽器2へつなぐ			      ┃
┃									      ┃
┃4.X68−Bを							      ┃
┃									      ┃
┃	A>ZP /W filename						      ┃
┃									      ┃
┃  として演奏待機状態にする						      ┃
┃									      ┃
┃5.X68−Aを							      ┃
┃									      ┃
┃	A>ZP filename							      ┃
┃									      ┃
┃    で演奏開始する。							      ┃
┃									      ┃
┃ ※2台以上の場合はX68−xのMIDI OUTをX68−(x+1)のMIDI INへつないで    ┃
┃									      ┃
┃   いくか、X68−xのMIDI THRUをX68−(x+1)のMIDI INへつないでく2通りが ┃
┃									      ┃
┃   考えられるが実用的には4台までが限界と思われる。			      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
{ -- ZM8.MAN ------------------------------------------------
	    MEASURE8
       ADPCMツールZVT.X


  ここでは、自分でサンプリングデータを作成したり

加工したりするツール「ZVT.X」の使用法について

解説します。









8.1.  ZVT.Xについて


  ZVT.XはX68kのサンプリングデータ(ADPCMデータ)を扱うための

ツールである。動作は外部コマンドとして機能する「コマンドモード」と視覚的に

操作が行える「ビジュアルモード」とに分かれる。ここでは各モード別々に

説明する。


8.2.  ビジュアルモード


●基本操作

  基本的に画面下に表示されているメニューにカーソルを合わせリターンキーもしくは

スペースキーを押すことでそれぞれの機能が実行される。メニューには、選択されると

直ぐに機能するものと若干のパラメータ等を聞いてくるものに分かれる。

このパラメータ等の入力時に[ESC]キーを押すことによってそのモードから

抜けることが出来る。

  なお、メニューに表されている機能以外にも機能がありこれらはキーボードによる

キー入力により実行される(もちろんメニューに表示されているコマンドも

キー入力によって実行可)。メニューに表示されている機能は実は、ほんの一部のため、

「ZVT.X」を使いこなすためにはキー・コマンドを覚える必要がある。


●カーソル操作

  カーソル移動にはカーソルキーを使う。

  ADPCMデータを読み込んだり、サンプリングを実行すると、「START POINT」と

「END POINT」の行にデータ列、さらに枠内に波形と青と赤の縦線が表示される。

「START POINT」「END POINT」に表示されている数列は、それぞれ枠中の青と赤の縦線が

指し示している付近のADPCMデータやPCMデータである。この青と赤の縦線を

波形カーソルとよび、波形に対してなんらかの加工処理を行う場合は、この2つの

波形カーソルに挟まれた範囲に対して行われる。波形カーソルは、(通常の)カーソルを

「START POINT」や「END POINT」に合わせ、テンキーを操作することによって移動させる

ことができる(図1)。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃								      ┃
┃               7 8 9						      ┃
┃               4 5 6						      ┃
┃               1 2 3						      ┃
┃               0 , .						      ┃
┃								      ┃
┃     [7] 左へ32ステップ移動             [9] 右へ32ステップ高速移動        ┃
┃     [4] 左へ1ステップ移動             [6] 右へ1ステップ移動	      ┃
┃     [1] 左へ波長の1/16ステップ移動     [3] 右へ波長の1/16ステップ移動    ┃
┃     [0] 波形の先頭へ瞬間移動				 	      ┃
┃     [,] 波形の真ん中へ瞬間移動				      ┃
┃     [.] 波形の最後尾へ瞬間移動				      ┃
┃								      ┃
┃                       図1 波形カーソルのキー操作		      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


●キーコマンド(アルファベット順)

()内の文字はコマンドメニュー名に対応する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
A
B

  アクセス対象バンクをセレクトする。

  ZVT.Xには加工したりサンプリングしたりするデータエリアが2つあり、

コマンド機能の対象となるデータをそれぞれバンクA、バンクBと呼んでいる。

本コマンドでこの操作対象バンクを選択することができる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
C

  スタートポイントとエンドポイント間以外の波形を切り捨てる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
D      (DISK)

  ディスクモードへ入る。

  1. LOAD
		  波形データのロードを行う。

		  ファイルネームを聞いてくるのでパスや拡張子を含めて

		  91文字以内で入力する。ファイル名を省略したり、

		  ワイルドカードを使用するとファイル選択モード(囲み参照)に

		  入る。


  2. SAVE
		  波形データのセーブを行う。

		  ファイルネームを聞いてくるのでパスや拡張子を含めて

		  91文字以内で入力する。ファイル名を省略したり、

		  ワイルドカードを使用するとファイル選択モード(囲み参照)に

		  入る。


  3. SAVE BY 4PHASES

		  原波形を含む4段階の波形データを自動生成しセーブする。

		  (ただし自動生成されるデータはADPCMデータ形式固定)

		  このモードを選択すると次に

			1. VOLUME  2. PITCH

		  が現れる。1を選べば4段階のボリュームで、2を選べば

		  4段階の音程でセーブされることになる。

		  これを選択後さらに

			1. MINUS  2. PLUS

		  のメニューが現れる。これはどの方向に4段階のデータを

		  生成するかを決めるものである。

		  ボリュームを選んだ場合にマイナス方向を選択すると

		  原波形のボリュームの

			100%, 88%, 76%, 60%

		  のデータが自動生成されセーブされる。プラス方向では

		  原波形のボリュームの

			100%, 114%, 126%, 140%

		  のデータがセーブされる。

		  音程を選んだ時には各方向に半音単位の変化量でセーブされる。

		  つまり原波形が今オクターブ4のCだったとすると

		  マイナス方向では        O4のC, O3のB, O3のA#, O3のA
		  プラス方向では          O4のC, O4のC#, O4のD, O4のD#

		  がセーブされることになる。

		  最後にファイルネームを聞いてくるが拡張子は無視され

		  自動生成される。ファイルの拡張子は強制的に

		  '.4' '.3' '.2' '.1'の4つになる(原波形が'.4')。

		  ファイルネームを省略したり、ワイルドカートを使用すると

		  ファイルセレクトモードへと移行する。


  4. TEST PLAY

		  ファイルを音声データと見なして再生する。

		  ファイルネームを聞いてくるのでパスや拡張子を含めて

		  91文字以内で入力する。ファイル名を省略したり、

		  ワイルドカードを使用するとファイル選択モード(囲み参照)に

		  入る。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                             ファイル選択モード			      ┃
┃									      ┃
┃									      ┃
┃  ディスク関連のコマンドでファイルネームを省略したり、ワイルドカードを      ┃
┃									      ┃
┃設定するとファイル選択モードになります。ここではカーソルキーによるファイルの┃
┃									      ┃
┃選択やディレクトリ間の移動がスムーズに行えるようになっています。	      ┃
┃									      ┃
┃  使用キーは以下の通りです。						      ┃
┃									      ┃
┃カーソルキー    カーソルの移動					      ┃
┃RETURN/ENTER    ファイルやディレクトリの選択				      ┃
┃ESC             ファイル選択モードを終了する(ファイル選択の拒否)	      ┃
┃TAB             カーソルを左最上部へ瞬間移動。またディレクトリの移動も      ┃
┃		これで可能。						      ┃
┃                スピーディーに親ディレクトリに移動可能。		      ┃
┃?              ファイルネームの入力。ワイルドカードを指定すると	      ┃
┃		それに対応したファイルのみが画面に現れる。		      ┃
┃SPACE           再生(PCM/ADPCMモードの影響を受ける点に注意)		      ┃
┃数字キー(0〜4)  SPACEキーでのPCMデータ再生における再生周波数の切り換え      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃			ファイルの拡張子とデータ形式			      ┃
┃									      ┃
┃拡張子'.PCM'のファイルはZVT.XではADPCMファイルと自動的に見なして  ┃
┃									      ┃
┃ロード/セーブします。また拡張子'.P16'のファイルは16ビットPCMファイルと┃
┃									      ┃
┃見なしてロード/セーブします。それ以外の拡張子を持ったファイルをアクセスする┃
┃									      ┃
┃場合は、その時点でのデータモードがADPCMならADPCMとして、	      ┃
┃									      ┃
┃データモードが16ビットPCMデータなら16ビットPCMデータとしてアクセス┃
┃									      ┃
┃します。なるべく'.PCM'、'.P16'のどちらかを用いるようにしましょう。	      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
E

  PCMデータ及びADPCMデータにエフェクト(加工)をかける。

      1.↑/↓  2.←/→  3.ADD 0 TO TAIL  4.REVERSE  5.CHORUS  6.DELAY 

      7.SFX  8.SMOOTHING  9.ENVELOPE

  の9種類のエフェクトより1つを選択する。

1.↑/↓
		  PCMデータをグラフのY軸方向にシフトするもの(マイナス値で下へ)
		  機能選択後、どのくらいシフトするか(オフセット値)を聞いてくる

2.←/→
		  PCMデータをグラフのX軸方向にシフトするもの(マイナス値で左へ)
		  機能選択後、どのくらいシフトするか(オフセット値)を聞いてくる

3.ADD 0 TO TAIL
		  データの最後尾にn個の0を加える
		  機能選択後、オフセット値を聞いてくる

4.REVERSE
		  逆転

5.CHORUS
		  音が透き通った感じになる

6.DELAY
		  エコーがかかったような音になる

7.SFX
		  金属音に変化する

8.SMOOTHING
		  こもったような音に変化する

9.ENVELOPE
		  エンベロープを変形する(フェード・イン/アウト)
		  機能選択後、イン/アウト・レベル(0〜127)とエンベロープの
		  変更方向を聞いてくる
		  1.< … フェード・イン
		  2.> … フェード・アウト
		  設定したパラメータとその効用は図2参照

なお、機能は青赤の2つの波形カーソルに挟まれた区間に対して働く事に注意。


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃			  エンベロープ変更方向 '>'			      ┃
┃									      ┃
┃		     128_______					      ┃
┃		     		     |\				      ┃
┃				     |	\				      ┃
┃				     |	  \				      ┃
┃		  		     |	    \				      ┃
┃		                     |       ↑ level			      ┃
┃		                     |       │(0〜127)			      ┃
┃		       0 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄				      ┃
┃				    ↑       ↑				      ┃
┃				  青カーソル   赤カーソル			      ┃
┃									      ┃
┃									      ┃
┃									      ┃
┃			  エンベロープ変更方向 '<'			      ┃
┃									      ┃
┃		      128	 _______				      ┃
┃		               /|					      ┃
┃			     /  |					      ┃
┃			   /    |					      ┃
┃			 /      |					      ┃
┃		  level ↑       |					      ┃
┃		(0〜127)│       |					      ┃
┃		        0 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄				      ┃
┃			↑       ↑					      ┃
┃		      青カーソル   赤カーソル					      ┃
┃									      ┃
┃		図2  エンベロープ変更方向とイン/アウト・レベル	      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                              オフセット値について			      ┃
┃									      ┃
┃  「←/→」と「ADD 0 TO TAIL」では、機能メニューを選択後、オフセット値を    ┃
┃									      ┃
┃聞いてきますがこれはデータモードによって効用が異なります。		      ┃
┃									      ┃
┃  例えばPCMモードの時1000と入力するとオフセットはPCMデータ1000個分    ┃
┃									      ┃
┃(つまり2000バイト)ということになります。またADPCMモードで1000と	      ┃
┃									      ┃
┃入力した場合にはADPCMデータ1000個分(つまり1000バイト)ということに    ┃
┃									      ┃
┃なります。								      ┃
┃									      ┃
┃オフセット値の例							      ┃
┃									      ┃
┃                            データモードがPCMの時			      ┃
┃                              3.9kHz 1秒=3900			      ┃
┃                              5.2kHz 1秒=5200			      ┃
┃                              7.8kHz 1秒=7800			      ┃
┃                             10.4kHz 1秒=10400			      ┃
┃                             15.6kHz 1秒=15600			      ┃
┃									      ┃
┃                          データモードがADPCMの時		      ┃
┃                              3.9kHz 1秒=1950			      ┃
┃                              5.2kHz 1秒=2600			      ┃
┃                              7.8kHz 1秒=3900			      ┃
┃                             10.4kHz 1秒=5200			      ┃
┃                             15.6kHz 1秒=7800			      ┃
┃									      ┃
┃  「↑/↓」のオフセット値はPCMデータへ直接加算される数値を意味して     ┃
┃									      ┃
┃いるのでデータモードには全く無関係です。				      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
F      (SAMPLING RATE)

  サンプリング時や再生時の周波数を設定をする。

サンプリング周波数は一般に、周波数が高ければ高いほど高音質となる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
I

  波形の頭と後尾を見付ける。単純なアルゴリズムによる探査のため複雑な

波形に対しては希望の結果を得られないことがある。また、データモードによって

動作のしかたが微妙に違うため、データモードを変えて実行すると違った結果を

得ることができる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
J

 音程の変更を1Hz単位で行なえる。コマンド入力後、変更前の周波数と

変更後の周波数を聞いてくる。周波数パラメータ設定範囲は1〜65535。変換前と

変換後の周波数は厳密に入力する必要はなく、両周波数の整数比を入力する

だけでもよい。つまり、「1オクターブ上げる(周波数を2倍にする)」場合、

  変更前周波数=1Hz	変更後周波数=2Hz

でも

  変更前周波数=100Hz	変更後周波数=200Hz

でも得られる結果は同じである。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃	  国際基準イ=a1=440Hzに基づく12平均率音階周波数表	      ┃
┃				(試験に出るX1より転載)		      ┃
┃								(単位はHz)    ┃
┃	O0	O1	O2	O3	O4	O5	O6	O7	O8    ┃
┃C	16.352	32.703	65.406	130.81	261.63	523.25	1046.5	2093.0	4186.0┃
┃C#	17.324	34.648	69.296	138.59	277.18	554.37	1108.7	2217.5	4434.9┃
┃D	18.354	36.708	73.416	146.83	293.66	587.33	1174.7	2349.3	4698.6┃
┃D#	19.445	38.891	77.782	155.56	311.13	622.25	1244.5	2489.0	4978.0┃
┃E	20.602	41.203	82.407	164.81	329.63	659.26	1318.5	2637.0	5274.0┃
┃F	21.827	43.654	87.307	174.61	349.23	698.46	1396.9	2793.8	5587.7┃
┃F#	23.125	46.249	92.499	185.00	369.99	739.99	1480.0	2960.0	5919.9┃
┃G	24.500	48.999	97.999	196.00	392.00	783.99	1568.0	3136.0	6271.9┃
┃G#	25.957	51.913	103.83	207.65	415.30	830.61	1661.2	3322.4	6644.9┃
┃A	27.500	55.000	110.00	220.00	440.00	880.00	1760.0	3520.0	7040.0┃
┃A#	29.135	58.270	116.54	233.08	466.16	932.33	1864.7	3729.3	7458.6┃
┃B	30.868	61.735	123.47	246.96	493.88	987.77	1975.5	3951.1	7902.1┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
K      (PITCH)

  半音単位でピッチをシフトする。パラメータは−12から+12。

±1オクターブの音程変換が可能。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
M      (MONITOR)

  モニター機能のオン/オフ。「AUDIO IN」端子からの入力をX68kの

A/D,D/Aコンバータを通してヘッドホンなどで聴く事が出来る。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
N

  ポルタメント(音程を滑らかに変化させる)を1Hz単位で行なう。コマンド入力後、

その音の基本周波数と変化希望周波数を聞いてくる。周波数パラメータ設定範囲は

1〜65535。2つの周波数パラメータは厳密に入力する必要はなく、両周波数の整数比を

入力するだけでもよい。つまり、「1オクターブ上へ滑らかに変化させる(周波数を

滑らかに2倍にする)」場合、

  変更前周波数=1Hz	変更後周波数=2Hz

でも

  変更前周波数=100Hz	変更後周波数=200Hz

でも得られる結果は同じである。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
O      (PANPOT)

  再生やモニター機能のパンポットを設定する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
P      (PLAY)

  バンクセレクトされているバンクのデータを再生する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Q      (EXIT)

  [ESC]+[Q]でZVT.Xを終了する。誤操作を避けるためこのコマンドのみ

2キーコマンドになっている。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
R      (RECORD)

  録音を行う。オートサンプリング機能のスイッチ(TRIGGER)がオン、さらに

モニター機能(MONITOR)オンの時にはオートサンプリングを行うがこれら

のスイッチが片方でもオフの時には通常のサンプリングを行う。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                           オートサンプリングとは			      ┃
┃									      ┃
┃オートサンプリングとは音が入力された事を自動的に感知して録音を開始する機能の┃
┃									      ┃
┃ことです。ZVT.Xではオートサンプリング機能のスイッチ(TRIGGER)と	      ┃
┃									      ┃
┃モニター機能(MONITOR)の両方がONの時に録音キーを押すとこの機能が働きます。  ┃
┃									      ┃
┃どちらかがOFFだとこの機能は働きません。オートサンプリング・モードでない時は ┃
┃									      ┃
┃録音キー[R]が押された瞬間から録音を開始します。			      ┃
┃									      ┃
┃  オートサンプリングの音の入力待ちの時は一切のキー入力を受け付けません。    ┃
┃									      ┃
┃何か、音の入力があるまで音を待ち続けます。				      ┃
┃									      ┃
┃									      ┃
┃									      ┃
┃		ZVT.Xのオートサンプリング機能動作フローチャート	      ┃
┃									      ┃
┃                                  [R]キーを押す			      ┃
┃                                       ↓				      ┃
┃                        音の入力があるまでひたすら待つ		      ┃
┃                                       ↓				      ┃
┃                      音が入力されると実際に録音を開始する		      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
S      (DATA SIZE)

  サンプリングする音の時間をデータサイズによって設定する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
T      (SAMPLING TIME)

  サンプリングする音のデータサイズを「秒」で設定する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
V      (VOLUME)

  音量を変化させる。パラメータはパーセント単位。1〜300%の範囲のみ有効。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
X

  アクセスバンクの切り換え。[X]キーを押すたびにセレクトバンクが、A/Bと

交互に切り換わる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Z

 2つのデータ間のたたみ込み演算を行なう。2つの音声データの特性を1つに

まとめたりすることができる。演算結果をどちらのバンクに格納するかを聞いてくる。

1.A*B→B … 演算結果をBへ格納する
2.A*B→A … 演算結果をAへ格納する

  なお、演算にはかなりの時間を必要とする。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
@      (TRIGGER)

  オートサンプリング機能の有効/無効を設定する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
*

  PCMのデータ表示を10進数または16進数へ交互に切り換える。

デフォルトは16進数モード。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
+      (COMPOUND)

  バンクAとBのデータをミキシングして1つのデータにする。

パラメータとしてミックス方向を聞いてくる。

1.A→B … AとBをミックスしてミックスされたデータはBへ格納する
2.A←B … AとBをミックスしてミックスされたデータはAへ格納する
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−

  バンクAとBのデータ間の算術/論理演算を行なう。演算子を

1.ADD	和
2.SUB	差
3.OR	論理和
4.AND	論理積
5.EOR	排他的論理和

の5つから選択する。演算子タイプ選択後、演算結果をどちらのバンクに

格納するのかを聞いてくる。

1.A○B→B … 演算結果をBへ格納する
2.A○B→A … 演算結果をAへ格納する
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
/

  ソースバンクのデータをデスティネーションバンクのデータのスタートポイントへ

はめこむ。パラメータとしてはめこむ方向を聞いてくる。

1.A→B … AをBのスタートポイントへはめこむ
2.A←B … BをAのスタートポイントへはめこむ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
=

  バンク間のデータのコピー。パラメータとしてコピー方向を聞いてくる。

1.A→B … AをBへコピーする
2.A←B … BをAへコピーする
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
?

  各バンクの情報を表示する。

ADPCM DATA ADDRESS:ADPCMデータが格納されているアドレス
START POINT:青カーソルのオフセット位置
END POINT:赤カーソルのオフセット位置
ADPCM DATA SIZE:ADPCMデータの大きさ
EFFECTIVE DATA SIZE:青カーソルと赤カーソルに挟まれた区間の大きさ
PCM DATA ADDRESS:PCMデータが格納されているアドレス
FREE AREA:フリーエリア
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
CLR

  セレクトされているバンクのデータをクリアする。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
TAB

  データモード(PCM/ADPCM)の切り換えを行う。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

8.3.  コマンドモード


  ZVT.Xの機能をHuman68kのコマンドラインから実行することができる。

A>zvt <コマンド・スイッチ列1> <ファイルネーム1> <ファイルネーム2>
A>zvt -m[n] [コマンド・スイッチ列1] <ファイルネーム1> [コマンド・スイッチ列2] <ファイルネーム2> <ファイルネーム3>

という書式でコマンド指定を行う。

  ファイルネーム1で指定されたADPCMデータ・ファイルを読み込み、これを

コマンド・スイッチで指定された機能で加工処理を行い、これを

ファイルネーム2としてセーブする、がコマンドモードの基本動作となる。

  ミキシング(合成)指定のときのみファイルネーム3の指定を必要とし、

コマンド・スイッチ列2が有効となる。よってこの時はファイルネーム1で指定された

ADPCMデータ・ファイルを読み込み、これをコマンド・スイッチ列1で加工し、

ファイルネーム2で指定されたADPCMデータファイルを読み込み、これを

コマンド・スイッチ列2で加工し、この2つを合成して、ファイルネーム3として

セーブする、ということになる。


●コマンドオプションスイッチの解説
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−4P+
−4P−

	ビジュアルモードの4段階データセーブに相当するもの。ファイルネーム1の

	ADPCMデータを読み込み、これに対して半音単位で4段階のピッチシフトを

      行い拡張子'.4','.3','.2','.1'を添付したファイルネーム2でセーブする。

	'−4P'の後ろの+,−の符号はピッチシフトの方向を表す。+が音程を4段階に

	上昇させる指定で、逆に−が音程を4段階に下降させる指定となる。

	  例えば、FILE1.PCMがオクターブ4のCだったときに

	A>zvt -4p+ FILE1.PCM ABC

	とすると

	オクターブ4のC(原波形)が'ABC.4'
	オクターブ4のC#が'ABC.3'
	オクターブ4のDが'ABC.2'
	オクターブ4のD#が'ABC.1'

	としてセーブされる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−4V+
−4V−

	ビジュアルモードの4段階データセーブに相当するもの。ファイルネーム1の

	ADPCMデータを読み込み、これに対して%単位で4段階の音量変更を行い

	拡張子'.4','.3','.2','.1'を添付したファイルネーム2でセーブする。

	'−4V'の後ろの+,−の符号は音量変更の方向を表す。+が音量を4段階に

	上昇させる指定で、逆に−が音量を4段階に下降させる指定となる。

	  例えば、

	A>zvt -4v+ FILE1.PCM ABC

	とすると

	FILE1.PCMの音量の100%(原波形)が'ABC.4'
	FILE1.PCMの音量の114%が'ABC.3'
	FILE1.PCMの音量の126%が'ABC.2'
	FILE1.PCMの音量の140%が'ABC.1'

	としてセーブされる。

	  また、

	A>zvt -4v- FILE1.PCM ABC

	とすると

	FILE1.PCMの音量の100%(原波形)が'ABC.4'
	FILE1.PCMの音量の88%が'ABC.3'
	FILE1.PCMの音量の76%が'ABC.2'
	FILE1.PCMの音量の60%が'ABC.1'

	としてセーブされる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−A
	ファイルネーム1のPCMデータをファイルネーム2のADPCMデータへ

     変換する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−C

	上の逆の動作。PCMデータは16ビット符号付きで格納される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−G

	基本的にビジュアルモードはG−RAMがラムディスク等で使用されていると

	起動不可能である。しかしこのスイッチを指定するとG−RAMディスク等を

	破壊し強制的にビジュアルモードへ移行させることが出来る。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−In

	ファイルネーム1のADPCMデータとファイルネーム2のADPCMデータへ

    はめこみファイルネーム3でセーブする。−Iの後ろにオフセット値を書けるが

    これはADPCMのバイト数となる。(通常は0または省略で構わない)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Lfilename1, filename2

	ビジュアルモード起動時にfilename1をバンクAに、filename2をバンクBに

	読み込んで起動する。起動時に読み込める音声ファイルはADPCMに

	限定される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Mn

	ファイルネーム1のADPCMデータとファイルネーム2のADPCMデータを

	加工指定があればそれぞれ加工処理し、これらをミックス(合成)し

	ファイルネーム3でセーブする。−Mの後ろにオフセット値を書けるがこれは

	ADPCMのバイト数となる。(通常は0または省略で構わない)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Pn

	ファイルネーム1のADPCMデータの音程をn半音分シフトし

    ファイルネーム2でセーブする。パラメータは−12から+12まで設定可能。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−Vn

	ファイルネーム1のADPCMデータの音量を%単位で変更しファイルネーム2で

	セーブする。

	パラメータはパーセンテージで1〜300%まで設定可能。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−


●コマンド・スイッチの複数設定について

  コマンド・スイッチの'P','V'は同時に設定可能である。

また、コマンド・スイッチ'P','V'はコマンド・スイッチの'4','A','C','M'と同時に

設定可能である。

  以下に使用具体例をいくつか示す。


A>zvt -p3 -v150 ABC.PCM DEF.PCM

とすると'ABC.PCM'のADPCMデータを+3半音分シフト、音量を150%にしたものを

'DEF.PCM'でセーブする。


A>zvt -a -p+5 ABC.PCM DEF.PCM

とすると'ABC.PCM'のPCMデータを5半音分上へシフトした上でADPCMデータへ変換し、

これを'DEF.PCM'でセーブする。


A>zvt -c -p-5 ABC.PCM DEF.PCM -v180

のようにファイルネームの後にスイッチを設定可能である。この例では'ABC.PCM'の

ADPCMデータを−5半音分シフトし、さらに音量を原波形の180%に変更した

PCMデータを'DEF.PCM'でセーブする。


A>zvt -p-3 -v50 ABC.PCM -p5 -v120 DEF.PCM GHI.PCM -m

とすると'ABC.PCM'のADPCMデータを−3半音分シフト、音量を50%にしたものと

'DEF.PCM'のADPCMデータを+5半音分シフト、音量を120%にしたものとを

ミックスし'GHI.PCM'でセーブする。


A>zvt -4v+ -v80 -p-7 ABC.PCM DEF

では'ABC.PCM'のADPCMデータを−7半音分シフトし音量を

	80%×100%=80%に変更したものを'DEF.4'でセーブする。
そして  80%×114%=91.2%に変更したものを'DEF.3'でセーブする。
	80%×126%=100.8%に変更したものを'DEF.2'でセーブする。
	80%×140%=112%に変更したものを'DEF.1'でセーブする。


●ワイルドカードについて

  ファイルネームにワイルドカードが使用可能である。例えば

A>zvt -v150 -p5 *.PCM *1.PCM
A>zvt -m *.PCM A*.PCM *B.PCM

といった使い方が可能。ただし、使えない場合もある。


●ファイルネーム'PCM'について

  ZMUSIC.XまたはPCMDRV.SYSが組み込まれている時、出力側のファイルネームに'PCM'を設定した

場合は、生成されたデータをファイルとして生成せずに、直接聴く事が出来る。

  例えば

A>zvt -p-3 -v50  ABC.PCM  -p5  -v120  DEF.PCM  PCM  -m

とすると'ABC.PCM'のADPCMデータを−3半音分シフト、音量を50%にしたものと
	'DEF.PCM'のADPCMデータを+5半音分シフト、音量を120%にしたものとを

ミックスし、これをセーブせず音声として聴く事が出来る。

{ -- ZM9.MAN ------------------------------------------------
	    MEASURE9
	 MIDIデータを扱う


  ここではZMUSIC.Xの機能の1つである

MIDI楽器の設定をファイルとしてセーブする機能に

ついて解説します。また、楽器のメモリーを操作する

エクスクルーシブメッセージについて具体的な用例を

挙げて解説します。



9.1.  MIDI楽器のメモリデータをファイルにセーブする


  ZMUSIC.Xには常駐後に使用可能となるシステムファイル名'MIDI'を用いて

楽器の状態(音色や設定など)をファイルに落とす機能がある。これによって楽器の

設定状態や音色のデータをX68kで管理することが出来る。ここではこの機能の

具体的な使用方法について述べる。

  まず、楽器側にMIDI  OUT端子が無くてはならない。さらに楽器側に

自分のメモリ内のデータを外部へ送信する機能が必要である。MIDI  OUT端子が

あるような楽器ならば大抵は備わっている機能であるので楽器のマニュアルを参照して

みよう。大抵は「MIDI  データダンプ」「バルクダンプ」といった項目に

載っているはずである。

  次にX68kのMIDI  IN端子と楽器のMIDI  OUT端子を

MIDIケーブルで接続する。

  以上の準備が大前提で話を進めていくことにする。


●コマンドラインから行う場合(その1)


	0. ドライバの常駐を確認する
	1. 楽器側のバルクダンプのメニューを出し確認する
	2. A>copy con opm を実行する
	3. (R)と入力リータン
	4. 楽器のバルクダンプを実行する
	5. [SHIFT]+[BREAK]でコマンドに戻る
	6. 楽器のコンソールに"COMPLETED"等のメッセージを確認するまでひたすら待つ
	7. A>copy midi filename を実行する


●コマンドラインから行う場合(その2)


	0. ドライバの常駐を確認する
	1. 楽器側のバルクダンプのメニューを出し確認する
	2. A>zp-aを実行する
	3. 楽器のバルクダンプを実行する
	4. 楽器のコンソールに"COMPLETED"等のメッセージを確認するまでひたすら待つ
	5. A>zp-a filename を実行する


●BASICから行う場合


	0. ドライバの常駐を確認しmusicz.fncを組み込んだBASICを立ちあげる
	1. 楽器側のバルクダンプのメニューを出し確認する
	2. m_rec()を実行する
	3. 楽器のバルクダンプを実行する
	4. 楽器のコンソールに"COMPLETED"等のメッセージを確認するまでひたすら待つ
	5. m_save("filename")を実行しセーブする



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                   注意点				      ┃
┃									      ┃
┃									      ┃
┃  データの取り込み用バッファとしてトラックバッファ、文字型データへの変換の際┃
┃									      ┃
┃にワークエリアを使用します。データ取り込み中ビープ音が鳴った場合は	      ┃
┃									      ┃
┃トラックバッファやワークが不足している事を表します。データの取り込みを      ┃
┃									      ┃
┃行う時はトラックバッファ、ワークエリアともに十分に確保して		      ┃
┃									      ┃
┃ZMUSIC.Xを常駐させるべきです。具体的には			      ┃
┃									      ┃
┃A>zmusic -t200 -w200							      ┃
┃									      ┃
┃とします(この例ではトラックバッファ、ワークエリアともに200キロバイト確保して┃
┃									      ┃
┃常駐している)。また、ビープ音が鳴った場合にデータをセーブしてもそのデータは ┃
┃									      ┃
┃信用性がありません。							      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                        MIDIダンプデータについて			      ┃
┃									      ┃
┃									      ┃
┃  楽器内部のメモリーをファイルへ落とした物をZMUSICシステムでは	      ┃
┃									      ┃
┃MIDIダンプデータと呼びます。さて、このデータは16進数の文字型の	      ┃
┃									      ┃
┃データです。ですから							      ┃
┃									      ┃
┃a>ed ファイルネーム		           				      ┃
┃									      ┃
┃でエディタからエディットが可能です(ただしMIDIダンプデータの先頭につく  ┃
┃									      ┃
┃改行コードは、実は重要な意味を果たしていますので消したりしてはいけません)。┃
┃									      ┃
┃文字型にした理由はデータ中に$1Aを発見するとCOOKEDモードの	      ┃
┃									      ┃
┃デバイスドライバはファイルの最後と判断して動作を終了してしまうためです。    ┃
┃									      ┃
┃この方が簡単にエディタから読み込めて書き替えがきくし、問題はないでしょう    ┃
┃									      ┃
┃(もちろん機械語レベルの操作のためにZMUSICファンクションコールでは    ┃
┃									      ┃
┃文字型でない生データのやり取りもサポートしています(MEASURE10参照)。       ┃
┃									      ┃
┃何かアプリケーションを作成する場合はそちらを使うべきです)。		      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃			エクスクルーシブ送信後のウェイト		      ┃
┃									      ┃
┃  ZMUSIC.XではMIDIダンプデータの送信時や、共通コマンドの実行時、┃
┃									      ┃
┃EOX(END OF EXCLUSIVE MESSAGE)$F7を送信した場合、その後、ウェイトを入れる    ┃
┃									      ┃
┃ようにプログラムされています。これは楽器側がエクスクルーシブを処理するのに  ┃
┃									      ┃
┃時間を必要とするためです。このウェイトの値はZMUSIC.X常駐時の	      ┃
┃									      ┃
┃オプションスイッチ'-X'で設定することができます。			      ┃
┃									      ┃
┃ MMLの@XやXコマンドを用いてエクスクルーシブを送信した場合は(テンポの ┃
┃									      ┃
┃ずれを避けるために)EOXの送信後にウェイトを入れていません。この場合、	      ┃
┃									      ┃
┃ユーザーが休符やウェイトコマンドを挿入するなどして適度なウェイトを与えて    ┃
┃									      ┃
┃下さい。								      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


9.2.  MIDIダンプデータの楽器への転送


  以上のようにして出来たファイルを、逆に楽器側へ転送する方法について述べる。


●コマンドラインから行う場合(その1)


	0. ドライバの常駐を確認する
	1. A>copy filename midi を実行する
	2. 待つ


●コマンドラインから行う場合(その2)


	0. ドライバの常駐を確認する
	1. A>zp-x filename を実行する
	2. 待つ


●BASICから行う場合


	0. ドライバの常駐を確認しmusicz.fncを組み込んだBASICを立ちあげる
	1. m_trans("ファイルネーム")を実行する
	2. 待つ


●曲中に設定する時


	BASICプログラム … m_trans("ファイルネーム")命令を用いる
	ソースファイル(ZMSファイル) … .midi_dump=ファイルネーム命令を用いる


9.3.  ローランドエクスクルーシブについて


  多くのユーザーがローランドの楽器を使用していると思われるが、ここでは

そのローランド製のMIDI楽器のエクスクルーシブについて特に解説をする。

  ZMUSIC.Xでは'roland_exclusive'や'm_roland()'をはじめ、

MMLレベルでも'X'コマンド等が用意されており、かなり容易に楽器のメモリを

書き替える事が可能である。ここでは'roland_exclusive'命令を使って

CM32P(あるいはCM64のPCM音源パート)のパーシャルリザーブの行い方を 

例として解説を行う。


9.3.1.  マニュアルの後ろを見てみる


  マニュアルの後ろを見てみよう。CM64ならば33ページを開く。

まず'*6−3'という表に注目しよう。この表の中段に

	| 00 04 | 00aa aaa | PARTIAL RESERVE (PART 1) 0-31 |
	| 00 05 | 00aa aaa | PARTIAL RESERVE (PART 2) 0-31 |
	| 00 06 | 00aa aaa | PARTIAL RESERVE (PART 3) 0-31 |
				:
				:
	| 00 09 | 00aa aaa | PARTIAL RESERVE (PART 6) 0-31 |

が見つかるはずである。これを確認したら次にこの表'*6−3'のタイトルを見ると

	SYSTEM  AREA

とある。ここで、この表の右にあるアドレスマップからこの'SYSTEM AREA'という

文字を捜す。

	52 00 00

が'SYSTEM AREA'のベース・アドレスということが分かる。つまり、表'*6−3'の

中のパラメータを設定したい場合は、表の左に書いてあるオフセット・アドレスと

このベース・アドレスを足したアドレスに値を送れば良いことになる。この例でいくと

	52 00 00 + 00 04 = 52 00 04

がパーシャルリザーブのパラメータのアドレスということになる(表'*6−3'の

タイトルの下をみると「パーシャルリザーブは6パート分を一度に送らなければ

無効です」とあるのでもちろんこれに従うこと)。

  結局、以下のようにコマンドを書けば良いことになる。

	.roland_exclusive dev,mdl {    $52,$00,$04
					2
					3
					5
					4
					3
					6}
(1パラメータ毎に改行しているが特に意味はない。$52,00,04がアドレス、
それ以降がパラメータ)

  この例ではパート1〜6、それぞれ2,3,5,4,3,6声をリザーブしている。

もちろん楽器の最大同時発声数を超えてはならない。この例では2+3+5+4+3+6=23で

まだ31−23=8声分の余裕がある。

  さて、今の例でdev,mdlというのが出てきたがこれは操作対象の楽器のID番号の

ことである。

  mdlはモデルIDと呼ばれるものでメーカーがその楽器に与えた識別番号の

ことである。MT32/CM32L/CM32P/CM64はすべて$16と決められている

(CM64ならばマニュアルのp28の上部に記載されている)。

  devはデバイスIDと呼ばれるもので、同じ機種(あるいは同一のデバイスIDを

持った)楽器でもこれを変えておけば個別に操作が可能となる、ユーザーが任意に

設定可能な識別番号である。しかしCM32L/CM32P/CM64は$10に固定である。結局、

上の例は

	.roland_exclusive $10,$16 {    $52,$00,$04
					2
					3
					5
					4
					3
					6}

ということになる。

  以上の手順をまとめると、        

1) 設定したいパラメータの表を捜す
2) 表のタイトルをアドレスマップより捜す
3) 設定したいパラメータのオフセット値と2)で見付けたベースアドレスを加算する
4) 2種類のIDを確認してコマンドを書く

となる。


9.3.2.  その他の例


  CM32P(あるいはCM64のPCMパート)の各パートの受信MIDIチャンネル

を設定するときは

	roland_exclusive $10,$16 {$52,$00,$0a,0,1,2,3,4,16}

のようになる。この例ではパート1〜5をそれぞれチャンネル1〜5へ、パート6は

OFFにしている。MIDIチャンネルは通常1〜16ということになっているが

内部処理的には0〜15なので注意すること。そういうわけでパラメータの0は

MIDIチャンネル1、パラメータの1はMIDIチャンネル2…以下同様という

ことになる。最後のパラメータの16はMIDIチャンネル17ということではなく

そのパートをミュートする(使用しない)ということを意味する。

多くのローランド系の楽器は

	MIDIチャンネル	実際のパラメータ値
		1〜16     		0〜15
 		OFF   		16

ということになっている。

  同様にしてリバーブの設定や各パートの細かい設定(リバーブのON/OFF,

キートランスポーズの設定など)も行うことができる。もちろんBASICコマンドの

'm_roland()'やMMLの'X'コマンドもいままで述べてきた同様な方法で行える。

  注意点としては通常1〜128で使用していたものが内部処理的には0〜127と   

なっていたり、−64〜+63で使用していたものが0〜127シフトされて

いたりするのでパラメータの設定にはマニュアルを確認することが必要である。

{ -- ZM10.MAN ------------------------------------------------
	    MEASURE10
  	ZMUSICのファンクションコール


  ここではZMUSIC.Xが常駐した後に

使用出来るファンクションコールについて

説明します。使用にはMPU68000の

機械語の知識が必要です。

  一般的な使用をする限り読み飛ばして

構いません。








10.1.  ファンクションコールのコール法


コール方法その1(OPMDRV.Xコンパチモード)

	moveq.l #n,d1           *n=ファンクションナンバー
	lea     〜,a1           *パラメータが必要であれば設定
	moveq.l #m,d2           *パラメータが必要であれば設定
	IOCS    _OPMDRV

コール方法その2(高速応答モード)

	moveq.l #n,d1           *n=ファンクションナンバー
	lea     〜,a1           *パラメータが必要であれば設定
	moveq.l #m,d2           *パラメータが必要であれば設定
	trap    #3

  戻り値はd0.lとa0.lのみで、その他のレジスタは全部保存されます。

  ファンクション内でエラーが発生すればd0にそのエラーコード(MEASURE12参照)が

代入されています。

  d0.l=0は正常終了を表します。戻り値にd0を使用している場合は別です。

  ファンクション$00〜$0FまではOPMDRV.Xとコンパチでほぼ同等の機能を

果たします。「その1」はあくまで「OPMDRV.X」との互換性を

保つために設けたコール方法で「その2」の方法の方が応答が高速です。

  ドライバの常駐チェックは具体的にはリスト1の様にします。原理はTRAP #3

のベクタが指し示すアドレス−8から"ZmuSiC"があるかどうかを調べているだけです。

 さらに"ZmuSiC"の後ろにはバージョンコード2バイトが格納されています。

上位バイト	バージョン整数部, バージョン少数第1桁
下位バイト	対応バージョンコード, バージョン少数第2桁

対応バージョンコード
		UNIVERSAL VERSION	0
		16bit VERSION		1
		RS-MIDI VERSION		2
		POLYPHON VERSION	3

例
	POLYPHON VERSION 1.52 → "ZmuSiC",$15(.b),$32(.b)


	      リスト1

chk_drv:
	* > eq=常駐確認
	* > mi=常駐していない
	move.l  $8c.w,a0
	subq.w  #8,a0
	cmpi.l  #'ZmuS',(a0)+
	bne     chk_drv_err
	cmpi.w  #'iC',(a0)+
	bne     chk_drv_err
	rts
chk_drv_err:
	moveq.l #-1,d0
	rts

--------------------------------------------------------------------------------
ファンクション$00       m_init

機能:   音源、ドライバの初期化

引数:   なし

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$01       m_alloc

機能:   トラックバッファの確保

引数:   d2の上位16ビット=トラックナンバー(1〜80)
	d2の下位16ビット=バッファサイズ($00A0〜$ffff)

戻り値: なし
	d0.l=エラーコード
--------------------------------------------------------------------------------
ファンクション$02       m_assign

機能:   確保したトラックバッファをどの音源に割り当てるかを設定する

引数:   d2の上位16ビット=チャンネル番号(1〜25,ただし
	        	  PCM8独立チャンネルモード時は1〜32となる)
	d2の下位16ビット=トラック番号(1〜80)

戻り値: なし
	d0.l=エラーコード

備考:   チャンネル番号とその対応デバイスはベースチャンネルモードによって
	変動する。
m_ch("FM")、(B0)の時
チャンネル番号  1〜8    内蔵FM音源チャンネル1〜8
		9       内蔵ADPCM音源
		10〜25  MIDIチャンネル1〜16
		26〜32  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)

m_ch("MIDI")、(B1)の時
チャンネル番号  1〜16   MIDIチャンネル1〜16
		17〜24  内蔵FM音源チャンネル1〜8
		25      内蔵ADPCM音源
		26〜32  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)
--------------------------------------------------------------------------------
ファンクション$03       m_vget

機能:   FM音源音色データの取り出し

引数:   d2.l=音色番号(1〜200)
	a1.l=データ格納領域のアドレス(55バイト分)

戻り値: 0(a1)〜54(a1):音色データ
	d0.l=エラーコード

備考    0(a1)〜54(a1)とパラメータの対応
0:AF(フィードバック/アルゴリズム) (0〜63)  
1:OM(スロットマスク)            (0〜15)  
2:WF(ウェーヴフォーム)          (0〜3)   
3:SYC(シンクロ)              (0,1)    
4:SPD(スピード)            (0〜255) 
5:PMD                    (0〜127) 
6:AMD                    (0〜127) 
7:PMS                    (0〜7)   
8:AMS                    (0〜3)   
9:PAN                    (0〜3)   
10:DUMMY
11(OP1),22(OP2),33(OP3),44(OP4):AR(アタックレート)        (0〜31)
12(OP1),23(OP2),34(OP3),45(OP4):1DR(1stディケイレート)   (0〜31)
13(OP1),24(OP2),35(OP3),46(OP4):2DR(2ndディケイレート)   (0〜31)
14(OP1),25(OP2),36(OP3),47(OP4):RR(リリースレート)        (0〜15)
15(OP1),26(OP2),37(OP3),48(OP4):1DL(1stディケイレベル)  (0〜15)
16(OP1),27(OP2),38(OP3),49(OP4):TL(トータルレベル)       (0〜127)
17(OP1),28(OP2),39(OP3),50(OP4):KS(キースケーリング)      (0〜3)
18(OP1),29(OP2),40(OP3),51(OP4):MUL(フェーズマルチプライ)  (0〜15)
19(OP1),30(OP2),41(OP3),52(OP4):DT1(ディチューン1)      (0〜7)
20(OP1),31(OP2),42(OP3),53(OP4):DT2(ディチューン2)      (0〜3)
21(OP1),32(OP2),43(OP3),54(OP4):AME(AMSイネーブル)     (0,1)

  パラメータの機能や詳しい解説は専門書や「BASICマニュアル」の
M_VSET()やM_VGET()の項を参照のこと。
--------------------------------------------------------------------------------
ファンクション$04       m_vset

機能:   FM音源音色の設定

引数:   d2.l=音色番号(1〜200)
	a1.l=データ格納領域のアドレス(55バイト分)

戻り値: なし
	d0.l=エラーコード

備考:   パラメータフォーマットについてはファンクション$03の備考を参照。
--------------------------------------------------------------------------------
ファンクション$05       m_tempo

機能:   テンポの設定/取り出し

引数:   20≦d2.l≦300:音楽的テンポ値(1分間に4分音符を何個演奏するか)
	d2.l=−1:d0.lに現在のテンポ値、a0.lに現在のタイマー値を返す

戻り値: なし
	d0.l=エラーコード
--------------------------------------------------------------------------------
ファンクション$06       m_trk

機能:   MMLデータのバッファへの書き込み

引数:   d2.l=トラック番号(1〜80)
	a1.l=MML文字列データ格納アドレス

戻り値: なし
	d0.l=エラーコード
--------------------------------------------------------------------------------
ファンクション$07       m_free

機能:   トラックバッファの空き容量

引数:   d2.l=トラック番号(1〜80)

戻り値: d0.l=空き容量値

備考:   ZMD演奏中の場合は戻り値の内容は保証されない。
--------------------------------------------------------------------------------
ファンクション$08       m_play

機能:   演奏開始

引数:   トラック1〜32がd2.lのビット0〜31
	トラック33〜64がd3.lのビット0〜31
	トラック65〜80がd4.wのビット0〜15
	に対応し、ビット=1で指定されたトラックの演奏を開始する。
	ただし、d2.l=d3.l=d4.w=0の場合は全トラック演奏開始する。

戻り値: なし
	d0.l=エラーコード
--------------------------------------------------------------------------------
ファンクション$09       m_stat

機能:   演奏状態の検査

引数:   チャンネル1〜32がd2.lのビット0〜31に対応し、
	ビット=1のチャンネルに対して検査を行う。
	d2.l=0の時は全チャンネル検査を行なう

戻り値: 検査査定されたチャンネルのうちどれかひとつでも演奏中なら、d0.l=1を返す。
	d2.l=0で全チャンネルを検査対象にした場合は、演奏中のチャンネルに
	対応したビット=1をd0.lに返す。

備考:   チャンネル番号とその対応デバイスはベースチャンネルモードによって
	変動する。
m_ch("FM")、(B0)の時
チャンネル番号  1〜8    内蔵FM音源チャンネル1〜8
		9       内蔵ADPCM音源
		10〜25  MIDIチャンネル1〜16
		26〜32  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)

m_ch("MIDI")、(B1)の時
チャンネル番号  1〜16   MIDIチャンネル1〜16
		17〜24  内蔵FM音源チャンネル1〜8
		25      内蔵ADPCM音源
		26〜32  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)
--------------------------------------------------------------------------------
ファンクション$0A       m_stop

機能:   演奏停止

引数:   トラック1〜32がd2.lのビット0〜31
	トラック33〜64がd3.lのビット0〜31
	トラック65〜80がd4.wのビット0〜15
	に対応し、ビット=1で指定されたトラックの演奏を停止する。
	ただし、d2.l=d3.l=d4.w=0の場合は全トラック演奏停止する。

戻り値: なし
	d0.l=エラーコード
--------------------------------------------------------------------------------
ファンクション$0B       m_cont

機能:   演奏再開

引数:   トラック1〜32がd2.lのビット0〜31
	トラック33〜64がd3.lのビット0〜31
	トラック65〜80がd4.wのビット0〜15
	に対応し、ビット=1で指定されたトラックの演奏を再開する。
	ただし、d2.l=d3.l=d4.w=0の場合は全トラック演奏再開する。

戻り値: なし
	d0.l=エラーコード
--------------------------------------------------------------------------------
ファンクション$0C       m_atoi

機能:   トラックバッファの先頭アドレスを得る

引数:   d2.l=トラック番号(1〜80)

戻り値: d0.l=トラックバッファの先頭アドレス値
--------------------------------------------------------------------------------
ファンクション$0D       init_all

機能:   音源ドライバの初期設定

引数:   なし

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$0E       int_stop

機能:   演奏割り込みの中断

引数:   なし

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$0F       m_play2

機能:   前回に実行されたm_playをもう一度実行する

引数:   なし

戻り値: なし

備考:   前回のm_play実行時のパラメータでもう一度m_playを呼び出す。
	ファンクション$11で演奏を開始したあと、このファンクションを
	実行しても無意味。
--------------------------------------------------------------------------------
ファンクション$10	adpcm_read

機能    ADPCMデータの登録と加工

引数    a1.l=ファイルネーム格納アドレス
	または
	(a1).l=ソースデータナンバー(0〜511)
	d2.l=設定ノートナンバー(0〜511)
	d3の上位16ビット=ピッチシフトパラメータ
		( 0〜11:ピッチダウン
		     12:ニュートラル
		 13〜24:ピッチアップ)
	d3の下位16ビット=ボリュームパラメータ
		(1%〜300%)
	d3.l=0でデータにノンタッチ
	d4の上位16ビット=ディレイカウント(0〜65535)
	d4の下位16ビット=ミキシング元ノートナンバー(0〜511)
	    =−1でミキシングは行わない
	d5の上位16ピット=オフセットカウント(0〜65535)
	d5の下位16ビット=カットサイズ(0〜65535)
	d5.l=0でデータの切り出しを行わない
	d6.l≠0で逆転
	d6.l=0で逆転なし
	d7の上位16ピット=オフセットカウント(0〜65535)
	d7のビット8〜15=モード(−1:フェード・イン,+1:フェード・アウト)
	d7のビット0〜7=フェード・イン/アウト・レベル(0〜127)

戻り値: なし
	d0.l=エラーコード
--------------------------------------------------------------------------------
ファンクション$11       play_cnv_data

機能:   ZMDの演奏

引数:   d2.l=データ総サイズ
	d2.l=0の場合はドライバ内にデータを転送せず即演奏(高速応答)
	a1.l=演奏データ格納アドレス(備考参照)

戻り値: なし
	d0.l=エラーコード

備考:  ZMDの構造
Offset  +0    :$10(.b)               ←偶数アドレス}
	+1〜+6:'ZmuSiC'                           }メモリ上に無くても構わない
	+7    :Version Number(.b)    ←a1.lで指し示すべきアドレス(奇数アドレス)
	なお、内部フォーマットについての詳しい解説はMEASURE12参照
--------------------------------------------------------------------------------
ファンクション$12       se_play

機能:   効果音演奏

引数:   d2.l=何トラックから割り込ませるか(1〜32)
	a1.l=演奏データ格納アドレス(備考参照)

戻り値: なし

備考:  効果音の構造
Offset  +0     :$10(.b)               ←偶数アドレス}
        +1〜+6:'ZmuSiC'                            }メモリ上に無くても構わない
	+7     :Version Number(.b)                  }
	+8〜   :共通コマンド                        }
	+?     :Number of tracks(.w)  ←a1.lで指し示すべきアドレス(偶数アドレス)
	なお、内部フォーマットについての詳しい解説はMEASURE12参照
--------------------------------------------------------------------------------
ファンクション$13  se_adpcm1

機能:   ADPCMの効果音演奏

引数:   a1.l=ADPCMデータ格納アドレス
	d2.l=ADPCMデータサイズ
	d3(bit00〜07)=PAN(0〜3)
	d3(bit08〜15)=FRQ(0〜4)
	d3(bit16〜23)=優先レベル(低0〜255高)

戻り値: なし

備考:   優先レベルの例

  現在鳴っている音の      新しく鳴らそうとしている音の       結果
      優先レベル                  優先レベル
	  0                            0                新しいのが鳴る
	  0                            1                新しいのが鳴る
	  1                            0                新しいのが拒否される

通常は0(従来通り)で構わない。ゲーム等の面と面のつなぎのメッセージやイベントの
メッセージなどの爆発音等の効果音等に邪魔されたくない時に使用するとよい。
  優先レベルはPCM8独立チャンネルモード時は意味をなさない。
--------------------------------------------------------------------------------
ファンクション$14  se_adpcm2

機能:   ZMUSIC内に登録済みのADPCM音の効果音演奏

引数:   d2.l=ノート番号(0〜511)
	d3(bit00〜07)=PAN(0−3)
	d3(bit08〜15)=FRQ(0−4)
	d3(bit16〜23)=優先レベル(低0〜255高)

戻り値: なし

備考:  優先レベルについてはファンクション$13と同様。
--------------------------------------------------------------------------------
ファンクション$15       set_ch_mode

機能:   ベースチャンネルモード指定

引数:   d2.l≠0 MIDIチャンネル基準モード
	d2.l=0 FMチャンネル基準モード

戻り値: なし

備考:   このファンクションの設定内容によってチャンネル番号と対応デバイスが
	変化する。
d2.l=0の時(m_ch("FM")、(B0)の時)
チャンネル番号  1〜8    内蔵FM音源チャンネル1〜8
		9       内蔵ADPCM音源
		10〜25  MIDIチャンネル1〜16
		26〜32  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)

d2.l≠0の時(m_ch("MIDI")、(B1)の時)
チャンネル番号  1〜16   MIDIチャンネル1〜16
		17〜24  内蔵FM音源チャンネル1〜8
		25      内蔵ADPCM音源
		26〜32  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)
--------------------------------------------------------------------------------
ファンクション$16       midi_rec

機能:   MIDIデータの記録

引数:   なし

戻り値: なし

備考:   ファンクション実行後、MIDIインターフェースのMIDI−IN端子より
	受信したデータをトラックバッファへ格納していく。バッファオーバーフローを
	起こすとビープ音が鳴る。この場合データ内容は意味をなさない。
--------------------------------------------------------------------------------
ファンクション$17       midi_rec_end

機能:   MIDIデータ記録モード終了

引数:   d2.l=0 文字列データへ変換
	d2.l≠0 データを加工しない

戻り値: d0.l=データサイズ
	a0.l=data address
	エラーの場合はd0.l=エラーコード/a0.l=0となる

備考:   ファンクション$16を終了する。文字列データ(d2.l=0)へ変換する際、
	ワークエリアを使用する。文字列データ作成時にワークが不足していると
	ビーブ音が鳴る。この場合データ内容は意味をなさない。
--------------------------------------------------------------------------------
ファンクション$18       midi_trns

機能:   MIDIデータの転送

引数:   d2.l=0 アスキー文字列データ転送モード
	d2.l≠0 バイナリデータ転送モード(データサイズ)
	a1.l=データ先頭アドレス

戻り値: なし
	d0.l=エラーコード
--------------------------------------------------------------------------------
ファンクション$19       calc_total

機能:   各トラックの演奏データのステップタイムの合計値を求め
	演奏トラックワークのp_totalに格納する

引数:   d2≠0:計算してp_totalに格納する。
	d2=0:計算してp_totalに格納して結果を画面に表示する。

戻り値: d0.L=−1:演奏データにエラーが残存しているため、計算を行えなかった
	d0.L=−2:どのトラックにも演奏データは存在しなかった
    d0.L=0:正常終了

備考:   トラックバッファに格納されている演奏データについて計算処理を行う。
	演奏中の場合は、演奏を停止して計算処理をする。
--------------------------------------------------------------------------------
ファンクション$1a       fade_out

機能:   演奏中の全トラックに対してフェード・イン/アウトを行う

引数:   d2.l=−85〜−1:フェード・イン
	d2.l=0:フェード・アウト・モード解除
	d2.l=1〜85:フェード・アウト

戻り値: d0.l=0:設定完了
	d0.l=−1:設定失敗(すでにフェード・イン/アウト実行中)

備考:   d2.l=0以外ではd2.lの絶対値は音量の増減スピードに相当し、絶対値が
	大きいほど増減スピードは速くなる。
	  d2.l=0では単に各トラックの音量が下がるのを停止するのみ。通常音量には
	戻すことはしない。
	  演奏中のトラックのうち1トラックでもフェード・イン/アウトを実行中なら
	本ファンクションは拒絶される(戻り値:d0.l=−1になる)。
--------------------------------------------------------------------------------
ファンクション$1b       m_vset2

機能:   FM音源音色の設定(AL/FB分離フォーマット形式)

引数:   d2.l=音色番号(1〜200)
	a1.l=パラメータデータ格納アドレス(55バイト分)

戻り値: なし
	d0.l=エラーコード

備考    0(a1)〜54(a1)とパラメータの対応
        00(OP1),11(OP2),22(OP3),33(OP4):AR(アタックレート)        (0〜31)
	01(OP1),12(OP2),23(OP3),34(OP4):1DR(1stディケイレート)   (0〜31)
	02(OP1),13(OP2),24(OP3),35(OP4):2DR(2ndディケイレート)   (0〜31)
	03(OP1),14(OP2),25(OP3),36(OP4):RR(リリースレート)        (0〜15)
	04(OP1),15(OP2),26(OP3),37(OP4):1DL(1stディケイレベル)  (0〜15)
	05(OP1),16(OP2),27(OP3),38(OP4):TL(トータルレベル)       (0〜127)
	06(OP1),17(OP2),28(OP3),39(OP4):KS(キースケーリング)      (0〜3)
	07(OP1),18(OP2),29(OP3),40(OP4):MUL(フェーズマルチプライ)  (0〜15)
	08(OP1),19(OP2),30(OP3),41(OP4):DT1(ディチューン1)      (0〜7)
	09(OP1),20(OP2),31(OP3),42(OP4):DT2(ディチューン2)      (0〜3)
	10(OP1),21(OP2),32(OP3),43(OP4):AME(AMSイネーブル)     (0,1)
	44:AL(アルゴリズム)           (0〜7)
	45:FB(フィードバック)          (0〜7)
	46:OM(スロットマスク)            (0〜15)
	47:PAN                    (0〜3)
	48:WF(ウェーヴフォーム)          (0〜3)
	49:SYC(シンクロ)              (0,1)
	50:SPD(スピード)            (0〜255)
	51:PMD                    (0〜127)
	52:AMD                    (0〜127)
	53:PMS                    (0〜7)
	54:AMS                    (0〜3)

  パラメータの機能や詳しい解説は専門書や「X−BASICマニュアル」の
M_VSET()やM_VGET()の項を参照のこと。
--------------------------------------------------------------------------------
ファンクション$1c       send_rd_exc

機能:   ローランド・エクスクルーシブ・データの転送

引数:   d2.l=データサイズ
	d3(bit16〜31)=デバイスID
	d3(bit0〜15)=モデルID
	a1.l=データ格納アドレス

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$1d       send_exc

機能:   エクスクルーシブ・データの転送

引数:   d2.l=データサイズ
	a1.l=データ格納アドレス

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$1e       sc55_p_rsv

機能:   ローランドSC55のパーシャル(ボイス)リザーブ

引数:   d2.l=データサイズ(d2.l=16でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=パラメータデータ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 sc55_v_reserve()参照。
--------------------------------------------------------------------------------
ファンクション$1f       sc55_reverb

機能:   ローランドSC55のリバーブパラメータセット

引数:   d2.l=データサイズ(1≦d2.l≦7でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=パラメータデータ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 sc55_reverb()参照。
--------------------------------------------------------------------------------
ファンクション$20       sc55_chorus

機能:   ローランドSC55のコーラスパラメータセット

引数:   d2.l=データサイズ(1≦d2.l≦8でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=パラメータデータ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 sc55_chorus()参照。
--------------------------------------------------------------------------------
ファンクション$21       sc55_part_parameter

機能:   ローランドSC55のパートパラメータ

引数:   d2.l=データサイズ(1≦d2.l≦119でないと楽器の状態は保証されず)
	d3(bit16〜31)=PART NUMBER(1〜16)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=パラメータデータ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 sc55_part_setup()参照。
--------------------------------------------------------------------------------
ファンクション$22       sc55_drum_parameter

機能:   ローランドSC55のドラムパラメータ

引数:   d2.l=データサイズ(1≦d2.l≦8でないと楽器の状態は保証されず)
	d3(bit24〜31)=Map Number(0〜1)
	d3(bit16〜23)=Note Number(0〜127)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 sc55_drum_setup()参照。
--------------------------------------------------------------------------------
ファンクション$23       sc55_print

機能:   ローランドSC55の画面に文字列を表示する

引数:   d2.l=文字列サイズ(1≦d2.l≦32でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=文字列格納アドレス

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$24       sc55_display

機能:   ローランドSC55の画面にグラフィックを表示する

引数:   d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス(パラメータの個数は16個に固定)
	(必ず偶数。さもなくばアドレスエラーが発生する)

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 sc55_display()参照。
--------------------------------------------------------------------------------
ファンクション$25       mt32_p_rsv

機能:   ローランドMT32のパーシャルリザーブを行う

引数:   d2.l=データサイズ(d2.l=9でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 mt32_p_reserve()参照。
--------------------------------------------------------------------------------
ファンクション$26       mt32_reverb

機能:   ローランドMT32のリバーブパラメータの設定

引数:   d2.l=データサイズ(1≦d2.l≦3でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 mt32_reverb()参照。
--------------------------------------------------------------------------------
ファンクション$27       mt32_setup

機能:   ローランドMT32のパートパラメータの設定

引数:   d2.l=データサイズ(1≦d2.l≦9でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 mt32_part_setup()参照。
--------------------------------------------------------------------------------
ファンクション$28       mt32_drum

機能:   ローランドMT32のドラムパラメータの設定

引数:   d2.l=データサイズ(1≦d2.l≦4でないと楽器の状態は保証されず)
	d3(bit16〜31)=NOTE NUMBER(0〜127)
		       (ただし受信可能範囲(24〜87)以外は無視される)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 mt32_drum_setup()参照。
--------------------------------------------------------------------------------
ファンクション$29       mt32_common

機能:   ローランドMT32の音色のコモンパラメータの設定

引数:   d2.l=データサイズ(1≦d2.l≦15でないと楽器の状態は保証されず)
	d3(bit16〜31)=Program NUMBER(1〜64)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   a1.lから格納されているパラメータデータは以下の書式に従う。
	Program Name(最大10文字),$00(.b),Param1(.b),Param2(.b),…,Param4(.b)
	パラメータフォーマットはMEASURE3 mt32_common()参照。
--------------------------------------------------------------------------------
ファンクション$2a       mt32_partial

機能:   ローランドMT32の音色のパーシャルパラメータの設定

引数:   d2.l=データサイズ(1≦d2.l≦58でないと楽器の状態は保証されず)
	d3(bit24〜31)=PROG NUMBER(1〜64)
	d3(bit16〜23)=PARTIAL NUMBER(1〜4)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 mt32_partial()参照。
--------------------------------------------------------------------------------
ファンクション$2b       mt32_patch

機能:   ローランドMT32のパッチパラメータの設定

引数:   d2.l=データサイズ(1≦d2.l≦7でないと楽器の状態は保証されず)
	d3(bit16〜31)=PATCH NUMBER(1〜128)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 mt32_patch()参照。
--------------------------------------------------------------------------------
ファンクション$2c       mt32_print

機能:   ローランドMT32の画面に文字列を表示する

引数:   d2.l=文字列サイズ(1≦d2.l≦20でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=文字列格納アドレス

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$2d       u220_setup

機能:   ローランドU220のセットアップパラメータの設定

引数:   d2.l=データサイズ(d2.l=7でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 u220_setup()参照。
--------------------------------------------------------------------------------
ファンクション$2e       u220_common

機能:   ローランドU220テンポラリパッチのコモンパラメータの設定

引数:   d2.l=データサイズ(d2.l=18でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 u220_setup()参照。
--------------------------------------------------------------------------------
ファンクション$2f       u220_d_setup

機能:   ローランドU220テンポラリパッチのドラムパラメータの設定

引数:   d2.l=データサイズ(d2.l=7でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 u220_drum_setup()参照。
--------------------------------------------------------------------------------
ファンクション$30       u220_p_setup

機能:   ローランドU220テンポラリパッチのパートパラメータの設定

引数:   d2.l=データサイズ(d2.l=13でないと楽器の状態は保証されず)
	d3(bit16〜31)=PART NUMBER(1〜6)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 u220_part_setup()参照。
--------------------------------------------------------------------------------
ファンクション$31       u220_print

機能:   ローランドU220テンポラリパッチエリアにメッセージ表示

引数:   d2.l=文字列サイズ(1≦d2.l≦12でないと楽器の状態は保証されず)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=文字列格納アドレス

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$32       u220_timbre

機能:   ローランドU220ティンバーパラメータの設定

引数:   d2.l=データサイズ(27≦d2.l≦39でないと楽器の状態は保証されず)
	d3(bit16〜31)=PROGRAM NUMBER(1〜128)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   a1.lから格納されているデータは以下の書式に従う。
	Timbre Name(12文字以内),$00(.b),Param1(.b),Param2(.b),…,param26(.b)
	パラメータフォーマットはMEASURE3 u220_timbre()参照。
--------------------------------------------------------------------------------
ファンクション$33       u220_drum

機能:   ローランドU220テンポラリエリアのリズムキットの書き換え

引数:   d2.l=データサイズ(1≦d2.l≦20でないと楽器の状態は保証されず)
	d3(bit16〜31)=NOTE NUMBER(35〜99)
	d3.b=デバイスID(d3.b=−1で前回のを使用する)
	a1.l=データ格納アドレス

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 u220_drum_inst()参照。
--------------------------------------------------------------------------------
ファンクション$34       m1_midi_ch

機能:   KORG  M1のシーケンサSONG0の受信MIDIチャンネルの設定

引数:   a1.l=データ格納アドレス

戻り値: なし

備考:   0(a1)=パート1の受信MIDIチャンネル(1〜16)
	1(a1)=パート2の受信MIDIチャンネル(1〜16)
			 :
	7(a1)=パート8の受信MIDIチャンネル(1〜16)
--------------------------------------------------------------------------------
ファンクション$35       send_to_m1

機能:   ファンクション$34,$36,$37で設定したパラメータを
	KORG  M1のシーケンサSONG0へ設定

引数:   d3.b=デバイスID(d3.b=−1で前回のを使用する)

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$36       m1_p_setup

機能:   KORG  M1のシーケンサSONG0のトラックパラメータの設定

引数:   a1.l=データ格納アドレス(パラメータデータは必ず40個なければならない)


戻り値: なし

備考:   パラメータフォーマットはMEASURE3 m1_part_setup()参照。
--------------------------------------------------------------------------------
ファンクション$37       m1_e_setup

機能:   KORG  M1のシーケンサSONG0のエフェクトパラメータの設定

引数:   a1.l=データ格納アドレス(パラメータは必ず25個なければならない)

戻り値: なし

備考:   パラメータフォーマットはMEASURE3 m1_effect_setup()参照。
--------------------------------------------------------------------------------
ファンクション$38       m1_print

機能:   KORG  M1のシーケンサSONG0のソングネームの設定

引数:   d2.l=文字列サイズ(1≦d2.l≦10でないと楽器の状態は保証されず
	a1.l=文字列格納アドレス

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$39       block_adpcm_data

機能:   ZPDの登録

引数:   a1.l=ZPD・ファイルのファイルネーム格納アドレス

戻り値: なし
	d0.l=エラーコード

備考:   ファイルネームは
	文字列,$00(.B)
	の書式に従う。
--------------------------------------------------------------------------------
ファンクション$3a       get_trk_tbl

機能:   演奏トラックテーブル/絶対チャンネルテーブルのアドレス

引数:   なし

戻り値: d0.l=絶対チャンネルテーブルのアドレス
	a0.l=演奏トラックテーブルのアドレス

備考:
m_ch("FM"),(B0)のときはd0.lの指し示すアドレスから
  0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
m_ch("MIDI"),(B1)のときはd0.lの指し示すアドレスから
  9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,0,1,2,3,4,5,6,7,8
a0.lの指し示すアドレスからは演奏すべきトラックナンバーが最大32個
格納されている。終端コードは$ff(.B)。
  例えばトラック1〜9を演奏する(している)時は
0,1,2,3,4,5,6,7,8,$ff        (値はトラック番号−1)
のようになっている。
--------------------------------------------------------------------------------
ファンクション$3b  set_loop_time

機能:   全トラックがd2.b回以上ループしたらa1.lへBSRする

引数:   d2.b=0  loop time(s) (0〜255)
	a1.l=飛び先アドレス(=0で解除)

戻り値: なし
--------------------------------------------------------------------------------
ファンクション$3c       get_play_work

機能:   演奏トラックワークのアドレスを返す

引数:   d2.b=trk number(1〜80)

戻り値: a0.l=演奏ワーク・アドレス
	d0.l=コンパイル・ワーク・アドレス

備考:	具体的なワーク内容についてはMEASURE13を参照。
--------------------------------------------------------------------------------
ファンクション$3d       get_timer_mode

機能:   どのタイマで割り込みを実現しているかを返す

引数:   なし

戻り値: d0.l=0  timer A
	d0.l=1  timer B
--------------------------------------------------------------------------------
ファンクション$3e       set_fm_master_vol

機能:   FM音源のマスターボリュームを設定する

引数:   d2.l=マスターボリューム値(0〜255)

戻り値: なし

備考:   演奏中は無効。ZMD作成前にのみ有効。
--------------------------------------------------------------------------------
ファンクション$3f       set_timer_value

機能:   タイマーの値を設定する

引数:   d2.l=タイマー値

戻り値: なし

備考:   設定した値は、現在テンポ源となっている割り込みタイマーに対して
	直接書き込まれる。
--------------------------------------------------------------------------------
ファンクション$40       release_support

機能:   ZMUSIC.X用(またはZMSC.X用)のサブプログラムの名前を登録する
	(あるいは登録したものを取り消す)

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
引数:   登録時
	a1.l=filename address   (解除プログラムの名前を登録)

戻り値: d0.l=0≦result code     正常登録されました。(ok)
	d0.l=−1                既に4つ登録されており、これ以上の登録は出来ません。(error)

備考:   名前を登録しておくとZMUSIC.X解除時に
	一緒に解除する。filename(100文字以内)は
	'a:\bin\zp -r',0
	のようなフォーマットとする。
	最大4つまで登録可能。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
引数:   キャンセル時
	a1.l=0
	d2.l=登録終了時に返ってきたresult code

戻り値: d0.l=0   キャンセル完了(ok)
	d0.l=−1 エラー

備考:   result codeにより任意のプログラムの登録キャンセルが可能。
--------------------------------------------------------------------------------
ファンクション$41       jump_active

機能:   [!]/[@]/[end]コマンドの有効化/無効化スイッチ

引数:   d2.l=0         無効
	d2.l≠0         有効

戻り値: なし

備考:   演奏中は無効。ZMD作成前にのみ有効。
--------------------------------------------------------------------------------
ファンクション$42       set_mclk

機能:   全音符の絶対音長を設定する

引数:   d2.l=1〜254

戻り値: なし

備考:   演奏中は無効。ZMD作成前にのみ有効。
--------------------------------------------------------------------------------
ファンクション$43       picture_sync

機能:   映像同期モードのオン/オフ

引数:   d2.l=0  映像同期モードオフ
	    ≠0  映像同期モードオン
戻り値: 状態		設定しようとする状態	結果
	ON			OFF		OFF(正常終了:d0.l=0)
	ON			ON		エラー(d0.l=−1)
	OFF			OFF		エラー(d0.l=−1)
	OFF			ON		ON(正常終了:d0.l=0)

備考:  具体的な使用方法についてはMEASURE14を参照のこと。
--------------------------------------------------------------------------------
ファンクション$44  mask_channels

機能:   演奏チャンネルのマスクキングを行う

引数:   d2.l=マスクしたいチャンネルのビットパターン
	bit=1 mask ch
	bit=0 enable ch

備考:   m_ch("fm")または(B0)のときはビット0〜24がFM1〜8, ADPCM1, MIDI1〜16に対応し
	m_ch("midi")または(B1)のときはビット0〜24がMIDI1〜16, FM1〜8, ADPCM1に
	対応する。
	'm_ch()',(Bn)によらずPCM8独立チャンネルモード時はビット25〜31が
	ADPCM2〜8に対応する。
--------------------------------------------------------------------------------
ファンクション$45  buffer_info

機能:   各バッファのアドレス、サイズ、終了アドレスの情報を得る

引数:   なし

戻り値:  0(a0)=トラックバッファの先頭アドレス   trk_top
	 4(a0)=トラックバッファのサイズ         trk_buf_size
	 8(a0)=トラックバッファ終了アドレス     trk_buf_end
	      =ZMUSICの最終アドレス       (dev_end_adr)
	12(a0)=ADPCMバッファ先頭アドレス   adpcm_buffer_top
	16(a0)=ADPCMバッファサイズ         adpcm_buffer_size
	20(a0)=ADPCMバッファ終了アドレス   adpcm_buffer_end
	24(a0)=汎用ワークエリア先頭アドレス     adpcm_work_top
	28(a0)=汎用ワークエリアサイズ           adpcm_work_size
	32(a0)=汎用ワークエリア終了アドレス     adpcm_work_end

	36(a0)=新規に登録される                 adpcm_buffer_next
	       ADPCMデータが
	       格納されるアドレス
	       adpcm_buffer_top≦adpcm_buffer_next≦adpcm_buffer_end

	40(a0)=次にワークが使用される場合の     adpcm_work_now
	       汎用ワーク使用可能開始アドレス
	       adpcm_work_top≦adpcm_work_now≦adpcm_work_end

	44(a0)=汎用ワークエリアの本当のサイズ   adpcm_work_true_size

	48(a0)=演奏トラックワーク格納アドレス   seq_wk_tbl
	52(a0)=効果音トラックワーク格納アドレス seq_wk_tbl2

	56(a0)=ADPCMデータの管理テーブル   adpcm_tbl
	       格納アドレス

	60(a0)=波形メモリの管理テーブル         wave_tbl
	       格納アドレス

	64(a0)=FM音源音色バッファのアドレス   neiro

	68(a0)=各トラックの先頭アドレス	 trk_po_tbl
		格納テーブルアドレス(1,2,3,...80)

	72(a0)=m_allocで確保した各トラックの	 trk_len_tbl
		サイズ格納アドレス(1,2,3,...80)

備考:   各バッファのアドレスを書き替えることによって、バッファを外部のものに
	切り換えたりすることも可能となる。たとえばADPCMバッファを
	ZMUSIC常駐時に確保しなかったとしても、あとで、別プログラムが
	用意した領域を指し示すようにadpcm_buffer_top等を書き替え、
	ポインタであるadpcm_buffer_nextをadpcm_buffer_next=adpcm_buffer_top
	と初期化してやれば、その領域をADPCMバッファとして使用できるように
	なる。
	  汎用ワークエリアはADPCMコンフィギュレーションファイルの
	一時退避場所としてや、波形メモリのバッファ(ZMS時)、
	ADPCMデータ加工時のワークとして使用されておりデータ内容保守の
	関係で状況に応じてワークサイズ(adpcm_work_size)が伸縮する。よって
	汎用ワークエリアを外部プログラムで用意したものと差し換えるには
	adpcm_work_top,adpcm_work_size, adpcm_work_endを設定しさらに
	adpcm_work_now=adpcm_work_top
	adpcm_work_true_size=adpcm_work_size
	とする必要がある。
--------------------------------------------------------------------------------
ファンクション$46       set_zpd_tbl

機能:   ZPDデータの情報を登録する

引数:   a1.l=ZPD情報テーブルのアドレス
	(a1.l=ZPDファイルの先頭アドレス+8に相当)

戻り値: なし

備考:   ADPCMデータの管理テーブルであるadpcm_tblの先頭からノート番号0から順番に
		ADPCM データ格納アドレス(.L), ADPCM データサイズ(.L)……
	のように格納されている。adpcm_tblのアドレスはファンクション$45で
	求めることができるので、まったく外部のプログラムから
	ADPCMデータの差し換えをすることも可能。
--------------------------------------------------------------------------------
ファンクション$47  set_output_level

機能:   演奏チャンネルの出力割合を設定する

引数:   d2.l=変更したいチャンネルのビットパターン
	bit=1 変更希望チャンネル
	bit=0 変更しないチャンネル
	d3.b=0〜127     (出力レベル。0は消音)
	d3.b=128以上    (通常に戻す)
備考:   m_ch("FM")または(B0)のときはビット0〜24がFM1〜8, ADPCM1, MIDI1〜16に対応し
	m_ch("MIDI")または(B1)のときはビット0〜24がMIDI1〜16, FM1〜8, ADPCM1に
        対応する。
	'm_ch()',(Bn)によらずPCM8独立チャンネルモード時はビット25〜31が
	ADPCM2〜8に対応する。
	FM音源の場合は変化が指数関数的であるので注意
	(d3.b=90付近でほとんど消音する)。
--------------------------------------------------------------------------------
ファンクション$48  eox_wait

機能:   EOX($F7)送信後のウェイト時間を設定する

引数:   d2.l=ウェイト値(0〜65535)

備考:   d2.l=0          ウェイトなし
	d2.l=1          ウェイト最小(約0.017秒)
	d2.l=65535      ウェイト最大(約1092秒)
--------------------------------------------------------------------------------
ファンクション$49  set_wave_form1

機能:   波形メモリの登録(その1)

引数:   a1.l=波形データ先頭アドレス
	d2.l=データサイズ(データ数ではなくてデータの物理サイズ)
	d3(bit16〜23)=波形番号(8〜31)
	d3(bit24〜31)=ループ・タイプ(0〜2)
	d3.w=ループポイント(0〜65535)

戻り値: なし
	d0.l=エラーコード

備考:波形メモリの具体的な仕様についてはMEASURE5を参照。
--------------------------------------------------------------------------------
ファンクション$4a  set_wave_form2

機能    波形メモリの登録(その2)

引数    a1.l=波形データ先頭アドレス
	d2.l=データ数(データの物理サイズではなくてデータの個数)
	d3(bit16〜23)=波形番号(8〜31)
	d3(bit24〜31)=ループ・タイプ(0〜2)
	d3.w=ループポイント(0〜65535)

戻り値: なし
	d0.l=エラーコード

備考:波形メモリの具体的な仕様についてはMEASURE5を参照。
--------------------------------------------------------------------------------
ファンクション$4b  mask_tracks

機能:   トラック単位のマスク

引数:   d2.l=そのトラックのマスクを解除する(1〜80)
	d2.l=0(全トラックマスク解除)
	d2.l=そのトラックをマスクする(−80〜−1)

備考:   すでにファンクション$44のチャンネルマスクでマスクしてあると
	それらは以後トラックマスクとして処理される。つまり以後本ファンクションで
	制御可能となる。
--------------------------------------------------------------------------------
ファンクション$4c  set_output_level2

機能:   トラック単位の出力割合を設定する

引数:   d2.l=変更したいトラック番号(1〜80)
	d2.l=0 (全トラックを操作対象とする)
	d3.b=0〜127     (出力レベル。0は消音)
	d3.b=128以上    (通常に戻す)

備考:   すでにファンクション$44のチャンネルマスクでマスクしてあると
	それらは以後トラックマスクとして処理される。つまり以後本ファンクションで
	制御可能となる。
--------------------------------------------------------------------------------
ファンクション$4d  get_loop_time

機能:   演奏中の現在の繰り返し回数を得る

引数:   なし

戻り値: d0.l=1〜255(現在の繰り返し回数)
	d0.l<0(演奏終了、または停止中)
--------------------------------------------------------------------------------
ファンクション$4e  get_1st_comment

機能:   演奏中の演奏データに登場した最初のコメント文を得る

引数:   なし

戻り値: a0.l=文字列格納アドレス。文字列の終端は$00。
------------------------------------------------------------------------------
ファンクション$4f  int_start

機能:   ZMUSICの割り込みを再開する

引数:   なし

戻り値: なし

備考:  通常は用いる必要はない。ファンクション$0eで割り込みを停止/禁止した
    あとで、割り込みを復帰する目的等で使う。
------------------------------------------------------------------------------
ファンクション$50       zm_status

機能:   ZMUSICの常駐状況の情報テーブルのアドレスを返す

パラメータ: なし

戻り値:	a0.l=情報テーブルの格納アドレス

備考:	情報テーブルの内容は以下のとおり。
	 0(a0).b=MIDIチャンネル有効か (ne=有効,0=無効)
	 1(a0).b=$FF	RS232C MIDI
		 $00	MIDI I/F(CZ6BM1相当品)
		 $01	POLYPHON MIDI
	 2(a0).b=強制MIDIチャンネル有効モードか (ne=YES,0=NO)
	 3(a0).b=ADPCMの発音にPCM8.Xを使用中か (ne=YES,0=NO)
	 4(a0).w=PCM8モード (minus=独立チャンネルモード,plus=ポリモード)
	 6(a0).bの第0ビット=1 ジュークボックス類が常駐している。
			   =0 常駐していない
	 6(a0).bの第1ビット=1 演奏制御を割り込みで行なうプログラムが
			      常駐している。(ZP /Dなど)
			   =0 常駐していない
	 7(a0).b=$01	演奏待機状態(ファンクション$54参照)
		=$FF	演奏開始
			(このエリアを外部アプリケーションで$00にしておけば
			 演奏開始や演奏待機状態になったことを知ることができる)
	 8(a0).b}
	:	} 直前に読んだファイルのファイル名(ZPD,MDD,CNFなど)
	98(a0).b}

	-$1(a0)} エラーが発生した場合、そのエラーコードが、このエリアに
	 :     } 格納される。-$8(a0)がいちばん新しく発生したエラーで、
	-$8(a0)} -$1(a0)がいちばん昔に発生したエラー。古い物はどんどん
		  切り捨てられていく。外部アプリケーション側でこの8バイトを
		 初期化($00に)しておけば、その時点から発生したエラーを
		 知ることができる。
	-$c(a0).l	ZMUSICの割り込みが発生されるたびにインクリメントされる
			ここをアプリケーション側でクリアしておけば
			その時点からのステップカウントが求められる
			(ZMUSICの割り込みは1ステップカウントごとに
			発生する)。

注意	ワークの書き換えはZMUSICプログラム本体を十分理解してから行なうこと。
--------------------------------------------------------------------------------
ファンクション$51  sc55_init

機能:   SC55の初期化を行なう

引数:   d3.b=デバイスID(d3.b=−1で前回のを使用する)

戻り値: なし
------------------------------------------------------------------------------
ファンクション$52  mt32_init

機能:   MT32の初期化を行なう

引数:   d3.b=デバイスID(d3.b=−1で前回のを使用する)

戻り値: なし
------------------------------------------------------------------------------
ファンクション$53  リザーブ

機能:

引数:

戻り値:
------------------------------------------------------------------------------
ファンクション$54	intercept_play

機能:	演奏開始制御

引数:	d2.l=-1 演奏させないモードに設定
	d2.l=0  演奏させないモードを解除、
		 さらにトラックバッファ内の演奏データを演奏開始
	d2.l=1  演奏させないモードを解除

戻り値:	なし

備考:	演奏させないモードに設定したあとは、あとで必ずモード解除
	(d2.l=0 か d2.l=1)を行なうこと
--------------------------------------------------------------------------------
ファンクション$55	m_inp1

機能:	1バイトMIDI入力

引数:	d2.l=0	入力データがない場合はエラーコードを持って帰還
	d2.l≠0	入力データがない場合は1/60×d2.l秒間データの受信を待つ

戻り値:	d0.b=入力データ
	ただし、d0.l=負の場合はエラー
--------------------------------------------------------------------------------
ファンクション$56	m_out1

機能:	1バイトMIDI出力

引数:	d2.b=出力データ

戻り値:	なし
--------------------------------------------------------------------------------
ファンクション$57	occupied_size

機能:	各バッファの実際の使用容量を返す

引数:	a1.l=戻り値の格納バッファアドレス(12バイト必要)

戻り値:	なし

備考:	0(a1).l	トラックバッファの使用容量
	4(a1).l	ADPCMバッファの使用容量
	8(a1).l	汎用ワークエリアの使用容量
--------------------------------------------------------------------------------
{ -- ZM11.MAN ------------------------------------------------

	    MEASURE11
		 エラー


  ここではエラー発生時のエラーメッセージ、

エラーの原因と対処方法について解説します。


11.1.  MUSICZ.FNCのエラー


−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:1
メッセージ:パラメータの省略は出来ません
原因と処置:省略できないパラメータが省略されている。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:2
メッセージ:トラック番号が規定外です
原因と処置:トラック番号の有効範囲は1〜80。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:3
メッセージ:ZMUSIC.Xが未登録です
原因と処置:ZMUSIC.Xを組み込んでいなければ演奏は出来ない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:4
メッセージ:トラックバッファのサイズの指定が規定外です
[原因と処置:トラックバッファサイズの有効範囲は100〜65535。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:5
メッセージ:トラックバッファの確保ができません
原因と処置:トラックバッファが不足していると考えられるのでZMUSIC.Xを
	   一度、解除してトラックバッファを大き目に設定して再常駐してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:6
メッセージ:チャンネル番号が規定外です
原因と処置:チャンネル番号の有効範囲は1〜25。
	   ただしPCM8独立チャンネルモード時は1〜32。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:7
メッセージ:配列の型が規定外です
原因と処置:配列変数の型を命令の仕様通りにする。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:8
メッセージ:ZMUSIC.Xは現在動作を停止中です
原因と処置:外部のアプリケーションによりZMUSIC.Xが動作を停止している。
	   そのアプリケーションでZMUSIC.Xを再始動させる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:9
メッセージ:Iコマンドの使用法に誤りがあります
原因と処置:バンク番号は上位バイト下位バイト分けて書かなければならない。
	   有効範囲は両方とも0〜127である。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:10
メッセージ:この命令はコンパイル出来ません
原因と処置:その命令はステートメントではなくコマンドである。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:11
メッセージ:@Xコマンドの使用法に誤りがあります
原因と処置:値は最低1個は書かなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:12
メッセージ:@Iコマンドの使用法に誤りがあります
原因と処置:各パラメータの有効範囲は0〜127。値の省略はできない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:13
メッセージ:相対ボリュームの指定に誤りがあります
原因と処置:相対ボリュームのパラメータの有効範囲は1〜127。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:14
メッセージ:@Cコマンドの使用法に誤りがあります
原因と処置:FM音源部とMIDI音源部ではその機能が違う点に注意。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:15
メッセージ:@Aコマンドの使用法に誤りがあります
原因と処置:振幅値の有効範囲は0〜127。また、パラメータが多すぎたりして
	   いないか確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:16
メッセージ:内蔵音源には無関係のコマンドです
原因と処置:MIDI専用の命令をFM音源やADPCMに対して使用している。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:17
メッセージ:@Hコマンドの使用法に誤りがあります
原因と処置:モジュレーションディレイの有効範囲は0〜65534。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:18
メッセージ:@Sコマンドの使用法に誤りがあります
原因と処置:モジュレーションスピードの有効範囲は1〜16383。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:19
メッセージ:未定義のMMLです
原因と処置:ZMUSIC.Xには存在しないコマンドを実行しようとした。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:20
メッセージ:未定義の[〜]コマンドです
原因と処置:ZMUSIC.Xには存在しないコマンドを実行しようとした。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:21
メッセージ:]がありません
原因と処置:[〜]系のコマンドで終端の]がない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:22
メッセージ:繰り返し回数が規定外です
原因と処置:繰り返し回数の有効範囲は1〜255。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:23
メッセージ:繰り返し構造が異常です
原因と処置:多重ループを組んだ場合はネスト構造になっていなければならない。
	   詳しくはMEASURE5 |:〜:|コマンドの項を参照。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:24
メッセージ:繰り返し番号が規定外です
原因と処置:繰り返し番号の有効範囲は1〜255。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:25
メッセージ:オクターブ値がありません
原因と処置:オクターブの値を書く。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:26
メッセージ:オクターブ値が規定外です
原因と処置:オクターブ値の有効範囲は−1〜9。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:27
メッセージ:音長が規定外です
原因と処置:音楽的音長の有効範囲は1〜64。絶対音長の有効範囲は1〜65534。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:28
メッセージ:トラックバッファが不足しています
原因と処置:'m_alloc()'命令または(M)命令で、そのトラックのトラックバッファを
	   大き目に確保し直す。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:29
メッセージ:@Bコマンドの使用法に誤りがあります
原因と処置:ベンド値の有効範囲は-8192〜8191。ディレイ値の有効範囲は0〜32767。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:30
メッセージ:ADPCMには無関係のコマンドです
原因と処置:FM音源やMIDI音源用のコマンドをADPCMに対して使用出来ない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:31
メッセージ:タイの指定方法に誤りがあります
原因と処置:'&'コマンドや'^'コマンドの使用方法に誤りがあるか、 
	   '^'コマンドにおいて合計音長が65534を超えている可能性がある。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:32
メッセージ:Tコマンドの使用法に誤りがあります
原因と処置:テンポの値の有効範囲は
	   タイマーAモード:77〜300
	   タイマーBモード:20〜300
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:33
メッセージ:@Tコマンドの使用法に誤りがあります
原因と処置:タイマー値の有効範囲は
	   タイマーAモード:0〜1023
	   タイマーBモード:0〜255
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:34
メッセージ:音長値がありません
原因と処置:音長を記述する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:35
メッセージ:音量値がありません
原因と処置:音量値を記述する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:36
メッセージ:音量値が規定外です
原因と処置:音量値の有効範囲は0〜16。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:37
メッセージ:@Kコマンドの使用法に誤りがあります
原因と処置:ベンド値の有効範囲は-768〜768。ディレイ値の有効範囲は0〜32767。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:38
メッセージ:キーコードの値が規定外です
原因と処置:キーコードの有効範囲はオクターブ−1のCからオクターブ9のGまで。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:39
メッセージ:音色番号が規定外です
原因と処置:音色番号の有効範囲はFM音源では1〜200、MIDIでは1〜128、
	   ADPCMのバンクは1〜4。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:40
メッセージ:}がありません
原因と処置:連符コマンドの終端記号を書く。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:41
メッセージ:{〜}内に音符が多すぎます
原因と処置:音符の数が多すぎるためそれぞれの音符の音長が、計算結果で
	   アンダーフローを起こしていると考えられる。音符の数を減らすか
	   絶対音長指定を用いる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:42
メッセージ:{〜}内に音符がありません
原因と処置:音符を書く。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:43
メッセージ:Q,@Qコマンドの使用法に誤りがあります
原因と処置:Qコマンドのパラメータの有効範囲は1〜8。
	   @Qコマンドの有効範囲は1〜32768。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:44
メッセージ:{〜}の中に規定外のものが存在します
原因と処置:連符内には音長を操作するコマンド(L,@L,Q,@Q,^)を使用出来ない。
	   音長を操作するコマンドがないか確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:45
メッセージ:Yコマンドの使用法に誤りがあります
原因と処置:レジスタ番号、コントロール番号、データが不適当でないか確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:46
メッセージ:Jコマンドの使用法に誤りがあります
原因と処置:パラメータのトラック番号の有効範囲は1〜80である。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:47
メッセージ:P/@Pコマンドの使用法に誤りがあります
原因と処置:Pコマンドの有効範囲は0〜3、@Pコマンドの有効範囲は0〜127。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:48
メッセージ:Kコマンドの使用法に誤りがあります
原因と処置:Kコマンドの有効範囲は−768〜+768。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:49
メッセージ:和音コマンドの使用法に誤りがあります
原因と処置:和音コマンドの'〜'中に不適当なコマンドが記述されていないか
	   確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:50
メッセージ:和音の数が多すぎるか、あるいは後ろの’がありません
原因と処置:和音コマンドでは8和音以上の和音を発音できない。
	   単に終端記号を付け忘れている場合はそれを記述する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:51
メッセージ:@Vコマンドの使用法に誤りがあります
原因と処置:@Vコマンドの有効範囲は0〜127。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:52
メッセージ:ポルタメントコマンドの使用法に誤りがあります
原因と処置:ポルタメントコマンド(〜)中に不適当なコマンドが記述されていないか
	   確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:53
メッセージ:ベロシティの値が規定外です
原因と処置:ベロシティの有効範囲は0〜127。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:54
メッセージ:N/@Nコマンドの使用法に誤りがあります
原因と処置:チャンネル番号の有効範囲は1〜25。
	   ただしPCM8独立チャンネルモード時は1〜32。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:55
メッセージ:@Mコマンドの使用法に誤りがあります
原因と処置:振幅値の有効範囲は-32768〜32767。また、パラメータが多すぎたりして
	   いないか確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:56
メッセージ:Hコマンドの使用法に誤りがあります
原因と処置:2つのパラメータ両方の省略はできない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:57
メッセージ:@Zコマンドの使用法に誤りがあります
原因と処置:アフタータッチの値は0〜127でなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:58
メッセージ:パラメータの指定方法が規定外です
原因と処置:パラメータの個数や設定有効範囲を確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:59
メッセージ:ディレイの値が長すぎます
原因と処置:ポルタメントのディレイの有効範囲は0〜32767。
	   和音のディレイの有効範囲は0〜255。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:60
メッセージ:ADPCM用のバッファが不足しています
原因と処置:ZMUSIC.Xを一度、常駐解除してADPCMバッファを大きめに
	   設定して再常駐してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:61
メッセージ:ADPCMの使用は出来ません
原因と処置:ADPCMバッファを確保しないで常駐させたためADPCMの使用が
	   出来なくなっている。ZMUSIC.Xを一度、常駐解除してから
	   ADPCMバッファを確保して再常駐してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:62
メッセージ:ディスクの読み込みに失敗しました
原因と処置:ファイルが見当たらないか、ファイルが壊れているか、
	   ファイルサイズが異常。読み込み先デバイスの状態を
	   もう一度、確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:63
メッセージ:Wコマンドの使用法に誤りがあります
原因と処置:パラメータのトラック番号の有効範囲は1〜80である。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:64
メッセージ:ワークエリアが不足しています
原因と処置:ZMUSIC.Xを一度、常駐解除してワークを大き目に設定して
	   再常駐してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:65
メッセージ:正体不明のエラーが発生しました
原因と処置:他のプログラム等によってZMUSIC.Xが破壊されている可能性が
	   あるので必要ファイルをセーブして、すみやかにリセットすべきである。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:66
メッセージ:バージョンナンバーが違うか、あるいはZMUSIC用のデータではありません
原因と処置:X68kシステムディスク付属のDUMP.Xなどで
	   演奏データを確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:67
メッセージ:ADPCM音色定義コマンドの使用法に誤りがあります
原因と処置:文法が違うかパラメータの与え方がおかしいと考えられる。
	   MEASURE6を参照。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:68
メッセージ:MIDIインターフェースボードが未装着です
原因と処置:MIDIボードが装着されていない時はMIDI楽器を操作出来ない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:69
メッセージ:MIDI楽器に対するパラメータが規定外です
原因と処置:楽器個別コマンドの仕様を確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:70
メッセージ:パラメータ値が規定外です
原因と処置:その命令のパラメータの有効範囲をもう一度確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:71
メッセージ:ファイルの書き出しに失敗しました
原因と処置:ファイル名が異常か、ディスクが書き込み禁止であったり、
	   フリーエリアが不足している可能性がある。書き込み先のデバイスを
	   もう一度確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:72
メッセージ:Xコマンドの使用法に誤りがあります
原因と処置:値は最低1個は書かなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:73
メッセージ:データは受信されていません
原因と処置:MIDIケーブルが断線しているか、送信側のMIDI楽器の操作を
	   誤っている可能性がある。楽器のマニュアルとMIDIケーブルが正しく
	   接続されているか確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:74
メッセージ:波形番号が規定外です
原因と処置:波形番号の有効範囲は0〜31。ただし、波形番号0〜3はプリセット波形、
	   波形番号8〜31はユーザー波形(波形メモリ)。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:75
メッセージ:Mコマンドの使用法に誤りがあります
原因と処置:ピッチ・モジュレーションのモードは0〜2、ARCCモードは0〜1。
	   Mコマンドの値を両方省略していないか確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:76
メッセージ:波形メモリ登録コマンドの使用法に誤りがあります
原因と処置:ループパターンが0〜2になっているか、ループポイントの値が正しいかを
	   確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:77
メッセージ:;コマンドの使用法に誤りがあります
原因と処置:パラメータは最低1個は必要。パラメータの有効範囲は0〜255。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:78
メッセージ:¥コマンドの使用法に誤りがあります
原因と処置:スピードパラメータの絶対値は85以下。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:79
メッセージ:?コマンドの使用法に誤りがあります
原因と処置:パラメータの有効範囲は0〜255。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:80
メッセージ:@Fコマンドの使用法に誤りがあります
原因と処置:周波数パラメータの有効範囲は0〜6。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:81
メッセージ:@Gコマンドの使用法に誤りがあります
原因と処置:パラメータの有効範囲は0〜127。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:82
メッセージ:@Yコマンドの使用法に誤りがあります
原因と処置:パラメータの個数は3つ、または4つ。各パラメータの有効範囲は0〜127。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:83
メッセージ:@Eコマンドの使用法に誤りがあります
原因と処置:パラメータは最低1個は必要。パラメータの有効範囲は0〜127。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−


11.2.  ZMSファイルコンパイル時のエラー


  ZMSファイルを

A>zmusic -c ファイルネーム

とするとZMSをコンパイルしたZMDを得ることができるが、この時ZMSに

誤りがあれば当然エラーを発生する。この時のエラーメッセージは英文になるが

エラーメッセージの末尾についた番号はMUSICZ.FNCのエラーと

対応したものになっている。たとえば

MUSIC.OPM	22	ILLEGAL CHANNEL NUMBER AT @N (No.54)

と出た場合、MUSICZ.FNCのエラーのエラー番号54と同内容のエラー
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー番号:54
メッセージ:チャンネルアサインコマンドの使用法に誤りがあります
原因と処置:チャンネル番号の有効範囲は1〜25。
	   ただしPCM8独立チャンネルモード時は1〜32。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
が発生している事をあらわす。

  つまりZMSコンパイル時に発生するエラーの多くは全くMUSICZ.FNCの

エラーと1対1に対応するものなので説明は省略する。

  ここではZMSのコンパイル時に発生するエラーでMUSICZ.FNCのエラーと

対応しないもののみを示す。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:SYNTAX ERROR.
原因と処置:あるZMSコマンドのパラメータを最後まで書かないで、次の
	   ZMSコマンドを実行しようとしていたり、ファイルが終わっていたり
	   して正常にZMSコマンドを実行できない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:(A) COMMAND ERROR.
原因と処置:チャンネルアサインのZMSコマンドの使用法に誤りがある。
	   チャンネル番号の有効範囲は1〜25。
	   ただしPCM8独立チャンネルモード時は1〜32。
	   また、トラック番号の有効範囲は1〜80。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:(M) COMMAND ERROR.
原因と処置:トラックバッファ確保のZMSコマンドの使用法に誤りがある。
	   トラック番号の有効範囲は1〜80で、バッファサイズの有効範囲は0〜65535。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:(T) COMMAND ERROR.
原因と処置:MML書き込みコマンドのZMS命令の使用法に誤りがある。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:FM VOICE SET COMMAND ERROR.
原因と処置:FM音源の音色設定のZMSコマンドの使用法に誤りがある。
	   音色のパラメータの書式や有効範囲はMEASURE4を参照。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:ADPCM CONFIGURATION COMMAND ERROR.
原因と処置:ADPCMの登録ZMSコマンドの使用法に誤りがある。
	   書式やパラメータの意味や有効範囲はMEASURE6を参照。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:ILLEGAL PARAMETER FORMAT IN COMMON COMMAND.
原因と処置:ZMSの共通コマンドにおいて不当にパラメータ等を省略している。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:WORK AREA IS TOO SMALL.
原因と処置:ワークエリアが不足している。一度、ZMUSIC.Xを常駐解除して
	  ワークエリアを大きめに設定して再常駐させる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:(O) COMMAND ERROR.
原因と処置:テンポ設定ZMSコマンドの使用法に誤りがある。設定できるテンポは
	   タイマAモードの時は77〜300、タイマBモードの時は20〜300。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:UNDEFINED COMMAND ERROR.
原因と処置:未定義のZMS共通コマンドを使用しようとした。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:PARAMETER OUT OF RANGE.
原因と処置:有効範囲を越えた値をZMSの共通コマンドのパラメータとして
	   与えている。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃				エラーファイルの活用			      ┃
┃									      ┃
┃									      ┃
┃  コンパイル時のエラーメッセージをうまく活用すると開発効率が上がります。    ┃
┃									      ┃
┃  例えば、以下のようにして'MUSIC.ZMS'というZMSをコンパイルした場合、     ┃
┃									      ┃
┃A>zmusic -c MUSIC > ER						      ┃
┃									      ┃
┃エラーが発生すると'ER'というファイルネームのファイルが出来ます(これを       ┃
┃									      ┃
┃エラーファイルと呼びます)。さて、ここで				      ┃
┃									      ┃
┃A>ed ER								      ┃
┃									      ┃
┃としてエディタでエラーファイルを読み込んで下さい。エラーファイルの読み込みを┃
┃									      ┃
┃確認したら[ESC]を押してから[V]を押して下さい。するとMUSIC.ZMSファイルを     ┃
┃									      ┃
┃読み込み、'MUSIC.ZMS'のエラーの発生した行へとカーソルがジャンプします(これは┃
┃									      ┃
┃エディタED.Xのタグジャンプという機能です)。後はエディタで誤った箇所を   ┃
┃									      ┃
┃訂正するだけです。エラーが複数あった場合は[SHIFT]+[F6]で、もう一度	      ┃
┃									      ┃
┃エラーファイルの画面にして次のエラーメッセージの行にカーソルを動かして      ┃
┃									      ┃
┃再び[ESC]+[V]を実行してみましょう。すると'MUSIC.ZMS'ファイルのそのエラーの ┃
┃									      ┃
┃ある行へジャンプしているはずです。こうしてエラーを修正していきます。エラーが┃
┃									      ┃
┃全くない場合はエラーファイルは「空」になります。			      ┃
┃									      ┃
┃  ちなみにエラーファイルは						      ┃
┃									      ┃
┃MUSIC.ZMS      18      SYNTAX ERROR					      ┃
┃MUSIC.ZMS      35      M_TRK ERROR					      ┃
┃                :							      ┃
┃                :							      ┃
┃									      ┃
┃のようにファイル名、行番号、エラー内容の順番になっています(タグファイル     ┃
┃									      ┃
┃フォーマット)。							      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


11.3.  ZPCNV.Rのエラー


−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:File open error. Does the FILENAME1 surely exist in your device?
原因と処置:ADPCMコンフィギュレーションファイルが読み込めない。
	   記憶デバイスにファイルがあるか確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:File read error. Check FILENAME1.
原因と処置:ADPCMコンフィギュレーションファイルの読み込みに失敗した。
	   ファイルが破壊されていないか確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:???? is unable to read.
原因と処置:ADPCMデータの読み込みに失敗した。そのファイルが本当に
	   存在しているかどうか確認してみる。また、環境変数'zmusic'のパスが
	   正しく設定されているか確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal File length.
原因と処置:読み込もうとしたADPCMデータのファイルサイズが異常。
	   大きすぎるか、ファイルサイズが0の可能性がある。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:File open error. Check FILENAME2.
原因と処置:書き込み用ファイルがオープン出来ない。異常なファイルネームを
	   指定しているか、記憶デバイスが書き込み禁止になってる可能性がある。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:File write error. Check FILENAME2.
原因と処置:ZPDの書き込みに失敗した。記憶デバイスの容量が十分かどうか
	   確認してみる。また、ファイルネームが異常でないか、書き込み禁止の
	   ファイルに対して上書きしようとしていないかなどを確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Out of memory.
原因と処置:作業メモリが不足している。メモリを増設するか、
	   必要のないプログラムの常駐を解除しフリーエリアを確保する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Syntax error.
原因と処置:ADPCMコンフィギュレーションの文法に誤りがある。
	   文法や用法の詳しい解説はMEASURE6を参照。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Refered to empty note number.
原因と処置:参照しようとしたノート番号にはADPCMが登録されていない。
	   ADPCMコンフィギュレーションファイルの内容を
	   もう一度確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal parameter format.
原因と処置:数値を不当に省略している。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal note number.
原因と処置:ノート番号の有効範囲は0〜511。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal pitch shift parameter.
原因と処置:音程変更の有効範囲は−12(1オクターブ下)〜+12(1オクターブ上)まで。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal volume value.
原因と処置:音量変更の有効範囲は1%〜300%まで。ただし原音量を100とする。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal delay value.
原因と処置:ミキシングディレイの有効範囲は0〜65535。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Cut size is too big.
原因と処置:ADPCMの切り出しサイズの有効範囲は0〜65535。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal offset value.
原因と処置:フェード・イン/アウト・オフセット、切り出しオフセットの
	   有効範囲は0〜65535。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal output level.
原因と処置:フェード・イン/アウト・レベルの有効範囲は0〜127。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal Bank number.
原因と処置:ADPCMのバンクの有効範囲は1〜4。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−


11.4.  ZP.Rのエラー


  ZP.RがZMUSIC.Xを制御してその際に発生したエラーは、

ERROR n

として表示される。nはエラーコードでMUSICZ.FNCのエラーの

エラーコードと同一である。ここでは、ZP.R特有のエラーについてだけ

解説する。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:V-DISP interrupt has already used by other applications.
原因と処置:ZP.Rのジュークボックス機能やデバグ・ツールでは
	   V−DISP割り込みを使用する。何か別のプログラムが
	   この割り込みをすでに使用しているため、ZP.Rの常駐が
	   行えなかった。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:ZMUSIC.X is not included.
原因と処置:ZMUSIC.Xが組み込まれていないため、ZP.Rは使用できない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal file size.
原因と処置:読み込もうとしたファイルサイズが0か大きすぎる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Out of memory.
原因と処置:作業メモリが不足している。メモリを増設するか、
	   必要のないプログラムの常駐を解除しフリーエリアを確保する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Read error.
原因と処置:データの読み込みに失敗した。ファイルが破壊されていないか
	   確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:File not found.
原因と処置:ファイルが見つからなかった。記憶デバイスにそのファイルが本当に
	   存在しているか、環境変数'zmusic'が正しく設定されているか
	   確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Too many filenames are written in index-file.
原因と処置:ジュークボックスのインデックスファイルに64曲以上の曲名を
	   書いている。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:ZP.R is not kept in your system.
原因と処置:ZP.Xが常駐していないのに常駐解除を実行した。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:ZP.R has already kept.
原因と処置:ZP.Xは既に常駐しているのに、さらに常駐しようとした。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Fail in making of string MIDI data.
原因と処置:MIDIデータの文字型データ変換に失敗した。ZMUSIC.Xを
	   一度常駐解除し、トラックバッファやワークを増やして再常駐して、
	   一連の作業をもう一度やり直してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Write error.
原因と処置:ファイルの書き出しに失敗した。記憶デバイスの容量が不足していないか
	   確認してみる。また、ファイルネームが異常でないか、書き込み禁止の
	   ファイルに対して上書きしようとしていないかなどを確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Unidentified file.
原因と処置:ZMUSICシステムとは無関係のファイルをアクセスしようとした。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal command has existed.
原因と処置:ADPCM定義コマンド(n ファイルネーム,Pp,Vv,Mm,d,Cc,s,R,Ff,l)や
	   ADPCMコンフィギュレーション実行コマンド(.adpcm_list)
	   を用いたZMDはジュークボックス機能で演奏することはできない。
	   ZPDを用いて演奏するように改造する必要がある。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:ADPCM buffer is too small.
原因と処置:ADPCMバッファが小さすぎるためZPDを登録することが
	   できなかった。ZMUSIC.Xを一度常駐解除し、
	   ADPCMバッファを大き目に設定して再常駐させてもう一度
	   試してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Track buffer is too small.
原因と処置:トラックバッファが小さすぎるため演奏データを演奏することが
	   できなかった。ZMUSIC.Xを一度常駐解除し、
	   トラックバッファを大き目に設定して再常駐させて、もう一度
	   試してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Version number mismatch.
原因と処置:バージョンの違うZMDを演奏しようとした。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:MIDI is Unable to use.
原因と処置:MIDIボードがないのにMIDIの曲を演奏しようとした。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:An error is still remained in ZMD/ZMS.
原因と処置:演奏データにエラーが残っているためにステップタイムの計算(/Q)が
      行えなかった。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal parameter.
原因と処置:既定外のパラメータを設定した。パラメータを使用範囲に訂正する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−


11.5.  ZMUSIC.Xのエラー


−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:MUSIC BIOS has already included in your system.
原因と処置:ZMUSIC.Xあるいはその他の音楽ドライバーが既に
	   常駐しているため常駐できなかった。または、割り込みベクタなどが
	   不当に書き替えられている可能性がある。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Didn't you include special ADPCM driver? 
原因と処置:PCM8.X以外の何か特殊なADPCMドライバが
	   組み込まれているためZMUSIC.Xは常駐できなかった。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Out of memory.
原因と処置:作業メモリが不足している。メモリを増設するか、
	   必要のないプログラムの常駐を解除しフリーエリアを確保する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:ZmuSiC is not kept in your system.
原因と処置:ZMUSIC.Xが常駐していないのに常駐解除しようとした。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:ZmuSiC is unable to release.
原因と処置:ZMUSIC.Xが不当に書き替えられているため
	   常駐解除できなかった。また、特殊な環境から常駐をした場合、
	   常駐解除できないことがある。この時は一度その環境に戻ってから
	   常駐解除を行わなくてはならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Illegal version number.Unable to release.
原因と処置:バージョンが違うために解除出来なかった。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Unknown error! Please reset your system.
原因と処置:正体不明のエラーが発生した。プログラムが不当に書き替えられている
	   可能性がある。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:File not found.
原因と処置:コンパイルしようとしたZMSファイルが見つからない。そのファイルが
	   実在するかどうか、環境変数'zmusic'が正しく設定されているかどうかを
	   確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Write error.
原因と処置:コンパイルされて生成されたZMDの書き込みに失敗した。異常な
	   ファイルネームを設定していないか、記憶デバイスの容量は十分か
	   書き込み禁止のファイルに対して上書きしようとしていないかを
	   確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Unable to read.
原因と処置:コンパイルしようとしたZMSの読み込みに失敗した。ファイルサイズが
	   0でないかどうか、ファイルが破壊されていないかどうかを
	   確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Work area is not enough.
原因と処置:ZMSのコンパイルがワークエリア不足で中断された。ワークを大き目に
	   確保してもう一度コンパイルしてみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Track buffer is not enough.
原因と処置:ZMSのコンパイルがトラックバッファ不足で中断された。
	   トラックバッファを大き目に設定してもう一度コンパイルしてみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Block ADPCM data '〜' couldn't be found.
原因と処置:指定されたZPDが見つからない。そのZPDが実在するか、
	   環境変数'zmusic'が正しく設定されているかどうかを確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メッセージ:Start up file '〜' couldn't be found.
原因と処置:指定されたスタートアップファイルが見つからない。その
	   スタートアップファイルが実在するか、環境変数'zmusic'が
	   正しく設定されているかどうかを確認してみる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃				ビープ音について			      ┃
┃									      ┃
┃									      ┃
┃  COMMAND.Xから						      ┃
┃									      ┃
┃A>COPY  ファイルネーム  OPM					      ┃
┃									      ┃
┃として演奏させた場合に、そのファイル中にエラーがあった場合はエラーメッセージ┃
┃									      ┃
┃等は出力せずビープ音を発声します(ビープ音の登録がなされていないシステムでは ┃
┃									      ┃
┃もちろん鳴りませんが)。これは手抜きではなく、なにか別のアプリケーションから ┃
┃									      ┃
┃同様の操作をされたときにエラーメッセージなどで画面等を壊さないために        ┃
┃									      ┃
┃こうなりました。ビープ音が鳴った時はその演奏データを一度コンパイルしたりして┃
┃									      ┃
┃エラーの内容を確認すべきです。					      ┃
┃									      ┃
┃  また、MIDIデータの取り込み中にビープ音が鳴った場合はデータの	      ┃
┃									      ┃
┃取り込み用バッファ、具体的にはトラックバッファ、ワークエリアが	      ┃
┃									      ┃
┃不足しています。一度ZMUSIC.Xを解除しそれらを大き目にとって	      ┃
┃									      ┃
┃再常駐させて下さい。							      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
{ -- ZM12.MAN ------------------------------------------------

	    MEASURE12
      ZMD/ZPDフォーマット


  ここではZMDフォーマット,ZPDのフォーマットに

ついて解説します。

  一般的な使用をする限りは読み飛ばして構いません。







12.1.  解説を読むにあたって


  文中の(.B)(.W)(.L)等はデータ長を表している。
(.B)  バイト
(.W)  ワード(2バイト)
(.L)  ロングワード(4バイト)


12.2.  ZMDフォーマット


  ZMDは以下のようになっている。

$10(.B)                                       ダミーコード
"ZmuSiC"                                      ZMDファイルID
VERSION NUMBER(.B)                            現在のバージョンナンバー
共通コマンド群…                              FM音源音色設定やADPCM設定…etc.
$FF(.B)                                       共通コマンド終了コード
					      次の番地が奇数の場合は
					      もう一個$FF(.B)が来る
総トラック数(.W)
トラック1のデータアドレスまでのオフセットアドレス(.L)    }
$00(.B),トラック1の絶対チャンネル番号(.B)                }
トラック2のデータアドレスまでのオフセットアドレス(.L)    }
$00(.B),トラック2の絶対チャンネル番号(.B)                }
	     :                                            }総トラック数分ある
	     :                                            }
トラックnのデータアドレスまでのオフセットアドレス(.L)     }
$00(.B),絶対チャンネル番号(.B)                            }
各トラックの演奏データ....                    総トラック数分ある


12.3.  共通コマンド・ZMDコード


●FM音源音色設定  (ZMS (V)コマンド)
  $04(.B),音色番号(.B),音色データ(55バイト)            合計57バイト
  音色番号=1〜200
  音色のデータフォーマットはMEASURE10 ファンクション$04 m_vset参照

●テンポ  (ZMS (O)コマンド)
  $05(.B),テンポ値(.W)                                 合計3バイト
  テンポ値=20〜300

●ベースチャンネル設定  (ZMS (B)コマンド)
  $15(.B),モード値(.B)                                 合計2バイト
  モード値=0:FM音源チャンネル基準モード
  モード値≠0:MIDIチャンネル基準モード
チャンネルモードはMEASURE3 m_ch()、MEASURE4 (Bn)コマンド参照

●MIDIデータ転送  (ZMS (X)コマンド、.MIDI_DATAコマンド)
  $18(.B),データ数(.W),データ(.B),……                 合計は不定
  ローランド・エクスクルーシブ・コマンドやMIDI楽器機種別コマンドは
  このコードに展開される

●FM音源音色設定  (ZMS (@)コマンド、.FMVSETコマンド)
  $1B(.B),音色番号(.B),音色データ(55バイト)            合計57バイト
  音色番号=1〜200
音色のデータフォーマットはMEASURE10 ファンクション$04 m_vset2参照

●ADPCMコンフィギュレーション
  $40(.B),note number(.W),pitch parameter(.W),volume parameter(.W)
	 ,mix delay parameter(.W),mix note number(.W)
	 ,cut offset(.W),cut size(.W)
	 ,reverse switch(.B)
	 ,fade in/out offset(.W),fade in or out(.B),fade in/out level(.B)
	 ,filename....,0(.B)
							合計不定
				あるいは
  $40(.B),note number(.W),pitch parameter(.W),volume parameter(.W)
	 ,mix delay parameter(.W),mix note number(.W)
	 ,cut offset(.W),cut size(.W)
	 ,reverse switch(.B)
	 ,fade in/out offset(.W),fade in or out(.B),fade in/out level(.B)
	 ,0(.W),操作対象ノート番号(.W)
							合計24バイト
	note number(.W):0〜511
	fade in or out(.B):(−1:fade in,+1:fade out)
その他のパラメータの範囲については
MEASURE10 ファンクション$10  adpcm_read参照

●全音符クロックのセット  (ZMS (Z)コマンド)
  $42(.B),master clock(.B),tempo base counter(.L)       合計6バイト
      master clock:(Zn)のnの値
  tempo base counter=(16×4000×60000)/(master clock×256)

●波形メモリデータの登録  (ZMS .WAVE_FORMコマンド)
  $4A(.B),number of data(.W),登録波形番号(.B)
	 ,loop type(.B),loop point(.W),data(.W),……    合計は不定

●ADPCMコンフィギュレーション・ファイルの読み込み  (ZMS .ADPCM_LISTコマンド)
  $60(.B),FILENAME文字列…,$00(.B)                      合計は不定

●文字列表示  (ZMS .PRINTコマンド)
  $61(.B),文字列…,$00(.B)                              合計は不定

●MIDIダンプデータ(MDD)の読み込みと送信  (ZMS .MIDI_DUMPコマンド)
  $62(.B),FILENAME文字列…,$00(.B)                      合計は不定

●ZPDデータの受け渡し  (ZMS .ADPCM_BLOCK_DATAコマンド)
  $63(.B),FILENAME文字列…,$00(.B)                      合計は不定

●ダミーZMD
  $7e(.B)                                               合計1バイト
  何の機能も果たさないZMDコード 機械語のNOPに相当

●コメント  (ZMS .COMMENTコマンド)
  $7F(.B),文字列…,$00(.B)                              合計は不定


12.4.  MML・ZMDコード


■$00〜$7F
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●音階  (MML A〜G)
  ノート番号(.B),step time(.B),gate time(.B)            合計3バイト
  ノート番号:0〜127
  step time :1〜254
  gate time :1〜255(255はタイ/スラーとして扱われる)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■$80〜$8F
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●休符  (MML R)
  $80(.B),step time(.B),gate time(.B)                   合計3バイト
  step time :1〜254
  gate time :1〜255(255はタイ/スラーとして扱われる)

●ノイズモードオフ  (MML Y15,0、@O)
  $82(.B)                                               合計1バイト

●同期待ちコマンド  (MML W)
  $83(.B)                                               合計1バイト

●臨時ベロシティ復元
  $84(.b)						合計1バイト
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■$90〜9F
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●テンポ  (MML @T)
  $90(.B),タイマー値(.W)                                合計3バイト
 タイマー値の有効範囲は常駐しているタイマーの種類によって変動する
  タイマーA:0〜1023
  タイマーB:0〜255

●テンポ  (MML T)
  $91(.B),テンポ値(.W)                                  合計3バイト
  テンポ値の有効範囲は常駐しているタイマーの種類によって変動する
  タイマーA:77〜300
  タイマーB:20〜300

●相対タイマーUP  (MML @T+)
  $92(.B),相対タイマー値(.W)                            合計3バイト
  相対タイマー値(タイマAモード):1〜1023
  相対タイマー値(タイマBモード):1〜255

●相対タイマDOWN  (MML @T−)
  $93(.B),相対タイマー値(.W)                            合計3バイト
  相対タイマー値(タイマAモード):1〜1023
  相対タイマー値(タイマBモード):1〜255

●相対テンポUP  (MML T+)
  $94(.B),相対テンポ値(.W)                              合計3バイト
  相対テンポ値(タイマAモード):1〜230
  相対テンポ値(タイマBモード):1〜280

●相対テンポDOWN  (MML T−)
  $95(.B),相対テンポ値(.W)                              合計3バイト
  相対テンポ値(タイマAモード):1〜230
  相対テンポ値(タイマBモード):1〜280

●相対ピッチベンドUP  (ZMD専用命令)
  $96(.B),相対ピッチベンド値(.W)                              合計3バイト
  相対ピッチベンド値:1〜16383

●相対ピッチベンドDOWN  (ZMD専用命令)
  $97(.B),相対ピッチベンド値(.W)                              合計3バイト
  相対ピッチベンド値:1〜16383

●モジュレーション波形選択  (MML S)
  $98(.B),ピッチ・モジュレーション/拡張ピッチ・モジュレーションの波形番号(.B)
	 ,アンプリチュード・モジュレーション/拡張ARCCの波形番号(.B)
							      合計3バイト
  波形番号  0:鋸歯波、1:矩形波、2:三角波、3:鋸歯波シングル
  各パラメータとも−1を指定した場合は省略を意味する

●MIDIのピッチ・モジュレーション・モードの設定  (MML M)
  $99(.B),ピッチ・モジュレーション・モード(.B),ARCCモード(.B)
							      合計3バイト
  ピッチ・モジュレーション・モード:0=通常モード/1=拡張モード#1/2=拡張モード#2
  ARCC:0=通常モード/1=拡張モード
  各パラメータとも−1を指定した場合は省略を意味する
拡張モードについてはMEASURE5 Mコマンドの項参照

●ARCC・コントロール・チェンジ番号登録  (MML @C)
  $9A(.B),CONTROL CHANGE number(.B)
	 ,ARCC reset value(.B)
	 ,ARCC neutral value(.B)                              合計4バイト
  CONTROL CHANGE number:0〜127
       ARCC reset value:0〜127
     ARCC neutral value:0〜127
  各パラメータとも−1を指定した場合は省略を意味する

●ADPCM再生  (MML Y2,)
  $9B(.B),note number(.W)                                     合計3バイト
  note number:0〜511

●モジュレーション非同期/同期設定  (MML H)
  $9c(.b),ピッチ・モジュレーション同期スイッチ(.B)
	 ,アンプリチュード・モジュレーション/拡張ARCC同期スイッチ(.B)
							      合計3バイト
  同期スイッチ=−1:省略
	      =  0:同期オン
	      =+1:同期オフ(非同期)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■$A0〜AF
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●音色切り換え  (MML @)
  $A0(.B),音色番号(.B)                                        合計2バイト
  音色番号:1〜200

●音色切り替え  (ハードLFO/パンポットをいじらない音色設定)
  $A1(.B),音色番号(.B)                                        合計2バイト
  音色番号:1〜200

●ADPCM再生周波数変更  (MML Y13,)
  $A2(.B),周波数値(.B)                                        合計2バイト
  周波数値: 0=3.9kHz
	    1=5.2kHz
	    2=7.8kHz
	    3=10.4kHz
	    4=15.6kHz
	    5=16bit PCMデータ方式(PCM8独立チャンネルモード時)
	    6=8bit  PCMデータ方式(PCM8独立チャンネルモード時)

●チャンネルアサイン変更  (MML N,@N)
  $A3(.B),絶対チャンネル番号(.B)                              合計2バイト
  絶対チャンネル番号=
    1〜7    内蔵FM音源チャンネル1〜8
    8       内蔵ADPCM音源
    9〜24   MIDIチャンネル1〜16
    25〜31  ADPCMチャンネル2〜8(PCM8独立チャンネルモード時)

●ノイズ  (MML Y15,)
  $A5(.B),ノイズ周波数(.B)                                    合計2バイト
  ノイズ周波数:128〜159(128+0〜128+31)

●フェード・イン/アウト  (MML ¥)
  $A6(.B),フェード・イン/アウト・スピード(.B)                  合計2バイト
  フェード・イン/アウト・スピード  −85〜−1:フェード・イン
				            0:フェード・アウト・モード解除
				        1〜85:フェード・アウト
パラメータの機能と意味についての詳しい解説は
MEASURE10 ファンクション$1a fade_outを参照

●ダンパーペダル  (MML @D)
  $A7(.B),ダンパー値(.B)                                      合計2バイト
  ダンパー値:0〜127

●ベンドレンジ変更  (MML @G)
  $A8(.B),ベンド幅(.B)                                        合計2バイト
  ベンド幅:0〜127

●ADPCM周波数変更  (MML @F)
  $A9(.B),周波数値(.B)                                        合計2バイト
  周波数値: 0=3.9kHz
	    1=5.2kHz
	    2=7.8kHz
	    3=10.4kHz
	    4=15.6kHz
	    5=16bit PCMデータ方式(PCM8独立チャンネルモード時)
	    6=8bit  PCMデータ方式(PCM8独立チャンネルモード時)

●相対ボリュームUP  (MML ~)
  $AA(.B),相対ボリューム値(.B)                                合計2バイト
  相対ボリューム値:1〜127

●相対ボリュームDOWN  (MML _)
  $AB(.B),相対ボリューム値(.B)                                合計2バイト
  相対ボリューム値:1〜127

●キーオフ無しモード  (MML @R)
  $AC(.b),mode(.b)                                            合計2バイト
  mode:0=通常モード
       1=キーオフ無しモード

●絶対音長0による強制発音(MML *0)
  $AD(.B),note number(.B)                                     合計2バイト
  note number:0〜127

●アンプリチュード・モジュレーション/ARCC/拡張ARCC  (MML @A)
  $AE(.B),振幅値(.B)                                          合計2バイト
  振幅値:-128〜127

●同期信号送信コマンド  (MML W)
  $AF(.B),トラック番号(.B)                                    合計2バイト
  トラック番号:0〜79
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■$B0〜$BF
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●パンポット0  (MML P0)
  $B0(.B)                                                     合計1バイト

●パンポット1  (MML P1)
  $B1(.B)                                                     合計1バイト

●パンポット2  (MML P2)
  $B2(.B)                                                     合計1バイト

●パンポット3  (MML P3)
  $B3(.B)                                                     合計1バイト

●多段階パンポット  (MML @P)
  $B4(.B),パンポット値(.B)                                    合計2バイト
  パンポット値:0〜127

●Yコマンド  (MML Y)
  $B5(.B),レジスタ番号(.B),データ値(.B)                       合計3バイト
  レジスタ番号:0〜255
  データ番号:0〜255

●ボリューム  (MML V,@V)
  $B6(.B),ボリューム値(.B)                                    合計2バイト
  ボリューム値:0〜127
  ただし値は(127−実際の設定ボリューム)に相当する

●ADPCM  PAN  (MML Y3,)
  $B7(.B)パンポット値(.B)                                     合計2バイト
  パンポット値=0:消音
	        1:左
 	        2:右
	        3:中央

●ADPCM効果音モード設定  (MML Y14,)
  $B8(.B),モード値(.B)                                        合計2バイト
  モード値=0:通常
	  =1:効果音モード再生指定

●ベロシティ  (MML U,@U)
  $B9(.B),ベロシティ値(.B)                                  合計2バイト
  ベロシティ値:0〜127

●ピッチ・モジュレーション・スイッチ  (MML @M)
  $BB(.B),スイッチ値(.B)                                      合計2バイト
  スイッチ値=0:OFF
	    =1:ON

●アンプリチュード・モジュレーション/ARCCスイッチ  (MML @A)
  $BC(.B),スイッチ値(.B)                                      合計2バイト
  スイッチ値=0:OFF
	    =1:ON

●オートベンド・スイッチ  (MML @B)
  $BD(.B),スイッチ値(.B)                                      合計2バイト
  スイッチ値=0:OFF
	    =1:ON

●アフタータッチシーケンス・スイッチ  (MML @Z)
  $BE(.B),スイッチ値(.B)                                      合計」2バイト
  スイッチ値=0:OFF
	    =1:ON

●強制キーオフ  (MML `)
  $BF(.B)                                                     合計1バイト
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■$C0〜$CF
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●[〜]コマンド系  (MML [〜])
  $C0(.B),コマンド番号(.B)                                    合計2バイト
  コマンド番号  =0〜2        RESERVED
		=3           [D.C.]
		=4           [SEGNO][$]
		=5           [D.S.]
		=6           [CODA]
		=7           [TOCODA][*]
		=8           [FINE][^]
		=9           [DO]
		=10          [LOOP]
		=11          [!]
		=12          [@]

●リピートコマンド開始  (MML |:)
  $C1(.B),$CF(.B),repeat counts(.B)                           合計3バイト
  repeat counts:1〜255

●リピートコマンド終端  (MML :|)
  $C2(.B),オフセット(.W)                                      合計3バイト
  オフセット値は必ず正 
  次のZMDを指し示しているポインタからこのオフセットを減算することになる 
 減算の結果、ポインタはリピート開始コマンドZMDの2バイト目の$CFを指している

●リピートコマンドスキップ#1  (MML |)
  $C3(.B),回数指定値(.B),抜け出しオフセット値(.W)             合計4バイト
  回数指定値:1〜255
  抜け出しオフセット値は必ず正

●リピートコマンドスキップ#2  (MML |)
  $C4(.B),抜け出しオフセット値(.W)			      合計3バイト
  抜け出しオフセット値は必ず正

●MIDIのタイ/スラーモード指定  (MML ”)
  $C5(.B),モード値(.B)                                        合計2バイト
  モード値=0:従来モード
	    1:FM音源互換モード

●特殊コマンド制御スイッチ  (MML =)
  $C7(.B),スイッチ値(.B)                                      合計2バイト
  ビットオン(=1)でスイッチオン
	オフ(0)でスイッチオフ
	第0ビット:ピッチ・モジュレーション
	第1ビット:ARCC/AMOD
	第2ビット:オートベンド
	第3ビット:アフタータッチシーケンス

●相対パンポットUP  (MML @P+)
  $C8(.B),相対パンポット値(.B)                                合計2バイト
  相対パンポット値:1〜127

●相対パンポットDOWN  (MML @P−)
  $C9(.B),相対パンポット値(.B)                                合計2バイト
  相対パンポット値:1〜127

●相対ベロシティUP  (MML U+)
  $CA(.B),相対ベロシティ値(.B)                                合計2バイト
  相対ベロシティ値:1〜127

●相対ベロシティDOWN  (MML U−)
  $CB(.B),相対ベロシティ値(.B)                                合計2バイト
  相対ベロシティ値:1〜127

●全トラック・フェードアウト/イン  (ZMD専用命令)
  $CC(.B),フェードイン/アウト・スピード(.B)                  合計2バイト
  フェードイン/アウトスピード  −85〜−1:フェードイン
				        0:フェードアウトモード解除
				    1〜85:フェードアウト
パラメータの機能と意味についての詳しい解説は
MEASURE10 ファンクション$1a fade_outを参照

●絶対音長0による和音発音  (MML *0&)
  $CD(.B),note number(.B)                                     合計2バイト
  note number:0〜127

●強制再演奏コマンド  (MML J)
  $CE(.B),トラック番号(.B)                                    合計2バイト
  トラック番号:0〜79
  未使用のトラックに対して本命令を実行した場合の動作保証はされない

●リピートコマンドのZMDコードの2バイト目
  $C1(.B),$cf(.B),repeat counts(.B)
	   ↑
	   この部分
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■$D0〜$DF
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●ウェイト  (MML @W)
  $D0(.B),step time(.B),$00(.B)                               合計3バイト
  step time:1〜254

●キー・トランスポーズ/デチューン  (MML @K,@B)
  $D1(.B),トランスポーズ値#1(.W),トランスポーズ#2値(.W)       合計5バイト
  トランスポーズ値#1は半音=64として算出された値(−768〜+768)
  トランスポーズ値#2は半音≒683として算出された値(−8192〜+8191)

●NRPN設定  (MML @Y)
  $D2(.B),アドレス(.W),データ(.W)                             合計5バイト
  アドレス:$00,$00〜$7F,$7F
  データ:$00,$00〜$7F,$7F

●バリエーション/バンク変更 (MML I)
  $D3(.B),バリエーション番号(.W)                              合計3バイト
  バリエーション番号:$00,$00〜$7F,$7F

●ワーク直接書き換えコマンド  (MML ?)
  $D5(.B),offset(.B),data(.B)                                 合計3バイト
  offset:0〜255
  data:0〜255

●モジュレーション・スピード設定コマンド  (MML @S)
  $D6(.B),ピッチ・モジュレーション/拡張ピッチ・モジュレーションのスピード(.w)
	 ,アンプリチュード・モジュレーション/拡張ARCCのスピード(.w)
							      合計5バイト
  ピッチ・モジュレーション/拡張ピッチ・モジュレーションのスピード:1〜32767
  アンプリチュード・モジュレーション/拡張ARCCのスピード:1〜32767
  各パラメータとも0を指定した場合は省略を意味する

●ワーク直接書き換えコマンド相対UP  (MML ?a,+n)
  $D7(.B),offset(.B),data(.B)                                 合計3バイト
  offset:0〜255
  data:1〜255

●ワーク直接書き換えコマンド相対DOWN  (MML ?a,-n)
  $D8(.B),offset(.B),data(.B)                                 合計3バイト
  offset:0〜255
  data:1〜255

●臨時ベロシティ
  $D9(.B),ベロシティ値(.B)					合計2バイト
  ベロシティ値:0〜127

●臨時相対ベロシティUP
  $DA(.B),相対ベロシティ値(.B)                                合計2バイト
  相対ベロシティ値:1〜127

●臨時相対ベロシティDOWN
  $DB(.B),相対ベロシティ値(.B)                                合計2バイト
  相対ベロシティ値:1〜127
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■$E0〜$EF
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●ポルタメント  (MML (〜))
  $E0(.B),ノート番号(.B),step time(.W),gate time(.W),delay(.W)
	 ,増分(.W),補正パラメータ(.B),符号(.B)                合計12バイト
  step time:1〜32767
  gate time:1〜32767(32768以上はタイ/スラーとして扱われる)
  delay:0〜32767
  増分=int(ベンド幅÷step time)
  補正パラメータ=round(256×(ベンド幅 MOD step time)/step time)
  (増分、補正パラメータはBRESENHAMのアルゴリズムによる計算結果
   ベンド幅はFM音源トラックでは半音=64、MIDIトラックでは半音≒683
   とする)
  符号はポルタメント方向で、−1がピッチダウン、+1がピッチアップに対応する

●オートベンド  (MML @B,@K)
  $E1(.B),開始値(.W),目的値(.W),開始値(.W),目的値(.W)
	 ,ディレイ値(.W),符号(.B)                             合計12バイト
  前者の開始値/目的値は半音=64として算出された値
  後者の開始値/目的値は半音≒683として算出された値
  また、目的値は相対値で表される
  ディレイ:0〜32767
  符号はベンド方向で、−1がピッチダウン、+1がピッチアップに対応する

●和音  (MML '〜')
  $E2(.B),step time(.W),gate time(.W)
	 ,ディレイ値(.B),ノート番号1(.B)〜8                   合計14バイト
  step time:1〜32767
  gate time:1〜32767(32768以上はタイ/スラーとして扱われる)
  delay:0〜255
  ノート番号:0〜127

●アフタータッチ・シーケンス  (MML @Z)
  $E3(.B),アフタータッチ値1(.B)〜8                            合計9バイト
  アフタータッチ値:0〜127
		  :−1はノータッチ期間

●モジュレーション・デプス  (MML @M)
  $E6(.B),振幅(.W)                                            合計3バイト
  振幅:−32768〜+32768(FM音源トラック)
       0〜127(MIDIトラック・通常モード)
       −8192〜+8191(MIDIトラック)・拡張モード

●ディレイセット  (MML @H)
  $E8(.B),ピッチ・モジュレーション用ディレイ(.W)
	 ,アンプリチュード・モジュレーション/ARCC用ディレイ(.W)
							      合計5バイト
  ピッチ・モジュレーション用ディレイ:0〜65534
  アンプリチュード・モジュレーション/ARCC用ディレイ:0〜65534
  各パラメータとも−1を指定した場合は省略を意味する

●ローランド・エクスクルーシブ  (MML X)
  $EA(.B),データ(.B)…,チェックサム(.B),$FF(.B)               合計は不定
  データ:0〜127
  チェックサム:0〜127

●IDセット  (MML @I)
  $EB(.B),MAKER(.B),DEVICE(.B),MODEL(.B)                      合計4バイト
  MAKER:0〜127
  DEVICE:0〜127
  MODEL:0〜127

●MIDIデータ送信  (MML @X)
  $EC(.B),データ数(.W),データ(.B)…                           合計は不定
  データ数:1〜65535
  データ:0〜255

●エフェクト・コントロール  (MML @E)
  $ED(.B),パラメータ#1(.B),〜#3(.B)                           合計4バイト
  パラメータ#1(REVERB LEVEL):0〜127
  パラメータ#2(CHORUS LEVEL):0〜127
  パラメータ#3:未使用
  MT32/CM32L/CM64(LAパート)のケース
  パラメータ#1(パート番号):1〜8
  パラメータ#2(REVERB switch):0 or 1
  パラメータ#3:未使用
  各パラメータとも−1を指定した場合は省略を意味する

●ピッチ・モジュレーション・デプス1/8モード  (MML @M)
  $EE(.B),省略ビットパターン(.B),振幅#1(.W),…,振幅#8(.W)×8  合計18バイト
  省略ビットパターンとはそのビットに対応したパラメータが有効か
  無効(省略されている)かを表したもの
  ビット0〜7がそれぞれパラメータの1番目から8番目に対応する
  ビット=0      省略(これに対応するパラメータは意味をなさず)
  ビット=1      設定
  振幅#1〜#8:−32768〜+32768(FM音源トラック)
	     0〜127(MIDIトラック・通常モード)
	     −8192〜+8191(MIDIトラック)・拡張モード

●アンプリチュード・モジュレーション/ARCC・デプス1/8モード  (MML @A)
  $EF(.B),省略ビットパターン(.B),振幅#1(.B),…,振幅#8(.B)×8  合計10バイト
  省略ビットパターンとはそのビットに対応したパラメータが有効か
  無効(省略されている)かを表したもの
  ビット0〜7がそれぞれパラメータの1番目から8番目に対応する
  ビット=0      省略(これに対応するパラメータは意味をなさず)
  ビット=1      設定
  振幅#1〜#8:0〜127
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
■$F0〜$FF
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●NOP  (ZMD専用命令)
  $F0(.B)                                                     合計1バイト
  何も処理を行わず次へスキップ

●スキップコマンド1  (ZMD専用命令)
  $F1(.B),offset(s)(.W)                                       合計3バイト
  offset:0〜65535
  オフセット・バイトだけ先へスキップ

●スキップコマンド2  (ZMD専用命令)
  $F2(.B),offset(s)(.W)                                       合計3バイト
  offset:0〜65535
  オフセット・バイトだけ前に戻る

●ノートオフ  (MIDIトラック専用ZMD専用命令)
  $FC(.B),ノート番号(.B),ベロシティ値(.B)                     合計3バイト
  ノート番号:0〜127
  ベロシティ値:0〜127

●ノートオン  (MIDIトラック専用ZMD専用命令)
  $FD(.B),ノート番号(.B),ベロシティ値(.B)                     合計3バイト
  ノート番号:0〜127
  ベロシティ値:0〜127

●絶対音長指定音階  (MML *によって絶対音長指定された音階/休符)
  $FE(.B),ノート番号(.B),step time(.W),gate time(.W)          合計6バイト
  ノート番号:0〜127,$80,$D0($80では休符、$D0ではウェイトとなる)
  step time :0〜65534
  gate time :0〜65535(65535はタイ/スラーとして扱われる)

●トラック終了  (ZMD専用命令)
  $FF(.B)                                                     合計1バイト
  このコードを発見すると演奏を終了してそのトラックは
  ノン・アクティヴ(DEAD)となる。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−


12.5.  ZPDフォーマット


$10(.B)                                          ダミーコード
"ZmAdpCm"                                        ZPDファイルID
ノート番号(.W)                                   登録先のノート番号(0〜511)
ADPCMデータまでのオフセット・アドレス(.L)
ADPCMデータ長(.L)
ノート番号(.W)                                   登録先のノート番号(0〜511)
ADPCMデータまでのオフセット・アドレス(.L)
ADPCMデータ長(.L)
		       :
		       :
$FFFF(.W)                                                     エンドコード
ADPCMデータ…


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                             オフセット値について			      ┃
┃									      ┃
┃									      ┃
┃  ZMUSIC用のデータで扱うオフセット値はオフセット値の格納してある次の  ┃
┃									      ┃
┃アドレスからのオフセットです。今例えば、$A000番地に			      ┃
┃									      ┃
┃ワードサイズのオフセット$0E00が格納されていたとするとポイントするアドレスは ┃
┃									      ┃
┃$A002+$0E00=$AE02となります。					      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

{ -- ZM13.MAN ------------------------------------------------

	    MEASURE13
         ワークエリア


 ここでは、演奏トラックワークとその他の

ワークの内容についての解説を行います。

ZMUSIC支援ツールを制作する時などに

役立ちます。










13.1.  演奏トラックワーク


13.1.1.  演奏トラックワークの解説を読むにあたって


・演奏トラックのワークの解説は
   ワーク名(ワークサイズ)  ワークオフセット
   {ワークの説明}
  の書式で記述されている。ワークサイズは
   (.B)     バイト
   (.W)     ワード(2バイト)
   (.L)     ロングワード(4バイト)
  とする。
・同時に使用されることがないと保証されているワーク・アドレスは、重複して
  2つ以上のワークが設定されていることがある(例えば1/8モード・ピッチ・
  モジュレーションと波形メモリによるピッチ・モジュレーションは同時に
  使用できないため、関連ワークは重複するオフセットアドレスに設定されている)。
・解説文中では以下の略号が用いられている。
  PM	ピッチ・モジュレーション
  AM  アンプリチュード・モジュレーション

・具体的なワークへのアクセス法はリスト1、リスト2のようにして行う。

				リスト1
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃Z_MUSIC macro   func    *ドライバへのファンクションコール・マクロ   ┃
┃        moveq.l func,d1                                             ┃
┃        trap    #3                                                  ┃
┃        endm                                                        ┃
┃                                                                    ┃
┃        moveq.l #n,d2   *1≦n≦80:トラック番号                      ┃
┃        Z_MUSIC #$3c    *a0:トラックnの演奏トラックワークの         ┃
┃                        *先頭アドレス                               ┃
┃                                                                    ┃
┃*アクセス例                                                         ┃
┃        move.w  p_gate_time(a0),d0    *トラックnのある瞬間の        ┃
┃                                      *ゲートタイムを得る           ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

				リスト2
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃Z_MUSIC macro   func    *ドライバへのファンクションコール・マクロ   ┃
┃        moveq.l func,d1                                             ┃
┃        trap    #3                                                  ┃
┃        endm                                                        ┃
┃                                                                    ┃
┃        moveq.l #1,d2   *トラック番号=1                            ┃
┃        Z_MUSIC #$3c    *a0:トラック1の演奏トラックワークの        ┃
┃                        *先頭アドレス                               ┃
┃        move.l  a0,seq_wk_tbl *ベースアドレスとなるのでこれを格納   ┃
┃                                                                    ┃
┃      *トラック12のワーク先頭アドレスを求める時                     ┃
┃      movea.l seq_wk_tbl(pc),a0  *ベースアドレス取り出し            ┃
┃      moveq.l #11,d0             *トラック番号12(内部表現では11)    ┃
┃      lsl.w   #8,d0              *256倍                             ┃
┃      adda.w  d0,a0              *a0:トラック12のワーク先頭アドレス ┃
┃*アクセス例                                                         ┃
┃      move.w  p_gate_time(a0),d0 *トラックnのある瞬間の             ┃
┃                                 *ゲートタイムを得る                ┃
┃                                                                    ┃
┃seq_wk_tbl:   ds.l    1                                             ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


13.1.2.  演奏トラックワークの解説


p_on_count(.W)          $00
  現在発音中の音符の音長カウンタ(ステップタイム)。定められたテンポに従って
−1されていく。0になった時点でZMUSICは次の音符を演奏しにいく。

p_gate_time(.W)         $02
  現在発音中の音符の発音長カウンタ(ゲートタイム)。定められたテンポに従って
−1されていく。0になった時点でZMUSICはキーオフ処理を行う。

p_data_pointer(.L)      $04
  その時点のZMDコマンドポインタ。ステップタイムが0になるたびに、
そのコマンド長分、増加していく。

p_fo_spd(.B)            $08
  フェードイン/アウトのスピードの絶対値。1≦p_fo_spd≦85。

p_ch(.B)                $09
  そのトラックがアサインされている絶対チャンネル。0≦p_ch≦25。
PCM8独立チャンネルモードにおけるADPCM拡張チャンネル番号については
後述のp_extra_ch(.B)を参照。

p_not_empty(.B)         $0a
  そのトラックの生死。
  −1:死亡
    0:演奏中
    1:演奏終了
  $7f:同期待ち中
  $99:演奏停止中(m_stop時)
  $EE:同期待ち停止中(m_stop時)

p_amod_step(.B)         $0b
  ディレイモード・AM(拡張ARCC)の波形生成用・整数増分。

p_mstep_tbl(.W)         $0c〜$1b
  1/8モード・PM(拡張PM)用波形生成用・整数増分。(×8)

p_wvpm_loop(.L)         $0c
  PM(拡張PM)用・波形メモリループ開始アドレス。

p_wvpm_lpmd(.W)         $10
  PM(拡張PM)用・波形メモリループモード。(−1,0,+1)

p_altp_flg(.B)          $12
  PM(拡張PM)用・波形メモリ反復モードフラグ。(0:順行中、1:逆行中)

p_fo_mode(.B)           $1c
  現在のフェードモード。( −1:フェードアウト
			  +1:フェードイン
			  $47:ファンクション$47/$4C実行中)

p_pgm(.B)               $1d
  現在の音色番号。(0〜199)

p_pan(.B)               $1e
  現在のパンポット。(0〜3)

p_vol(.B)               $1f
  現在の音量。(127最小〜0最大)

p_mrvs_tbl(.B)          $20〜$27
  1/8モード・PM(拡張PM)用波形生成用・補正値。(×8)

p_wvpm_point(.L)        $20
  PM(拡張PM)用・波形メモリ・ポインタ。

p_wvpm_end(.L)          $24
  PM(拡張PM)用・波形メモリ・終了アドレス。

p_sp_tie(.W)            $28
  FM音源互換タイ・モード(@J1)においてスラーを行った時の
2つの音の音程の差を格納してある。
例
  c&e  では683×4=2732がここに格納される。

p_om(.B)                $28
  FM音源音色パラメータのOMの値。(&b0000〜&b1111)

p_sync(.B)              $29
  FM音源音色パラメータのSYNCの値。(0,1)

p_af(.B)                $2a
  FM音源音色パラメータのAFの値。

p_se_mode(.B)           $2b
  そのトラックが現在効果音モードかどうか。
  $ff:normal
  $00:se mode
  $01:masking mode(FNC $44 or $4B)

p_pmod_tbl(.W)          $2c〜$3b
  1/8モード・PM(拡張PM)の振幅値。(×8)
(-32768〜32767)

p_total(.L)             $3c
  その時点までのステップタイムの合計。ファンクション$19
または、ファンクション$43を実行後のみ意味を持つ。

p_fo_lvl(.B)            $40
  フェーダーの出力割合。(MIN)0〜128(MAX・NORMAL)

p_note(.B)              $42〜$49
  現在発音中のノート一覧。(×8)

p_extra_ch(.B)          $4a
  PCM8独立チャンネルモード時のADPCM拡張チャンネル番号。(0〜7)

p_aftc_n(.B)            $4b
  アフタータッチ・シーケンスのポインタ。(0〜7)

p_bend_rng_f(.W)        $4c
  オート・ベンドのベンド幅(FM音源トラック専用)。
  半音=64で表される相対表現値。(-768〜768)

p_bend_rng_m(.W)        $4e
  オート・ベンドのベンド幅(MIDIトラック専用)。
  半音≒683で表される相対表現値。(-8192〜8191)

p_detune_f(.W)          $50
  ディチューン(FM音源トラック専用)。(-768〜768)

p_detune_m(.W)          $52
  ディチューン(MIDIトラック専用)。(-8192〜8191)

p_port_dly(.W)          $54
  ポルタメント・ディレイ。(0〜32767)

p_bend_dly(.W)          $56
  ベンド・ディレイ。(0〜32767)

p_port_work(.B)         $58
  ポルタメント用補正値ワーク。

p_port_rvs(.B)          $59
  ポルタメント用補正値。

p_port_work2(.W)        $5a
  ポルタメント/オート・ベンドにおける現在のピッチベンド値。
  FM音源トラックでは半音=64、MIDIトラックでは半音≒683とする。

p_amod_tbl(.B)          $5c〜$63
  1/8モード・AMの振幅値。(×8)
(-128〜127)

p_arcc_tbl(.B)          $5c〜$63
  1/8モード・ARCC(拡張ARCC)の振幅値。(×8)
(-128〜127)

p_arvs_tbl(.B)          $64〜$6b
  1/8モード・AM(拡張ARCC)用波形生成用・補正値。(×8)

p_wvam_point(.L)        $64
  AM(拡張ARCC)用・波形メモリ・ポインタ。

p_wvam_end(.L)          $68
  AM(拡張ARCC)用・波形メモリ・終了アドレス。

p_pmod_work4(.W)        $6c
  PM(拡張PM)用スピードワーク。

p_port_flg(.W)          $6e
  ポルタメント実行中かどうか。
	   0:off
  −1 or +1:補正する方向(on)

p_bend_flg(.W)          $70
  オート・ベンド実行中かどうか。
	   0:off
  −1 or +1:補正する方向(on)

p_aftc_tbl(.B)          $72〜$79
  アフタータッチ・シーケンス値。(×8)
(0〜127,負数は省略値)

p_aftc_dly(.W)          $7a
  アフタータッチ・シーケンス用  音長の1/8カウント。

p_aftc_work(.W)         $7c
  アフタータッチ・シーケンス用  音長の1/8カウントワーク。

p_astep_tbl(.B)         $7e〜$85
  1/8モード・AM(拡張ARCC)用波形生成用・整数増分。(×8)

p_wvam_loop(.L)         $7e
  AM(拡張ARCC)用・波形メモリループ開始アドレス。

p_wvam_lpmd(.W)         $82
  AM(拡張ARCC)用・波形メモリループモード。(−1,0,+1)

p_alta_flg(.B)          $84
  AM(拡張ARCC)用・波形メモリ反復モードフラグ。(0:順行中、1:逆行中)

p_pmod_step2(.W)        $86
  PM(拡張PM)用波形生成用・整数増分(使い捨て)。

p_pmod_work(.W)         $88
  PM(拡張PM)用ディレイワーク。

p_pmod_work2(.W)        $8a
  PM(拡張PM)用  現在の音程。
・FM音源トラックでは半音=64
・MIDIトラックでは拡張モード1では半音=64
		      拡張モード2では半音≒683とする。

p_pmod_work3(.B)        $8c
  PM(拡張PM)用波形生成用・補正値ワーク。

p_pmod_n(.B)            $8d
  1/8モード・PM(拡張PM)用ポインタ。(0〜7)

p_sync_wk(.B)           $8e
  トラック同期コマンド用ワーク。
  $00:同期信号受信
  $ff:同期待ち状態

p_rpt_last?(.B)         $8f
  |:〜:|の繰り返しコマンドにおいて、繰り返しが最後かどうか。(bit=1:last)
  bit0:多重ループ深い
  bit1:     ↑
   :	    |
   :        ↓
  bit7:多重ループ浅い

p_@b_range(.B)          $90
  ピッチベンドレンジ。(0〜127)

p_arcc(.B)              $91
  MIDIトラック:ARCC(拡張ARCC)で制御するコントロールチェンジ番号(0〜127)。
  FM音源トラック:AMでどのオペレータに対してモジュレーション操作をするか。
		   bit=1:操作対象オペレータ
		   bit=0〜3:オペレータ1〜4

p_pmod_flg(.W)          $92
  現在PM(拡張PM)が実行中かどうか。
・FM音源トラックのPM、MIDIトラックの拡張PMではワードサイズ
	   0:off
  −1 or +1:補正する方向(on)
・MIDIトラックの通常PMではバイトサイズ
  	   0:off
       0以外:on

p_pmod_sw(.B)           $94
  PM(拡張PM)のスイッチ。
・FM音源トラックのPM、MIDIトラックの拡張PM
  	   0:off
  −1 or +1:補正する方向(on)
・MIDIトラックの通常PM
   	   0:off
       0以外:on

p_amod_sw(.B)           $95
  AMのスイッチ。
 	   0:off
  −1 or +1:補正する方向(on)

p_arcc_sw(.B)           $95
  ARCC(拡張ARCC)のスイッチ。
・通常ARCC
	   0:off
       0以外:on
・拡張ARCC
	   0:off
  −1 or +1:補正する方向(on)

p_bend_sw(.B)           $96
  オート・ベンドのスイッチ。
	  0:off
  −1 or +1:補正する方向(on)

p_aftc_flg(.B)          $97
  現在アフタータッチ・シーケンスを実行中か。
	  0:off
      0以外:on

p_md_flg(.B)            $98
  汎用ワーク。
  bit0 ピッチ・ベンドをリセットするかどうか
       (MIDIトラック専用 0:no 1:yes)
  bit1 ピッチ・モジュレーションをリセットするかどうか
       (MIDIトラック専用 0:no 1:yes)
  bit2 ARCC(拡張ARCCをリセットするかどうか
       (MIDIトラック専用 0:no 1:yes)
  bit3 MIDIのタイ/スラー・モード
       (MIDIトラック専用 0:normal 1:extended mode)
  bit4 PM(拡張PM)の波形のリセットを行うかどうか
       (0:行う 1:行わない)
  bit5 AM(拡張ARCC)の波形のリセットを行うかどうか
       (0:行う 1:行わない)
  bit6 PM(拡張PM)の波形のキーオンとの同期非同期のモード
       (0:同期 1:非同期)
  bit7 AM(拡張ARCC)の波形のキーオンとの同期非同期のモード
       (0:同期 1:非同期)

p_waon_flg(.B)          $99
  現在発音中の音は和音かそれとも単音か。($00:単音 $ff:和音)

p_pmod_dly(.W)          $9a
  PM(拡張PM)用ディレイ。(0〜65534)

p_amod_dly(.W)          $9c
  AM用ディレイ。(0〜65534)

p_arcc_dly(.W)          $9c
  ARCC(拡張ARCC)用ディレイ。(0〜65534)

p_port_step(.W)         $9e
  ポルタメント/オート・ベンド用  音程整数増分、
  FM音源トラックでは半音=64、MIDIトラックでは半音≒683とする。

p_bank_msb(.B)		$a0
  MIDI音色バリエーション上位バイト(0〜127)

p_bank_lsb(.B)		$a1
  MIDI音色バリエーション下位バイト(0〜127)

p_effect1(.B)		$a2
  MIDI汎用エフェクト1(0〜127)

p_effect3(.B)		$a3
  MIDI汎用エフェクト3(0〜127)

p_ol1(.B)               $a0
  FM音源音色パラメータのオペレータ1のトータル・レベル(アウトプット・レベル)。

p_ol2(.B)               $a1
  FM音源音色パラメータのオペレータ2のトータル・レベル(アウトプット・レベル)。

p_ol3(.B)               $a2
  FM音源音色パラメータのオペレータ3のトータル・レベル(アウトプット・レベル)。

p_ol4(.B)               $a3
  FM音源音色パラメータのオペレータ4のトータル・レベル(アウトプット・レベル)。

p_d6_last(.B)           $a4
  拡張ARCCにおいて前回送信したコントロールチェンジ値を保存しておくワーク。

p_cf(.B)                $a4
  FM音源の4つのオペレータのうちどのオペレータがキャリアかを示している。
  bit=1:carrier
  bit=0〜3:オペレータ1〜4

p_amod_step2(.B)        $a5
  AM(拡張ARCC)用波形生成用・整数増分ワーク(使い捨て)。

p_pb_add(.B)            $a6
  bit0:休符の時ベンド後のピッチを保存するか。(0:しない 1:する)
  bit1:休符の時ピッチを保存するか。(0:しない 1:する)

p_vset_flg(.B)          $a7
  キーオン前に音量をリセットするか。(0:しない 0以外:する)

p_arcc_rst(.B)          $a8
  ARCC(拡張ARCC)終了時の初期化値。

p_arcc_def(.B)          $a9
  ARCC(拡張ARCC)開始時の基準値。

p_coda_ptr(.L)          $aa
  [coda]のあるアドレス。

p_pointer(.L)           $ae
  [segno]のあるアドレス。

p_do_loop_ptr(.L)       $b2
  [do]のあるアドレス。

p_pmod_work5(.W)        $b6
  1/8モード・PM(拡張PM)用  音長の1/8カウント。

p_pmod_work6(.W)        $b8
  1/8モード・PM(拡張PM)用  音長の1/8カウントワーク。

p_amod_flg(.B)          $ba
  現在AMが実行中かどうか。
	  0:off
  −1 or +1:補正する方向(on)

p_arcc_flg(.B)          $ba
  現在ARCC(拡張ARCC)が実行中かどうか。
・通常ARCC
	   0:off
       0以外:on
・拡張ARCC
	  0:off
  −1 or +1:補正する方向(on)

p_aftc_sw(.B)           $bb
  アフタータッチ・シーケンスのスイッチ。($00:off $00以外:on)

p_dumper(.B)            $bc
  ダンパー。($00=off $00以外=on)

p_tie_flg(.B)           $bd
  前の音符にタイ/スラーの指定があったか。(0:なかった 0以外:あった)

p_pmod_dpt(.W)          $be
  ディレイモード・PM(拡張PM)の振幅値。(1/8モード時は0になる)

p_seq_flag(.B)          $c0
  bit0:[d.c.]処理をしたことがあるか。(0:ない 1:ある)
  bit1:[fine]処理をすべきかどうか。(0:すべきでない 1:すべきである)
  bit2:[coda]を以前に設定したことがあるか。(0:ない 1:ある)
  bit3:[segno]が今までにあるかないか。(0:ない 1:ある)
  bit4:[d.s.]処理をしたことがあるか。(0:ない 1:ある)
  bit5:reserved。
  bit6:key off bit。(キーオフ処理をするたびに、このビットが1になる)
  bit7:key on bit。(キーオン処理をするたびに、このビットが1になる)

p_do_loop_flag(.B)      $c1
  [do]が以前に設定されているか。($00:されていない $01〜:現在の繰り返し回数)

p_pmod_spd(.W)          $c2
  PM(拡張PM)の波長の1/4カウント。(1〜32767)

p_amod_spd(.W)          $c4
  AM(拡張ARCC)の波長の1/4カウント。(1〜32767)

p_total_olp(.L)         $c6
  [do]〜[loop]外のステップタイムの合計。ファンクション$19
  または、ファンクション$43を実行後のみ意味を持つ。

p_pmod_step(.W)         $ca
  ディレイモード・PM(拡張PM)の波形生成用・整数増分。

p_tie_pmod(.B)          $cc
  タイ/スラーの途中でPM(拡張PM)関係のパラメータチェンジが
 行われたかどうか。($00:行われなかった $00以外:行われた)

p_tie_bend(.B)          $cd
  タイ/スラーの途中でオート・ベンド関係のパラメータチェンジが
 行われたかどうかン。($00:行われなかった $00以外:行われた)

p_tie_amod(.B)          $ce
  タイ/スラーの途中でAM関係のパラメータチェンジが
 行われたかどうか。($00:行われなかった $00以外:行われた)

p_tie_arcc(.B)          $ce
  タイ/スラーの途中でARCC(拡張ARCC)関係のパラメータチェンジが
 行われたかどうか。($00:行われなかった $00以外:行われた)

p_tie_aftc(.B)          $cf
  タイ/スラーの途中でアフタータッチ・シーケンス関係のパラメータチェンジが
 行われたかどうか。($00:行われなかった $00以外:行われた)

p_pan2(.B)              $d0
  パンポット。(L   M   R)
  	      (0〜64〜127)

p_non_off(.B)           $d1
  キーオフ無しモードかどうか。($00:通常モード  $00以外:キーオフ無しモード)

p_frq(.B)               $d2
  ADPCMの再生周波数。(0〜6)
  (ただし5,6はPCM8独立チャンネルモード時のみ有効)

p_velo(.B)              $d3
  ベロシティ。(0〜127)

p_amod_work4(.W)        $d4
  AM(拡張ARCC)の波長の1/4カウントワーク。

p_pmod_rvs(.B)          $d6
  ディレイモード・PM(拡張PM)用補正値。

p_waon_dly(.B)          $d7
  和音用ディレイ値。(0〜255)

p_waon_work(.B)         $d8
  和音用ディレイワーク。

p_waon_num(.B)          $d9
  和音において何番目のノートをキーオンするか。(0〜7)($ff:全ノートキーオン終了)

p_note_last(.B)         $d9
  単音で発音したノートのノート番号の一時退避ワーク。

p_rpt_cnt(.B)           $da〜$e1
  その時点での繰り返し回数。($00は空きワーク 1〜255:繰り返し回数)
  $da:多重ループ深い
  $db:      ↑
   :	    |
   :        ↓
  $e1:多重ループ浅い

p_maker(.B)             $e2
  そのトラックが操作している楽器のメーカーID。
  @Iコマンドの第1パラメータに相当。

p_device(.B)            $e3
  そのトラックが操作している楽器のデバイスID。
  @Iコマンドの第2パラメータに相当。

p_module(.B)            $e4
  そのトラックが操作している楽器のモデルID。
  @Iコマンドの第3パラメータに相当。

p_last_aft(.B)          $e5
  前回アフタータッチ・シーケンスで出力されたアフタータッチ値。

p_amod_work(.W)         $e6
  AM用ディレイワーク。

p_arcc_work(.W)         $e6
  ARCC(拡張ARCC)用ディレイワーク。

p_amod_work2(.B)        $e8
  AM用  現在の音量。(0〜127)

p_arcc_work2(.B)        $e8
  ARCC(拡張ARCC)用  現在のコントロール値。(0〜127)

p_amod_work3(.B)        $e9
  AM(拡張ARCC)用波形生成用・補正値ワーク。

p_amod_work7(.B)        $ea
  AM(拡張ARCC)用  ノコギリ波生成用ワーク。
  (一周期終了後の、波形の開始値の記憶)

p_amod_n(.B)            $eb
  1/8モード・AM用ポインタ。(0〜7)

p_arcc_n(.B)            $eb
  1/8モード・ARCC(拡張ARCC)用ポインタ。(0〜7)

p_arcc_work5(.W)        $ec
  1/8モード・AM用  音長の1/8カウント。

p_amod_work5(.W)        $ec
  1/8モード・ARCC(拡張ARCC)用  音長の1/8カウント。

p_arcc_work6(.W)        $ee
  1/8モード・AM用  音長の1/8カウントワーク。

p_amod_work6(.W)        $ee
  1/8モード・ARCC(拡張ARCC)用  音長の1/8カウントワーク。

p_pmod_wf(.B)           $f0
  PM(拡張PM)の波形形状。
  −31〜−8:ユーザー波形番号
	  0:ノコギリ波
	  1:矩形波
	  2:三角波
	  3:ノコギリ波シングル

p_amod_dpt(.B)          $f1
  ディレイモード・AM(拡張ARCC)の振幅値。(1/8モード時は0になる)
(-128〜127)

p_amod_wf(.B)           $f2
  AM(拡張ARCC)の波形形状。
  −31〜−8:ユーザー波形番号
	  0:ノコギリ波
	  1:矩形波
	  2:三角波
	  3:ノコギリ波シングル

p_dmp_n(.B)             $f3
  FM音源トラック用ダンパー処理ワーク。
  p_ch+p_dmp_nしたチャンネルで次回の発音を行う。(0〜7)

p_pmod_omt(.B)          $f4
  1/8モード・PM(拡張PM)用  パラメータ省略ビットパターン。
  bit=0:省略
  bit=1:有効
  bit0〜7:第1パラメータ〜第8パラメータ

p_amod_omt(.B)          $f5
  1/8モード・AM用  パラメータ省略ビットパターン。
  bit=0:省略
  bit=1:有効
  bit0〜7:第1パラメータ〜第8パラメータ

p_arcc_omt(.B)          $f5
  1/8モード・ARCC(拡張ARCC)用  パラメータ省略ビットパターン。
  bit=0:省略
  bit=1:有効
  bit0〜7:第1パラメータ〜第8パラメータ

p_pmod_mode(.B)         $f6
  拡張PMのモード番号。
  −1:通常PMモード
    0:半音=64モード
    1:半音≒683モード

p_arcc_mode(.B)         $f7
  拡張ARCCのモード番号。
  −1:通常ARCCモード
    0:拡張ARCCモード
 
p_pmod_chain(.B)        $f8
  1/8モード・PM(拡張PM)波形接続ワーク。
  −1:接続待機
    0:波形通常実行中
    1:強制接続

p_amod_chain(.B)        $f9
  1/8モード・AM、ARCC(拡張ARCC)波形接続ワーク。
  −1:接続待機
    0:波形通常実行中
    1:強制接続

p_jump_flg(.B)          $fa
  [!]コマンド・ステータス・ワーク。
  −1:通常演奏状態
    0:ジャンプ実行中
    1:ジャンプ終了

p_waon_mark(.B)         $fb
  主チャンネルのパラメータ変更をしたか。(0:していない  0以外:した)

p_marker(.W)            $fc
  p_marker+0(.B):このトラックは効果音トラックか。
		 (0:通常トラック  0以外:効果音トラック)
  p_marker+1(.B):フェーダー移動フラグ(オーバーフローするとフェーダーが動く)。

p_amod_rvs(.B)          $fe
  ディレイモード・AM、ARCC(拡張ARCC)用補正値。
  
p_ne_buff(.B)           $ff
  効果音トラックにおけるp_not_empty(.B)の一時退避ワーク。

p_user(.B)              $ff
  ユーザー汎用ワーク。


13.1.3.  ワーク参照にあたっての注意


  ワークの不当な書き替えは、演奏に支障をきたすだけでなく、ZMUSICの暴走を

引き起こす可能性もあるため、細心の注意を必要とする。また、特殊な使用目的

以外では、各ワークは読み出し専用と考え、書き替えはなるべく行わないように

すべきである。

  各ワークは、必ずしも使用されているとは限らず、条件によっては、そのワークが

持つ値は何の意味も持たない場合がある。例えばPMのスイッチp_pmod_sw(.B)が

OFF(0)の場合、PM関連ワークに格納されている値は何の意味も持たない。

  また、MMLやコマンドで与えたパラメータ値とワーク内部で表現される

内部表現形式とは多少の食い違いがあるので注意すること。例えば音色番号は

MMLパラメータでは

@<音色番号:1〜200>

であるが、ワーク(内部表現)では

p_pgm(.B):0〜199

となっている。


13.1.4.  ブレゼンハムのアルゴリズム(Bresenham's algorithm)について


  ZMUSICではオートベンドやポルタメント、ピッチ・モジュレーションや

アンプリチュード・モジュレーションなどの波形の生成実行にブレゼンハムの

アルゴリズム(Bresenham's algorithm)を使用している。このパラメータ計算と

その実行について解説をする。

・パラメータの計算  

  図1のようなv1→v2への値変化を行いたい場合を考える。つまり、絶対カウント

st間にちょうどv1からv2へ幅yだけ変化させたいということである。

  整数増分パラメータは

	<整数増分パラメータ>=int(y/st)	(ただしst≠0。yは正数、負数いずれも可)

そして補正パラメータは

	<補正パラメータ>=abs(y mod st)×256/st
	<補正方向>=sgn(y)

で求められる。

┏━━━━━━━━━━━━━┓
┃               v2         ┃
┃              / ↑       ┃
┃            /   |       ┃
┃          /     |y      ┃
┃        /       |       ┃
┃      /         ↓       ┃
┃    v1←───→          ┃
┃          st              ┃
┗━━━━━━━━━━━━━┛
	図1パラメータ


・実行

  実際の実行は

	st≠0
	v1←初期値
	rvs_wk(補正値ワーク):=0

として、

	repeat
		v1:=v1+<整数増分パラメータ>
		rvs_wk:=rvs_wk+<補正パラメータ>
		if (Carry flag is set) then v1:=v1+<補正方向>
		st:=st−1
	until st=0

のようなアルゴリズムにより施行される。

  なお、演奏トラックワークとブレゼンハムのアルゴリズムにおけるパラメータとの

対応は

●ポルタメント
      補正値:p_port_rvs(.B)          $59
    補正方向:p_port_flg(.W)          $6e
    整数増分:p_port_step(.W)         $9e
補正値ワーク:p_port_work(.B)         $58
    計算結果:p_port_work2(.W)        $5a

●オート・ピッチベンド
      補正値:p_port_rvs(.B)          $59
    補正方向:p_bend_flg(.W)          $70
    整数増分:p_port_step(.W)         $9e
補正値ワーク:p_port_work(.B)         $58
    計算結果:p_port_work2(.W)        $5a

●ピッチ・モジュレーション

      補正値:p_pmod_rvs(.B)          $d6
    補正方向:p_pmod_flg(.W)          $92
    整数増分:p_pmod_step2(.W)        $86
補正値ワーク:p_pmod_work3(.B)        $8c
    計算結果:p_pmod_work2(.W)        $8a

●アンプリチュード・モジュレーション/拡張ARCC

      補正値:p_amod_rvs(.B)          $fe
    補正方向:p_amod_flg(.B)          $ba
    整数増分:p_amod_step2(.B)        $a5
補正値ワーク:p_amod_work3(.B)        $e9
    計算結果:p_amod_work2(.B)        $e8

のようになっている。また、1/8モードのピッチ・モジュレーションや、1/8モードの

アンプリチュード・モジュレーションでは整数増分と補正値が8つ分テーブルに

格納されており、随時使用される。

●1/8モード・ピッチ・モジュレーション
  補正値テーブル:p_mrvs_tbl(.B)          $20〜$27
整数増分テーブル:p_mstep_tbl(.W)         $0c〜$1b

●1/8モード・アンプリチュード・モジュレーション/拡張ARCC
  補正値テーブル:p_arvs_tbl(.B)          $64〜$6b
整数増分テーブル:p_astep_tbl(.B)         $7e〜$85


13.2.  バッファ管理ワーク


  ファンクション$45でZMUSICの各バッファのアドレスを知ることができる。

ここでは、これらのバッファの構造や役割について解説をする。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ファンクション$45  buffer_info                                        ┃
┃                                                                      ┃
┃機能:   各バッファのアドレス、サイズ、終了アドレスの情報を得る        ┃
┃                                                                      ┃
┃引数:   なし                                                          ┃
┃                                                                      ┃
┃戻り値:  0(a0)=トラックバッファの先頭アドレス   trk_top              ┃
┃         4(a0)=トラックバッファのサイズ         trk_buf_size         ┃
┃         8(a0)=トラックバッファ終了アドレス     trk_buf_end          ┃
┃              =ZMUSICの最終アドレス       (dev_end_adr)        ┃
┃        12(a0)=ADPCMバッファ先頭アドレス   adpcm_buffer_top     ┃
┃        16(a0)=ADPCMバッファサイズ         adpcm_buffer_size    ┃
┃        20(a0)=ADPCMバッファ終了アドレス   adpcm_buffer_end     ┃
┃        24(a0)=汎用ワークエリア先頭アドレス     adpcm_work_top       ┃
┃        28(a0)=汎用ワークエリアサイズ           adpcm_work_size      ┃
┃        32(a0)=汎用ワークエリア終了アドレス     adpcm_work_end       ┃
┃                                                                      ┃
┃        36(a0)=新規に登録される                 adpcm_buffer_next    ┃
┃                ADPCMデータが                                    ┃
┃                格納されるアドレス                                    ┃
┃                adpcm_buffer_top≦adpcm_buffer_next≦adpcm_buffer_end ┃
┃                                                                      ┃
┃        40(a0)=次にワークが使用される場合の     adpcm_work_now       ┃
┃                汎用ワーク使用可能開始アドレス                        ┃
┃                adpcm_work_top≦adpcm_work_now≦adpcm_work_end        ┃
┃                                                                      ┃
┃        44(a0)=汎用ワークエリアの本当のサイズ   adpcm_work_true_size ┃
┃                                                                      ┃
┃        48(a0)=演奏トラックワーク格納アドレス   seq_wk_tbl           ┃
┃        52(a0)=効果音トラックワーク格納アドレス seq_wk_tbl2          ┃
┃                                                                      ┃
┃        56(a0)=ADPCMデータの管理テーブル   adpcm_tbl            ┃
┃                格納アドレス                                          ┃
┃                                                                      ┃
┃        60(a0)=波形メモリの管理テーブル         wave_tbl             ┃
┃                格納アドレス                                          ┃
┃								        ┃
┃	  64(a0)=FM音源音色バッファのアドレス   neiro	        ┃
┃								        ┃
┃	  68(a0)=各トラックの先頭アドレス	   trk_po_tbl		┃
┃	 	  格納テーブルアドレス(1,2,3,...80)			┃
┃									┃
┃	  72(a0)=m_allocで確保した各トラックの	   trk_len_tbl		┃
┃		  サイズ格納アドレス(1,2,3,...80)			┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


●トラックバッファ

  トラックバッファはZMDを格納するために確保されているが、MDD作成時に

汎用ワークとして使用されることがある。

  外部アプリケーションで確保したメモリ領域をZMUSICから参照させるには

	(trk_top)=メモリ領域の先頭アドレス
	(trk_buf_size)=メモリ領域のサイズ
	(trk_buf_end)=メモリ領域の最終アドレス

を設定する。


●ADPCMバッファ

  ADPCMバッファにはZPDをはじめとしたADPCMデータが格納される。

ADPCMバッファのサイズが0の時はADPCM関連の命令やファンクションは

使用できない。

  外部アプリケーションで確保したメモリ領域をZMUSICから参照させるには

	(adpcm_buffer_top)=メモリ領域の先頭アドレス
	(adpcm_buffer_size)=メモリ領域のサイズ
	(adpcm_buffer_end)=メモリ領域の最終アドレス
	(adpcm_buffer_next)=メモリ領域の先頭アドレス

を設定する。


●汎用ワークエリア

  汎用ワークエリアは、ADPCMコンフィギュレーション一時退避場所としてや、

ADPCMデータ加工時のワークエリア、波形メモリのバッファ(ZMS時)、

MDD作成時のワークエリアとして多目的に使用される。

  ADPCMコンフィギュレーション一時退避場所、波形メモリの

バッファ(ZMS時)として使用した場合は便宜上のワークサイズ(adpcm_work_size)が

伸縮する。

  外部アプリケーションで確保したメモリ領域をZMUSICから参照させるには

	(adpcm_work_top)=メモリ領域の先頭アドレス
	(adpcm_work_size)=メモリ領域のサイズ
	(adpcm_work_end)=メモリ領域の最終アドレス
	(adpcm_work_now)=メモリ領域の先頭アドレス
	(adpcm_work_true_size)=メモリ領域のサイズ

を設定する。


●演奏トラックワーク

  演奏中の各トラックのワーク。トラックは80本あり(ZMSC.Xでは32本)

1本のトラックにつき256バイトのワークが割り当てられている。各ワークの

役割については13.1.を参照のこと。

	(seq_wk_tbl)+トラック番号(0〜79)×256

で任意のトラックのワーク先頭アドレスを求めることができる。


●効果音トラックワーク

  効果音トラックの演奏トラックワーク。トラックは32本あり、役割、

ワークサイズはまったく演奏トラックワークと同等。


●ADPCM管理テーブル

  各ノート番号に割り当てられたADPCMデータを管理するワーク。

バンク1
ノート番号0	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号1	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号2	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
				:
				:
ノート番号127	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)

バンク2
ノート番号0	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号1	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号2	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
				:
				:
ノート番号127	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)

バンク3
ノート番号0	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号1	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号2	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
				:
				:
ノート番号127	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)

バンク4
ノート番号0	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号1	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号2	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
				:
				:
ノート番号127	ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)

という構成を取っている(8×128×4=4096bytes)。

  任意のバンク番号(1〜4)、ノート番号(0〜127)に対応する管理ワークアドレスは

	(adpcm_tbl)+(バンク番号−1)×128×8+ノート番号×8

にて求めることができる。


●波形メモリ管理テーブル

  各波形番号に割り当てられた波形メモリデータ列を管理するワーク。

波形番号8  start address(.L),end address(.L),loop point(.L),loop mode(.W)
波形番号9  start address(.L),end address(.L),loop point(.L),loop mode(.W)
波形番号10 start address(.L),end address(.L),loop point(.L),loop mode(.W)
				:
				:
波形番号31 start address(.L),end address(.L),loop point(.L),loop mode(.W)

という構成を取っている(14×24=336bytes)。アドレスとループポイントは

絶対アドレス、ループモード値は0〜2で与えたものが −1,0,+1 にパラメータシフト

されている点に注意。

  任意の波形番号に対応したワークアドレスは

	(wave_tbl)+(波形番号−8)×14

にて求めることができる。


●FM音源音色バッファ

  FM音源の音色は1音色につき55バイトで構成されている。よって

	(neiro)+(音色番号(1〜200)−1)×55

で、任意の音色の格納アドレスを参照できる。


●各トラックの先頭アドレス

  各トラックの先頭アドレスはtrk_po_tblに格納されているアドレスから

トラック1の先頭アドレス(.L)
トラック2の先頭アドレス(.L)
トラック3の先頭アドレス(.L)
	:
	:
トラック80の先頭アドレス(.L)

のように格納されている。よって、任意のトラック番号のトラックの先頭アドレスは

	((trk_po_tbl)+トラック番号(0〜79)×4)

で求めることができる。


●各トラックの長さ

  各トラックの長さはtrk_len_tblに格納されているアドレスから

トラック1の長さ(.L)
トラック2の長さ(.L)
トラック3の長さ(.L)
	:
	:
トラック80の長さ(.L)

のように格納されている。よって任意のトラック番号のトラックの長さは

	((trk_len_tbl)+トラック番号(0〜79)×4)

で求めることができる。

  このワークの値は「ファンクション$01 m_alloc」が実行された場合のみ意味を持つ。

ZMDファイルを演奏した場合はm_allocされないのでワークの値は無意味。

{ -- ZM14.MAN ------------------------------------------------

	    MEASURE14
      効果音モードと映像同期モード


  ここでは、ZMUSICの特殊機能である

「効果音モード」と「映像同期モード」についての

解説を行います。本章を理解するには

MPU68000の機械語の知識が必要です。

通常の音楽演奏のみを行なうユーザーは読み飛ばして

構いません。

  「効果音モード」の解説はオリジナル・ゲーム・

プログラムで実際に使用することを想定して

具体的に解説します。








14.1.  効果音モード


14.1.1.  ZMUSICの組み込み


●組み込みメッセージの制御

−G

  ZMUSICを組み込んだ後にZMUSICのロゴやバージョン番号、確保した

バッファの容量等の情報が画面に出力される。このスイッチを設定するとこれらを

いっさい表示しないようにすることができる。機能自体に特別な深い意味はないが

アプリケーションを起動する際の画面バランスに気を使う場合は設定するとよい。


●多重割り込みに対応させる

−M

  ゲームのメインプログラムでラスタースクロールやその他のMFPを使った割り込みを

使用している場合には設定したほうがよい。設定しないとZMUSICの割り込み

処理中に一切の割り込みがキャンセルされてしまい、希望通りの処理がなされない

場合がある。

  しかしこのモードでMFPを使った割り込み処理が極端に重くなった場合は、

音楽側のテンポに影響が出ることがある。

  PCM8モード時には暗黙のうちにこのモードが選択される。

●初期化制御

−N

  ZMUSICでは通常、新たに演奏データを演奏しようとするとMIDI楽器に

初期化パラメータを設定したりFM音源の初期化等をしている。この初期化処理は

新たに演奏する曲の都合を無視したものである。たとえばMIDI音源の10チャンネル

以下しか使用していない曲をこれから演奏しようという時に11チャンネル以上の

初期化も行ってしまう。この「余計な処理」はゲームの曲の切り替え時において

ゲーム画面のスクロールの一時停止といった目に見える症状になってしまう場合がある。

そこでこの'−N’オプションスイッチを設定すると以後この「余計な処理」処理を

省くことができる。ただしFM音源/MIDI楽器に対して一切の初期化処理を

行わなくなるので各演奏データには必要な初期化データを盛り込む必要が

出てくる(後述)。


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃				2通りの演奏データ形式				┃
┃										┃
┃  ゲームの演奏データを設計する場合に二通りのバリエーションが存在する。	┃
┃										┃
┃  1つはMIDI対応曲と内蔵音源対応曲を分けてそれぞれ用意する場合(Oh!X	┃
┃										┃
┃1992年6月号付録の「SIONII」やコナミの「出たな!!ツインビー」など)。	┃
┃										┃
┃  もう1つは内蔵音源がメインでMIDIボードがある場合はMIDI音源もこれに	┃
┃										┃
┃重なって鳴るといった、1つのデータで両方をまかなうタイプのもの(コナミの	┃
┃										┃
┃「パロディウスだ!!」など)。							┃
┃										┃
┃  ZMUSICでは常駐処理の時にMIDIボードの有無を検査してMIDIボードが┃
┃										┃
┃なければ以後、MIDI部の演奏を自動的にミュートして内蔵音源部のみ演奏出来る	┃
┃										┃
┃モードになる。								┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


●汎用ワークエリアの設定

−Wn

  ゲーム等の曲で演奏のたびにADPCMコンフィギュレーションファイルを読んだり

ADPCMの加工処理を行ったりするのはまったくの非常識であるため汎用ワークは

不要ということになる。よって普通は

−W0

でいいことになる。


●ADPCMデータ

−B ZPDファイルネーム

−Pn

  ゲーム中に用いるすべてのBGMが1つのZPDデータを用いてる場合は

−B  ZPDファイルネーム

でドライバ組み込み時に組み込んでしまうとよい。'−B'は組み込むZPDファイルの

ファイルサイズ分自動的にADPCMバッファを確保してくれるため便利である。

  ゲーム中に数回ZPDデータを切り替えたりする場合は'−P'で必要最大分バッファを

確保して、あとからファンクションコールなどを使ってZPDデータや

ADPCMデータを登録するということになる。

  また、演奏する曲がまったくADPCMを使用しない場合はADPCMバッファを

特に確保する必要はない。


●トラックバッファ

−Tn

  曲データをゲームプログラム開始前に一括してメインプログラムの管理領域に

読み込んでしまうのが賢明である。そして曲の切り替え時にはあらかじめ

読み込んでおいた演奏データの先頭アドレスをZMUSICに与えてやればよいので

ある(具体例は後述)。ということはつまりZMUSICのトラックバッファは

まったく不要ということであるから、その場合

−T0

でよいことになる。

  また、ゲームのメインプログラムが大きくて一括して読み込めない場合は

1ステージ内に必要分を先読みするようにすればよい(例ステージBGM、ボスBGM)。


14.1.2.  ゲームに負担をかけない演奏データとは?


  まず、演奏データ制作者はゲームのプログラムに負担をかけないように心掛けて

演奏データを作成しなければならない。また、曲の切り替りに時間がかからない様に

しなければならない。例えばスクロールシューティングゲームでステージBGMから

ボスのテーマに切り替る時に、スクロールが止まってしまってはスピード感を損ねて

しまう。

  したがって曲データはすべて応答の高速であるZMDレベルで管理すべきである。

さもないと曲の切り替るたびにコンパイルする動作を強いられ、曲の切り替えが

とても遅くなるからである。

  ここでは曲の切り替りの早い演奏データを作るためのテクニックについてのべる。



●共通コマンドは使わない

  FM音源音色の定義コマンドやMIDIエクスクルーシブコマンドなどのトラックに

依存しない、いわゆる「共通コマンド」は割り込みで処理されないために

曲の切り替え時のウェイトになりかねない。つまりZMSファイルをコンパイルして

ZMDを得た時に共通コマンド部分のZMDコードが皆無ならばよいのである。

  そこでMMLで簡単に置き換えられる共通コマンドはすべてMMLに置き換えた

ほうがよい。たとえばテンポ設定ZMSコマンド(On)は用いずMMLの

テンポコマンドを用いるようにしたり、'.ROLAND_EXCLUSIVE'命令や

'(Xn 1,n 2,n 3,…,n i)'などはXコマンドや、@Xコマンドを用いたりしてMMLへ

直していく。

  また、どうしても置き換わらないもの

	     音色登録

	     MIDI楽器個別コマンド

などは後述する方法で解決する。

  結局ゲームに用いる演奏データには

初期化コマンド…(I)

ベースチャンネル設定…(Bn)

トラック確保…(Mtr,size)

チャンネルアサイン…(Ach,tr)

以外の共通コマンドを用いないようにする。以上の4つのコマンドはコンパイル時に

消化され、共通コマンドコードとしてZMDデータに生成されない。


●音色登録

  演奏データには様々な音色が使用されるが、この音色データを1曲ごとに持たせて

演奏の開始時にいちいち登録していたのでは曲の切り替りが遅くなってしまう

(アクションゲームのような極端な高速切り替えが要求されていないRPGやADVなら

別に構わないであろうが)。

  ZMUSICではFM音源200音色分(No.1〜No.200)の専用バッファを持っており、

ドライバが解除されたりしなければ、この領域はいつまでも保存されている。よって、

そのゲーム中に使用されるFM音色をあらかじめドライバの組み込み時に

オプションスイッチ'−S'で転送してしまい演奏データには一切のFM音色データを

持たないようにすればよい。効果音で用いられるFM音色も一緒に送ってしまうと

よい。

  MIDI楽器の音色の場合もFM音源音色の場合と同様である。そのゲーム中の

BGMで使用する音色データをMIDI楽器へあらかじめ登録してしまえばよいの

である(MIDI楽器の初期化コマンドを実行すると設定した音色までも初期化される

事があるので注意)。

  音色のセットアップファイルの例をリスト1に示す。このリスト1のようなものを

A>zmusic  −sSETUP.ZMS

のようにしてドライバ常駐とともに組み込んでしまえばよいのである。

  もちろんコンパイルして

A>zmusic −sSETUP.ZMD

の様にしても構わない。

  複数のMIDI楽器に対応している場合はMUSICコンフィギュレーションの

ような場所で楽器を選ばせ、その時点であらかじめ用意しておいたその楽器の

音色データをセレクトして転送するようにすればよいであろう。


●MIDI楽器個別コマンド

  音色データやグローバルなMIDI楽器の設定はゲームが開始される前にあらかじめ

登録しておくことで解決するが、1曲ごとに変えたい設定もある。たとえばパーシャル

リザーブなどである。

  楽器個別命令も共通コマンドであるためなんとかMMLへコンバートしたいところで

ある。こういったものはエクスクルーシブメッセージで処理を実現しているため

MMLの@XやXへ変換できなくはないが、いちいち楽器のマニュアルを見ながら

MMLを書いていくのは大変である。

  こういう場合には同梱の支援ツール「ZMD18.R」を使用するとよい。

  このZMD18.RはZMDデータ中にあるMIDI楽器個別コマンドを

MMLに変換するものである。

  具体的な使い方を以下に示す。

  たとえばMUSIC.ZMSというMIDI楽器個別コマンドが多用された

ZMSファイルがあったとする。これを

A>zmusic -c MUSIC

としてコンパイルし、MUSIC.ZMDを得る。

  つぎに

A>zmd18 MUSIC

とすると画面に

(T1)@X$F0,$41,$10,$16,$12,$7F,$00,$00,$00,$01,$F7
(T1)@X$F0,$41,$10,$16,$12,$08,$00,$00,$43,$48,$4F,$52,$44,$20,$20,$20
(T1)@X$20,$20,$00,$00,$03,$00,$24,$35,$0B,$01,$02,$00,$24,$09,$00,$00
(T1)@X$00,$00,$00,$00,$00,$32,$32,$32,$32,$32,$3E,$17,$55,$64,$17,$04
(T1)@X$27,$08,$18,$64,$00,$00,$00,$0D,$18,$4D,$53,$64,$59,$4C,$48,$5E
(T1)@X$4A,$5B,$0C,$1B,$0C,$00,$00,$00,$00,$00,$09,$2B,$64,$64,$64,$63
(T1)@X$24,$30,$0B,$01,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$32
(T1)@X$32,$32,$32,$32,$40,$17,$38,$64,$17,$05,$67,$06,$2B,$64,$00,$00
(T1)@X$00,$07,$16,$64,$62,$64,$5E,$54,$4F,$5E,$46,$5B,$0C,$1B,$0C,$00
(T1)@X$00,$00,$04,$0B,$0E,$0F,$64,$60,$5C,$5B,$6B,$F7
(T1)@X$F0,$41,$10,$42,....
(T1)@X.....
     :
     :

といったものが出てくる。これらがZMD中のMIDI楽器個別コマンドが

MMLへとコンバートされたものである。

  これをリダイレクトしてどこかに保存し、MUSIC.ZMSのトラック1の先頭へ

挿入する。また、EOX($F7)の後には若干のウェイトが必要なので休符を

添付してやる。あとは、MUSIC.ZMS中の共通コマンドを全て削除すれば作業の

終わりである。


●コメント

  演奏データのタイトルや作者名を記述するのに使われている.comment文も演奏時には

文字列をスキップする動作を強いられるため、これがウェイトになりかねないので

用いないようにする。


●テンポ

  曲のテンポは共通コマンド(On)を用いずにMMLのTコマンドを用いて

変化させたほうがいいということは、すでに述べた通りである。

  ゲーム中に用いる曲の場合、テンポがステージ毎にあまりにも速かったり遅かったり

すると効果音もそのテンポにつられて速くなったり遅くなったりする。例えばある

ステージでBGMがテンポ100で演奏されていてレーザーの発射音が

「ちゅーーん・ちゅーーん」だったとする。そして別のステージに突入し、

BGMのテンポが倍の200になったとすると「ちゅん・ちゅん」になってしまう。

  これを防止(というかつじつまを合せる)するのが(Zn)コマンドである。

この命令は全音符の絶対音長をデフォルトの192からnへ変更するものである。

  テンポが速くなるというのはタイマ割り込みの割り込み間隔が速くなるという

ことであるから、この割り込み間隔を一定にしつつ曲のテンポを変えることを

考えればいいのである。

  先程のBGMのテンポが速くなったために効果音も速く鳴ってしまった例は、

(効果音と、もとのBGMが全音符の絶対音長が192基準で作られているならば)、

テンポ200の曲の方を全音符の絶対音長を96にしてやれば、テンポ200でも

割り込み間隔はテンポ100と全く同じものとなり、この曲はテンポ200、

効果音はテンポ100で演奏され万事解決となる。

  つまりタイマ値を大体一定(あんまり厳密でなくて構わないが)にし、

ひとつのひとつの音符の絶対音長の長短でテンポを調整するイメージである。

テンポMMLコマンドTはこの全音符の絶対音長変更コマンドの(Zn)を考慮して

タイマ値を算出してしまうのでタイマ値を直接設定できる@Tコマンドを用いると

分かりやすいであろう。

  ところでこの(Zn)コマンドは共通コマンドであるからZMDデータとしても

生成されてしまう。共通コマンドの削減をこれまで繰り返し言ってきたが、

このコマンドは実行に大して時間を食わないので、例外として扱って構わないだろう。


●初期化

  前節で解説したようにZMUSICを'−N'オプションを付けて初期化なしモードで

常駐させている場合、各演奏データに楽器初期化等のコマンドを盛り込まないと前の

演奏データの設定状態が受け継がれることになってしまう。

  ZMUSICでは初期化モードでない通常モードの場合、新たな演奏データの

演奏開始直前に以下のようなメッセージを送信している。

FM音源部

ノイズモードオフ(Y15,0相当)

ADPCM音源

特になし。

MIDI音源部

リセット オール コントローラーズ($Bn,$79,$00)

オムニ  モード  オン($Bn,$7D,$00)

モノ  モード  オフ($Bn,$7F,$00)

ローカル  オン($Bn,$7A,$7F)

ファインチューニングをニュートラルへ($Bn,$65,$00,$Bn,$64,$01,
				     $Bn,$06,$40,$Bn,$26,$00)

コースチューニングをニュートラルへ($Bn,$65,$00,$Bn,$64,$02,$Bn,$06,$40)

ピッチ・ベンドレンジ=1オクターブ($Bn,$65,$00,$Bn,$64,$00,$Bn,$06,$0C)

ボリューム=63($Bn,$07,$3F)

パンポット=中央($Bn,$0A,$40))

ピッチ・モジュレーション=0($Bn,$01,$00)

ダンパー  オフ($Bn,$40,00)

ピッチ・ベンドをニュートラルへ($En,$00,$40)

  以上から必要なものをピックアップして演奏データに盛り込むべきである。

初期化なしモードとそうでない場合の違いはこれらの初期化動作が行われるか、

行われないかの違いになってくる。こうしてみるとFM音源とADPCM音源は

初期化なしモードと通常モードの区別を特に意識する必要はないかもしれない。

  演奏データをゲームプログラムなどに取り込む前に一度、初期化なしモードで

演奏してみるとよいだろう。それで演奏がおかしかったならば、どの初期化メッセージ

が足りなかったのかを見極めて、随時それらを盛り込んでいくとよいだろう。

  ローランド系のDTM楽器(CMやMT、SCシリーズなど)では楽器の

メモリアドレスのある箇所にダミーデータを書き込むと本体内の全パートを

初期化してくれる便利な機能がある。これを使えば上のような初期化メッセージを

いちいち送らなくても少ない手間で初期化が行える。いくつか例を挙げておく。

(初期化したあとの楽器の状態については各楽器のマニュアルを参照し確認すること)


●MT32/CM32L/CM64/CM32P/CM500のLA音源部
$7F,$00,$00にダミーデータを書き込む
例
  共通コマンド….ROLAND_EXCLUSIVE $10,$16={$7F,$00,$00,$00}
  MML…@I$41,$10,$16 X$7F,$00,$00,$00


●SC55/SC155/CM300/CM500のGS音源部
$40,$00,$7Fにダミーデータを書き込む
例
  共通コマンド….ROLAND_EXCLUSIVE $10,$42={$40,$00,$7F,$00}
  MML…@I$41,$10,$42 X$40,$00,$7F,$00
  (SC55は初期化するとベンドレンジが2半音範囲になってしまう点に注意すること)

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                              COMCHK.R                              ┃
┃                                                                            ┃
┃                                                                            ┃
┃  開発途中はいろいろと曲のデータの方も日に日に手を入れられ改良されていく    ┃
┃                                                                            ┃
┃でしょうから、共通コマンドを撲滅するのは最終的な段階で構わないでしょう。   ┃
┃                                                                            ┃
┃  そこで最終的なチェック用としてコンパイルして生成したZMDデータに        ┃
┃                                                                            ┃
┃共通コマンドがあるかないかを検査するプログラム「COMCHK.R」を        ┃
┃                                                                            ┃
┃提供します。                                                                ┃
┃                                                                            ┃
┃  使い方は                                                                  ┃
┃                                                                            ┃
┃COMCHK  ZMDファイル                                                ┃
┃                                                                            ┃
┃とするだけです。共通コマンドがあれば「ある」と、なければ「ない」という結果を┃
┃                                                                            ┃
┃出力してくれます。                                                          ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


14.1.3.  BGMデータの改変具体例


  ここでは、いままで解説してきた事柄を実際の音楽プログラムに対して行ってみる

ことにしよう。

  リスト2のようなミュージックプログラムがあったとしてこれをゲーム向きの

データへ修正していくとする。

  まず、コンパイルをしてZMDを得る。

A>zmusic -c LIST2

  このZMDデータに対してZMD18.Rを実行しリダイレクトして

共通コマンド部分をMMLに変換する。

A>zmd18 LIST2 > LIST3

  リスト3のようなものが得られる。再びリスト2を読み込んで上から順番に

共通コマンドをつぶしていく。まず1番上の.comment文を'/'に置き換えて無効化

する。そこから下にみていくと、テンポコマンドがあるがこれを無効化しMMLに直す。

  その下のMIDI楽器個別コマンドを'/'で無効化する。ちょうどこれらの

共通コマンドの働きと同じものがZMD18.Rによって生成されたリスト3である。

  このリスト3をリスト2のMML部分の先頭に挿入する。前述のようにEOX($F7)の

あとには多少のウェイトが必要であるから、休符'r16'を2つあるEOXの後ろに

挿入する。このままでは1トラックだけr16×2=r8分演奏が遅れてしまうため他の

トラックにつじつま合せを施す。

  こうしてできたのがリスト4でこれをコンパイルすれば共通コマンドなしの

ZMDの完成となる。


14.1.4.  演奏開始ルーチン


  できた曲データ(ZMD)をゲームのメインプログラムから演奏するためには、

ZMUSICを呼び出すための簡単なマネージメント・プログラム(つまりは

演奏開始ルーチン)が必要である。さまざまな演奏開始ルーチンが考えられるが

サンプルとしてリスト5を示す。

  この例では各演奏データがmusic0、music1、music2…とそれぞれ偶数番地に

読み込まれているとする。そこでmusic0を演奏したいならばd0.lに0、music1を

演奏したいならばd0.lに1を入れ、このルーチンplay_musicをサブルーチンコールする

ようにする。これで演奏が開始される。

  演奏データに埋め込まれているドライバのバージョンIDをa1レジスタが

指標していなければならないというファンクション$11の仕様から、演奏データの

格納アドレスa1に7を足している。詳しくはファンクション$11の解説を参照。


14.1.5.  効果音データの作成とその活用方法


  ゲームのBGMに重ねて効果音を鳴らす場合はその演奏データのトラックと

チャンネルのアサイン関係をしっかり把握していなければならない。演奏データの

プログラマと効果音データのプログラマが異なる場合には、データ仕様を事前に

打ち合わせをしておくことをお勧めする。


●効果音データの制約

  効果音データも基本的にはBGMデータと同じようにZMSファイルを

コンパイルしたZMDで表現される。しかし、BGMデータとの大きな違いは

1.共通コマンドを持てない

2.効果音用の演奏トラックワークには初期値がない

3.以下のMMLコマンドを使用した時の動作が保証されない

・[]系コマンド([DO]〜[LOOP]は使用可)

・ 和音コマンド

  効果音の演奏制御は、高速応答を要求されるのでパラメータの有効範囲チェック等は

いっさい行っていない。不当なパラメータで関連ファンクションをコールした場合は

暴走する危険性がある。また、2.にもある通りワークの初期化も行わないため

ディチューンやボリューム等の基本パラメータの初期値も不定である。よって必ず

設定すること。

  また、効果音にMMLのテンポコマンドを用いることは禁止していないが、

その効果音が鳴るたびにBGMのテンポが変化してしまうため使用しない方がよい。

  効果音データの実例をリスト6に示す。音色データはすでに述べたように事前に

登録してあるものとする。これをコンパイルして得たZMDをダンプデータに

変換したものがリスト7である。ZMDにはヘッダ'ZmuSiC'などが付くが、これは

まったく不要であるため取ってしまう(残しておいても構わないがメモリのムダに

なるので)。そしてリスト7の10バイト以降をアセンブラのソース・プログラム形式に

変換してやるとリスト8のようなものになる。

  リスト9のように複数トラックの効果音データも作成可能である。これを

コンパイルし同様に変換してやるとリスト10のようになる。


●効果音の演奏における2つの形式

  効果音を鳴らす場合には2通りの形式が存在する。

  1つは効果音が鳴るチャンネルをあらかじめ空けておく形式である。つまり効果音が

鳴るチャンネルをあらかじめ決めておいてBGMデータを作成するわけである。

たとえばFM音源の1チャンネルから7チャンネルまでをBGM専用チャンネルとし、

8チャンネル目を効果音チャンネルと割り当てる、といった場合である。

  2つ目はBGMを演奏しているチャンネルに割り込んで効果音を演奏する形式である。

たとえばFM音源の1から8チャンネルすべてのチャンネルでBGMを演奏し、

そのうち8チャンネルが効果音に切り換わったりする、といった場合である。この場合、

効果音が頻繁に演奏されると8チャンネル目はほとんど効果音しか鳴らなくなり

BGMの一声が欠けて聞こえることになる。よってBGMの設計をする際に、

効果音が被ってくるチャンネルにはメロディやベース等の重要なパートを割り当て

ないようにすべきである。


●1番目の形式

  リスト11は効果音のマネージメント・プログラムの一例である(リスト11中の

サンプル効果音は、それぞれリスト8、リスト10とまったく同じもの)。

  se_play1を見てほしい。

  トラック1から6までをFM音源1チャンネルから6チャンネルに割り当てて

これをBGMで使用し、FM音源7〜8チャンネルを効果音として使用する場合を

考える。たとえばd0.lに効果音番号0をいれてse_play1を呼ぶと、トラック7番から

FM音源第7チャンネルでse0のデータが演奏される。se_play1中の

  moveq.l #7,d2

というのは、何番トラックで効果音を演奏するかを設定している。いま、

トラック1〜6まででBGMを演奏しているのでトラック7は未使用である。よって

何にもジャマされずごく普通に演奏がなされる。

  なぜこの例で効果音se0がFM音源第7チャンネルで演奏されるかというと、それは

se0の効果音データに演奏絶対チャンネル番号が6(0〜7のうちの6)というのが

埋め込まれているからである(囲み参照)。

  同様の条件で、se1を鳴らす場合も同様である。se1は複数トラックによって

構成された効果音データである。

  moveq.l #7,d2

とあるためトラック7から演奏するのである。まず、se1の第1トラックはd2.lで

指定した通りトラック7で演奏される。次にse1の第2トラックはd2.lで指定した

トラック番号+1のトラック8で演奏される。

  このように複数トラックで構成された効果音は、d2.lで指定したトラック番号から

順番にトラックが割り当てられ演奏される。


●2番目の形式

  では今度はトラック1〜8がFM音源1〜8チャンネルにアサインされBGMが

演奏されていたとして、これに効果音を鳴らす場合を考える。こちらは前節で解説した

2番目の形式である。

  se_play1は結論からいえばこのままこの形式に対応できる。単一トラックのse0も

複数トラック構成のse1にも対応できる。正しく効果音が鳴っている間は、その

チャンネルはBGM演奏を中断し、効果音を演奏し、演奏が終了すると何事も

なかったようにそのチャンネルのBGM演奏を再開する。

  では

  moveq.l #7,d2

を

  moveq.l #1,d2

にしてse0を鳴らしたとしたらどうなるであろうか。つまりse0がBGMの

トラック1から割り込むという場合である。

  たしかにBGMのトラック1(FM音源第1チャンネル)の演奏が中断されるが、

効果音se0はFM音源第7チャンネルで演奏されることになっているので、その

チャンネルで効果音を演奏しようとすると、BGM側のFM音源第7チャンネルに

アサインされたトラック7がFM音源第7チャンネルをアクセスしてくる。言い換えると

複数の違った演奏データを同時にたった1個のFM音源チャンネルで演奏しようする

状況が起こるわけである。そこで効果音、BGM、ともに演奏が異常状態に陥る。

  se1は2本のトラックで構成された効果音であるがこの2本目のトラックが

FM1チャンネルに割当てられていたとする。つまりse1の上から5段目が$00,$07で

なくて$00,$00となっている場合である。これを

  moveq.l #7,d2

で7トラックから割り込ませるとする。

  さて実行されるとBGMのトラック7に、FM音源第7チャンネルにアサインされた

se1の第1トラックが割り込んでくる。以後FM第7チャンネルは効果音を演奏する。

FM音源第7チャンネルにアサインされたBGM側のトラックは効果音に占領されて

いるトラック7しかないので、どのトラックからも効果音演奏を妨害されず

うまくいく。

  そしてつぎにBGM側のトラック8に、FM音源第1チャンネルにアサインされた

se1の第2トラックが割り込んでくる。BGM側のトラック8はそれまでFM音源

第8チャンネルで演奏していたBGMを中断しFM音源第1チャンネルで効果音を

演奏し始める。しかしその後、BGM側のトラック1がFM音源第1チャンネルを

アクセスしてくるのでおかしなことになってくる。

  つまりse1の第1トラックは正常に演奏されるが、第2トラックは正常に演奏されない

のである。

  つまりこの「効果音トラックがBGM演奏に割り込む」形式ではひとつ大前提が

あるのである。これから演奏する効果音のチャンネルが、割り込むトラックに

アサインされているチャンネルと同一でなければならないのである。

  この部分はたいへん重要である。

  以上の話を図式化したものを図1に示す。


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                絶対チャンネル                          ┃
┃                                                                        ┃
┃                                                                        ┃
┃  内部表現の絶対チャンネルはベースチャンネルに無関係に操作対象デバイスを┃
┃                                                                        ┃
┃決定するものです。							  ┃
┃                                                                        ┃
┃絶対チャンネル0〜7がFM音源の1〜8、絶対チャンネル8がADPCM1、┃
┃                                                                        ┃
┃絶対チャンネル9〜24がMIDI1〜16。そしてPCM8独立チャンネル  ┃
┃                                                                        ┃
┃モード時には絶対チャンネル25〜31がADPCM2〜8に対応します。    ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


●その他の応用

  効果音データはその演奏絶対チャンネルを持っていた。だから同じ効果音を違った

チャンネルで鳴らすためには、その絶対チャンネルの違ったデータを別に持たなければ

ならないのであろうか。それでも構わないが、メモリを浪費するので、効果音データの

その絶対チャンネルが書かれている部分を書き替えてひとつの効果音データを流用した

方が賢明である。

  リスト11のse_play2はその一例である。パラメータは効果音番号と演奏チャンネル

の2つ。効果音データのアドレスを得たあと、そのアドレス+7に演奏させたい

絶対チャンネルを書き込んでいる。効果音が複数トラックで構成されている場合は、

例えばse1ならば(効果音データのアドレス+7)の他に(効果音データのアドレス+13)

にも絶対チャンネルを設定しなければならない。

  se_play2では割り込むトラックはその絶対チャンネル+1の値にしている。これは

BGMのトラック1〜8がFM音源の第1チャンネルから第8チャンネル

(絶対チャンネルにして0〜7)にアサインされていることを前提としている。

  se_play3はse_play2を少し改良したものである。これは効果音をFM音源

第7チャンネルと第8チャンネルを交互に用いて鳴らす処理を付けてみたものである。

こちらもBGMのトラック1〜8がFM音源の第1チャンネルから第8チャンネル

(絶対チャンネルにして0〜7)にアサインされていることを前提としている。

  こういった、状況に応じて効果音データを書き替えるような処理を工夫すると、

様々な効果を実現可能である。3Dのゲームならば効果音データのパンポットを、

その3次元座標に合せて書き替えて、疑似立体音響を実現させることも可能だろう。


●MIDI対応曲にFMの効果音

  今まではFM音源のBGMにFM音源の効果音を割り込ませる話だったがMIDI

対応の曲にFM音源の効果音を割り込ませるにはどうしたらよいのかを解説する。

  BGMをMIDIで、効果音はFM音源で、という場合は各音源の目的が既に

区別されているので、効果音の使用チャンネルがBGMの使用チャンネルと

かち合わないため、前述の形式1のように実現できる。たとえばトラック1〜16

までをMIDIでBGMに使用している場合なら、効果音は未使用トラックである

トラック17以降に割り込ませれば(割り込んではいないが)よいことになる。

この方式は分かりやすく管理もしやすい。

  では、FM音源+MIDI楽器でBGMを、そしてFM音源で効果音を、という

場合はどうであろうか。複雑そうだがこれは結局FM音源のみのBGMにFM音源の

効果音を割り込ませた方法がほとんどそのまま使える。

  たとえばFM音源の第1チャンネルから第6チャンネルにアサインした

トラック1〜6、そしてMIDIにアサインしたトラック7〜12でBGMを

演奏していたとする。つまりFM音源第7,8チャンネルは未使用という時に、

この空いている2つのチャンネルを使って効果音を鳴らす場合を考える。これは

チャンネルがまったくかち合わないことから未使用トラックで効果音を鳴らせば

よいので前述の形式1がそのまま適用できる。よって効果音はトラック13以降へ

割り込ませてやれば(割り込んではいないが)よいことになる。

  最後にFM音源第1チャンネルから第8チャンネルまでをトラック1〜8に

アサインし、MIDIをトラック9〜16にアサインし、これでBGM演奏して、

これにFM音源の効果音を割り込ませる場合を考える。FM音源の効果音はMIDIに

対して何の影響も与えないことからトラック9〜16を除外して考えていいわけで

あるから、そうなると話はまったく前述の形式2と同じになってくる。つまり、

効果音をFM音源第8チャンネルで演奏するならトラック8に割り込ませればいい

ことになる。


●MIDIの効果音

  MIDIで効果音を鳴らす場合にはもっと話が単純化する。ただMIDIチャンネル

というものは単一チャンネルでもFM音源チャンネルでいう複数分として動作するから、

一つのMIDIチャンネルに対して複数のトラックをアサインするケースが頻繁に

出てくる。というわけで前述の形式1,2とも大した区別はなくなるわけである。

  しかし、管理の容易さから形式1を奨励する。つまり効果音専用の

MIDIチャンネルを取っておいてこのチャンネルを用いて効果音を鳴らすようにする

わけである。


●ADPCM音の効果音

  ADPCMはPCM8.Xモードでない時は単音であるため形式2のみ有効である。

  FM音源とADPCMが連続するようなチャンネルアサイン構造にしておいて、

FM音源とADPCM音源を両方使った効果音というのも演奏できる。

  また、複雑なものでないワン・ショットのADPCMの効果音の演奏ならば専用の

ファンクション・コール(ファンクション$13とファンクション$14)が設けてあるので、

それらを用いた方が高速応答が実現できる。

  リスト12にその一例を示す。

まず、リスト中のADPCM_se_play1を見てほしい。これは任意のアドレスに格納されて

いるADPCMデータをファンクションコール$13を使って、BGMに割り込ませて

鳴らすためのサブルーチンである。BGM側でADPCMをドラム等で使用している

場合はそれを一時停止して効果音を演奏する。効果音が鳴り終ると自動的にBGMの

演奏にもどる。

  ADPCM_se_play1ではアドレスに配置されたADPCMデータに便宜的に番号をつけ、

呼び出す時にはd0.lにその番号を代入して呼び出すようになっている。その後ろにある

adr_frq_tblは各効果音ADPCMデータのサイズ、優先レベル(囲み参照)、

データの開始アドレスの管理テーブルである。

  ADPCM_se_play2はZMUSICにすでにZPDデータ等によって登録済みの

ADPCM音を効果音で鳴らすためのサブルーチンである。ファンクションコール$14

をそのまま使っただけの単純なものである。d0.lに指定する効果音番号は

ADPCMコンフィギュレーションで設定したノートナンバーに相当する。例えば

コンフィギュレーションで

12=bomb.pcm

のように書き、これをZPDとしてZMUSICに登録してあれば、このbomb.pcmを

効果音で鳴らすには、d0.lに12を入れればよい。

  後ろについているfrq_pan_tblというテーブルはADPCM_se_play1のadr_frq_tblから

データサイズとデータアドレスを取り去ったような書式をしている。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                         ADPCM効果音の優先レベル                     ┃
┃                                                                          ┃
┃                                                                          ┃
┃  X68kのADPCMは(PCM8独立チャンネルモード時を除いては)単声    ┃
┃                                                                          ┃
┃です。ですから、効果音の発音要求は基本的に後着優先、つまり新しく発音要求  ┃
┃                                                                          ┃
┃されたものが発音されることになっています。しかし、ゲームなどで面と面との  ┃
┃                                                                          ┃
┃繋ぎのイベントの音声メッセージなど、どうしても爆発音などでかき消されたく  ┃
┃                                                                          ┃
┃ない場合があります。そこでZMUSICでは非PCM8モードでは効果音を    ┃
┃                                                                          ┃
┃発音させる時に優先レベルというものを設定可能になっています。優先レベルは  ┃
┃                                                                          ┃
┃0〜255まで設定可能ですが実用上は0,1程度で十分でしょう。            ┃
┃                                                                          ┃
┃  以下に優先レベルの例を示します。                                        ┃
┃                                                                          ┃
┃                                                                          ┃
┃  ┌─────────┬──────────┬───────┐            ┃
┃  │発音中の優先レベル│発音要求の優先レベル│     結果     │            ┃
┃  ├─────────┼──────────┼───────┤            ┃
┃  │       0          │        0           │ 発音要求採択 │            ┃
┃  │       0          │        1           │ 発音要求採択 │            ┃
┃  │       1          │        0           │ 発音要求却下 │            ┃
┃  │       1          │        1           │ 発音要求採択 │            ┃
┃  └─────────┴──────────┴───────┘            ┃
┃                                                                          ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


14.2.  映像との同期


  ZMUSICには映像と音楽演奏を同期させるためのファンクションコールや

機能が装備されている。ここではこの機能について解説を行う。


14.2.1.  ファンクションコール$43を用いる


  ファンクション$43で映像同期モードをオンにしてから演奏を開始すると、

演奏開始からある時点までの絶対音長の合計値が演奏トラックワーク

	p_total(.l)       $3C

に格納されていく。これをユーザープログラム側で監視すれば、曲に合わせて画面等を

切り換えることが出来る(例えばオーケストラヒットが鳴るたびに絵を換えるなど)。

  ちなみにワークp_totalの増加には以下の規則がある。

1.p_total()はMMLの[do]命令で初期化される。また、この時点までの

    p_totalの値を

	p_total_olp       $C6

    へ退避する。

2.p_totalは同期モードオンを行った時にのみ初期化される。'm_init()'命令、

    (I)命令、ファンクション$00などでは初期化されない。

3.p_totalは同期モードオンを行った時から値に意味を持ち始める。

  具体的な使用プロセスは以下のようになる。

1.ファンクション$43で同期モードをオンにする。

2.曲の演奏を開始する。

3.演奏トラックワークp_totalを参照し(MEASURE13参照)、狙った

    タイミングになるまで待つ。

4.狙ったタイミングになったならその仕事をする。

5.やりたいことが全て終わったらファンクション$43で同期モードをオフにする。


  演奏データのトラック1が4小節演奏されたら(合計ステップタイムにして192×4=768)
次の処理をするようなサンプルを以下に示す。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃Z_MUSIC macro   func    *ドライバへのファンクションコール・マクロ   ┃
┃        moveq.l func,d1                                             ┃
┃        trap    #3                                                  ┃
┃        endm                                                        ┃
┃                                                                    ┃
┃        moveq.l #1,d2   *トラック番号=1                            ┃
┃        Z_MUSIC #$3c    *a0=トラック1の演奏トラックワークの       ┃
┃                        *先頭アドレス                               ┃
┃wait_lp:                *4小節演奏するまでループ                   ┃
┃        cmpi.l  #768,p_total(a0)                                    ┃
┃        bcs     wait_lp                                             ┃
┃        *次の処理へ                                                 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


14.2.2.  ユーザー開放ワークを使用する


  演奏トラックワークの

	p_user(.b)        $ff

は、ユーザーが自由に使用してよいワークとされている。これに対してMMLの

ワーク直接書き替えコマンド

?a,d       a:ワークオフセット(0〜255)  d:データ(0〜255)

を用いて書き込みを行い監視プログラムとの通信を行い、映像の同期を行うことが

できる。このp_userは'm_init()'命令、(I)命令、ファンクション$00などでは初期化

されず、値は不安定となるので、演奏データの冒頭でこれを初期化する必要がある。

  具体的な使用プロセスは

1.演奏データは曲の先頭で

    ?$ff,0  (書き込む値は0でなくてもよい)

    を実行してp_userを初期化する。

2.ユーザープログラム側でp_userを監視し、希望の値が書き込まれるまで待つ。

3.演奏データは(目的のタイミングで)

    ?$ff,1  (書き込む値は1でなくてもよい)

    を実行し、監視プログラム側につぎの指示を促す。


  以下に演奏データのトラック1が、p_userに0以外の値を書き込むまで待ち、
書き込みを確認後、次の処理へ移る、というようなサンプルを示す。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(i)                                                         ┃
┃(m1,1000)(a1,1)                                             ┃
┃(t1)@1 o4 q8 v15 L4 ?$ff,0 cdef gab<c ?$ff,1 cdef gab<c     ┃
┃(p)                  ↑p_user_初期化    ↑p_userマーク      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃Z_MUSIC macro   func    *ドライバへのファンクションコール・マクロ   ┃
┃        moveq.l func,d1                                             ┃
┃        trap    #3                                                  ┃
┃        endm                                                        ┃
┃                                                                    ┃
┃        moveq.l #1,d2   *トラック番号=1                            ┃
┃        Z_MUSIC #$3c    *a0=トラック1の演奏トラックワークの       ┃
┃                        *先頭アドレス                               ┃
┃wait_lp:                *p_userが0以外になるまでループ              ┃
┃        tst.b   p_user(a0)                                          ┃
┃        beq     wait_lp                                             ┃
┃        *次の処理へ                                                 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

{ -- ZM15.MAN ------------------------------------------------
	    MEASURE15
         PCM8モード


 PCM8.X(江藤啓氏作,以下PCM8)は

X68k本体をいっさい改造せずに高度な

ソフトウェア処理でADPCMの発声数を

8倍に拡張してしまう画期的なアプリケーションです。

ここではこのPCM8のZMUSIC上での使い方に

ついて解説します。









15.1.  ZMUSICの組み込み


 MEASURE1に示したようにZMUSICにはPCM8に対して2通りの対応の仕方を

持っている。


●ポリモード

 PCM8を先に組み込み、そのあとオプションスイッチ'−O'を添付して

ZMUSICを組み込む。これで従来のADPCM1声のZMS/ZMD演奏データを

PCM8を用いてポリフォニックに演奏するモードとなる。

 従来の演奏データでは、たとえばシンバルを叩いた後このシンバルが鳴り終らない

うちにスネアを叩いたとすると、ADPCMの単音発声の制約からシンバルの音が

ブツリと切れてスネアの音に切り換わっていた。ここをブツ切りにしないで

(PCM8.Xを用いて)と前後の音を重ねて演奏してしまおうというのが

このモードの主旨である。

 このモードはZMUSICではPCM8ポリモードと呼ぶ。

組み込み例

A>pcm8
A>zmusic -o -p200 -t100

  '-O'の後ろに数値を書くと8声あるADPCMチャンネルのうち何チャンネルを

音楽演奏に割り当てるかを設定できる。余ったチャンネルは、効果音専用に扱われる。

組み込み例

A>pcm8
A>zmusic -o6 -p200 -t100		(2チャンネル(8-6=2)効果音用に使用する)


●独立チャンネルモード

 PCM8を組み込み、そのあと通常通りにZMUSICを組み込む。

これでPCM8が管理する疑似的な8つのADPCMチャンネルを個別に

使えるモードになる。

 ハード的な制約によりパンポット(音場)は各チャンネル独立には機能しないが、

音量やキーオン/キーオフ、周波数(5段階)は完全に独立にコントロールできる。

組み込み例

A>pcm8
A>zmusic -p200 -t100


15.2.  独立チャンネルモード


●チャンネルアサイン

 ADPCMを指すチャンネル番号を異なったトラックにアサインすることによって

それぞれのトラックが順番にADPCM1チャンネル,ADPCM2チャンネル,…,

ADPCM8チャンネルのように割り当てられていく。

 MUSICZ.FNCでは、例えばトラック9〜16をADPCM1〜8チャンネル

に割り当てたい場合は

m_ch("FM")の時
for i=9 to 16:m_alloc(i,1000):m_assign(9,i):next

m_ch("MIDI")の時
for i=9 to 16:m_alloc(i,1000):m_assign(25,i):next

あるいは'm_assign2()'を用いて

for i=9 to 16:m_alloc(i,1000):m_assign2("ADPCM"+str$(i−8),i):next

の様にする。

 ZMS書式では

m_ch("FM")の時
(m9,1000) (a9,9)
(m10,1000)(a9,10)
(m11,1000)(a9,11)
(m12,1000)(a9,12)
(m13,1000)(a9,13)
(m14,1000)(a9,14)
(m15,1000)(a9,15)
(m16,1000)(a9,16)

m_ch("MIDI")の時
(m9,1000) (a25,9)
(m10,1000)(a25,10)
(m11,1000)(a25,11)
(m12,1000)(a25,12)
(m13,1000)(a25,13)
(m14,1000)(a25,14)
(m15,1000)(a25,15)
(m16,1000)(a25,16)

または
(m9,1000) (a ADPCM1,9)
(m10,1000)(a ADPCM2,10)
(m11,1000)(a ADPCM3,11)
(m12,1000)(a ADPCM4,12)
(m13,1000)(a ADPCM5,13)
(m14,1000)(a ADPCM6,14)
(m15,1000)(a ADPCM7,15)
(m16,1000)(a ADPCM8,16)
のように行う。


●PCM8独立チャンネルモードで使用解禁となるMML

 従来ADPCMトラックで使用可能のMMLはすべて使用可能である。

PCM8独立チャンネルモードでは従来ではADPCMトラックでは使用が

禁止されていたV,@Vのボリュームコマンドが使用可能になる。ボリュームは

0〜16が有効範囲で原音量は9。@V使用時は1〜16へ換算される。


●機能拡張されるMML

 独立チャンネルモードでは周波数設定コマンドである@F命令は各トラック独立に

機能するようになる。

 また、PCM8が扱うことのできる新データ方式「16ビットPCMデータ」

「8ビットPCMデータ」(囲み参照)を扱うことができるようになる。

@F5  16ビットPCMデータ方式
@F6   8ビットPCMデータ方式



15.3.  注意


 ZMUSICの音楽演奏も割り込み処理、またPCM8の発音処理も

割り込み処理である。よって10MHzのX68kだとお互いの割り込み処理が

フル回転(?)したときには音楽のテンポに影響が出る場合がある。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃           8,16ビットPCMデータ方式とは?		      ┃
┃									      ┃
┃									      ┃
┃ X68kの扱うADPCMデータとはいわばサンプリングしてできた	      ┃
┃									      ┃
┃PCMデータが一種のアルゴリズムで圧縮されていると考えられます。	      ┃
┃									      ┃
┃音量の変更や周波数変換、合成処理を行うにはこのADPCMデータ方式から      ┃
┃									      ┃
┃PCMデータ方式へ変換しなければなりません。PCM8ではこの変換処理を      ┃
┃									      ┃
┃割り込みでリアルタイムで行っていますが、もしこの処理を省けるならば          ┃
┃									      ┃
┃かなり割り込み処理を軽くすることが出来るはずです。そこでPCM8では	      ┃
┃									      ┃
┃無圧縮のPCMデータを演奏出来るようになっています。			      ┃
┃									      ┃
┃ 16ビットPCMデータ方式は符号付き16ビット整数により表現された	      ┃
┃									      ┃
┃データです(−32768〜32767)。同一音長のADPCMデータの4倍のデータ長に    ┃
┃									      ┃
┃なります。ちょうどZVT.Xで'−C'スイッチにより生成されるPCMデータと  ┃
┃									      ┃
┃同じものです。1つのデータが2バイト構成であることから必ずデータ長は偶数で  ┃
┃									      ┃
┃なければ正常に鳴りません。						      ┃
┃									      ┃
┃ 8ビットPCMデータは方式は同様に符号付き8ビット整数により表現された    ┃
┃									      ┃
┃データです(−128〜127)。同一音長のADPCMデータの2倍のデータ長に        ┃
┃									      ┃
┃なります。								      ┃
┃									      ┃
┃ 8ビットPCMデータ/16ビットPCMデータともに特別な設定もなしに      ┃
┃									      ┃
┃ZPCNVでZPDデータを作成出来ます。もちろんADPCMデータと混在させて┃
┃									      ┃
┃ZPDデータにすることも出来ます。					      ┃
┃									      ┃
┃ 再生周波数はどちらとも15.6kHz固定ですがADPCM方式との混在が    ┃
┃									      ┃
┃可能でADPCMデータ側はこの時も5段階の周波数が使用可能です。	      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
{ -- ZM16.MAN ------------------------------------------------
	    MEASURE16
		   付録


  ZMUSIC用のC言語ライブラリに

ついて解説します。







16.1.ZMUSIC用C言語ライブラリの構成


 ZMUSIC用のC言語ライブラリは以下の3つのファイルで構成されている。

	ZMUSIC.L	C言語用ライブラリ(ソースリストファイル名はZMLIB.HAS)
	ZMUSIC.H	C言語用インクルードファイル
	ZMUSIC.DEF	BC.X用DEFファイル

ZMLIB.HASからZMUSIC.Lを生成するには

	A>HAS ZMLIB
	A>LIB /U ZMUSIC.L ZMLIB.O

とする(HASはフリーソフトのハイスピードアセンブラ、LIBはCコンパイラPRO68kに

付属のライブラリアン)。


16.2.ZMUSIC.Hの利用法


  自分のシステムの、インクルード・ファイルが格納してあるディレクトリに

ZMUSIC.Hをコピーする。

例
	A>COPY ZMUSIC.H A:\INCLUDE

  ZMUSIC.XをC言語のプログラムから使いたい場合は、そのプログラムの冒頭に

	#INCLUDE	<ZMUSIC.H>

の1行をつける。

  なお、ZMUSIC.Hに含まれる関数の名前はMUSICZ.FNCとまったく同じである。

各関数の詳しい仕様はZMUSIC.H本体、またはMEASURE3のMUSICZ.FNCの項を参照のこと。

 基本的にX−BASIC用外部関数であるMUSICZ.FNCにコンパチに作られているが、

一部の言語仕様の違いから互換でない関数もある。X−BASICでは配列の

要素数を関数側で自動認知することができるがC言語ではそれができない。そのため、

MUSICZ.FNCではパラメータの個数等を省略できた関数がZMUSIC.Hでは省略できない、

といった仕様変更のなされた関数がある(以下3つ)。

		m_dirout()
		m_exc()
		m_roland()

  またさらに、X−BASICではパラメータ個数を書かなくてもよかった関数も

C言語では書かせるような仕様に変更されたものがある(以下11個)。

		sc55_reverb()
		sc55_chorus()
		sc55_part_setup()
		sc55_drum_setup()
		mt32_reverb()
		mt32_part_setup()
		mt32_drum_setup()
		mt32_common()
		mt32_patch()
		mt32_partial()
		u220_drum_inst()

  MUSICZ.FNCにはなかったコマンドが新設されている。

    m_wave_form2()

	波形メモリ登録コマンド#2 (short int専用版/配列データ加工なし)


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃				ZMUSIC.L関数一覧			      ┃
┃									      ┃
┃int	m_alloc( int track_no, int buffer_size );			      ┃
┃									      ┃
┃int	m_assign( int channel_no, int track_no );			      ┃
┃									      ┃
┃int	m_vget( int tone_no, char *data_ptr );				      ┃
┃									      ┃
┃int	m_vset( int tone_no, char *data_ptr );				      ┃
┃									      ┃
┃int	m_tempo( int tempo );		/* tempo=-1でリクエスト */	      ┃
┃									      ┃
┃int	m_trk( int track_no, char *MML_ptr );				      ┃
┃									      ┃
┃int	m_free( int track_no );						      ┃
┃									      ┃
┃int	m_play( int track_no1, int track_no2, int track_no3, int track_no4,   ┃
┃		int track_no5, int track_no6, int track_no7, int track_no8,   ┃
┃		int track_no9, int track_no10 );			      ┃
┃		/* track_no1=0 で全トラック演奏開始 */			      ┃
┃		/* track_no?=0 または 'NASI' 以降を無視する。 */	      ┃
┃									      ┃
┃int	m_stat( int track_bit_pattern );				      ┃
┃		/* track_bit_pattern=0 で全チャンネル検査 */		      ┃
┃									      ┃
┃int	m_stop( int track_no1, int track_no2, int track_no3, int track_no4,   ┃
┃		int track_no5, int track_no6, int track_no7, int track_no8,   ┃
┃		int track_no9, int track_no10 );			      ┃
┃		/* track_no1=0 で全トラック演奏停止 */			      ┃
┃		/* track_no?=0 または 'NASI' 以降を無視する。 */	      ┃
┃									      ┃
┃int	m_cont( int track_no1, int track_no2, int track_no3, int track_no4,   ┃
┃		int track_no5, int track_no6, int track_no7, int track_no8,   ┃
┃		int track_no9, int track_no10 );			      ┃
┃		/* track_no1=0 で全トラック演奏継続 */			      ┃
┃		/* track_no?=0 または 'NASI' 以降を無視する。 */	      ┃
┃									      ┃
┃void	m_init( void );							      ┃
┃									      ┃
┃int	m_atoi( int track_no );						      ┃
┃									      ┃
┃int	m_assign2( char *channel, int track_no );			      ┃
┃									      ┃
┃void	m_ch( char *device );						      ┃
┃									      ┃
┃int	m_pcmset( int note_no, char *filename,				      ┃
┃		  int pitch, int vol, int mix_note_no, int delay,	      ┃
┃		  int cut, int reverse, int fade_in_out );		      ┃
┃	/* int pitch以降のパラメータを省略する場合は 'NASI' とすること */     ┃
┃									      ┃
┃void	m_pcmplay( int note_no, int pan, int freq );			      ┃
┃									      ┃
┃void	m_rec( void );							      ┃
┃									      ┃
┃void	m_rstop( void );						      ┃
┃									      ┃
┃int	m_save( char *filename );					      ┃
┃									      ┃
┃int	m_trans( char *filename );					      ┃
┃									      ┃
┃int	m_fmvset( int tone_no, char *data_ptr );			      ┃
┃									      ┃
┃int	m_out( int  d1, int  d2, int  d3, int  d4, int  d5,		      ┃
┃	       int  d6, int  d7, int  d8, int  d9, int d10 );		      ┃
┃		/* d?=-1 以降を無視する。 */				      ┃
┃									      ┃
┃int	m_dirout( char *adrs, int size );				      ┃
┃		/* sizeの省略不可 */					      ┃
┃									      ┃
┃int	m_exc( char *adrs, int size );					      ┃
┃		/* sizeの省略不可 */					      ┃
┃									      ┃
┃int	m_roland( int devID, int modelID, char *adrs, int size );	      ┃
┃		/* sizeの省略不可 */					      ┃
┃									      ┃
┃int	m_total( void );						      ┃
┃									      ┃
┃int	m_fadeout( int speed );						      ┃
┃									      ┃
┃int	m_pcmcnf( char *filename );					      ┃
┃									      ┃
┃int	sc55_v_reserve( char *adrs, int devID );			      ┃
┃				/* size=16 */				      ┃
┃									      ┃
┃int	sc55_reverb( char *adrs, int devID, int size );			      ┃
┃				/* size=7 */				      ┃
┃									      ┃
┃int	sc55_chorus( char *adrs, int devID, int size );			      ┃
┃				/* size=8 */				      ┃
┃									      ┃
┃int	sc55_part_setup( char part_no, char *adrs, int devID, int size );     ┃
┃				/* size=119 */				      ┃
┃									      ┃
┃int	sc55_drum_setup( char map_no, char note_no,			      ┃
┃			 char *adrs, int devID, int size );		      ┃
┃				/* size=8 */				      ┃
┃									      ┃
┃int	sc55_print( char *message, int devID );				      ┃
┃				/* size=32 */				      ┃
┃									      ┃
┃int	sc55_display( int *pattern, int devID );			      ┃
┃									      ┃
┃int	m_adpcm_block( char *filename );				      ┃
┃									      ┃
┃int	mt32_p_reserve( char *adrs, int devID );			      ┃
┃				/* size=9 */				      ┃
┃									      ┃
┃int	mt32_reverb( char *adrs, int devID, int size );			      ┃
┃				/* size=3 */				      ┃
┃									      ┃
┃int	mt32_part_setup( char *adrs, int devID, int size );		      ┃
┃				/* size=9 */				      ┃
┃									      ┃
┃int	mt32_drum_setup( char note_no, char *adrs, int devID, int size );     ┃
┃				/* size=4 */				      ┃
┃									      ┃
┃int	mt32_common( char timbre_no, char *timbre_name,			      ┃
┃		     char *adrs, int devID, int size );			      ┃
┃				/* size=4 */				      ┃
┃									      ┃
┃int	mt32_patch( char patch_no, char *adrs, int devID, int size );	      ┃
┃				/* size=7 */				      ┃
┃									      ┃
┃int	mt32_partial( char timbre_no, char partial_no,			      ┃
┃		      char *adrs, int devID, int size );		      ┃
┃				/* size=58 */				      ┃
┃									      ┃
┃int	mt32_print( char *message, int devID );				      ┃
┃				/* size=20 */				      ┃
┃									      ┃
┃int	m_print( char *message );					      ┃
┃				/* size=96 */				      ┃
┃									      ┃
┃int	u220_setup( char *adrs, int devID );				      ┃
┃				/* size=7 */				      ┃
┃									      ┃
┃int	u220_common( char *adrs, int devID );				      ┃
┃				/* size=17 */				      ┃
┃									      ┃
┃int	u220_drum_setup( char *adrs, int devID );			      ┃
┃				/* size=7 */				      ┃
┃									      ┃
┃int	u220_part_setup( char part_no, char *adrs, int devID );		      ┃
┃				/* size=13 */				      ┃
┃									      ┃
┃int	u220_timbre( char timbre_no, char *timbre_name,			      ┃
┃		     char *adrs, int devID );				      ┃
┃				/* size=26 */				      ┃
┃									      ┃
┃int	u220_drum_inst( char note_no, char *adrs, int devID, int size );      ┃
┃				/* size=20 */				      ┃
┃									      ┃
┃int	u220_print( char *message, int devID );				      ┃
┃				/* size=12 */				      ┃
┃									      ┃
┃int	m1_midi_ch( char *midi_ch_list );				      ┃
┃				/* size=8 */				      ┃
┃									      ┃
┃int	m1_part_setup( char *track_param );				      ┃
┃				/* size=40 */				      ┃
┃									      ┃
┃int	m1_effect_setup( char *effect_param );				      ┃
┃				/* size=25 */				      ┃
┃									      ┃
┃int	m1_print( char *message );					      ┃
┃				/* size=10 */				      ┃
┃									      ┃
┃int	send_to_m1( int devID );					      ┃
┃									      ┃
┃int	zmd_play( char *filename );					      ┃
┃									      ┃
┃void	m_debug( char mode );						      ┃
┃									      ┃
┃int	m_count( char count );						      ┃
┃									      ┃
┃int	fm_master( char volume );					      ┃
┃									      ┃
┃int	m_mute( int ch_no1, int ch_no2, int ch_no3, int ch_no4,		      ┃
┃		int ch_no5, int ch_no6, int ch_no7, int ch_no8,		      ┃
┃		int ch_no9, int ch_no10 );				      ┃
┃		/* ch_no1=0 で全トラック演奏継続 */			      ┃
┃		/* ch_no?=0 または 'NASI' 以降を無視する。 */		      ┃
┃									      ┃
┃int	m_solo( int ch_no1, int ch_no2, int ch_no3, int ch_no4,		      ┃
┃		int ch_no5, int ch_no6, int ch_no7, int ch_no8,		      ┃
┃		int ch_no9, int ch_no10 );				      ┃
┃		/* ch_no1=0 で全トラック演奏継続 */			      ┃
┃		/* ch_no?=0 または 'NASI' 以降を無視する。 */		      ┃
┃									      ┃
┃int	m_wave_form( char wave_no, char loop_type, int loop_point,	      ┃
┃			int *wave_data, int size );			      ┃
┃									      ┃
┃int	m_wave_form2( char wave_no, char loop_type, int loop_point,	      ┃
┃			short int *wave_data, int size );		      ┃
┃									      ┃
┃int	sc55_init( int devID );						      ┃
┃									      ┃
┃int	mt32_init( int devID );						      ┃
┃									      ┃
┃void	adpcm_to_pcm( char *source, int size, int *destination );	      ┃
┃		/* destinationの配列サイズはsourceの4倍必要		      ┃
┃		   また、sizeはADPCMデータの個数 */			      ┃
┃									      ┃
┃void	pcm_to_adpcm( int *source, int size, char *destination );	      ┃
┃		/* destinationの配列サイズはsourceの1/4倍必要		      ┃
┃		   また、sizeはPCMデータの個数 */			      ┃
┃									      ┃
┃void	exec_zms( char *zms_line );					      ┃
┃									      ┃
┃int	m_inp( char inp_mode );	/* inp_mode≠0でループモード */		      ┃
┃									      ┃
┃int	zm_ver( void );							      ┃
┃									      ┃
┃int	m_trk2( char *MML_ptr,						      ┃
┃		int track_no1, int track_no2, int track_no3 ,int track_no4,   ┃
┃		int track_no5, int track_no6, int track_no7 ,int track_no8 ); ┃
┃		/* track_no?=0 または 'NASI' 以降を無視する。 */	      ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


16.3.ZMUSIC.DEFの利用法


  ZMUSICを利用したX-BASICのプログラムをコンパイルする時に使用する。

まず、自分のシステムの、BC.X(X-BASICをC言語へコンバートするプログラム、

C言語PRO68Kに付属)が格納してあるディレクトリにZMUSIC.DEFをコピーする。

例
	A>COPY ZMUSIC.DEF A:\BC

  そのディレクトリ内のBASIC.CNFというファイルを開き

	FUNC=ZMUSIC

の1行を加えてセーブする。BASIC.CNF中に

	FUNC=MUSIC
	FUNC=MUSIC2
	FUNC=MUSIC3

などが記述してある場合は、それらをすべて削除する(同名の関数が存在しているため

誤動作する可能性がある)。


16.4.ZMUSIC.Lの利用法


  コンパイルする時にライブラリファイルとして利用するには、まず自分のシステムの

ライブラリファイルが格納してあるディレクトリにZMUSIC.Lをコピーする。

例
	A>COPY ZMUSIC.L A:\LIB

  コンパイルしてできるオブジェクトにZMUSIC.Lをリンクし実行ファイルを得るには、

例	ZMUSIC.Xを使用したX-BASICのプログラムをコンパイルする場合

	A>CC ????.BAS ZMUSIC.L

例	ZMUSIC.Xを使用したC言語のプログラムをコンパイルする場合

	A>CC ????.C ZMUSIC.L

のようにする。
{ -- ZM_END.MAN ------------------------------------------------

 マニュアル、およびZMUSICシステムに関するお問い合わせは、

			MIYA-NET(048-648-9801,24H,6回線)
				MIYA0212 TED氏まで

			(MIYA-NETはゲストユーザーでも
			 アップロード/ダウンロードできます。
			 最新のZMUSIC、曲データ、支援ツールなど
			 がダウンロードできますので、
			 ぜひ一度遊びにきてみて下さい。
			 ログイン後、トップメニューで
			  ;D;5
			 と打ち込むと「ZMUSIC-SIG」に入ることが
			 できます。)
または、
			〒108 東京都港区高輪2−19−13
				 NS高輪ビル 3F
			Oh!X編集部「ZMUSICに不明点あり!?」係

まで、お寄せください。

{ -- 用語解説.MAN ------------------------------------------------
A

 ADPCM(ADDAPTIVE DIFFERENTIAL PULSE CODED MODULATION)

	X68kの内臓音源の一つで、自然音をそのままデジタルレコーディングし、
	これを再生することができる。ZMUSICではひとつの楽器音源として
	コントロールが可能。

 アフタータッチ(AFTER-TOUCH)
 アフタータッチシーケンス(AFTER-TOUCH SEQUENCE)

	鍵盤を押す強さを発音後変化させること。MIDI楽器によっては、音色の
	ニュアンスの変化を変えたり、ビブラートやトレモロなどの効果を与えたり
	することができる。ZMUSICでは発音後、音長の1/8単位で
	アフタータッチ処理することができる。これをZMUSICでは
	アフタータッチシーケンスと呼ぶ。ZMUSICではFM音源に対しての
	アフタータッチもサポートしているが、この場合は音量の変化のみを
	制御することができる。(MML:@Z)

 アルゴリズム(ALGORITHM)

	FM音源は4つのオペレータ(発信器)で構成されているが、
	この各オペレータをどのように接続するかを決定するもの。X68kに
	内蔵されているFM音源チップOPMは8つの「アルゴリズム」が
	プリセットされており、音色作成時にはこの8つから選ぶことになる。

 アンプリチュード・モジュレーション(AMPLITUDE MODULATION)

	音量を周期的に変化させる音の表情付けの技法。トレモロともいわれる。
	ZMUSICでは、4つのプリセット波形や、ユーザーが作成した波形に
	そって変化させたり、発音後、音長の1/8ごとに掛かり具合を変化させたり
	することができる。ZMUSICではこの機能はFM音源専用と
	なっているが、MIDI楽器ではARCCをこの機能に使うことで
	実現が可能。
	(MML:@A)

 ARCC(ASSIGNABLE REALTIME CONTROL CHANGE)

	ZMUSICにおけるMIDI楽器専用の特殊機能の一つ。
	各トラックごとに、コントロールするコントロールチェンジを選択し、
	これを音長の1/8ごとや設定した波形などに沿ってこれを
	コントロールするもの。(MML:@A)

 アルペジオ(ARPPEGGIO)

	分散和音。和音を構成する一音一音を少しずつ時間をずらして演奏するもの。
	ZMUSICでは和音コマンドやダンパー・コマンドで表現が可能。

 オート・ベンド(AUTO BEND)
 オート・ピッチ・ベンド(AUTO PITCH BEND)

	ZMUSICの特殊機能の一つで、発音後、任意の高さまで音程をなめらかに
	変化させることができる機能。(MML:@B)

B

 ベンド(BEND)→ピッチ・ベンド(PITCH BEND)

C

 キャリア(CARRIER)

	FM音源のオペレータの名称で、おもにエンベロープ/音量が決定する
	働きがある。

  チャンネル・プレッシャー(CHANNEL PRESSURE)
  
  	MIDIチャンネル単位のアフタータッチ。
  	→アフタータッチ

  チェック・サム(CHECK SUM)

	ローランド・エクスクルーシブの最後尾につく、データを正確に受信できたか
	どうかを確かめるために用いられる7ビットデータのこと。

  コーラス(CHORUS)
  
  	エフェクタの一種で微妙に音程の違った音を重ねて音を厚くする。
  	ローランドGS音源では、このエフェクトがプリセットされている。

  クロック(CLOCK)
 
 	絶対音長のこと。ZMUSICはデフォルトでは4分音符=24クロックで
 	処理されている。
 
  コントロール・チェンジ(CONTROL CHANGE)
 
 	MIDI楽器には特殊な機能を手軽にコントロールするために定められた
 	レジスタ群があり、これをコントロール・チェンジという。(MML:Y,@C)

D

  ディレイ(DELAY)
  
  	ピッチモジュレーションをはじめとした、音にたいして特殊な効果を
  	与える際に、その効果が開始されるまでの遅延時間を決定するパラメータ。

  デプス(DEPTH)→振幅

  ディチューン(DETUNE)
    
  	音程を微調整するパラメータ。本来の音階から決定される周波数とは違った
  	音程で演奏させて、コーラス効果を得たりする目的でよく用いられる。
  	(MML:@K,@B)

 デバイスID(DEVICE ID)

	MIDI楽器に対してユーザーが設定した識別番号。

  ダブル・フラット(DOUBLE FLAT)

  	一度(2半音)下げる変化記号(MML:--)

  ダブルシャープ(DOUBLE SHARP)
	一度(2半音)上げる変化記号(MML:++)

 ダンパー(DUMPER)
  ダンパー・ペダル(DUMPER PEDAL)
  
  	MIDIメッセージのひとつ。ダンパー・オンにすると、以後、発音した音は
  	ノート・オフの情報を無視し、発音をダンパー・オフとするまで鳴り続ける。
  	ダンパーはMIDIチャンネルごとに指定可能。ZMUSICではFM音源や
  	ADPCMにおいても使用可能。(MML:@D)
  
E

 エフェクト(EFFECT)
 エフェクタ(EFFECTOR)

	音に特殊な味付けをすること。この装置をエフェクタという。
	MIDI楽器には音源の他にエフェクターを持った物が多くある。
	ZMUSICではGS音源とローランドMT32/CM系のエフェクタを
	手軽に操作する命令が備わっている。(MML:@E)

 エンベロープ(ENVELOPE)

	音量の時間的変化のこと。

  エクスクルーシブ・メッセージ(EXCLUSIVE MESSAGE)
  
  	MIDI楽器のメモリーを直接書き換えることのできるMIDIコントロール
  	コマンドのこと。(MML:@X,X)

  エクスプレッション(EXPRESSION)
  
  	そのMIDIチャンネルの出力音量の割合を決定するコントロールチェンジ
  	機能の一つ(コントロール番号??)。コントロールチェンジ7番のボリューム
  	とは別管理のため、最終的には
  	ボリューム(0〜127)×エクスプレッション(0〜127)
  	でそのMIDIチャンネルの出力音量が決定される。

F

 フラット(FLAT)

	半音下げる変化記号。(MML:-)

  フェード・イン(FADE IN)

  	通常音量まで音量を徐々に上げていくこと。(MML:\)

  フェード・アウト(FADE OUT)

	無音状態へむかって音量を徐々に下げていくこと。(MML:\)

G

  ゲートタイム(GATE TIME)
  
  	1つの音符が実際に発音している時間。

 逆転再生→リバース

  GM(GENERAL MIDI)
  
  	MIDI規格が承認した、統一音色配列規格。ヤマハTG100、
  	ローランドSC55シリーズなどがこの規格の代表的機種。

  GS
  
  	ローランドが提唱したMIDI楽器の統一音色配列規格。SC55や
  	CM300、JV30などがこの規格の代表的機種。

H

  波形(WAVE TYPE)
  
  	ZMUSICではピッチ・モジュレーション、アンプリチュード・
  	モジュレーション、拡張ARCCに対して鋸歯状波、矩形波、三角波、
  	鋸歯波シングル、ユーザーメイドの波形で制御が可能である。(MML:S)

 波形メモリ(WAVE MEMORY)

	ユーザーが各ポイントの任意の値を設定していき、非線形の波形をつくる事が
	できる。この機能を波形メモリといい、ZMUSICではピッチ・
	モジュレーション、アンプリチュード・モジュレーション、拡張ARCCを
	この機能でコントロールする事ができる。(ZMS:wave_form,
	MUSICZ.FNC:m_wave_form)

  波長
  
  	波形の一周期の長さ。ZMUSICではモジュレーション波形である
  	プリセット波形の波長を変更可能である。(MML:@S)

  ホールド(HOLD)→ダンパー(DUMPER)

I

  インストルメント(INSTRUMENT)
  
  	楽器のこと。
 
J


K

  拡張ピッチモジュレーション()
  拡張ARCC()
  
  	MIDIトラックに対して有効な機能。FM音源トラックのように
  	4つのプリセット波形とユーザー波形を用いたピッチモジュレーションや
  	ARCCが可能になる機能。(MML:M)


 キーオン(KEY ON)→NOTE ON

 キーオフ(KEY OFF)→NOTE OFF

  キートランスポーズ(KEY TRANSPOSE)
  
  	音程を規定のものからずらすこと。同じような意味の言葉に
  	「ディチューン(DETUNE)」がある。

L

M

  メーカーID(MAKER ID)
  
  	MIDI楽器メーカーの識別番号。

  MIDI(MUSICAL INSTRUMENT DIGITAL INTERFACE)

    	デジタル楽器の世界規格。メーカーや機種が違っていても、MIDI対応
    	ならば同じコマンドメッセージで楽器をコントロールする事ができる。

 モデルID(MODEL ID)

	MIDI楽器に対してメーカーが設定した楽器の識別番号。

  モノ(MONO)

  	一つのMIDIチャンネルで一度に一音しか発音できないモード。
  	トランペットなどのブラス系の音はこのモードにすると現実的。

  モジュレータ(MODULATOR)

  	FM音源のオペレータの名称で入力された波形を変調し音素を作り出す
  	働きがある。

  モジュール(MODULE)→音源モジュール


  マルチ・ティンバー(MULTI TIMBRE)
  
  	一台の音源で一度に複数の楽器を演奏することが出来る機能のこと。

N

  NRPN(NON REGISTERED PARAMETER NUMBER)

	MIDI規格では定義されていないそのMIDI楽器特有の機能パラメータ。

  ノートオン(NOTE ON)

	発音すること。

  ノートオフ(NOTE OFF)

	以前発音した音を消音すること。

O

  オクターブ(OCTAVE)
  	
  	ある音階から8度離れていることをいう。(MML:O)

  オムニ(OMNI)

	その設定された受信チャンネルとは無関係にすべてのチャンネル情報を
	認識するモードのこと。

  音源モジュール
  
  	鍵盤のない音源のみで構成されたMIDI楽器のこと。コンピュータや
  	シーケンサ、他のシンセサイザからMIDIによってコントロールする
  	ことによってのみ演奏を行うことが出来る。

  音量→ボリューム(VOLUME)

 音量モジュレーション→アンプリチュードモジュレーション(AMPLITUDE MODULATION)

  音程モジュレーション→ピッチモジュレーション(PITCH MODULATION)

 OPM

	X68000に内蔵されているヤマハ製のFM音源チップ。4オペレータ
	で構成され最大発音数8音。 

P

  パンポット(PANPOT)

	発音する位置を設定するパラメータ。FM音源やADPCM音源では
	1,2,3が左、中央、右に対応する。MIDIではコントロールチェンジの
	10番がパンポットの機能に相当する。パラメータの範囲は0〜127までで
	0が最も左、64が中央、127が最も右に対応する。(MML:P,@P)

  パーシャル(PARTIAL)
  
  	ローランドのシンセサイザ音源における音色を構成する発信源の名称。
	一つの音色が複数のパーシャルで構成されていることもある。
  
  パーシャル・リザーブ(PARTIAL RESERVE)
  
  	ローランドのマルチティンバー音源において、1パート内で保証される
  	パーシャル数を決定すること。一時的に音源に対して同時発音数を上回る
  	発音要求があったとしてもパーシャル・リザーブがしてあればその数の
  	パーシャルは確実にそのパートの発音のために保証される。
  	

 ピッチ・モジュレーション(PITCH MODULATION)

	音程を周期的に変化させる音の表情付けの技法。ビブラートともいわれる。
	ZMUSICでは、4つのプリセット波形や、ユーザーが作成した波形に
	そって変化させたり、発音後、音長の1/8ごとに掛かり具合を変化させたり
	することができる。
	(MML:@M)

  ピッチ・ベンド(PITCH BEND)

	音程をなめらかに変化させること。ZMUSICではパラメータを
	与えることでオートマチックにこの処理を行うことができる。(MML:@B)

  ポリ(POLY)
  
  	一つのMIDIチャンネルで一度に複数の音を発音できるモード。

  ポリフォニック・プレッシャー(POLYPHONIC PRESSURE)
  
  	鍵盤単位で制御可能なアフタータッチ。
  	→アフタータッチ

  ポルタメント(PORTAMENTO)
  
  	音程をなめらかに変化させること。(MML:(〜))
  
  プログラム・チェンジ(PROGRAM CHANGE)
  
  	音色切り替えのこと。
  
Q

  クオンタイズ

	リアルタイムレコーディングされた演奏情報をある規則にしたがって
	整理すること。

R

  リバース(REVERSE)
  
	ADPCMデータをデータ末尾から先頭へ向かって再生すること
	ZMUSICではADPCMコンフィギュレーションでこの指定が可能。

  リバーブ(REVERB)
  
  	ソースの音に対して残響効果を与えて出力するエフェクターの一種。
  	あたかもコンサートホールで演奏しているような効果を演出することが
  	できる。
  
  RPN(REGISTERED PARAMETER NUMBER)

  	MIDI規格で定義されたMIDI楽器の拡張機能パラメータ。
	ピッチベンドの幅のような楽器の機種によらない一般的なパラメータが
	設定されている。

S

 シャープ(SHARP)

	半音上げる変化記号。(MML:#)

  振幅
  
  	ピッチモジュレーションなど、波形を用いて音に効果を与えるコマンドに
  	おいて、その効果の掛かり具合を決定するパラメータ。(MML:@M,@A)

  ステップタイム(STEP TIME)
  
  	一つの音符が演奏される時間。(MML:L,@L)

  ソステヌート(SOSTENUTO)
  
  	速さを押え気味に、音を一様に持続して演奏する奏法。

T

  ティンバー(TIMBRE)
  
  	楽器(音色)のこと。

  タイマー(TIMER)
  
  	ZMUSICが音楽のテンポを管理するために使っているもの。X68kの
  	OPMにはタイマーAとタイマーBが存在し、ZMUSICではどちらか
  	一方のタイマーを用いてテンポを制御可能になっている。タイマーBより
  	タイマーAの方がテンポ決定の計算の際の誤差が少ない。(MML:T,@T)

 トレモロ(TREMORO)→アンプリチュード・モジュレーション(AMPLITUDE MODULATION)

U

 ユーザー波形→波形メモリ

Y

V

  ビブラート(VIBRATO)→ピッチ・モジュレーション(PITCH MODULATION)


W

 ウェイト(WAIT)

	処理が終わるまで待ち時間をもうけること。MIDI楽器では
	EOX($F7)受信後、受信内容の処理のために多少のウェイトを必要とする。
	MMLのXコマンドでエクスクルーシブ・メッセージを送信する場合は、
	このウェイト期間を考慮して、命令後に休符などのウェイトを設定した方が
	よい。

X

Y

  Yコマンド
  
  	音源のレジスタを直接書き換えるMML命令のこと。ZMUSICでは
  	MIDIに対してのYコマンドはコントロールチェンジとして扱われる。

Z

 絶対音長(ABSOLUTE LENGTH)

	ZMUSICが処理する音長カウンタのこと。デフォルトでは4分音符は
	絶対音長=48となっている。(MML:L,@L)