すのものの「純正律について」(その3)

※ 検索エンジンから直接このページに来られたかたには、まず 『すのものの「純正律について」』 をお読みになることをおすすめします。

すのものの「純正律について」(その1)』 で示した表のうち、最も大きいものについて、 平均律からのずれをセント単位で計算して表にした。 ここでは、最初にとった C のずれを 0 とした。

左上にゆくほど値が小さく、右下にゆくほど値が大きくなる。 ±200 セント、すなわち平均律の全音以上ずれている音はない。

また、最初にとった C からみて、 完全五度さがることを七回おこなった音の長三度下の音 Ases は、 0.001280 と非常に 0 に近い。 (このことは「その2」でも述べた。)

##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### #####
  Hisis
-177.917880
 
Gisis
-164.231593
Disis
-162.276593
Aisis
-160.321592
Eisis
-158.366591
Hisis
-156.411590
 
  His
-148.590306
Fisis
-146.635306
Cisis
-144.680305
Gisis
-142.725304
Disis
-140.770303
Aisis
-138.815302
Eisis
-136.860301
Hisis
-134.905300
 
Gis
-134.904020
Dis
-132.949019
Ais
-130.994019
Eis
-129.039018
His
-127.084017
Fisis
-125.129016
Cisis
-123.174015
Gisis
-121.219014
Disis
-119.264013
Aisis
-117.309012
Eisis
-115.354012
Hisis
-113.399011
 
  H
-119.262733
Fis
-117.307732
Cis
-115.352732
Gis
-113.397731
Dis
-111.442730
Ais
-109.487729
Eis
-107.532728
His
-105.577727
Fisis
-103.622726
Cisis
-101.667725
Gisis
-99.712725
Disis
-97.757724
Aisis
-95.802723
Eisis
-93.847722
Hisis
-91.892721
 
G
-105.576447
D
-103.621446
A
-101.666445
E
-99.711445
H
-97.756444
Fis
-95.801443
Cis
-93.846442
Gis
-91.891441
Dis
-89.936440
Ais
-87.981439
Eis
-86.026438
His
-84.071438
Fisis
-82.116437
Cisis
-80.161436
Gisis
-78.206435
Disis
-76.251434
Aisis
-74.296433
Eisis
-72.341432
Hisis
-70.386432
 
  B
-89.935160
F
-87.980159
C
-86.025158
G
-84.070158
D
-82.115157
A
-80.160156
E
-78.205155
H
-76.250154
Fis
-74.295153
Cis
-72.340152
Gis
-70.385151
Dis
-68.430151
Ais
-66.475150
Eis
-64.520149
His
-62.565148
Fisis
-60.610147
Cisis
-58.655146
Gisis
-56.700145
Disis
-54.745145
Aisis
-52.790144
Eisis
-50.835143
Hisis
-48.880142
 
Ges
-76.248874
Des
-74.293873
As
-72.338872
Es
-70.383871
B
-68.428871
F
-66.473870
C
-64.518869
G
-62.563868
D
-60.608867
A
-58.653866
E
-56.698865
H
-54.743864
Fis
-52.788864
Cis
-50.833863
Gis
-48.878862
Dis
-46.923861
Ais
-44.968860
Eis
-43.013859
His
-41.058858
Fisis
-39.103858
Cisis
-37.148857
Gisis
-35.193856
Disis
-33.238855
Aisis
-31.283854
Eisis
-29.328853
Hisis
-27.373852
 
  Bes
-60.607587
Fes
-58.652586
Ces
-56.697585
Ges
-54.742584
Des
-52.787584
As
-50.832583
Es
-48.877582
B
-46.922581
F
-44.967580
C
-43.012579
G
-41.057578
D
-39.102577
A
-37.147577
E
-35.192576
H
-33.237575
Fis
-31.282574
Cis
-29.327573
Gis
-27.372572
Dis
-25.417571
Ais
-23.462571
Eis
-21.507570
His
-19.552569
Fisis
-17.597568
Cisis
-15.642567
Gisis
-13.687566
Disis
-11.732565
Aisis
-9.777564
Eisis
-7.822564
Hisis
-5.867563
 
Geses
-46.921301
Deses
-44.966300
Ases
-43.011299
Eses
-41.056298
Bes
-39.101297
Fes
-37.146297
Ces
-35.191296
Ges
-33.236295
Des
-31.281294
As
-29.326293
Es
-27.371292
B
-25.416291
F
-23.461290
C
-21.506290
G
-19.551289
D
-17.596288
A
-15.641287
E
-13.686286
H
-11.731285
Fis
-9.776284
Cis
-7.821284
Gis
-5.866283
Dis
-3.911282
Ais
-1.956281
Eis
-0.001280
His
1.953721
Fisis
3.908722
Cisis
5.863723
Gisis
7.818723
Disis
9.773724
Aisis
11.728725
Eisis
13.683726
Hisis
15.638727
 
  Beses
