このページでは、ゲームの音楽の解析が載っていますが、載せる事によって、ゲームメーカーに不利益をもたらすものでは無いと考えています。もし、発売・開発メーカーからの注意があった場合は削除をしますので、連絡をお願いします。なお、その文面は転載させていただく場合もあります。


グラディウス音楽関係をまとめてみました。
グラディウスの通常版の音の書き換え方法の解説
【横シュー】グラディウス、パロディウス【バイナリ神】5より

944 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/05/07(木) 22:03:50 ID:K91DLRq8
昔、BGMの書き換えを行った者です。
現在もパッチの改良が行われ続けていてビックリしました。すごい事になってますね…
PCのバックアップの中に、書き換え方法を書いた当時のメモがありましたのでアップします。
メモの中にあるメアドは、現在は無効です。(サービス有料化の際に退会しました)

ttp://www1.axfc.net/uploader/File/so/23171.txt
キーワード:graACsound


グラディウスの通常版のドライバの解析
【横シュー】グラディウス、パロディウス【バイナリ神】2より

21 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/08/11(月) 23:35:40 ID:aw6KYp/G
グラディウスFC 音周り解析結果 その1

最初に。解析してみた結果、正直こいつを使って音をよくするのは難しいかと。
なんといってもたいした機能が実装されていなくて素朴…と思いきや、ちょっと癖がある。
それゆえ、きれいな音にしようとしたらシーケンスデータが爆発する可能性がある。
だから、ぶっちゃけ、別ドライバを作る方が無難。

あと、なぜかよくわからないがアドレスがずれている可能性がある。ずれてたらごめん。


まず、曲・SEデータの構造、言葉の定義から。

1つの曲・SEは、一つまたは複数のシーケンスデータ列から構成。
1つの曲・SEがどのデータ列を使うのかを定義するテーブルを「曲番号テーブル」と呼ぶ。
シーケンスデータには2種類ある。シーケンスデータ列の先頭バイトデータにより、
「BGMシーケンス」と「効果音シーケンス」に分かれる。詳細は後述。

チャンネルは0〜3まで。0と1は矩形波、2は三角波、3はノイズ。1つのシーケンスデータ列
で1チャンネル分のデータ。

まず、初期化ルーチンは $EC48。 Aレジスタに曲・効果音番号をセット。
$EC28から、曲番号テーブル。1曲1バイト。データの中身は、
MSB......LSB(bit)
aabb bbbb
aa=使うチャンネル数-1=シーケンスデータ列数-1 (0-3)
bb bbbb = シーケンスデータ開始番号( 1 - 63 )

$EFFBから、シーケンスデータ列アドレステーブル。3バイト構成。0番目はダミーっぽい。
0 ..1.....2(byte)
nn aa aa
nn = 使うチャンネル番号 x 4 ( チャンネル0なら 0 、チャンネル2なら 8 )
aa aa = シーケンスデータ列アドレス

23 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/08/12(火) 00:13:04 ID:Sg7CgU9e
グラディウスFC 音周り解析結果 その2

シーケンスデータの解説:
シーケンスデータは「BGMシーケンス」と「効果音シーケンス」の2種類ある。
データがどちらのデータなのかは、シーケンスデータ先頭バイトが「$2n(20〜2F)」で
あれば効果音シーケンス、それ以外であればBGMシーケンス。
BGM,効果音それぞれ、全くシーケンスデータが異なるので注意。また、一部のシーケンスデータ
は、どのチャンネルのデータなのかによって、データの長さが変わるので注意。

BGMシーケンス:

$Dn(D0〜DF) チャンネル0,1,3の場合は3バイト、チャンネル2の場合は2バイト
Dn aa bc
n = ベース音長 単位は VSync。
aa = 音量レジスタ(4000(4,8,C))にセットする値。bit3-0が音量。
b = チャンネル2はない。KeyOffの長さ。詳細は後述。
c = チャンネル2はない。音量エンベロープ関係?ごめんよくわからん。

$En(E0〜EF) オクターブ値。0が高くて4が低い。
n = オクターブ 0〜4

$FD シーケンスループデータ。3バイトで構成。この命令実行後、音量エンベロープが有効になる。
   指定したアドレスにジャンプし、$FF(曲の終わり)があったら、この命令の後ろに戻ってくる。
FD aa aa
aa aa = このアドレスにシーケンスデータアドレスを移動

$FE ループ命令。4バイトで構成。ネストはできません。指定ループ回数になったら、この後のデータに移動。
FE aa bb bb
aa = ループ回数
bb bb = 指定ループ回数になるまで、このアドレスへ移動

$FF 曲の終わり。$FDがあったら、$FD命令の後ろに移動する。$FDがなければそのまま終了。


