#はじめに
純正律のミとソとラは平均律から14セント下、2セント上、16セント上は覚えてるのですけど、レとファとシは覚えられず、毎回ググってるので、計算方法を覚え書き程度に。
#結果
取り急ぎ結果を
数値は純正律の平均律からの差(セント)
Do | Re | Mi | Fa | So | La | Ti |
---|---|---|---|---|---|---|
0 | +4 | -14 | -2 | +2 | -16 | -12 |
#オクターブとは?
基準周波数の2倍が1オクターブ
これは平均律も純正律も同じ。
#平均律とは?
1オクターブ(2倍)を12等分したものが平均律の半音の幅
JavaScript的な表現だとこんな感じ。
Math.pow(2,1/12)
#セントとは?
平均律での半音を100等分した幅
よって、オクターブの1200等分
JavaScript的な表現だとこんな感じ。
Math.pow(2,1/1200)
#純正律とは?
1オクターブ(2倍)を整数比で分割したもの。
音の幅は(周波数比は)
半音は16/15だけど全音は幅の広い大全音(9/8)と小全音(9/10)がある。
ドからの周波数比はこんな感じ。
Do | Re | Mi | Fa | So | La | Ti |
---|---|---|---|---|---|---|
1 | 9/8 | 5/4 | 4/3 | 3/2 | 5/3 | 15/8 |
#計算してみる
##平均律
平均律で1セント幅
cent=Math.pow(2,1/1200); //1セント幅
##純正律
純正律は直接的にしか定義できないので
pure =[1,9/8,5/4,4/3,3/2,5/3,15/8]; //純正律
##純正律の平均律からの差
上記を踏まえて、純正律の平均律からの差(セント)を計算すると
<script language="JavaScript">
cent=Math.pow(2,1/1200); //1セント幅
pure =[1,9/8,5/4,4/3,3/2,5/3,15/8]; //純正律
stepNum=[0,2,4,5,7,9,11]; //基準音からの幅 半音1、全音2
stepName=["Do","Re","Mi","Fa","So","La","Ti"]; //音名
for(i=0;i<stepName.length;i++){
//結果を表示
document.write(stepName[i] +
Math.round(
(Math.log(pure[i])/Math.log(cent) -
stepNum[i]*100)) +
"<BR>");
}
</script>
#おまけ
マイナーコードの場合、ラが基準音だと考えると
ラをドに読み替えて、全体を16セントあげれば
純正律になるけど、とてもピッチが高くなる
・・・けどいいのだろうか
Do | Re | Mi♭ | Fa | So | La♭ | Ti |
---|---|---|---|---|---|---|
0 | +28 | +16 | +20 | +2 | +14 | +18 |