某青いロボットが活躍するような2Dアクションゲームサウンドの作り方

# この記事について

この記事は[DTMテクニック集 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/dtm-technique-tips) 12/17(土)のエントリーです。
前回の記事は、[sdhizumi](https://qiita.com/sdhizumi)さんの[ピアノロール経験者のためのMML入門](https://qiita.com/sdhizumi/items/f4fa1d89d1906bb3af90)です。


本日は某青いロボットの2Dゲーム作品の生誕35周年です。おめでとうございます！ :tada::tada::tada: 
(ちなみに筆者と同い年)

この記事では、1980年代~1990年代のファミコンやゲームボーイ等で発売された
`某青いロボットが活躍する2Dアクション`をイメージした8bitサウンドBGMの作り方をざっくり紹介します。
インディーゲーム開発等の参考になれば幸いです。

# 前提環境

曲を作成するに当たり、筆者は以下のツールを使用しています。

- [nsd.lib](https://github.com/Shaw02/nsdlib/releases)(Ｓ．Ｗ．様作成サウンドドライバ)
- [VirtuaNSF](https://wikiwiki.jp/mck/NSF%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC#u80992c5)(NSFプレイヤー)
- サクラエディタ

環境の詳細については割愛しますが、記事記載のノートを手っ取り早く聴きたい場合は、前回記事を参考にMSXplayの[MML Editor](https://msxplay.com/editor.html)を利用するのも良いでしょう。
サンプル記載のMMLのコマンドの詳細については[nsd.libのドキュメント](http://shaw.la.coocan.jp/nsdl/doc/index.html)をご覧ください。
記事終盤には作成したMMLの全体とコンパイル済みNSFファイルのリンクも載せておきます。

同時発声数はファミコンの仕様に則り、メロディ・オブリガート用(矩形波)2ch、ベース用(三角波)1ch、ドラム用(ノイズ)1chの合計4つ。
5番目のサンプリング(DPCM)chは使いません。


# まずは曲の「起承転結」を決める

BGMの構成として「起承転結」をどうするか決める必要があります。
いわゆる `イントロ`、`Aメロ`、`Bメロ`、`サビ`のセクションです。BGMはループすることが前提なので`アウトロ`は不要です。
当時のゲームのデータ容量に依存したり作品に依ったりしますが、大体は以下のようなパターンがあります。

- |: `イントロ` → `Aメロ` → `Bメロ` → `サビ` :|
- |: `Aメロ` → `A'メロ` → `Bメロ` → `サビ` :| 
- |: `イントロ` → `Aメロ` → `A'メロ` → `Bメロ` → `サビ` :|
- |: `イントロ` → `Aメロ` → `A'メロ` → `イントロ` → `Bメロ` :|
- `イントロ` → `イントロ` → |: `Aメロ` → `Bメロ` :|

中にはこんな変わり種もあったりします。。。ｗ
- |: `Aメロ` - `Aメロ(キー1音上げ)` - `Aメロ(キー2音上げ)` - ... - `Aメロ(キー11音上げ)` :|

今回は |: `Aメロ` → `A'メロ` → `Bメロ` → `サビ` :| のパターンで`悪の科学者の本拠地`風の曲を作ってみます。


# 各セクションのコード進行を考える

上で決めた各セクション `Aメロ`、`A'メロ`、`Bメロ`、`サビ`のコード進行を考えます。
本拠地まで来るとゲームのストーリーも終盤になってくるので、マイナーコードを使います。

`Aメロ`、`A'メロ`には階段状の進行を主に使います。

```
| G | F | D# | D F# | G | F | D# F | G |
```

`Bメロ`は王道進行にすることで「転」がわかりやすいです。

```
| Eb | F | D | G | Eb | F | Bb | D |  
```

`サビ`も王道進行にしつつ盛り上がるようなものに。

```
| Eb | F | D | G | C | Eb | D | F# |
```

# ベース、ドラムパターンを決める

ロックな曲調にするため、ベースは終始シンプルにコード進行のルート音で`ズンダダ`鳴らすパターンを繰り返します。
```text:ベースサンプルMML

    t180
    TR3 q2 

    // Aメロ
	TR3 o3 l16 [g8gg]8 [f8ff]8 [e-8e-e-]8 [d8dd]4 [f+8f+f+]4
	TR3 o3 l16 [g8gg]8 [f8ff]8 [e-8e-e-]4 [f8ff]4 [g8gg]8

    // A'メロ
	TR3 o3 l16 [g8gg]8 [f8ff]8 [e-8e-e-]8 [d8dd]4 [f+8f+f+]4
	TR3 o3 l16 [g8gg]8 [f8ff]8 [e-8e-e-]4 [f8ff]4 [g8gg]8

    // Bメロ
	TR3 o3 l16 [e-8e-e-]4 [f8ff]4 [d8dd]4 [g8gg]4 [e-8e-e-]4 [f8ff]4 <[b-8b-b-]4 >[d8dd]4 

    // サビ
	TR3 o3 l16 [e-8e-e-]4 [f8ff]4 [d8dd]4 [g8gg]4 [c8cc]4 [e-8e-e-]4 [d8dd]4 [f+8f+f+]4

    // ※「q」はクォンタイズコマンド。これを指定することで歯切れが良くなります。数値はお好みでどうぞ
    // ※「[ ]」はリピートコマンドで、カッコ内に記述されたノートを指定した回数繰り返します
```

ドラムはハイハットの`チッチキ`鳴らすイメージをメインで、2拍目と4拍目の頭にはスネアを鳴らす感じで音程を変えたものを繰り返す。8小節目の最後にフィルインを入れるのを忘れずに。

```text:ドラムサンプルMML
    // Aメロ
    TR4 o2 l16 [crcc : brcc]16 bbbb
    TR4 o2 l16 [crcc : brcc]16 bbbb

    // A'メロ
    TR4 o2 l16 [crcc : brcc]16 bbbb
    TR4 o2 l16 [crcc : brcc]16 bbbb

    // Bメロ
    TR4 o2 l16 [crcc : brcc]16 bbbb

    // サビ
    TR4 o2 l16 [crcc : brcc]16 bbbb

    // ※「:」はbreakコマンドであり、指定ループ回数時にこのコマンドに来るとループを脱して後のノートを演奏するものです
    // サウンドドライバによっては文法が異なるため、MSXplayで記述する場合は「|」に置き換えてください
```

# メロディを書く

作る人のセンスに依るところが大きいですが、まず骨子となるリズムを決めてからコードの和音の音を紡いでいけば、印象に残るフレーズができるかと思います。今回は`Aメロ`に以下のリズムを当て込んでいきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104041/7654b31b-0af6-4119-94d4-eb242da2e41c.png)

```text:メロディサンプルMML
    t180
	TR1 v15 @1 q1 

    // Aメロ
	TR1 o4 @1 l8 g4a4 a+g4a+4. g4a+4>c4 d4.c16<a+16 a2^1
	TR1 o4 @1 l8 g4a4 a+g4a+4. g4a+4>c4 <a2g4af+4.e-4d4c4
	TR1 o4 @1 l8 g4a4 a+g4a+4. g4a+4>c4 d4.c16<a+16 a2^2. o5 df
	TR1 o5 @1 l8 g4fd4c<a+4 a4a+>c4<afa a4g 
	TR1 g^2^1

    // A'メロ
	TR1 o4 @1 l8 g4a4 a+g4a+4. g4a+4>c4 d4.c16<a+16 a2 v10 >d4.c16<a+16a2 v15
	TR1 o4 @1 l8 g4a4 a+g4a+4. g4a+4>c4 <a2g4af+4.e-4d4c4
	TR1 o4 @1 l8 g4a4 a+g4a+4. g4a+4>c4 d4.c16<a+16 a2 v10 >d4.c16<a+16a4 v15 o5 df
	TR1 o5 @1 l8 g4fd4c<a+4 a4a+>c4<afa a4g g^2^2 @1 o5 d4f4

    // Bメロ
	TR1 o5 @1 l8 gd4g^2r4 a4a+4>c4 <a4a+a4fgd^2. d4 c4cc4.<a+4 a4>cf4gfg d1^2 d.e-.f

    // サビ
	TR1 o5 @1 l8 f.g.d g4a+4 a+4.a16g16a4d4 f+.g.a d4>c4 c4.d16c16< a+4 ga+ >c4<g>c^2 c.d.e- d4c4 d1  l16 f+d<af+ >d<af+d af+d<a  >f+d<af+
```

# オブリガートを追加する

オブリガートのパターンは色々あります。

1. 発声を遅らせて音量を下げたメロディを鳴らして、疑似エコーを掛ける
2. メロディと同じリズムパターンでキーを変えて和音感を出す
3. メロディと独立したサブメロを鳴らして華やかに
4. メロディとは別のリズムパターンで鳴らして賑やかに 

今回は`Aメロ`に1.でメロディの印象付けの強調、`A'メロ`に2で重厚感付け.、`Bメロ`に4.で転換がわかりやすく、`サビ`に2.で「結」に向けての盛り上げ、として使います。
```text:オブリガートサンプルMML
    t180
	TR2 @0 q1 v10 D2

    // Aメロ (1.)

	TR2 r8 v6 // 発声を遅らせて音量を下げる
	TR2 o4 @1 l8 g4a4 a+g4a+4. g4a+4>c4 d4.c16<a+16 a4. v10 @0 >d4.c16<a+16a2^ v6
	TR2 o4 @1 l8 g4a4 a+g4a+4. g4a+4>c4 <a2g4af+4.e-4d4c4
	TR2 o4 @1 l8 g4a4 a+g4a+4. g4a+4>c4 d4.c16<a+16 a4. @0 v10 >d4.c16<a+16a4. v6 o5 df
	TR2 o5 @1 l8 g4fd4c<a+4 a4a+>c4<afa a4g 
	TR2 g^2^2.^8 v10　// 冒頭で遅らせ多分の帳尻を合わせる

    // A'メロ (2.)
	TR2 o4 @0 l8 d4f4 gd4g4.   d4g4a4   a+4.a16g16  f2    v6 a+4.a16g16f2v10
	TR2 o4 @0 l8 d4f4 gd4g4.   d4g4a4    f+2e-4f+d4.c4<a4f+4
	TR2 o4 @0 l8 d4f4 gd4g4.   d4g4a4   a+4.a16g16  f2  v6 a+4.a16g16f4 v10 @0 o4 a+>d
	TR2 o5 @0 l8 e-4d<a+4ag4 f4ga4fdf   f4dd^2^1 

    // Bメロ (4.)
	TR2 o4 EC1,5 l16 v10 o5 EC- [dr<gra+rgr>]2 EC- [fr<ar>cr<ar>]2 EC- [dr<frarfr>]2 EC- [gr<a+r>dr<a+r>]2
	TR2  EC- [dr<gra+rgr>]2 EC- [fr<ar>cr<ar>]2 EC- [dr<fra+rfr>]2 EC- fr<a+r>dr<a+r> l8 EC* o4 a+.>c.d


    // サビ (2.)
	TR2 o5 @0 l8 d.e-.<a+ >e-4g4 g4.f16e-16 f4<a4 >d.e.f+ <a4>a4  a4.a+16a16 g4 e-g g4dg^2 g.a+.>c <a+4g4 a1 l16 >d<af+d af+d<a> f+d<af+ >d<af+d

```
:::note info
2.については指定したノートによってはコード進行で想定する和音から外れるケースもあるので、たまーに指摘を受けたりします。
人に依っては不協和音のように聴こえたりしますが「和音の転回」として別のコードに仕立てているので、くり返し聴くうちに慣れるものです。コード進行に囚われず敢えて外すことも時には必要ですヨ。
:::

# 完成した曲

[MMLデータファイルはこちら](https://www.dropbox.com/s/7v93wlfbx0mxu2h/bgm001_mml.txt?dl=0)

[コンパイル済みNSFデータはこちら](https://www.dropbox.com/s/axxdfv16vg15zsf/bgm001.nsf?dl=0) ※VirtuaNSFで再生可能

動画

  https://twitter.com/i/status/1603356448456470529


# メロディを思いつくタイミングについて

今回はコード進行を先に決めた後にメロディを作りましたが、外出中やお風呂入ってるとき等でふとした瞬間にメロディを先に思いつくこともあります。忘れないうちにメモする必要がありますが、MMLでの記法を知っておけばメモ帳アプリにすぐに書けるのでMMLを知っておいて損は無いです。

# 終わりに

以上、ざっくりではありますが今回紹介した作り方でそれなりにそれっぽい曲を作ることができます。
ですがこれはほんの一部にしか過ぎません。もっと紹介したいところですがまた次の機会があれば。


# 宣伝1

ゲームBGMの作曲及び8bit音源へのコンバート承ります。
「レトロゲームものでBGMも実機音源にこだわりたい！」というクリエイター様は是非Twitterアカウント:[hydden0310](https://twitter.com/hydden0310)にご連絡ください！

# 宣伝2
RPGツクール・アクションゲームツクールの公式素材DLCを販売しています！

https://store.steampowered.com/app/1724740/MV__BGM/

試聴動画

<iframe width="600" height="500" src="https://www.youtube.com/embed/88aAPZGuGZA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>