« 2016年5月 | トップページ | 2016年7月 »

2016年6月26日 (日)

音楽と数学 (行列) その1

タイトルが変わりました。

ただし「行列」という数学は、高校の教育課程から外れるらしいので、ちょっと残念です。
しかも音楽を真面目に勉強した人たちは、だいたい学校では数学ができなかった人たちだったり、数学がものすごくできた人たちは、ソフトウェア作りでブラック企業に入社し、平日深夜や土日も休まず働いているため、音楽演奏や音楽理論を習得する人などは皆無だと思います。
そう考えると私のように、音楽演奏や理論も習得できて、数学も十分に勉強できた人にはあまりお目にかけることはなく、私とこの手の会話ができるお友達はいなくてあまりにも寂しいので、もしいらしたらご連絡いただければと思います(笑)

以上のことから、ますますこの先に私が書くことを理解できる人が減るのは必至ですが、皆さんにはもう諦めてもらいまして、さらに知りたい場合は自分で本を読んでもらうか、私の戯言を子守唄としてお休みいただければ幸いです💤

何しろ、大学時の卒論のテーマは、「4×4行列によるポリゴンエンジン」で、最初に入った会社では、電子CADの幾何学演算で、3×3行列を使って、例えばプリント用の座標データを画面に表示したり、画面で入力した座標をプリント用の座標に変換する部分を作っていました。 この技術は普通にPCや端末と内部データの変換を行う際に使う数学です。 そして、ここのところは行列を使ってデータ推定を行っているし、多分一生、行列からは逃れられそうもありません。多分得意分野だと思いますが、ラーメン屋やバーゲンなどの行列は苦手ですnoodle

行列というものはどういうものに便利かというと、行列は複数の値を変換して複数の結果を出力する。または、ある複数の結果がある時に、元の値を推測するという場合に非常に役立ちます。 その場合に、前回までの「関数」では一対一の変換を扱うのはいいのですが、行列のように複数の値を扱うには、関数を複数用意するしかありません。

前置きはこのぐらいにして、本題に入ります。
前回の和音の変換を行列(今回はまだ1行3列と3行1列)を使って表すと、

f(C) = C × K(-1) = B   ・・・  (i)
f(E) = E × K(-2) = D   ・・・  (ii)
f(G) = G × K0 = G × 1 = G   ・・・ (iii)

という3つの式で表せました。さて、この関係を行列で表すとどうなるか?というと、下のようになります。

Mat1・・・(iv)

多分何のことかわかりにくいでしょうから、軽く説明します。
数学では、数字や記号を複数の行に並べて書くことで、式の「×」という記号を省略表記します。
この場合3×3の行列で、左上から右にK(-1)、0、0となっていて、これらがそれぞれ、C、E、Gと掛け算をして、それぞれの要素を足し算した結果がBになるということを表しています。
0をかけるということは、値が消えるので、前述の(i)の式と同じになることがわかりますね。
つまり、
C × K(-1) + E × 0 + G × 0 = C × K(-1)
ということを表しています。
同じように2列目を考えると、左から0、K(-2)、0に対して、C、E、Gと掛け要素を足した結果がDで(ii)の式。
3列目も、左から0、0、K(-0)に対して、C、E、Gと掛け要素を足した結果がGで(iii)の式になります。
つまり、(i)(ii)(iii)の式をまとめたものが(iv)の行列ということです。

ちなみに行列では縦方向が「行」で、横方向が「列」なのは、MicrosoftのExcelと同じです。

以上のように行列を使うと和音の指の動きが表せるようになりました。
つまりあらゆる音程と指の動きを対応させて、曲全体のコード進行が表せるということになります。

というわけですが、何かご質問はございますか?

例えば、だいたい曲は最初は音がないし、指3本だけ使っていたのに、次には4和音になったり、またそれが逆の場合はどうするんだ!?と思った人。
鋭い!!

・・・が、今回はこの程度で。行列を使うといろいろ面白いことがわかってきますよ。
でも、もはや誰もついてこれまいbud

2016年6月18日 (土)

音楽と数学 (関数) その3

前回は、一音に対しての変化を関数で表しました。
では、三音ではどうなるかを、CとGのコード進行で考えてみます。このコード進行はご存知の通り「メリーさんの羊」を始めいろんな曲で使われています。

キーボードで見てみるとCのコードの構成音は、C・E・Gですので、下のキーボードの丸の位置を押さえます。

Chord_c0次にGのコードですが、構成音はG・B・Dですので、下の丸の位置を押さえます。

Chord_g0_3

さてこの時に指の動きはどうなるでしょう?
たいていの人はそのまま横に移動すると思います。そして大体は親指がCの位置からGの位置、中指がEの位置からBの位置、小指がGの位置からDの位置、というような動きになると思います。

