TOP > プログラミング関係解説&調査 > サウンドについて > シーケンスデータ調査

サウンドについて > シーケンスデータ調査 2(効果音)

当ページの内容は、ある程度のプログラミングの知識を必要とする。
まず、プログラミング関係解説&調査をひととおり読んでいただきたい。

まずは前ページのBGMのシーケンスデータ調査についてお読みいただきたい。

前ページではBGMのシーケンスデータについて調査してみたが、効果音のシーケンスデータはどのようになっているのだろうか?
また、
シーケンスコマンド一覧 - Romancing Sa・Ga 2 - スーパーファミコンのサウンドドライバ - Gnilda のページ
こちらにも説明がない、

  • E9 xx 効果音演奏 1
  • EA 効果音演奏 2

このふたつのコマンドは効果音に関係しているはずだが、いったい何なのだろうか?
調べてみることにする。

サウンドについてにて、ゲーム開始時(リセット時)に、効果音のシーケンスデータ$C3:23C8~$C3:3FC7がARAMの$2C00~に転送される、と説明した。
だが、$C3:23C8~$C3:3FC7の中身がどうなっているのかまでは調べていない。
効果音については、技モーション・エフェクトにて、技の技データ20と技データ24に、技用の効果音をセットしてある、と紹介したが、技一覧の技データ20と技データ24を確認すると、効果音IDは$00~$FFの256種類あることがだいたいわかる。
また、これら効果音を演奏する時は、何らかのBGMを演奏中の場合、チャネル6~7に割り込んで効果音を鳴らしている。
このため、効果音のシーケンスデータはチャネル6~7の2チャネル分しかないはずだ。
(BGMのチャネル6~7を一時的に消音することになるから、本作におけるBGMは、チャネル6~7にメインのメロディや拍数がわかりやすい打楽器系は持ってこないように工夫しているようである。どのゲームでも似たような工夫をしているだろう)

効果音IDリストはサウンド(BGM・効果音) > 効果音一覧にある。

以上の前知識を元にして、$C3:23C8~$C3:3FC7について具体的に見ていこう。
先に答えを言ってしまうと、

元アドレスARAMアドレス内容
$C3:23C8~$C3:27C7$2C00~$3000効果音ID$00~$FFのチャネル6シーケンスコマンド開始位置・チャネル7シーケンスコマンド開始位置(各4バイト)
$C3:27C8~$C3:3FC7$3001~$47FF効果音ID$00~$FFのシーケンスコマンド

こうなっている。

効果音のヘッダ

$C3:23C8~はこんな感じで始まっている(16バイト区切り)。

00 30 00 00 01 30 03 30 11 30 14 30 1E 30 20 30 
2F 30 00 00 3D 30 3F 30 4D 30 4F 30 5F 30 67 30 
6E 30 70 30 81 30 90 30 92 30 A2 30 B2 30 B4 30 
……

これを4バイトずつ区切って、2バイトずつアドレスとして読む。

00 30 00 00  ;3000 0000
01 30 03 30  ;3001 3003
11 30 14 30  ;3011 3014
1E 30 20 30  ;301E 3020
2F 30 00 00  ;302F 0000
3D 30 3F 30  ;303D 303F
4D 30 4F 30  ;304D 304F
5F 30 67 30  ;305F 3067
6E 30 70 30  ;306E 3070
81 30 90 30  ;3081 3090
92 30 A2 30  ;3092 30A2
B2 30 B4 30  ;30B2 30B4
……

このアドレスがARAMのアドレスになる。

効果音IDチャネル6チャネル7内容
$00$3000$0000(無音)
$01$3001$3003「グイグイ」など
$02$3011$3014「ウキッ」
$03$301E$3020「液体人間呪ばく」など
$04$302F$0000「ド根性キック」
$05$303D$303F「ドデゲスデン」など
$06$304D$304F「ウキぷぅ」など
$07$305F$3067噛みつき音
$08$306E$3070ポゴが何か調べてアイテム発見した時の音
$09$3081$3090「ドゴドゴ」
$0A$3092$30A2「ぽかぽか」「ポコポコビート」
$0B$30B2$30B4「てーてー」

(以下省略)

ただし、$0000は該当チャネルの演奏は「なし」の意味。
また、後述するが、ARAMアドレス$3000に入っているコマンドは「EB」、つまり「演奏終了」だけなので、「何も演奏しないという演奏データが入っている」ことになる。

実際の値は、サウンド(BGM・効果音) > 効果音一覧に掲載した。
効果音を演奏しても何も鳴らないIDがあるが($1Cや$22など)、それらはチャネル6・チャネル7どちらにも$0000が入っていて、そもそもデータなしなのである。
何かの事情で使用しないことになったボツ効果音があったのかもしれない。

効果音のシーケンスコマンド

では、$C3:27C8~$C3:3FC7→ARAM$3001~$47FFに書き込まれたシーケンスコマンドを少し見てみよう。
ちなみに最後の16バイト($C3:3FB8~$C3:3FC7)は$FFで埋まっているので、実質データなし、シーケンスコマンドは$C3:3FB7までと見て良い。