-31.280014
Feses
-29.325013
Ceses
-27.370012
Geses
-25.415011
Deses
-23.460010
Ases
-21.505010
Eses
-19.550009
Bes
-17.595008
Fes
-15.640007
Ces
-13.685006
Ges
-11.730005
Des
-9.775004
As
-7.820003
Es
-5.865003
B
-3.910002
F
-1.955001
C
0.000000
G
1.955001
D
3.910002
A
5.865003
E
7.820003
H
9.775004
Fis
11.730005
Cis
13.685006
Gis
15.640007
Dis
17.595008
Ais
19.550009
Eis
21.505010
His
23.460010
Fisis
25.415011
Cisis
27.370012
Gisis
29.325013
Disis
31.280014
Aisis
33.235015
Eisis
35.190016
Hisis
37.145016
 
  Beses
-9.773724
Feses
-7.818723
Ceses
-5.863723
Geses
-3.908722
Deses
-1.953721
Ases
0.001280
Eses
1.956281
Bes
3.911282
Fes
5.866283
Ces
7.821284
Ges
9.776284
Des
11.731285
As
13.686286
Es
15.641287
B
17.596288
F
19.551289
C
21.506290
G
23.461290
D
25.416291
A
27.371292
E
29.326293
H
31.281294
Fis
33.236295
Cis
35.191296
Gis
37.146297
Dis
39.101297
Ais
41.056298
Eis
43.011299
His
44.966300
Fisis
46.921301
Cisis
48.876302
Gisis
50.831303
Disis
52.786303
  Beses
11.732565
Feses
13.687566
Ceses
15.642567
Geses
17.597568
Deses
19.552569
Ases
21.507570
Eses
23.462571
Bes
25.417571
Fes
27.372572
Ces
29.327573
Ges
31.282574
Des
33.237575
As
35.192576
Es
37.147577
B
39.102577
F
41.057578
C
43.012579
G
44.967580
D
46.922581
A
48.877582
E
50.832583
H
52.787584
Fis
54.742584
Cis
56.697585
Gis
58.652586
Dis
60.607587
Ais
62.562588
Eis
64.517589
His
66.472590
 
  Beses
33.238855
Feses
35.193856
Ceses
37.148857
Geses
39.103858
Deses
41.058858
Ases
43.013859
Eses
44.968860
Bes
46.923861
Fes
48.878862
Ces
50.833863
Ges
52.788864
Des
54.743864
As
56.698865
Es
58.653866
B
60.608867
F
62.563868
C
64.518869
G
66.473870
D
68.428871
A
70.383871
E
72.338872
H
74.293873
Fis
76.248874
Cis
78.203875
Gis
80.158876
Dis
82.113877
  Beses
54.745145
Feses
56.700145
Ceses
58.655146
Geses
60.610147
Deses
62.565148
Ases
64.520149
Eses
66.475150
Bes
68.430151
Fes
70.385151
Ces
72.340152
Ges
74.295153
Des
76.250154
As
78.205155
Es
80.160156
B
82.115157
F
84.070158
C
86.025158
G
87.980159
D
89.935160
A
91.890161
E
93.845162
H
95.800163
 
  Beses
76.251434
Feses
78.206435
Ceses
80.161436
Geses
82.116437
Deses
84.071438
Ases
86.026438
Eses
87.981439
Bes
89.936440
Fes
91.891441
Ces
93.846442
Ges
95.801443
Des
97.756444
As
99.711445
Es
101.666445
B
103.621446
F
105.576447
C
107.531448
G
109.486449
D
111.441450
  Beses
97.757724
Feses
99.712725
Ceses
101.667725
Geses
103.622726
Deses
105.577727
Ases
107.532728
Eses
109.487729
Bes
111.442730
Fes
113.397731
Ces
115.352732
Ges
117.307732
Des
119.262733
As
121.217734
Es
123.172735
B
125.127736
 
  Beses
119.264013
Feses
121.219014
Ceses
123.174015
Geses
125.129016
Deses
127.084017
Ases
129.039018
Eses
130.994019
Bes
132.949019
Fes
134.904020
Ces
136.859021
Ges
138.814022
Des
140.769023
  Beses
140.770303
Feses
142.725304
Ceses
144.680305
Geses
146.635306
Deses
148.590306
Ases
150.545307
Eses
152.500308
Bes
154.455309
 
  Beses
162.276593
Feses
164.231593
Ceses
166.186594
Geses
168.141595
Deses
170.096596
  Beses
183.782882
 

上の表は、C言語による次のプログラムに出力させた。 これは、 『すのものの「純正律について」(その2)』 に載せたプログラムの一部を変更したものである。 文がコメントになっている行が三行あるが、 最初の二行は「その2」にあったものをコメント化したものであり、 最後の一行は、「その4」で示すプログラムで使われる行である。

