(57)【特許請求の範囲】
【請求項１】
演奏者が演奏した演奏データを入力する入力手段と、
楽曲の演奏データを記憶してその演奏データに応じた自動演奏を行うと共に、前記入力手段により入力された演奏データに応じて自動演奏の演奏位置を変更する自動演奏手段と、
前記入力手段に演奏データが入力された場合に、その入力された演奏データに基づいて、前記自動演奏の変更先の候補となる演奏位置を前記楽曲の演奏データから検索する検索手段と、
その検索手段により検索された前記変更先の候補である演奏位置を使用して前記自動演奏の変更先の演奏位置を決定する決定手段と、
その決定手段により決定された変更先の演奏位置へ前記自動演奏手段による自動演奏の演奏位置を変更する変更手段とを備え、
前記決定手段は、
前記自動演奏手段による自動演奏の現在の演奏位置を基準とする予め定められた第１範囲内に、前記検索手段により検索された変更先の候補である演奏位置が存在する場合には、その第１範囲内に存在する演奏位置を前記変更先の候補から除外する除外手段と、
その除外手段により前記第１範囲内に存在する演奏位置を前記変更先の候補から除外した結果、前記変更先の候補である演奏位置が存在しなくなった場合には、前記変更先の演奏位置の決定を中止して前記自動演奏手段による現在の自動演奏を継続させる継続手段とを備えていることを特徴とする電子楽器の演奏位置検索装置。
【請求項２】
前記決定手段は、
前記検索手段により検索された前記変更先の候補である演奏位置が前記第１範囲外にある場合には、その変更先の候補である演奏位置から１の演奏位置を選択する選択手段を備え、
その選択手段により選択された１の演奏位置を前記自動演奏の変更先の演奏位置に決定するものであることを特徴とする請求項１記載の電子楽器の演奏位置検索装置。
【請求項３】
前記選択手段は、
前記検索手段により検索された前記変更先の候補である演奏位置が前記第１範囲外に複数存在する場合に、その第１範囲外に存在する複数の演奏位置から、前記自動演奏の現在の演奏位置よりも以前の演奏位置に存在する演奏位置を抽出する抽出手段と、
その抽出手段により抽出された前記変更先の候補である演奏位置から、前記自動演奏の現在の演奏位置に対して最も近くに存在する演奏位置を選択して前記１の演奏位置とする第１選択手段とを備えていることを特徴とする請求項２記載の電子楽器の演奏位置検索装置。
【請求項４】
前記第１選択手段は、
選択した１の演奏位置を基準としてその基準よりも以前の演奏位置となる予め定められた第２範囲内に、前記変更先の候補である演奏位置が他に存在するかを判定する範囲判定手段と、
その範囲判定手段により前記変更先の候補である演奏位置が他に前記第２範囲内に存在すると判定された場合に、前記他に存在する演奏位置から、前記選択した１の演奏位置に対して以前且つ最も近くに存在する演奏位置を、前記選択した１の演奏位置に代えて新たに再選択する再選択手段と、
その再選択手段により新たな演奏位置が再選択された場合に、その再選択された新たな演奏位置を前記選択した１の演奏位置として前記範囲判定手段による判定を再実行させる再実行手段と、
その再実行手段による再実行の後に、前記範囲判定手段により前記変更先の候補である演奏位置が他に前記第２範囲内に存在しないと判定された場合に、前記再選択手段により再選択されている新たな演奏位置を前記選択した１の演奏位置に決定する最終決定手段とを備えていることを特徴とする請求項３記載の電子楽器の演奏位置検索装置。
【請求項５】
前記選択手段は、
前記検索手段により検索された前記変更先の候補である演奏位置が前記第１範囲外に複数存在する場合に、その第１範囲外に存在する複数の演奏位置の全てが前記自動演奏の現在の演奏位置よりも以後の演奏位置であるかを判定する以後判定手段と、
その以後判定手段により前記複数の演奏位置の全てが前記自動演奏の現在の演奏位置よりも以後の演奏位置であると判定された場合に、前記変更先の候補である複数の演奏位置から、前記自動演奏の現在の演奏位置に対して最も近くに存在する演奏位置を選択して前記１の演奏位置とする第２選択手段とを備えていることを特徴とする請求項２から４のいずれかに記載の電子楽器の演奏位置検索装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、電子楽器等に搭載される演奏位置検索装置に関するものである。
【０００２】
電子楽器で楽曲を演奏する場合に、演奏者の演奏に自動的に伴奏を追従させる自動演奏装置が知られている。ここで追従とは、演奏者が演奏している曲の位置を検出し、その演奏に一致した伴奏等をその演奏のテンポに合わせて自動演奏することである。したがって、演奏者が演奏した演奏情報から即座かつ正確に、曲のどの位置を演奏しているかを検索する必要がある。
【０００３】
【従来の技術】
演奏者が演奏している曲の位置を検索する方法として従来知られているものは、演奏者が演奏した最新の複数の楽音（音符）の列（ここでは音符列という）について、楽譜上の音符列とその各音符の音高や音長を曲の初めから逐一比較していき、演奏した音符列と楽譜上の音符列が一致したところを演奏位置とする方法がある。
【０００４】
【発明が解決しようとする課題】
従来の方法は、演奏者が演奏する毎に（例えば押鍵する毎に）、その演奏した音符列と楽譜上の音符列を曲の初めから比較照合しなければならないため、検索速度が遅く、また、一致する箇所が曲の中に複数ある場合などにはどこを一致箇所として決定するかなどの判断等において正確さにも欠けていた。
【０００５】
本発明はかかる問題点に鑑みてなされたものであり、演奏者等が現在演奏している楽曲中の位置を迅速に且つより正確に検索できるようにすることを目的とする。
【０００６】
【課題を解決するための手段及び作用】
この目的を達成するために、請求項１記載の電子楽器の演奏位置検索装置は、演奏者が演奏した演奏データを入力する入力手段と、楽曲の演奏データを記憶してその演奏データに応じた自動演奏を行うと共に、前記入力手段により入力された演奏データに応じて自動演奏の演奏位置を変更する自動演奏手段と、前記入力手段に演奏データが入力された場合に、その入力された演奏データに基づいて、前記自動演奏の変更先の候補となる演奏位置を前記楽曲の演奏データから検索する検索手段と、その検索手段により検索された前記変更先の候補である演奏位置を使用して前記自動演奏の変更先の演奏位置を決定する決定手段と、その決定手段により決定された変更先の演奏位置へ前記自動演奏手段による自動演奏の演奏位置を変更する変更手段とを備え、前記決定手段は、前記自動演奏手段による自動演奏の現在の演奏位置を基準とする予め定められた第１範囲内に、前記検索手段により検索された変更先の候補である演奏位置が存在する場合には、その第１範囲内に存在する演奏位置を前記変更先の候補から除外する除外手段と、その除外手段により前記第１範囲内に存在する演奏位置を前記変更先の候補から除外した結果、前記変更先の候補である演奏位置が存在しなくなった場合には、前記変更先の演奏位置の決定を中止して前記自動演奏手段による現在の自動演奏を継続させる継続手段とを備えている。
【０００７】
請求項２記載の電子楽器の演奏位置検索装置は、請求項１記載の電子楽器の演奏位置検索装置において、前記決定手段は、前記検索手段により検索された前記変更先の候補である演奏位置が前記第１範囲外にある場合には、その変更先の候補である演奏位置から１の演奏位置を選択する選択手段を備え、その選択手段により選択された１の演奏位置を前記自動演奏の変更先の演奏位置に決定するものである。
【０００８】
請求項３記載の電子楽器の演奏位置検索装置は、請求項２記載の電子楽器の演奏位置検索装置において、前記選択手段は、前記検索手段により検索された前記変更先の候補である演奏位置が前記第１範囲外に複数存在する場合に、その第１範囲外に存在する複数の演奏位置から、前記自動演奏の現在の演奏位置よりも以前の演奏位置に存在する演奏位置を抽出する抽出手段と、その抽出手段により抽出された前記変更先の候補である演奏位置から、前記自動演奏の現在の演奏位置に対して最も近くに存在する演奏位置を選択して前記１の演奏位置とする第１選択手段とを備えている。
【０００９】
請求項４記載の電子楽器の演奏位置検索装置は、請求項３記載の電子楽器の演奏位置検索装置において、前記第１選択手段は、選択した１の演奏位置を基準としてその基準よりも以前の演奏位置となる予め定められた第２範囲内に、前記変更先の候補である演奏位置が他に存在するかを判定する範囲判定手段と、その範囲判定手段により前記変更先の候補である演奏位置が他に前記第２範囲内に存在すると判定された場合に、前記他に存在する演奏位置から、前記選択した１の演奏位置に対して以前且つ最も近くに存在する演奏位置を、前記選択した１の演奏位置に代えて新たに再選択する再選択手段と、その再選択手段により新たな演奏位置が再選択された場合に、その再選択された新たな演奏位置を前記選択した１の演奏位置として前記範囲判定手段による判定を再実行させる再実行手段と、その再実行手段による再実行の後に、前記範囲判定手段により前記変更先の候補である演奏位置が他に前記第２範囲内に存在しないと判定された場合に、前記再選択手段により再選択されている新たな演奏位置を前記選択した１の演奏位置に決定する最終決定手段とを備えている。
【００１０】
請求項５記載の電子楽器の演奏位置検索装置は、請求項２から４のいずれかに記載の電子楽器の演奏位置検索装置において、前記選択手段は、前記検索手段により検索された前記変更先の候補である演奏位置が前記第１範囲外に複数存在する場合に、その第１範囲外に存在する複数の演奏位置の全てが前記自動演奏の現在の演奏位置よりも以後の演奏位置であるかを判定する以後判定手段と、その以後判定手段により前記複数の演奏位置の全てが前記自動演奏の現在の演奏位置よりも以後の演奏位置であると判定された場合に、前記変更先の候補である複数の演奏位置から、前記自動演奏の現在の演奏位置に対して最も近くに存在する演奏位置を選択して前記１の演奏位置とする第２選択手段とを備えている。
【００１１】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。図２には本発明の一実施例としての演奏位置検索装置を搭載した電子楽器が示される。この電子楽器は自動演奏機能を搭載しており、この自動演奏機能は、鍵盤から演奏入力した楽音（以下、音符と記す) の楽譜上の位置を検索し、その演奏位置に合わせてその楽曲の伴奏を自動演奏する。
【００１２】
図２において、１はＣＰＵ（中央処理装置）であって装置全体の制御を司る。２はＲＡＭ（ランダム・アクセス・メモリ）であって、自動演奏データやＣＰＵ１が作成する後述の楽曲データテーブルやハッシュテーブル等を一時的に記憶するメモリ作業領域などとして用いられる。３はＲＯＭ（リード・オンリー・メモリ）であって、ＣＰＵ１の制御用プログラムや各種のテーブルなどを記憶する。４は演奏者がマニュアルで演奏を行うための鍵盤である。５は操作パネルであり、例えば自動演奏を開始するためのスタートボタン５ａ、自動演奏を停止するためのストップボタン５ｂ、自動演奏のテンポ速度を設定するためのテンポ操作子５ｃなどを含む。６は音源であり、ＣＰＵ１から渡された演奏データに基づいて音色やエフェクトを付与しつつ楽音信号を発生する。７は音源６からの楽音信号を増幅する増幅器、８は増幅された楽音信号を電気／音響変換して放音するスピーカである。
【００１３】
この実施例装置では、自動演奏機能が自動演奏する楽曲に関して、以下に述べる楽曲データテーブルとハッシュテーブルを予め作成してＲＡＭ２に記憶しておく。
【００１４】
なお、これらのテーブル中に示される時間に係わる項目はその単位としてティックTickが用いられる。ここで、１ティックTickは、４分音符を１００等分した長さ（すなわち４分音符１つ当たり１００クロックが発生される場合のクロックの間隔）である。１ティックTickの長さは、テンポが１分間あたりの４分音符の数で表現されるから、テンポの値に応じてその物理的な時間長が変わることになる。
【００１５】
いま、例えば図３に楽譜の一部（曲の開始部分）を示す楽曲について楽曲データテーブルを作成するものとする。図４にはこの楽譜中の各音符（各楽音) に応じた楽曲データテーブルが示される。図４中、ポインタAddは当該音符のノートデータが格納されているメモリのアドレスを示すもの、イベント間隔Eventは直前の音符のノートオンから当該音符のノートオンまでの時間間隔（時間単位Tick）、ノート番号NoteNo.は当該音符の音高（音名とノートナンバーで示す）、デュレーションDurationは当該音符のノートオンからオートオフまでの時間（押鍵の持続時間：時間単位Tick）、ベロシティVelは当該音符の打鍵の強さをそれぞれ示す。
【００１６】
ここで、この図４の楽曲データテーブル中では、例えば図３中に示す５番目の和音の音符は、イベント間隔Eventが接近している３つの音（ポインタAddが４、５、６のＣ1、Ａ、Ｆ）として表される。かかる和音については、後述のハッシュテーブルの作成にはその３音の構成音のうちの最高音高（この例ではＣ1 ）のみが用いられる。
【００１７】
図５には図３の音符列について図４の楽音データテーブルに基づいて作成したハッシュテーブルが示される。このハッシュテーブルは、楽譜上の各音符について後述する方法でそれぞれハッシュキー（ハッシュ値）を求めて、その求めたハッシュキー毎にその値に対応する各音符の情報をアイテムとして登録するものであり、このアイテムは当該音符のポインタAddと曲の先頭からの経過時間（時間単位Tick）とからなる。
【００１８】
いま注目している音符（当該音符という）についてのハッシュキーは、当該音符を含む最新に演奏入力した４つの音符（当該音符とその直前に演奏した３つの音符）について次のハッシュ演算をすることで求める。すなわち、当該音符Note(i)のハッシュキーは、当該音符Note(i)を含む直近にノートオンした４つの音符Note(i-3)、Note(i-2)、Note(i-1)、Note(i)のノート番号をそれぞれＮ(i-3)、Ｎ(i-2)、Ｎ(i-1)、Ｎ(i)とし、係数をα1、α2、α3、α4とした場合、次のハッシュ演算
ΣＮ(i-j)・α(1+j)／Ｍ    (但し、Σはｊ＝0から３までの加算）
＝〔Ｎ(i)・α1＋Ｎ(i-1)・α2＋Ｎ(i-2)・α3＋Ｎ(i-3)・α4〕／Ｍ
を行い、その余りをハッシュキー（ハッシュ値）とすることで求める。なお、和音についてはその構成音の最高の音高とする。
【００１９】
ここで、本実施例ではＭ＝１２８と設定することで、ハッシュ値が０〜１２７の１２８通りの値となるようにしており、楽譜中の各音符を０〜１２７のハッシュキーの何れかに区分けできる。このＭの値は経験的に適当な値を選定する。このようにして求めたハッシュキーに対応して、その音符Note(i)の情報をアイテム（ポインタAddと曲の演奏開始からの経過時間からなる）として記憶する。これを曲全体の各音符について行うことで、ハッシュテーブルを作成する。これにより、ハッシュテーブルの各ハッシュキーの欄にはそれぞれ、楽曲の先頭側から時間的に早い順に各音符に対応するアイテムが、その欄の先頭から順に並べられる。
【００２０】
以下にこの実施例装置の動作を説明する。まず、動作概要を説明する。ここでは、演奏者が任意の楽曲の任意のパートを自分が演奏するパートとして選択し、残りのパート（選択されたパート以外のパート）を自動演奏機能で伴奏として自動演奏する。この自動演奏機能は、演奏者が現に演奏している音符列（ここでは直近に押鍵した４音符とする）の位置に常に追従するようにして残りのパートを自動演奏する。そのため、演奏者が楽譜中のどの位置を鍵盤で演奏しているかを常に検索し、その検索した位置が、自動演奏機能で現に自動演奏中の楽譜の位置からずれた場合には、自動演奏を当該検索した位置にジャンプさせることで、演奏者の演奏位置と自動演奏位置とを一致させる。
【００２１】
具体的には、以下の手順となる。
１．演奏者は演奏しようとする曲を選択する。その曲が複数のパートからなるものとし、その複数のパートのうちから、どのパートを演奏するかも選択する。
２．その選択された曲のパートについて、ＣＰＵ１は前述した方法でハッシュテーブル（検索表）を予め作成し、ＲＡＭ２に記憶しておく。
３．演奏者による演奏が開始されると、演奏者が鍵盤でいま現に演奏入力している音符（ノートオンデータ）を含む直近の４つの音符の列について、前述のハッシュ演算を行ってハッシュキーを求め、その求めたハッシュキーを索引に用いてハッシュテーブルを検索し、そのハッシュキーに対応する音符のアイテム（１または複数ある）を求める。
４．求めたアイテムに基づいて、演奏者が現に演奏している楽譜上の位置を推定し、その位置を自動演奏のジャンプ先として決め、自動演奏をその位置にジャンプさせて自動演奏を演奏者の演奏位置に追従させつつ続行する。
【００２２】
以下、上述の動作の詳細な手順を図６、図７、図８のフローチャートを参照して説明する。
【００２３】
まず、図６はティックタイマ割込み処理を示すものであり、このティックタイマ割込み処理により自動演奏機能で楽曲データが自動演奏される。このティックタイマ割込み処理は１ティック時間（Tick）毎の一定時間間隔でＣＰＵ１に割込みがかけられて実行される。この処理のために、最新の音符のノートオンからの経過時間（以下、イベント時刻Event  Tickと称する) を計時するためのイベントタイマがあり、このイベントタイマは自動演奏機能（シーケンサ）が一定時間間隔（１ティック間隔）でカウントアップし、その都度、シーケンサのポインタAddが指し示す音符のイベント間隔Eventと比較するものとする。
【００２４】
図６において、１ティックTick時間が経過する毎にティックタイマ割込みがかかり、この図６の処理ルーチンが起動する。まず、自動演奏するパートの楽曲データテーブル（図４と同様のもの）を参照して、現在のイベント時刻Event  TickをシーケンスポインタAddが示す音符のイベント間隔Eventと比較する（ステップＳ１１）。両者が不一致の時には、最新に音符をノートオンしてから、その音符に続く次の音符の発音タイミングがまだ到来していないことを意味するので、楽音発生のための処理（ステップＳ１２〜Ｓ１５）を飛び越して、イベント時刻Event  Tickと和音検出時間Timeをそれぞれ１ティックTick時間ずつインクリメントし（ステップＳ１６、Ｓ１７）、次のティックタイマ割込みを待つ。
【００２５】
一方、ステップＳ１１にて両者が一致した時には、自動演奏における次の音符の発音タイミングが到来したことを意味する。よって、楽曲データテーブル中の、シーケンスポインタAdd が示す次に発音する音符の演奏データを取り出して、音源６に送って当該音符を発音開始させる（ステップＳ１２）。その後、シーケンスポインタAddを一つ進め（ステップＳ１３）、イベント時刻Event  Tickを「０」にリセットする（ステップＳ１４）。この「０」リセットにより、イベント時刻Event  Tickは今回新たに発音した音符のノートオン以降の時間経過を計測開始する。
【００２６】
さらに、イベント間隔Eventが「０」か否か調べる（ステップＳ１５）。イベント間隔Eventが「０」であるとは、同時発音される楽音が複数ある和音であることを意味しており、その場合にはステップＳ１２以降の処理を繰り返して複数楽音を同時発音することで和音の発音とする。この後、イベント時刻Event  Tickと和音検出時間Timeを１ティックTick時間ずつインクリメントする（ステップＳ１６、Ｓ１７）。なお、この和音検出時間Timeは、詳しくは後述するが、楽譜中の和音を検出するためのタイマである。
【００２７】
図７には、演奏者の鍵操作によるノートオンがある毎に実行されるノートオン処理が示される。新たな楽音のノートオンがあると、和音検出時間Timeが所定の比較値ΔＴと比較され、Time＞ΔＴか否か判定される（ステップＳ１１）。和音検出時間Timeは、一つ前の音符のノートオン後から１ティックTick時間毎に逐次に更新される値である。よって、このステップＳ１１の処理は、前の音符のノートオンから今回押鍵した音符のノートオンまでの時間間隔が所定の比較値ΔＴ以下か否かをチェックするものであり、前回入力音符と今回入力音符の時間間隔がこの時間間隔ΔＴ以内であれば、２つの音符は互いに和音を構成する構成音の関係にあり、時間間隔ΔＴを超えていれば、２つの音符は和音の構成音ではなく独立の音符であると判断する。
【００２８】
このステップＳ１１で、Time≦ΔＴ、すなわち２つの音は和音の構成音であると判定された場合には、和音処理を行う（ステップＳ１４）。この和音処理では、前回のノートオンの楽音と今回のノートオンの楽音とは互いに和音を構成する構成音であるものとして、前回と今回ノートオンした音符のノートナンバーを比較して、ノートナンバーの高い方を当該和音のノートナンバーとして記憶する。よって、この処理を和音の構成音全部について逐次に行うことで、和音の構成音中の最高音高を当該和音の音高として記憶できる。
【００２９】
ステップＳ１１で、Time＞ΔＴ、すなわち２つの音は和音の構成音でない場合には、最新の４音符（今回のノートオンした音符とその直近にノートオンした３つの音符）についてハッシュ演算を行い、ハッシュキーを求める（ステップＳ１２）。そして、後述する検索処理ルーチンを行う（ステップＳ１３）。この検索処理ルーチンでは、上記最新の４音符が楽譜上のどの位置のものであるかを検索し、その位置が自動演奏機能で演奏中の位置と一致していなかった場合には、自動演奏の演奏位置を上記演奏者が演奏した演奏位置にジャンプさせる処理を行う。
【００３０】
この検索処理（ステップＳ１３）または和音処理（ステップＳ１４）を行った後は、和音検出時間Timeを「０」にリセットし（ステップＳ１５）、このノートオン処理を終了する。
【００３１】
図８には上記の検索処理ルーチンの詳細手順が示される。この検索処理ルーチンは、演奏者の演奏した音符列（最新にノートオンした４つの音符）が楽譜上のどの位置のものであるかを、その音符列について計算で求めたハッシュキーをインデックスにしてハッシュテーブルを検索することで推定し、その推定した楽譜上の位置に自動演奏位置をジャンプさせる処理を行うものである。
【００３２】
上記の求めたハッシュキーでハッシュテーブルを検索する際には、当該ハッシュキーに対応するアイテムとして１または複数のものが求められるが、本実施例では、以下に説明する演奏者のとる動作の音楽的な性格に基づいて、いずれか１つのアイテムを演奏者の演奏している位置として推定する。
【００３３】
具体例を図１を参照して説明する。図１において、自動演奏機能で自動演奏されている楽譜上の現在の位置を現在時刻Cur  Tickとする。この現在時刻Cur  Tickは曲の初めから現在の自動演奏位置までの経過時間（時間単位Tick）である。図１中に〇印で示すものは、演奏者が演奏入力した音符列について計算したハッシュキーをインデックスとしてハッシュテーブルから求めたアイテム（音符）の楽譜上の位置を示すものである。
【００３４】
図１（１）に示すように、演奏者が演奏した音符列について計算したハッシュキーをインデックスとしてハッシュテーブルから求めたアイテムが、現在時刻Cur  Tickから±α（但し、αは１小節の長さとする）以内にある場合には、これらのアイテムを無視して、自動演奏機能が現在自動演奏をしている位置である現在時刻Cur  Tickを演奏者の演奏位置と見なして、自動演奏をジャンプさせることなく続行する。これは、現在時刻Cur  Tickに対して±α程度の位置にあるアイテムは演奏者の演奏タイミングが多少ずれたためなどと考えられるので、自動演奏位置が頻繁にジャンプすることによる音楽的な不自然さを防ぐためである。
【００３５】
一方、図１（２）、図１（３）に示すように、ハッシュテーブルから取り出したアイテムが、現在時刻Cur  Tickよりも時間的にα時間以上前にある場合には、現在時刻Cur  Tickよりも時間的に後ろにアイテムがあってもそのアイテムは無視して、当該時間的に前にあるアイテムを演奏者の演奏位置と推定するようにする。このような推定処理の意味は、演奏者が練習演奏をしている場合を想定したもので、演奏者があるフレーズを繰り返して演奏する場合、現在の演奏位置よりも前にあるフレーズに戻って練習演奏するのが自然であると考えられるからである。
【００３６】
図１（２）に示すケースでは、現在時刻Cur  Tickよりも時間的に前のアイテムを演奏位置として推定する場合においても、現在時刻Cur  Tickの最も近く（±α以内はノイズとして除外）にあるアイテムを、そのアイテムの直前β（但し、βは２小節）時間以内に他のアイテムがないことを条件として、当該アイテムを演奏者の演奏位置と推定し、そのアイテムの位置に自動演奏位置をジャンプさせるものである。このように、現在時刻Cur  Tickに直近のアイテムを演奏者の演奏位置と推定するのは、演奏者があるフレーズを繰り返して練習演奏する場合には、現在の演奏位置からそれほど離れていない所にあるフレーズに戻って練習を繰り返すのが演奏者の動作として自然と考えられるからである。
【００３７】
また、図１（３）は現在時刻Cur  Tickよりも時間的に前のアイテムを演奏位置として推定する場合においても、現在時刻Cur  Tickの最も近く（±α以内はノイズとして除外）にあるアイテムの前のβ（但し、βは２小節）時間以内に他のアイテムがある場合には、それら互いにβ時間以内にあるアイテムのうちの最も前にあるアイテムを演奏者の演奏位置と推定し、そのアイテムの位置に自動演奏位置をジャンプさせるものである。このように、β時間以内にあるアイテムのうちの最も前にあるアイテムを演奏者の演奏位置と推定するのは、かかる場合には楽曲のうちに同じフレーズが何度も繰り返されている曲部分であると考えられ、そのような曲部分について練習する場合には、その繰返しフレーズの最も先頭から演奏練習をするのが演奏者の動作として自然と考えられるからである。
【００３８】
また、図１（４）に示すように、現在時刻Cur  Tickよりも時間的に後にアイテムがある場合には、現在時刻Cur  Tickに最も近く（±α以内はノイズとして除外）にあるアイテムを、演奏者の演奏位置として推定する。
【００３９】
以上の処理を実現する図８の検索処理ルーチンを詳説する。図８においては、以下の変数（パラメータ）が用いられている。
現在時刻Cur  Tick：前述したように、自動演奏機能が自動演奏している現在の位置（曲の先頭からの時間的位置：時間単位Tick）である。
検索時刻Search  Tick ：ハッシュキーに基づきハッシュテーブルから取り出したアイテム（検索アイテムという) についての曲の先頭からの時間的位置である。
ジャンプ先時刻Jump  Tick ：演奏者の演奏位置として推定されて自動演奏をジャンプさせる先となる位置（曲の先頭からの時間的位置：時間単位Tick）である。
検索アイテムSearch  Item ：検索処理ルーチンがハッシュテーブルから取り出して現在の検索処理の対象としているアイテムである。
マッチアイテムMatch  Item：演奏者の演奏位置として推定されて自動演奏をジャンプさせる先となるアイテムである。
【００４０】
図８において、検索処理ルーチンが開始されると、まずジャンプ先時刻Jump  Tickとして「−∞」を代入する（ステップＳ２０）。次いで、演奏者が最新に演奏した音符列（４つの音符）について演算で求めたハッシュキーに対応する検索結果としてのアイテムがハッシュテーブルにあるかを判定する（ステップＳ２１）。検索対象のアイテム（以下、検索アイテムSearch  Itemと称する）が得られた場合には（複数ある場合には、そのハッシュキーの欄の先頭から順次に一つを選択する）、その検索アイテムSearch  Itemの検索時刻Search  Tickが現在時刻Cur  Tick−αよりも前であるかを判定する（ステップＳ２４）。「現在時刻Cur  Tick±α」以内であれば、図１（１）のケースに相当し、後述するように、この検索アイテムSearch  Itemは無視される。
【００４１】
検索時刻Search  Tickが現在時刻Cur  Tick−αよりも前である場合には、さらに検索時刻Search  Tickが、ジャンプ先時刻Jump  Tick＋βより前か後かを判定する（ステップＳ２５）。これは図１（２）または図１（３）の何れかのケースに相当するかを判定しているものであり、当初はいずれのアイテムを検索アイテムSearch  Itemとしている場合でも、ステップＳ２０において上記のジャンプ先時刻Jump  Tickを「−∞」としているので、ステップＳ２５の判定は、必ず
検索時刻Search  Tick≧ジャンプ先時刻Jump  Tick＋β
となり、よって、ステップＳ２６にて、
マッチアイテムMatch  Item＝検索アイテムSearch  Item
ジャンプ先時刻Jump  Tick＝検索時刻Search  Tick
の処理が行われる。
【００４２】
このステップＳ２６の後に、ステップＳ２１に戻ってハッシュテーブル中に検索結果（アイテム）があるかが再び判定される。ハッシュキーに対応する他のアイテムがハッシュテーブル中にない場合には、ステップＳ２６で設定されたマッチアイテムMatch  Itemが自動演奏のジャンプ先となり、そのジャンプ先時刻Jump  Tickが「０」以下でないことを確認したうえで（ステップＳ２２）、そのマッチアイテムMatch  Itemに自動演奏をジャンプさせる処理を行って（ステップＳ３０）、この検索処理ルーチンを抜け出す。
【００４３】
一方、ハッシュキーに対応する他のアイテム（ハッシュキーの欄の先頭アイテム以降のもの）がハッシュテーブル中に更にある場合には、そのアイテムを次の検索アイテムSearch  Itemとして取り出して前記ステップＳ２４、Ｓ２５の処理を繰り返す。この場合、その検索アイテムSearch  Itemが
検索時刻Search  Tick≧ジャンプ先時刻Jump  Tick＋β
であれば、この新たに検索対象とした検索アイテムSearch  Itemは前述の図１（２）のケースに相当し、この場合には、次に続くステップＳ２６で、この新たな検索アイテムSearch  Itemを設定したマッチアイテムMatch  Itemが自動演奏のジャンプ先に決定されるので、ステップＳ２１、Ｓ２２、Ｓ３０を辿ってこの検索処理ルーチンを抜け出す。
【００４４】
ステップＳ２５で、検索アイテムSearch  Itemが
検索時刻Search  Tick＜ジャンプ先時刻Jump  Tick＋β
であれば、この新たに検索対象とした検索アイテムSearch  Itemは前述の図１（３）のケースに相当し、この場合には、この新たな検索アイテムSearch  Itemは無視される。そして、ハッシュテーブル中に更に他のアイテムがないかを検索する（ステップＳ２１）。これを繰り返すことにより、図１（３）の処理が実現されることになる。
【００４５】
すなわち、このステップＳ２６、Ｓ２７の処理では、対応するハッシュキー欄から楽曲の先頭側から順にアイテムを取り出して検索アイテムSearch  Itemとしたものについて、現在のジャンプ先であるマッチアイテムMatch  Itemよりもβ以内に検索アイテムSearch  Itemがある場合には、その検索アイテムSearch  Itemを無視することで、現在のマッチアイテムMatch  Item（すなわち互いにβ以内にあるアイテム中の最も楽曲の先頭側にあるアイテム）をそのままジャンプ先のアイテムとし、βを超えた場合には、その新たな検索アイテムSearch  Itemが現在時刻Cur  Tickにより近いアイテムであるので、ステップＳ２７に進んで、その検索アイテムSearch  Itemを新たなジャンプ先のマッチアイテムMatch  Itemとするものである。
【００４６】
一方、検索アイテムSearch  Itemの検索時刻Search  Tickが
検索時刻Search  Tick≦現在時刻Cur  Tick−α
であれば、さらに
検索時刻Search  Tick＜現在時刻Cur  Tick＋α
か否か、すなわち、現在時刻Cur  Tick±α以内に検索アイテムSearch  Itemがあるか否かを判定する（ステップＳ２７）。現在時刻Cur  Tick±α以内に検索アイテムSearch  Itemがあれば、図１（１）のケースに相当し、よって、検索アイテムSearch  Itemは無視され、この検索処理ルーチンを抜け出す。
【００４７】
検索時刻Search  Tickが現在時刻Cur  Tick＋αにより時間的に後であれば、図１（４）のケースに相当するので、この場合には、ジャンプ先時刻Jump  Tickが「０」以下でないことを確認のうえ（ステップＳ２８）、検索アイテムSearch  ItemをマッチアイテムMatch  Itemとして設定し（ステップＳ２９）、自動演奏位置をそのマッチアイテムMatch  Itemにジャンプさせたうえで（ステップＳ３０）、この検索処理ルーチンを抜け出す。
【００４８】
本発明の実施にあたっては種々の変形形態が可能である。例えば、上述の実施例では、ハッシュ演算をする対象の楽音列（音符列）を最新に入力した４つの楽音としたが、本発明はこれに限られるものではなく、演算の対象とする楽音の数は複数であればよい。また、その演算対象とする一連の楽音は必ずしも連続しているものである必要はなく、例えば連続している楽音中から一つ置きに抽出した４つの１連の楽音を楽音列として演算の対象にしてもよい。また、ハッシュの演算を行う対象の変数として、上述の実施例では各音符の音高を用いたが、本発明はこれに限られるものではなく、例えば音長や、音高＋音長などとしてもよい。
【００４９】
また、本発明では楽曲中の各楽音を上記実施例のハッシュ演算により検索テーブル中にソートするようにしたが、本発明はこれに限られず、楽音列の情報に変換演算を施すことにより、楽音列の情報が異なるものに対して変換結果が異なるような数学的な演算であれば、本発明に利用することができる。
【００５０】
また、上述の実施例では、演奏者は鍵盤を用いて楽音の演奏データを入力するようにしたが、本発明はこれに限られるものではなく、他の種々の演奏操作子手段が利用可能である。さらには、例えばカラオケ装置のように演奏者の歌唱をマイクロホンで入力し、その歌唱を楽音（音符）データに変化して、その歌唱に追従するようにバックの伴奏を自動演奏するような形態でも本発明を適用することができる。
【００５１】
また、以上の説明では、本発明の単独の製品としての電子楽器に搭載した場合について説明したが、本発明はこれに限られるものではなく、本発明を実現するためのプログラムを電子楽器機能を実現するためのプログラムとともに記録媒体に格納しておき、この記録媒体からパーソナルコンピュータにプログラムをインストールすることで、パーソナルコンピュータを電子楽器として機能させるような利用形態であっても、本発明を実施することができる。
【００５２】
【発明の効果】
請求項１記載の電子楽器の演奏位置検索装置によれば、入力手段により演奏データが入力されたとき、自動演奏手段による自動演奏の現在の演奏位置を基準とする予め定められた第１範囲内に、検索手段により検索された変更先の候補である演奏位置が存在する場合には、除外手段は、その第１範囲内に存在する演奏位置を変更先の候補から除外する。この除外は、変更先の候補である演奏位置が第１範囲内に存在する場合には、その変更先の候補である演奏位置が、自動演奏による現在の演奏位置の近くに存在していることを理由とする（ほとんどずれていないことを理由とする）。このように、第１範囲内に存在する演奏位置を変更先の候補から除外することで、自動演奏の演奏位置が現在の演奏位置とほとんど変わらないにも拘らず、変更手段によって、自動演奏の演奏位置が現在の演奏位置の近くに頻繁に変更されることを防止することができる。よって、入力手段により演奏データが入力された場合に、自動演奏が不自然な音楽となることを防止することができるという効果がある。また、第１範囲内に存在する演奏位置を変更先の候補から除外した結果、変更先の候補である演奏位置が存在しなくなった場合には、継続手段は、変更先の演奏位置の決定を中止して自動演奏手段による現在の自動演奏を継続させる。よって、除外手段による除外により変更先の候補である演奏位置が存在しなくなっても、自動演奏が不自然な音楽となることを防止することができるという効果がある。
請求項２記載の電子楽器の演奏位置検索装置によれば、請求項１記載の電子楽器の演奏位置検索装置の奏する効果に加え、選択手段は、検索手段により検索された変更先の候補である演奏位置が、第１範囲外にある場合には、即ち、自動演奏による現在の演奏位置から比較的遠くに存在する場合には、その変更先の候補である演奏位置から１の演奏位置を選択する。そして、決定手段は、選択手段により選択された１の演奏位置を自動演奏の変更先の演奏位置に決定する。よって、自動演奏による演奏位置が複数の演奏位置に決定されることがないので、入力手段により演奏データが入力された場合に、自動演奏が不自然な音楽となることを防止することができるという効果がある。
請求項３記載の電子楽器の演奏位置検索装置によれば、請求項２記載の電子楽器の演奏位置検索装置の奏する効果に加え、抽出手段は、検索手段により検索された変更先の候補である演奏位置が第１範囲外に複数存在する場合には、その第１範囲外に存在する複数の演奏位置から、自動演奏の現在の演奏位置よりも以前の演奏位置に存在する演奏位置を抽出する。そして、第１選択手段は、抽出手段により抽出された変更先の候補である演奏位置から、自動演奏の現在の演奏位置に対して最も近くに存在する演奏位置を選択して１の演奏位置とする。このように、変更先の候補である演奏位置が第１範囲外に複数存在する場合には、自動演奏の現在の演奏位置よりも以前の演奏位置に存在し、且つ、自動演奏の現在の演奏位置に対して最も近くに存在する演奏位置を１の演奏位置とする。これは、演奏者があるフレーズを繰り返して練習演奏する場合には、自動演奏による現在の演奏位置からそれほど離れていない演奏位置にあるフレーズに戻って練習を繰り返すのが、演奏者の動作として自然であるからである（一般的であるからである）。このように、演奏者として自然である動作に基づいて１の演奏位置を決定することができるので、入力手段により演奏データが入力された場合に、自動演奏が不自然な音楽となることを防止することができるという効果がある。
請求項４記載の電子楽器の演奏位置検索装置によれば、請求項３記載の電子楽器の演奏位置検索装置の奏する効果に加え、範囲判定手段により変更先の候補である演奏位置が他に第２範囲内に存在すると判定されると、再選択手段は、他に存在する演奏位置から、選択した１の演奏位置に対して以前且つ最も近くに存在する演奏位置を、選択した１の演奏位置に代えて新たに再選択する。その後、再実行手段は、再選択手段により再選択された新たな演奏位置を選択した１の演奏位置として範囲判定手段による判定を再実行させる。そして、再実行手段による再実行の後に、範囲判定手段により変更先の候補である演奏位置が他に第２範囲内に存在しないと判定されると、最終決定手段は、再選択手段により再選択されている新たな演奏位置を選択した１の演奏位置に決定する。このように、再実行手段による再実行が行われると、その後に、変更先の候補である演奏位置が他に第２範囲内に存在しないと範囲判定手段により判定されるまで、再選択手段は、繰り返し、選択した１の演奏位置に対して以前且つ最も近くに存在する変更先の候補である演奏位置を、選択された１の演奏位置に代えて新たな演奏位置とする。これにより、最終決定手段により決定される１の演奏位置は、第２範囲内に存在し、且つ、最も以前の演奏位置となる。これは、演奏者の練習演奏により、ある楽曲のうち、同じフレーズが何度も繰り返される曲部分が発生した場合には、そのような曲部分について同じフレーズの最も先頭（最も以前）から演奏練習を行うのが演奏者の動作として自然であるからである（一般的であるからである）。このように、演奏者として自然である動作に基づいて１の演奏位置を決定することができるので、入力手段により演奏データが入力された場合に、自動演奏が不自然な音楽となることを防止することができるという効果がある。
請求項５記載の電子楽器の演奏位置検索装置によれば、請求項２から４のいずれかに記載の電子楽器の演奏位置検索装置の奏する効果に加え、以後判定手段は、検索手段により検索された変更先の候補である演奏位置が第１範囲外に複数存在する場合には、その第１範囲外に存在する複数の演奏位置の全てが自動演奏の現在の演奏位置よりも以後の演奏位置であるかを判定する。そして、以後判定手段により複数の演奏位置の全てが自動演奏の現在の演奏位置よりも以後の演奏位置であると判定された場合には、第２選択手段は、変更先の候補である複数の演奏位置から、自動演奏の現在の演奏位置に対して最も近くに存在する演奏位置を選択して１の演奏位置とする。よって、自動演奏の現在の演奏位置に対して最も近くに存在する演奏位置に自動演奏の演奏位置を変更することができるので、入力手段により演奏データが入力された場合に、自動演奏が不自然な音楽となることを防止することができるという効果がある。
【図面の簡単な説明】
【図１】本発明の一実施例としての電子楽器の演奏位置検索装置における検索規則を説明するための図である。
【図２】本発明の一実施例としての電子楽器の演奏位置検索装置の全体構成を示す図である。
【図３】実施例装置で検索対象に用いる楽曲の楽譜（楽曲の先頭部分）を示す図である。
【図４】図３の楽譜部分の楽曲データテーブルを示す図である。
【図５】実施例の楽曲について求めたハッシュテーブルの例を示す図である。
【図６】実施例装置におけるティックタイマ割込み処理の処理手順を示すフローチャートである。
【図７】実施例装置におけるノートオン入力処理の処理手順を示すフローチャートである。
【図８】実施例装置のノートオン入力処理中の検索処理ルーチンの処理手順を示すフローチャートである。
【符号の説明】
１    ＣＰＵ（中央処理装置）
２    ＲＡＭ（ランダム・アクセス・メモリ）
３    ＲＯＭ（リード・オンリー・メモリ）
４    鍵盤
５    パネル操作子
６    音源
７    増幅器
８    スピーカ
【図１】
0004334096.tif 000002
【図２】
0004334096.tif 000003
【図３】
0004334096.tif 000004
【図４】
0004334096.tif 000005
【図５】
0004334096.tif 000006
【図６】
0004334096.tif 000007
【図７】
0004334096.tif 000008
【図８】
0004334096.tif 000009