自動作曲のしくみ

コンピュータによる自動作曲は、実はコンピュータの発明のごく初期から試みられていて、分野としては歴史が長いものです。
それだけに、様々な手法がありますが、Chaos von Eschenbachの場合は基本的に音楽のルールを知りません。言わばサイコロを振って音を決めるのと同じなのです。

音程を決める

イカサマのない普通のサイコロの場合は、1から6まで均等な数字が出ますね。これだけでは数字が少なすぎるので、特注で32面体のサイコロを作ったとします。1から32までの数字が出ます。このサイコロを使って数字の並び(初期状態では200個)を作ります。これらに47を足して、MIDI のノート番号だと考えます。するとC3(低いド)からG5(高いソ)までの音列が得られます。
これで完成、ならよいのですが、当然これは「デタラメ」にしか聞こえないしょう。もちろん、「名曲」が生まれる可能性はありますが、確率は0に近いでしょう(Functionで「White Noice」を選び、音階で「Chromatic 48-80」を選んで試してみてください。ほぼ同じ結果が得られます)。

このように前後の数値に関連がない数列を、「ホワイトノイズ(の数列)」と呼びます。これに対し、前後間で強い依存性がある数列、例えば前の数値との差が±1あるいは0のような数列を「ブラウンノイズ(の数列)」と呼びます。これで音列を作ると、変化に乏しい退屈なものになってしまいます(必ず隣の音にしか移動しないメロディを想像してみてください)。
ホワイトノイズとブラウンノイズの間の、適度な規則性と意外性を持った数列があれば、面白い曲が出来るかもしれません。Chaos von Eschenbachでは、その代表的なものとしてマンデルブロー集合を使っています(「Function」で他の関数を使用する事もできます)。

初期状態で示される図形の、それぞれの色はある「高さ」を表わしていると考えてください。
図形をマウスでドラッグすると、線が引かれます。その線に沿った断面図の高さが、欲しい数列になります。「Compose」ボタンを押して、断面図を見てみましょう。この時、見やすくするために「Show Notes」チェックボックスは外してください。

さて、この数列には0〜200の値が入る可能性があります(「Iteration」の値に依存します)。このままでは使うことはできません。MIDIで扱う音の高さは128個しかありませんし、Chaos von Eschenbachは音階を定義して使う事ができますが、初期状態で選択されている「C Major」には18個しか音はありません。
そこで数列を音階に変換する作業が必要になります。これをここでは「マッピング」と呼びます。

「Note Assign」が「Wrap Around」の時は、「数値を音階の数で割った余り」で音階を割り当てます。簡単な例を挙げると、数値が0〜99の範囲で、音階が10個あったとします。音階にはそれぞれ0、1、2、3、...8、9と番号を振っておきます(0〜9で10個ですね。1〜10ではないですよ)。例えば数値の56は、56を10で割った余りは6なので、音階6に割り振られます。この例では、数値の一桁目がそのまま音階の番号になりますね。

「Note Assign」が「Compress」の時は数値を音階にむりやり「圧縮」します。さっきの例で言うと、0〜9は音階0、10〜19は音階1、...90〜99は音階9になります。こちらは図形の「高さ」と音の高さが一致するのですが(音階の定義によりますが)、聞いても面白みに欠ける場合が多いようです。

Chaos von Eschenbachにはもう一つ、「ダイナミック・アサイン」というマッピングの方法があります。
その前に「scale.cfg」ファイルによる音階の定義についてちょっと説明します。ファイルの最初の一行は将来のバージョンアップに備えた情報を書き込むので、編集しないでください。2行目以降は、音階の名前(スペースやカンマを含む場合は必ず二重引用符[”]で囲んでください)の後ろにカンマで区切ってMIDI のノート番号を列挙します。
この時、同じノート番号を複数個書いても構いません。前述のマッピングの説明を思い出してください。複数あるノート番号は、それだけマッピングされる確率が高くなります。このように、同じノートを複数記述してマッピングされる確率を上げる事を「重みを付ける」といいます。音階の「C Major(Weighten)」を選択してみてください。この音階ではド、ミ、ソの音に重みを付けています。
そこでダイナミック・アサインの話に戻りますが、数列の中で出現頻度が大きい、つまりたくさん出てくる数値を重みの高い音に割りつける方法です。
逆に、出現頻度が低い数値は重みの高い音と低い音両方に割りつけます。
この機能は、音階に重みが付けられている場合にだけ使用できます。
音階の「C Major(Weighten)」を選択して、それぞれのマッピングを試してみてください。

