(57)【要約】【課題】ユーザーによるコード進行に対し、より適した流れで伴奏音を発音可能な自動伴奏装置を提供する。【解決手段】ＣＰＵ１０１は、ユーザーが鍵盤１０５を操作してコードを指定した場合に、ＲＡＭ１０３に格納されている、ユーザーが過去に行ったコード進行を示すコード進行データを参照し、次にユーザーが指定するコードを予測する。伴奏として発音させるベースパートの楽音は、その予測結果を基に決定し、音源１０６に対して発音を指示することで発音させる。【選択図】      図１
2008268759.tif 000002
【特許請求の範囲】
【請求項１】
演奏操作子群を操作してユーザーが行う演奏に合わせて自動伴奏を行うことが可能な自動伴奏装置において、
伴奏パターンデータを記憶する伴奏パターン記憶手段と、
ユーザーにより入力されたコード進行を示すコード進行データを記憶するデータ記憶手段と、
前記演奏操作子群を操作してユーザーがコードを指定する毎に、前記データ記憶手段に記憶されたコード進行データを参照して、ユーザーが次に指定するコードを予測するコード予測手段と、
前記コード予測手段により予測されたコードを前記演奏操作子群によりユーザーが指定する毎に、当該指定されたコードと前記伴奏パターン記憶手段に記憶された伴奏パターンデータとに基づいて、前記自動伴奏として発音させるべき楽音である伴奏音を順次生成して該自動伴奏を行う自動伴奏手段と、
を具備することを特徴とする自動伴奏装置。
【請求項２】
前記自動伴奏装置はさらに、ユーザーによる同一のコード進行データ入力の回数をカウントし、当該カウント値が所定数に達した際に、前記同一のコード進行データを前記データ記憶手段に記憶させる制御手段を有する、
ことを特徴とする請求項１記載の自動伴奏装置。
【請求項３】
前記コード予測手段は、ユーザーがコードを指定する毎に、当該指定されたコードの順番が、前記データ記憶手段に記憶されたコード進行データにより規定されたコードの順番と一致しているか否か判断し、一致している場合には前記コード進行データにより規定された次の順番のコードを次にユーザーが指定するコードとして予測する、
ことを特徴とする請求項１記載の自動伴奏装置。
【請求項４】
前記伴奏パターン記憶手段に記憶された伴奏パターンデータは、ベースパターンデータを含み、前記自動伴奏手段は、前記演奏操作子群によりユーザーが指定したコードのルート音、前記コード予測手段により予測されたコードのルート音、及びベースパターンデータに基づいて第１及び第２のベース音を生成するベース音発生手段を含む、
ことを特徴とする請求項１記載の自動伴奏装置。
【請求項５】
前記ベース音発生手段は、前記演奏操作子群によりユーザーが指定したコードのルート音を前記第１のベース音とし、前記演奏操作子群によりユーザーが指定したコードのルート音の音高より前記コード予測手段により予測されたコードのルート音の音高が高い場合は前記第１のベース音より低い音高の楽音を前記第２のベース音とし、該予測されたコードのルート音の音高が低い場合は前記第１のベース音より高い音高の楽音を前記第２のベース音とする、
ことを特徴とする請求項４記載の自動伴奏装置。
【請求項６】
前記ベースパターンデータは、前記第１のベース音の発生を指示する第１のイベントデータ、前記第２のベース音の発生を指示する第２のイベントデータを含み、前記ベースパターンデータの最後尾に前記第２のイベントデータを配置し、それ以外は前記第１のイベントデータを配置した、
ことを特徴とする請求項５記載の自動伴奏装置。
【請求項７】
演奏操作子群を操作してユーザーが行う演奏に合わせて自動的に伴奏を行う自動伴奏装置として用いることが可能なコンピュータに、
ユーザーにより入力されたコード進行を示すコード進行データをデータ記憶手段に記憶するデータ記憶機能と、
前記演奏操作子群を操作してユーザーがコードを指定する毎に、前記記憶手段に記憶されている、ユーザーにより入力されたコード進行を示すコード進行データを参照して、ユーザーが次に指定するコードを予測するコード予測機能と、
前記コード予測機能により予測されたコードを前記演奏操作子群によりユーザーが指定する毎に、当該指定されたコードと伴奏パターン記憶手段に記憶された伴奏パターンデータとに基づいて、前記伴奏として発音させるべき楽音である伴奏音を順次生成して自動伴奏を行う自動伴奏機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演奏操作子群を操作してユーザーが行う演奏に合わせて自動伴奏を行うための技術に関する。
【背景技術】
【０００２】
従来から、伴奏パターンデータを予め用意し、この伴奏パターンを予め定められた速度で読み出し、この読み出された伴奏パターンに基づいた伴奏音を発生させる自動伴奏装置が知られている。
【０００３】
その伴奏パターンデータは、通常リズム、及びベースなどの複数パートの伴奏を行える１〜数小節ほどの長さのパターンデータである。ユーザーは、その自動伴奏装置による伴奏に合わせてメロディのみを演奏するだけで、本格的な演奏を楽しむことができるようになる。
【０００４】
従来の自動伴奏装置では、リズムパートのみは、それを構成するリズムパターンに基づいてそのまま発音させるが、コード及びベースパートにおいては、ユーザーの演奏を反映させることができるように構成されている場合が多い。つまり、コード用の伴奏パターン及びベース用の伴奏パターンは、複数の音高を指定するイベントの羅列からなり、このイベントが所定のタイミングで読み出されると、コードパートを構成するコード音の場合は、鍵盤等の演奏操作子群を操作してユーザーが任意に指定したコードのルート及びコード種に基づいて、この読み出された音高を変更してコード音として発音するようにしている。またベースパートを構成するベース音の場合は、その音高は入力されたコードのルートを表わす音高としている場合が多い。
【０００５】
このような構成であれば、確かに生成される伴奏音は、１〜数小節ほどの長さの伴奏用のパターンを繰り返し読み出すような構成でも、伴奏音に単調さがなく、かつユーザーの演奏も反映させることができる。
【０００６】
しかしながら、ユーザーがどの種のコードをどの順序で入力するか、つまり入力されるコード進行データによって生成される伴奏音に不具合が生じる可能性がある。そのひとつがベースラインの繋がりの問題である。ベースラインは、演奏の低音部を構成するものであり、基本的にはあまり変動しないのが好ましく、たとえ変動したとしても、その変動は急激なものでなく、その前のベースラインから滑らかに繋がるようにすることが望ましい。
【０００７】
例えばコードがＣからＤｍ（ルート名の後にコードの種類を示すシンボルを付した表記法である。メジャーを示すＭは略記している）に進む場合、ベースラインはＣ→Ｃ＃→Ｄと進めるときれいな繋がりになることが多い。しかしながら、ユーザー、特に初心者等は、こうしたベース音の特性についての知識が乏しく、どのようにコードを進行させるかは予め予測して演奏することができない。このようなことから、ユーザー入力による任意のコード進行に対し、より適した流れで伴奏音を発音できるようにすることも重要と考えられる。
【特許文献１】特許第２５８０９５０号公報
【特許文献２】実開平６−１６９９６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明の課題は、ユーザーによるコード進行に対し、より適した流れで伴奏音を発音可能な自動伴奏装置を提供することにある。
【課題を解決するための手段】
【０００９】
本発明の自動伴奏装置は、演奏操作子群を操作してユーザーが行う演奏に合わせて自動伴奏を行うことが可能な自動伴奏装置において、伴奏パターンデータを記憶する伴奏パターン記憶手段と、ユーザーにより入力されたコード進行を示すコード進行データを記憶するデータ記憶手段と、前記演奏操作子群を操作してユーザーがコードを指定する毎に、前記データ記憶手段に記憶されたコード進行データを参照して、ユーザーが次に指定するコードを予測するコード予測手段と、前記コード予測手段により予測されたコードを前記演奏操作子群によりユーザーが指定する毎に、当該指定されたコードと前記伴奏パターン記憶手段に記憶された伴奏パターンデータとに基づいて、前記自動伴奏として発音させるべき楽音である伴奏音を順次生成して自動伴奏を行う自動伴奏手段と、を具備することを特徴とする。なお、前記自動伴奏装置はさらに、ユーザーによる同一のコード進行データ入力の回数をカウントし、当該カウント値が所定数に達した際に、前記同一のコード進行データを前記データ記憶手段に記憶させる制御手段を有することが望ましい。
【００１０】
また、前記コード予測手段は、ユーザーがコードを指定する毎に、当該指定されたコードの順番が、前記データ記憶手段に記憶されたコード進行データにより規定されたコードの順番と一致しているか否か判断し、一致している場合には前記コード進行データにより規定された次の順番のコードを次にユーザーが指定するコードとして予測することが望ましい。
【００１１】
そして、前記伴奏パターン記憶手段に記憶された伴奏パターンデータは、ベースパターンデータを含み、前記自動伴奏手段は、前記演奏操作子群によりユーザーが指定したコードのルート音、前記コード予測手段により予測されたコードのルート音、及びベースパターンデータに基づいて第１及び第２のベース音を生成するベース音発生手段を含むことが望ましい。
【００１２】
また、前記ベース音発生手段は、前記演奏操作子群によりユーザーが指定したコードのルート音を前記第１のベース音とし、前記演奏操作子群によりユーザーが指定したコードのルート音の音高より前記コード予測手段により予測されたコードのルート音の音高が高い場合は前記第１のベース音より低い音高の楽音を前記第２のベース音とし、該予測されたコードのルート音の音高が低い場合は前記第１のベース音より高い音高の楽音を前記第２のベース音とすることが望ましい。
【００１３】
さらに、前記ベースパターンは、前記第１のベース音の発生を指示する第１のイベントデータ、前記第２のベース音の発生を指示する第２のイベントデータを含み、前記ベースパターンデータの最後尾に前記第２のイベントデータを配置し、それ以外は前記第１のイベントデータを配置することが望ましい。
【００１４】
本発明の自動伴奏処理のプログラムは、演奏操作子群を操作してユーザーが行う演奏に合わせて自動的に伴奏を行う自動伴奏装置として用いることが可能なコンピュータに、ユーザーにより入力されたコード進行を示すコード進行データをデータ記憶手段に記憶するデータ記憶機能と、前記演奏操作子群を操作してユーザーがコードを指定する毎に、前記記憶手段に記憶されている、ユーザーにより入力されたコード進行を示すコード進行データを参照して、ユーザーが次に指定するコードを予測するコード予測機能と、前記コード予測機能により予測されたコードを前記演奏操作子群によりユーザーが指定する毎に、当該指定されたコードと伴奏パターン記憶手段に記憶された伴奏パターンデータとに基づいて、前記伴奏として発音させるべき楽音である伴奏音を順次生成して自動伴奏を行う自動伴奏機能と、を実現させる。
【発明の効果】
【００１５】
本発明では、演奏操作子群を操作してユーザーがコードを指定した場合に、ユーザーにより入力されたコード進行を示すコード進行データを参照して、ユーザーが次に指定するコードを予測し、その予測結果を基に、自動伴奏として発音させるべき楽音である伴奏音を決定して発音させる。このため、ユーザーによるコード進行に対し、より適した流れで伴奏音を発音させることができる。その伴奏音の決定に、自動伴奏を自動的に行うための伴奏パターンデータ（ベースパターンデータ）で指定されている伴奏音間の音高変化を反映させた場合には、その決定をより適切に行えるようになる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施の形態による自動伴奏装置を搭載した電子楽器の構成図である。
その電子楽器は、図１に示すように、楽器全体の制御を行うＣＰＵ１０１と、ＣＰＵ１０１が実行するプログラムや自動伴奏用の各種伴奏データ（伴奏パターンデータ）、及び各種制御用データを格納したＲＯＭ１０２と、ＣＰＵ１０１がワークに用いるＲＡＭ１０３と、各種スイッチを有するスイッチ（ＳＷ）群１０４と、ユーザーが演奏するための鍵盤（演奏操作子群）１０５と、ＣＰＵ１０１の指示に従って楽音発音用の波形データを生成する音源１０６と、その音源１０６が出力する波形データをアナログの波形信号（オーディオ信号）に変換し、音声出力するための発音回路１０７と、を備えた構成となっている。ＲＡＭ１０３は不揮発性化されたものである。
【００１７】
本実施の形態による自動伴奏装置は、スイッチ群１０４を介したユーザーの指示に応じて、ＲＯＭ１０２、及びＲＡＭ１０３に格納されたデータを参照し、ユーザーの鍵盤１０５への操作により指定のコードを自動伴奏できるようになっている。
【００１８】
図２は、ＲＯＭ１０２に格納された伴奏データを説明する図である。図２に示すように、ＲＯＭ１０２には伴奏データエリアが確保され、そのエリアに複数の伴奏データが格納されている。図２中「伴奏データ（１）」のように「伴奏データ」の後に括弧書きで付した「（１）」は、その伴奏データに割り当てられた伴奏番号が１であることを示している。
【００１９】
上記伴奏番号は、伴奏のカテゴリに対して割り当てた識別情報である。同じカテゴリで１つ以上の自動伴奏を行えるようにしており、その自動伴奏用のデータがエレメントデータであり、図２中「エレメント（１）」のように表記している。「エレメント」の後に括弧書きで付した「（１）」はエレメント番号である。それにより自動伴奏に用いるエレメントデータは、伴奏番号、及びエレメント番号の２つの番号で指定するようになっている。
【００２０】
エレメントデータ自体は、図２に示すように、リズム、コード、及びベースの各パートのパターンデータから構成されている。ベースパターンデータは、処理タイミングを示すタイムデータ、及びそのタイムデータが処理タイミングを示すイベント内容を示すイベントデータ（以降それらをまとめて「楽音データ」と呼ぶ）をまとめ、そのまとめたデータを発生させるべきタイミングが早いほうから順に並べた形の構成となっている。タイムデータは、直前のガイド表示データを処理してからの時間（デルタタイム）を示すデータである。図２に表記の「ｒｏｏｔ１」及び「ｒｏｏｔ２」は、楽音を発生させるイベントデータの一種であり、ベース音発音に用いられる音高を指定するものである。そのタイムデータ、及びイベントデータはそれぞれ１アドレスに格納されているものと想定する。
【００２１】
図２には、音高データとして「ｒｏｏｔ１」及び「ｒｏｏｔ２」の２つのみを表記している。これは、ベースパート（ライン）では、発音させる楽音の音高を変化させることが少ないからである。そのような傾向があることから、「ｒｏｏｔ１」及び「ｒｏｏｔ２」はそれぞれ、第１音高、及び第２音高とも呼ぶことにする。音高データについては、ルート名の他に、音高番号、ノート番号とも呼ぶことにする。
【００２２】
上記伴奏番号、及びエレメント番号を入力できるように、スイッチ群１０４は、伴奏番号入力用の伴奏番号スイッチ、及びエレメント番号スイッチを備えている。自動伴奏のスタート／ストップを指示するために、スタート／ストップスイッチを備えている。
【００２３】
伴奏番号スイッチ、及びエレメント番号スイッチは、任意の番号を入力できるように複数、存在する。しかし、それらのスイッチは専用に用意しなくとも良い。それらのスイッチは共に、機能の割り当てを変更するテンキーで代用しても良い。しかし、ここでは混乱を避けるため、それらのスイッチは全て実在しているとの前提で説明することとする。
【００２４】
コードパターンデータによるコードの発音は、ユーザーがコードを指定していない間、行うようにしている。ユーザーがコードを指定した場合には、その以降、ユーザーが指定したコードを発音させるようにしている。それにより、ユーザーは所望のコード進行を行えるようになっている。
【００２５】
コード指定は、鍵盤１０５に割り当てられた伴奏鍵域への押鍵により行われる。その押鍵は、実際にコードを発音させるためのものであっても良いが、予め定めた指定方法により行うものであっても良い。このようなことから、コード指定の仕方については具体的には言及しないこととする。
【００２６】
ユーザーが所望のコード進行を行えることから、ベースパートで発音させる楽音（伴奏音）は、そのコード進行に合うように、必要に応じて変更するようにしている。しかし、実際に行わせるコード進行を事前に知ることはできない。このため本実施の形態では、ユーザーが過去に行ったコード進行を示すデータ（コード進行データ）を保存し、そのコード進行を参照して、ユーザーが次に指定するコードを予測し、その予測結果に応じて、発音させる伴奏音の音高を決定するようにしている。
【００２７】
図３は、ＲＡＭ１０３に格納されるコード予測用のデータを示す図である。図３に示すようにＲＡＭ１０３には、コードバッファエリア、コード比較エリア、及びコード確定エリアを持つコード学習エリアが確保されている。コードバッファエリアは、現在、演奏中のユーザーが実際に指定したコードを示すコードデータを順次、格納するためのエリアである。図中の「ＫＥＹＲＯＯＴ」「ＣＯＤＥ」は、それぞれルートの音高を示すルート名、コードの種類を示すコード名を表している。そのコードデータをコード進行に沿って並べたのがコード進行データである。各コードデータはそれぞれ異なるエリアに格納され、図中に表記の「（ｍ＝０エリア）」等は、値が０の変数ｍによって指定されることを示している。これは他の図でも同じである。
【００２８】
図４は、コード比較エリアの構成を説明する図である。このエリアは、ユーザーが過去に指定したコード進行を示すコード進行データの保存用のものである。ユーザーが指定した伴奏番号毎にコード進行データを格納するために、図中「伴奏番号（Ａ）＝０エリア」等と表記の伴奏番号（Ａ）エリアが確保されている。その各エリアには、「エレメント番号（Ｅ）＝０エリア」等と表記のエレメント番号（Ｅ）エリアが確保され、そのエリアには、一致カウンタＣが格納されると共に、確保されたコードエリア内にコード進行データが格納される。「伴奏番号」の後に表記の「（Ａ）」及び「エレメント番号」の後に表記の「（Ｅ）」はそれぞれ、変数Ａ及びＥによって指定されるエリアであることを表している。
【００２９】
上記一致カウンタＣは、ユーザーが同じコード進行を行った回数の計数値である。そのような回数を計数することにより、本実施の形態では、所定値以上、繰り返しユーザーが行ったコード進行のデータをコード予測に用いるようにしている。これは、より高いコード予測精度を実現させるためである。そのコード予測に用いるコード進行データ保存用に確保したエリアがコード確定エリアである。そのエリアは、図５に示すように、エレメント番号（Ｅ）エリアに一致カウンタＣが格納されていないことを除き、コード比較エリアと同じ構成となっている。
【００３０】
ユーザーが実際に行ったコード進行を参照することにより、次に指定されるコードをより正確に予測できるようになる。そのため、ユーザーが行うと予測されるコード進行に合った伴奏音の音高決定もより適切に行えるようになる。その結果、ユーザーにとってはより所望の形で自動伴奏との合奏を行えることとなる。
【００３１】
ＣＰＵ１０１は、ＲＯＭ１０２に格納されたプログラムを実行することにより、以下のような処理を行い、自動伴奏、更にはその自動伴奏との合奏を実現させる。図６〜図１５に示す各種処理のフローチャートを参照して具体的に説明する。
【００３２】
図６は、全体処理のフローチャートである。始めに図６を参照して、全体処理について詳細に説明する。
先ず、ステップＳＡ１では、電源の投入によりイニシャライズを行う。続くステップＳＡ２では、スイッチ群１０４へのユーザーの操作に対応するためのスイッチ処理を実行する。それ以降は、ステップＳＡ３で鍵盤１０５へのユーザーの操作に対応するための鍵盤処理、ステップＳＡ４で自動伴奏を行うための伴奏処理、ステップＳＡ５でユーザーが行ったコード進行に応じた対応を行うための学習処理、及びステップＳＡ６でその他の処理を実行してから、上記ステップＳＡ２に戻る。それにより、電源がオンされている間は、ステップＳＡ２〜６で形成される処理ループを繰り返し実行することにより、ユーザーの指示に対応するように動作する。不図示のＭＩＤＩ端子を介したＭＩＤＩデータの送受信等は、ステップＳＡ６の処理を実行することで実現される。
【００３３】
以降は、上記全体処理内で実行されるサブルーチン処理について詳細に説明する。
図７は、上記ステップＳＡ２として実行されるスイッチ処理のフローチャートである。サブルーチン処理では始めに図７を参照して、そのスイッチ処理について詳細に説明する。
【００３４】
先ず、ステップＳＢ１では、上記伴奏番号スイッチへの操作に対応するための伴奏番号スイッチ処理を実行する。その後は、スタート／ストップスイッチ、エレメント番号スイッチ、及びその他のスイッチへの操作に対応するための処理をそれぞれステップＳＢ２〜４で実行してから、このスイッチ処理を終了する。
【００３５】
上記ステップＳＢ１〜３では、それぞれ以下のようなサブルーチン処理が実行される。図８〜図１１を参照して詳細に説明する。
図８は、上記ステップＳＢ１として実行される伴奏番号スイッチ処理のフローチャートである。図７に示すスイッチ処理内で実行されるサブルーチン処理では、始めに図８を参照して、その伴奏番号スイッチ処理について詳細に説明する。
【００３６】
上述したように板東番号スイッチは複数、存在し、１つ以上の伴奏番号スイッチを操作して伴奏番号の入力を行うようになっている。しかしここでは便宜的に、そのような操作に対応する部分についての詳細な説明は省略することとする。
【００３７】
先ず、ステップＳＣ１では、変数ＳＴＦの値が０か否か判定する。その変数ＳＴＦは、自動伴奏中か否かを管理するための変数であり、代入された値としての１は自動伴奏中であることを示し、値としての０は自動伴奏中でないことを示している。このことから、自動伴奏中でない場合、判定はＹＥＳとなってステップＳＣ２に移行し、そうでない場合には、判定はＮＯとなり、ここで伴奏番号スイッチ処理を終了する。
【００３８】
ステップＳＣ２では、伴奏番号スイッチがＯＮしたか否か判定する。そのスイッチをユーザーが操作した場合、その旨がスイッチ群１０４（の各スイッチの状態変化を検出する検出回路）からＣＰＵ１０１に通知されることから、判定はＹＥＳとなり、ステップＳＣ３で上記変数Ａに、伴奏番号スイッチへの操作により入力された伴奏番号を代入してから伴奏番号スイッチ処理を終了する。そうでない場合には、判定はＮＯとなり、ここでそのスイッチ処理を終了する。
【００３９】
図９は、図７に示すスイッチ処理内でステップＳＢ３として実行されるエレメント番号スイッチ処理のフローチャートである。次に図９を参照して、そのスイッチ処理について詳細に説明する。
【００４０】
先ず、ステップＳＤ１では、エレメント番号スイッチがＯＮしたか否か判定する。そのスイッチをユーザーが操作した場合、判定はＹＥＳとなり、ステップＳＥ２で上記変数Ｅに、そのスイッチへの操作により入力されたエレメント番号を代入した後、このスイッチ処理を終了する。そうでない場合には、判定はＮＯとなり、ここでこの設定スイッチ処理を終了する。
【００４１】
図１０及び図１１は、図７に示すスイッチ処理内でステップＳＢ２として実行されるスタート／ストップスイッチ処理のフローチャートである。次に図１０及び図１１を参照して、そのスイッチ処理について詳細に説明する。
【００４２】
先ず、ステップＳＥ１では、スタート／ストップスイッチがＯＮしたか否か判定する。そのスイッチをユーザーが操作した場合、判定はＹＥＳとなり、ステップＳＥ２で変数ＳＴＦの値を反転、つまりその値が１であれば０、その値が０であれば１に更新してからステップＳＥ３に移行する。そうでない場合には、判定はＮＯとなり、ここでスタート／ストップスイッチ処理を終了する。
【００４３】
ステップＳＥ３では、変数ＳＴＦの値が１か否か判定する。その値が０であった場合、判定はＮＯとなり、ステップＳＥ４で音源１０６に全ての楽音（ここではリズム音を含む）の消音を指示し、更にステップＳＥ５で時間計時用のタイマインタラプト処理の実行を禁止した後、スタート／ストップスイッチ処理を終了する。そうでない場合には、判定はＹＥＳとなってステップＳＥ６に移行する。
【００４４】
上記タイマインタラプト処理は、タイムデータの最小時間分解能に相当する時間間隔で発生する割り込み信号により起動されるものであり、起動される度に、タイムデータの値が代入される変数Ｔの値をデクリメントするようになっている。従って、その０の値は処理タイミングの到来を示している。その実行禁止解除は、その割り込み信号を有効にすることで行われる。逆に禁止は、その割り込み信号を無効にすることで行われる。
【００４５】
ステップＳＥ６では、ＲＯＭ１０２に確保された伴奏データエリアから、変数Ａ及びＥの各値で指定されるエレメントデータを構成する、リズムパターンデータ（図中「リズムパターン［Ａ］［Ｅ］」と表記）の読み出し開始処理を実行する。続くステップＳＥ７では、そのエレメントデータを構成する、コードパターンデータ（図中「コードパターン［Ａ］［Ｅ］」と表記）の読み出し開始処理を実行する。その次に移行するステップＳＥ８では、そのエレメントデータを構成する、ベースパターンデータ（図中「ベースパターン［Ａ］［Ｅ］」と表記）が格納されたエリアの先頭アドレスの値を変数ＡＤＢに代入する。その後は、ステップＳＥ９で変数ＡＤＢの値により指定されるデータを読み出して上記変数Ｔに代入してから図１１のステップＳＥ１０に移行する。
【００４６】
ステップＳＥ１０では、上記変数ｍに０を代入する。次のステップＳＥ１１では、変数ｍの値を用いて、コード確定エリアの変数Ａ及びＥの各値で指定されるエリア内の検索を行う。その次のステップＳＥ１２では、その検索により、そのエリア内に格納されているコードデータを抽出したか否か判定する。変数ｍの値で指定されるエリアにコードデータが格納されていた場合、確定コードがあるとして、判定はＹＥＳとなり、ステップＳＥ１３でそのコードデータ中のルート名を変数ＣＲＯＯＴに代入し、ステップＳＥ１４で変数ＣＦに１を代入してから、このスイッチ処理を終了する。そうでない場合には、判定はＮＯとなり、ここでこのスイッチ処理を終了する。
【００４７】
上記変数ＣＦは、確定コード、つまりコード予測に用いるコード進行データが存在するか否か判定用のものであり、１はそのコード進行データが存在することを示している。そのデータが存在しない場合は、０が代入される。
【００４８】
図６に示す全体処理内で実行されるサブルーチン処理の説明に戻る。
図１２及び図１３は、ステップＳＡ３として実行される鍵盤処理のフローチャートである。次に図１２及び図１３を参照して、その鍵盤処理について詳細に説明する。ここでは便宜的に、自動伴奏中であることを前提とした説明を行う。
【００４９】
先ず、ステップＳＦ１では、鍵盤１０４上の鍵の走査を行う。次のステップＳＦ２では、その走査結果を解析して、走査した鍵で生じた変化を判定する。その変化が何れの鍵でも生じていないと判定した場合、ステップＳＦ６に移行する。押鍵（オン）による変化が生じたと判定した場合には、ステップＳＦ３に移行する。
【００５０】
ステップＳＦ３では、押鍵による変化が生じた鍵が伴奏鍵域のものか否か判定する。その伴奏鍵域の鍵をユーザーが押鍵した場合、判定はＹＥＳとなり、ステップＳＦ４でその鍵に割り当てられた音高を示す音高番号をストアした後、ステップＳＦ６に移行する。そうでない場合には、判定はＮＯとなり、ステップＳＦ５で鍵の押鍵により発音させるべき楽音の発音指示を音源１０６に対して行った後、そのステップＳＦ６に移行する。
【００５１】
ステップＳＦ６では、走査が終了したか否か判定する。鍵盤１０４上の鍵で未走査のものがあった場合、判定はＮＯとなって上記ステップＳＦ１に戻り、未走査の鍵を対象にした走査を行う。そうでない場合には、判定はＹＥＳとなってステップＳＦ９に移行する。
【００５２】
上記ステップＳＦ２において、離鍵（オフ）による変化が生じた鍵が伴奏鍵域のものか否か判定する。その伴奏鍵域の鍵をユーザーが離鍵した場合、判定はＹＥＳとなり、ストアしている、その鍵の音高番号を消去してからステップＳＦ６に移行する。そうでない場合には、判定はＮＯとなり、ステップＳＦ８で鍵の離鍵により消音させるべき楽音の消音指示を音源１０６に対して行った後、そのステップＳＦ６に移行する。
【００５３】
そのステップＳＦ６の判定がＹＥＳとなって移行するステップＳＦ９では、ストアされた音高番号によりコード判定を行う。続くステップＳＦ１０では、そのコード判定によりユーザーが指定のコードを特定できた場合に、そのコード名を変数ＣＯＤＥに代入し、ルート名を変数ＫＥＹＲＯＯＴに代入する。そのような代入を必要に応じて行った後、図１３のステップＳＦ１１に移行する。
【００５４】
ステップＳＦ１１以降では、自動伴奏によりベースパートで発音させる伴奏音の候補を決定するための処理が行われる。
ステップＳＦ１１では、変数ＣＦの値が１か否か判定する。その値が１であった場合、判定はＹＥＳとなってステップＳＦ１４に移行する。そうでない場合には、判定はＮＯとなり、ステップＳＦ１２で変数ＲＯＯＴ１に変数ＫＥＹＲＯＯＴの値を代入し、更にステップＳＦ１３で変数ＲＯＯＴ２に変数ＫＥＹＲＯＯＴの値を代入してから、鍵盤処理を終了する。その変数ＲＯＯＴ１及びＲＯＯＴ２は、伴奏音として発音させる楽音の音高番号の候補が代入される変数である。
【００５５】
ステップＳＦ１４では、変数ＫＥＹＲＯＯＴの値が変数ＣＲＯＯＴの値と等しいか否か判定する。それらの値が等しい場合、判定はＹＥＳとなってステップＳＦ１５に移行する。そうでない場合には、判定はＮＯとなって上記ステップＳＦ１２に移行する。
【００５６】
変数ＣＲＯＯＴには、コード予測に用いるコード進行データ中のコードデータが持つルートの音高番号（ルート名）が代入される。初期値はその先頭に位置するコードデータのものである。このため、変数ＣＲＯＯＴに代入されたルート名（ここでは音高番号と同じものと想定する）に相当するルートを持つコードをユーザーが新たに指定した場合に、ステップＳＦ１４の判定がＹＥＳとなる。それにより本実施の形態では、コード予測に用いるコード進行データのなかで、ユーザーが新たに指定したコードと対応付けられるコードデータの特定を行い、そのコードデータを特定できた場合に、そのコードデータの次に位置するコードデータが示すコードをユーザーが次に指定すると予測するようにしている。そのようにして、高い確率で正確に予測できると期待できるコードのみ、予測を行い、その結果に応じて伴奏音の音高の候補を決定するようにしている。
【００５７】
ステップＳＦ１５では、変数ＣＲＯＯＴの値を変数ＲＯＯＴ１に代入する。次のステップＳＦ１６では、変数Ｐに、変数ｍの値に１を加算して得られる値を代入する。その代入後はステップＳＦ１７に移行して、変数Ｐの値が所定数より大きいか否か判定する。その値が所定数よりも大きい場合、判定はＹＥＳとなり、ステップＳＦ１８で変数Ｐに０を代入してからステップＳＦ１９に移行する。それにより、コード進行データ中で参照するコードデータを先頭から所定数のコードデータに制限する。そうでない場合には、判定はＮＯとなって次にそのステップＳＦ１９に移行する。
【００５８】
ステップＳＦ１９では、コード進行データ（コード確定エリアに格納されている、変数Ａ及びＥの各値で指定されるものである）の先頭から変数Ｐの値番目のコードデータが有するルート名を変数ＣＲＯＯＴに代入する。次のステップＳＦ２０では、変数ＲＯＯＴ１の値が変数ＣＲＯＯＴの値と等しいか否か判定する。変数ＣＲＯＯＴにそれまで代入されていたルート名を有するコードデータが示すコードから、新たにルート名を代入したルート名を有するコードデータが示すコードへの進行が、同じルートで行われる場合、それらの値は等しいことから、判定はＹＥＳとなり、ステップＳＦ２１で変数ＲＯＯＴ２に変数ＲＯＯＴ１の値を代入し、更にステップＳＦ２２で変数ｍの値をインクリメントしてから、この鍵盤処理を終了する。そうでない場合には、判定はＮＯとなってステップＳＦ２３に移行する。
【００５９】
ステップＳＦ２３では、変数ＲＯＯＴ１の値が変数ＣＲＯＯＴの値より大きいか否か判定する。その大小関係が成立している場合、判定はＹＥＳとなり、ステップＳＦ２４で変数ＲＯＯＴ２に、変数ＲＯＯＴ１の値が示す音高（ノート）番号より低い、発音中の楽音のアボイド（回避音）でない最初の音高番号をルート名として代入した後、上記ステップＳＦ２２に移行する。そうでない場合には、判定はＮＯとなり、ステップＳＦ２５で変数ＲＯＯＴ２に、変数ＲＯＯＴ１の値が示す音高（ノート）番号より高い、発音中の楽音のアボイド（回避音）でない最初の音高番号をルート名として代入した後、そのステップＳＦ２２に移行する。
【００６０】
このようにして、コード進行データ中で着目する２つのコード間の進行を想定し、ベースパートで発音させる伴奏音の音高の候補を決定する。図６の全体処理内でステップＳＡ４として実行される伴奏処理では、２つの候補のうちの一方を選択して、伴奏音を発音させる。次にその伴奏処理について、図１４に示すそのフローチャートを参照して詳細に説明する。
【００６１】
先ず、ステップＳＧ１では、変数ＳＴＦの値が１か否か判定する。その値が１であった場合、判定はＹＥＳとなってステップＳＧ２に移行し、そうでない場合には、判定はＮＯとなり、ここで伴奏処理を終了する。
【００６２】
ステップＳＧ２では、リズムパターンデータに従ってリズム音を発音させるためのリズム処理を実行する。続くステップＳＧ３では、コードパターンデータが示すコード、或いはユーザーが指定のコードを発音させるためのコード処理を実行する。その実行後はステップＳＧ４に移行して、変数Ｔの値が０以下か否か判定する。その値が０以下、つまり変数Ｔにタイムデータを代入したベースパターンデータ中の楽音データを構成するイベントデータを処理すべきタイミングが到来した場合、判定はＹＥＳとなり、ステップＳＧ５に移行する。そうでない場合には、判定はＮＯとなり、ここで伴奏処理を終了する。
【００６３】
ステップＳＧ５では、変数ＡＤＢの値をインクリメントして進める。次のステップＳＧ６では、変数ＡＤＢの値で指定されるデータをベースパターンデータ中から読み出し、そのデータの判定を行う。そのデータがタイムデータと判定した場合、ステップＳＧ７に移行して変数Ｔにタイムデータを代入した後、伴奏処理を終了する。読み出すデータが存在しないと判定した場合には、ステップＳＧ８で変数ＡＤＢに再度、先頭アドレスの値を代入し、次のステップＳＧ９で変数ｍに０を代入してからそのステップＳＧ６に戻る。読み出したデータがイベントデータと判定した場合には、ステップＳＧ１０に移行する。
【００６４】
ステップＳＧ１０では、イベントデータ中のルート名が第１音高（図中「ｒｏｏｔ１」と表記）のものか否か判定する。その第１音高のものであった場合、判定はＹＥＳとなり、ステップＳＧ１１で変数ＲＯＯＴ１の値を音高番号とする伴奏音の発音を音源１０６に指示した後、伴奏処理を終了する。そうでない場合には、判定はＮＯとなってステップＳＧ１２に移行する。
【００６５】
ステップＳＧ１２では、イベントデータ中のルート名が第２音高（図中「ｒｏｏｔ２」と表記）のものか否か判定する。その第２音高のものであった場合、判定はＹＥＳとなり、ステップＳＧ１３で変数ＲＯＯＴ２の値を音高番号とする伴奏音の発音を音源１０６に指示した後、伴奏処理を終了する。そうでない場合には、判定はＮＯとなってステップＳＧ１４に移行し、所定の音高、例えばベースパターンデータによって指定される音高の伴奏音の発音を音源１０６に指示した後、この伴奏処理を終了する。
【００６６】
伴奏音は、２つのコード間に複数、発音される。その複数、発音させる伴奏音の音高変化は、ベースパターンデータに沿って行っている。それにより、発音させる伴奏音が違和感を与えないようにさせている。特には図示していないが、伴奏音の発音時間は例えばゲートタイムで管理するようになっており、発音を開始してからゲートタイム分の時間の経過により消音が音源１０６に対して指示される。
【００６７】
上述したように伴奏音の音高を決定して発音させることにより、コード間の繋がりをなめらか、且つ音楽的にすることができる。例えばＣ→Ｆ→Ｃ→Ｆ→Ｇ→Ｃというコード進行を示すコード進行データをコード予測に用いる場合、そのコード間に４つの伴奏音を発音させるのであれば、１番目のＦのときでは、次のコードはＣと予測され、Ｆ→Ｆ→Ｆ→Ｅの順序で伴奏音が発音されることとなる。２番目のＦのときでは、次のコードはＧと予測され、Ｆ→Ｆ→Ｆ→Ｆ＃の順序でＧに向かう上昇フレーズが伴奏音によって発音されることになる。
【００６８】
図１５は、図６に示す全体処理内でステップＳＡ５として実行される学習処理のフローチャートである。最後に図１５を参照して、その学習処理について詳細に説明する。コード確定エリア（図５）に格納されるデータは、この学習処理の実行によって更新される。図１５に示すフローチャートは、変数ＳＴＦの値が１であった場合に実行される部分のものである。
【００６９】
先ず、ステップＳＨ１では、変数ｍの値が０か否か判定する。その値が０であった場合、判定はＹＥＳとなってステップＳＨ２に移行し、コードバッファエリア内の変数ｍの値で指定されるエリアに変数ＣＯＤＥ及びＫＥＹＲＯＯＴの各値をコードデータとしてストアした後、学習処理を終了する。そうでない場合には、判定はＮＯとなってステップＳＨ３に移行する。
【００７０】
ステップＳＨ３では、変数ｍの値で指定されるエリアに既にコードデータが格納されているか否か判定する。そのデータが格納されていない場合、判定はＮＯとなって上記ステップＳＨ２に移行する。そうでない場合には、判定はＹＥＳとなってステップＳＨ４に移行する。
【００７１】
ステップＳＨ４では、コードバッファエリアに格納されたコード進行データを、コード比較エリアの変数Ａ及びＥの各値で指定されるエレメント番号（Ｅ）エリアのデータと比較する。続くステップＳＨ５では、その比較により、一致するものがあったか否か判定する。コードバッファエリアに格納されたコード進行データと一致するものがエレメント番号（Ｅ）エリアに格納されていない場合、判定はＮＯとなってステップＳＨ１０に移行する。そうでない場合には、判定はＹＥＳとなってステップＳＨ６に移行する。
【００７２】
図４では、コード比較エリアのエレメント番号（Ｅ）エリアに１つのコード進行データが格納されている状態を示しているが、そのエリアには必要に応じて複数のコード進行データを格納するようにしている。これはコード確定エリアでも同様である。しかし、混乱を避けるため、上記鍵盤処理の説明は、コード予測に用いるコード進行データは１つのみの想定で行っている。
【００７３】
ステップＳＨ６では、一致するコード進行データが格納されたエリアの一致カウンタＣの値をインクリメントする。次のステップＳＨ７では、そのインクリメント後の値が所定値より大きいか否か判定する。その値が所定値より大きい場合、判定はＹＥＳとなり、一致カウンタＣの値をクリアし、次のステップＳＨ９でそのコード進行データをコード確定エリアの変数Ａ及びＥの各値で指定されるエレメント番号（Ｅ）エリアにストアした後、上記ステップＳＨ２に移行する。そうでない場合には、判定はＮＯとなって次にそのステップＳＨ２に移行する。
【００７４】
一方、ステップＳＨ１０では、コード比較エリアの変数Ａ及びＥの各値で指定されるエレメント番号（Ｅ）エリアに、コードバッファエリアのコード進行データをストアする。次のステップＳＨ１１では、コード進行データをストアしたエリアの一致カウンタＣの値をクリアする。その後は上記ステップＳＨ２に移行する。
【００７５】
このようにして本実施の形態では、ユーザーが同じコード進行を行った回数の値が所定値以上のもののみ、そのコード進行データをコード確定エリアに保存し、コード予測に用いることができるようにしている。
【００７６】
なお、本実施の形態では、変数ＣＲＯＯＴの値と変数ＫＥＹＲＯＯＴの値の一致によりコード予測を行うようにしているが、変数ＫＥＹＲＯＯＴの値に相当するルート名を持つコードデータをコード進行データ中から抽出して、コード予測を行うようにしても良い。その抽出は、リズムパターンデータの再生位置を考慮して行うようにしても良い。コード予測に用いるコード進行データについては、ユーザーが繰り返し行った回数を計数し、その計数結果を考慮して選択するようにしても良い。
【００７７】
上述したような自動伴奏装置を実現させるようなプログラムは、ＣＤ−ＲＯＭ、ＤＶＤ、或いは着脱自在なフラッシュメモリ等の記録媒体に記録させて配布しても良い。公衆網等の通信ネットワークを介して、そのプログラムの一部、若しくは全部を配信するようにしても良い。そのようにした場合には、ユーザーはプログラムを取得して、自動伴奏装置として用いることが可能なコンピュータにロードすることにより、そのコンピュータに本発明を適用させることができる。このことから、記録媒体は、プログラムを配信する装置がアクセスできるものであっても良い。
【図面の簡単な説明】
【００７８】
【図１】本実施の形態による自動伴奏装置を搭載した電子楽器の構成図である。
【図２】ＲＯＭ１０２に格納された伴奏データを説明する図である。
【図３】ＲＡＭ１０３に格納されるコード予測用のデータを示す図である。
【図４】コード比較エリアの構成を説明する図である。
【図５】コード確定エリアの構成を説明する図である。
【図６】全体処理のフローチャートである。
【図７】スイッチ処理のフローチャートである。
【図８】伴奏番号スイッチ処理のフローチャートである。
【図９】エレメント番号スイッチ処理のフローチャートである。
【図１０】スタート／ストップスイッチ処理のフローチャートである。
【図１１】スタート／ストップスイッチ処理のフローチャートである（続き）。
【図１２】鍵盤処理のフローチャートである。
【図１３】鍵盤処理のフローチャートである（続き）。
【図１４】伴奏処理のフローチャートである。
【図１５】学習処理のフローチャートである。
【符号の説明】
【００７９】
１０１    ＣＰＵ
１０２    ＲＯＭ
１０３    ＲＡＭ
１０４    スイッチ群
１０５    鍵盤
１０６    音源
１０７    発音回路
【図１】
2008268759.tif 000003
【図２】
2008268759.tif 000004
【図３】
2008268759.tif 000005
【図４】
2008268759.tif 000006
【図５】
2008268759.tif 000007
【図６】
2008268759.tif 000008
【図７】
2008268759.tif 000009
【図８】
2008268759.tif 000010
【図９】
2008268759.tif 000011
【図１０】
2008268759.tif 000012
【図１１】
2008268759.tif 000013
【図１２】
2008268759.tif 000014
【図１３】
2008268759.tif 000015
【図１４】
2008268759.tif 000016
【図１５】
2008268759.tif 000017