プログラマ向けゲームBGM作曲講座

#対象
昨日参加したゲームジャムで要望があったので

- 個人開発のプログラマで
音楽ソフトやDAWは持ってるけど、曲を作ったことがない

- けど
短いループBGMが作れる程度は作って見たい

という人向けの作曲（雑学）講座です。

「無」から何かを作り出すのは、曲に限らず難しいことです。
料理のレシピのようなものがあると便利ですよね。

ある程度音楽ソフトやDAWの使い方は知っている人向け、細かい操作説明はしないで、
発想方法の一例を紹介します。
（とりあえず朝食くらいのレシピ）

この記事の生放送での紹介動画→https://youtu.be/RXagg1MJu1w

#テンポ（速さ）を決める
何もないところから音楽を作るのは難しい。
ので、
好きな曲を一曲思い浮かべてください。

その曲を頭の中で思い出し、歌いながら、手拍子します。

```
EDMとかだとテンポ(BPM)が128が多いとか知っていても損はない。
```

##音楽ソフトを起動してテンポを120にして再生します。

メトロノーム機能があれば、オンにします。
なければ、４つ打ちを打ち込んで、サイクル再生か、
サイクル再生がなければ、何小節かループさせたり、複製させたりします。


##再生して、
メトロノームや４つ打ちとずれてしまう場合、
手拍子の方が早い時は、音楽ソフトのテンポを上げます。

手拍子が遅い時は、音楽ソフトのテンポを下げます。

これで、だいたいのテンポ合わせができます。

#曲のスケール（雰囲気）を決める
音楽には様々な音階があります。
長調、
短調とか、
沖縄音階とか

それぞれ、
長調、ドレミファソラシド
短調とか、ラシドレミファソラ
沖縄音階とか　ドミファソシド

