(57)【要約】【課題】  従来の曲演奏装置におけるマイナスワン機能は、複数のパート内で特定のパート全てを発音あるいは消音するだけであり、そのパートに含まれる一部分のみを消音させるようなことはできない。これを実現するためには、消音させるべき部分をひとつひとつ指定する必要があり、曲内に同一または類似の部分が複数箇所存在し、この個所を消音させる場合にも、独立にひとつひとつ指示しなければならず、非常に手間が掛かって煩雑であるという問題があった。【解決手段】  本発明は、予めフレーズを登録しておき、曲データの一部にて構成されるフレーズとこの登録フレーズとの類似度を算出して、所定以上の類似度を有するのフレーズに対しては自動演奏による発音を禁止し、他の音高の楽音は自動演奏するようにしたので、類似する幾つかのフレーズに対して夫々設定しなくて済む。【選択図】  図８
2005208463.tif 000002
【特許請求の範囲】
【請求項１】
複数の音高列で構成される曲データを記憶する曲データ記憶手段と、
所定の音高列で構成されるフレーズデータを生成するフレーズデータ生成手段と、
この生成されたフレーズデータを記憶するフレーズデータ記憶手段と
フレーズデータ記憶手段に記憶されたフレーズデータを構成する音高列と前記曲データ記憶手段に記憶されている曲データを構成する音高列と照合し、当該曲データの中から当該フレーズの音高列と所定値以上の類似関係にある音高列の部分を抽出する抽出手段と、
前記曲データ記憶手段に記憶された曲データを読み出し、対応する楽音の発生を指示する楽音発生指示手段と、
この楽音発生指示手段により読み出された曲データのうち、前記抽出手段により抽出された音高列の部分に対しては楽音の発生指示を行わないように前記楽音発生指示手段を制御する楽音発生制御手段と、
を具備することを特徴とする曲演奏装置。
【請求項２】
前記抽出手段は、前記曲データの各音高列のオクターブを前記フレーズの音高列と同一のオクターブに変換するオクターブ変換手段と、このオクターブ変換手段により変換された前記曲データの音高列のうち、前記フレーズデータの音高列と音高差が所定範囲内にある音高列を選択する選択手段と、を有することを特徴とする請求項１記載の曲演奏装置。
【請求項３】
前記オクターブ変換手段は、前記曲データの音高列と前記フレーズデータとのオクターブ差を検出するオクターブ検出手段を有し、前記選択手段は、検出されたオクターブ差及び前記フレーズデータの音高列と音高差が所定範囲内にある前記曲データの音高列を選択することを特徴とする請求項２記載の曲選択装置。
【請求項４】
前記曲演奏装置は、更に演奏者の演奏操作に基づき、前記楽音発生指示手段に対して対応する楽音の発生を指示させる演奏手段を有することを特徴とする請求項１記載の曲演奏装置。
【請求項５】
複数の音高列で構成される曲データを記憶する曲データ記憶手段と、
所定の音高列で構成されるフレーズデータを生成するフレーズデータ生成ステップと、
この生成されたフレーズデータを構成する音高列と曲データ記憶手段に記憶されている曲データを構成する音高列と照合し、当該曲データの中から当該フレーズの音高列と所定値以上の類似関係にある音高列の部分を抽出する抽出ステップと、
前記曲データ記憶手段に記憶された曲データを読み出し、対応する楽音の発生を指示する楽音発生指示ステップと、
この楽音発生指示ステップにより読み出された曲データのうち、前記抽出ステップにより抽出された音高列の部分に対しては楽音の発生指示を行わないように制御する楽音発生制御ステップと、
を具備することを特徴とする曲演奏プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、曲演奏装置及び曲演奏プログラムに関するものである。
【背景技術】
【０００２】
従来から曲の特定のパートのみを自動演奏させる、いわゆるマイナスワン機能が知られている（例えば、特許文献１参照）。この機能は曲演奏の練習を一人行う場合等に、他のパートの自動演奏に合わせて演奏練習ができるために、非常に有効ではある。
【０００３】
【特許文献１】特開平５−１８１４７０号公報（第１頁〜第３５頁、図１〜１７図）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、曲演奏練習においては、演奏を特定のパートに限定しても、そのパートの演奏の中で弾ける部分（フレーズ）とうまく弾けない部分が当然出てくる。演奏練習をより効率的に行うには、うまく弾けない部分のみを集中的に練習する必要があるが、従来のマイナスワン機能では、こうした問題に対して全く対応できなかった。
この問題を解決するためには、曲を演奏者の方で事前に弾ける部分と弾けない部分とに分けて、弾けない部分のみマイナスワン機能を動作させることが考えられるが、弾けない部分が曲の複数の個所に分散する場合は、いちいち弾けない部分を指定してマイナスワン機能を動作させねばならず、非常に面倒である。
さらには、弾けない部分の音列の並びが全く同一の内容であるなら弾けない部分がどこにあるかを抽出することは比較的容易であるが、一部のみ異なる、あるいは転調しただけで実質同一の場合など、全く異なるものとしていちいち指定することは面倒であった。
【課題を解決するための手段】
【０００５】
請求項１に係る発明においては、複数の音高列で構成される曲データを記憶する曲データ記憶手段と、所定の音高列で構成されるフレーズデータを生成するフレーズデータ生成手段と、この生成されたフレーズデータを記憶するフレーズデータ記憶手段と、フレーズデータ記憶手段に記憶されたフレーズデータを構成する音高列と曲データ記憶手段に記憶されている曲データを構成する音高列と照合し、当該曲データの中から当該フレーズの音高列と所定値以上の類似関係にある音高列の部分を抽出する抽出手段と、曲データ記憶手段に記憶された曲データを読み出し、対応する楽音の発生を指示する楽音発生指示手段と、この楽音発生指示手段により読み出された曲データのうち、抽出手段により抽出された音高列の部分に対しては楽音の発生指示を行わないように楽音発生指示手段を制御する楽音発生制御手段と、を具備することを特徴とする。
このような構成にすることによって、自動演奏用の曲データ内に存在する登録フレーズに類似する音高列に対して、夫々独立にマイナスワン指示をしなくて済むようになる。
【０００６】
また請求項２記載のように、抽出手段は、曲データの各音高列のオクターブをフレーズの音高列と同一のオクターブに変換するオクターブ変換手段と、このオクターブ変換手段により変換された前記曲データの音高列のうち、フレーズデータの音高列と音高差が所定範囲内にある音高列を選択する選択手段と、を有するようにしてもよい。
そして請求項３記載のように、オクターブ変換手段は、曲データの音高列とフレーズデータとのオクターブ差を検出するオクターブ検出手段を有し、選択手段は、検出されたオクターブ差及びフレーズデータの音高列と音高差が所定範囲内にある曲データの音高列を選択するようにしてもよい。
曲演奏装置は、更に演奏者の演奏操作に基づき、前記楽音発生指示手段に対して対応する楽音の発生を指示させる演奏手段を有するようにしてもよい。
【０００７】
本発明は、請求項５に記載のように、上記各手段の動作手順をプログラム化し、コンピュータに実行させることにより実施できる。その際、コンピュータプログラムはハードディスク等のディスク型記録媒体、半導体メモリやカード型メモリ等の各種メモリ、或いは通信ネットワーク等の各種プログラム記録媒体を通じてコンピュータに供給することができる。
【発明の効果】
【０００８】
本発明の曲演奏装置は、予めフレーズを登録しておくだけで、このフレーズと類似度の高い曲データの部分は自動演奏による発音を停止し、他の音高の楽音は自動演奏により発音するようにしたので、登録フレーズと同一の曲データの部分、さらにはそれに類似する部分までもいちいち指定しなくとも、マイナスワン演奏の設定ができるようになる、という効果を奏する。
【発明を実施するための最良の形態】
【０００９】
登録されたフレーズに類似する曲データ内の音高部分は消音指示され、他の音高部分は自動演奏によって発音される。
【実施例１】
【００１０】
図１は、本発明の実施形態における全体構成のブロック図を示す。
本実施形態の曲データ検索装置は、電子楽器に適用した場合を例にあげている。
ＣＰＵ１０１は、バスライン１０７を介してこの曲データ検索装置を構成する後述の各回路、装置に接続され、各種データを授受して全体の機能を統制する。
【００１１】
ＲＯＭ１０２は、ＣＰＵ１０１において、定められた手順に従い各種機能の処理を実行するためのプログラムを記憶している。
【００１２】
ＲＡＭ１０３は、曲データと、一時的に各種データをストアする複数のデータエリアと、後述する処理に用いられる各種レジスタからなるワークエリアを有する。
表示装置１０５は、例えば、液晶表示装置からなり、曲データ内の音符に基づき楽譜画像を表示する。
操作子群１０４は、複数のスイッチから成り、電源スイッチ、モードスイッチ、フレーズ登録処理時に操作される各スイッチ、自動演奏処理時に操作される各スイッチ、表示装置１０５の楽譜表示画面上で操作されるマウス、さらには鍵盤などの演奏操作子が設けられている。
【００１３】
楽音生成装置１０６は、曲データによる自動演奏、及び鍵操作に応じて楽音信号を生成して発音する音源を含む。
【００１４】
図２は、ＲＡＭ１０３内にストアされている曲データのデータ構造を示す。
この曲データは、音符［０］〜音符［Ｍ］と曲終了を示す「ＥＮＤ」のデータエリアからなり、音符［０］のデータエリアには音高［０］と、この音高の発音を指示するオンフラグ「ＯＮＦ」と、音符長［０］の各データがストアされている。音符［１］〜音符［Ｍ］も同様の構成である。
【００１５】
図３は、「指定フレーズデータ」のエリアと「検索フレーズデータ」のエリアからなるデータ構造を示す。
「指定フレーズデータ」のエリアは、予め登録されるフレーズデータが記憶されるエリアであり、このフレーズを構成する音高データＮ［０］〜Ｎ［ｎ］がストアされる。
「検索フレーズデータ」のデータエリアＭ［０］〜Ｍ［ｎ］は、曲データの一部を構成する音高列［０］〜［Ｍ］がストアされる。そして、ここにストアされた音高列が「指定フレーズデータ」内にストアされた音高列と比較照合されて両者の類似度が判定される。
そして詳細は後述するが、ここで類似度が所定以上高い場合は、この音高列［０］〜［Ｍ］に対応する曲データの音符に含まれるオンフラグ「ＯＮＦ」を発音しないように制御するように構成している。
【００１６】
次に、本発明の基本処理について図４を参照して説明する。
先ず、操作子群１０４内に設けられている電源スイッチがオンされると、ＣＰＵ１０１は本曲データ検索装置全体の各回路を初期設定する（Ｓ４０１）。
そして、モードフラグＭＯＤＥを「０」にセットする（Ｓ４０２）。
次に、モードフラグＭＯＤＥが自動演奏処理の実行を示す「０」であるか否かを判定する（Ｓ４０３）。
【００１７】
ここで、ＭＯＤＥが「０」を示すものであれば自動演奏処理を実行し（Ｓ４０４）、ＭＯＤＥが「０」を示すものでなければフレーズ登録処理を実行する（Ｓ４０５）。
自動演奏処理及びフレーズ登録処理の夫々が終了すると、再びＳ４０３の処理に戻る。
【００１８】
＜フレーズ登録処理について＞
図４中のＳ４０５に示すフレーズ登録処理の動作について、図５〜図８を参照して説明する。
先ず、ＣＰＵ１０１は、ＲＡＭ１０３にストアされている曲データの音符［０］〜音符［Ｍ］エリアからオンフラグＯＮＦ（この段階では全て「1」）、音高データ、及び音符長データを読み出し、これらのデータに基づいて表示画面上に楽譜を表示する（Ｓ５０１）。
この曲データの楽譜が表示されると、演奏者はこの楽譜上において所望とするフレーズの区間をマウス操作によって指定する（Ｓ５０２）。
【００１９】
次に、このフレーズ区間を決定するスイッチがオンされたか否か（Ｓ５０３）、或いはここで指定されたフレーズ区間をクリアするスイッチがオンされたか否かを判定する（Ｓ５０８）。
ここで、「決定スイッチ」のオンが検出されると、この指定されたフレーズ区間の音高データを指定フレーズデータのエリアＮ［０］〜Ｎ［ｎ］に順次ストアして行く（Ｓ５０４）。
【００２０】
そして、この指定されたフレーズに基づいて検索フレーズデータのエリアの中から類似するフレーズの検索を開始する検索スイッチがオンされたか否か（Ｓ５０５）、フレーズ登録処理を最初からやり直す戻りスイッチがオンされたか否か（Ｓ５０９）、或いはこのフレーズ登録処理を終了するスイッチがオンされたか否か（Ｓ５１１）、を順次判定して行く。
ここで、検索スイッチのオンが検出されると、フレーズ検索処理を実行してから（Ｓ５０６）、モードフラグＭＯＤＥを、自動演奏処理を示す「０」にセットして（Ｓ５０７）、本処理を終了する。
【００２１】
一方、もし戻りスイッチのオンが検出されると、指定フレーズデータＮ［０］〜Ｎ［ｎ］のエリアを全てクリアしてから（Ｓ５１０）、Ｓ５０１の処理に戻る。
また、終了スイッチのオンが検出されると、モードフラグＭＯＤＥに自動演奏処理を示す「０」をセットして（Ｓ５０７）、本処理を終了する。
しかし、終了スイッチのオンが検出されなければ、再びＳ５０５に戻って検索スイッチのオン状態を再テェックする動作を繰り返す。
【００２２】
＜フレーズ検索処理について＞
次に、図５中のＳ５０６に示すフレーズ検索処理の動作について、図６を参照して説明する。
先ず、登録フレーズデータと比較される曲データ内のフレーズの先頭の音符までの音符数をストアするカウンタｍに「０」をセットするとともに（Ｓ６０１）、フレーズを構成する音符の数をカウントするカウンタｎと、曲データの先頭の音符位置からの音符数をカウントするカウンタｓに、夫々「０」をセットする（Ｓ６０２）。
【００２３】
次に、曲データのスタートアドレスをレジスタＡＤにストアしてから（Ｓ６０３）、このレジスタＡＤの示すアドレスに基づいて曲データを読み出す（Ｓ６０４）。
そして、この読み出された曲データが「音高」、或いは「音符長」、また或いは「ＥＮＤ」、の何れであるかを判定する（Ｓ６０５）。
【００２４】
そして、読み出される曲データの音符数が、曲データの先頭の音符位置から検索対象となるフレーズデータの開始位置に相当する音符数まで達したか否かを判定するために、カウンタｍの示す値がカウンタｓに示す値に到達したか否かを判定する（Ｓ６０７）。
ここで、カウンタｍの示す値がカウンタｓに示す値に達したことが検出されなければ、カウンタsに「１」を加算してから（Ｓ６１４）、曲データの読み出しアドレスＡＤを歩進して（Ｓ６１５）、再びＳ６０４の処理に戻り曲データの読み出しを繰り返す。
そして、カウンタsの示す値がカウンタｍに示す値に達したことが検出されると、読み出された音高データを検索フレーズデータのエリアＭ［ｎ］にストアする（Ｓ６０８）。
【００２５】
次に、この検索フレーズデータの音符数をカウントするカウンタｎに「１」を加算して（Ｓ６０９）、このカウンタｎの示す音符数が検索フレーズデータ内の総数に達したか否かを判定する（Ｓ６１０）。
ここで、カウンタｎの示す音符数がフレーズ区間内の音符数に達したことが検出されなければ、Ｓ６１５の処理に進んで読み出しアドレスを歩進させるが、カウンタｎの示す音符数が達したことが検出されると、類似度判定処理のサブルーティンを実行してから（Ｓ６１１）、類似度判定の対象を音符数を１個進めたフレーズを曲データから検索するために、カウンタｍに「１」を加算する（Ｓ６１２）。
【００２６】
この後カウンタｍの示す値が曲データの総音符数に達したか否かを判定する（Ｓ６１３）。
ここで、カウンタｍの示す値が曲データの総音符数に達したことが検出されると、本処理を終了するが、カウンタｍの示す値が曲データの総音符数に達したことが検出されなければ、再びＳ６０２に戻る。
一方、Ｓ６０５の処理で読み出された曲データが「音符長」であることが検出された場合は、Ｓ６１５の処理に進んで曲データの読み出しアドレスを歩進する。
また、読み出された曲データの終了を示す「ＥＮＤ」が検出された場合は、Ｓ６１１の処理に進んで「類似度判定処理」のサブルーティンを実行する。
【００２７】
＜類似度判定処理について＞
次に、図６中のＳ６１１に示す「類似度判定処理」の動作について図７を参照して説明する。
本実施形態においては、指定フレーズデータを構成する音高列と検索すべき曲データの部分を示す検索フレーズデータとを比較する場合、まず、両者のオクターブ差を検出し、このオクターブ差をなくしてから、音高比較を行っている。そしてこのオクターブ差を検出する対象として、両フレーズデータの先頭位置にある音高を用いている。
図６において先ず、フレーズの音符数をカウントするカウンタｎに「０」をセットし、指定フレーズデータと検索フレーズデータを比較して、類似度が算出された音高に対応するレジスタγ［ｎ］に１００（％）の値をストアしておく。そして、指定フレーズ内の各音高と検索フレーズの各音高とのオクターブ差をカウントするカウンタＬと、検索フレーズデータに対してオクターブシフトした回数をカウントするカウンタｌに夫々「０」をセットする（Ｓ７０１）。
【００２８】
次に、検索フレーズデータのエリアＭ［ｎ］内がクリア状態でないか否かを判定する（Ｓ７０２）。
ここで、検索フレーズデータのエリアＭ［ｎ］内がクリア状態であることが検出されると本処理を終了するが、検索フレーズデータのエリアＭ［ｎ］内がクリア状態でないことが検出されると、このエリアＭ［ｎ］にストアされている音高データと、指定フレーズデータのエリアＮ［ｎ］にストアされている音高データの高低を比較する（Ｓ７０３）。
【００２９】
ここで、検索フレーズデータのエリアＭ［ｎ］にストアされている音高データの方が指定フレーズデータのエリアＮ［ｎ］にストアされている音高データより音高値が高いことが検出されると、次に、検索フレーズデータのエリアＭ［ｎ］にストアされている音高データと指定フレーズデータのエリアＮ［ｎ］にストアされている音高データの音高差が１２度（１オクターブ）以上高いか否かを判定する（Ｓ７０４）。
ここで、検索フレーズデータのエリアＭ［ｎ］にストアされている音高データが指定フレーズデータのエリアＮ［ｎ］にストアされている音高データの差より１オクターブ以上音高値が高いことが検出されると、先ず検索フレーズデータのエリアＭ［ｎ］に現在の音高値より１オクターブ下げた音高データをストアする（Ｓ７０５）。
そして、類似度を示すレジスタγの値に係数０．９を乗じてこれを新たな類似度として更新する（Ｓ７０６）。つまり、本実施形態においては、１オクターブ以上の音高差がある場合は、類似度が低いものとみなしている。
【００３０】
次に、両フレーズの開始位置にある音高のオクターブ差をカウントするオクターブカウンタＬに「１」を加算して（Ｓ７０７）からＳ７０４の処理に戻る。
この処理を繰り返すことにより、両音高の差が１オクターブ以下になるとともに、オクターブ差もカウントされることになる。
一方、検索フレーズデータのエリアＭ［ｎ］にストアされている音高データが指定フレーズデータのエリアＮ［ｎ］にストアされている音高データより１オクターブ以上音高値が高いことが検出されなければ、カウンタＬに示す値が「０」を超える値か否かを判定する（Ｓ７２０）。つまりオクターブシフトが行われたか否かが判定される。
ここで、カウンタＬの値が「０」でなければ、エリアＭ［ｎ］にストアされている検索フレーズデータの音高をオクターブシフトする回数をカウントするカウンタｌに「０」をセットするとともに（Ｓ７１１）、検索フレーズデータの音符数をカウントするカウンタｎに「１」を加算する（Ｓ７２２）。
【００３１】
そして、このカウンタｎに示される検索フレーズデータＭ「ｎ」の音高データを１オクターブ下げてこれを新たな音高値としてデータ更新する（Ｓ７２３）。
ここで、カウンタｎに示される音高数が検索フレーズデータの総数に達したか否かを判定する（Ｓ７２４）。
このカウンタｎに示される音高数が総数に達したことが検出されなければ、Ｓ７２２の処理に戻って検索フレーズデータ内の音高データを１オクターブ下げる処理をして行く。
【００３２】
そして、カウンタｎに示される音高数が総数に達したことが検出されると、検索フレーズデータの音高をオクターブシフトする回数をカウントするカウンタｌに「１」を加算して（Ｓ７２５）、オクターブ差をカウントするカウンタＬの示す値と検索フレーズデータの音高をオクターブ単位でシフトする回数をカウントするカウンタｌの示す値とを比較して等しくないか否かを判定する（Ｓ７２６）。
ここで、カウンタＬに示す値とカウンタｌに示す値が等しくないことが検出されると、検索フレーズデータの音高数をカウントするカウンタｎを「０」にセットしてから（Ｓ７２７）、Ｓ７２２の処理に戻る。
【００３３】
一方、カウンタＬに示す値とカウンタｌに示す値が等しいことが検出された場合、或いはＳ７２０の処理で、カウンタＬに示す値が「０」を越えていないことが検出された場合（オクターブ差がなかった場合）、また或いはＳ７０３の処理でエリアＭ［ｎ］にストアされている音高データと指定フレーズデータのエリアＮ［ｎ］にストアされている音高データが等しいことが検出されると、何れも図８中のＳ８０１の処理に進む。
次に、Ｓ７０３の処理でエリアＭ［ｎ］にストアされている音高データより指定フレーズデータのエリアＮ［ｎ］にストアされている音高データの方が高い音高値であると検出された場合は、指定フレーズデータのエリアＮ［ｎ］にストアされている音高データと検索フレーズデータのエリアＭ［ｎ］にストアされている音高データの差が１オクターブ以上高いか否かを判定する（Ｓ７０８）。
【００３４】
ここで、指定フレーズデータのエリアＮ［ｎ］にストアされている音高データが検索フレーズデータのエリアＭ［ｎ］にストアされている音高データより１オクターブ以上音高値が高いことが検出されると、先ず検索フレーズデータのエリアＭ［ｎ］に現在の音高値より１オクターブ加算させた音高データをストアする（Ｓ７０９）。
そして、類似度を示すレジスタγの値に係数０．９を乗じてこれを新たな類似度として更新する（Ｓ７１０）。
次に、両音高のオクターブ差をカウントするカウンタＬに「１」を加算して（Ｓ７１１）からＳ７０８の処理に戻り、両音高の音高差が１オクターブ以下になるまで上記処理が繰り返される。
【００３５】
そして、Ｓ７０８の処理で指定フレーズデータのエリアＮ［ｎ］にストアされている音高データが検索フレーズデータのエリアＭ［ｎ］にストアされている音高データより１オクターブ以上音高値が高いことが検出されない場合、カウンタＬの示す値が「０」を超えているか否かを判定する（Ｓ７１２）。
ここで、エリアＭ［ｎ］にストアされている検索フレーズデータの音高をオクターブシフトする回数をカウントするカウンタｌに「０」をセットするとともに（Ｓ７１３）、検索フレーズデータの音符数をカウントするカウンタｎに「１」を加算する（Ｓ７１４）。
【００３６】
そして、このカウンタｎに示される検索フレーズデータＭ「ｎ」の音高データを１オクターブ上げてこれを新たな音高値としてデータ更新する（Ｓ７１５）。
ここで、カウンタｎに示される音高数が検索フレーズデータの総数に達したか否かを判定する（Ｓ７１６）。
このカウンタｎに示される音高数が総数に達したことが検出されなければ、再びＳ７１４の処理に戻って検索フレーズデータ内の音高データを１オクターブ上げる処理をする。
【００３７】
そして、カウンタｎに示される音高数が総数に達したことが検出されると、検索フレーズデータの音高をオクターブシフトする回数をカウントするカウンタｌに「１」を加算して（Ｓ７１７）、カウンタＬの示す値が検索フレーズデータの音高をオクターブシフトする回数をカウントするカウンタｌの示す値と比較して等しくないか否かを判定する（Ｓ７１８）。
【００３８】
ここで、カウンタＬに示す値とカウンタｌに示す値が等しくないことが検出されると、検索フレーズデータの音高数をカウントするカウンタｎを「０」にセットしてから（Ｓ７１９）、Ｓ７１４の処理に戻る。
【００３９】
一方、Ｓ７１２の処理でカウンタＬの示す値が「０」を超えていることが検出されない場合、或いはＳ７１８の処理でカウンタＬの示す値と検索フレーズデータの音高をオクターブシフトした回数をカウントするカウンタｌの示す値が等しいことが検出された場合は、何れも図８中のＳ８０１の処理に進み、検索フレーズデータの音高数をカウントするカウンタｎに「０」をセットする。
【００４０】
そして、類似度をストアするレジスタγに示す値に対して、検索フレーズの音高と指定フレーズの音高の差が反映されるように｛１−（Ｍ［ｎ］−Ｎ［ｎ］）／１２｝を乗算し、こうして得られた値を当該レジスタγにストアする（Ｓ８０２）。
次に、検索フレーズデータの音高数をカウントするカウンタｎに音高数「１」を加算して（Ｓ８０３）、このカウンタｎの示す値が検索フレーズデータの総数に達したか否か判定する（Ｓ８０４）。
【００４１】
ここで、カウンタｎの示す値が検索フレーズデータの総数に達したことが検出されなければ、再びＳ８０２に示す算出処理に戻るが、カウンタｎの示す値が検索フレーズデータの総数に達したことが検出されると、類似度レジスタγに示す値が予め定められた所定値Ｘを上回るものか否か比較する（Ｓ８０５）。
この類似度レジスタγに示す値が所定値Ｘを上回ることが検出されなければ、検索フレーズは指定フレーズに類似しないものとして本処理を終了する。一方、類似度レジスタγに示す値が所定値Ｘを上回ることが検出されると、検索フレーズは類似しているものとして、検索フレーズデータの音高数をカウントするカウンタｎに「０」をセットする（Ｓ８０６）。
そして、曲データのエリア音符［ｍ］内の音高［ｍ］のオンフラグＯＮＦに消音を指示する「０」をセットする（Ｓ８０７）。
【００４２】
次に、曲データ内の音符を指定する値をカウントするカウンタｍに「１」を加算するとともに（Ｓ８０８）、検索フレーズデータの音高数をカウントするカウンタｎに「１」を加算する（Ｓ８０９）。
そして、このカウンタｎの示す値が検索フレーズデータの総数に達したか否かを判定する（Ｓ８１０）。
【００４３】
ここで、カウンタｎの示す値が検索フレーズデータの総数に達したことが検出されない場合は、Ｓ８０７の処理に戻って上記の処理を繰り返す。
そして、カウンタｎの示す値が検索フレーズデータの総数に達したことが検出されると本処理を終了する。
【００４４】
このように、フレーズ登録処理では、曲データ内の音符データを画面上に楽譜表示してから、演奏者が所望とする区間の音符上をマウスで指定してこれを登録すると、この区間内に含まれる音高データを指定フレーズデータとして読み込む。そして、曲データの最初から所定数の音符の音高データを検索フレーズデータとして、この指定フレーズデータとを順次比較して類似度を計算していき、ひとつの検索フレーズとの比較が終了したなら、音符をひとつずつずらしながら新たな検索フレーズを生成し比較を続ける。
ここにおいて音高を比較する場合、まず両者のオクターブ差を検出し、このオクターブ差と音高差とに基づいて類似度を計算している。
そして、この類似度の算出で得られた類似度が所定値Ｘの率を上回っていることが検出されると、当該曲データの音高を自動演奏時に発音しないように指示することができる。
この自動演奏の停止が指示された音高部分は、所謂マイナスワン演奏として演奏者の演奏する部分となる。
【００４５】
＜自動演奏処理について＞
次に、図４中のＳ４０４に示す自動演奏処理の動作について、図９〜図１１を参照して説明する。
先ず、自動演奏をスタート／ストップするスイッチがオンされたか否かを判定する（Ｓ９０１）。
ここで、スタート／ストップスイッチのオンが検出されると、スタートフラグＳＴＦを反転させて（Ｓ９０２）、このＳＴＦが自動演奏の開始を示す「１」であるか否かを判定する（Ｓ９０３）。
【００４６】
このＳＴＦが「１」を示していることが検出されると、曲データのスタートアドレスをレジスタＡＤにセットして（Ｓ９０４）、このＡＤに示されるアドレスに基づいて曲データを読み出す（Ｓ９０５）。
そして、この読み出されたデータが曲の終了を示す「ＥＮＤ」であるか、或いは音符であるか否かを判定する（Ｓ９０６）。
【００４７】
ここで、読み出されたデータが「ＥＮＤ」であることが検出されると、音源に対して発音中の楽音を消音するよう指示してから（Ｓ９０７）、スタートフラグＳＴＦに消音を示す「０」をセットして（Ｓ９０８）、再びＳ９０１の処理に戻る。
しかし、読み出されたデータが音符であることが検出されると、図１０中のＳ１００１の処理に進む。
【００４８】
一方、Ｓ９０１の処理でスタート／ストップスイッチのオンが検出されなければ、次に、モードスイッチがオンされたか否かを判定する（Ｓ９０９）。
このスタート／ストップスイッチのオンが検出されるとモードフラグＭＯＤＥにフレーズ登録処理を示す「１」をセットしてから（Ｓ９１０）、本処理を終了するが、スタート／ストップスイッチのオンも、モードスイッチのオンも検出されなければ、図１０中のＳ１００６の処理に進む。
【００４９】
また、Ｓ９０３の処理でスタートフラグＳＴＦが「１」を示すものでなければ、音源に対して発音中の楽音を消音するよう指示してから、再びＳ９０１の処理に戻る。
次に、Ｓ９０６の処理で読み出されたデータが音符であることが検出されると、この音符のデータが音高を示すものか、或いは音符長を示すものか否かが判定される（図１０中のＳ１００１）。
ここで、音高が検出されると、当該音高に付加されているオンフラグＯＮＦが発音指示を示す「１」であるか否かを判定する（Ｓ１００２）。
【００５０】
このオンフラグＯＮＦが「１」を示すものであれば、音源に対してこの読み出された音高のデータに基づいて楽音を生成して発音するよう指示し（Ｓ１００３）、曲データの読み出しアドレスを歩進して（Ｓ１００４）、再び図９中のＳ９０５の処理に戻る。
【００５１】
一方、Ｓ１００２の処理で、オンフラグＯＮＦが「１」を示すものでなければ、音源に対して発音中の楽音を強制的に消音するよう指示した後（Ｓ１０１５）、Ｓ１００４の処理に進んで曲データの読み出しアドレスを歩進させる。
また、Ｓ１００１の処理で読み出された曲データが音符長を示すことが検出されると、この読み出された音符長のデータをレジスタＴにストアする（Ｓ１００５）。
次に、スタートフラグＳＴＦが自動演奏の開始を示す「１」であるか否かを判定する（Ｓ１００６）。
このＳＴＦが「１」を示すものであれば、最小単位とする発音時間が経過したか否かを判定する（Ｓ１００７）。
【００５２】
この最小持間の経過が検出されると、レジスタＴにストアされている値を「１」減少させて（Ｓ１００８）、このレジスタＴの値が音符長分の時間が経過したことを示す「０」に達したか否かを判定する（Ｓ１００９）。
ここで、レジスタＴの示す値が「０」に達したことが検出されると、曲データアドレスレジスタＡＤの値を歩進して（Ｓ１０１０）、このアドレスレジスタＡＤにより指定される曲データを読み出し（Ｓ１０１１）、これが曲データの終了を示す「ＥＮＤ」であるか否かを判定する（Ｓ１０１２）。
【００５３】
この読み出された曲データが「ＥＮＤ」であることが検出されると、音源に対して現在発音中の楽音を消音するよう指示して（Ｓ１０１３）、スタートフラグＳＴＦを、自動演奏の終了を示す「０」をセットしてから（Ｓ１０１４）、図９中のＳ９０１の処理に戻る。
一方、Ｓ１００６の処理で、スタートフラグＳＴＦが「１」を示していない場合、或いは発音の最小単位の時間が経過していない場合、また或いはレジスタＴの示す音符長［Ｍ］時間が「０」に達していない場合、これらの何れも図１１中のＳ１１０６の処理に進む。
【００５４】
また、Ｓ１０１２の処理で、読み出された曲データが「ＥＮＤ」であることが検出されなければ、図１１中のＳ１１０１の処理に進む。
次に、このＳ１１０１の処理では、読み出された曲データが音高［Ｍ］であるか、音符長「Ｍ」であるか否かを判定する。
ここで、読み出された曲データが音高［Ｍ］であることが検出されると、オンフラグＯＮＦが自動演奏時に発音を指示する「１」であるか否かを判定する（Ｓ１１０２）。
このオンフラグＯＮＦが「１」であることが検出されると、音源に対してこの読み出された音高［Ｍ］のデータに基づいて楽音を生成して発音するよう指示してから（Ｓ１１０３）、図９中のＳ９０５の処理に戻り、オンフラグＯＮＦが「１」であることが検出されなければ、音源に対して現在発音中の楽音を消音するよう指示してから（Ｓ１１０４）、図９中のＳ９０５の処理に戻る。
【００５５】
次に、Ｓ１１０１の処理で読み出された曲データが音符長であることが検出されると、この音符長として示されるデータをレジスタＴにストアする（Ｓ１１０５）。
そして、演奏操作子である鍵盤を順次走査して（Ｓ１１０６）、何れかの鍵が押鍵されたか、或いは離鍵されたか、また或いは全く変化が無かったか否かを検出する（Ｓ１１０７）。
ここで、何れかの鍵が押鍵されたことが検出されると、音源に対してこの押鍵された鍵番号に対応する音高の楽音を生成して発音するよう指示してから（Ｓ１１０８）、図９中のＳ９０１の処理に戻る。
【００５６】
一方、鍵走査で何れかの鍵が離鍵されたことが検出されると、音源に対してこの離鍵された鍵番号に対応する音高の楽音を消音するよう指示してから（Ｓ１１０９）、図９中のＳ９０１の処理に戻る。
また、鍵走査で何れの鍵も押鍵／離鍵されていないことが検出されると、図９中のＳ９０１の処理に戻る。
【００５７】
このように、自動演奏処理では曲データ中の音高データに含まれているオンフラグＯＮＦが「１」にセットされていることが検出されると、当該音高の楽音が生成されて自動演奏によって発音されるが、このオンフラグが演奏者の演奏するフレーズを示す「０」がセットされている場合は、この曲データの当該音高部分は自動演奏による楽音は生成されず発音されないようになっている。
【００５８】
以上、本発明は、演奏者が所望とするフレーズを予め登録しておくと、曲データ中に存在する所定の一致率以上類似するフレーズ部分は自動演奏による楽音は生成されず、これらの発音停止状態となったフレーズ箇所は演奏者自身の演奏に基づいて生成された楽音が発音される。
そして、この自動演奏が停止されたフレーズ部分以外の音高は自動演奏によって楽音が生成されて発音するので、所謂マイナスワン演奏を可能とするものである。
このような構成にすることによって、演奏者は類似する複数箇所のフレーズ部分を夫々登録しなくて済むので、容易にマイナスワン演奏の設定を行うことができるという効果を奏する。
【００５９】
また、本発明は、指定フレーズの音高配列順に検索フレーズデータの音高の配列を順次照合するようにしたが、これに限定することなく音高配列が反行するフレーズも類似するフレーズとしてもよい。
また、本発明は指定フレーズの音高と検索フレーズデータの音高を照合するようにしたが、これに限定することなく音符長の時間を照合するようにしてもよく、ベロシティなど他の楽音パレメータを照合の対象としたり、或いは複数のパラメータを組合わせても良い。
【００６０】
また、上記実施の形態で説明した動作手順をプログラム化し、コンピュータに実行させることにより実施できる。その際、コンピュータプログラムはハードディスク等のディスク型記録媒体、半導体メモリやカード型メモリ等の各種メモリ、或いは通信ネットワーク等の各種プログラム記録媒体を通じてコンピュータに供給することができる。
【図面の簡単な説明】
【００６１】
【図１】本発明の全体構成のブロック図を示す。
【図２】図１に示されるＲＡＭ１０３内の曲データのエリア構成を示す。
【図３】図１に示されるＲＡＭ１０３内のフレーズデータのエリア構成を示す。
【図４】本発明の曲データ検索装置の基本処理を示す。
【図５】図４に示されるフレーズ登録処理を示す。
【図６】図５に示されるフレーズ検索処理を示す。
【図７】図６に示される類似度判定処理を示す。（その１）
【図８】図６に示される類似度判定処理を示す。（その２）
【図９】図４に示される自動演奏処理を示す。（その１）
【図１０】図４に示される自動演奏処理を示す。（その２）
【図１１】図４に示される自動演奏処理を示す。（その３）
【符号の説明】
【００６２】
１０１  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  操作子群
１０５  表示装置
１０６  楽音生成装置
【図１】
2005208463.tif 000003
【図２】
2005208463.tif 000004
【図３】
2005208463.tif 000005
【図４】
2005208463.tif 000006
【図５】
2005208463.tif 000007
【図６】
2005208463.tif 000008
【図７】
2005208463.tif 000009
【図８】
2005208463.tif 000010
【図９】
2005208463.tif 000011
【図１０】
2005208463.tif 000012
【図１１】
2005208463.tif 000013