マッピング
SCCPCMの再生は録音した音の高さがo8bに割り当てられるため、再生する音とMMLの音階と一致しなくなります。
例えばPCMの録音がo3cだった場合、o8 bagの記述で、 o3c o2b- o2a-が再生されMMLから再生音を読み取るのが困難になります。
そこでコンパイラの機能としてマッピングがあります。
o3c "bass"
]
と定義すれば、@wm"pcm" o3c o2b o2a と記述するだけでo3c o2b o2aが再生されます。
PCMで音階を演奏する場合、一つのサンプリングでは音質的に問題が出るので、複数の音階に分けてサンプリングしたりします。その場合もマッピング機能が便利に働きます。
o3b "bass1"
o3g "bass2"
o3e "bass3"
]
と定義すれば、@wm"pcm"o3 bagfedc とするだけでMMLの音階に合わせて再生PCMも切り換えられます。
マッピング機能はコンパイラの機能なので、ドライバに読み込まれるデータは@w"bass1"o8ba @w"bass2"ba @w"bass3"bag と変換されていることになります。
その他のマッピング
マッピング機能は当初SCCPCMの再生音とMML表現上のずれを解消するために設けられましたが、後に機能を拡大し他の要素にもマッピングが可能になっています。
-
@adm ADPCMマッピングSCCPCMのマッピングと同じ用途。
-
@sm SCCマッピング
@fm OPLLマッピング
@ym OPL(Y8950)マッピングMML上の音階の変更や、音色、エンベロープを音階に応じて変更する用途。 -
@zm デチューンマッピング対応する音階に応じてデチューン値を変更する用途。
マッピング処理の補足
マッピング処理中は1音1音発音する音階を調べ、定義中でどの設定に当たるかをチェックし、そのデータを適用して出力します。
マッピング中にポルタメント処理に入ると、そのチェックを停止し前回発音した設定で発音しようとし、SCCPCMの場合は、前回設定の範囲を超えてしまっても切り換えることができず、その範囲のデータがマッピング定義内にあったとしてもマッピングエラーになります。
SCCPCM以外のマッピングでは、範囲より高い音でも(その範囲が定義になくても)マッピングエラーにならず、前回発音した設定で再生周波数を上げて再生しますが、マッピング変換した実際の音階がo8bを超えるとやはりマッピングエラーになります。ポルタメント中でなければ定義の範囲外になると通常通りマッピングエラーになります。
@sb,@fb,@yb,@ab,@zbはポルタメント中に固定されている設定を任意で変更するコマンドで、 それを使用して別の範囲のマッピングを適用可能です。