これは音の配列パターンで、世界中にあらゆるものがあり
[スケール](https://ja.wikipedia.org/wiki/%E9%9F%B3%E9%9A%8E)とか呼ばれます。

最初のうちは、この音からしか選ばないようにします。

それぞれ、
長調、明るい
短調、暗い
沖縄音階、沖縄っぽい（明るいの別バージョン）
といった特徴があります。

他にもいろいろあるので気になる人は、
[スケール](https://ja.wikipedia.org/wiki/%E9%9F%B3%E9%9A%8E)
で好みのものを探すと良い。

#曲のキーを決める

スケールにはそれぞれ12の半音分のキーの異なるものがあります。

上の例では、「ド」や「ラ」など始めの音
これの開始位置が半音ずれたもの
「ド＃」とか「レ」から始まるものとか。

ドレミファソラシドを英語表現すると
CDEFGABC
になるので、　
Key:C、Key:A
といった表現になります。

##どのキーにするべきか？
どのキーにするかは悩むと思いますが、

とりあえず、作りやすさ優先で、
黒鍵がなるべく少ないキーを最初は選ぶと良いでしょう。

キーの決定理由はいろいろな要因があり、
楽器学とか学ぶと演奏可能キーとか楽器の組み合わせなどから、本物らしさのためにキーが限定されていく傾向があります。
演奏不能なキーや、演奏可能範囲を超えた場合の打ち込みは何かしら不自然さにつながったりします。

例えば、
ロックとかなら、ギターやベースラインがE(ミ）の音より下とか多用すると、楽器を知っている人は変な気持ちになるかもしれません。（5弦ベースだとか、チューニングが違うとかあるかもですが）
キーボードのグリッサンドしているのに、白鍵じゃないキーが選ばれているとか。

なんて、ややこしいことを考えず、
好きな曲のキーと合わせてみるのも良いです。（上のややこしい条件が満たされているはずなので）

#楽器（音色・ねいろ）を選ぶ

好きな曲が、何の楽器で構成されているかを分析します。

楽器構成はいろいろありますが、基本的には、
メロディー、伴奏（バッキング）、ベース、リズム、その他
といった構成になります。

バンドだったら、
メロディー：歌、リード楽器（サックス、トランペット、フルート）
伴奏（バッキング）：エレキギター、キーボード
ベース：エレキベース
リズム：ドラム、シェーカー
その他：飾りのピコピコ音とかベル系の音とか

いきなりオーケストラとかは難しいので、慣れるまではバンドとかの構成の方が楽です。

で、音楽ソフト上でこれらのトラックを用意します。

#さて、材料はそろいました

料理の材料として
テンポ、スケール、キー、楽器
がそろったので、
料理をします。

###まず、ドラムを作ります。
ドラムの音の構成は、
バスドラム、スネアドラム、ハイハット
が基本で、
「どんちーたんちーどんどんたんんん」
とかを繰り返す感じ
1小節パターンや2小節パターンを作って繰り返す。
4から8小節分作る。

[すたどんたん](http://app.16dimensional.com/stadon/)

###シンバルは小節の頭に一回だけとか、頻度少なく、
4とか8とかの小節のサイクルの区切り前にタムとか、スネアを入れる（フィルイン）
「どんちーたんちーどんててたたととどどちー　」
みたいな

###ドラムのバスドラムと同じタイミングで
ベースの音をキー（ドとか）で鳴らします。
「ド・・・・ドド・・」

###ベースのパートを他の楽器へコピーします。
エレキギター、キーボード
「ド・・・・ドド・・」
適宜オクターブ上げたりします

###適宜タイミングをスネアに合わせたりして
バッキングのパートを埋めます。

バッキングパート
「・・ド・・・・ド・」
ベースパート　　
「ド・・・・ドド・・」

###メロディーを考えます
が、浮かばないなら、キー（ド）の音で鳴らす。

モールス信号みたいな感じで、トンとかツーみたいな長さのものを組み合わせ
いい感じにします。

メロディーパート
「ド・ドー・ドドド・」
バッキングパート
「・・ド・・・・ド・」
ベースパート　　
「ド・・・・ドド・・」

###スケールの音を当てはめていきます。

「ドレミファソラシド」から選ぶのですが、
最初は隣り合う音をえらんでみて、
慣れてきたら離れた音を使うとかが良いかと。

メロディーパート
「ド・ドー・レドレ・」
バッキングパート
「・・ド・・・・ド・」
ベースパート　　
「ド・・・・ドド・・」

これで、簡単な8小節くらいのBGMは作れるかと思います。

###塩・胡椒、調味料
物足りない場合は、
ピコピコ音とかシンバルやタムのタイミングで音を追加してみると良いです。

曲のジャンルとか、雰囲気はこの飾りの音で決まります。

メロディーが休んでいる部分を作って、
メロディーは、一息（呼吸なしで）歌えるものを１フレーズとし、
息継ぎ（ブレス）や、次のフレーズの間に飾り（フィルイン）が入ると良い感じ。

「ド・ドー・レドレ・｜ド・ドミーーミレ・|ド・ドー・レドレ・｜ソ・ドミーーミレ・」
[フレーズ]「ブレス」[フレーズ]

###お好みで
メロディーの音色を２小節ごと交代させるなど
メロ１
「ド・ドー・レドレ・｜ド・ドミーーミレ・|・・・・・・・・｜・・・・・・・・」
メロ２
「・・・・・・・・｜・・・・・・・・|ド・ドー・レドレ・｜ソ・ドミーーミレ・」

サックスとトランペットの掛け合いとか、
ギターとキーボードの掛け合いとか、
ツインボーカルの掛け合いとか、
みたいな雰囲気が簡単につくれます。
（あと単調なものでも飽きさせなくなる効果がある）

#出力の仕方、ゲームへの組み込み方
一応、補足ですが、
DAWや音楽ソフトで音は鳴らせるけど、ゲームに組み込むにはwavファイルにする必要があります。
このことを「バウンス」とか「エクスポート」とか「パブリッシュ」とか「ミックスダウン」とか呼んだりします。（統一していないなぁ）

持っている音楽ソフトにこの機能がないと、何かしら録音するなど必要です。
大抵のソフトはwavに出力する機能があるはずですが、iPadのアプリとかだとなかったりするのもあるので注意。

あと、波形出力時に「ノーマライズ」とかある場合はチェックしておくと良いです。
これは、波形振幅を最大にしてくれます。
（今時はノーマライズよりもOzoneとかに任せた方が良いかも。そういうマキシマイザー系エフェクトを使っているならノーマライズはかけなくて良い）

あと、音楽ソフト内で、「ファイナライズ」的なもの（最終調整用エフェクト）もあればかけておくと良いです。
（だいたいジャンルとかでプリセットがあるのでお好みで）

#あとはひたすら練習
もしゲームを１つ作っているなら、
「タイトルBGM」、「ゲーム中BGM」、「リザルトBGM」、「クレジット表示時のBGM」
をそれぞれ１曲、制作時間10~30分以内でとりあえず用意してゲームに組み込んでみる。

テンポ、キー、スケール、音色とかいろいろ合う、合わないなどを
ゲームに組み込んで試して見る。

これを繰り返すことで、ゲームのBGMとして
どんなものを作ると良いのかとかいったことに自信がついていくと思います。

# おまけ　プログラムで音と同期する演出
プログラマで曲が作れると、音と同期したことをしたくなってきます。
そこで
MusicEngineおすすめです。
➡︎ https://github.com/geekdrums/MusicEngine
➡︎ https://github.com/geekdrums/MusicEngineForADX
詳しくはリンク先をみてもらうとして
自分がよく使う関数は

```
// Beatが変わったら何かする
if(MusicIsJustChangedBeat())
{
  // ここに処理を書く
}
```

と

```
// 音楽に合わせて再生、音程つけて再生
Music.QuantizePlay(audioSource,pitch);
```

です。


# 続き
[プログラマ向けゲームBGM作曲講座（ミックス編）](https://qiita.com/tatmos/items/12a860ba67ed868a2443)