*「scale.cfg」ファイルの音階の定義では、ノート番号の後ろに「+」「-」を付けて音律の補正が出来ます。単位はセントで、ピッチベンドに置き換えられます。同じノート番号に別々のセント値が定義されているような音階の場合、ダイナミックアサインを使うと正常にマッピングできません。

休符

初期状態の図形を見てみましょう。真ん中にひょうたんか昆虫のような、灰色の部分があります(真ん中だけでなく、入り組んだ部分を拡大すると至る所に出てきます)。本来はこの部分をマンデルブロー集合と言うのですが、この部分は言わば未知の領域で、例えばIterationで200を指定した場合、201かもしれないし、10000かもしれない、ひょっとしたら無限大かもしれないのです。つまり計算結果がIterationを越えてしまった領域です。
コンポーズウィンドウでは、一番上の平らな部分に当たります。
「Over Itel Limit」で、この部分の取り扱いを設定できます。「Rest」では休符になり、「Note」では音符になります。ダイナミック・アサインを使用している場合は一番「重い」音になります。「Skip」にするとその部分は無かった事にします。

長さを決める

マンデルブロー集合による数列の特徴として、同じ数値が連続する場合がよくあります(これは断面図では平らな部分に当たります。マンデルブロー集合は「自己相似=フラクタル」な性質を持つので、いくら変化の激しい部分を拡大してもまた平らな部分が現れます)。その処理をどうするかが「Continuous No.」です。
「Slur」を選択すると、音符を繋げて1つの長い音にします。「Skip」を選択すると同じ数値は無視されます。つまり一つしか無かった事になります。「New Note」を選択すると、連続した一つ一つの数値がそれぞれ独立した音符になります。

「Slur」を選択すると、音符が不自然に長くなる場合があります。それをどうするかを「Over Limit」で指定します。
音符が「Length Limit」(MIDI のティックで指定します。120が四分音符に相当します)より長い場合に、「Shorten」を指定するとその長さに切り詰めます。「Divide」を指定すると、そこで分割して2つの音符にします。「Don't Care」だと、何もしません。

Chaos von Eschenbachでは、リズムパターンを選択できます。
リズムパターンは、「rhythm.cfg」ファイルに定義してあります。ファイルの最初の一行は将来のバージョンアップに備えた情報を書き込むので、編集しないでください。2行目以降は、リズムの名前(スペースやカンマを含む場合は必ず二重引用符[”]で囲んでください)の後ろにカンマで区切って音符の長さをティック値で列挙します。120が四分音符になります。
Chaos von Eschenbachは、このリズムを順番に音符に割り当てていき、最後まで来たらまた最初から割り当てます。
リズムパターンの一番簡単な形は「Simple 16th」に見られます。30という値が1個だけです。これで、16分音符が連続します。

多声化

Chaos von Eschenbachは、先程述べたようにユーザがマウスで指定した線に沿って数列を作っていますが、実はその線に平行に16本の線を引いてそれぞれ数列を作っています。これによって最大16のパートを一度に作成できるのです。
この線の間隔を決めるのがメインウィンドウの下の方のパネルの、dxとdyです。単位は表示している範囲に対するパーセントで指定します。値が大きければ大きいほどパートの間の違いが大きくなります。また、パートの数字が遠くなるほど違いが大きくなります。パート1と16が一番違う事になります。「Part Setup」で、色々なパートを選んで「Use Part」をチェックして、「Redraw」を押して確認して下さい。
「Radiational」を選ぶと、16のパートのスタート位置は同じで、最後に指定した分だけ離れます。つまり、最初は同じでだんだん違いが現われるようになります。「Convergence」は、その逆になります。


戻る


Copyright Mag. 1999