和音をプログラムで扱うには その2
3音和音(トライアド)をアルゴリズムで扱うと、馬鹿みたいに単純です。だけど音楽理論が頭に有ると邪魔をします。
4音和音(セブンス)も単純です。さて、説明にあぐねています。
言葉での説明を考えたけどFoxDotの方が良いかなで。
p1>>pluck(P[0,1,2,3,4,5,6]+(0,2,4))
これで、I ,IIm, IIIm, IV, V, VIm, VIIm(♭5)の和音が順次なります。
ここでメジャースケールの配列を見てみます。
>>> print(Scale.major) P[0, 2, 4, 5, 7, 9, 11]
では、
Iの和音の構成を見ます。0,4,7 これは長3度でメジャーになります。
IIの和音の構成を見ます。2,5,9 これは短3度でマイナーになります。
IIIの和音の構成を見ます。4,7,11 これは短3度でマイナーになります。
スケールを使ってインデックスで0,2,4に組み合わせると、勝手に和音になり、メジャー、マイナーを意識しないでよくなります。
4音和音(セブンス)でも同じ事。
p1>>pluck(P[0,1,2,3,4,5,6]+(0,2,4,6))
なので扱いはディグリーネームIVのトライアドとか、ディグリーネームVIのセブンスという感じになる訳です。
以前の図より、sus4なら
p1>>pluck(P[0,1,2,3,4,5,6]+(0,3,4))
解れば、単純なんですね。ただ覚えた音楽理論が有ると頭の整理に時間が要ります。 慣れなのですかね スケールが変わってもルールは変わりません。これが絶妙です。音楽理論の本質って、むしろこれだろうって思っています。
和音には転回と言うのが有ります。トライアドの場合、3音の内低い音をオクターブ上げて和音にするか、3音の内高い音をオクターブ下げて和音にするかのようですが、この辺りもコントロールしないとならないのですかね。