前回は処理2の前にこんな1文を追加しましたが、
移動ド[i] = 移動ド[i - 1] * 音程[i];
周波数[i] = 調 * 移動ド[i]; //処理2
今回は処理2の後にこんな1文を追加します。
周波数[i] = 調 * 移動ド[i]; //処理2
調 = 周波数[i];
この処理は音を取るのと同時に、
「その音が次の音取りの基準」
となるようにその値を調に一旦退避することで、
次の音を取る(iがカウントアップした)ときに、
「調が直前の音(周波数[i - 1])」
を指すことになります。また、
「移動ドは調(ここでは周波数[i - 1])との音程」
を表しているため結果的に、
周波数[i] = 周波数[i - 1] * 音程[i]; //処理1
と同等の処理になります。
調の値が変わると言うことは音楽的に言えば、
「転調する」
つまり、これは音を取る度に今取った音を、
「『ド』に読み替え(ムタツィオ)する」
操作を表しています。
ただし、本来読み替えは実際の転調時に行うもので、
今回の処理は、
「直前の音を基準として音を取るための特殊な用法」
と言えるでしょう。
そもそもこのように音を取る度に調が変わったら、
曲を通しての一貫性が失われ、調性が生じません。
ちなみに、
「任意の音を開始音として完全5度上げる(ただし、
開始音からオクターブ離れたらオクターブ下げる)
これを12回繰り返してまた開始音に戻ってくる」
と言う音程操作ができる人もいると思いますが、
おそらく内部的には、
「『ソ/ド』と12回繰り返して読み替える」
のと同じ操作が行われているのではないでしょうか?
ただし、このとき完全5度の振動比を3/2として
5度圏を一周すると、
が発生し、正確には開始音に戻ってきません。
なお、音程を上げるのではなく下げたい場合は、
例えば短3度下であれば、
「その転回音程の長6度上のオクターブ下の音」
と考えて音を取る人もいるのではないでしょうか?
関連記事
(其の十一) (其の十二) (其の十三) (其の十四) (其の十五)