データ分析を行う当初の動機は、マーラー作品の調的な遷移のプロセスを可視化することでしたから、最初に行ったのは、各拍あるいは各小節頭拍の和音の重心を五度圏上に定義し、その軌道の遷移の様子を可視化することでしたが、その後は予備作業として和音の自動ラベリングと調的遷移の推定を行った後、一旦は動的な遷移プロセスではなく、和音の出現頻度という特徴量に基づく分析を行ってきました。
当初よりの課題であった時間方向の動的な遷移のプロセスの分析に向けての準備作業として、まずは長三和音と短三和音のみに注目して、その交替の頻度に対象を限定した集計を行ったりもしましたが、その結果を本格的に分析するには至らず、その後は再び、和声の出現頻度に関して、未分析の和音を解消したり、長三和音と短三和音について転回形を区別したりして、マーラーの作品と他の作曲家の作品との比較、マーラーの作品間(特に交響曲)の比較を行いました。その結果として、粗視的な、テクスチュアレベルに限定されたものではありますが、マーラーの作品の特徴や、マーラーの作品を創作時期に沿って時系列で眺めた時に浮かび上がる変化の傾向を、具体的なデータの裏付けをもった形で示すことができたと考えます。
更にここまでの集計・分析を通じて得られた知見や、並行して実施してきたGoogle Magentaを用いた機械学習の実験を通して得られた知見に基づき、いよいよ本来の目的であった状態遷移プロセスの分析に着手すべく準備作業を行いましたので、その結果を以下に報告します。
* * *
2.状態遷移の集計手法の検討
まず具体的な集計・分析に先立って検討すべきは、マーラーの作品のような複雑な音楽作品の状態遷移をどのように捉えるかです。音楽にとって時間の次元が本質的なものであり、脳における音楽の統計学習において「遷移確率」の計算が重要であることは、例えば大黒達也『音楽する脳』(朝日新書, 2022)等を参照頂ければと思いますが(同書であれば、第2章「宇宙の音楽 脳の音楽」の「脳の音楽」の部分(p.76以降)、特にpp.84~88、更にそれに基づいて作曲家の個性について述べた節(pp.125~127)を参照)、同書で例示されているのは単一の旋律であり、マーラーであれば歌曲なら適用可能なものの、伴奏部分の重要性を考えれば声のパートのみを抽出しても、作品全体としての「旋律線」の一部しか捉えられないのではないかという疑問が直ちに浮かびますし、マーラーの作品において対位法的な側面が本質的であること(例えば、マイケル・ケネディの「マーラーの作曲技法の根本原理は二声の対位法である」(マイケル・ケネディ『グスタフ・マーラー』, 中河原理訳, 芸術現代社, 1978, p.129)という指摘を参照のこと)を踏まえると、その疑問は一層強まるように感じられます。
その一方で、最近の機械学習の領域では、人間が抽象・加工したデータではなく生のデータそのものを用いるアプローチが優勢で、音響データを直接入力とするアプローチも試みられています。しかしながらマーラーの作品は大規模なオーケストラのために書かれており、音楽分析の領域では「セカンダリー・パラメータ」と呼ばれる次元が膨大で、かつ重要な役割を果たしているのに対して、それらを直接扱うのは今なお困難に見えます。例えばGoogle Magentaには、単旋律を扱うmelodyRNNモデルだけではなく、J.S.バッハのコラールの和声付けを範例としたpolyphonyRNNモデルのような多声体を扱う(ということは和音の系列を扱える)モデルも用意されていますが、入力はシングル・トラックのMIDIデータに限定されており、音色の次元は捨象されています。そのような状況を踏まえると、マーラーの作品(特にその交響曲)について、その複雑多様な総体を抽象することなく分析することは(私のようなアマチュアが自分で利用できるリソースの範囲内で試行するという点を勘案すれば一層の事)時期尚早であり、その一部の次元のみを抽象したデータを対象とした分析に限定せざるを得ないと思われ、であるとするならば、従来実施してきた分析の延長線上で何ができるかを考えるのが現実的だということになりそうです。
* * *
既述の通り、本ブログではこれまで、MIDIファイルを入力とした分析を行ってきましたが、和音の出現頻度の集計・分析をするにあたり、作品の中の全ての音を対象とするのではなく、各拍頭、或いは(拍子の情報が存在していることを前提に)小節頭拍における和音のみを対象に行ってきました。それは調的な遷移のプロセスを粗視的に把握することを目的として採用した手法でした。更にそこでは、各小節頭拍、ないし各拍頭で鳴っている和音(含む単音、2音)について
- ひとまず転回を無視して分類(ピッチクラスセットに相当)
- 転回を判定するために、最も低い音を抽出
- 上記を用いて、長三和音、短三和音については転回を判定する
といった処理を行い、その結果を用いた分析を行ってきました。従って状態遷移の集計・分析を行うにあたっても、これまで行ってきた上記の和音(ピッチクラスセット)の頻度分析と共通の手法を用いて実施することが考えられます。
その一方で状態遷移の分析では、単独の和音(ピッチクラスセット)の頻度の集計・分析では考慮する必要のなかった、前の和音と後の和音の相対的な関係についての対称性を考慮する必要が生じます。例えば「長三和音→短三和音」の連結を例として取り上げてみると、「イ長調の長三和音→イ短調の短三和音」と「ハ長調の長三和音→イ短調の短三和音」とは区別されるべきですが、「イ長調の長三和音→イ短調の短三和音」と「ハ長調の長三和音→ハ短調の短三和音」は、基音は異なりますが、遷移そのものは同一のものと判定されるべきでしょう。同様に「二長調の長三和音→イ長調の長三和音」の遷移と「ヘ長調の長三和音→ハ長調の長三和音」の遷移とは、相対的な移動(五度圏上で、サブドミナント方向に1つシフトする)という点では同じ移動と判定されるべきです。このためには、転回を判定するためのバスの音の抽出とは別に、和音(ピッチクラスセット)の五度圏上での位置を取得して、遷移における移動を、前後の位置の差分として計算する必要があります。
そこで遷移パターンの集計にあたっては、以下のような符号化を行って、対象となる和音のラベリングを行うこととしました。
(a)和音(ピッチクラスセット)のラベル:12桁の2進数=10進表現で0~4095で表現できるので4桁あれば十分です。和音の五度圏上での出現位置について対称性があるので、便宜的に10進表現した場合の最小値をラベルとします。例えば、単音の場合、12音のうちどの音が鳴るかによって以下の12通りありますが、最小値である1をこのピッチクラスセットのラベルとします。なおここでは、従来の符号化の時の取り決めに準じて、最下位ビットはDesで、左方向にドミナント方向にシフトしていくものとします。(以下の括弧内はピット列を10進表現した値と、その値と五度圏上の音の対応を表します。)Desを起点にとったのには特に理由はなく、単なる取り決めの問題です。
000000000001(1:Des/Cis)
000000000010(2:Aes)
000000000100(4:Es)
000000001000(8:B)
000000010000(16:F)
000000100000(32:C)
000001000000(64:G)
000010000000(128:D)
000100000000(256:A)
001000000000(512:E)
010000000000(1024:H)
100000000000(2048:Ges/Fis)
(b)和音(ピッチクラスセット)の五度圏上での位置:その和音のラベルとなったパターンを基準として、左に何ビットずれているかで示します。但しビット列は五度圏上の位置を示しており、最上位桁は最下位桁に繋がって巡回する構造となっているので、基準位置のすぐ右隣りが12となります。例えば長三和音に対応するピッチクラスセットは、以下の12通りですが、ラベルは最小値の19となり、そこから左回りに以下のように位置を定義します。ハ長調の長三和音は608ですが、ラベルは調を問わず長三和音のピッチクラスセット共通で19となり、五度圏上の位置は608に対応した6となります。
2057 3076 1538 769 2432 1216 608 304 152 76 38 19
12 11 10 9 8 7 6 5 4 3 2 1
Ges H E A D G C F B Es Aes Des
2060 1030 515 2305 3200 1600 800 400 200 100 50 25
12 11 10 9 8 7 6 5 4 3 2 1
Ges H E A D G C F B Es Aes Des
2080 1040 520 260 130 65 2080 1040 520 260 130 65
12 11 10 9 8 7 6 5 4 3 2 1
6 5 4 3 2 1 12 11 10 9 8 7 (?:代替案)
Ges H E A D G C F B Es Aes Des
(c)和音の最低音の五度圏上での位置:(b)と同様に1~12の範囲を持ちますが、ここでもDesを起点として以下のように番号付けします。
Ges H E A D G C F B Es Aes Des
12 11 10 9 8 7 6 5 4 3 2 1
なおここでの最低音についても、(b)と同様、五度圏上の位置の区別が目的ですので、あくまでも実際に鳴っている音のMIDIコードナンバーが最も小さい音が上記の番号のどれに当たるかを定義としており、機能和声における根音のような機能的な概念とは無関係なものであることをお断りしておきます。
(d)和音の符号化
例えばハ長調の主三和音(C-E-G)の第2転回形(四六の和音)は、
- ピッチクラスのラベルは19…(a)
- 和音(ピッチクラスセット)の五度圏上での位置では608なので6…(b)
- 和音の最低音の五度圏上での位置はGなので7…(c)
となりますから、上記の値に基づき、
19×10000+6×100+7=190607
というように符号化されます。この符号化により、ピッチクラスの同一性、五度圏上での位置、転回の区別を表現することが可能です。
(e)遷移パターンの定義
更に上記の符号化に基づいて、遷移パターンを計算する時、(b))和音(ピッチクラスセット)の五度圏上での位置については、前の和音と後の和音の距離を計算します。繰り返しいなりますが、五度圏のビット表現のため、最上位ビットの次は最下位ビットに巡回しますから、差を計算して値が負になった場合には12を加えることで距離の計算が行えることになります。そして遷移パターンとしては、前の和音の3~4桁目は常に0として、後の和音の3~4桁目に前と後の距離を設定します。こうすることにより、同一の和音(ピッチクラスセット)で五度圏上の位置は異なるが、同じ距離の移動を持つ遷移パターン(例えば、「二長調の長三和音→イ長調の長三和音」と「ヘ長調の長三和音→ハ長調の長三和音」)が同じ数値で表現されることになります。これにより、例えば「ドミナント方向への転調」のようなレベルで遷移が抽象されたことになります。但し、あくまでも同一のパターン変化を取り出すことができたに過ぎず、ここでは状態遷移の「意味」は捨象されていることに留意する必要があります。つまり同じ状態遷移が「転調」なのか、同一調領域における主和音から属和音への移行(あるいは下属和音から主和音への移行)なのかという「意味」は考慮されていないということです。
- ピッチクラスのラベルは不変で19…(a)
- 和音の位置は前の和音の位置基準の相対位置に変換。五度上だから五度圏上の左隣、距離としては1…(b)
- 和音の最低音の五度圏上での位置は(b)の値との相対なので2…(c)
となり、上記の値に基づき、
19×10000+1×100+2=190102
というように符号化されます。
なお、転回形を区別しない場合には、(a)(b)のみで、(c)は無視し(常に0となる)、
19×10000+1×100=190100
と符号化することになります。
(f)遷移パターンの「深さ」
更に遷移パターンを定義するにあたり、前に何ステップまで遡った系列で次の音が決まるかという状態遷移を決める記憶の幅を決める必要があります。上掲の大黒達也『音楽する脳』ではそれを「深さ」と呼んでいる(同書, p.87の「深い統計学習と浅い統計学習」の節を参照)ので、ここでも「深さ」という呼び方を採用しますが、最も単純なものは、直前の音が次の音を決めるという「前→後」という遷移パターンで、これは深さ=1ということになります。「2つ前→1つ前→後」は深さ=2ということになります。また、この定義によれば、ある時点で鳴っている和音の頻度の集計は、深さ=0のパターンであると見做すことが可能です。(ただし深さ=0の場合には、2つの和音の間の移動の差分の計算というのは成り立たないため、和音そのものの五度圏上の位置、バスの位置を符号化したものの出現頻度の集計となり、深さ=1以上の場合とは集計対象が異なります。勿論、五度圏上の位置を捨象して、ピッチクラスの集合に対応したラベルのみであるとか、転回を区別するかどうかについての選択肢はありますが、いずれにしても差分の計算ではありません。)
(g)遷移パターンの符号化
上記の遷移パターンの符号化を行った場合、深さによらず、遷移パターンの先頭では、(b)和音の位置は常に0(ここを起点の相対位置に変換するので)、(c)転回判定のバスの位置は(b)の位置からの相対に変換されます。一方、先頭以外については、既述の遷移パターンの定義通り、(b)は前の和音の位置からの相対位置、(c)は自分自身の(b)からの相対位置に(b)として求めた前との相対位置を加えた値(つまり前の和音の位置からの相対位置に等しい)になります。このようにして遷移パターンは、深さが増して系列が長くなっても、常に直前の和音に対する相対位置の系列で表されることになります。直感的には「ヘ長調主和音→ハ長調主和音の場合」も「ハ長調主和音→ト長調主和音」の場合も同様に、前の和音を基準にして、ドミナント方向に五度圏上で1ずれるという「ずれ」が符号化され、転回の情報は相対情報に変換されて保存されることになります。
* * *
3.分析の条件
和音の出現頻度の集計・分析においては、単音・重音を含める/除外する、或いは更に和声の分析で用いられる「名前を持った」主要な和音に限定する、というように分析対象を目的に沿って絞り込んで分析してきましたが、遷移の集計・分析について考えた場合には、以下のような条件で行うのが適当と考えました。
- 同一和音の連続は集計対象外。
- 無音の拍(小節)は対象外。
- 単音・重音の拍(小節)は対象外。(cdnz3)
- 単音・重音の拍(小節)を含む。(cdnz)
転回形の区別については、和音の出現頻度分析との整合性に配慮した場合には、長短三和音のみ区別して他は区別しないものを基本とすべきでしょうが、後述の通り、遷移の前の情報の「深さ」(大黒、上掲書, p.86 深い統計学習と浅い統計学習 の節を参照)を増していくにつれて遷移パターンのバラエティが増えて、各遷移パターンの出現頻度が小さくなることもあって、以下の3種類のパターンについてデータを集計しました。
- 全ての和音について転回形を区別せず。(default)
- 長短三和音のみ転回形を区別。(tonic)
- 全ての和音について転回形を区別。(inv)
- 各拍頭(A)
- 各小節頭拍(B)
* * *
4.分析の対象
最後に分析の対象および集計単位、および集計対象とした状態遷移の深さにつき述べます。分析の対象は従来、和音の出現頻度分析で用いてきたものと同一の、第1交響曲~第10交響曲と「大地の歌」の全11曲のMIDIファイルとしました。当該MIDIファイルは楽章毎に作成されていますが、状態遷移パターンおよび出現回数の集計は、曲毎に行いました。状態遷移の深さは1~5としました。つまり、深さ1の「前→後」から始まって、深さ5の「5つ前、4つ前、3つ前、2つ前、1つ前→後」までの5種類について、出現頻度の計算を曲単位で行いました。なお、統計学習では、出現頻度ではなく出現確率を用いますが、確率は頻度の出力から計算できますし、出現頻度そのものにも資料的な価値があると考え、出現頻度の集計結果のまま公開することにしました。
* * *
5.公開した集計結果の説明
(1)和音の符号化の定義
アーカイブファイル和音状態遷移パターン定義.zipには以下の1ファイルが含まれます。
- chord_code.xls:和音の符号化の五度圏上の位置の符号化についての定義ファイル
ファイルのフォーマットは以下の通りです。
- A~L列:五度圏上の以下の位置の音が鳴っている(1)/鳴っていない(0) Ges H E A D G C F B Es Aes Des
- M列:1~12列のビットパターンの10進表現(0~4095)
- N列:同一和音(ピッチクラスセット)の五度圏上の相対位置(最小値=1で右回りに1ずつ増加。最上位ビットから最下位ビットに巡回して、最小値のすぐ右隣りが12)
アーカイブファイル和音状態遷移元データ_全交響曲.zipには状態遷移パターンの出現頻度集計の対象データを含む、以下の4ファイルが収められています。
- sym_A_seq3.xlsx:各拍頭(A)/単音・重音の拍は対象外
- sym_B_seq3.xlsx:各小節頭拍(B)/頭拍が単音・重音の小節は対象外
- sym_A_seq.xlsx:各拍頭(A)/単音・重音の拍を含む
- sym_B_seq.xlsx:各小節頭拍(B)/頭拍が単音・重音の小節を含む
- m1:第1交響曲
- m2:第2交響曲
- m3:第3交響曲
- m4:第4交響曲
- m5:第5交響曲
- m6:第6交響曲
- m7:第7交響曲
- m8:第8交響曲
- erde:「大地の歌」
- m9:第9交響曲
- m10:第10交響曲
- 各列:各楽章・部・曲毎の対象データ(以下は歌曲1曲のみの例なので1列のみ。)
- 1行目:和音数(状態遷移の状態の数)
- 2~9行目:未使用
- 10行目以降:各状態における和音を上述の定義に基づき符号化したもの
- sym_A_frq3.xlsx:各拍頭(A)/単音・重音の拍は対象外
- sym_B_frq3.xlsx:各小節頭拍(B)/頭拍が単音・重音の小節は対象外
- sym_A_frq.xlsx:各拍頭(A)/単音・重音の拍を含む
- sym_B_frq.xlsx:各小節頭拍(B)/頭拍が単音・重音の小節を含む
- m1:第1交響曲
- m2:第2交響曲
- m3:第3交響曲
- m4:第4交響曲
- m5:第5交響曲
- m6:第6交響曲
- m7:第7交響曲
- m8:第8交響曲
- erde:「大地の歌」
- m9:第9交響曲
- m10:第10交響曲
- A,B列:構成音(ピッチクラスの集合)、五度圏上の位置、バスの位置を区別した和音出現頻度。A列1行目はパターン数。
- C.D列:構成音(ピッチクラスの集合)、バスの位置を区別した和音出現頻度。C列1行目はパターン数(invに対応)。
- E,F列:構成音(ピッチクラスの集合)を区別し、長短三和音のみバスの位置を区別した和音出現頻度(tonicに対応)。E列1行目はパターン数。
- G,H列:構成音(ピッチクラスの集合)のみを区別した和音出現頻度(defaultに対応)。G列1行目はパターン数。
- sym_A_cdnz3.xlsx:集計結果(全ての和音について転回形を区別せず)
- sym_A_cdnz3_tonic.xlsx:集計結果(長短三和音のみ転回形を区別)
- sym_A_cdnz3_inv.xlsx:集計結果(全ての和音について転回形を区別)
- sym_B_cdnz3.xlsx:集計結果(全ての和音について転回形を区別せず)
- sym_B_cdnz3_tonic.xlsx:集計結果(長短三和音のみ転回形を区別)
- sym_B_cdnz3_inv.xlsx:集計結果(全ての和音について転回形を区別)
- sym_A_cdnz.xlsx:集計結果(全ての和音について転回形を区別せず)
- sym_A_cdnz_tonic.xlsx:集計結果(長短三和音のみ転回形を区別)
- sym_A_cdnz_inv.xlsx:集計結果(全ての和音について転回形を区別)
- sym_B_cdnz.xlsx:集計結果(全ての和音について転回形を区別せず)
- sym_B_cdnz_tonic.xlsx:集計結果(長短三和音のみ転回形を区別)
- sym_B_cdnz_inv.xlsx:集計結果(全ての和音について転回形を区別)
- m1:第1交響曲
- m2:第2交響曲
- m3:第3交響曲
- m4:第4交響曲
- m5:第5交響曲
- m6:第6交響曲
- m7:第7交響曲
- m8:第8交響曲
- erde:「大地の歌」
- m9:第9交響曲
- m10:第10交響曲
- A,B列:未使用
- C~E列:深さ=1の状態遷移パターン(C~D)と頻度(E)。C列1行目はパターン数。
- F~I列:深さ=2の状態遷移パターン(F~H)と頻度(I)。F列1行目はパターン数。
- J~N列:深さ=3の状態遷移パターン(J~M)と頻度(N)。J列1行目はパターン数。
- O~T列:深さ=4の状態遷移パターン(O~S)と頻度(T)。O列1行目はパターン数。
- U~AA列:深さ=5の状態遷移パターン(U~Z)と頻度(E)。U列1行目はパターン数。
- sym_cdnz_summary.xlsx
- B_cdnz3:各小節頭拍(B)/頭拍が単音・重音の小節は対象外
- B_cdnz:各小節頭拍(B)/頭拍が単音・重音の小節を含む
- A_cdnzs3:各拍頭(A)/単音・重音の拍は対象外
- A_cdnz:各拍頭(A)/単音・重音の拍を含む
- A列:集計対象の和音・状態遷移の種別
- seq:対象拍数(Aなら拍数、Bなら小節数に概ね等しい)
- cseq:対象状態数(cdnzなら単音・重音を含む、cdnz3なら単音・重音を含まない)
- cfrq:対象状態種別数(和音の違い、五度圏上の位置の違い、転回形を区別)
- inv:状態遷移パターン・全ての和音について転回形を区別
- tonic:状態遷移パターン・長短三和音のみ転回形を区別
- default:状態遷移パターン・全ての和音について転回形を区別せず
- B列:深さ(0~5)の区分
- 0:和音種別
- 1:状態遷移パターン・前→後
- 2:状態遷移パターン・2つ前、1つ前→後
- 3:状態遷移パターン・3つ前、2つ前、1つ前→後
- 4:状態遷移パターン・4つ前、3つ前、2つ前、1つ前→後
- 5:状態遷移パターン・5つ前、4つ前、3つ前、2つ前、1つ前→後
- C~M列:各交響曲の集計結果
- C列(m1):第1交響曲
- D列(m2):第2交響曲
- E列(m3):第3交響曲
- F列(m4):第4交響曲
- G列(m5):第5交響曲
- H列(m6):第6交響曲
- I列(m7):第7交響曲
- J列(m8):第8交響曲
- K列(erde):「大地の歌」
- L列(m9):第9交響曲
- M列(m10):第10交響曲
- 1行目:ヘッダー行
- 2行目~22行目:和音・状態遷移の種別(A列)/深さ(B列)の条件毎・曲毎の集計結果
- 2行目:seq/0:対象拍数(Aなら拍数、Bなら小節数に概ね等しい)
- 3行目:scseq/0:対象状態数(cdnzなら単音・重音を含む、cdnz3なら単音・重音を含まない)
- 4行目:scfrq/0:対象状態種別数(和音の違い、五度圏上の位置の違い、転回形を区別)
- 5行目:sinv/0:和音種別(深さ0)・全ての和音について転回形を区別
- 6行目:stonic/0:和音種別(深さ0)・長短三和音のみ転回形を区別
- 7行目:sdefault/0:和音種別(深さ0)・全ての和音について転回形を区別せず
- 8行目:sinv/1:状態遷移パターン(深さ1)・全ての和音について転回形を区別
- 9行目:stonic/1:状態遷移パターン(深さ1)・長短三和音のみ転回形を区別
- 10行目:sdefault/1:状態遷移パターン(深さ1)・全ての和音について転回形を区別せず
- 11行目:sinv/2:状態遷移パターン(深さ2)・全ての和音について転回形を区別
- 12行目:stonic/2:状態遷移パターン(深さ2)・長短三和音のみ転回形を区別
- 13行目:sdefault/3:状態遷移パターン(深さ2)・全ての和音について転回形を区別せず
- 14行目:sinv/3:状態遷移パターン(深さ3)・全ての和音について転回形を区別
- 15行目:stonic/3:状態遷移パターン(深さ3)・長短三和音のみ転回形を区別
- 16行目:sdefault/3:状態遷移パターン(深さ3)・全ての和音について転回形を区別せず
- 17行目:sinv/4:状態遷移パターン(深さ4)・全ての和音について転回形を区別
- 18行目:stonic/4:状態遷移パターン(深さ4)・長短三和音のみ転回形を区別
- 19行目:sdefault/4:状態遷移パターン(深さ4)・全ての和音について転回形を区別せず
- 20行目:sinv/5:状態遷移パターン(深さ5)・全ての和音について転回形を区別
- 21行目:stonic/5:状態遷移パターン(深さ5)・長短三和音のみ転回形を区別
- 22行目:sdefault/5:状態遷移パターン(深さ5)・全ての和音について転回形を区別せず
0 件のコメント:
コメントを投稿