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

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

※ これは、ピッチベンドが 100/4096 セント単位でかかると仮定した場合のものである。 実際の PC ではピッチベンドは 1 セント単位でしかかからないので、 「すのものの「純正律について」(その8)」 を利用することをおすすめする。

すのものの「純正律について」(その4)』 に加えて、属七の和音の周波数比を 4:5:6:7 にとるとき、 その音が第七音だった場合のピッチベンド引数の値をカッコに入れて書いたもの。

見方を例で説明する。最初にとった C は 8192 と書かれているものである。 その右どなりは G, さらに右は D, その右下は F であるが、 その F のカッコの中に 6915 と書かれているのは、 いま見た G を根音とする属七の和音の第七音として用いる場合は BW6915 と書け、という意味である。

カッコの中に「-」があるのは、全音を越えたピッチベンドが必要となるので mml では記述不可能な箇所である。

### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
  Hisis
904
(-)
 
Gisis
1465
(-)
Disis
1545
(-)
Aisis
1625
(-)
Eisis
1705
(-)
Hisis
1785
(-)
 
  His
2106
(108)
Fisis
2186
(188)
Cisis
2266
(268)
Gisis
2346
(348)
Disis
2426
(428)
Aisis
2506
(508)
Eisis
2586
(589)
Hisis
2666
(669)
 
Gis
2666
(669)
Dis
2746
(749)
Ais
2826
(829)
Eis
2907
(909)
His
2987
(989)
Fisis
3067
(1069)
Cisis
3147
(1149)
Gisis
3227
(1229)
Disis
3307
(1309)
Aisis
3387
(1389)
Eisis
3467
(1469)
Hisis
3547
(1550)
 
  H
3307
(1309)
Fis
3387
(1389)
Cis
3467
(1470)
Gis
3547
(1550)
Dis
3627
(1630)
Ais
3707
(1710)
Eis
3787
(1790)
His
3868
(1870)
Fisis
3948
(1950)
Cisis
4028
(2030)
Gisis
4108
(2110)
Disis
4188
(2190)
Aisis
4268
(2270)
Eisis
4348
(2350)
Hisis
4428
(2430)
 
G
3868
(1870)
D
3948
(1950)
A
4028
(2030)
E
4108
(2110)
H
4188
(2190)
Fis
4268
(2270)
Cis
4348
(2350)
Gis
4428
(2430)
Dis
4508
(2511)
Ais
4588
(2591)
Eis
4668
(2671)
His
4748
(2751)
Fisis
4829
(2831)
Cisis
4909
(2911)
Gisis
4989
(2991)
Disis
5069
(3071)
Aisis
5149
(3151)
Eisis
5229
(3231)
Hisis
5309
(3311)
 
  B
4508
(2511)
F
4588
(2591)
C
4668
(2671)
G
4748
(2751)
D
4829
(2831)
A
4909
(2911)
E
4989
(2991)
H
5069
(3071)
Fis
5149
(3151)
Cis
5229
(3231)
Gis
5309
(3311)
Dis
5389
(3391)
Ais
5469
(3472)
Eis
5549
(3552)
His
5629
(3632)
Fisis
5709
(3712)
Cisis
5789
(3792)
Gisis
5870
(3872)
Disis
5950
(3952)
Aisis
6030
(4032)
Eisis
6110
(4112)
Hisis
6190
(4192)
 
Ges
5069
(3071)
Des
5149
(3151)
As
5229
(3231)
Es
5309
(3311)
B
5389
(3392)
F
5469
(3472)
C
5549
(3552)
G
5629
(3632)
D
5709
(3712)
A
5790
(3792)
E
5870
(3872)
H
5950
(3952)
Fis
6030
(4032)
Cis
6110
(4112)
Gis
6190
(4192)
Dis
6270
(4272)
Ais
6350
(4352)
Eis
6430
(4433)
His
6510
(4513)
Fisis
6590
(4593)
Cisis
6670
(4673)
Gisis
6750
(4753)
Disis
6831
(4833)
Aisis
6911
(4913)
Eisis
6991
(4993)
Hisis
7071
(5073)
 
  Bes