25 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/08/12(火) 00:43:42 ID:Sg7CgU9e
グラディウスFC 音周り解析結果 その3

上記以外のデータは音程・音長データ。1バイト。
xxxx yyyy
xxxx = 音程データ。0〜13 0=ド(c)、1=ド#(c+)、2=レ(d)、…、11=シ(b)、12=休符
yyyy = 音長データ。詳細は後述。

BGMシーケンスでの音量エンベロープ、音長について。

1つの音符の長さは、n * ( yyyy + 1 ) + b。単位は VSync。
nは シーケンスデータDn の "n"。yyyyは、音長データの値。bはシーケンスデータDn の "b"。
$FDによる音量エンベロープ指定がなければ、bは0。
で、ここがよくわからなかったのだけど、音量エンベロープ有効時、音の長さが n*(yyyy+1)になるまで
音量が1ずつ減る。なった後、b > c なら、音量はそのまま?


効果音シーケンスについて:
BGMシーケンスと違って、音程はサウンドレジスタにセットする値をそのまま使う。

$10 2バイト。
$10 aa
aa = スィープレジスタ(サウンドレジスタ4001(5,9,D))にセットする値

$11 2バイト
$11 aa
aa = 音程のオフセット値。デチューン?

$2n(20-2f) 2バイト。初期設定?
$2n xx
n = 音長。単位は VSync。
xx = 音量か?0-15。

ab bb : 音程データ。基本はこれの羅列。2バイト。
a = 音量 4bit
b bb : 音程データ 12bit

$FF これでおしまい。

あと、サウンドドライバのワークとして使っているのは、$B0〜$F9のはず。以上。疲れた。


29 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/08/12(火) 00:55:17 ID:Sg7CgU9e
グラディウスFC 音周り解析結果 その4

すまん、一つ抜けてた。
音量エンベロープは、たぶんおそらくチャンネル1にしか有効でないので注意。

わかっているのはここまで。本当に使いづらそうだ…。


N106音源ドライバの書き込み
【横シュー】グラディウス、パロディウス【バイナリ神】2より

979 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/09/15(月) 20:36:10 ID:poAV+i72
サウンドドライバ、様子見リリースです。ライセンスはMITライセンス準拠
で。まだ作成環境がこなれていないので、一見さんお断りモードになって
いるのはお許しを。いずれはMMLコンパイラまで作りますので、これでは
無理、という方はもうしばらくお待ち願います。
(ドキュメントもないですしw)

少なくとも、現行GraACでバイナリデータを田植えするよりはましだと
思います。

MINimal SouND driver for namco 106 0.0.1alpha
ttp://www.2a03.jp/~minachun/minsnd/minsnd_001a.zip

NESASM.EXE があればBGMデータは作れます。効果音全般は未実装です。

a.bat を実行すれば、minsnd.nes というイメージができます。シーケンス
データフォーマットは、この状態から致命的欠陥がない限りは基本的には
変えません。グラディウスなら、多分そこそこ作れると思います。できな
かったらごめんなさい。


まだ組み込みはお待ちください>op4の中の人。こちらで一度やってみて、
できるなら手順を公開します。

懸念は、結構処理内容増えたため、重いかも。
もし、ご意見ある方がいらっしゃいましたら、お聞かせください。


984 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/09/15(月) 23:17:42 ID:NQZaxzhI
>>979
おつかれさまです。
ソースが丁寧なんで楽に組み込めそうですが
ちょっと忙しくなってきたので組み込みには時間がかかるかもしれないです。

もし重かった場合はグラディウスに使わない機能をカットするとかでなんとかならないかな。


985 名前:979[sage] 投稿日:2008/09/15(月) 23:58:20 ID:H9n3pK73
>>984
お疲れ様です。まだデータが何もないので、まだ組み込まれても音が出ませんw
とりあえず、効果音は揃えようと思いますので、それからでも十分かと思います。
今回のリリースで、組み込む際の「アタリ」がつけてもらえればOKです。

重い場合は、重い要因となっているボリュームエンベロープの簡易実装版
(グラディウスACと同じ)を用意する予定です。現時点でのグラディウスの
クレジット音で初期化を除いた最悪負荷が40scanlines、平均が25scanlines
程度でした。

それから、現状のBGM/効果音番号がそのまま使えるインターフェースを
別途こちらで用意します。


986 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/09/16(火) 00:41:26 ID:kx1VylCk
>>979
>クレジット音で初期化を除いた最悪負荷が40scanlines、平均が25scanlines程度

今のサウンドの処理負荷が6ライン程度だから
これは厳しいかもしれんね。

組み込む前にゲーム部分を高速化しとかないとやばいかな・・・。

inserted by FC2 system