;効果音ID$00(無音)
;チャネル6(ARAM$3000)
EB        ;演奏終了 

;効果音ID$01 「グイグイ」「ゴルゴダのイバラ」など
;チャネル6(ARAM$3001)
DB 01     ;ディチューン 
;チャネル7(ARAM$3003)
DC 01     ;サンプリングデータ選択 
D6 03     ;オクターブ設定 
DD 09     ;アタックレート(Attack Rate)設定 
E2 01     ;ループ開始位置 
C8 18 04  ;ピッチスライド 
07        ;ド 8分音符
E3        ;繰り返し・ループ終了
EB        ;演奏終了 

;効果音ID$02 「ウキッ」
;チャネル6(ARAM$3011)
BD        ;8分休符
E9 F2     ;効果音演奏 1 
;チャネル7(ARAM$3014)
DC 06     ;サンプリングデータ選択 
D6 06     ;オクターブ設定 
C8 18 EE  ;ピッチスライド 
3F        ;ミ 8分音符
EA F2     ;効果音演奏 2? 

;効果音ID$03 「液体人間呪ばく」「復元」「あまいささやき」など
;チャネル6(ARAM$301E)
DB 14 ディチューン 
;チャネル7(ARAM$3020)
D2        ;ピッチモジュレーション オン 
C4 FF     ;トラック音量設定 
DC 04     ;サンプリングデータ選択 
DD 07     ;アタックレート(Attack Rate)設定 
E2 01     ;ループ開始位置 
C8 0C 44  ;ピッチスライド 
09        ;ド 16分音符
E3        ;繰り返し・ループ終了 
EB        ;演奏終了 

;効果音ID$04 「ド根性キック」
;チャネル6(ARAM$302F)
D0        ;ノイズ オン 
DD 07     ;アタックレート(Attack Rate)設定 
CF 1E     ;ノイズクロック設定 
0B        ;ド 32分音符
E1        ;ADSR初期化 
E2 07     ;ループ開始位置 
CF 16     ;ノイズクロック設定 
0B        ;ド 32分音符
E3        ;繰り返し・ループ終了 
EB        ;演奏終了 

;効果音ID$05 「ドデゲスデン」「魔力吸引」「火炎放射」など
;チャネル6(ARAM$303D)
DB 02     ;ディチューン 
;チャネル7(ARAM$303F)
DC 01     ;サンプリングデータ選択 
D6 04     ;オクターブ設定 
E0 18     ;サスティンレート(Sustain Rate)設定 
E2 01     ;ループ開始位置 
C8 18 04  ;ピッチスライド 
06        ;ド 付点8分音符
E3        ;繰り返し・ループ終了
EB        ;演奏終了 

;……

ひとまず、効果音ID$00~効果音ID$05のシーケンスコマンドを見てみたが、やはりほぼ「ロマサガ2」のシーケンスコマンドが使えている。
問題はシーケンスコマンド$E9と$EAを使っている効果音ID$02である。

;効果音ID$02 「ウキッ」
;チャネル6(ARAM$3011)
BD        ;8分休符
E9 F2     ;効果音演奏 1 
;チャネル7(ARAM$3014)
DC 06     ;サンプリングデータ選択 
D6 06     ;オクターブ設定 
C8 18 EE  ;ピッチスライド 
3F        ;ミ 8分音符
EA F2     ;効果音演奏 2? 

シーケンスコマンド一覧 - Romancing Sa・Ga 2 - スーパーファミコンのサウンドドライバ - Gnilda のページ
では、シーケンスコマンド$E9「効果音演奏 1」は引数を1個、シーケンスコマンド$EA「効果音演奏 2」は引数なしとある。
だが、上のデータをそのとおりに読む場合、「効果音演奏 2」が、

EA        ;効果音演奏 2? 
F2        ;エコーボリューム設定? ※引数が1個必要

こうなってしまう。
だが、ARAMアドレス指定に従った場合、「F2」で効果音ID$02のシーケンスコマンドは終了している。
「ライブ・ア・ライブ」では、「効果音演奏 2」にも引数が1個必要で、

EA F2     ;効果音演奏 2

これが正しいのではないか。

さて、結局シーケンスコマンド$E9と$EAは何なのかというと、おそらく、以下で合っていると思う。

$E9 xx 効果音演奏 1
引数
xx:効果音ID($00~$FF)
内容
効果音IDxxのチャネル6のシーケンスコマンドを演奏する。
$EA xx 効果音演奏 2
引数
xx:効果音ID($00~$FF)
内容
効果音IDxxのチャネル7のシーケンスコマンドを演奏する。

つまり、「効果音の中で他の効果音を鳴らす」という処理であり、チャネル別にコマンドがある、ということだ。
効果音の中で同じ効果音IDを指定すると無限ループになりそうだが(そうならないようにしてあると思うが)、それを防ぐためかどうなのか、このコマンドを実行すると実行後にそのチャネルの演奏はストップするようである。



このページをシェアする

上へ