5710
(3712)
Fes
5790
(3792)
Ces
5870
(3872)
Ges
5950
(3952)
Des
6030
(4032)
As
6110
(4112)
Es
6190
(4192)
B
6270
(4272)
F
6350
(4352)
C
6430
(4433)
G
6510
(4513)
D
6590
(4593)
A
6670
(4673)
E
6751
(4753)
H
6831
(4833)
Fis
6911
(4913)
Cis
6991
(4993)
Gis
7071
(5073)
Dis
7151
(5153)
Ais
7231
(5233)
Eis
7311
(5313)
His
7391
(5393)
Fisis
7471
(5474)
Cisis
7551
(5554)
Gisis
7631
(5634)
Disis
7711
(5714)
Aisis
7792
(5794)
Eisis
7872
(5874)
Hisis
7952
(5954)
 
Geses
6270
(4272)
Deses
6350
(4353)
Ases
6430
(4433)
Eses
6510
(4513)
Bes
6590
(4593)
Fes
6670
(4673)
Ces
6751
(4753)
Ges
6831
(4833)
Des
6911
(4913)
As
6991
(4993)
Es
7071
(5073)
B
7151
(5153)
F
7231
(5233)
C
7311
(5313)
G
7391
(5394)
D
7471
(5474)
A
7551
(5554)
E
7631
(5634)
H
7711
(5714)
Fis
7792
(5794)
Cis
7872
(5874)
Gis
7952
(5954)
Dis
8032
(6034)
Ais
8112
(6114)
Eis
8192
(6194)
His
8272
(6274)
Fisis
8352
(6354)
Cisis
8432
(6435)
Gisis
8512
(6515)
Disis
8592
(6595)
Aisis
8672
(6675)
Eisis
8752
(6755)
Hisis
8833
(6835)
 
  Beses
6911
(4913)
Feses
6991
(4993)
Ceses
7071
(5073)
Geses
7151
(5153)
Deses
7231
(5233)
Ases
7311
(5314)
Eses
7391
(5394)
Bes
7471
(5474)
Fes
7551
(5554)
Ces
7631
(5634)
Ges
7712
(5714)
Des
7792
(5794)
As
7872
(5874)
Es
7952
(5954)
B
8032
(6034)
F
8112
(6114)
C
8192
(6194)
G
8272
(6274)
D
8352
(6355)
A
8432
(6435)
E
8512
(6515)
H
8592
(6595)
Fis
8672
(6675)
Cis
8753
(6755)
Gis
8833
(6835)
Dis
8913
(6915)
Ais
8993
(6995)
Eis
9073
(7075)
His
9153
(7155)
Fisis
9233
(7235)
Cisis
9313
(7315)
Gisis
9393
(7396)
Disis
9473
(7476)
Aisis
9553
(7556)
Eisis
9633
(7636)
Hisis
9713
(7716)
 
  Beses
7792
(5794)
Feses
7872
(5874)
Ceses
7952
(5954)
Geses
8032
(6034)
Deses
8112
(6114)
Ases
8192
(6194)
Eses
8272
(6274)
Bes
8352
(6355)
Fes
8432
(6435)
Ces
8512
(6515)
Ges
8592
(6595)
Des
8673
(6675)
As
8753
(6755)
Es
8833
(6835)
B
8913
(6915)
F
8993
(6995)
C
9073
(7075)
G
9153
(7155)
D
9233
(7235)
A
9313
(7315)
E
9393
(7396)
H
9473
(7476)
Fis
9553
(7556)
Cis
9633
(7636)
Gis
9714
(7716)
Dis
9794
(7796)
Ais
9874
(7876)
Eis
9954
(7956)
His
10034
(8036)
Fisis
10114
(8116)
Cisis
10194
(8196)
Gisis
10274
(8276)
Disis
10354
(8356)
  Beses
