3MHz
3MHz
3MHz
MSX BASIC version 4.0
Copyright 1990 by Microsoft
25277 Bytes free
Disk BASIC version 2.01
主にMSX関係のコンテンツが置いてあります。

コナミドラム

コナミがPSGで鳴らしていたドラム音を再現する為の原理とMMLサンプルです。エミュレータ等で解析した結果ですが、当時の工夫が読み取れて面白いものでした。

まず、スペースマンボウで使われている音を波形で見てみます。(二つのグラフは時間軸の拡大率が異なっています。)

これがバスドラムで、

これがスネアドラムだと思います。(PSGの音から楽器名を判別するのは難しいので、名前は適当です。)

バスドラムの方を見ると最初の1クロックだけ変な波形が出ています。これは矩形波の出力を停止すると、ボリュームに応じた出力が得られる事を利用し、1クロック以内のボリューム操作をハードウエアエンベロープを使って実現しているようです。PSGのボリュームは、値が小さくなるほど変化量も小さくなるので数字上直線的な変化も、出力すると上の波形のようにカーブした傾斜になっているのだと思います。

スネアの方は、最初の1クロックだけトーン出力をしたままハードウエアエンベロープでボリュームをコントロールしているみたいです。これも矩形波が崩れたような、変わった波形になっています。

ただPSGの矩形波は位相をリセット出来ないようなので、この方法はタイミングによってアタックの波形が変わるという弱点があります。そしてこの方式の鳴らし方は、ハードウエアエンベロープを使用する以上、通常1chのみになりスネアとバスドラムを別のチャンネルで同時に発音というような事は出来ません。

サンプル

以上の内容を踏まえて、SCMDで鳴らせるサンプルを作ってみました。

バスドラム
@v"bd"=[@8,2 -1,1 -1,1 -4,255 : 0,255]
@p"bd"=[-1016,1 1023,1 128,1 128,4 -256,1 128,1 128,1 256,1 : 0,255]
@hwe"bd"=[10,1 : "off",255]
@m=["bd" "@eoff @cy256 @v"bd" @p"bd" @hwe"bd" o2a"]

p1=v15 l8 [/"bd"]8

音量を大きくしたい場合@v"bd"定義の最初のパラメータ、@8を変更して下さい。下にある他の音色も同じ要領です。

エンベロープ定義の最後のカウントが255になっているのは、負荷を下げる為です。次のパラメータに移行するよりもカウント待ちの方が負荷が少ない為、変化の終わりはループにして目一杯カウント待ちして負荷を下げています。

マクロ中の音階とピッチエンベロープは関係ある為変更出来ません。また、ピッチエンベロープの周波数値の単位はレジスタ値です。上記の例では、マクロに登録したバスドラムを8分音符で8回鳴らします。

バスドラム(強)
@v"bd2"=[@8,3 -1,1 -1,1 -4,255 : 0,255]
@p"bd2"=[-20,1 256,1 -1024,1 128,1 128,4 -256,1 128,1 128,1 256,255 : 0,255]
@hwe"bd2"=[8,1 : "off",255]
@m=["bd2" "@eoff @cy384 @v"bd2" @p"bd2" @hwe"bd2" o1b"]

p1=v15 l8 [/"bd2"]8

上記バスドラムより若干強いバスドラムです。メタルギア2に使われていました。

同じボリュームエンベロープ、同じ音量設定にもかかわらず、こちらの方が出力される波形の振幅が大きくなっているのが音色作りとして面白いですね。

スネアドラム
@n"sd"=["tone",@0,1 : "noise",@8,255]
@v"sd"=[@10,2 -1,1 -1,1 -1,1 -1,1 -1,1 -1,2 -1,2 -1,2 -1,2 -1,255 : 0,255]
@p"sd"=[4,255 : 0,255]
@hwe"sd"=[10,1 : "off",255]
@m=["sd" "@eoff @cy66 @v"sd" @n"sd" @hwe"sd" o4c"]

p1=v15 l8 [/"sd"]8

このスネアのピッチエンベロープは単なる周波数調整です。z4と同義なのですが@eoffでまとめて初期状態に戻せる為、楽をしてこのようにしています。

@mz z4 o4c @rzとした方が処理的には軽いかも知れません。

スネア(強)
@n"sd2"=["tone",@0,1 "noise",@8,5 "noise",@10,14 : "noise",@11,255]
@v"sd2"=[@11,2 -1,1 -1,1 -1,1 -1,1 1,2 -1,2 -1,2 -1,2 -1,2 -1,2 -1,2 1,255 : 0,255]
@hwe"sd2"=[10,1 : "off",255]
@m=["sd2" "@eoff @cy18 @v"sd2" @n"sd2" @hwe"sd2" o2a"]

p1=v15 l4 [/"sd2"]8

通常のスネアに比べて若干長めの音になっています。

ハイハット
@n"hh"=[: "noise",@0,255]
@v"hh"=[@9,1 -2,1 : @0,255]
@m=["hh" "@eoff @v"hh" @n"hh" o2a"]

p1=v15 l8 [/"hh"]8

音色としてはノイズのみなので、この場合はo2aに特別な意味はありません。

ハイハット2
@n"hho"=["mix",@0,1 : "noise",@0,255]
@v"hho"=[@8,4 : -1,4]
@m=["hho" "@eoff @v"hho" @n"hho" o1f"]

p1=v15 l8 [/"hho"]8

上記ハイハット音色より長めの音です。

タム?スネア?
@n"xx"=["tone",@0,1 : "noise",@4,255]
@v"xx"=[@9,2 -1,1 -1,1 -1,1 -1,1 -1,1 -1,1 : @0,255]
@p"xx"=[-14,255 : 0,255]
@hwe"xx"=[10,1 : "off",255]
@m=["xx" "@eoff @n"xx" @v"xx" @p"xx" @hwe"xx" @cy112 o8b"]

p1=v15 l8 [/"xx"]8

この音色はよく分かりませんでした。音色自体はスネアに近いのですが、SCCでサイン波を重ねてタムを表現しているように聞こえました。

タム
@n"tom"=["noise",@14,1 "tone",0,1 : "noise",@10,255]
@v"tom"=[@9,2 -4,2 : -1,2]
@m=["tom" "@eoff @n"tom" @v"tom" o3a"]

p1=v15 l8 [/"tom"]8

この音色も同じくよく分かりません。こちらもSCCを重ねてタムの音程違いを表現しているように聞こえます。ただSCCを重ねず単独で使用しているところもあり、ハッキリしませんでした。

シンバル
@n"cym"=["mix",@5,1 "mix",@2,1 : "mix",@0,255]
@v"cym"=[@9,1 1,1 1,1 : -1,4]
@p"cym"=[-1,1 -2,1 -2,1 2,1 : 0,255]
@m=["cym" "@eoff @n"cym" @v"cym" @p"cym" o8b"]

p1=v15 l4 [/"cym"]8

金属音をPSGの高音を使って表現しています。長めの音色設定です。

シンバル(短)
@n"cym2"=[: "mix",@0,255]
@v"cym2"=[@9,1 -2,1 : @0,255]
@p"cym2"=[-3,1 -1,255 : 0,255]
@m=["cym2" "@eoff @n"cym2" @v"cym2" @p"cym2" o8b"]

p1=v15 l8 [/"cym2"]8

こちらは短めの音色設定です。

演奏サンプル
上記音色の演奏サンプルはこちら