全く新しい概念による自動作曲(説明:荒井公康)
  (補足1:ピッチクラス集合論との関係)
  (補足2:コード進行生成手法例)
  (補足3:旋律生成アルゴリズム)

  ANTONIO CARLROS JOBIN(アントニオ・カルロス・ジョビン)の作曲した「イパネマの娘」という曲のジャズの理論による構造をLisp言語のS式で表現すると

     ((FM7 ion) (FM7 ion) (G7 lyd-7) (G7 lyd-7)
     (Gm7 dor)(C7 mix alt comd)(FM7 ion)(Gm7 dor C7 mix alt comd)
     (FM7 ion)(FM7 ion)(F#M7 ion)(F#M7 ion)
     (F#m7 dor)(B7 lyd-7)(AM7 ion)(AM7 ion)
     (Am7 phr dor)(D7 alt hmp5 comd)(B♭M7 lyd ion)(B♭M7 lyd ion)
     (Bm♭7 dor)(E♭7l lyd-7)(Am7 dor phr)(D7 alt hmp5 comd)
     (Gm7 dor)(C7 mix alt comd)(FM7 ion)(FM7 ion)
     (G7 lyd-7)(G7 lyd-7)(Gm7 dor)(C7 mix alt comd)
     (FM7 ion)(Gm7 dor)(C7 mix alt comd)(FM7 ion))

ジャズのミュージシャンはこの表記をもとに即興演奏を行います。その過程をプログラム化すれば自動作曲システムを作ることができます。このような表記を生成するのも興味深いですが、話が長くなりますので、省略します。上の表記の(FM7 ion)のFM7はコード名、ionはコードスケールの名前です。lyd−7などもコードスケールの名前です。コードスケールが複数書いてあるところは、いずれのコードスケールも使用可能です。音階ドレミファソラシドには半音と全音が含まれています。ミとファ、シとドの間は半音、その他の音の間は全音(半音の2倍)になっていることは周知のことと思います。このようにコードスケールの性格はどのように半音と全音が配置されているかによって決定されます。半音は短2度の音程、全音は長2度の音程です。但し、コードスケールによっては短3度の音程を含むものもあります。
  次に簡単に知識表現について述べます。半音の距離を0.5、全音の距離を1.0、短3度の距離を1.5とすることにより、様々なコードスケールを表現することができます。例えば、C ionは

          ド    1.0
          レ    2.0
          ミ    3.0
          ファ   3.5
          ソ    4.5
          ラ    5.5
          シ    6.5

のように数値と対応させておきます。その他のコードスケールとコードも同様に表現しておきます。
  次に上の表記のS式から旋律を生成するには、テンションノートとコードの3度と7度の音(ガイドトーンと言います。)をまとめて一つの集合にし、その集合の巾集合を作ります。この巾集合を一つとり、その要素をランダムに任意の個数取り出し、任意にリズムを当てはめることにより、旋律を生成することが可能です。この他、UST(アッパー・ストラクチャード・トライアド)の構成音の集合からも、その巾集合から同様の方法で旋律を生成できます。他の方法の一例として、テンションノートからコードスケールをランダムに回転させ、任意の長さで切断し、任意のリズムを当てはめても旋律になります。この他にも、テンション・リゾルブなど、いろいろあります。詳しく知りたい方は、私たちの教室へお越し下さい。これらの手順を人間が行えば、作曲が行えます。これは機能モードと呼ばれる手法です。
  テンションノートという言葉が出てきましたが、これはコードスケールからコード構成音と1オクターブ上で短9度の音程を作るアヴォイドノートを除いて残った音のことで、C ionではレとラがテンションノートになります。但し、ドミナント7thコードに対しては短9度ができても構いません。9、#11、13を普通のテンションノート、♭9、#9、♭13、#13をオルタードテンションと呼ぶこともあります。また、テンションノートはコードの属性ではなくコードスケールの属性です。したがって、ドミナント7thなどのコードでは、どのコードスケールを使用するかによって、テンションノートは異なってきます。一般にドミナント7thコードが解決する時のテンション及びコードスケールは次のようになります。

    A)メージャー系のコードに解決する時は、mix, lyd-7, alt, comd
    B)マイナー系のコードに解決する時は、hmp5, alt, comd
    C)半音下降で解決する時は、lyd-7