親指に着目して、前回 21/12 を定数 K で表した場合、親指の関数は、

f(C) = C × K7 = G

という変換で表せます。

では他の指はどうなるか?というと、実は並行移動でなので、

f(E) = E × K7 = B

f(G) = G × K7 = D

という風に K7を使うことで全て表せますhappy01

まとめると、

f(C,E,G) = (C,E,G) × K7 = (G,B,D)

というように、順番もこの通りに変換されます。
しかし、早い曲などでは上記のようにいちいちコードを並行移動して演奏するのは至難の技です。
ですので、最初のCのコードからあまり指を動かさないで、下のようなGのコードを弾くことが普通です。これを展開形と言って、GのコードですがコードネームとしてはG/Bとも書きます。

Chord_g2この場合、親指はCの位置からBの位置、中指はEの位置からDの位置、小指の位置はそのままになります。
さてそうなると先ほどの関数はどうなるかというと、C・E・Gの音はそれぞれ、

f(C) = C × K(-1) = B

f(E) = E × K(-2) = D

f(G) = G × K0 = G × 1 = G

というふうになります。
さてこれは上の場合のように、まとめて書けそうになさそうですね。
どうしましょう?

実はいい方法があるんです!
数学が得意な人はもう気づいたかもしれませんが、また次回smile

2016年6月 9日 (木)

音楽と数学 (関数) その2

久しぶりに音楽と数学です。
音楽と数学で「関数」について書いたのは、ほぼ2年前(リンク)でした。
とりあえずそれを「その1」として、一応つながりはあるので、今回は「その2」ということで、これから音の変化について周波数を基本にして書いていこうと思います。

みなさんご存知のように、ピアノの真ん中あたりの「ラ」の音は440Hzぐらいの周波数として知られています。

そしてその1オクターブ下が、220Hz。1オクターブ上が880Hzになります。2オクターブ上が1760Hzということで、一般に用いられる12音平均律での周波数というのは、440×2n/12 (nは整数)で表すことができるのは、このブログで何回か書きました。

ここでそのピアノの真ん中の「ラ」の音の周波数を A という定数で表してみると、

A = 440 = 440×20= 440×20/12(Hz)

2の0乗は1ですからこのようになります。そして1半音下の「ラのフラット」の音は、

Ab = 440×2(-1/12)(Hz)

半音上の「ラのシャープ」の音は、

A# = 440×21/12(Hz)

という周波数になります。これは440Hzを中心に、1オクターブを均等に12分割した場合、2の12分の1乗単位で、増減することで、12音階の各周波数を表せるということです。

さらに面白いのは、上記の音の関係は次のようになるということです。

Ab = A×2(-1/12) = A#×2(-2/12)

A# = A×21/12 = Ab×22/12

この関係をもっと広げて、上の半音ずつ上の音B,C、下の半音ずつ下の音G,Gbまで書いてみると、

Ab = A×2(-1/12) = A#×2(-2/12) = B×2(-3/12)= C×2(-4/12)

A# = A×21/12 = Ab×22/12 = G×23/12 = Gb×24/12

という関係になります。2の指数が12分の1単位で変化することがわかると思います。

これを関数として書くと、ある音 T を半音下げる関数は、

f(T) = T × (21/12(-1) = T × 2(-1/12)

ある音 T を半音上げる関数は、

f(T) = T × 21/12

ある音 T を完全5度(半音7つ分)上げる関数は、

f(T) = T × (21/127 = T × 27/12

ある音 T を完全8度(半音12個分)下げる(つまり1オクターブ)関数は、

f(T) = T × (21/12(-12) = T × 2(-12/12) = T × 2(-1) = T / 2

ここで、 21/12 を定数 K で表した場合、以上の関数は順に、

f(T) = T × K(-1)、 f(T) = T × K、 f(T) = T × K7、 f(T) = T × K(-12)

となり、定数 K の整数乗で表現できることがわかります。また指数のべき乗は乗算、底が同じ指数の乗算は、指数部分の足し算になることは、高校のテストにも出ると思うので、覚えておいて損はありません。
ところで f って何?という方もいらっしゃると思いますが、数学では一般的に関数のことを f (function)で表して、 カッコの中にその関数に与えるパラメータを書きます。
ソフトウェアの場合は、f に機能を区別する名前をつけて、カッコの中に複数のパラメータを設定することで機能が実現できます。

次回以降は、1音ではなく複数音の場合にはどうなるか?実際の曲の進行やコード進行に割り当ててみるとどうなるか?
ではまたhappy01

« 2016年5月 | トップページ | 2016年7月 »

フォト

最近のトラックバック

無料ブログはココログ