音楽ソフト
->
Windows
->
自動作曲ソフト
->
自動作曲システム
最近、問合せが増えてきましたので、アルゴリズムの詳細について紹介することにしました。以下で「自動作曲システム」での作曲プロセスについて紹介しますが、 ファイル作成やMIDIによる演奏など、作曲に直接関連しない部分については省略しています。また、少し古いバージョンの説明であることも、お断りしておきます。
概要
自動作曲システムは、次の5つのステップにわけて作曲を行います。
(1)アウトラインの作成
(2)コード進行の作成
(3)ハーモニー・トラックとリズム・トラックの作成
(4)メロディ・トラックの作成
(5)トラック間の調整
ここで、(3)と(4)の順序は、どちらを先に行っても変わらないような構造になっています。
アウトラインの作成
通常の楽曲、特にポップス系の曲では、イントロ、パターン化されたテーマ(4小節程度のフレーズ)の繰り返しとエンディングなどで曲が構成されています。このステップでは、乱数を用いて、このような曲の大まかな構成を作成します。
自動作曲システムでは、イントロは作成しませんから、乱数を用いて、曲に含まれるテーマの数と、その繰り返し数を決定します。サビ(一番最後のテーマ)の部分とエンディングは、どの曲も同じかたちで作られます。
例えば、
[テーマA][テーマA][テーマB][テーマB][テーマB][サビ][エンディング]
のような形で、アウトラインが作成されます。一番短い曲では、
[テーマA][サビ][エンディング]
の形になります。
コード進行の作成
このステップでは、上で決定されたアウトラインにそって、曲全体のコード進行と各小節の長さが決定されます。
自動作曲システムで使用するコードは、4つの音から構成されます。たとえば、C7では、C、E、G、Bbの音を含んでいます。ですから、C9のような5つの音から構成されるコードは、自動作曲システムの中には存在していません。9th以降の音は、すべて、テンションとしてのみ使用されます。また、sus4の音は、かならず長3度の音に解決するように作られています。
曲の最初のコードは、必ずCM7か、Am7、C7になるようになっています。長調を選んだ場合は、CM7、短調の場合は、Am7、ブルースの場合は、C7になります。2つめ以降のコードは、1つ前のコードをもとに、データベースを参照して決定されます。このとき、コード進行の設定が「簡単」「複雑」などのうちのどれになっているかによって、選ばれるコードが変わってきます。サビの場合は、解決感をだすために、通常のテーマ部分とは別のデータベースを使用して、作成します。エンディングは、曲を解決し、最後のコードが最初のコードと同じCM7かAm7かC7になるように作成されます。
各小節の長さは、4分音符1つ分から、8つ分までの長さを乱数で割り当てます。
例えば、[テーマA]のコード進行は、
[CM7を全音符分][Em7を全音符分][Am7を2分音符分][G7を2分音符分]
のよう作成されます。
ハーモニー・トラックとリズム・トラックの作成
このステップでは、上で作成されたコード進行にそって、ハーモニー・トラックとリズム・トラックが作成されます。
ハーモニー・トラックは、各音楽スタイルにそったものが作成されるように、細かな配慮がなされています。音楽スタイルごとに、ある程度のパターンが用意されていますが、リズムや音の響きが単調にならないように、工夫されています。例えば、ジャズ系では、テンションを含むようにハーモニー・トラックが作成されます。
リズム・トラックは、ほとんどのジャンルで、用意されたパターンをそのまま使用しますので、非常に短調なものになります。ただ、フィルインなどがたまに入るように、工夫されています。
メロディ・トラックの作成
メロディ・トラックも、コード進行にそって作成されます。この段階では、上で作成されたハーモニー・トラックやリズム・トラックの内容を参照することはありません。
まず、そのテーマ全体にわたって、どのようなラインでメロディを作成するかを、ラグランジュの多項式を使用して決定します。仮想の楽譜に、曲線を描くようなことを思い浮かべると、わかりやすいと思います。
例えば、[テーマA]が4小節の長さだとすると、その楽譜の上に4小節にわたる長さの曲線を書きます。プログラムでは、これは、ラグランジュの多項式と乱数を使用することで行われます。
次に、メロディ・ラインのリズムを決定します。例えば、4分音符が4つとか、8分音符と4分音符の組み合わせとかで、小節を埋めて行きます。
ラグランジュの多項式で作成した曲線に、作成したリズムを割り振っていくと、暫定的なメロディ・ラインができあがります。
このメロディ・ラインには、音階上に存在しない音が含まれていますので、音階やコードに調和するような調整を先のものとは別のデータベースを用いて行います。調和しない音は、通常、半音上か、半音下にスライドさせることによって、調和する音になります。
複数のメロディ・トラックがある場合は、このプロセスが繰り返されます。また、補助リズムの作成も、内部的には、メロディの作成ルーチンを用いて行われます。
トラック間の調整
最後に、各メロディ・トラック間や、ハーモニー・トラックとの間にある短2度、長2度などの不協和音を取り除く処理が行われます。ジャズなど、不協和音が許される音楽スタイルでは、このプロセスは行われません。