alt, comdは調性をあまり感じさせません。その他のコードついては、あまりコードスケールの選択の余地はなく、ほとんどの場合、一意に決まってしまいます。少し面倒な感じがするかも知れませんが、要は慣れです。
  テンションノートについても、コードとコードスケールと同様の知識表現をします。テンションノートは旋律の重要な要素ですから、覚えておきましょう。
  以上、コード、コードスケール、テンションノートをしっかり表現し、把握していれば、旋律を作ることは自由自在です。生成された旋律が単純であれば、アプローチノート、イ音、逸音、経過音、補助音、刺繍音、係留音、先行音など用いて更に変化させることができます。この考え方はアドリブにつながります。
  クラシックの理論では、テンションノートを適切に表現できないので、このような手法では自動作曲は行えません。クラシックでは、そこを人間の感性で補っているところがあります。
  以上の方法で生成された旋律は、何かを手本にしたわけではないので、全くオリジナルなものになります。この理論をもとに作った自動作曲システムに関しては、情報処理学会第41回(平成2年於東北大学)全国大会で「カデンツの一般化およびコードスケールを考慮した自動作曲」という表題で発表しました。参考文献としては、飯田敏彦著「やさしく学べるジャズハーモニー 1、2 (コード進行の発展及びヴォイシングとアドリブ)」(全音楽譜出版社)などがあります。ジャズの教科書は大体同じような内容のものが多いようです。このシステムはNHKや新聞などでも報道されました。


補足1:ピッチクラス集合論との関係

ピッチクラス集合論では、次のように定義されます。

ある2つの音があって、その周波数がx,aであるとする。このとき、X=(2^n)aとなるような整数nが存在するとき、x,aはオクターブに関して同値であるといい、x〜aとあらわす。ここで、{x|x〜a}であらわされる集合をピッチクラスといい、これには整数による音名を与えることにする。

具体的には次のような対応をとります。私のシステムでの対応も示します。

ピッチクラス値   私のシステム   音名(平均律)
----0-------------1.0--------------ド
----1-------------1.5-----------ド♯ レ♭
----2-------------2.0--------------レ
----3-------------2.5-----------レ♯ ミ♭
----4-------------3.0--------------ミ
----5-------------3.5--------------ファ
----6-------------4.0-----------ファ♯ ソ♭
----7-------------4.5--------------ソ
----8-------------5.0-----------ソ♯ ラ♭
----9-------------5.5--------------ラ
---10-------------6.0-----------ラ♯ シ♭
---11-------------6.5--------------シ

ピッチクラス集合論では、周波数についての物理的モデルに基づいて対応を取っていますが、私のような対応を取っても、代数的には同じことです。

以上の対応を取れば、調性の音楽でも、無調の音楽でも、同様の扱いが可能です。  


補足2:コード進行生成手法例と作曲法

コード進行の生成の仕方について述べます。まず、ハ長調で使われるコードをランダムに並べると次のようになります。

((Em7 phr) (FM7 lyd) (Am7 aeo) (-DM7 lyd) (Bdim7 dim) (G7 mix lyd-7 hmp5 alt comd wt) (Fm7 dor) (+Fm7-5 loc)
(-D7 lyd-7) (-BM7 lyd) (F7 lyd-7) (B7 alt) (-AM7 lyd) (Dm7-5 loc+2) (Dm7 dor) (CM7 ion) (-A7 lyd-7)
(Bm7-5 loc) (-B7 lyd-7))

この後は人間(私)の出番でする。ジャズの理論を駆使して(大した理論ではないが)、上のコード群をスムーズに繋ぎます。具体的には、セカンダリードミナント、ディミニッシュコード、平行和音、トゥー・ファイブ、4度進行、半音進行、偽終止の導入などで、コード間のギャップを埋めます。これによって、例えば、次のコード進行が作れます。(実は基のデータをなくしてしまい、次に示すコード進行は上記コード群とは関係ありません。)

((C "work4")
("CM7" ion) ("+Fm7-5" loc) ("B7" alt) ("E7" hmp5)
("Am7" aeo) ("D7" hmp5) ("Em7" phr) ("A7" hmp5)
("Dm7" dor) ("G7" alt) ("Cm7" dor) ("F7" lyd-7)
("-BM7" lyd) ("CM7" ion) ("+Fm-5" loc) ("B7" alt)
("Em7" phr) ("A7" hmp5) ("Dm7" dor) ("G7" alt)
("+Fm7-5" loc) ("Fm7" dor) ("-B7" lyd-7) ("-Em7" dor)
("Dm7" dor) ("G7" alt) ("CM7" ion) ("D7" hmp5)
("Gm7" dor) ("C7" alt) ("FM7" lyd) ("-BM7" lyd)
("A7" hmp5) ("Dm7-5" loc+2) ("G7" alt) ("Em7" phr)
("-Em7" dor) ("-A7" lyd-7) ("-DM7" lyd) ("CM7" ion)
("Fm7" dor) ("-B7" lyd-7) ("-EM7" lyd) ("-AM7" lyd)
("-DM7" lyd) ("-Am7" dor) ("-D7" lyd-7) ("CM7" ion)
("G7" alt) ("+Fm7-5" loc) ("Bm7-5" loc) ("CM7" ion)
("+Fm7-5" loc) ("Bdim7" dim) ("Em7" phr) ("A7" hmp5)
("-A7" lyd-7) ("Dm7" dor) ("G7" alt) ("CM7" ion)
("Gm7" dor) ("C7" alt) ("FM7" lyd) ("Fm7" dor)
("CM7" ion)))

