glfw_app 関連の更新(コラム:12平均音階率)

最近は、組み込み関係が多かったが、久しぶりにPCアプリ関係のフレームワ
ークを更新した。

実際は、組み込み関係も含んでいる。

最初は、簡単なアルゴリズムで、ピアノぽぃ音が出ないかを研究する為に始め
た、アプリケーションがトリガーだった。
組み込みマイコンで、簡単なシンセサイザーぽぃ事をして、ピアノ風演奏を行
うのが目的だ。
そこで、OpenAL関係のマネージメントに手をいれ、リアルタイムに波形
を合成して鳴らす事から始めた。

とりあえず、簡単な音が出せるようになったのだが、和音とかを鳴らしてみた
くなり、MIDI入力を行うクラスの実装を始めた、とりあえずWindows
のみ。
※後から調べたら、「portmidi」なるライブラリがあり、これを使えば、最初
からマルチプラットホームにできるようだ、時間が空いたら対応しようと思う。

久しく、GUI Widgetsのプログラムをしていないので、自分で実装
したものなのに、どうやって使うか、自分で作ったサンプルを参考にするとゆ
ー、何とも、痛い状況になっている。

MIDIデバイスのリストを widget_list に反映して、選択するようにしたい
が、widget_list はダイナミックにリストを作れない構造になっていた。
まず、それを改修する為に色々修正を行った。
Widgets関係は、中途半端な部分が多く、度々改修工事が入る。

これには、色々な用件を満たしていないといけない事に気がつき、かなり色々
修正した、結局、それで終わって、肝心な部分の研究が出来ないでいる・・

-----
12平均音階率:
現代の音楽では、基本となっているもので、ほとんどの音楽は、この「決まり」
に沿って作曲されており、売られている楽器の多くが、この「決まり」に沿って
作られている。
実際のコンサートでは、ピアノの調律を、計算された周波数とは微妙に変えた、
調音を行う事があるようで(和音の響きが変わる)、流派、考え方が色々ある
ように聞くが、一般的な計算方法は以外と簡単だ。

4A(ラ)の音は440Hz、1オクターブ上がると880Hz(5A)、下
がると220Hz(3A)となる。
1オクターブ分が12個に平均的に分割されている。
つまり、12乗すると2となる定数kを求めて、それを基準の周波数に掛け
ていくと、音階が出来上がる。

k = pow(2.0, 1.0 / 12.0);
// k: 1.059463094

※何故「ド」が「C」なのか(「A」では無く)
※何故「ラ」を基準にするのか(Aだから?)
不思議な決まりが色々ある。


261.6 Hz ド   C
277.2 Hz ド#  C# 261.6 * k
293.7 Hz レ   D    277.2 * k
311.1 Hz レ#  D#  293.7 * k
329.6 Hz ミ   E    311.1 * k
349.2 Hz ファ  F    329.6 * k
370.0 Hz ファ# F#  349.2 * k
392.0 Hz ソ   G    370.0 * k
415.3 Hz ソ#  G#  392.0 * k
440.0 Hz ラ   A    415.3 * k
466.2 Hz ラ#  A#  440.0 * k
493.9 Hz シ   B    466.2 * k

ドレミの音階は、非常に不思議で、周波数的には均等な分布では無い。
※「ミ」と「ファ」の間、「シ」と「ド」の間は「黒鍵」(半音)は無く、
飛び飛びになっている。

小学高や中学校では、音楽を聴くのは好きだったが授業は不得意だった。
この辺りの理屈は、会社に入り、ゲーム用の演奏プログラムを作るようになって
から勉強したが、「周波数」の話を最初にして欲しかったwww

黒鍵が歯抜けになっている事で、ある楽譜を、少し高い音や低い音で演奏する場
合(トランスポーズ)、「黒鍵」と「白鍵」の使い方が全く異なるのに、ピアニ
ストは瞬間的にそれに対応する様を観て、「凄い」なぁーと関心した事がある・・