8673
(6675)
Feses
8753
(6755)
Ceses
8833
(6835)
Geses
8913
(6915)
Deses
8993
(6995)
Ases
9073
(7075)
Eses
9153
(7155)
Bes
9233
(7235)
Fes
9313
(7316)
Ces
9393
(7396)
Ges
9473
(7476)
Des
9553
(7556)
As
9633
(7636)
Es
9714
(7716)
B
9794
(7796)
F
9874
(7876)
C
9954
(7956)
G
10034
(8036)
D
10114
(8116)
A
10194
(8196)
E
10274
(8276)
H
10354
(8357)
Fis
10434
(8437)
Cis
10514
(8517)
Gis
10594
(8597)
Dis
10674
(8677)
Ais
10755
(8757)
Eis
10835
(8837)
His
10915
(8917)
 
  Beses
9553
(7556)
Feses
9634
(7636)
Ceses
9714
(7716)
Geses
9794
(7796)
Deses
9874
(7876)
Ases
9954
(7956)
Eses
10034
(8036)
Bes
10114
(8116)
Fes
10194
(8196)
Ces
10274
(8277)
Ges
10354
(8357)
Des
10434
(8437)
As
10514
(8517)
Es
10594
(8597)
B
10675
(8677)
F
10755
(8757)
C
10835
(8837)
G
10915
(8917)
D
10995
(8997)
A
11075
(9077)
E
11155
(9157)
H
11235
(9237)
Fis
11315
(9318)
Cis
11395
(9398)
Gis
11475
(9478)
Dis
11555
(9558)
  Beses
10434
(8437)
Feses
10514
(8517)
Ceses
10595
(8597)
Geses
10675
(8677)
Deses
10755
(8757)
Ases
10835
(8837)
Eses
10915
(8917)
Bes
10995
(8997)
Fes
11075
(9077)
Ces
11155
(9157)
Ges
11235
(9237)
Des
11315
(9318)
As
11395
(9398)
Es
11475
(9478)
B
11555
(9558)
F
11636
(9638)
C
11716
(9718)
G
11796
(9798)
D
11876
(9878)
A
11956
(9958)
E
12036
(10038)
H
12116
(10118)
 
  Beses
11315
(9318)
Feses
11395
(9398)
Ceses
11475
(9478)
Geses
11555
(9558)
Deses
11636
(9638)
Ases
11716
(9718)
Eses
11796
(9798)
Bes
11876
(9878)
Fes
11956
(9958)
Ces
12036
(10038)
Ges
12116
(10118)
Des
12196
(10198)
As
12276
(10279)
Es
12356
(10359)
B
12436
(10439)
F
12516
(10519)
C
12596
(10599)
G
12677
(10679)
D
12757
(10759)
  Beses
12196
(10199)
Feses
12276
(10279)
Ceses
12356
(10359)
Geses
12436
(10439)
Deses
12516
(10519)
Ases
12597
(10599)
Eses
12677
(10679)
Bes
12757
(10759)
Fes
12837
(10839)
Ces
12917
(10919)
Ges
12997
(10999)
Des
13077
(11079)
As
13157
(11159)
Es
13237
(11240)
B
13317
(11320)
 
  Beses
13077
(11079)
Feses
13157
(11159)
Ceses
13237
(11240)
Geses
13317
(11320)
Deses
13397
(11400)
Ases
13477
(11480)
Eses
13558
(11560)
Bes
13638
(11640)
Fes
13718
(11720)
Ces
13798
(11800)
Ges
13878
(11880)
Des
13958
(11960)
  Beses
13958
(11960)
Feses
14038
(12040)
Ceses
14118
(12120)
Geses
14198
(12201)
Deses
14278
(12281)
Ases
14358
(12361)
Eses
14438
(12441)
Bes
14518
(12521)
 
  Beses
14839
(12841)
Feses
14919
(12921)
Ceses
14999
(13001)
Geses
15079
(13081)
Deses
15159
(13162)
  Beses
15720
(13722)
 

上の表は、C言語による次のプログラムに出力させた。 これは、 『すのものの「純正律について」(その4)』 に載せたプログラムに追加しただけのものである。

#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("%.0f<br>", bend * 4096 + 8192);
            }
            val[0] *= 35; val[1] *= 9;
            standardize(val);
            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("(%.0f)</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