次に各コードに対して、コードスケール、UST、テンションノート、などの情報を計算機に列挙させます。

以上の情報を基に作曲を行うのが私の基本的パターンです。既に知られている曲のコード進行をそのまま利用することもあります。

上記情報が与えられれば、慣れれば、簡単に作曲できます。この時に、いろいろな音楽知識が使われるのでしょうが、その音楽知識を明示するのは人間にとって難しいことです。暗黙知と呼ばれるものを明示すること自体、研究課題でしょう。


補足3:旋律の生成アルゴリズム

対(コード、コードスケール)の適当な列を与えた場合、最も単純な旋律生成アルゴリズムには次の二つのものがあります。

1.ガイドトーンとテンション・ノートをランダムに配置する。
2.テンション・ノートからコード・スケールを適当に回転させる。

1.2.の応用として、次のアルゴリズムも有効であることが判明しています。

アルゴリズム
A.ガイドトーンとテンション・ノートからランダムに一つの音を選ぶ。
B.その音がガイドトーンならばそのまま旋律の要素にする。
C.その音がテンション・ノートならば音程を上下させコード・トーンに解決させる。(テンション・リゾルブである) (解決しなくとも、そのまま伸ばしても良い)
D.(A.B.C.)を繰り返し適当な長さになるまで繰り返す。

以前はA.の段階でガイドトーンの代わりにコード・トーンを使用していたが上手くいきませんでした。また上のアルゴリズムではガイドトーン以外のコード・トーンも出現し、多様な旋律を生成できます。ワルツの作曲も可能です。 ガイドトーンとはコードの3度と7度の音のことです。


