他チャンネルへの影響を抑えたDPCMノイズの使用方法について
FamiTrackerを使っていて、DPCMノイズをドラムに使いたい方向けの話です。
(15/12/14追記)FamiTrackerでDPCMノイズを鳴らすことについては、より良い方法が見つかったため、「その2」をご覧ください。
NSD.Libを使用した方法についてはこのページの下の方に記しています。
以前、「Famitrackerのちょっとした仕様について」にて、Zエフェクトを使ったDPCMノイズの鳴らし方について記しました。ただ、前述の方法では、Zに続く値が0より大きくなっている間、三角波chとノイズchの音量が小さくなってしまうという問題がありました。
今回、三角波chとノイズchの音量への影響を小さくする方法を考えました。ただし、従来の方法と同じ音にはならないため注意が必要です。
前に述べた方法は下記のような並びでした。
[DPCM]
--- -- - ---
--- -- - Z7F (1)
--- -- - ---
--- -- - Z00 (2)
--- -- - ---
(1)と(2)のタイミングでプチノイズが発生します。しかし、Zの値が7Fから00に変わるまでの間(デルタカウンタ初期値が7Fである間)、三角波とノイズの音量が小さくなります。
そこで、以下のようにエフェクトの配置にしてみます。
[DPCM]
--- -- - Z7F G05
--- -- - Z00 G01 (1)
--- -- - Z7F G05
--- -- - Z00 G01 (2)
--- -- - --- ---
Gエフェクトの値はSpeedとTempoの設定によって変わります。なるべく違和感のないリズムになるようにようにGエフェクトの値を調整します。この方法だと、デルタカウンタ初期値が一瞬だけ7Fになります。
以前も書きましたが、Zエフェクトの値が大きいほど、プチノイズの音量も大きくなります。7Fは指定できる最大の値で、音量を小さくしたい場合はそれより小さい値を指定します。
上記の例では、Speedが4、Tempoが180の設定です。
ただし、普通にプチノイズを鳴らした時と同じ音にはなりません。Z7F-Z00と続けるとプチノイズが2連続で鳴ります。その1音目を意図したタイミングに近づけつつ、2音の間隔をできるだけ短くしようというのが上記の方法です。つまり、間隔が短くともプチノイズを連続で鳴らしていることに変わりはありません。ノイズchと重ねてごまかす等の工夫が必要です。
ちなみに、Z7F→Z00と続け、かつSpeedとTempoを最も速い値にしても似たような音になりますが、NSFを再生した際に発音が不安定になる場合があります。
上記の方法を使用した曲については近々公開予定です。
(追記)
公開しました。こちらの「仮想RPG戦闘曲集」に入っています。
三角波chとノイズchの音量への影響を抑えることができるほか、DPCMプチノイズの強弱を付ける場合にZエフェクトの値の差を計算しなくて良い、という利点もあります。
余談
DPCMのプチノイズは私の知る範囲では、FFIII(戦闘曲)、ガチャポン戦士3・4に使われていると思われます。「思われる」というのは、よく似た音が鳴っているのは分かりますが、本当に同じ原理の音なのか断定できないためです。
ただ、上記3作品のDPCMノイズ使用曲については、三角波とノイズの音量が変化していないように感じました。ただ単にデルタカウンタ初期値を変化させているだけではないのかもしれないと考えました。そこで、値を高速で切り替えて無理矢理0に戻したらどうかと考えました。
同じ音にはなりませんが、今のところ上記以外の方法が思いつきません(FamiTracker以外のツールの仕様については把握していません)。どちらの方法を用いるかは、DPCMノイズの音色を重視するか、三角波・ノイズの音量を重視するかという観点で判断すると良いかもしれません。
私は何のためにDPCMノイズを使うのかというと、サンプリング音を使うと容量がかさむため……というわけではなく、ただ単にあの音が好きなためです。緩衝材のプチプチを潰して快感を得るのと似たような感覚(?)です。
(追記)NSD.Libの場合
NSD.Libでも上記のような手法が使えることを確認しました。FamiTrackerとは異なりrowのような制限がなく、より自然に鳴らすことができます。
TR5に、下記のように記述します。
[11:y$4011,127] y$4011,0
yコマンドは長さの指定ができないとみられます。その代わりとして、ループ回数で調節します。このループ回数が少ないと細い音になるようです。
鳴らすたびに書くのが面倒な場合はサブルーチンに記述します。添付の曲では等間隔で鳴らしているだけです
が、一応サブルーチンに書きました。一応鳴らしてみただけのものですが、サンプルを置いておきます。MMLについてはまだ勉強中上手く扱えないため、まともな曲は用意できませんでした。ダウンロードするには下の「サンプルNSF&MML」をクリックしてください。
サンプルNSF&MML
(さらに追記)
後から色々調べてみたところ、上記の方法は既に知られているようです。失礼しました。
あれこれ方法を考える前に調べるべきでした。「$4011 ドラム」といった語で検索すると情報が出てくると思います。