周波数をずらして重ねると音が厚くなる、というのはよく使うテクニック。それ以外でもたまたま同じ音程の音が重なったときに、まったく同じ周波数だと不自然になることがあって、Detune はとても重要。
mucom88 MML の場合 D コマンドなのだけれど、リファレンスには、
ディチューン (-32768~32767) 後ろに+を指定した場合、絶対指定でなく現在値からの相対指定になる
MUCOM88 リファレンスマニュアル
と書かれているだけで、どんな数値を指定するとどれくらいずれるかは書いてない。「考えるな、感じろ。」ということか。
配布されている古代先生の作品 (mucom88win_yk2mml191012) だとFMパートは D4~D6、PSGパートは D16 が多いように見える。
・・・\(\)
で、調べてみると、(FMパートの場合)FM音源チップに指定するF-Numberに、指定した値が直接加算される模様。
F-Number は周波数を決めるための値で、出てくる周波数はこの数値に比例する。mucom88の場合以下の値になっている。(ソースの FNUMB: )
音階 | F-Number | (10進) |
c | 26AH | (618) |
c+ | 28FH | (655) |
d | 2B6H | (694) |
d+ | 2DFH | (735) |
e | 30BH | (779) |
f | 339H | (825) |
f+ | 36AH | (874) |
g | 39EH | (926) |
g+ | 3D5H | (981) |
a | 410H | (1,040) |
a+ | 44EH | (1,102) |
b | 48FH | (1,167) |
オクターブはF-Numberとは別のBlockで指定するので、音階とF-Numberの関係はどのオクターブでも同じ。
それで、c+とcの差は \(655-618=37\)、dとc+の差は \(694-655=39\)、(中略)、bとa+の差は \(1167-1102=65\)、なので、同じ半音でもそれぞれ数値が異なる。
一番極端なのはオクターブを跨ぐbとcの関係で、cから半音下げるのに必要なのは \(\frac{1167}{2}-618=-34.5\)(\(-34\) か \(-35\))、bから半音上げるのに必要なのは \(618 \times 2-1167=69\)。要するに同じ音程なのに向きが違うだけで最大2倍違うことになる。
なので、厳密な周波数比(音程)を指定したければ音階ごとにデチューンの値を変更するしかないけれど、面倒だし、そこまで求められることは少ないので、間をとって \((\sqrt{34.5 \times 69}\approx)\) 49 くらいが半音と考えるのが良さそう。
PSGは(大小関係が逆だったり)計算方法が違うけれど、音階によって値が違うのは同じで、これも同じように間をとると 160 くらいが半音。
前述の古代先生の作品の例は、FMもPSGも(厳密ではないけれど)半音の1/10くらい上げているのが多い、ということになる。