JavaScript でファミコン風の音楽を奏でる 〜超入門・音楽理論編〜

# 0. 目次
1. [はじめに](#1-はじめに)
1. [音階](#2-音階)
1. [和音](#3-和音)
1. [コード進行](#4-コード進行)
1. [まとめ](#5-まとめ)
1. [おわりに](#6-おわりに)

# 1. はじめに

こんにちは、@linked34ce です。
2021年度に引き続き、今年度も [MYJLab Advent Calender](https://qiita.com/advent-calendar/2022/myjlab) に参加します。
昨年の企画では[堅苦しくて長すぎる記事](https://qiita.com/linked34ce/items/ecd8d745a427f92373ad)を投稿してしまいました。
そのため今回は記事を2回に分けて、もっとフランクに行きたいと思います。

今回のテーマは、「JavaScript でファミコン風の音楽を奏でる」です。
ただ既存の曲を楽譜通りに奏でるだけではなく、テレビゲームの戦闘曲を意識したオリジナル曲を演奏することが目標です。
とは言ったものの、必要な前提知識が多すぎて、いきなり本題に入ってもさっぱり理解できない人がほとんどでしょう。
この「超入門・音楽理論編」では、JavaScript やファミコン音楽の話題にはほとんど触れずに、初級にも満たないような、音楽に関する基礎中の基礎について語りたいと思います。
なぜなら、基礎を知らないと自分が何をしているのかよく分からない状態でコーディングして、ただ音が鳴って終わりになってしまうからです。
せっかくなら、音楽理論や作曲について少しだけ学んでから本題に取りかかってみましょう。

なお、投稿主も音楽に関する知識を今年初めて学んだばかりの初心者です。
そのため音楽経験者からしたら退屈かもしれませんが、大目に見てやってください。

ところで、IT に関係ない音楽の記事を投稿していいのかと思う人もいるでしょう。
しかし問題ありません。
音楽制作には一般的に **DAW** (Digital Audio Workstation) と呼ばれるソフトウェアを使用しますし、それを用いて音楽を制作する (打ち込む) ことを **プログラミング** というのです。

だから許される、はずです。


# 2. 音階

## 2.1. 音階とは

音楽というと、まず最初に「ド」や「ミ」、「ラ」などの音を思い浮かべる人が多いのではないでしょうか。
これら1つひとつの音は、当然高さが違いますが、これを **音高 (ピッチ)** といいます。
また、「ド レ ミ ファ ソ ラ シ ド」のように、音を主に低い順に、一定の規則に従って並べたものを **音階 (スケール)** といいます。
特に、音階の最初の音 (第1音) を **主音** といいます。
さらに、「ド」と「レ」などの2つの音の高低の間隔を **音程 (インターバル)**　といいます。

## 2.2. 半音階と全音階

ところで、「ド レ ミ ファ ソ ラ シ ド」といえば、誰もが思い浮かべる有名な音階ですね。
しかし、低いほうから順に「ド レ ミ ファ ソ ラ シ ド」と並んでいると、あたかもこれらが等間隔で並んでいるように見えてしまいます。
しかし実際はそうではありません。
ピアノの鍵盤を思い出してみてください。
「ド レ ミ ファ ソ ラ シ ド」に対応する白鍵の間に、黒鍵がありますね。
白鍵と黒鍵を合わせて左から右に音を並べていくと、「ド ド♯/レ♭ レ レ♯/ミ♭ ミ ファ ファ♯/ソ♭ ソ ソ♯/ラ♭ ラ ラ♯/シ♭ シ ド」となります。
この音階は、**半音** という音程の最小単位によって、等間隔に切り分けられています。
このような音階を **半音階 (クロマティックスケール)** といいます。

なお、半音2つ分の音の間隔を **全音** と呼びます。
つまり「ド」の半音上の音は「ド♯」であり、「レ」の全音上の音は「ミ」となるわけです。

念のため解説すると、♯ は **シャープ** と読み、その音を半音上げることを意味します。
反対に ♭ は **フラット** と読み、半音下げることを意味します。
「ド」と「レ」は半音2つ分の隔たりがあるので、「ド」の半音上の音である「ド♯」と、「レ」の半音下の音である「レ♭」は同じ音を指します。

さて、半音と全音についての知識を踏まえて「ド レ ミ ファ ソ ラ シ ド」に立ち返ります。
「ド ド♯/レ♭ レ レ♯/ミ♭ ミ ファ ファ♯/ソ♭ ソ ソ♯/ラ♭ ラ ラ♯/シ♭ シ ド」の並びから、「ド レ ミ ファ ソ ラ シ ド」だけ抜き取って考えてみましょう。
「ド」と「レ」の間隔は全音、「レ」と「ミ」の間隔は全音ですが、「ミ」と「ファ」の間隔は半音です。
同様に、「ファ」と「ソ」、「ソ」と「ラ」、「ラ」と「シ」の間隔は全音ですが、「シ」と「ド」の間隔は半音であることがわかりますね。

このように、全音が5つ、半音が2つからなる音高の並びを **全音階 (ダイアトニックスケール)** といいます。

なお、全音階における音程の違いは、**度数** で表します。
ただし、基準となる音自身を1度と呼ぶので、注意が必要です。
つまり「ド レ ミ ファ ソ ラ シ ド」で表される長音階において、「ド」に対して2度上の音は「レ」、「ラ」に対して4度下の音は「ミ」となります。

また「ド」に対して8度上の音も「ド」ですが、音高が異なります。
このように、8度離れた音程を **オクターブ** といいます。
オクターブ単位で離れた音は高さこそ違いますが、名前が同じになります。

## 2.2. 長音階と短音階

全音階の中でも「ド レ ミ ファ ソ ラ シ ド」のように「全 全 半 全 全 全 半」という間隔で音を並べたものを **長音階** といいます。
さらに、「ラ シ ド レ ミ ファ ソ ラ」のように「全 半 全 全 半 全 全」という間隔で音を並べたものを **短音階** (正確には **自然的短音階** ) といいます。
なお、普段私たちが耳にするようなポピュラー音楽の世界では、前者は **メジャースケール** 、後者は **マイナースケール (ナチュラルマイナースケール)** とカタカナで呼ばれることが一般的です。

ところで、ここまでは「ド レ ミ ファ ソ ラ シ ド」で音階を表現していました。
しかし音楽を制作する上では、「C D E F G A B C」というようにアルファベットで表現した音階を用いることが前提です。
この場合でも、半音記号を用いて「C C♯/D♭ D D♯/E♭ E F F♯/G♭ G G♯/A♭ A A♯/B♭ B C」と表すことができます。

「ド レ ミ ファ ソ ラ シ ド」に対応する「C D E F G A B C」音階は、「C」から始まる長音階、すなわち「C」を主音とするメジャースケールですから、これを **Cメジャースケール** と表します。
同様に「ラ シ ド レ ミ ファ ソ ラ」に対応する「A B C D E F G」という音階を **Aマイナースケール (Aナチュラルマイナースケール)** と表します。

この表現を用いると、その音階がどのような音から構成されているのかがわかりやすくなります。
例えば、Eメジャースケールは「E」から始まり、「全 全 半 全 全 全 半」という間隔で音が並びます。
そのため、「E F♯ G♯ A B C♯ D♯ E」という音階であることがわかります。
またCマイナースケールは「C」から始まり、「全 半 全 全 半 全 全」という間隔で音が並びます。
したがって、「C D E♭ F G A♭ B♭ C」という音階であることがわかります。

# 3. 和音

## 3.1. 和音とは

音楽は単音のメロディが流れるだけではなく、複数の音が重なり合い、調和することで初めて美しい響きを持ちます。
「ド」と「ミ」と「ソ」のように、異なる3つ以上の音が同時に鳴ることで作られる音を **和音** といいます。
特に3つの音からなる和音を **三和音 (トライアド)** といい、同様に4つの音からなる和音を **四和音 (テトラッド)** といいます。

ポピュラー音楽の世界では、和音を **コード** と呼ぶことが一般的です。
ちなみに、スペルは Code でも Cord でもなく、Chord です。

コードの考え方において、「ド レ ミ ファ ソ ラ シ ド」の最初の「ド」と最後の「ド」のように、オクターブが異なる同名の音は、和音において同じ音と見なされます。
そのため「ド↓」と「ミ」と「ド↑」のような組み合わせは2音として扱われ、和音とはなりません。
また、「ファ↓」と「ラ」と「ド」と「ファ↑」の組み合わせは三和音となるわけです。

## 3.2. ダイアトニックコード

さて、ここからは実際のコードの中でも三和音だけを取り上げ、しかもその中でも基本中の基本であるコードのみを解説します。
そうしないと、コードの話だけでアドベントカレンダーが埋まってしまうからです。

なお、ここからは音階をアルファベットで表記します。
また、基本的にCメジャースケールにおけるコードのみを考えます。

最も単純なコードは、ある音を基準として、1度・3度・5度の音からなるものです。
基準となるある音は、**根音 (ルート音)** と呼ばれます。
「C」をルート音とした場合、「C・E・G」となります。

ここで、「全 全 半 全 全 全 半」を思い出しましょう。
「C D E F G A B C」からなるCメジャースケールにおいて、「C」に対する「E」は「全 全」、つまり半音4つ分の距離があり、「E」に対する「G」は「半 全」、つまり半音3つ分の距離があります。
つまり、「C・E・G」というコードは、ルート音に対して 4半音上 の音と、2番目の音に対して3半音上の音から構成されています。
このように、 **4:3** の間隔をもつ三和音を **長三和音 (メジャーコード)** といいます。
「C・E・G」はルート音が「C」ですから、頭にルート音を付けて **Cメジャーコード** となります。
簡略化のために単に **C** と表し、**Cメジャー** と呼びます。

同様に、「E・G・B」というコードについて考えます。
「E」に対する「G」は「半 全」、つまり半音3つ分の距離があり、「G」に対する「B」は「全 全」、つまり半音4つ分の距離があります。
つまり、「E・G・B」というコードは、ルート音に対して3半音上の音と、2番目の音に対して4半音上の音から構成されています。
このように、**3:4** の間隔をもつ三和音を **短三和音 (マイナーコード)** といいます。
「E・G・B」はルート音が「E」ですから、頭にルート音を付けて **Eマイナーコード** となります。
簡略化のために **Em** と表し、**Eマイナー** と呼びます。

Cメジャースケールにおける1度・3度・5度からなるコードは、以下の通りです。

- C (C・E・G)
- Dm (D・F・A)
- Em (E・G・B)
- F (F・A・C)
- G (G・B・D)
- Am (A・C・E)
- Bm <sup>(♭5)</sup> (B・D・F)

これら7つの三和音をまとめて **ダイアトニックコード** と呼び、コードにおける基礎中の基礎として扱われます。
なお音階における主音をルート音とするコードを **主和音** と呼びます。
つまり、Cメジャースケールの主和音は C となります。

ところで、Bm のみ右上に (♭5) という添字がついていますね。
実はこのコードは例外であり、ルート音に対して3半音上の音と、2番目の音に対して3半音上の音という、 **3:3** の間隔で構成されています。
このようなコードは、マイナーコードの5度の音を半音下げたものと捉えることができ、**減三和音 (ディミニッシュトトライアド)** といいます。
「B・D・F」は **Bm <sup>(♭5)</sup>** と表し、**Bマイナーフラットフィフス** と呼びます。
もしくは **Bdim** と表し、**Bディミニッシュ** と呼びます。

ここでAナチュラルマイナースケールについて考えてみます。
この音階はCメジャースケールと構成音が同一ですから、登場するコードも同じになります。
したがって、Aナチュラルマイナースケールにおけるダイアトニックコードは、Am を主音として、

- Am (A・C・E)
- Bm <sup>(♭5)</sup> (B・D・F)
- C (C・E・G)
- Dm (D・F・A)
- Em (E・G・B)
- F (F・A・C)
- G (G・B・D)

となります。

なお、三和音に7度の音を加えた四和音である **セブンスコード** についてもダイアトニックコードの考え方が応用できますが、ここでは説明を省きます。

# 4. コード進行

## 4.1. 主要三和音

音楽は複数のコードを組み合わせることで、さまざまな表情を見せてくれます。
このようなコードの流れを **コード進行** といいます。
コード進行を理解する上では、以下の **主要三和音** が重要となります。

Cメジャースケールにおいて、主音「C」をルート音とする C は最も安定した響きを持ちます。
このようなコードを **トニック** といい、曲が終わった感じを与えます。

逆に G はとても不安定な響きを持ちます。
このようなコードを **ドミナント** といい、トニックに一気に戻りたくなるような雰囲気があります。

また F は、穏やかな雰囲気を持ちつつ、ドミナントほどではないですが不安定な響きを持ちます。
このようなコードは **サブドミナント** と呼ばれ、トニックにゆっくりと着地したくなるような感じがします。

なお、主要三和音以外のコードもトニック、ドミナント、サブドミナントに分類されます。
Em と Am はトニック、Bm <sup>(♭5)</sup> はドミナント、Dm はサブドミナントと分類できます。
ただし、これら主要三和音以外の分類は一定ではなく、Emをドミナントとして扱ったり、Bm <sup>(♭5)</sup> をサブドミナントとして扱うこともあるようです。

コード進行においては、トニック、ドミナント、サブドミナントを駆使することで、不安定 → 安定 → 不安定 → 安定 → … という緩急を楽曲にもたらすことができます。
そして大抵の場合は、最後にトニックに帰着することで楽曲に終わった感じを与えます。

## 4.2. コード進行の例

次に、有名なコード進行を2つだけ紹介します。
ここでは、Cメジャースケールにおけるダイアトニックコードで表記します。

1つ目は、F → G → Em → Am です。
日本のポピュラー音楽において極めて頻繁に使用されることから、**王道進行** と呼ばれます。
サブドミナントである F から始まり、ドミナントである G に移行します。
その後 Em を挟んでトニックである Am に帰着します。
前半は明るく、後半は暗い感じがする曖昧な響きが特徴的であり、日本人の心を掴むようです。

2つ目は、Am → F → G → C です。
作曲家の小室哲哉氏がよく使用していることから、**小室進行** と呼ばれます。
前半は Am で始まり、暗い響きを持ちますが、後半で C に向けて一気に明るい方向に移行し、楽曲に高揚感を与えてくれます。

# 5. まとめ

- 「ド レ ミ ファ ソ ラ シ ド」は等間隔な音階ではなく、「全 全 半 全 全 全 半」という間隔で並んだ **全音階** である。
- 「ド レ ミ ファ ソ ラ シ ド」という音階は、「C D E F G A B C」と書くことができ、**Cメジャースケール** と呼ぶ。
- CメジャースケールをAから始めて「A B C D E F G A」とすると、「全 半 全 全 半 全 全」という並びの **A (ナチュラル) マイナースケール** になる。
- あるスケールにおいて、1度・3度・5度の音から構成される7つの基本的な和音を **ダイアトニックコード** という。
- 音の間隔が半音単位で **4:3** の三和音を **メジャーコード**、**3:4** の三和音を **マイナーコード** という。
- ダイアトニックコードには、例外的に **3:3** の間隔を持つ **マイナーフラットフィフス (ディミニッシュトトライアド)** が含まれる。
- コード進行によって音楽に緩急を付けるうえでは、**トニック**、**ドミナント**、**サブドミナント** の概念が重要となる。

# 6. おわりに

今回は本題に入る前に、音楽理論の基礎に触れてみました。
音楽というと才能やセンスが物を言うように感じますし、投稿主もそう思っていました。
しかし、実際のところは上記のようにかなり理論的な側面を持つため、プロのような芸術的な楽曲は作れなくても、それっぽいものを作ることができるわけです。

次回はまず、ファミコン音楽の特徴について解説します。
そして今回学んだ基礎を活かしてオリジナルの音楽を作曲し、JavaScript 上でファミコン風の楽曲を演奏します。

それでは、「ファミコン音楽と実践編」でまたお会いしましょう。
@linked34ce でした。