付)以下のプログラムは、LICO の値を変えてコンパイルすると正しい結果が得られなかったバグを、 2010-06-21 (2) に修正したものである。

#include <stdio.h>
#include <math.h>   /* log10, floor */

#define LIN 21  /* 行の数(変えるとプログラム自体にも手直しが必要) */
#define COL 74  /* 列の数(変えるとプログラム自体にも手直しが必要) */
#define LI  10  /* 周波数 1 を何行めにおくか(変えてよい) */
#define CO  33  /* 周波数 1 を何列めにおくか(変えてよい) */

double val[2];  /* 分子、分母 */

char* name[] = {"Beses",
                "Feses", "Ceses", "Geses", "Deses", "Ases", "Eses", "Bes", \
                "Fes", "Ces", "Ges", "Des", "As", "Es", "B", \
                "F", "C", "G", "D", "A", "E", "H", \
                "Fis", "Cis", "Gis", "Dis", "Ais", "Eis", "His", \
                "Fisis", "Cisis", "Gisis", "Disis", "Aisis", "Eisis", "Hisis" };

char* color[] = { "ffffdd", "eeddff", "ddffdd", "ffddee", "ddffff", "ffeedd", \
                  "ddddff", "eeffdd", "ffddff", "ddffee", "ffdddd", "ddeeff" };
        /* (平均律で)As, Es, B, F, C, G; D, A, E, H, Fis, Cis の地の色(変えてよい) */

void standardize(double* a);
double power(double base, int n);

main() {
    int i, j, n;
    double bend;    /* 半音を 1 としたときの値 */

    printf("<html><body>\n<table border=\"1\">\n");
    printf("<tr>\n");
    for (j = 0; j < COL; j++) {
        printf("\t<td><font color=\"white\">#####</font></td>\n");
    }
    printf("</tr>\n");
    for (i = 0; i < LIN; i++) {
        printf("<tr align=\"center\">\n");
        if (i <= LIN / 2) {
            if (i % 2 == 0) {
                printf("\t<td>&nbsp;</td>\n"); j = 1;
            } else {
                j = 0;
            }
        } else {
            printf("\t<td colspan=\"%d\">&nbsp;</td>\n", 7*i - COL + 5); j = 7*i - COL + 5;
        }

        for (   ; j < 7*i + 2 && j < COL - 1; j += 2) {
            if (i <= LI) {
                val[0] = power(5, LI - i); val[1] = 1;
            } else {
                val[0] = 1; val[1] = power(5, i - LI);
            }
            if (i + j < LI + CO) {
                val[1] *= power(3, ((LI + CO) - (i + j) + 1)/2);
            } else {
                val[0] *= power(3, ((i + j) - (LI + CO))/2);
            }
            n = 35 - (7*i+1)/2 + j/2;           /* この値で音名が決まる */
            standardize(val);
            printf("\t<td colspan=\"2\" bgcolor=\"#%s\">", color[n%12]);
/*          printf("%s<br>%.0f/%.0f<br>", name[n], val[0], val[1]);     */
/*          printf("%f</td>\n", log10(val[0]/val[1])/log10(2)*1200);    */
            printf("%s<br>", name[n]);

            bend = log10(val[0]/val[1])/log10(2)*12 - (7*n+7*(COL-CO)/2+4*LI+5)%12;
            if (bend > 6) {
                bend -= 12;	/* Cis の 120 セント下、など */
            } else if (bend < -6) {
                bend += 12;     /* H の 120 セント上、など */
            }
            if (bend <= -2 || bend >= 2) {
                printf("-</td>\n");
            } else {
                printf("%f</td>\n", bend*100);
/*              printf("%f</td>\n", bend * 4096 + 8192); */
            }
        }
        if (j <= COL-1) {
            if (COL-1-j > 1) {
                printf("\t<td colspan=\"%d\">&nbsp;</td>\n", COL-j);
            } else {
                printf("\t<td>&nbsp;</td>\n");
            }
        }
        printf("</tr>\n");
    }
    printf("</table>\n");
}


/* a[] を分数とみたとき、1 以上 2 未満に規格化する */
void standardize(double* a) {
    while (a[0] < a[1]) {
        if (floor(a[1] / 2) == a[1] / 2) {
            a[1] /= 2;
        } else {
            a[0] *= 2;
        }
    }
    while (a[0] / 2 >= a[1]) {
        if (floor(a[0] / 2) == a[0] / 2) {
            a[0] /= 2;
        } else {
            a[1] *= 2;
        }
    }
}


/* base の n 乗を返す。K&R2 にあるのとほぼ同じ */
double power(double base, int n) {
    int i;
    double p;

    p = 1;
    for (i = 0; i < n; i++) {
        p *= base;
    }
    return p;
}


すのもの Sunomono