(57)【特許請求の範囲】
【請求項１】
（Ａ）複数のリズムを初期世代のリズム集団として与える初期リズム集団付与手段と、
（Ｂ）上記初期世代のリズム集団から開始して、処理対象である、ある世代のリズム集団から次の世代のリズム集団を生成する処理をくり返すリズム進化手段と、
（Ｃ）所定の終了条件が成り立つときに上記リズム進化手段の動作を停止する停止手段と、
を備え、上記リズム進化手段は、
（ｉ）上記初期世代のリズム集団から開始して、次世代のリズム集団を生成する毎に、これら処理対象のリズム集団の各リズムの波形の周波数成分を所定の評価関数に従って評価してリズム評価値を算出するリズム評価手段と、
（ii）上記リズム進化手段の動作が停止された時点の世代のリズム集団のリズム評価値の総和が、上記初期世代のリズム集団のリズム評価値の総和よりも高くなるように、処理対象のリズム集団に対して上記リズム評価値に基づく遺伝子的操作を行う遺伝子操作手段と、
から成る、
ことを特徴とするリズム合成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はコンピュータ等を用いた音楽装置に関し、特にリズムを自動的に合成（ｃｏｍｐｏｓｅ）するリズム合成装置に関する。
【０００２】
【従来の技術】
与えられたリズム（原リズム）を制御データを用いて変形するリズム合成装置は既に知られている。例えば、本件出願人に係る特開昭６３−２８６８８３号には、音楽区間の各タイムポイント（パルスポイント）に重み（音の発生頻度を表わす）を付けたパルススケールを用いて、音符の連結、分割を行うリズム合成装置が開示されている。音符の連結、分割のロジックは、例えば、連結の場合には、最も重みの小さいパルスポイントで始まる音符を先行の音符と連結し、分割の場合には最も重みの大きいパルスポイントを途中に含む音符をそのパルスポイントの位置で２つの音符に分割する、といった具合である。
【０００３】
【発明が解決しようとする課題】
しかしながら、従来のリズム合成装置は、制御データ（パルススケール）と制御ロジック（音符の連結、分割ロジック）が決まってしまえば、与えられたリズムを確定的な方法で変形するため、リズムの変形に限界があった。
したがってこの発明の目的は、従来にはない新規なアプローチによりリズムを合成するリズム合成装置を提供することである。
更に、この発明の目的は、リズムが確率的プロセスを経ながら所望のリズム評価値をもつようなリズムへと進化していくような方法でリズムを合成するリズム合成装置を提供することである。
【０００４】
【課題を解決するための手段】
上記の目的を達成するため、この発明によれば、（Ａ）複数のリズムを初期世代のリズム集団として与える初期リズム集団付与手段と、（Ｂ）上記初期世代のリズム集団から開始して、処理対象である、ある世代のリズム集団から次の世代のリズム集団を生成する処理をくり返すリズム進化手段と、（Ｃ）所定の終了条件が成り立つときに上記リズム進化手段の動作を停止する停止手段と、を備え、上記リズム進化手段は、（ｉ）上記初期世代のリズム集団から開始して、次世代のリズム集団を生成する毎に、これら処理対象のリズム集団の各リズムの波形の周波数成分を所定の評価関数に従って評価してリズム評価値を算出するリズム評価手段と、（ii）上記リズム進化手段の動作が停止された時点の世代のリズム集団のリズム評価値の総和が、上記初期世代のリズム集団のリズム評価値の総和よりも高くなるように、処理対象のリズム集団に対して上記リズム評価値に基づく遺伝子的操作を行う遺伝子操作手段と、から成る、ことを特徴とするリズム合成装置が提供される。
この構成によれば、ある世代のリズム集団に対して遺伝子的操作（選択交配、突然変異等）を行い、かつ遺伝子的操作を繰り返した結果の世代のリズム集団のリズム評価値が初期世代のリズム集団のリズム評価値よりも高くなるようにしているので、所望のリズム評価値をもつようなリズムを容易に得ることができる。また、リズム集団に対して行う遺伝子的操作は確定的プロセスではなく確率的過程であるので広いリズム合成空間を与えることができる。
【０００５】
【発明の実施の形態】
以下、図面を参照してこの発明の実施の形態を説明する。
図１はこの発明のリズム合成装置のハードウェア構成である。ＣＰＵ１にてシステム制御とリズム合成処理等を行う。ＲＯＭ２はプログラムと固定データを記憶する。ＲＡＭ３は入力データと処理データのメモリとして使用される。入力装置４はリズム合成に必要なパラメータを入力するのに使用される。モニター５はリズム合成の処理結果の表示や入力の補助として使用される。
【０００６】
図２にリズム合成装置の全体動作を表わすメインフローを示す。Ａ１でシステムを初期化した後、定期的に入力装置４のキースキャンＡ２を行ってユーザーの指示に従った処理を行う。即ち、入力指示Ａ３に対しては入力処理Ａ４を行い、合成指示Ａ５に対しては合成処理Ａ６を行い、モニター指示Ａ７に対してはモニター処理Ａ８を行う。
【０００７】
図３にリズム集団のデータ構造を示す。リズム集団の全体は複数のリズム（パターン）から成り、各パターンは、複数のリズムライン（ライン）から成り、各ラインは、各タイミング（ビートポイント）ごとにパーカッション番号と演奏強度（音の大きさ）の情報をもつデータ配列（つまり、パーカッション番号と演奏強度とタイミング情報とをセットにして時間軸上に並べたデータ配列）で表現される。リズム集団のパターンの数（リズムの数）をＮＰＡＴ、各パターンのライン数をＮＬＩＮＥ、各ラインのタイミング（ビートポイント）数をＮＢＥＡＴ、として示す。図３のデータ構造のリズム集団メモリの場合、あるパターン（ｐａｔ）のあるライン（ｌｉｎｅ）のあるビートポイント（ｂｅａｔ）は、ｐａｔ×ＮＬＩＮＥ×ＮＢＥＡＴ＋ｌｉｎｅ×ＮＢＥＡＴ＋ｂｅａｔのアドレスでアドレス指定される。このビートポイントにおけるデータ（パーカッション番号と演奏強度）は、ｄａｔ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］として示すことにする。
【０００８】
図４にリズム合成処理のフローチャートを示す。
まず初期世代のリズム集団を与える。この初期世代のリズム集団はユーザーから与えてもよいし、あるいはあらかじめ記憶してあるものであってもよい。
次に各リズムを評価してリズム評価値を算出する（Ｂ２）。リズム評価Ｂ２の詳細は後述する。
次にリズム集団に対して終了条件を検査し（Ｂ３）、終了条件を満たさなければリズム変形処理Ｂ４でリズム集団に対し遺伝的操作を行って次の世代のリズム集団を生成する。
Ｂ３での終了条件のチェックとしては、Ｂ４の処理を所定回数を行ったかどうかのチェック、あるいは、処理対象のリズム集団のリズム評価値が所定値を超えたかどうかの判定により行える。
【０００９】
リズム変形処理Ｂ４（遺伝的操作）について以下詳述する。
図５はリズム変形処理Ｂ４の一部であるリズムの一部交換（リズム交配）のフローチャートである。このリズムの一部交換処理では、処理対象のリズム集団から、パターン（リズム）を２つずつ選び出し、対応するリズムライン間で参照番号１００に示すように、その内容を一部交換（クロスオーバー）する。なお、図では２点クロスオーバーとなっているが、これには限られない。
まず、パターンの対をつくるために、参照元フラグｐａｉｒ−ｆｌａｇ［  ］を“０”に初期化し（Ｃ１）、参照先ｐａｉｒ［ｐａｔ］をランダムに決定し（Ｃ２）、その都度、重復を避けるために参照元フラグをオンにする。リズム集団のコピーをバッファｂｕｆ［  ］［  ］［  ］にとり（Ｃ３）、クロスオーバーＣ４を実行して、各パターン対について２点クロスオーバーを実行する。
【００１０】
図６は参照先決定Ｃ２の詳細フローである。
まずｐａｔと対に参加したパターン数のカウンタｃとを“０”に初期化し（Ｐ１）、ｐａｉｒ−ｆｌａｇ［ｐａｔ］を“１”にオンする。次に０〜ＮＰＡＴ−Ｃ−１の範囲で乱数ＲＮＤ（整数値）を発生し、ペアになっていないパターン（ｐａｉｒ−ｆｌａｇ［  ］が“０”になっているパターン）のなかでＲＮＤに対応するパターンを見つけ出し、ｐａｔに対して対とすべき参照先のパターンｐａｉｒ［ｐａｔ］を決め、そのフラグをオンにする（Ｄ３〜Ｄ９）。１つの対がきまったのでカウンタｃを２インクリメントしてＮＰＡＴに達したかどうかチェックする（Ｄ１０、Ｄ１１）。達してなければ、まだ決定すべき対が残っているので、対の片方（参照元）となるパターンｐａｔを決め（Ｄ１２、Ｄ１３）、Ｄ２に戻る。
【００１１】
図７はクロスオーバーＣ４の詳細フローである。
まずｐａｔとカウンタｃ（ここではクロスオーバーを実行したパターンのカウンタ）を“０”に初期化する（Ｅ１）。０〜ＮＢＥＡＴ−１の範囲で２つの異なる乱数ＲＮＤ１、ＲＮＤ２を生成し、小さい方を交配のスタート位置ＳＴＡＲＴ、大きい方を交配のエンド位置ＥＮＤとしてきめる（Ｅ２〜Ｅ４）。
ラインポインタｌｉｎｅを初期化し、各ラインｌｉｎｅについて、スタート位置ＳＴＡＲＴからエンド位置ＥＮＤまでの間で、参照元パターンのラインのリズムデータと参照先パターンのラインのリズムデータとをバッファを用いて交換する（Ｅ５〜Ｅ１１）。
【００１２】
ｌｉｎｅがＮＬＩＮＥに達すれば（Ｅ６）、１つのパターン対についてリズムの２点クロスオーバーが完了したことになるので、このパターン対のフラグをオフ“０”にし（Ｅ１２）、カウンタｃを２インクリメントし、全部実行したかどうかを見て（Ｅ１３、Ｅ１４）、クロスオーバーを実行していないパターン対が残っていれば、次の参照元パターンｐａｔを選び（Ｅ１５、Ｅ１６）、Ｅ２に戻る。
【００１３】
図８は、リズム変形処理Ｂ４（遺伝的操作）のなかで行われるリズムの取捨選択処理２０のフローチャートである。このリズムの取捨選択処理２０はリズム交配（例えば、図５のリズムの一部交換処理１０）の後に行うのが好ましいが、遺伝的操作Ｂ４の任意の段階で行ってもよい。以下では、リズム交配の後に、この取捨選択処理２０を行うとして説明する。
この場合、リズム交配によって得られたリズム集団の各リズムのリズム評価値を算出する（Ｆ１）。
そして、リズム集団を形成する複数のリズム（パターン）のなかで評価値が最大のリズム（パターン）と最小のリズム（パターン）とを求め（Ｆ２、Ｆ３）、評価値が最小のリズム（パターン）を最大のリズム（パターン）に置き換える（Ｆ４）。
なお、最大、最小には限らず、評価値が高いリズムと低いリズムをそれぞれ複数選び（例えば、第１から第Ｎ番目までの高いリズムと第１から第Ｎ番目までの低いリズムを選び）、低いリズムのデータを高いリズムのデータで置き換えるようにしてもよい。
【００１４】
リズムの取捨選択処理２０を遺伝的操作Ｂ４のなかに組み込むことにより、後世代のリズム集団ではリズム評価値の低いリズムの数が減り、リズム評価値の高いリズムの数が増えるので、遺伝的操作Ｂ４を繰り返すにつれ、リズム集団のリズム評価値を全体として高めていくことができる。
上述したリズムの一部交換１０では、処理対象のリズム集団のどのリズム（パターン）も等しく選択されてクロスオーバーに参加した（交配のために使用された）。
この代りに、あるいはこれと組み合わせて、交配のために選択されるリズム（パターン）がリズムの評価値に依存するような方式が考えられる。例えば、処理対象のリズム集団のリズムのなかでリズム評価値の高いものほど交配（クロスオーバー）のために使用される頻度が高くなるように制御する。
【００１５】
この例を図９に評価値による対決定３０として示す。
まず、各リズム（パターン）のリズム評価値ｖａｌ［ｐａｔ］を取り込み（Ｇ１）、その総和を算出して、リズム集団の評価値Ｖとする（Ｇ２）。そして、対を決定したパターンのカウンタｃを“０”に初期化する（Ｇ３）。
この後、Ｇ４で０〜Ｖの範囲で２つの乱数ＲＮＤ１、ＲＮＤ２（例えば実数値）を発生させ、ＲＮＤ１からパターンｐａｔを決めてそれを対の一方ｍｍａｔｅ［ｃ］とし（Ｇ５、Ｇ６）、ＲＮＤ２からパターンｐａｔを決めてそれを対の他方ｆｍａｔｅ［ｃ］とする（Ｇ７、Ｇ８）。
【００１６】
乱数ＲＮＤ１（またはＲＮＤ２）からパターンｐａｔを決める処理Ｇ５、Ｇ７の詳細は図１０に示す通りである。まず、ＲＮＤ１またはＲＮＤ２をｒｎｄに代入し（Ｈ１）、パターンポインタｐａｔとＶｏｌｄを“０”に初期化する（Ｈ２、Ｈ３）。Ｈ４で、
Ｖｎｅｗ＝Ｖｏｌｄ＋ｖａｌ［ｐａｔ］
により、Ｖｎｅｗを求め、乱数ｒｎｄがＶｏｌｄとＶｎｅｗの間に入っているかどうか、即ち、
Ｖｏｌｄ≦ｒｎｄ＜Ｖｎｅｗ
かどうかをチェックし（Ｈ５）、入っていれば、Ｇ６またはＧ８へリターンし、入ってなければＶｏｌｄをＶｎｅｗに代入し（Ｈ６）、パターンポインタｐａｔをインクリメントして（Ｈ７）Ｈ４へ戻る。
【００１７】
これにより、
【数１】
0003658977.tif 000002
が成立するときのパターンポインタｐａｔが乱数から求まる。
【００１８】
図９に戻り、Ｇ９で対決定パターンカウンタｃを２インクリメントし、また決定（選択）すべき対が残っているかどうかチェックし（Ｇ１０）、残っておればＧ４へリターンする。
したがって、評価値による対決定処理３０によれば、リズム集団のなかの各リズム（パターン）はそのリズム評価値ｖａｌ［ｐａｔ］に応じた頻度で対に（ｍｍａｔｅ［  ］またはｆｍａｔｅ［  ］として）参加することになる。
【００１９】
図１１は、評価値による対決定処理３０の後実行されるクロスオーバー（交配）４０のフローチャートである（ただし前処理として、図５のＣ３で行ったように各リズムパターンのコピーをバッファにとっておく）。
まずｐａｔとｃを“０”に初期化する（Ｉ１）。
０〜ＮＢＥＡＴ−１の範囲で２つの異なる乱数ＲＮＤ１、ＲＮＤ２（整数値）を発生させ、小さい方を交配の開始位置ＳＴＡＲＴ、大きい方を交配の終了位置ＥＮＤとする（Ｉ２〜Ｉ４）。
Ｉ５〜Ｉ１６において、リズムパターン対であるｍｍａｔｅ［ｃ］とｆｍａｔｅ［ｃ］との間で、各ラインについて開始位置ＳＴＡＲＴから終了位置ＥＮＤまでのビートポイント領域（タイミング区間）でリズムデータの交換（交配）を行って、交配の結果をｄａｔｅ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］とｄａｔａ［ｐａｔ＋１］［ｌｉｎｅ］［ｂｅａｔ］として格納している。
【００２０】
詳細には、ビートポイントｂｅａｔが
０≦ｂｅａｔ＜ＳＴＡＲＴ，
または
ＥＮＤ＜ｂｅａｔ≦ＮＢＥＡＴ−１
のときは、
ｄａｔａ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］＝ｂｕｆ［ｍｍａｔｅ［ｃ］］［ｌｉｎｅ］［ｂｅａｔ］
ｄａｔａ［ｐａｔ＋１］［ｌｉｎｅ］［ｂｅａｔ］＝ｂｕｆ［ｆｍａｔｅ［ｃ］］［ｌｉｎｅ］［ｂｅａｔ］
により、バッファ上から、パターンｍｍａｔｅ［ｃ］、ラインｌｉｎｅ、ビートポイントｂｅａｔにあるデータをリズム集団メモリのパターンｐａｔ、ラインｌｉｎｅ、ビートポイントｂｅａｔのデータｄａｔａ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］として取り込み、バッファ上からパターンｆｍａｔｅ［ｃ］、ラインｌｉｎｅ、ビートポイントｂｅａｔにあるデータをリズム集団メモリのパターン（ｐａｔ＋１）、ラインｌｉｎｅ、ビートポイントｂｅａｔのデータｄａｔａ［ｐａｔ＋１］［ｌｉｎｅ］［ｂｅａｔ］として取り込む（Ｉ７〜Ｉ１０、Ｉ１３〜Ｉ１５）。
【００２１】
一方、ビートポイントｂｅａｔが、
ＳＴＡＲＴ≦ｂｅａｔ≦ＥＮＤ
のときは、
ｄａｔａ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］＝ｂｕｆ［ｆｍａｔｅ［ｃ］］［ｌｉｎｅ］［ｂｅａｔ］
ｄａｔａ［ｐａｔ＋１］［ｌｉｎｅ］［ｂｅａｔ］＝ｂｕｆ［ｍｍａｔｅ［ｃ］］［ｌｉｎｅ］［ｂｅａｔ］
により、データｄａｔａ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］の取込先（ソース）をｍｍａｔｅ［ｃ］からではなくｆｍａｔｅ［ｃ］から取り込み、データ［ｐａｔ＋１］［ｌｉｎｅ］［ｂｅａｔ］の取込先をｆｍａｔｅ［ｃ］からではなくｍｍａｔｅ［ｃ］から取り込むことにより、リズムデータのクロスオーバーを実行している。
【００２２】
親のリズムパターン対ｍｍａｔｅ［ｃ］とｆｍａｔｅ［ｃ］との間でのクロスオーバーが完了すると（１対の子のリズムパターンが生成されると）ｌｉｎｅ＝ＮＬＩＮＥとなるので（Ｉ６）、ｃとｐａｔを２インクリメントし（Ｉ１７）、全ての対についてクロスオーバーが完了した（ｃ＝ＮＰＡＴ）かどうか調べ（Ｉ１８）、残っておればＩ２にリターンする。
このように、評価値に比例する対決定（選択）処理３０と、対間でのリズムのクロスオーバー４０を実行することにより、子世代のリズム集団には、親世代のリズム集団のなかでリズム評価値の高いリズムほどその遺伝子（リズム要素）が広く伝搬するので、子世代あるいは後世代のリズム集団のリズム評価値は高くなっていく。
【００２３】
図１２は遺伝的操作であるリズム変形処理Ｂ４のなかで行われるリズム突然変異５０のフローチャートである。リズム突然変異５０はリズム変形処理Ｂ４のなかの任意の段階で行うことができる。
リズム突然変異５０では、各リズムパターンの各ラインの各ビートポイントのデータを確率的に変化させている。特に、図の例では、ビートポイントにおけるデータ（パーカッション番号と演奏強度）のうち、演奏強度の方のみ確率的に変化させている。
【００２４】
まず、パターンポイントｐａｔを“０”に初期化し（Ｊ１）、ｐａｔがＮＰＡＴに達するまで（Ｊ２）、Ｊ２〜Ｊ１４のループ処理を行う。Ｊ３でラインポイントｌｉｎｅを“０”に初期化しｌｉｎｅがＮＬＩＮＥに達するまで（Ｊ４）、ループ処理Ｊ４〜Ｊ１３を行い、ｌｉｎｅ＝ＮＬＩＮＥになればパターンポイントｐａｔを次に進める（Ｊ１４）。Ｊ５でビートポインタｂｅａｔを“０”に初期化し、ｂｅａｒがＮＢＥＡＴになるまで（Ｊ６）、内ループ処理Ｊ６〜Ｊ１２を行い、ＮＢＥＡＴに達すればラインｌｉｎｅを次に進める（Ｊ１３）。
【００２５】
Ｊ７〜Ｊ１１がタイミング（ビートポイント）ｂｅａｔにおけるリズム内容の突然変異処理２００である。Ａにｄａｔａ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］のパーカッション番号をセーブし、乱数ＲＮＤ（例えば０〜１の実数値）を生成する（Ｊ７、Ｊ８）。乱数ＲＮＤが所定の確率データ値（しきい値）ＲＥＦ以下なら（Ｊ９）なにもしないが、ＲＥＦを超えていれば、０〜最大演奏強度ＭＡＸの間で乱数ＲＡＮＤ（例えば整数値）を発生させ（Ｊ１０）、Ａをパーカッション番号、ＲＡＮＤを演奏強度としてｄａｔａ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］にセットする（Ｊ１１）。
ビートポイントｂｅａｔでの突然変異処理２００の後、ビートポイントを次に進め（Ｊ１２）、Ｊ６へ戻る。
【００２６】
以下、リズム評価について説明する。
図１３は、リズム集団の各リズム（パターン）ｐａｔを所定の評価関数に従って評価してリズム評価値ｖａｌｕｅ［ｐａｔ］を算出するリズム評価処理６０のフローチャートである。この処理ルーチン６０は、図４のＢ２や、図８のＦ１で呼び出されて実行される。
Ｋ１〜Ｋ５は図１２のＪ１〜Ｊ５に相当する処理（各ポインタの初期化とポインタのチェック）である。
Ｋ６でｂｅａｔ＜ＮＢＥＡＴが成立するときは、その時点でのリズム（パターン）ポインタｐａｔ、ラインポインタｌｉｎｅ、ビートポインタｂａｅｔによって特定されるリズムデータ（パーカッション番号と演奏強度）ｄａｔ［ｐａｔ］［ｌｉｎｅ］［ｂａｅｔ］がロケートされている。
【００２７】
そこで、ｂｅａｔ＝０〜ＮＢＥＡＴ−１までの間は、
ｗａｖｅ［ｂｅａｔ×２］＝ｄａｔ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］の演奏強度
ｗａｖｅ［ｂｅａｔ×２＋１］＝０
として、演奏強度の時系列を表わす波形データを生成する（Ｋ７、Ｋ８）。
波形データの配列ｗａｖｅ［  ］は、モニター５で表示可能としているため、演奏強度のサンプル点間に“０”（ｗａｖｅ［ｂｅａｔ×２＋１］＝０）を挿入している。
１ライン分の波形データが出来上ると、ｂｅａｔ＝ＮＢＥＡＴとなるのでリズムラインのリズム評価を行う。
【００２８】
このために、図の例では、まず周波数分析Ｋ９を行う。
周波数分析Ｋ９のフローを図１４にＬ１〜Ｌ１２で示す。このフローによれば、次数ｉのスペクトルｓｐｅｃ［ｉ］は、
【数２】
0003658977.tif 000003
で与えられる。
この代りに、通常のＤＦＴ（離散フーリエ変換）でもよいが、ここでは、ＤＦＴの各係数のパワーに方形波のフーリエ係数をかけあわせることにより、各サンプル（ｗａｖｅ［  ］）をホールド補間した波形の周波数成分ｓｐｅｃ［ｉ］を得ている。
【００２９】
図１３（リズム評価のフロー）に戻り、Ｋ１０で現リズムラインのリズム評価値を算出する。具体的実施形態では、この評価値算出処理Ｋ１０として、（１）スペクトル評価値の算出、（２）位相評価値の算出、（３）スペクトル評価値と位相評価値との和（組み合わせた値）の算出、のいずれかを行っている。いずれを選択するかは、入力装置４から指示できる。
スペクトル評価値の算出フローを図１５に参照番号７０として示す。スペクトル評価値の算出処理では図１４で示したようなスペクトルの分析の結果（スペクトルデータｓｐｅｃ［  ］）を用いてリズムラインの周波数成分についてのリズム評価値を算出する。
【００３０】
このスペクトル評価値算出処理７０のＭ１〜Ｍ５のフロー中に示すｐｏｉｎｔｓ［ｌｉｎｅ］［ｉ］とｍｐｏｉｎｔｓ［ｌｉｎｅ］［ｉ］は、評価の条件パラメータであり、この評価の条件が入力装置４より設定入力される（入力処理Ａ４の実行により）。ｐｏｉｎｔｓ［ｌｉｎｅ］［ｉ］は各ｌｉｎｅについて、評価値に加算するスペクトルの番号（次数）を重復可能に指定し、ｍｐｏｉｎｔｓ［ｌｉｎｅ］［ｉ］は各ｌｉｎｅについて評価値から減算するスペクトルの番号を重復可能に指定する。例えばｌｉｎｅ＝０に対しては、次数１６と８と１６のスペクトルが評価値に加算されるよう指定し、次数２と４と１のスペクトルが評価値から減算されるように指定する。ｌｉｎｅ＝０でないライン（例えばｌｉｎｅ＝１）に対してはこれとは異なる指定が可能である。
【００３１】
条件パラメータｐｏｉｎｔｓ［  ］［  ］、ｍｐｏｉｎｔｓ［  ］［  ］を用いると、あるラインのスペクトル評価値ｖａｌは、
【数３】
0003658977.tif 000004
の評価関数で表わすことができる。ここにｓｐｅｃ［ｉ］は次数ｉのスペクトル、ｃ［ｉ］は係数（次数ｉごとの重み係数で正、負または０）である。ｐｏｉｎｔｓ［  ］［  ］とｍｐｏｉｎｔｓ［  ］［  ］の条件パラメータはｃ［ｉ］の値を定めるものである。
【００３２】
図１５のスペクトル評価値算出処理７０の動作例を図１６に示す。ここではリズム（パターン）はライン０（ｌｉｎｅ＝０）とライン１（ｌｉｎｅ＝１）の２のラインから成るとし、ｌｉｎｅ＝０に対しては、そのスペクトル評価関数ｖａｌ０を、
ｖａｌ０＝ｓｐｅｃ［１６］＋ｓｐｅｃ［８］＋ｓｐｅｃ［１６］−ｓｐｅｃ［１］−ｓｐｅｃ［２］−ｓｐｅｃ［４］
で定め、ｌｉｎｅ＝１に対してはそのスペクトル評価関数ｖａｌ１を、
ｖａｌ１＝ｓｐｅｃ［２］＋ｓｐｅｃ［４］＋ｓｐｅｃ［１］−ｓｐｅｃ［１６］−ｓｐｅｃ［８］−ｓｐｅｃ［１６］
として、ｌｉｎｅ＝０とは対照的に指定している。
（ｖａｌ０＋ｖａｌ１）の値がライン０（データｄａｔ［０］［０］［  ］）とライン１（データｄａｔ［０］［１］［  ］）から成るリズム（パターン０）のスペクトルについてのリズム評価値を示している。
【００３３】
図１６の例において、リズムライン０は、パーカッション番号２ａ（１６進表記）が示すパーカッション楽器（または音色）のリズムラインを表わし、リズムライン１はパーカッション番号２４（１６進）とパーカッション番号２８（１６進）のパーカション楽器（または音色）によるリズムラインを表わしている。図１６において、ｄａｔ［  ］［  ］［  ］以外の項（ｗａｖｅ［  ］、ｓｐｅｃ［  ］、ｖａｌ０、ｖａｌ１等）は１０進で表記してある。
【００３４】
リズムラインの位相成分に関するリズム評価値（位相評価値）を算出する処理のフローを図１７に参照番号８０として示す。また、図１８に動作例を示す。
この位相評価値算出処理８０のフローＮ１〜Ｎ８中に示すｐｈａｓｅ−ｐａｔ［  ］、ｐｈａｓｅ［ｉ］、ｍｐｈａｓｅ［ｉ］及びｐｈａｓｅ−ｒａｔｅは評価の条件パラメータであり、この評価の条件は入力装置４により設定入力される（入力装置Ａ４の実行により）。
ｐｈａｓｅ−ｐａｔ［  ］は位相パターンであり、処理対象のリズムと例えば同じ長さ（同じビートポイント数）をもち、各ビートポイントに重みデータをもつ構成となっている（図１８参照）。
【００３５】
ステップＮ５に示す式からわかるように、
ｐｈａｓｅ−ｐａｔ［（ｂｅａｔ＋ｐｈａｓｅ［ｉ］）ｍｏｄ  ＮＢＥＡＴ］×ｄａｔ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］の演奏強度×ｐｈａｓｅ−ｒａｔｅ
の項が評価値ｖａｌに加算される。
一方、ステップＮ６に示すように、
ｐｈａｓｅ−ｐａｔ［（ｂｅａｔ＋ｍｐｈａｓｅ［ｉ］）ｍｏｄ  ＮＢＥＡＴ］×ｄａｔ［ｐａｔ］［ｌｉｎｅ］［ｂｅａｔ］の演奏強度×ｐｈａｓｅ−ｒａｔｅ
の項が評価値ｖａｌから減算される。
【００３６】
したがって、ｐｈａｓｅ［ｉ］はリズムデータｄａｔ［  ］［  ］［ｂｅａｔ］と位相パターンｐｈａｓｅ−ｐａｔ［  ］とをマッチングする際に、位相パターンｐｈａｓｅ−ｐａｔ［  ］のどの位置（位相）をリズムラインｄａｔ［  ］［ｌｉｎｅ］［ｂｅａｔ］の先頭と合わせるべきかを示す位相パラメータである。例えばｐｈａｓｅ［０］＝０なら、ｉ＝０のときは、位相パターンｐｈａｓｅ−ｐａｔ［  ］の先頭（位置０）をリズムラインの先頭（ｂｅａｔ＝０）に合わせてマッチングをとり、ｐｈａｓｅ［１］＝８に設定したときは、ｉ＝１については、位相パターンｐｈａｓｅ−ｐａｔ［  ］の位置８をリズムラインの先頭と合わせてマッチングをとることになる。
ｍｐｈａｓｅ［ｉ］もｐｈａｓｅ［ｉ］と同様に、位相パターンとマッチングすべきリズムラインの位置（位相）を設定するパラメータである。ただし、ｐｈａｓｅ［ｉ］の方は評価値に加算すべき項（マッチングの度合）を求めるときの位相パラメータであるのに対し、ｍｐｈａｓｅ［ｉ］の方は評価値から減算すべき項を求めるときに使用する位相パラメータである。
【００３７】
図１８の例では、ＮＰＯＩＮＴＳ＝２でｍｐｈａｓｅ［０］＝１、ｍｐｈａｓｅ［１］＝５となっている。ｐｈａｓｅ［  ］の方は上で示した通りである。
なおｐｈａｓｅ−ｒａｔｅは比率パラメータであり、図１８の例ではｐｈａｓｅ−ｒａｔｅ＝０．２にしている。
図１７のフローによれば、位相評価値ｖａｌは、
【数４】
0003658977.tif 000005
で与えられる。
【００３８】
したがって、位相評価値算出処理８０は、設定された条件パラメータとリズムの内容ｄａｔ［  ］［  ］［  ］とを用いて、リズムの位相に関する評価値を算出していることになる。
図１８の例では、リズムライン０（ｄａｔ［０］［０］［  ］）に対する位相評価値ｖａｌ０は１４３、リズムライン１（ｄａｔ［０］［１］［  ］）に対する位相評価値ｖａｌ１は−１１で、このライン０と１から成るパターン０の位相評価値ｖａｌは１３１（小数点以下は丸め）となった。
図１３のリズム評価処理６０のフローに戻り、評価値算出Ｋ１０では、上で述べたようにして、リズムラインのリズム評価値を算出する。
【００３９】
Ｋ１１でラインポインタｌｉｎｅをインクリメントし、ｌｉｎｅ＝ＮＬＩＮＥになるまで、すべてのリズムラインについてリズム評価値を求める。ｌｉｎｅ＝ＮＬＩＮＥになったら、Ｋ１２でリズムパターンｐａｔのリズム評価値を各リズムラインの評価値の総和として求める。Ｋ１３でパターンポインタｐａｔをインクリメントし、Ｋ２に戻り、すべてのリズム（パターン）のリズム評価値を算出するまで処理を繰り返す。
【００４０】
評価値算出でスペクトル評価７０と位相評価８０の両方を実行するときには、スペクトル評価値をｓｖａｌ、位相評価値をｐｖａｌとして、
ｖａｌ＝ｓｖａｌ＋ｐｖａｌ
をリズムラインのリズム評価値として求める。
そして、リズム（パターン）のリズム評価値ｖａｌ［ｐａｔ］は各ラインのリズム評価値をｖａｌ［ｌｉｎｅ］と記すと、その総和で与えられる。
【数５】
0003658977.tif 000006
【００４１】
最後に、特定の遺伝的操作（図５、図１２の処理を含む）を行った場合のリズム集団のリズム評価値の世代ごとの変化の例（この例ではリズム集団のリズムの数は８でリズムごとのライン数２のものを用いた）を示す。
第１世代のリズム集団のリズム評価値＝２１７．８９
第２              〃              ＝２６８．７１
第３              〃              ＝２６２．０５
第４              〃              ＝３２８．１４
第５              〃              ＝３５６．６５
第６              〃              ＝３２２．４５
第７              〃              ＝３８３．５９
第８              〃              ＝３５９．６１
第９              〃              ＝３７６．４４
第１０            〃              ＝４３７．１０
この例のように、リズム集団のリズム評価値（各リズムの評価値の総和または平均値で与えられる）は、世代が進むにつれ、局部的には減少することもあるが全体としては高くなっていくことが認められた。
以上で実施の形態の説明を終えるがこの発明の範囲内で種々の変形が容易である。
例えば、リズム評価についての上記条件パラメータは一例にすぎない。また、周波数成分（スペクトル）についてのリズム評価と位相成分についてのリズム評価について述べたが他の成分についてのリズム評価も可能である。
【００４２】
この発明によれば、ある世代のリズム集団に対して遺伝子的操作（選択交配、突然変異等）を行い、かつ遺伝子的操作を繰り返した結果の世代のリズム集団のリズム評価値が初期世代のリズム集団のリズム評価値よりも高くなるようにしているので、所望のリズム評価値をもつようなリズムを容易に得ることができる。また、リズム集団に対して行う遺伝子的操作は確定的プロセスではなく確率的過程であるので広いリズム合成空間を与えることができる。
【図面の簡単な説明】
【図１】この発明によるリズム合成装置のハードウエア構成例を示すブロック図。
【図２】本リズム合成装置の全体動作を表わすメインのフローチャート。
【図３】リズム集団のデータ構造を示す図。
【図４】遺伝的操作を含むリズム合成のフローチャート。
【図５】遺伝的操作の一部であるリズムの一部交換のフローチャート。
【図６】参照先を決定する処理のフローチャート。
【図７】クロスオーバーのフローチャート。
【図８】遺伝的操作の一部であるリズムの取捨選択のフローチャート。
【図９】リズム評価値に応じた対決定を行う処理のフローチャート。
【図１０】乱数からパターン（リズム）を決定（選択）する処理のフローチャート。
【図１１】クロスオーバーのフローチャート。
【図１２】遺伝的操作の一部であるリズム突然変異のフローチャート。
【図１３】リズム集団の各リズムの評価する処理のフローチャート。
【図１４】周波数分析のフローチャート。
【図１５】リズムのスペクトル評価値算出のフローチャート。
【図１６】リズムのスペクトル評価値算出の動作例を示す図。
【図１７】リズムの位相評価値算出のフローチャート。
【図１８】リズムの位相評価値算出の動作例を示す図。
【符号の説明】
１  ＣＰＵ
２  ＲＯＭ
４  入力装置
Ａ６  リズム合成処理
Ｂ４  リズム変形（遺伝的操作）
１０  リズムの一部交換
５０  リズム突然変異
６０  リズム評価
【図１】
0003658977.tif 000007
【図２】
0003658977.tif 000008
【図３】
0003658977.tif 000009
【図４】
0003658977.tif 000010
【図５】
0003658977.tif 000011
【図６】
0003658977.tif 000012
【図７】
0003658977.tif 000013
【図８】
0003658977.tif 000014
【図９】
0003658977.tif 000015
【図１０】
0003658977.tif 000016
【図１１】
0003658977.tif 000017
【図１２】
0003658977.tif 000018
【図１３】
0003658977.tif 000019
【図１４】
0003658977.tif 000020
【図１５】
0003658977.tif 000021
【図１６】
0003658977.tif 000022
【図１７】
0003658977.tif 000023
【図１８】
0003658977.tif 000024