補足4:("CM7" ion)の意味について

 単なるデータと知識とはどう違うのだろうか。何故、私は自分の音楽関連システムを知識システムと呼ぶのか。音楽を作る場合、自動作曲であろうと自分で作曲する場合であろうと、知識が必要である。例えば、コードネーム CM7 が表す構成音などは知識と言うよりもデータに近く、いくらこのようなデータを集めても、音楽を作ることはできない。知識とはデータを整理して、データ同士の関係を定めたものである。
 ("CM7" ion)という表記は、一般には C ionian と表記されることが多い。この表記から CM7がハ長調のトニックであり、適用されるコードスケールは C(ド)から始まる ionian (つまり、ドレミファソラシド)であることを計算機に理解させることができる。注意すべきことは、人間が理解するのではなく、計算機が理解するということである。人間であれば、C ionian と表記されていれば、使われるコードは CM7 C69 C6 C などであることは、慣れれば分かることなのであるが、これを計算機に判断させる手続きは複雑になるので、私は("CM7" ion)という表記を用いている。("CM7" ion)という表記は知識を表しているのである。また、CM7の場合、可能なコードとコードスケールの組み合わせは("CM7" ion) ("CM7" lyd)の2通りしかないことも知られている。("CM7" dor)とか("CM7" alt)などはあり得ない。また、("CM" ion)と表記されていれば、USTは G Am Emであることも計算機に理解させることができる。またテンションノートがレとラであることも表現できる。
 例えば、5小節に亘る("Em7" phr)("A7" hmp5)("Dm7" dor) ("G7" alt)("CM7" ion)はより具体的に次のような表記と考えてもよいが、簡潔でない。
  (コード:Em7(ミソシレ)、コードスケール:phr(ミファソラシドレミ))
  (コード:A7(ラ#ドミソ)、コードスケール:hmp5(ラ♭シ#ドレミファソラ))
  (コード:Dm7(レファラド)、コードスケール:dor(レミファソラシドレ))
  (コード:G7(ソシレファ)、コードスケール:alt(ソ♭ラ♭シシ♭レ♭ミファソ))
  (コード:CM7(ドミソシ)、コードスケール:ion(ドレミファソラシド))
このような表記から、人間の持つ暗黙知ないしヒューリスティックスによって、メロディーを生成させることが可能である。このような組み合わせも(音楽)知識と考えてよく、様々な歌曲(主にジャズ)の構造がこのような組み合わせで表現されることが知られている。
 このように、私の音楽関連システムは自然言語ではなく、記号によって知識表現を行っているので、分かりにくいのかも知れないが、一種のエキスパートシステムになっているのである。音楽知識をコード名とコードスケール名の組み合わせで整理するのにはかなりの時間を要した。


補足4:古典的人工知能との関連

 ゲーデルの数学的実在論と関係あるのだが、私が作った自動作曲システムを構成する、音楽で使われる記号、ひいては音楽の記号体系はどこにあるのだろうか?これらは、人間の脳内にあるのではない。あくまで、外界に実在するもので、記憶として一部脳内にあるに過ぎないのではないか。音楽自体も音楽の記号体系も、外界にあり、双方に対して、人間の脳は解釈系として機能する。
 世界内の存在を解釈する時に、人間は自分の知識に基いて解釈すると考え勝ちだが、あくまで、知識は人間の外界にある(あった)ものであり、人間の解釈対象は「存在自体」と「理論や知識」に二重化されているのではないか。存在を記号体系化したものが理論や知識であり、存在理解とは存在自体の記号体系に対する解釈である。記号体系は教育や観察・発見によってもたらされる。人間は存在を直に解釈するのではなく、存在を表すとされる記号体系を解釈するのではないか。そして、その記号体系は外界と記憶として脳内に存在する。
 Dijkstara(1972)の次の言葉がある。プログラミング言語Lispに関するものである。
 「Lispは冗談に『計算機を誤用するための最も賢い方法』であると言われてきた。この描写は大変な賛辞であると思う。この言葉によってLispの持つ完全に自由な雰囲気が伝わってくるからであるーーーーLispは、われわれの最も才能のある人々が、以前は不可能であった思考を行う手助けをしてきたのである。」
 Lispは、マッカーシーがリスト・データ構造の基本要素を極限まで簡略化し、その上の計算モデルを計算の理論で知られるラムダ計算に基いて構成し、設計したプログラミング言語である。いずれにせよ、記号の取り扱いや記号を組み合わせて複雑な知識を表現し、計算機上でそれらを操作するのに適した言語である。
 私は自分の作った自動作曲システムのことを言うのは、自慢するためではなく、他に経験も業績もないのと、今考えてみれば、古典的記号主義、計算主義に立ったシステムであるからである。私は自動作曲システムを作るのに、音楽を分析したのではなく、ジャズ理論の記号体系を分析し、それを応用したからである。私には音楽理論は分かるが、音楽が理解できるという自信はない。
 黒崎政男によると、ライプニッツは普遍記号学を構想し、ホッブスの「思考するとは計算することである」というテーゼを発展させ、「思考のアルファベット」たる少数の基本概念から、計算という記号操作によってすべての真理を演繹的の構築しようとしていた。つまりそれは、記号体系が特にうまく作られたならば、記号間の関係や秩序が、事物間の関係や秩序に対応する、という発想に基いており、記号の側の操作だけで事実や事象の知識に到達しようというものであった。この普遍記号学、およびこの記号主義と感覚、直感などの連関をめぐるライプニッツの思索は、今日のAI(人工知能)の計算主義をめぐる議論の原型をなしており、AIの根本問題に対する貴重な示唆を与えている。
  このライプニッツの説は、記号体系をジャズの理論体系とすれば、音楽という事象について、そのまま当てはまる。音楽を知らずとも、ジャズの理論で使われる記号を操作するだけで、作曲編曲なども可能であるということである。これは、記号操作の主体が、人間であろうと計算機であろうと、変わらない事実である。
 古典的人工知能の考え方は次のようなものである。
 心の構造を知識の構造と考え、さらに知識は記号の形式系として最もよく表現されると考える。認知は記号として表象された知識の上での形式的操作として理解される。古典的人工知能のパラダイムを特徴付けるためには計算主義の基く必要がある。
 古典的人工知能を特徴付ける計算主義では、知識は常にそれがどのように用いられるかという、処理過程の観点から扱われ、知識の表現ないし記述は、知識処理のアルゴリズムと不可分の関係にある。知識表現の方式として現在の人工知能で常用されている、意味ネットワーク、フレーム、プロダクション規則、論理式などいずれでも、知識を要素とその組み合わせからなる記号で表現し、それらを操作するための形式的規則/アルゴリズムを定義すると、知識の計算が実現する。記号で表現された要素が、心的構造においては概念、命題などに対応し、その上での操作(計算)が、認知、思考、推論、理解、記憶などに対応する。
 知識、ひいては心の本質は、形式的操作の対象となるような「記号」の概念でとらえることができる、という主張に対しては批判がある。その批判の多くは、人間の知識や認知のもつ状況依存性や身体性、イメージ性、アナログ性、技能性などに関わるもので、こうした批判を建設的に取り込んで、より豊かな記号概念にたつ古典的人工知能が十分に可能であると主張されている。
 古典的計算主義に対する克服は、コネクショニズムに基く計算観で試みられている。概念の分散表現の考え方は、記号なき知識表現を可能にするもので、古典的な知識観に対する改変をせまっている。

音楽豆知識  作曲入門(1)  作曲入門(2)  対位法の基礎  コード(和音)の性格
各調の機能とコード(和音)  音楽関連システム  コードスケールの構成音と性格

自動作曲システムによる音楽作品集

トップページへ戻る  ご意見ご希望の掲示板