(57)【要約】【課題】入力コードの切り替りで不自然な伴奏音の発生を防ぐ伴奏生成装置および伴奏生成方法を実現する。【解決手段】入力コードのタイプｃｔｙｐｅに応じて、その入力コードに対応する伴奏パターン中の音高ｐｉｔｃｈと当該入力コードのルートｃｒｏｏｔとの差（半音数）により定まるピッチ補正値ｐｃｔａｂを読み出すピッチチェンジテーブルＰＣＴを用い、コード進行データＣＰＤに従って入力されるコードｃｈｏｒｄのタイプｃｔｙｐｅに対応して、そのコードｃｈｏｒｄのルートｃｒｏｏｔを根音とするコード構成音になるよう伴奏パターン中の各音符データの音高ｐｉｔｃｈをシフトさせるので、入力コードの切り替りで不自然な伴奏音の発生を防ぐことが可能になる。【選択図】　図６
2004069936.tif 000002
【特許請求の範囲】
【請求項１】
入力されるコードに応じて、伴奏パターンを構成する伴奏音の音高を変換する伴奏生成装置において、
前記伴奏パターンの各伴奏音に対応するコードを検出する検出手段と、
前記伴奏音の音高に近接する前記検出コードの構成音あるいはコードスケール音の音高になるよう前記伴奏音の音高を変換する音高変換手段と、
を具備することを特徴とする伴奏生成装置。
【請求項２】
前記音高変換手段は、前記検出コードのルートと前記伴奏音の音名との音程および前記検出コードのタイプに応じて音高補正値を発生させ、この音高補正値により前記伴奏音の音高をシフトさせて変換する、
ことを特徴とする請求項１記載の伴奏生成装置。
【請求項３】
入力されるコードに応じて、伴奏パターンを構成する伴奏音の音高を変換する伴奏生成装置において、
前記伴奏パターンの各伴奏音に対応するコードを検出する検出手段と、
前記伴奏音の音名と前記検出コードのルートとの音程および前記検出コードのタイプに応じた音高補正値を発生し、この音高補正値に基づいて前記伴奏音の音高をシフトさせて変換する音高変換手段と、
を具備することを特徴とする伴奏生成装置。
【請求項４】
前記音高変換手段は、所定タイミング毎にゼロリセットするまで、前記音高補正値を順次累算し、この累算された音高補正値により前記各伴奏音の音高をシフトさせて変換する、
ことを特徴とする請求項３記載の伴奏生成装置。
【請求項５】
前記伴奏パターンを構成する伴奏音の発音タイミングに対するオフセット値を設定可能なオフセット設定手段を更に有し、
前記検出手段は、前記伴奏パターンの各伴奏音の発音タイミングに前記オフセット値を加算したタイミングに基づいて対応するコードを検出する、
ことを特徴とする請求項１または請求項３記載の伴奏生成装置。
【請求項６】
前記伴奏パターンは複数のパートからなり、特定のパートについて、前記音高変換手段は、その伴奏音に対応する前記検出コードが分数コードである場合には、前記伴奏音の音名と前記検出コードのベースノートとの音程に応じて前記伴奏音の音高をシフトさせて変換し、前記検出コードが分数コードでない場合には、前記伴奏音の音名および前記検出コードのタイプに応じた音高補正値を発生し、この音高補正値および前記検出コードのルートに基づいて前記伴奏音の音高をシフトさせて変換する、
ことを特徴とする請求項３記載の伴奏生成装置。
【請求項７】
入力されるコードに応じて、伴奏パターンを構成する伴奏音の音高を変換する装置に実行させるための伴奏生成プログラムであり、
前記伴奏パターンの各伴奏音に対応するコードを検出する検出機能と、
前記伴奏音の音高に近接する前記検出コードの構成音あるいはコードスケール音の音高になるよう前記伴奏音の音高を変換する音高変換機能と、
を含むことを特徴とする伴奏生成プログラム。
【請求項８】
入力されるコードに応じて、伴奏パターンを構成する伴奏音の音高を変換する装置に実行させるための伴奏生成プログラムであり、
前記伴奏パターンの各伴奏音に対応するコードを検出する検出機能と、
前記伴奏音の音名と前記検出コードのルートとの音程および前記検出コードのタイプに応じた音高補正値を発生し、この音高補正値に基づいて前記伴奏音の音高をシフトさせて変換する音高変換機能と、
を含むことを特徴とする伴奏生成プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、自動伴奏装置に用いて好適な伴奏生成装置および伴奏生成プログラムに関する。
【０００２】
【従来の技術】
自動伴奏装置は、入力されるコードに応じて伴奏パターンを構成する各音の音高を変換する伴奏生成装置を具備することが知られている。伴奏生成装置は、通常、基準となるコード（例えばＣメジャー）やキー（例えばＣ）に対応付けて記述された伴奏パターンの各音を、入力コードのルート（根音）とタイプ（和音種類）とに応じて音高変換する第１の従来技術、あるいはキー（調）と入力コードの機能（ルートをキーで評価したもの）とタイプとに応じて音高変換する第２の従来技術を用いる場合が多い。
【０００３】
【発明が解決しようとする課題】
ところで、上述した第１の従来技術は、入力コードのタイプと伴奏パターンの音高とで定まる音高補正値に入力コードのルートを加算した結果に基づき、伴奏パターンの音高をシフトさせるようになっており、一方、第２の従来技術は、入力コードの機能とタイプと伴奏パターンの音高とで定まる音高補正値にキーを加算した結果に基づき、伴奏パターンの音高をシフトさせるようになっている。この為、第１の従来技術ではルートの変化がそのまま伴奏音の音高変化になり、一方、第２の従来技術ではキーの変化がそのまま伴奏音の音高変化になる結果、いずれも入力コードの切り替りやそれに伴う転調で伴奏音の音高が急激に変化して不自然な伴奏音を発生する虞がある。
そこで本発明の第１の目的は、入力コードの切り替りで不自然な伴奏音の発生を防ぐことができる伴奏生成装置および伴奏生成方法を提供することにある。
【０００４】
さらに、上述した第１および第２の従来技術は、伴奏パターンを構成する各音が適正な発音タイミングで配列されていることを前提としている。この為、例えば人が演奏した曲データを記録して伴奏パターンとして使用する場合、そのパターン構成音の発音タイミングは正規タイミングより進んだり遅れたりするから、正規タイミングでコードが入力されると、その入力コードと伴奏パターンとの対応にずれが生じ、これにより適正な音高変換がなされず不自然な伴奏音を発生させてしまうという問題がある。
そこで本発明の第２の目的は、パターン構成音の発音タイミングが正規のタイミングより進んだり遅れたりする伴奏パターンを使用した場合でも不自然な伴奏音の発生を防止することができる伴奏生成装置および伴奏生成方法を提供することにある。
【０００５】
加えて、上述した第１および第２の従来技術では、入力されるコードに分数コードが含まれると、その分数コードに相応しい伴奏音を発生することができないという問題もある。
そこで本発明の第３の目的は、入力される分数コードに相応しい伴奏音を発生することができる伴奏生成装置および伴奏生成方法を提供することにある。
【０００６】
【課題を解決するための手段】
上記目的を達成するため、請求項１に記載の発明では、入力されるコードに応じて、伴奏パターンを構成する伴奏音の音高を変換する伴奏生成装置において、前記伴奏パターンの各伴奏音に対応するコードを検出する検出手段と、前記伴奏音の音高に近接する前記検出コードの構成音あるいはコードスケール音の音高になるよう前記伴奏音の音高を変換する音高変換手段とを具備することを特徴とする。
【０００７】
請求項２に記載の発明では、前記請求項１に記載の構成において、前記音高変換手段は、前記検出コードのルートと前記伴奏音の音名との音程および前記検出コードのタイプに応じて音高補正値を発生させ、この音高補正値により前記伴奏音の音高をシフトさせて変換することを特徴とする。
【０００８】
請求項３に記載の発明では、入力されるコードに応じて、伴奏パターンを構成する伴奏音の音高を変換する伴奏生成装置において、前記伴奏パターンの各伴奏音に対応するコードを検出する検出手段と、前記伴奏音の音名と前記検出コードのルートとの音程および前記検出コードのタイプに応じた音高補正値を発生し、この音高補正値に基づいて前記伴奏音の音高をシフトさせて変換する音高変換手段とを具備することを特徴とする。
【０００９】
請求項４に記載の発明では、前記請求項３に記載の構成において、前記音高変換手段は、所定タイミング毎にゼロリセットするまで、前記音高補正値を順次累算し、この累算された音高補正値により前記各伴奏音の音高をシフトさせて変換することを特徴とする。
【００１０】
請求項５に記載の発明では、前記請求項１または請求項３に記載の構成において、前記伴奏パターンを構成する伴奏音の発音タイミングに対するオフセット値を設定可能なオフセット設定手段を更に有し、前記検出手段は、前記伴奏パターンの各伴奏音の発音タイミングに前記オフセット値を加算したタイミングに基づいて対応するコードを検出することを特徴とする。
【００１１】
請求項６に記載の発明では、前記請求項３に記載の構成において、前記伴奏パターンは複数のパートからなり、特定のパートについて、前記音高変換手段は、その伴奏音に対応する前記検出コードが分数コードである場合には、前記伴奏音の音名と前記検出コードのベースノートとの音程に応じて前記伴奏音の音高をシフトさせて変換し、前記検出コードが分数コードでない場合には、前記伴奏音の音名および前記検出コードのタイプに応じた音高補正値を発生し、この音高補正値および前記検出コードのルートに基づいて前記伴奏音の音高をシフトさせて変換することを特徴とする。
【００１２】
請求項７に記載の発明では、入力されるコードに応じて、伴奏パターンを構成する伴奏音の音高を変換する装置に実行させるための伴奏生成プログラムであり、前記伴奏パターンの各伴奏音に対応するコードを検出する検出機能と、前記伴奏音の音高に近接する前記検出コードの構成音あるいはコードスケール音の音高になるよう前記伴奏音の音高を変換する音高変換機能とを含むことを特徴とする。
【００１３】
請求項８に記載の発明では、入力されるコードに応じて、伴奏パターンを構成する伴奏音の音高を変換する装置に実行させるための伴奏生成プログラムであり、前記伴奏パターンの各伴奏音に対応するコードを検出する検出機能と、前記伴奏音の音名と前記検出コードのルートとの音程および前記検出コードのタイプに応じた音高補正値を発生し、この音高補正値に基づいて前記伴奏音の音高をシフトさせて変換する音高変換機能とを含むことを特徴とする。
【００１４】
本発明では、伴奏パターンの各伴奏音に対応するコードを検出し、伴奏音の音高に近接する検出コードの構成音あるいはコードスケール音の音高になるよう伴奏音の音高を変換する（請求項１および請求項７）、または、伴奏音の音名と検出コードのルートとの音程および検出コードのタイプに応じた音高補正値を発生し、この音高補正値に基づいて伴奏音の音高をシフトさせて変換する（請求項３および請求項８）ので、従来のように、ルートやキーの変化がそのまま伴奏音の音高変化にならず、入力コードの切り替りやそれに伴う転調で不自然な伴奏音の発生を防ぐことが可能になる。
【００１５】
また、本発明では、伴奏パターンを構成する伴奏音の発音タイミングに対するオフセット値を設定でき、各伴奏音の発音タイミングにオフセット値を加算したタイミングに基づいて対応するコードを検出する（請求項５）ので、パターン構成音の発音タイミングが正規のタイミングより進んだり遅れたりする伴奏パターンを使用した場合でも不自然な伴奏音の発生を防止することが可能になる。
【００１６】
さらに、本発明では、伴奏パターンの特定のパート（例えばベースパート）については、その伴奏音に対応する検出コードが分数コードである場合には、伴奏音の音名と検出コードのベースノートとの音程に応じて伴奏音の音高をシフトさせて変換し、分数コードでない場合には、伴奏音の音名および検出コードのタイプに応じた音高補正値を発生し、この音高補正値および検出コードのルートに基づいて伴奏音の音高をシフトさせて変換する（請求項６）ので、入力される分数コードに相応しい伴奏音を発生することが可能になる。
【００１７】
【発明の実施の形態】
以下、本発明の実施の一形態による伴奏生成装置を実施例とし、これについて図面を参照して説明する。
Ａ．第１実施例
（１）構成
図１は、本発明による第１実施例の構成を示すブロック図である。この図において、１は伴奏パターンやコード進行パターンを選択する選択スイッチ、伴奏生成（後述する）の開始を指示する伴奏生成スイッチあるいは自動伴奏の開始・停止を指示するスタート／ストップスイッチ等、装置パネルに配設される各種スイッチから構成されるパネルスイッチであり、操作されたスイッチに対応したスイッチイベントを発生する。２は後述するＣＰＵ３から供給される表示制御信号に応じて、装置各部の設定状態や動作状態を表示する表示部である。
【００１８】
３は装置各部を制御するＣＰＵであり、その特徴的な動作については後述する。４は上記ＣＰＵ３にロードされる各種制御プログラムを記憶するＲＯＭである。５は複数種の伴奏パターンデータＡＰＤ、コード進行データＣＰＤおよびピッチチェンジテーブルＰＣＴを記憶するデータＲＯＭである。
伴奏パターンデータＡＰＤは、Ｃメジャーに対応した所定小節分の伴奏音を表す音符データから構成される。図２にその一例を図示する。図２に示すように、各音符データｍｅｌｏｄｙ［０］〜［４４］は、それぞれ前イベント（音符）からの経過時間で表される発音タイミング、音高、音量および音長から形成される。なお、伴奏パターンデータＡＰＤの終わりにはパターン終端を表す終端コード（ＦＦＦＦｈ）が設けられている。
【００１９】
コード進行データＣＰＤは、コードデータｃｈｏｒｄをコード進行順に記憶したものである。図３に図示する一例のように、各コードデータｃｈｏｒｄ［０］〜［１０］は、それぞれ前コード入力時点からの経過時間で表される入力（発音）タイミング、ルートおよびタイプから形成され、その終わりには終端コード（ＦＦＦＦｈ）が設けられている。
【００２０】
ピッチチェンジテーブルＰＣＴは、コード進行データＣＰＤから読み出される入力コードのタイプｃｔｙｐｅに応じて、その入力コードに対応する伴奏パターン中の音高ｐｉｔｃｈと当該入力コードのルートｃｒｏｏｔとの差（半音数）により定まるピッチ補正値ｐｃｔａｂを読み出すテーブルであり、その一例を図４に図示する。
図４に図示するピッチチェンジテーブルＰＣＴでは、例えばタイプがメジャーＭＡＪであれば、伴奏パターン中の音高ｐｉｔｃｈとルートｃｒｏｏｔとの差（絶対値）の１２剰余値に応じて、当該音高ｐｉｔｃｈを半音数「０（根音）」、半音数「４（長３度）」および半音数「７（完全５度）」のコード構成音に集約させるピッチ補正値ｐｃｔａｂが登録されている。こうしたピッチチェンジテーブルＰＣＴから読み出されるピッチ補正値ｐｃｔａｂによって、伴奏パターンデータＡＰＤの各音符データの音高がシフトされる。
【００２１】
次に、再び図１を参照して実施例の構成について説明を進める。図１において、６は各種レジスタ・フラグデータを一時記憶するワークエリアの他、データエリアを備えるＲＡＭである。ＲＡＭ６のデータエリアには、上述したピッチチェンジテーブルＰＣＴを用いて音高変換された伴奏パターンデータＡＰＤが格納される。７は周知の波形メモリ読み出し方式により構成される音源であり、ＣＰＵ３の指示の下、ＲＡＭ６のデータエリアに格納された伴奏パターンデータＡＰＤに応じた伴奏音を発生する。８は音源７が発生するされる伴奏音をアナログ形式の楽音信号にＤ／Ａ変換した後、それを増幅してスピーカより放音させるサウンドシステムである。
【００２２】
（２）動作
次に、図５〜図８を参照して上記構成による第１実施例の動作について説明する。以下では、最初に概略動作として「メインルーチンの動作」について述べ、続いて本発明の要旨に係わる「伴奏生成処理」および「コード検出処理」の各動作について述べて行くものとする。
【００２３】
▲１▼メインルーチンの動作（概略動作）
本実施例に電源が投入されると、ＣＰＵ３はＲＯＭ４から所定の制御プログラムをロードし、図５に示すメインルーチンを実行してステップＳＡ１に処理を進める。ステップＳＡ１では、ＲＡＭ６に設けられる各種レジスタやフラグ類をリセットしたり、音源７に対して各種レジスタ・フラグを初期化するよう指示するイニシャライズを実行する。イニシャライズ完了後、ＣＰＵ３は次のステップＳＡ２に処理を進め、スイッチ操作の有無を判断すべく、パネルスイッチ１を走査する。そして、ステップＳＡ３〜ＳＡ８では、スイッチ走査により検出したスイッチイベント種類に応じた処理を実行する。以下、「入力指示イベント」、「生成指示イベント」および「再生指示イベント」を検出した場合に分けて動作説明を進める。
【００２４】
（イ）入力指示イベントの場合
選択スイッチの操作に応じて入力指示イベントが検出されると、ステップＳＡ３の判断結果が「ＹＥＳ」となり、ステップＳＡ６に進み、選択された伴奏パターンデータＡＰＤをデータＲＯＭ５からＲＡＭ６のデータエリアに転送したり、選択されたコード進行データＣＰＤの読み出しアドレスをレジスタセットする等の入力処理を実行する。
【００２５】
（ロ）生成指示イベントの場合
伴奏生成スイッチの操作に応じて生成指示イベントが検出されると、ステップＳＡ４の判断結果が「ＹＥＳ」となり、ステップＳＡ７に進み、伴奏生成処理を実行する。この伴奏生成処理では、上記入力指示イベントにて選択されたコード進行データＣＰＤと、前述のピッチチェンジテーブルＰＣＴとに応じて、上記入力指示イベントにて選択された伴奏パターンデータＡＰＤ中の各音符データの音高をシフトさせ、これによりコード進行データＣＰＤにマッチした伴奏音、すなわちコードの切り替りで不自然な伴奏音を生じないようにした新たな伴奏パターンデータＡＰＤを生成するようになっており、その詳細については後述する。
【００２６】
（ハ）再生指示イベントの場合
スタート／ストップスイッチの操作に応じて、自動伴奏開始を表す再生指示イベントが検出されると、ステップＳＡ５の判断結果が「ＹＥＳ」となり、ステップＳＡ８に進み、上記伴奏生成処理にて生成された新たな伴奏パターンデータＡＰＤに従った伴奏音を再生する伴奏再生処理を実行する。
なお、パネルスイッチ１が操作されず、上述の各イベントがいずれも発生しない場合には、ステップＳＡ３〜ＳＡ５の各判断結果は「ＮＯ」となり、ステップＳＡ２に処理に戻し、以後、いずれかのイベントが発生するまでステップＳＡ２〜ＳＡ５を繰り返す。
【００２７】
▲２▼伴奏生成処理の動作
次に、図６を参照して伴奏生成処理の動作について説明する。上述したステップＳＡ７（図５参照）を介して伴奏生成処理が実行されると、ＣＰＵ３は図６のステップＳＢ１に処理を進め、ポインタｎｐｔｒおよびカウンタｎｔｉｍｅをそれぞれゼロリセットする。ここで、ポインタｎｐｔｒは、前述の入力指示イベントにて選択される伴奏パターンデータＡＰＤ（図２参照）の読み出しアドレスを一時記憶する。カウンタｎｔｉｍｅは、伴奏パターンデータＡＰＤの音符データに含まれる発音タイミングを累算し、伴奏開始時点からの経過時間（以下、伴奏進行時間と称す）を発生する。
【００２８】
ポインタｎｐｔｒおよびカウンタｎｔｉｍｅをゼロリセットした後、ＣＰＵ３はステップＳＢ２に進み、ポインタｎｐｔｒの一つ先のアドレス（ｎｐｔｒ＋１）に応じて伴奏パターンデータＡＰＤから読み出される内容ｍｅｌｏｄｙ［ｎｐｔｒ＋１］が終端コードであるか、つまりパターン終端に達したどうかを判断する。パターン終端であれば、判断結果は「ＹＥＳ」となり、本処理を完了させるが、パターン終端に達していなければ、判断結果が「ＮＯ」となり、次のステップＳＢ３に進む。
ステップＳＢ３では、伴奏パターンデータＡＰＤから読み出される音符データ中の音高（ｍｅｌｏｄｙ［ｎｐｔｒ＋１］）をレジスタｐｉｔｃｈにストアする。以下、レジスタｐｉｔｃｈの内容を音高ｐｉｔｃｈと記す。
【００２９】
次いで、ステップＳＢ４では、コード検出処理を実行し、図７に示すステップＳＢ４−１に処理を進める。ステップＳＢ４−１では、ポインタｃｐｔｒおよびカウンタｃｔｉｍｅをそれぞれゼロリセットする。ここで、ポインタｃｐｔｒは、前述の入力指示イベントにて選択されるコード進行データＣＰＤ（図３参照）の読み出しアドレスを一時記憶する。カウンタｃｔｉｍｅは、コード進行データＣＰＤの発音タイミングを累算し、コード進行開始時点からの経過時間（以下、コード進行時間と称す）を発生する。そして、ステップＳＢ４−２では、ポインタｃｐｔｒの一つ先のアドレス（ｃｐｔｒ＋１）に応じてコード進行データＣＰＤから読み出されるコードデータｃｈｏｒｄ［ｃｐｔｒ＋１］が終端コードであるか、つまりデータ終端に達したどうかを判断する。
【００３０】
データ終端に達していなければ、判断結果は「ＮＯ」となり、次のステップＳＢ４−３に進む。ステップＳＢ４−３では、ポインタｃｐｔｒに応じてコード進行データＣＰＤから読み出されるコードデータｃｈｏｒｄ［ｃｐｔｒ］、すなわち前コード入力時点からの経過時間で表される発音タイミングをカウンタｃｔｉｍｅに累算してコード進行時間を算出する。
次いで、ステップＳＢ４−４では、算出したコード進行時間が、カウンタｎｔｉｍｅに格納される伴奏進行時間を超えたかどうかを判断する。コード進行時間が伴奏進行時間を超えていなければ、判断結果は「ＮＯ」となり、ステップＳＢ４−５に進む。ステップＳＢ４−５では、次のコードデータｃｈｏｒｄを読み出すべくポインタｃｐｔｒに「３」を加算してポインタｃｐｔｒを進めた後、再び上記ステップＳＢ４−２に処理を戻す。
【００３１】
このように、ステップＳＢ４−２〜ＳＢ４−５では、伴奏進行時間を超えたコード進行時間を検索し、その条件を満たすコードデータｃｈｏｒｄが見つかると、ステップＳＢ４−４の判断結果が「ＹＥＳ」となり、ステップＳＢ４−６に進み、その検索したコードデータｃｈｏｒｄの一つ前のコードデータｃｈｏｒｄ中のルートｃｈｏｒｄ［ｃｐｔｒ−２］およびタイプｃｈｏｒｄ［ｃｐｔｒ−１］を抽出してそれぞれレジスタｃｒｏｏｔ，ｃｔｙｐｅにストアする。
なお、伴奏進行時間を超えたコード進行時間を検索する過程でコード進行データＣＰＤのデータ終端に達した場合には、ステップＳＢ４−２の判断結果が「ＹＥＳ」となり、ステップＳＢ４−６に進み、データ終端の一つ前のコードデータｃｈｏｒｄ中のルートｃｈｏｒｄ［ｃｐｔｒ−２］をレジスタｃｒｏｏｔに、タイプｃｈｏｒｄ［ｃｐｔｒ−１］をレジスタｃｔｙｐｅにそれぞれストアする。以下、レジスタｃｒｏｏｔ，ｃｔｙｐｅの内容をそれぞれルートｃｒｏｏｔ、タイプｃｔｙｐｅと記す。
【００３２】
さて、こうして伴奏パターンデータＡＰＤから読み出した音符データに対応したコードのルートｃｒｏｏｔおよびタイプｃｔｙｐｅが検出されると、ＣＰＵ３は図６のステップＳＢ５に処理を進める。ステップＳＢ５では、検出したルートｃｒｏｏｔおよびタイプｃｔｙｐｅに基づき前述のピッチチェンジテーブルＰＣＴ（図４参照）から対応するピッチ補正値ｐｃｔａｂを読み出すためのテーブル引数ｉｎｄｅｘ（ｃｔｙｐｅ，｜ｐｉｔｃｈ−ｃｒｏｏｔ｜ｍｏｄ　１２）を求める。ここで、ｃｔｙｐｅは検出したタイプ、｜ｐｉｔｃｈ−ｃｒｏｏｔ｜ｍｏｄ　１２は、伴奏パターンデータＡＰＤから読み出した音符データの音高ｐｉｔｃｈとルートｃｒｏｏｔとの差（絶対値）の１２剰余値である。
【００３３】
そして、ステップＳＢ６では、このテーブル引数ｉｎｄｅｘに応じてピッチチェンジテーブルＰＣＴから読み出されるピッチ補正値ｐｃｔａｂ［ｉｎｄｅｘ］を音高ｐｉｔｃｈに加算して音高変換する。次いで、ステップＳＢ７では、ポインタｎｐｔｒに応じて伴奏パターンデータＡＰＤから読み出される発音タイミングｍｅｌｏｄｙ［ｎｐｔｒ］をＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ］に格納し、音高変換された音高ｐｉｔｃｈをＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ＋１］に格納する。さらに、ポインタｎｐｔｒの二つ先のアドレス（ｎｐｔｒ＋２）に応じて伴奏パターンデータＡＰＤから読み出される音量ｍｅｌｏｄｙ［ｎｐｔｒ＋２］をＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ＋２］に格納し、ポインタｎｐｔｒの三つ先のアドレス（ｎｐｔｒ＋３）に応じて伴奏パターンデータＡＰＤから読み出される音長ｍｅｌｏｄｙ［ｎｐｔｒ＋３］をＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ＋３］に格納する。
【００３４】
以上のようにして、音高変換された音符データが、新たな伴奏パターンデータＡＰＤとしてＲＡＭ６のデータエリアに格納されると、ＣＰＵ３はステップＳＢ８に処理を進め、次の音符データについて音高変換を施すべく、ポインタｎｐｔｒに「４」を加算してポインタ更新を行い、続くステップＳＢ９では、更新されたポインタｎｐｔｒに応じて伴奏パターンデータＡＰＤから読み出される発音タイミングｍｅｌｏｄｙ［ｎｐｔｒ］をカウンタｎｔｉｍｅに累算して伴奏開始時点からの経過時間を表す伴奏進行時間を更新する。
そして、前述のステップＳＢ２に処理を戻し、以後、伴奏パターンデータＡＰＤのパターン終端に達するまでステップＳＢ２〜ＳＢ９を繰り返して伴奏パターンデータＡＰＤ中の各音符データの音高ｐｉｔｃｈを、コード進行に対応させて音高変換してなる新たな伴奏パターンデータＡＰＤをＲＡＭ６のデータエリアに登録して行き、パターン終端に達した時点でステップＳＢ２の判断結果が「ＹＥＳ」となり、本処理を完了させる。
【００３５】
したがって、図８（ａ）の楽譜で表されるように、図２に図示した伴奏パターンデータＡＰＤを、図３に図示するコード進行データＣＰＤに従って伴奏生成処理を施すと、同図（ｂ）の楽譜で表現される伴奏パターンに音高変換される。
つまり、本実施例によれば、コード進行データＣＰＤに従って入力されるコードｃｈｏｒｄのタイプｃｔｙｐｅに対応して、そのコードｃｈｏｒｄのルートｃｒｏｏｔを根音とするコード構成音のうちで伴奏パターンのオリジナル音高ｐｉｔｃｈに近接する音高になるよう伴奏パターン中の各音符データの音高ｐｉｔｃｈをシフトさせるので、入力コードの切り替りで不自然な伴奏音の発生を防ぐことが可能になる。
【００３６】
なお、本実施例では、入力コードのタイプｃｔｙｐｅに対応して、その入力コードのルートｃｒｏｏｔを根音とするコード構成音のうちで伴奏パターンのオリジナル音高ｐｉｔｃｈに近接する音高になるよう伴奏パターン中の各音符データの音高ｐｉｔｃｈをシフトさせるピッチ補正値ｐｃｔａｂを読み出すピッチチェンジテーブルＰＣＴを使用するようにしたが、これに限らず、図９に図示するテーブル内容のピッチチェンジテーブルＰＣＴ２を使用する形態としても構わない。
ピッチチェンジテーブルＰＣＴ２を用いた場合には、伴奏パターン中の各音符データの音高ｐｉｔｃｈを、入力コードのルートｃｒｏｏｔを根音とするコード構成音以外の非和声音（例えばテンション・ノート）も含むコードスケール音のいずれかにも音高変換し得る為、より好ましい伴奏音を生成することが可能になる。
【００３７】
（３）変形例
上述した実施例では、入力コードの切り替りで不自然な伴奏音が生成される虞を皆無にしたが、伴奏パターンデータＡＰＤの内容によっては、同じ音高が重なったり続いたりしてコードの性格が確定しない伴奏ラインになる場合も起こり得る。そこで、変形例では、そうした弊害を回避する伴奏生成処理について図１０を参照して説明する。
上述の実施例と同様、図５に図示したメインルーチンのステップＳＡ７を介して変形例による伴奏生成処理が実行されると、ＣＰＵ３は図１０のステップＳＣ１に処理を進め、ポインタｎｐｔｒ、カウンタｎｔｉｍｅ、カウンタｏｔｉｍｅおよびレジスタｄｅｖをそれぞれゼロリセットして初期化する。
【００３８】
ここで、ポインタｎｐｔｒは、前述の入力指示にて選択される伴奏パターンデータＡＰＤ（図２参照）の読み出しアドレスを一時記憶する。カウンタｎｔｉｍｅは、伴奏パターンデータＡＰＤの音符データに含まれる発音タイミングを累算し、伴奏開始時点からの経過時間（以下、伴奏進行時間と称す）を発生する。カウンタｏｔｉｍｅは、１小節毎の経過タイミングを検出するのに用いる。レジスタｄｅｖには、１小節毎のピッチ補正値ｐｃｔａｂを累算したピッチ補正累算値が一時記憶される。
【００３９】
ポインタおよびカウンタを初期化し終えると、ＣＰＵ３はステップＳＣ２に進み、ポインタｎｐｔｒの一つ先のアドレスに応じて伴奏パターンデータＡＰＤから読み出される内容ｍｅｌｏｄｙ［ｎｐｔｒ＋１］が終端コードであるか、つまりパターン終端に達したどうかを判断する。
パターン終端であれば、判断結果は「ＹＥＳ」となり、本処理を完了させるが、パターン終端に達していなければ、判断結果が「ＮＯ」となり、次のステップＳＣ３に進む。ステップＳＣ３では、ｎｔｉｍｅ／９６０＞ｏｔｉｍｅ／９６０であるか、つまり、１小節分経過したかどうかを判断する。１小節分経過していなければ、判断結果は「ＮＯ」となり、後述するステップＳＣ５に処理を進めるが、１小節分経過した場合には判断結果が「ＹＥＳ」となり、ステップＳＣ４に進み、カウンタｎｔｉｍｅの内容をカウンタｏｔｉｍｅにストアする一方、レジスタｄｅｖをゼロリセットする。
【００４０】
次いで、ステップＳＣ５では、ポインタｎｐｔｒの一つ先のアドレス（ｎｐｔｒ＋１）に応じて伴奏パターンデータＡＰＤから読み出される音符データ中の音高ｍｅｌｏｄｙ［ｎｐｔｒ＋１］をレジスタｐｉｔｃｈにストアする。以下、レジスタｐｉｔｃｈの内容を音高ｐｉｔｃｈと記す。そして、ステップＳＣ６では、前述した実施例と同様、図７に図示するコード検出処理を実行し、伴奏パターンデータＡＰＤから読み出した音符データに対応したコードのルートｃｒｏｏｔおよびタイプｃｔｙｐｅを検出する。
続いて、ステップＳＣ７では、検出したルートｃｒｏｏｔおよびタイプｃｔｙｐｅに基づき前述のピッチチェンジテーブルＰＣＴ（図４参照）から対応するピッチ補正値ｐｃｔａｂを読み出すためのテーブル引数ｉｎｄｅｘとして、（ｃｔｙｐｅ，｜ｐｉｔｃｈ−ｃｒｏｏｔ｜ｍｏｄ　１２）を求める。ここで、ｃｔｙｐｅは検出したタイプ、｜ｐｉｔｃｈ−ｃｒｏｏｔ｜ｍｏｄ　１２は、伴奏パターンデータＡＰＤから読み出した音符データの音高ｐｉｔｃｈとルートｃｒｏｏｔとの差（絶対値）の１２剰余値である。
【００４１】
次に、ステップＳＣ８では、上記テーブル引数ｉｎｄｅｘに応じてピッチチェンジテーブルＰＣＴから読み出されるピッチ補正値ｐｃｔａｂ［ｉｎｄｅｘ］と、レジスタｄｅｖの値（以下、ピッチ補正累算値と称す）とを音高ｐｉｔｃｈに加算して音高変換する。次いで、ステップＳＣ９では、ピッチ補正値ｐｃｔａｂ［ｉｎｄｅｘ］を累算してピッチ補正累算値ｄｅｖを発生する。
【００４２】
そして、ステップＳＣ１０に進み、ポインタｎｐｔｒに応じて伴奏パターンデータＡＰＤから読み出される発音タイミングｍｅｌｏｄｙ［ｎｐｔｒ］をＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ］に格納し、音高変換された音高ｐｉｔｃｈをＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ＋１］に格納する。さらに、ポインタｎｐｔｒの二つ先のアドレス（ｎｐｔｒ＋２）に応じて伴奏パターンデータＡＰＤから読み出される音量ｍｅｌｏｄｙ［ｎｐｔｒ＋２］をＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ＋２］に格納し、ポインタｎｐｔｒの三つ先のアドレス（ｎｐｔｒ＋３）に応じて伴奏パターンデータＡＰＤから読み出される音長ｍｅｌｏｄｙ［ｎｐｔｒ＋３］をＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ＋３］に格納する。
【００４３】
こうして、音高変換された音符データが、新たな伴奏パターンデータＡＰＤとしてＲＡＭ６のデータエリアに格納されると、ＣＰＵ３はステップＳＣ１１に処理を進め、次の音符データについて音高変換を施すべく、ポインタｎｐｔｒに「４」を加算してポインタ更新を行い、続くステップＳＣ１２では、更新されたポインタｎｐｔｒに応じて伴奏パターンデータＡＰＤから読み出される発音タイミングｍｅｌｏｄｙ［ｎｐｔｒ］をカウンタｎｔｉｍｅに累算して伴奏開始時点からの経過時間を表す伴奏進行時間を更新する。以後、前述のステップＳＣ２に処理を戻し、伴奏パターンデータＡＰＤのパターン終端に達するまでステップＳＣ２〜ＳＣ１２を繰り返す。
【００４４】
このように、変形例によれば、入力コードのタイプｃｔｙｐｅおよびルートｃｒｏｏｔに応じてピッチチェンジテーブルＰＣＴから読み出される現ピッチ補正値ｐｃｔａｂ［ｉｎｄｅｘ］と、１小節毎にゼロリセットされ、前ピッチ補正値ｐｃｔａｂ［ｉｎｄｅｘ］までを累算してなるピッチ補正累算値ｄｅｖとを音高ｐｉｔｃｈに加算して音高変換するようにしたので、同じ音高が重なったり続いたりしてコードの性格が確定しない伴奏ライン（伴奏パターン）になることを防止することができる。
【００４５】
Ｂ．第２実施例
前述した第１実施例では入力コードの切り替りで不自然な伴奏音の発生を防ぐようにしたが、第２実施例では伴奏パターンデータＡＰＤを構成する各音の発音タイミングが正規のタイミングより進んだり遅れたりするものであっても不自然な伴奏音にならないよう音高変換したり、コード進行データＣＰＤに分数コードが含まれていても、その分数コードに相応しい伴奏音となるよう音高変換するものである。以下、こうした第２実施例の構成および動作について説明する。
【００４６】
（１）構成
第２実施例の全体構成は、前述の第１実施例と同一なので、その説明については省略する。第２実施例が前述の第１実施例と相違する点は、伴奏パターンデータＡＰＤおよびコード進行データＣＰＤの内容が異なることにある。
すなわち、第２実施例による伴奏パターンデータＡＰＤは、第１実施例と同様、Ｃメジャーに対応した所定小節分の伴奏音を表す音符データから構成されるベースパートおよびコードパートを備える。伴奏パターンデータＡＰＤを構成する各音符データは、前イベント（音符）からの経過時間で表される発音タイミング、音高、音量および音長から形成されるが、図１１に図示する一例のように、第２小節先頭の音符以降が正規の発音タイミングから僅かに（３クロック分）先行したものとなっている。
【００４７】
第２実施例によるコード進行データＣＰＤは、第１実施例と同様、コードデータｃｈｏｒｄをコード進行順に記憶したものであるが、図１２に図示する一例のように、各コードデータｃｈｏｒｄには、それぞれ前コード入力時点からの経過時間で表される入力タイミング、ルートおよびタイプの他、コードベース（ベースノート）が設けられる。ここで、コードベースがコードのルートと異なる場合には、分数コード（オンベースコード）と見做されるようになっている。
【００４８】
（２）動作
次に、伴奏パターンデータＡＰＤを構成する各音の発音タイミングが前後にずれる揺らぎを有していても不自然な伴奏音にならないよう音高変換したり、コード進行データＣＰＤに分数コードが含まれていても、その分数コードに相応しい伴奏音となるよう音高変換する第２実施例の動作について図１３〜図１７を参照して説明する。
【００４９】
▲１▼メインルーチンの動作
まず最初に、第２実施例の概略動作として、図１３を参照してメインルーチンの動作について説明する。装置電源が投入されると、ＣＰＵ３はＲＯＭ４から所定の制御プログラムをロードし、図１３に示すメインルーチンを実行してステップＳＤ１に処理を進め、ＲＡＭ６に設けられる各種レジスタやフラグ類をリセットしたり、音源７に対して各種レジスタ・フラグを初期化するよう指示するイニシャライズを実行する。
イニシャライズ完了後、ＣＰＵ３はステップＳＤ２に処理を進め、スイッチ操作の有無を判断すべく、パネルスイッチ１を走査する。そして、ステップＳＤ３〜ＳＤ１０では、スイッチ走査により検出したイベント種類に応じた処理を実行する。以下、「入力指示イベント」、「生成指示イベント」、「再生指示イベント」および「補正値変更指示イベント」を検出した場合に分けて動作説明を進める。
【００５０】
（イ）入力指示イベントの場合
すなわち、選択スイッチの操作に応じて、伴奏パターンデータＡＰＤおよびコード進行データＣＰＤを選択する入力指示イベントが検出されると、ステップＳＤ３の判断結果が「ＹＥＳ」となり、ステップＳＤ７に進み、選択された伴奏パターンデータＡＰＤをデータＲＯＭ５からＲＡＭ６のデータエリアに転送したり、選択されたコード進行データＣＰＤの読み出しアドレスをレジスタセットする等の入力処理を実行する。
【００５１】
（ロ）生成指示イベントの場合
伴奏生成スイッチの操作に応じて生成指示イベントが検出されると、ステップＳＤ４の判断結果が「ＹＥＳ」となり、ステップＳＤ８に進み、伴奏生成処理を実行する。この伴奏生成処理では、上記入力指示イベントにて選択されたコード進行データＣＰＤと、前述のピッチチェンジテーブルＰＣＴとに応じて、上記入力指示イベントにて選択された伴奏パターンデータＡＰＤ中の各音符データの音高をシフトさせ、これによりコード進行データＣＰＤにマッチした新たな伴奏パターンデータＡＰＤを生成するようになっており、その詳細については後述する。
【００５２】
（ハ）再生指示イベントの場合
スタート／ストップスイッチの操作に応じて再生指示イベントが検出されると、ステップＳＤ５の判断結果が「ＹＥＳ」となり、ステップＳＤ９に進み、上記伴奏生成処理にて生成された新たな伴奏パターンデータＡＰＤに従った伴奏音を再生する伴奏再生処理を実行する。
【００５３】
（ニ）補正値変更指示イベントの場合
ここでは、最初に補正値変更指示が行われる背景について説明した後、その動作について述べる。
人が演奏した曲データを記録したものを伴奏パターンデータＡＰＤとして使用する場合、例えば図１１に図示した一例のように、第２小節先頭の音符以降が正規の発音タイミングから僅かに（３クロック分）先行する伴奏パターンデータＡＰＤを用いて伴奏生成すると、入力コードとの対応にずれが生じてしまい、適正な音高変換がなされず不自然な伴奏音を発生させてしまう。
この点を具体的に説明すると、図１１に図示した伴奏パターンデータＡＰＤを楽譜として表示すると、図１４（ａ）で表され、これを第１実施例によるコード進行データＣＰＤ（図３参照）に基づき第１実施例と同様に伴奏生成処理を施すと、図１４（ｂ）に図示する伴奏パターンデータに音高変換される。この図から明らかなように、第３小節および第４小節の先頭の音符は、それぞれ前小節区間の入力コードに基づいて異なる音高に変換されてしまい、特に第４小節では、同じ音高（Ｆ４音）が重なり２和音になってしまい、適正な音高変換がなされていないことが判る。
【００５４】
そこで、人が演奏した曲データなど、発音タイミングが正規のタイミングより進んだり遅れたりする伴奏パターンデータＡＰＤを用いる際には、補正値変更スイッチの操作により補正値変更指示イベントを与える。そうすると、ステップＳＤ６の判断結果が「ＹＥＳ」となり、ステップＳＤ１０に進み、補正値変更処理を実行する。
この補正値変更処理では、例えば伴奏パターンデータＡＰＤを構成する各音符データを読み出して表示部２に表示しておき、ユーザのマニュアル操作によって最適な補正値ｃｏｆｆｓｅｔを設定し、各音符データの発音タイミングを適正タイミングに補正する。あるいは周知のクオンタイズ処理にて補正値ｃｏｆｆｓｅｔを自動的に求め、それによって伴奏パターンデータＡＰＤを構成する各音符データの発音タイミングを補正することも可能である。
【００５５】
▲２▼伴奏生成処理の動作
次に、図１５を参照して第２実施例による伴奏生成処理の動作について説明する。上述のステップＳＤ８（図１３参照）を介して本処理が実行されると、ＣＰＵ３は図１５のステップＳＥ１に処理を進め、ポインタｎｐｔｒおよびカウンタｎｔｉｍｅをそれぞれゼロリセットする。なお、ポインタｎｐｔｒは、前述の入力指示にて選択される伴奏パターンデータＡＰＤ（図２参照）の読み出しアドレスを一時記憶するものである。カウンタｎｔｉｍｅは、伴奏パターンデータＡＰＤの音符データに含まれる発音タイミングを累算し、伴奏開始時点からの経過時間（以下、伴奏進行時間と称す）を発生する。
【００５６】
ポインタｎｐｔｒおよびカウンタｎｔｉｍｅをゼロリセットすると、ＣＰＵ３はステップＳＥ２に進み、ポインタｎｐｔｒの一つ先のアドレスに応じて伴奏パターンデータＡＰＤから読み出される内容ｍｅｌｏｄｙ［ｎｐｔｒ＋１］が終端コードであるか、つまりパターン終端に達したどうかを判断する。
パターン終端であれば、判断結果は「ＹＥＳ」となり、本処理を完了させるが、パターン終端に達していなければ、判断結果が「ＮＯ」となり、次のステップＳＥ３に進む。ステップＳＥ３では、伴奏パターンデータＡＰＤから読み出される音符データ中の音高をレジスタｐｉｔｃｈにストアする。以下、レジスタｐｉｔｃｈの内容を音高ｐｉｔｃｈと記す。
【００５７】
次いで、ステップＳＥ４では、音高変換すべく伴奏パターンデータＡＰＤから読み出された音符データに対応するコードデータｃｈｏｒｄをコード進行データＣＰＤ（図１２参照）から検出し、該当するコードデータｃｈｏｒｄのルートｃｒｏｏｔおよびタイプｃｔｙｐｅを抽出するコード検出処理を実行する。なお、この第２実施例によるコード検出処理の詳細については追って述べる。そして、ステップＳＥ５では、検出したルートｃｒｏｏｔおよびタイプｃｔｙｐｅに応じて音高ｐｉｔｃｈを音高変換する音高変換処理（後述する）を実行する。
【００５８】
続いて、ステップＳＥ６では、ポインタｎｐｔｒに応じて伴奏パターンデータＡＰＤから読み出される発音タイミングｍｅｌｏｄｙ［ｎｐｔｒ］をＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ］に格納し、音高変換された音高ｐｉｔｃｈをＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ＋１］に格納する。さらに、ポインタｎｐｔｒの二つ先のアドレス（ｎｐｔｒ＋２）に応じて伴奏パターンデータＡＰＤから読み出される音量ｍｅｌｏｄｙ［ｎｐｔｒ＋２］をＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ＋２］に格納し、ポインタｎｐｔｒの三つ先のアドレス（ｎｐｔｒ＋３）に応じて伴奏パターンデータＡＰＤから読み出される音長ｍｅｌｏｄｙ［ｎｐｔｒ＋３］をＲＡＭ６のデータエリアｎｅｗ［ｎｐｔｒ＋３］に格納する。
【００５９】
こうして、音高変換された音符データが、新たな伴奏パターンデータＡＰＤとしてＲＡＭ６のデータエリアに格納されると、ＣＰＵ３はステップＳＥ７に処理を進め、次の音符データについて音高変換を施すべく、ポインタｎｐｔｒに「４」を加算してポインタ更新を行い、続くステップＳＥ８では、更新されたポインタｎｐｔｒに応じて伴奏パターンデータＡＰＤから読み出される発音タイミングｍｅｌｏｄｙ［ｎｐｔｒ］をカウンタｎｔｉｍｅに累算して伴奏開始時点からの経過時間を表す伴奏進行時間を更新する。
以後、前述のステップＳＥ２に処理を戻し、伴奏パターンデータＡＰＤのパターン終端に達するまでステップＳＥ２〜ＳＥ８を繰り返して伴奏パターンデータＡＰＤ中の各音符データの音高ｐｉｔｃｈを、コード進行に対応させて音高変換してなる新たな伴奏パターンデータＡＰＤをＲＡＭ６のデータエリアに登録して行き、パターン終端に達した時点でステップＳＥ２の判断結果が「ＹＥＳ」となり、本処理を完了させる。
【００６０】
▲３▼コード検出処理の動作
次に、図１６を参照して第２実施例によるコード検出処理の動作について説明する。上述のステップＳＥ４（図１５参照）を介して本処理が実行されると、ＣＰＵ３は図１６に示すステップＳＦ１に処理を進める。ステップＳＦ１では、ポインタｃｐｔｒおよびカウンタｃｔｉｍｅをそれぞれゼロリセットする。ここで、ポインタｃｐｔｒは、前述の入力指示イベントにて選択されるコード進行データＣＰＤ（図１２参照）の読み出しアドレスを一時記憶する。カウンタｃｔｉｍｅは、コード進行データＣＰＤの発音タイミングを累算し、コード進行開始時点からの経過時間（以下、コード進行時間と称す）を発生する。
そして、ステップＳＦ２では、ポインタｃｐｔｒの一つ先のアドレスに応じてコード進行データＣＰＤから読み出されるコードデータｃｈｏｒｄ［ｃｐｔｒ＋１］が終端コードであるか、つまりデータ終端に達したどうかを判断する。
【００６１】
データ終端に達していなければ、判断結果は「ＮＯ」となり、次のステップＳＦ３に進む。ステップＳＦ３では、ポインタｃｐｔｒに応じてコード進行データＣＰＤから読み出されるコードデータｃｈｏｒｄ［ｃｐｔｒ］、すなわち前コード入力時点からの経過時間で表される入力タイミングをカウンタｃｔｉｍｅに累算してコード進行時間を算出する。
次いで、ステップＳＦ４では、算出したコード進行時間が、カウンタｎｔｉｍｅに格納される伴奏進行時間と補正値ｃｏｆｆｓｅｔとの加算値を超えたかどうかを判断する。コード進行時間が上記加算値を超えていなければ、判断結果は「ＮＯ」となり、ステップＳＦ５に進む。ステップＳＦ５では、次のコードデータｃｈｏｒｄを読み出すべくポインタｃｐｔｒに「４」を加算してポインタｃｐｔｒを進めた後、再び上記ステップＳＦ２に処理を戻す。
【００６２】
このように、ステップＳＦ２〜ＳＦ５では、伴奏進行時間と補正値ｃｏｆｆｓｅｔとの加算値を超えたコード進行時間を検索し、その条件を満たすコードデータｃｈｏｒｄが見つかると、ステップＳＦ４の判断結果が「ＹＥＳ」となり、ステップＳＦ６に進み、その検索したコードデータｃｈｏｒｄの一つ前のコードデータｃｈｏｒｄ中のルートｃｈｏｒｄ［ｃｐｔｒ−３］、タイプｃｈｏｒｄ［ｃｐｔｒ−２］およびコードベースｃｈｏｒｄ［ｃｐｔｒ−１］を抽出してそれぞれレジスタｃｒｏｏｔ，ｃｔｙｐｅおよびｃｂａｓｓにストアする。
【００６３】
なお、伴奏進行時間と補正値ｃｏｆｆｓｅｔとの加算値を超えたコード進行時間を検索する過程でコード進行データＣＰＤのデータ終端に達した場合には、ステップＳＦ２の判断結果が「ＹＥＳ」となり、ステップＳＦ６に進み、データ終端の一つ前のコードデータｃｈｏｒｄ中のルートｃｈｏｒｄ［ｃｐｔｒ−３］をレジスタｃｒｏｏｔに、タイプｃｈｏｒｄ［ｃｐｔｒ−２］をレジスタｃｔｙｐｅに、コードベースｃｈｏｒｄ［ｃｐｔｒ−１］をレジスタｃｂａｓｓにそれぞれストアする。以下、レジスタｃｒｏｏｔ，ｃｔｙｐｅ，ｃｂａｓｓの内容をそれぞれルートｃｒｏｏｔ、タイプｃｔｙｐｅ、コードベースｃｂａｓｓと記す。
【００６４】
▲４▼音高変換処理の動作
次に、図１７を参照して第２実施例による音高変換処理の動作について説明する。前述のステップＳＥ５（図１５参照）を介して本処理が実行されると、ＣＰＵ３は図１７のステップＳＧ１に進み、伴奏パターンデータＡＰＤから現在読み出されている音高ｐｉｔｃｈがベースパートであるか否かを判断する。以下、コードパートの場合とベースパートの場合とに分けて動作説明を進める。
【００６５】
（イ）コードパートの場合
伴奏パターンデータＡＰＤから現在読み出されている音高ｐｉｔｃｈがコードパートであると、ステップＳＧ１の判断結果は「ＮＯ」となり、ステップＳＧ２に処理を進める。ステップＳＧ２では、前述のステップＳＥ４にて検出したルートｃｒｏｏｔおよびタイプｃｔｙｐｅに基づきピッチチェンジテーブルＰＣＴ（図４参照）から対応するピッチ補正値ｐｃｔａｂを読み出すためのテーブル引数ｉｎｄｅｘ（ｃｔｙｐｅ，｜ｐｉｔｃｈ−ｃｒｏｏｔ｜ｍｏｄ　１２）を求める。ここで、ｃｔｙｐｅは検出したタイプ、｜ｐｉｔｃｈ−ｃｒｏｏｔ｜ｍｏｄ　１２は、伴奏パターンデータＡＰＤから読み出した音符データの音高ｐｉｔｃｈとルートｃｒｏｏｔとの差（絶対値）の１２剰余値である。
【００６６】
そして、求めたテーブル引数ｉｎｄｅｘに応じてピッチチェンジテーブルＰＣＴから読み出されるピッチ補正値ｐｃｔａｂ［ｉｎｄｅｘ］を音高ｐｉｔｃｈに加算して音高変換する。
この場合、前述した第１実施例と同様、入力コードのタイプｃｔｙｐｅに対応して、その入力コードのルートｃｒｏｏｔを根音とするコード構成音のうちで伴奏パターンのオリジナル音高ｐｉｔｃｈに近接する音高になるよう伴奏パターン中の各音符データの音高ｐｉｔｃｈをシフトさせる為、伴奏パターンは入力コードに相応しい音高に変換され、しかも入力コードの切り替りで不自然な伴奏音が生成される虞もない。
【００６７】
（ロ）ベースパートの場合
伴奏パターンデータＡＰＤから現在読み出されている音高ｐｉｔｃｈがベースパートであると、ステップＳＧ１の判断結果が「ＹＥＳ」となり、ステップＳＧ３に進み、分数コードであるか否か、すなわち、前述のステップＳＥ４にて検出したルートｃｒｏｏｔとコードベースｃｂａｓｓとが異なるかどうかを判断する。
ルートｃｒｏｏｔとコードベースｃｂａｓｓとが一致する通常のコードの場合には、判断結果が「ＮＯ」となり、ステップＳＧ４に進み、検出されたルートｃｒｏｏｔと伴奏パターンデータＡＰＤから読み出した音符データの音高ｐｉｔｃｈとに基づきピッチチェンジテーブルＰＣＴから対応するピッチ補正値ｐｃｔａｂを読み出すためのテーブル引数ｉｎｄｅｘ（ｃｔｙｐｅ，ｐｉｔｃｈ　ｍｏｄ１２）を求める。ここで、ｃｔｙｐｅは検出したタイプ、ｐｉｔｃｈ　ｍｏｄ１２は、伴奏パターンデータＡＰＤから読み出した音符データの音高ｐｉｔｃｈの１２剰余値（音名に相当）である。
【００６８】
そして、求めたテーブル引数ｉｎｄｅｘに応じてピッチチェンジテーブルＰＣＴから読み出されるピッチ補正値ｐｃｔａｂ［ｉｎｄｅｘ］にルートｃｒｏｏｔを加算し、その値の１２剰余値を音高ｐｉｔｃｈに加算して音高変換する。つまり、前述した第１の従来技術と同様、入力コードのタイプｃｔｙｐｅと伴奏パターンの音高ｐｉｔｃｈとで定まるピッチ補正値ｐｃｔａｂ［ｉｎｄｅｘ］に入力コードのルートｃｒｏｏｔを加算した結果に基づき、伴奏パターンの音高ｐｉｔｃｈをシフトさせるようにしている。この場合、コードが切り替わる時のルートの変化がそのままベース音の音高変化につながるが、ベースパートの音域を逸脱するような音高変化が生じるケースでは、後述するステップＳＧ６以降で音域補正するようになっている。
【００６９】
一方、ルートｃｒｏｏｔとコードベースｃｂａｓｓとが異なる分数コードの場合には、上記ステップＳＧ３の判断結果が「ＹＥＳ」となり、ステップＳＧ５に処理を進める。ステップＳＧ５では、検出されたコードベースｃｂａｓｓから音高ｐｉｔｃｈの音名（ｐｉｔｃｈ　ｍｏｄ　１２）を差し引いた値を、音高ｐｉｔｃｈに加算して音高変換する。
【００７０】
さて、このようにして、伴奏パターンデータＡＰＤのベースパート音が通常コードあるいは分数コードに応じて音高変換されると、ＣＰＵ３はステップＳＧ６に進み、音域補正するか否かを判断する。ユーザ操作によって音域補正しないようスイッチ設定されていると、判断結果は「ＮＯ」となり、なにも処理せずに本処理を完了させるが、音域補正するようスイッチ設定されていれば、判断結果が「ＹＥＳ」となり、ステップＳＧ７〜ＳＧ１０を介して音高ｐｉｔｃｈの音域を補正する。
【００７１】
すなわち、音高変換された音高ｐｉｔｃｈが予め設定される上限を超える場合には、ステップＳＧ７，ＳＧ８において、音高ｐｉｔｃｈが上限を下回るまで１オクターブずつ下げ、一方、音高変換された音高ｐｉｔｃｈが予め設定される下限を超える場合には、ステップＳＧ９，ＳＧ１０において、音高ｐｉｔｃｈが下限を上回るまで１オクターブずつ上げるようになっている。そして、音高ｐｉｔｃｈが予め設定される上限から下限の範囲に収まるように音域補正されると、ステップＳＧ９の判断結果が「ＮＯ」となり、本処理を完了させる。
【００７２】
以上説明したように、第２実施例によれば、人が演奏した曲データなど、発音タイミングが正規のタイミングより進んだり遅れたりする伴奏パターンデータＡＰＤにおいて、正規のタイミングに合わせるように発音タイミングをオフセットさせるので、パターン構成音の発音タイミングが正規のタイミングより進んだり遅れたりする伴奏パターンを使用した場合でも不自然な伴奏音の発生を防止することが可能になっている。
また、第２実施例によれば、伴奏パターン中のベースパートを音高変換する際に分数コードが入力されると、その分数コードのコードベースｃｂａｓｓからベースパートの音高ｐｉｔｃｈの音名（ｐｉｔｃｈ　ｍｏｄ　１２）を差し引いた値を、音高ｐｉｔｃｈに加算して音高変換するようにしたので、入力される分数コードに相応しい伴奏音を発生することが可能になっている。
【００７３】
【発明の効果】
請求項１，７に記載の発明によれば、伴奏パターンの各伴奏音に対応するコードを検出し、伴奏音の音高に近接する検出コードの構成音あるいはコードスケール音の音高になるよう伴奏音の音高を変換し、請求項２，３，８に記載の発明によれば、伴奏パターンの各伴奏音に対応するコードを検出し、伴奏音の音名と検出コードのルートとの音程および検出コードのタイプに応じた音高補正値を発生し、この音高補正値に基づいて伴奏音の音高をシフトさせて変換するので、従来のように、ルートやキーの変化がそのまま伴奏音の音高変化にならず、入力コードの切り替りで不自然な伴奏音の発生を防ぐことができる。
請求項４に記載の発明によれば、所定タイミング毎にゼロリセットするまで、音高補正値を順次累算し、この累算された音高補正値により各伴奏音の音高をシフトさせて変換するので、同じ音高が重なったり続いたりしてコードの性格が確定しない伴奏ライン（伴奏パターン）になることを防止することができる。
請求項５に記載の発明によれば、伴奏パターンを構成する伴奏音の発音タイミングに対するオフセット値を設定でき、各伴奏音の発音タイミングにオフセット値を加算したタイミングに基づいて対応するコードを検出するので、パターン構成音の発音タイミングが正規のタイミングより進んだり遅れたりする伴奏パターンを使用した場合でも不自然な伴奏音の発生を防止できる。
請求項６に記載の発明によれば、伴奏パターンの特定のパート（例えばベースパート）については、その伴奏音に対応する検出コードが分数コードである場合には、伴奏音の音名と検出コードのベースノートとの音程に応じて伴奏音の音高をシフトさせて変換し、分数コードでない場合には、伴奏音の音名および検出コードのタイプに応じた音高補正値を発生し、この音高補正値および検出コードのルートに基づいて伴奏音の音高をシフトさせて変換するので、入力される分数コードに相応しい伴奏音を発生することもできる。
【図面の簡単な説明】
【図１】本発明による第１実施例の構成を示すブロック図である。
【図２】伴奏パターンデータＡＰＤの一構成例を示す図である。
【図３】コード進行データＣＰＤの一構成例を示す図である。
【図４】ピッチチェンジテーブルＰＣＴの一例を示す図である。
【図５】第１実施例によるメインルーチンの動作を示すフローチャートである。
【図６】第１実施例による伴奏生成処理の動作を示すフローチャートである。
【図７】第１実施例によるコード検出処理の動作を示すフローチャートである。
【図８】第１実施例の具体的な動作例を示す図である。
【図９】ピッチチェンジテーブルＰＣＴ２の一例を示す図である。
【図１０】第１実施例の変形例による伴奏生成処理の動作を示すフローチャートである。
【図１１】第２実施例による伴奏パターンデータＡＰＤの一構成例を示す図である。
【図１２】第２実施例によるコード進行データＣＰＤの一構成例を示す図である。
【図１３】第２実施例によるメインルーチンの動作を示すフローチャートである。
【図１４】伴奏パターンと入力コードとの対応にずれが生じて適正な音高変換がなされず不自然な伴奏音を発生させてしまう一例を示す図である。
【図１５】第２実施例による伴奏生成処理の動作を示すフローチャートである。
【図１６】第２実施例によるコード検出処理の動作を示すフローチャートである。
【図１７】第２実施例による音高変換処理の動作を示すフローチャートである。
【符号の説明】
１　パネルスイッチ
２　表示部
３　ＣＰＵ
４　ＲＯＭ
５　データＲＯＭ
６　ＲＡＭ
７　音源
８　サウンドシステム
【図１】
2004069936.tif 000003
【図２】
2004069936.tif 000004
【図３】
2004069936.tif 000005
【図４】
2004069936.tif 000006
【図５】
2004069936.tif 000007
【図６】
2004069936.tif 000008
【図７】
2004069936.tif 000009
【図８】
2004069936.tif 000010
【図９】
2004069936.tif 000011
【図１０】
2004069936.tif 000012
【図１１】
2004069936.tif 000013
【図１２】
2004069936.tif 000014
【図１３】
2004069936.tif 000015
【図１４】
2004069936.tif 000016
【図１５】
2004069936.tif 000017
【図１６】
2004069936.tif 000018
【図１７】
2004069936.tif 000019