JP3577561B2 - 演奏分析装置及び演奏分析方法 - Google Patents

演奏分析装置及び演奏分析方法 Download PDF

Info

Publication number
JP3577561B2
JP3577561B2 JP21489096A JP21489096A JP3577561B2 JP 3577561 B2 JP3577561 B2 JP 3577561B2 JP 21489096 A JP21489096 A JP 21489096A JP 21489096 A JP21489096 A JP 21489096A JP 3577561 B2 JP3577561 B2 JP 3577561B2
Authority
JP
Japan
Prior art keywords
data
note
performance
processing
analysis
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP21489096A
Other languages
English (en)
Other versions
JPH09237088A (ja
Inventor
龍太郎 林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP21489096A priority Critical patent/JP3577561B2/ja
Publication of JPH09237088A publication Critical patent/JPH09237088A/ja
Application granted granted Critical
Publication of JP3577561B2 publication Critical patent/JP3577561B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、鍵盤等の演奏操作子群に対して演奏者が行った操作(演奏)内容を分析する技術に関する。
【0002】
【従来の技術及び発明が解決しようとする課題】
電子楽器等においては、近年、多機能化がすすみ、様々な機能が搭載されてきている。電子楽器に搭載されるようになった機能の一つとして、例えばナビゲート機能がある。
【0003】
ナビゲート機能は、所望の楽曲の演奏において、鍵盤(演奏操作子群)等に対して行うべき操作内容を演奏者に通知する機能である。ナビゲート機能を搭載した電子楽器には、その機能の搭載に合わせて、例えば各鍵に対する操作を個別に指示するためのLED群が設けられる。ナビゲート機能による演奏内容の通知は、例えば楽曲の演奏の進行に合わせて、操作すべき鍵のLEDを順次点灯させることで行われる。
【0004】
なお、演奏内容の通知としては、演奏者が操作すべき鍵とは異なる他の鍵を操作したとき、或いは操作すべき鍵に対する操作が所定時間以上遅れたときに、操作すべき鍵のLEDを点灯させる方法もある。
【0005】
演奏者は、ナビゲート機能を用いて楽器演奏の独習を行うことができる。しかし、このナビゲート機能は、操作すべき演奏操作子の指示を行うだけか、或いは演奏者の演奏内容についての評価を行う機能を有する場合であっても、音高(鍵)の一致、不一致のみといったように少ない評価項目からそれを評価するだけである。このため、楽器演奏の独習を行う場合、演奏者は、実際に行った演奏についての評価を実質的に自分自身で行うようなものとなっていた。
【0006】
周知のように、自身が行った演奏を客観的に把握することは非常に困難である。このため、楽器演奏の独習を行う場合には、演奏者は演奏における不具合な点を見つけ、その原因を究明して練習にフィードバックしたりすることが必ずしもできないことから、高い練習効率を得ることができないという問題点が発生していた。
【0007】
音楽教室に通える人や、個人レッスン等を受けられる人は、教師から指導を受けられるので、上記問題点は回避される。しかし、地理的、金銭的、時間的といった各種の理由により、楽器の演奏を独習する以外に方法がない人も少なくないのが実状である。
【0008】
このような人々にとって、自身で行った演奏を客観的に示す情報は、演奏における不具合の発見やその原因の究明を容易にしたり、更には演奏技術を向上させるための手助けになる。
【0009】
本発明の課題は、練習効率を向上させるための情報を演奏者に提供することにある。
【0010】
【課題を解決するための手段】
本発明の演奏分析装置は、演奏者が演奏操作子群に対して行った演奏操作の情報である被験データと、演奏操作子群への目標とすべき演奏操作の情報である基準データとから、演奏者の演奏内容を分析することを前提とし、被験データの演奏イベントデータと基準データの演奏イベントデータの対応関係を検出するイベントマッチ手段と、イベントマッチ手段が検出した対応関係に従って、被験データの演奏イベントデータと基準データの演奏イベントデータとを対比し、演奏イベントデータ毎に、該演奏イベントデータのパラメータの差分、及びイベント発生タイミングの時間の差分を取得する差分取得手段と、差分取得手段が取得した差分の少なくとも1種類の差分を用いて、演奏者の演奏内容を分析する分析手段と、分析手段の分析結果を演奏者に通知する通知手段と、差分取得手段が取得した差分の少なくとも1種類の差分に基づいて基準データを変更する演奏データ変更手段と、演奏データ変更手段により変更された基準データを再生させる再生手段と、を具備する。
【0011】
なお、上記の構成において、演奏データ変更手段は、基準データの変更に用いる差分を強調させた上で基準データを変更する、ことが望ましい。
【0012】
また、演奏データ変更手段は、演奏者により指定された種類のパラメータの差分に基づいて基準データを変更する、ことが望ましい。
【0013】
本発明の演奏分析方法は、演奏者が演奏操作子群に対して行った演奏操作の情報である被験データと、演奏操作子群への目標とすべき演奏操作の情報である基準データとから、演奏者の演奏内容を分析することを前提とし、被験データの演奏イベントデータと基準データの演奏イベントデータの対応関係を検出し、該検出した対応関係に従って、被験データの演奏イベントデータと基準データの演奏イベントデータとを対比し、演奏イベントデータ毎に、該演奏イベントデータのパラメータの差分、及びイベント発生タイミングの時間の差分を取得し、取得した差分の少なくとも1種類の差分を用いて、演奏者の演奏内容を分析し、分析の結果を演奏者に通知し、取得した差分の少なくとも1種類の差分に基づいて基準データを変更し、変更された基準データを再生させる。
【0024】
演奏者が自身でその演奏技術を正確に把握するためには、演奏者が行った演奏がどのようなものであるかを情報として演奏者に提供することが望まれる。本発明は、演奏者の演奏内容を手本、或いは基準となる演奏内容と対比して分析し、それらの演奏内容から異なる部分の情報、或いはそれらの間の相違を対比するための情報を具体的な形で演奏者に提供する。これによって、演奏者は自身の演奏内容を客観的、且つ具体的に把握することが可能となり、更には、課題を克服するための効果的な練習を行えるようになる。
【0025】
本発明は、演奏者の演奏内容を手本、或いは基準となる演奏内容に反映させ、その反映させた演奏内容で再生させる。これにより、演奏者は自身の演奏で悪い点を聴感から認識(把握)することが可能となる。また、演奏者が、演奏の部分的な箇所ではなく、全体的な演奏傾向を認識することも容易となる。
【0026】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
<第1の実施の形態>
図1は、本実施の形態が適用された電子楽器100の構成を示すブロック図である。図1を参照して、その構成、及び概略動作について説明する。
【0027】
メインCPU(Central Processing Unit )101は、プログラムROM(Read Only Memory)102に予め記憶されているプログラムを読み出し、それを実行することで楽器100全体の制御を実行する。
【0028】
コントロールスイッチ群103は、特には図示しない各種スイッチをまとめて表現したものである。メインCPU101は、コントロールスイッチ群103の各種スイッチに対して行われた操作を検出し、検出した操作内容に応じたモードや音色、テンポといった各種パラメータ等の設定を行い、それらの設定内容を示す情報をワークRAM(Random Access Memory)104の所定の記憶領域上に格納する。
【0029】
鍵盤装置105は、例えば鍵が押鍵されたときの速さ、それが押されている圧力を検出するタッチレスポンス機能を備え、ユーザの操作内容に応じて発生する検出信号を鍵盤情報生成装置106に出力する。鍵盤情報生成装置106は、鍵盤装置105から入力した検出信号を基に、操作された鍵を特定して、その鍵に割り当てられた音高を示すノートナンバー、押鍵時の速さ(ベロシティ)、押鍵されている圧力等の各種情報を、鍵盤情報として出力する。
【0030】
第1の実施の形態による電子楽器100は、鍵盤装置105の他に、他の演奏操作子として、各種ペダルや、ピッチベンダ等を備えている。これらは図1において他の演奏操作子群107として表現している。
【0031】
メインCPU101は、鍵盤情報生成装置106から入力した鍵盤情報、及び他の演奏操作子群107の各演奏操作子が操作された内容に応じて、発音命令を生成し、これを楽音発生装置108に出力する。
【0032】
楽音発生装置108は、例えばPCM音源であり、メインCPU101から入力した制御コマンドに従って音色や音響効果等の各種設定を行う。また、メインCPU101が出力した発音命令を入力すると、該発音命令に従って特には図示しない波形メモリから波形データを読み出し、該読み出した波形データに対して設定に応じた処理を施した後、D/Aコンバータ109に波形データ(波高値)を出力する。
【0033】
D/Aコンバータ109は、楽音発生装置108から入力した波形データをD/A変換して、アナログの波形信号を出力する。D/Aコンバータ109が出力した波形信号は、アンプ110により増幅された後、スピーカ111に入力される。これにより、演奏者が鍵盤装置105、他の演奏操作子群107に対して行った操作に応じて、スピーカ111から楽音が発音される。
【0034】
第1の実施の形態において、基準データRAM112、及び被験データRAM113は、それぞれ演奏データの格納に用いられる。第1の実施の形態では、演奏データはスタンダードMIDI(Musical Instrument Digital Interface)ファイル(以降、SMFと記す)の形式で各RAM112、113に格納される。これらのRAM112、113に格納される演奏データ(MIDIデータ)は、シリアルインターフェイス114、ネットワークインターフェイス115、及び外部記憶装置116から供給される。
【0035】
周知のように、上記SMFは、ヘッダーブロックとトラックブロックの2種類から構成される。ヘッダーブロックは、SMFの先頭に置かれ、それに1つ以上のトラックブロックが続く構成である。
【0036】
ヘッダーブロックには、SMFに関する基本的な情報がストアされ、トラックブロックには実際の演奏データがストアされる。その演奏データは、基本的にはMIDIデータに時間情報を付けたデータストリームから構成される。時間情報は、前のイベントとのデルタタイムで表現される。
【0037】
上記シリアルインターフェイス114は、特には図示しないMIDI端子を介して外部の装置とのMIDIデータの授受を行い、ネットワークインターフェイス115は、ネットワークを介して外部の装置とのMIDIデータの授受を行う。外部記憶装置116は、フロッピーディスク、CD−ROM、或いはメモリカード等を記憶媒体として、それに対するアクセスを行うものである。メインCPU101は、コントロールスイッチ群103の所定のスイッチに対する操作に応じて、これらネットワークインターフェイス115、外部記憶装置116から出力される演奏データを基準データRAM112、或いは被験データRAM113に格納させる。なお、図中の手本データRAM120は、第3の実施の形態における構成要素であり、それについての説明は第3の実施の形態を説明するときに行う。
【0038】
また、メインCPU101は、シリアルインターフェイス114、ネットワークインターフェイス115、或いは外部記憶装置から供給された演奏データ、基準データRAM112、或いは被験データRAM113に格納されている演奏データから、発音命令を生成し、それを楽音発生装置108に出力することにより、自動演奏を行う。
【0039】
上記基準データRAM112には、演奏者が手本とすべき演奏(基準演奏)の演奏データが格納され、他方の被験データRAM113には、演奏者が行った演奏の演奏データが格納される。以降、基準データRAM112に格納された演奏データを基準データ、被験データRAM113に格納された演奏データを被験データと記載する。
【0040】
メインCPU101は、自動演奏を行う一方、基準データと被験データを対比して、被験データで表現(再生)される演奏内容を分析し、その分析結果を表示装置117に表示させる。また、その分析結果に基づき、演奏者の演奏内容の傾向を強調した形に被験データを変更し、該変更した被験データを再生させる自動演奏を行う。
【0041】
基準データと被験データの対比は、詳細は後述するが、基準データ、及び被験データのそれぞれから分析に必要なデータをイベント毎にまとめて、ワークRAM104の異なるワークエリア上にそれぞれ別に格納させた後、そのワークエリア上に格納させたそれぞれの分析用データを用いて、1イベント毎に、基準データと被験データの間の対応関係を検出することで行う。その後、その対応関係に従ってイベント毎に、基準データと被験データの間の差分をパラメータ別に求め、そのパラメータ別に求めた差分を用いて分析を行う。
【0042】
図2は、1音符(ノートデータ)あたりの分析用データの構造を示す図である。MIDIでは、音符の発音開始とその終了をそれぞれ指定するようになっている。このため、ノートオンイベントとノートオフイベントのMIDIデータが1つのノートデータを構成する。そのノートデータは、最も出現頻度の高いイベントデータである。
【0043】
図2において、ノートナンバー、ベロシティ、押鍵タイミング、離鍵タイミング、押鍵時間(音符長)は、基準データから直接的に得られるデータ(1次データ)である。シリアル番号は、そのイベントデータが発生した順序を示す番号であり、その先頭のノートデータから逐次重複のない番号が与えられる。他方のタイミング番号は、イベントデータが発生したタイミングに対して付けた番号(順序)である。従って、例えばコード(和音)を鳴らすために、演奏者が複数の演奏操作子(鍵)を同時、或いはほぼ同時に操作した場合、それらのノートデータには同じタイミング番号が与えられる。これらシリアル番号、及びタイミング番号は、基準データと被験データの各演奏データ中に含まれているノートデータの対応関係を特定するために用いられる。
【0044】
ベロシティ差分、押鍵タイミング差分、離鍵タイミング差分、音符長差分は、対応付けした基準データのノートデータと被験データのノートデータとを対比することで得られるデータである。これらはワークRAM104に格納させずに、必要に応じて求めるようにしても良い。制御用フラグは、基準データと被験データ間でノートデータの対応関係を検出した結果として、このノートデータを演奏内容の分析に用いるか否かを示すデータである。
【0045】
メインCPU101は、図2に示すような分析用データを1音符(ノートデータ)毎にまとめてワークRAM104に所定の形式で格納する。分析用データは、基準データ、及び被験データから、それぞれ作成し、ワークエリアを変えてワークRAM104に格納する。その後、メインCPU101は、ワークRAM104に格納した1音符(ノートデータ)毎の分析用データを用いて各種の演算処理を行い、その演算結果を分析結果として表示装置117に出力させる。第1の実施の形態では、平均値、標準偏差、度数分布等をベロシティ、押鍵タイミング等の各パラメータ毎に求め、それを分析結果として表示させている。
【0046】
なお、第1の実施の形態では、基準データ、及び被験データはともに外部装置、或いは記憶媒体から供給するようにしているが、鍵盤装置105に対して行われた操作内容を表現する演奏データを生成し、この生成した演奏データを各RAM112、或いは113に格納するようにしても良い。
【0047】
以上が、図1に示す電子楽器100の構成、及び概略動作である。次に、図3〜図18に示す動作フローチャートを参照して、メインCPU101の動作を詳細に説明する。最初に、メインCPU101が実行する演奏分析処理について、図3に示すその動作フローチャートを参照して詳細に説明する。
【0048】
この演奏分析処理は、ユーザ(演奏者)がコントロールスイッチ群103の所定のスイッチを操作し、演奏傾向の分析を指示した場合に、メインCPU101が、プログラムROM102に格納されている制御プログラムを読み出してそれを実行することで実現される処理である。
【0049】
先ず、ステップ301では、演奏データ取得処理を実行する。上述したように、第1の実施の形態では、ネットワークインターフェイス115、或いは外部記憶装置116から基準データ、被験データの各演奏データを取得するようにしている。上記演奏データ取得処理は、例えばユーザがコントロールスイッチ群103の所定のスイッチに対する操作に応じて、演奏データを基準データRAM112、或いは被験データRAM113の一方に格納する処理である。取得した演奏データは、スタンダードMIDIファイルのデータ形式で各RAM112、113に格納される。
【0050】
ステップ301に続くステップ302では、所得した基準データ、被験データの各演奏データに含まれているノートデータ数を取得するノート数取得処理を実行する。ノートデータ数を取得すると、続くステップ303において、各演奏データから1次データ(図2参照)を取得する1次データ取得処理を実行する。この1次データ取得処理が終了すると、ステップ304の処理に移行する。
【0051】
ステップ304では、基準データと被験データ間におけるノートデータの対応関係を求めるノートマッチ処理を実行する。このノートマッチ処理の実行によって、基準データと被験データ間におけるノートデータの対応関係が確定される。図2に示す1音符(ノートデータ)あたりの分析用データとして、シリアル番号、及びタイミング番号が各音符(ノートデータ)毎にワークRAM104に書き込まれる。
【0052】
ステップ304に続くステップ305〜307では、確定したノートデータの対応関係から、演奏者の演奏傾向を表現する数値を算出する処理を行う。
先ず、ステップ305では、基準データと被験データのノートデータを対応させて、パラメータ毎にその差分を求める差分取得処理を実行する。この差分取得処理を実行することによって、図2に示す1音符(ノートデータ)あたりの分析用データとして、ベロシティ差分、押鍵タイミング差分、離鍵タイミング差分、及び音符長差分が各音符(ノートデータ)毎にワークRAM104に書き込まれる。
【0053】
ステップ305に続くステップ306では、そのステップ305の差分取得処理の実行によりノートデータ(音符)毎に得た各パラメータの差分の平均値を求める平均値取得処理を行う。これに続くステップ306では、予め定められた設定に従って被験データ(演奏曲)を区間分けし(例えば複数の小節を1区間とする)、平均値所得処理を実行することによって得た各パラメータの差分の平均値をそれぞれ基準として、各区間毎の度数分布、標準偏差を各パラメータ毎に求める標準偏差取得処理を実行する。この標準偏差取得処理の終了により、演奏者の演奏傾向を表現する数値の算出が終了する。
【0054】
ステップ307に続くステップ308では、演奏者の演奏傾向の分析結果、即ちステップ307で各パラメータ毎に求めた標準偏差、度数分布を出力する分析結果出力処理を実行する。この分析結果出力処理を実行することにより、表示装置117の画面上に、演奏曲を分割した各区間毎に各パラメータの標準偏差、及び度数分布が出力される。度数分布の表示は、例えば各パラメータの差分の最大値、及び最小値に応じて、差分の大きさを複数の段階に分け、各段階毎にその段階に属するノートデータ(音符)数を表示することで行う。
【0055】
度数分布や標準偏差等は、標本値の分布の特徴を表すのによく用いられる特性量である。基準データと被験データを対応させ、ノートデータ毎に求めた各パラメータの差分の分布を上記特性量で表現することにより、演奏者は自身の演奏傾向を具体的に把握することができるようになる。これにより、例えば、押鍵タイミングが遅れがちであればそれを直すように、演奏上の悪い傾向や欠点を矯正するように意識した練習を行えることから、高い練習効率を得ることができる。
【0056】
第1の実施の形態では、演奏曲を区間分けし、各区間毎に特性量を求めてそれを表示させている。これには、演奏曲を構成する各メロディを演奏した際に、どのような不具合が生じているかを演奏者が容易に把握できるようにする意味も含まれている。これにより、演奏者は自身の演奏の分析をより細かく具体的に行うことができる。
【0057】
ステップ307に続くステップ309では、基準データに対し、ステップ305で得た各パラメータの差分を強調させた変更を行い、その変更後の基準データを再生させる差分強調再生処理を実行する。この基準データの再生が終了した後、一連の処理を終了する。
【0058】
各パラメータの差分を強調させて基準データを再生することにより、演奏者に対して、自己の演奏傾向を具体的に聴感として認識させることができる。このため、演奏者は自己の演奏傾向を容易に把握することができるようになり、楽器演奏の独習に大きく貢献することができる。第1の実施の形態では、この差分を強調させた基準データの再生の他に、ステップ308で分析結果を表示させているため、演奏者の楽器の独習により大きく貢献することができる。
【0059】
次に、上記ステップ301〜306の各サブルーチン処理について、図4〜図18を参照して詳細に説明する。
図4は、図3のステップ301として実行される演奏データ取得処理の動作フローチャートである。この図4を参照して、最初に演奏データ取得処理について詳細について説明する。
【0060】
上述したように、この演奏データ取得処理は、ネットワークインターフェイス115が受信した、或いは外部記憶装置116が読み出した記憶媒体に記憶されたSMF形式の演奏データを、コントロールスイッチ群103の所定のスイッチに対して行われた操作内容に応じて基準データRAM112、或いは被験データRAM113の一方に格納する処理である。
【0061】
なお、SMFは、周知のように、データ長、トラックブロック数、分解能等のファイルに関する基本的な情報がストアされているヘッダーブロックと、実際の演奏情報がストアされているトラックブロックの2種類のブロックから構成されているファイルである。SMFでは、MIDIイベントの時間情報は前のイベントからのデルタタイムで表される。トラックブロックにストアされている1イベントのMIDIデータは、基本的に、上記時間情報と、その時間情報に従って管理されるイベントデータとから構成されている。
【0062】
先ず、ステップ401では、ネットワークインターフェイス115、或いは外部記憶装置116が出力したヘッダーブロックを受け取り、対象となるSMFのファイルサイズを取得する。ファイルサイズを取得すると、ステップ402の処理に移行する。
【0063】
ステップ402では、取得したファイルサイズ分の格納領域をRAM112、或いは113に確保する。格納領域の確保が終了すると、続くステップ403において、その確保した格納領域の先頭のポインタを取得する。
【0064】
ステップ403に続くステップ404では、確保した格納領域の先頭ポインタから、ネットワークインターフェイス115、或いは外部記憶装置116が出力するSMF(演奏データ)を順次格納させる。このSMFのロードが終了した後、ステップ405の処理に移行する。
【0065】
ステップ405では、データアクセス用のオフセットポインタsmfcountをクリアする。ポインタsmfcountはメインCPU101内部のレジスタ、或いはワークRAM104に保持される変数である。このポインタsmfcountのクリアが終了すると、続くステップ406において、ステップ404でロードしたSMFのヘッダーブロックの情報(ヘッダーブロックにはその長さ(ヘッダー長)がストアされている)を読み取り、演奏シーケンスデータ、即ちトラックブロックが始まる先頭のオフセットポインタ値、及び演奏データ数を取得する。このオフセットポインタ値、及び演奏データ数を取得した後、一連の処理を終了する。
【0066】
このようにして、演奏者(ユーザ)の指定に応じて演奏データが基準データRAM112、或いは被験データRAM113に格納される。なお、第1の実施の形態では、ネットワークインターフェイス115、及び外部記憶装置116が出力した演奏データ(SMF)をRAM112、113に格納させるようにしているが、演奏データが供給される形態はこれらに限定するものではない。例えば鍵盤装置105に対して行われた操作内容(イベント)をMIDIデータで表現し、それに時間情報を付加してRAM112、或いは113に格納するようにしても良い。また、シリアルインターフェイス114が受信したMIDIデータに対しても、時間情報を付けてSMFの形式でRAM112、113に格納しても良い。
【0067】
図5は、図3のステップ302として実行されるノート数取得処理の動作フローチャートである。次に、この図5を参照して、ノート数取得処理について詳細に説明する。ノート数取得処理は、基準データ、及び被験データの各演奏データに対して行われるが、ここでは基準データに対して行うことを想定してその説明を行う。これは、この図5のノート数取得処理内で実行される各種サブルーチン処理においても同様である。
【0068】
このノート数取得処理では、時間情報を無視して基準データRAM112に格納された基準データを先頭から再生し、各チャンネル毎にノートデータ(音符)の数を計数することが行われる。
【0069】
ステップ501〜504では、この一連の処理を行ううえでの初期設定に関わる処理が行われる。
先ず、ステップ501では、ノートデータをカウントするモードであるカウントモードをセットする。続くステップ502では、ノートデータの計数の対象とするトラックのデータ数を変数tobereadにセットする。これは、SMFのトラックブロックの先頭部分にストアされているトラックデータ長を読み出し、それを変数tobereadにセットすることにより実現される。
【0070】
変数tobereadにトラックのデータ数をセットした後は、次にステップ503において、オフセットポインタsmfcountに、図4のステップ406で取得した処理対象(基準データ)のSMFのオフセットポインタ値をセットする。続くステップ504では、各イベントデータの時間管理を行うための変数であるタイムクロックcurrtimeをクリアする。上記変数toberead、タイムクロックcurrtimeは、メインCPU101内部のレジスタ、或いはワークRAM104に保持される変数である。
【0071】
ステップ504に続くステップ505では、処理対象のSMFからMIDIデータを読み出すSMF処理を実行する。このSMF処理を実行することにより、各チャンネル毎にノートデータ(音符)数が計数される。このSMF処理が終了した後は、ステップ506の処理に移行する。
【0072】
ステップ506では、ステップ505で取得した各チャンネル毎のノートデータ(音符)数に対応させて、ワークRAM104にワークエリアを確保する。ステップ506に続くステップ507では、各チャンネル毎に確保したワークエリアの先頭ポインタを取得する。その後、一連の処理を終了する。なお、ステップ507の先頭ポインタの取得は、その先頭ポインタの値を用意した変数にセットすることで実現される処理である。
【0073】
このノート数取得処理を実行することで、図2に示す分析用データが格納される領域が、各チャンネル毎に得たノートデータ数に応じてワークRAM104に用意される。
【0074】
次に、上記ステップ505のSMF処理について、図6に示すその動作フローチャートを参照して説明する。
SMFのトラックブロックには、イベントデータは時間情報と対になってストアされている。時間情報は、例えば2バイトである。他方のイベントデータは、ステータスバイトとデータバイトからなり、データバイト数はステータスバイトの種類によって変化する。例えば、ステータスバイトがノートオンではデータバイト数は2、プログラムチェンジではデータバイト数は1である。このSMF処理では、ステータスバイトが定義するチャンネルメッセージの種類を判別しながら、トラックブロックを構成する各MIDIデータの読み出しを行う。
【0075】
先ず、ステップ601では、イニシャライズを行う。このイニシャライズを行うことにより、変数running、及びstatusにはそれぞれ0がセットされる。これらの変数は、メインCPU101内部のレジスタ、或いはワークRAM104に格納される変数である。
【0076】
ステップ601に続くステップ602〜618では、基準データRAM112に格納された処理対象のトラックのデータ(バイト)数がセットされている変数tobereadを、そのトラックから読み出したデータ(バイト)数に応じて減算しながら、それらの処理が繰り返し行われる。
【0077】
ステップ602では、変数tobereadの値が0よりも大きいか否か判定する。処理するトラックから全てのデータを読み出した場合、その判定はNOとなって、ここで一連の処理が終了する。そうでない場合には、その判定はYESとなってステップ603の処理に移行する。そのステップ603では、トラックから時間情報を読み出して取得する。時間情報は、2バイトである。このため、このステップ603では、時間情報を取得するとともに、時間情報のバイト数を変数tobereadから減算する。ステップ603の処理が終了すると、ステップ604の処理に移行する。
【0078】
ステップ604では、現在カウントモード或いはパラメータ取得モードが設定されているか否か判定する。カウントモードは、演奏データ中のノートデータ数をカウントするモードであり、一方のパラメータ取得処理は、図2の1次データを取得するモードである。これらのうちの一方のモードが設定されていた場合、その判定はYESとなってステップ605の処理に移行する。そうでない場合には、即ち自動演奏を行うプレイモードが設定されていた場合には、その判定はNOとなってステップ606の処理に移行する。
【0079】
ステップ605では、現在までの累積時間がセットされる変数currtimeに取得時間を加算し、その後、ステップ607の処理に移行する。他方のステップ606では、取得時間の待機を行う。その後、ステップ607の処理に移行する。
【0080】
ステップ607では、時間情報に続く次の1バイトをSMFから読み出し、それを変数cに代入する。SMFでは、時間情報の次はステータスバイトである。従って、ステップ607の処理を実行することにより、変数cにはステータスバイトが代入される。周知のように、このステータスバイトは1バイトである。このため、ステップ607では、変数tobereadのデクリメントを合わせて行う。
【0081】
ステップ607に続くステップ608では、変数cに代入されたデータがチャンネルメッセージのステータスバイトか否か判定する。チャンネルメッセージは、ステータスバイトの下位4ビットにMIDIチャンネルを持ったメッセージである。その最上位ビットは、ステータスバイトを示す1であり、それに続く3ビットは、ノートオン、ノートオフ、プログラムチェンジ等のチャンネルメッセージの種類を示す情報である。その変数cに代入されたデータがチャンネルメッセージであった場合、ステップ608の判定はYESとなってステップ609の処理に移行する。そうでない場合には、その判定はNOとなってステップ610の処理に移行する。ステップ609では、変数statusに変数cの値を代入し、変数runningには0をセットし、その後、ステップ612の処理に移行する。
【0082】
MIDIは、片方向送信であることから、スレーブ側が正しくメッセージを受信しているか否かをマスター側がチェックする方法が存在しない。そのため、MIDIには、接触不良や断線等の何らかの理由によりMIDIメッセージを受信できず、音が鳴りっぱなしになるといったトラブルを避けるために、アクティブセンシングという機能が用意されている。このアクティブセンシング機能は、300ms以内にメッセージがなにも受信できなかった場合、発音中の音を自動的に止める機能である。このアクティブセンシング機能に対応して、マスター側は、300ms以上データ間隔が空かないように、送るべきメッセージがない場合、ダミーとしてアクティブセンシング“FEH”(Hは16進数を表す)を送出しなければならない。このアクティブセンシングが変数cに代入されていた場合、ステップ608の判定はNOとなり、ステップ610の処理に移行することになる。
【0083】
ステップ610では、変数statusの値が0か否か判定する。この変数statusには、変数cのデータがチャンネルメッセージであればステップ609で変数cのデータが代入されることから、変数cにアクティブセンシングが代入されていた場合、変数statusには何らかの値(チャンネルメッセージ)がセットされているはずである。このため、変数statusの値が0であった場合、即ちアクティブセンシングの前に有効となっているチャンネルメッセージがない場合、その判定はYESとなり、データ異常として一連の処理を終了する。そうでない場合には、その判定はNOとなってステップ611の処理に移行する。そのステップ611では、変数runningに1をセットし、その後、ステップ612の処理に移行する。変数runningにセットした1は、現在の状態をそのまま維持する(発音中の音はそのまま鳴らしているように)ことを示す値である。
【0084】
ステップ612では、変数cに代入されているデータを解析して、それに続くバイト数neededを得る。このバイト数neededは、上述したように、例えば変数cに代入されているデータがノートオンのチャンネルメッセージであれば2、そのデータはプログラムチェンジのチャンネルメッセージであれば1である。
ステップ612に続くステップ613では、バイト数neededの値が0ではないか否か判定する。バイト数neededの値が0であった場合、その判定はNOとなってステップ614の処理に移行する。そうでない場合には、その判定はYESとなってステップ615の処理に移行する。ステップ614の処理に移行するのは、例えば変数cにアクティブセンシング(リアルタイム・メッセージ)が代入されていた場合であり、このステップ614では、その変数cに代入されているメッセージに応じたその他の処理を実行する。その処理が終了した後、ステップ602の処理に戻る。
【0085】
一方、ステップ615では、変数runningの値が0ではないか否か判定する。変数runningの値が0であった場合、即ち例えば変数cにアクティブセンシングが代入されていた場合、その判定はYESとなってステップ616の処理に移行する。そうでない場合には、例えば変数cにチャンネルメッセージが代入されていた場合には、その判定はNOとなってステップ617の処理に移行する。
【0086】
ステップ616では、変数c1に変数cの値を代入し、その後、ステップ618の処理に移行する。他方のステップ617では、ステップ612で得たバイト数neededに従って、その数のバイトをSMFから読み出し、読み出したそれらのバイトを変数に代入する。このとき、バイト数neededが1であれば、SMFから読み出した1バイトのデータを変数c1に代入する。バイト数neededが2であれば、SMFからさらに読み出した1バイトのデータ(2バイト目のデータ)を変数c2に代入する。このステップ617では、バイト数neededのデータをSMFから読み出すので、変数tobereadからバイト数neededを減算する。これらが終了した後、ステップ618の処理に移行する。
【0087】
ステップ618では、チャンネルメッセージ処理を実行する。このチャンネルメッセージ処理には、このSMF処理から変数c、変数c1、及び変数c2の値が引数として渡され、これら渡された各引数の値、及び現在設定されているモードに応じた内容でチャンネルメッセージ処理は実行される。このチャンネルメッセージ処理が終了した後、ステップ602の処理に戻る。
【0088】
次に、上述したステップ618のチャンネルメッセージ処理について、図7に示すその動作フローチャートを参照して詳細に説明する。
上述したように、このチャンネルメッセージ処理には、SMF処理から変数c、c1、及びc2の各値が引数と渡される。このチャンネルメッセージ処理内において、これらSMF処理から引数として渡された各変数は、チャンネルメッセージ処理内において、変数cは変数status、変数c1は変数c1、変数c2は変数c2として用いらる。
【0089】
先ず、ステップ701では、変数chanに変数statusの下位4ビットを代入する。これにより、変数chanには、チャンネルメッセージのMIDIチャンネルが代入されることになる。この代入が終了すると、ステップ702の処理に移行する。
【0090】
ステップ702では、現在カウントモードが設定されているか否か判定する。カウントモードは、チャンネルメッセージに応じた発音を行わなくてもよいモードである。そのカウントモードが設定されていた場合、その判定はYESとなってステップ703の処理に移行する。
【0091】
ステップ703では、変数cに代入されているチャンネルメッセージの種類がノートオンであるか否か判定する。ノートオンのチャンネルメッセージが変数cに代入されていた場合、その判定はYESとなってステップ704の処理に移行する。そうでない場合には、その判定はNOとなり、一連の処理を終了する。
【0092】
ステップ704では、変数c2に代入されている値が0ではないか否か判定する。変数cにノートオンのチャンネルメッセージが代入されていた場合、変数c1にはノートナンバー、変数c2にはベロシティが代入されている。このベロシティは、鍵を弾いたときの速さを示すパラメータである。それは、1〜127段階の精度を持つが、その値が0のときにはノートオフを意味する。このため、ベロシティの値が0であった場合、その判定はNOとなって一連の処理を終了する。そうでない場合には、その判定はYESとなってステップ705の処理に移行する。
【0093】
ステップ705では、変数c1に代入されているノートナンバーで発音を行うノートオンコード処理を実行する。このノートオンコード処理では、現在設定されているモードに応じてその内部の処理が行われる。そのノートオンコード処理を終了した後、一連の処理を終了する。なお、このステップ705は、カウントモードが設定されていた場合に実行される。このため、ステップ705でノートオンコード処理を実行しても、実際の発音は行われない。
【0094】
現在カウントモードが設定されていない場合、ステップ702の判定がNOとなり、ステップ706の処理に移行する。ステップ706〜720では、変数cに代入されたチャンネルメッセージの種類に応じた処理が行われる。
【0095】
先ず、ステップ706では、そのチャンネルメッセージの種類がノートオフか否か判定する。変数cにノートオフのチャンネルメッセージが代入されていた場合、その判定はYESとなってステップ707の処理に移行する。そうでない場合には、その判定はNOとなってステップ708の処理に移行する。
【0096】
ノートオフのチャンネルメッセージが変数cに代入されている場合、変数c1にはノートナンバーが代入されている。ステップ707では、変数c1に代入されているノートナンバーの音を消音させるノートオフコード処理を実行する。その後、一連の処理を終了する。
【0097】
ステップ708では、そのチャンネルメッセージの種類がノートオンか否か判定する。変数cにノートオンのチャンネルメッセージが代入されていた場合、その判定はYESとなってステップ709の処理に移行する。そうでない場合には、その判定はNOとなってステップ711の処理に移行する。
【0098】
ステップ709では、変数c2に代入されている値、即ちベロシティの値が0ではないか否か判定する。ベロシティの値が0の場合、その判定はNOとなり、上述したステップ707のノートオフコード処理を実行する。ベロシティの値が0ではない場合、その判定はYESとなり、ステップ710のノートオンコード処理を実行する。ノートオンコード処理の終了後、一連の処理を終了する。
【0099】
ステップ711では、そのチャンネルメッセージの種類がキープレッシャか否か判定する。変数cにキープレッシャのチャンネルメッセージが代入されていた場合、その判定はYESとなってステップ712の処理に移行する。そうでない場合には、その判定はNOとなってステップ713の処理に移行する。
【0100】
変数cにキープレッシャのチャンネルメッセージが代入されていた場合、変数c1にはノートナンバー、変数c2にはプレッシャ値が代入されている。ステップ712では、変数c1に代入されているノートナンバーのキープレッシャに、変数c2に代入されているプレッシャ値を設定する。これにより、そのノートナンバーは、キープレッシャに応じた音量で発音される。キープレッシャを設定した後に、一連の処理が終了する。
【0101】
ステップ713では、そのチャンネルメッセージの種類がコントロールチェンジか否か判定する。変数cにコントロールチェンジのチャンネルメッセージが代入されていた場合、その判定はYESとなってステップ714の処理に移行する。そうでない場合には、その判定はNOとなってステップ715の処理に移行する。
【0102】
コントロールチェンジは、使用頻度の高い演奏情報であり、主に演奏におけるエフェクト機能の制御に用いられる。変数cにコントロールチェンジのチャンネルメッセージが代入されていた場合、変数c1にはコントロールナンバー、変数c2にはその値が代入されている。コントロールナンバーとして、例えばモジュレーションデプスには1、エクスプレッションには11、トレモロデプスには92が設定されている。ステップ714では、変数c1に代入されているコントロールナンバーが示す種類のパラメータに、変数c2に代入されている値を設定する処理を行う。その後、一連の処理を終了する。
【0103】
ステップ715では、チャンネルメッセージの種類がプログラムチェンジか否か判定する。変数cにプログラムチェンジのチャンネルメッセージが代入されていた場合、その判定はYESとなってステップ716の処理に移行する。そうでない場合には、その判定はNOとなってステップ717の処理に移行する。
【0104】
プログラムチェンジは、音色の切り替えを指示するコマンドである。そのプログラムチェンジのチャンネルメッセージが変数cに代入されていた場合、変数c1にはプログラムナンバーが代入されている。プログラムナンバーとして、例えばアコスティックピアノには1、フルートには5が設定されている。ステップ716では、変数c1に代入されているプログラムナンバーに従って音色の設定を行う。その後、一連の処理を終了する。
【0105】
ステップ717では、チャンネルメッセージの種類がチャンネルプレッシャか否か判定する。変数cにチャンネルプレッシャのチャンネルメッセージが代入されていた場合、その判定はYESとなってステップ718に移行する。そうでない場合には、その判定はNOとなってステップ719に移行する。
【0106】
チャンネルプレッシャは、1つのチャンネルで1つのアフタータッチ情報を共有して使用するためのコマンドである。そのチャンネルプレッシャのチャンネルメッセージが変数cに代入されていた場合、変数c1にはプレッシャ値が代入されている。ステップ718では、変数c1に代入されているプレッシャ値に従って、変数chanに代入されているチャンネルのプレッシャを設定する。それが終了した後、一連の処理を終了する。
【0107】
ステップ719では、チャンネルメッセージの種類がピッチホイールチェンジか否か判定する。変数cにピッチホイールチェンジのチャンネルメッセージが代入されていた場合、その判定はYESとなってステップ720に移行する。そうでない場合には、その判定はNOとなって一連の処理を終了する。
【0108】
ピッチホイールチェンジは、音の音程をシフトさせるためのコマンドである。そのピッチホイールチェンジのチャンネルメッセージが変数cに代入されていた場合、変数c1及びc2にシフト量が代入されている。ステップ720では、変数c1及びc2に代入されているシフト量に従って、変数chanに代入されているチャンネルのピッチベンドを設定する。それが終了した後、一連の処理を終了する。
【0109】
次に、上述したチャンネルメッセージ処理内で実行されるステップ705(及び710)のノートオンコード処理、ステップ707のノートオフコード処理について、図8、図9の動作フローチャートを参照して詳細に説明する。
【0110】
最初に、図8を参照して、ステップ705(及び710)として実行されるノートオンコード処理について説明する。このノートオンコード処理には、チャンネルメッセージ処理から、変数chan、変数c1、及び変数c2が引数として渡される。
【0111】
先ず、ステップ801では、ワークRAM104にアクセスするためのワーク用ポインタをセットする。ワーク用ポインタは、ワークRAM104に、図2に示す分析用データを1音符毎にまとめてワークRAM104のワークエリア上に格納するために用いられるものであり、随時更新される。その初期値は、図5のステップ507で取得される。このステップ801では、変数chanが示すチャンネルにおいて、音符の分析用データを次に書き込むべきポインタをワーク用ポインタにセットする。ワーク用ポインタのセットが終了すると、ステップ802の処理に移行する。
【0112】
ステップ802では、現在カウントモードが設定されているか否か判定する。現在カウントモードが設定されている場合、その判定はYESとなってステップ803の処理に移行する。そうでない場合には、その判定はNOとなってステップ804の処理に移行する。
【0113】
ステップ803では、変数chanのチャンネルに存在する音符数を計数する音符数計数処理を行う。チャンネルメッセージ処理は、図6に示すSMF処理において、SMFから1MIDIデータを読み出す毎に実行される。このため、音符数計数処理では、それまでのカウント値のインクリメントを行う。それが終了した後、一連の処理を終了する。
【0114】
ステップ804では、現在パラメータ取得モードが設定されているか否か判定する。上述したように、パラメータ取得モードは、図2に示す分析用データの中の1次データを取得する(ワークRAM104に格納する)ためのモードである。そのパラメータ取得モードが設定されている場合、その判定はYESとなってステップ805の処理に移行する。そうでない場合には(この場合はプレイモードが設定されている)、その判定はNOとなってステップ814の処理に移行する。
【0115】
ステップ805〜812では、上記1次データを取得するための処理が行われる。
先ず、ステップ805では、ワーク用ポインタを別のポインタにセットする。この別のポインタは、現在処理しているノートデータ(音符)とその前のノートデータ(音符)の押鍵タイミングの差分を取得するために用いられる。以降、ノートオンコード処理の説明において、この別のポインタはついては単にポインタと呼ぶことにする。
【0116】
ステップ805に続くステップ806〜808では、ワーク用ポインタが示すワークRAM104のワークエリア上に、ノートナンバー(キーコード)、ベロシティ、押鍵タイミングを格納する処理を行う。ノートナンバーは変数c1、ベロシティは変数c2、押鍵タイミングは図6のSMF処理内のステップ605で更新された変数currtimeから取得する。
【0117】
ステップ808に続くステップ809〜813では、上記押鍵タイミングの差分を取得するための処理が行われる。
先ず、ステップ809では、現在の処理対象が最初のノートオンイベントのものであるか否か判定する。図6のSMF処理内のステップ607で読み出したステータスバイトが最初のノートオンのチャンネルメッセージであった場合、即ち最初の音符であった場合、その判定はYESとなってステップ813の処理に移行する。そうでない場合には、その判定はNOとなってステップ810の処理に移行する。
【0118】
ステップ810では、ステップ805でセットしたポインタをデクリメントして、前音符のワークエリア上のポインタを取得する。続くステップ811では、現在の押鍵タイミング(時間)からそのポインタが示す分析用データ中の押鍵タイミング(時間)を減算し、押鍵タイミングが前後する2音符間の押鍵タイミング(時間)の差分(図中ではノートオンイベント間タイムクロック)を取得する。その後、ステップ812において、ワーク用ポインタを更新(インクリメント)し、その更新が終了した後、一連の処理を終了する。
【0119】
なお、SMFでは、時間情報は分解能(1秒間当たりの演奏用のクロック数)を基準とした時間で表現される。このため、押鍵タイミング、押鍵タイミングの差分においても、それらはクロック数で表現される。
【0120】
一方、ステップ813では、現在の処理対象が最初の音符であることから、押鍵タイミングの差分(ノートオンイベント間タイムクロック)として、図6のSMF処理内のステップ605で取得した累積時間(変数currtimeに代入される)を取得する。その後、ステップ812の処理に移行する。
【0121】
現在プレイモードが設定されている場合、ステップ804の判定がNOとなり、次にステップ814の処理が実行される。このプレイモードは、図2に示す分析用データが基準データ、及び被験データのそれぞれにおいて全て確定した後に設定される。ステップ814、及び815の処理は、その確定した後の分析用データを用いて行われる。
【0122】
ステップ814では、ワーク用ポインタが示すワークエリア上のベロシティ、及びその差分を読み出し、この読み出した差分に強調係数を掛けた値と、ベロシティからその差分を減算した値とを加算し、その加算結果を新たなベロシティとして設定する。
【0123】
続くステップ815では、上記ステップ815で得られた新しいベロシティ値を用いて発音処理を行う。この発音処理は、メインCPU101が、変数chan(チャンネル)、変数c1(ノートナンバー)、及びステップ815で得た新しいベロシティから発音命令を生成し、その生成した発音命令を楽音発生装置(音源)に出力することで実現される。
【0124】
これにより、演奏者が行った演奏操作の傾向が強調された自動演奏が行われる。この自動演奏により、演奏者は、自身の演奏内容の傾向を聴感から認識することができる。
【0125】
なお、第1の実施の形態では、楽音発生装置108に発音命令を出力して、演奏者の演奏操作の傾向を強調させた自動演奏を行っているが、ステップ814で変更した演奏データ(MIDIデータ)を、シリアルインターフェイス114等を用いて外部装置に送出するようにしても良い。また、その演奏データを外部記憶装置116に出力して、記憶媒体に記憶させても良い。また、基準データの変更を、差分を強調させずに行ってもよい。このようにしても、演奏者に、効果は多少低減するが、自身の演奏内容の傾向を聴感から認識させることができる。
【0126】
また、第1の実施の形態では、基準データにおいて変更するパラメータをベロシティとしているが、例えば押鍵タイミングのような他のパラメータとしても良い。また、複数のパラメータであっても良い。更には、基準データのパラメータを、演奏者が指定できるようにしても良い。
【0127】
図9は、図7に示すチャンネルメッセージ処理内でステップ707として実行されるノートオフコード処理の動作フローチャートである。次に、この図9を参照して、ノートオフコード処理について詳細に説明する。このノートオフコード処理には、チャンネルメッセージ処理から、変数chan、変数c1、及び変数c2が引数として渡される。
【0128】
先ず、ステップ901では、ワークRAM104のワークエリアにアクセスするためのポインタを取得する。このポインタには、図8のノートオンコード処理内のステップ812で更新されたワーク用ポインタの値がセットされる。
【0129】
ステップ901に続くステップ902では、現在カウントモードが設定されているか否か判定する。現在カウントモードが設定されている場合、その判定はYESとなって一連の処理を終了する。そうでない場合には、その判定はNOとなってステップ903の処理に移行する。
【0130】
ステップ903では、現在パラメータ取得モードが設定されているか否か判定する。パラメータ取得モードが設定されている場合、その判定はYESとなってステップ904の処理に移行する。そうでない場合には、その判定はNOとなってステップ909の処理に移行する。
【0131】
ステップ904〜908は、図2に示す分析用データ中の押鍵時間(音符長)を取得するための処理が行われる。
先ず、ステップ904では、前音符のワークエリア上のポインタを取得する。これは、ステップ901で取得したポインタの値をデクリメントすることで行われる。これが終了した後、ステップ905の処理に移行する。
【0132】
ステップ905では、ポインタが示す前音符のノートナンバー(キーコード)が、ノートオフが命令されたノートナンバー(キーコード)と等しいか否か判定する。それらのノートナンバー(キーコード)が等しい場合、その判定はYESとなってステップ907の処理に移行する。そうでない場合には、ステップ906の処理に移行する。
【0133】
ステップ906では、さらに一つ前の音符のワークエリア上のポインタを取得する。これは、ポインタをデクリメントすることにより実現される。ポインタをデクリメントした後、ステップ905の処理に戻る。
【0134】
ステップ905でそれらのノートデータ(キーデータ)が等しい、即ちYESと判定するまで、ステップ905、906の処理を繰り返し行うことにより、ワークRAM104のワークエリア上のノートオフさせる音符の分析用データが格納されているポインタが探し出される。
【0135】
ステップ905の判定がYESとなることで実行されるステップ907では、タイムクロック数で表現される現在の時刻を取得する。現在の時刻は、変数currtimeに格納されており、その変数の値が、現在のポインタが示すワークエリア上に離鍵タイミングとして格納される。続くステップ908では、ステップ907で取得した現在時刻から、現在のポインタが示すワークエリア上に格納されている押鍵タイミングを減算し、押鍵時間、即ち音符長を取得する。この取得した音符長は、現在のポインタが示すワークエリア上に格納される。それが終了した後、一連の処理を終了する。
【0136】
このように、パラメータ取得処理を設定して、ノートオンコード処理、ノートオフコード処理を実行することにより、図2に示す1音符当たりの分析用データ中の1次データが、ワークRAM104のワークエリア上にチャンネル毎に分けて格納される。
【0137】
次に、図3の全体処理内でステップ303として実行される1次データ取得処理について、図10に示すその動作フローチャートを参照して詳細に説明する。この1次データ取得処理は、図2に示す分析用データ中の1次データを取得する処理であり、その1次データの取得は、パラメータ取得モードを設定し、SMF処理を実行することで実現される。この1次データ取得処理も、基準データ、及び被験データのそれぞれに対して行われる。
【0138】
ステップ1001〜1004では、各種の初期設定が行われる。
先ず、ステップ1001では、パラメータ取得モードをセットする。続くステップ1002では、処理するトラックのデータ数を変数tobereadにセットする。処理するトラックのデータ数は、図4の演奏データ取得処理内のステップ406を実行することで得られたものである。
【0139】
ステップ1002に続くステップ1003では、変数であるオフセットポインタsmfcountのセットを行う。このセットは、図4の演奏データ取得処理内のステップ406を実行することで得られたオフセットポインタ値を、オフセットポインタsmfcountにセットすることで行われる。ステップ1003の処理が終了した後に実行されるステップ1004では、演奏が開始してから経過した時間である累積時間がセットされるタイムクロック(変数)currtimeをクリアする。
【0140】
ステップ1004に続くステップ1005では、上述したSMF処理を実行する。その後、一連の処理を終了する。
上記SMF処理は、チャンネルメッセージ処理を呼び出し、そのチャンネルメッセージ処理は、上述したノートオンコード処理、ノートオフコード処理を呼び出す。ステップ1001ではパラメータ取得モードがセットされているので、ノートオンコード処理、ノートオフコード処理は、そのパラメータ取得モードに応じた内容で行われる。このため、図2の分析用データ中の1次データがワークRAM104のワークエリア上に格納されることになる。
【0141】
なお、図3のステップ309として実行される差分強調再生処理は、上述した1次データ取得処理とほぼ同じであり、ステップ1001でパラメータ取得モードの換わりにプレイモードを設定するところだけが異なっている。第1の実施の形態では、図8のノートオンコード処理から判るように、基準データにおいて変更するパラメータ(これが、被験データの演奏内容を反映させるパラメータである)を固定にしている。例えば、演奏者が所望するパラメータを指定できるようにした場合には、差分強調再生処理からその指定されたパラメータをノートオンコード処理に渡すようにし、また、ノートオンコード処理に、各種パラメータの変更を行える機能を追加すれば良い。
【0142】
次に、図3の全体処理内でステップ304として実行されるノートマッチ処理について、図11に示すその動作フローチャートを参照して詳細に説明する。このノートマッチ処理は、基準データRAM112にSMFの形式で格納されている基準データ中のノートデータ(音符)と、被験データRAM113にSMFの形式で格納されている被験データ中のノートデータ(音符)の対応関係を検出する処理である。ワークRAM104には、基準データと被験データの各分析用データが異なるワークエリアに格納されている。ノートマッチ処理は、これら各分析用データを対象にして実行される。
【0143】
先ずステップ1101では、基準演奏の同タイミング押鍵検出処理を実行する。これは、ワークRAM104のワークエリアに格納されている基準データの分析用データを用いて行われる。この同タイミング押鍵検出処理を実行することで、図2の分析用データとして、シリアル番号、及びタイミング番号が新たにワークRAM104のワークエリア上に格納される。
【0144】
ステップ1101に続くステップ1102では、押鍵タイミングによるノートマッチ処理を行う。このノートマッチ処理は、基準データと被験データの各ノートデータを、そのイベントが発生したタイミング、即ち押鍵タイミングに着目して対応関係を検出する処理である。
【0145】
ステップ1102に続くステップ1103では、上記ステップ1102の押鍵タイミングによるノートマッチ処理を実行することで得た基準データと被験データ間におけるノートデータの対応関係を補正するノートマッチ補正処理を実行する。その補正は、ノートデータのノートナンバーに着目して行う。このノートマッチ補正処理を終了した後、一連の処理を終了する。
【0146】
上記ステップ1101〜1103は、全てサブルーチン処理として実行される。次に、ステップ1101〜1103の各サブルーチン処理について詳細に説明する。
【0147】
最初に、ステップ1101として実行される基準演奏の同タイミング押鍵検出処理について、図12に示すその動作フローチャートを参照して詳細に説明する。この同タイミング押鍵検出処理は、上述したように、ワークRAM104のワークエリア上に、音符(ノートデータ)毎にまとめて格納された基準データの分析用データを対象にし、ノートデータの押鍵タイミングに着目して行われる。
【0148】
ステップ1201〜1203では、各種変数に対する初期設定が行われる。
先ず、ステップ1201では、同一タイミングとすべきノートデータを特定するために用いられるカレントタイミングptr_timingに0をセットする。続くステップ1202では、図5に示すノート数取得処理内のステップ507の処理を実行することにより得たワークエリアの先頭ポインタをワークポインタptr_m0にセットする。その後、ステップ1203において、カウンタmに0をセットする。このカウンタmは、ノートデータにシリアル番号を付けるために、ポインタptr_m0と対応させて用いられる。
【0149】
ステップ1203に続くステップ1204〜1210は、カウンタmとポインタptr_m0をインクリメントしながら、ワークRAM104のワークエリア上に分析用データが格納されているノートデータに、シリアル番号、タイミング番号を付けるための処理が行われる。
【0150】
先ず、ステップ1204では、カウントmの値が総ノート数よりも小さいか否か判定する。上記総ノート数は、図5に示すノート数取得処理内でステップ505のSMF処理を実行することにより得た値である。ワークエリア上の全てのノートデータに対してシリアル番号、及びタイミング番号を付けた場合、その判定はNOとなって一連の処理を終了する。そうでない場合には、その判定はYESとなってステップ1205の処理に移行する。
【0151】
ステップ1205では、ポインタptr_m0により示される音符(ノートデータ)のシリアル番号に、カウンタmの値をセットする。このシリアル番号のセットは、メインCPU101が、ワークRAM104のワークエリア上のポインタptr_m0が示す記憶領域に、カウンタmの値をシリアル番号として格納することで実現される。
【0152】
ステップ1205に続くステップ1206では、前音符と現在の音符の間の発音開始時間の差、即ちノートオンイベント間の時間が所定時間以下か否か判定する。例えば演奏者が和音を弾いたときのように、そのノートオンイベント間の時間が所定時間以下であった場合、その判定はYESとなってステップ1207の処理に移行する。そうでない場合には、その判定はNOとなってステップ1209の処理に移行する。
【0153】
ステップ1207では、ポインタptr_m0により示される音符(ノートデータ)のタイミング番号に、カレントタイミングptr_timingの値をセットする。後述するように、カレントタイミングptr_timingの値は、ノートオンイベント間の時間が所定時間よりも大きかった場合にのみ更新される。このため、ノートオンイベント間の時間が所定時間以下に近接している音符(ノートデータ)には、全て同じ値のタイミング番号が付けられることになる。そのタイミング番号のセットは、メインCPU101が、ワークRAM104のワークエリア上のポインタptr_m0が示す記憶領域に、カレントタイミングptr_timingの値をタイミング番号として格納することで実現される。
【0154】
ステップ1207に続くステップ1208では、カウンタmとポインタptr_m0をインクリメントする。それらのインクリメントが終了した後、ステップ1204の処理に戻る。
【0155】
一方、ステップ1209では、カレントタイミングptr_timingにカウンタmの値をセットして、その更新を行う。それに続くステップ1210では、ポインタptr_m0により示される音符(ノートデータ)のタイミング番号に、カウンタmの値をセットする。その後、上述のステップ1208の処理に移行する。
【0156】
この基準演奏の同タイミングの押鍵検出処理を実行することにより、各ノートデータには、そのイベントが発生した順番を示す値がシリアル番号として付けられる。また、タイミング番号には、そのイベントの発生が同一のタイミングであるとしたノートデータのなかで、最初にイベントが発生したノートデータのシリアル番号が付けられる。同一のタイミングとするノートデータが一つであれば、タイミング番号にはシリアル番号と同じ値が付けられる。
【0157】
図13は、図11のステップ1102として実行される押鍵タイミングによるノートマッチ処理の動作フローチャートであり、図14は、その図13のステップ1301として実行される処理の詳細を示す図(動作フローチャート)である。次に、図13、及び図14を参照して、押鍵タイミングによるノートマッチ処理について詳細に説明する。この押鍵タイミングによるノートマッチ処理は、ワークRAM104の異なるワークエリア上に格納された基準データと被験データの分析用データを対象として実行される。
【0158】
先ず、ステップ1301では、ワークRAM104のワークエリア上に、1音符(ノートデータ)毎にまとめて格納された基準データの分析用データにアクセスするためのイニシャライズ処理を行う。図14を参照して、その詳細を説明する。
【0159】
ステップ1401〜1404では、各種変数に対する初期設定が行われる。
先ず、ステップ1401では、図5に示すノート数取得処理内のステップ507の処理を実行することにより得たワークエリアの先頭ポインタをポインタptr_m1にセットする。続くステップ1402では、その先頭ポインタの次のノートデータのポインタ値をポインタptr_m2にセットする。
【0160】
ステップ1402に続くステップ1403では、ポインタptr_m2に対応させて用いる各種カウンタをセットする。具体的には、カウンタm、及びm1には0をセットし、カウンタm2には1をセットする。その後、ステップ1404において、各種判定用に用いられるフラグfrをセットする。
【0161】
ステップ1404に続くステップ1405では、カウンタm2の値が総ノート数よりも小さいか否か判定する。この総ノート数は、図5に示すノート数取得処理を実行することで得た値である。カウンタm2の値が総ノート数よりも小さい場合、その判定はYESとなってステップ1406の処理に移行する。そうでない場合には、その判定はNOとなって図13のステップ1302の処理に移行する。
【0162】
ステップ1406では、ポインタptr_m1とポインタptr_m2により示されるノートデータのタイミング番号が同一か否か判定する。それらのタイミング番号が同一であった場合、その判定はYESとなってステップ1407の処理に移行する。そうでない場合には、その判定はNOとなってステップ1408の処理に移行する。
【0163】
ステップ1407では、カウンタm2とポインタptr_m2をインクリメントして、それらを更新する。その後、ステップ1405の処理に戻る。一方、ステップ1408では、フラグfrをクリアし、その後、図13のステップ1302の処理に移行する。
【0164】
ステップ1405〜1407の処理を、ステップ1406の判定がNOとなるまで繰り返すことにより、ポインタptr_m1とポインタptr_m2には、タイミング番号が異なるノートデータのポインタ値がセットされる。
【0165】
図13の説明に戻る。
ステップ1302では、ワークRAM104の被験データの分析用データにアクセスするためのポインタptr_t0に、図5に示すノート数取得処理内のステップ507の処理を実行することにより得たワークエリアの先頭ポインタをコピーする。続くステップ1303では、ポインタptr_t0に対応させて用いるカウンタtに0をセットする。カウンタtに0をセットした後、ステップ1304の処理に移行する。
【0166】
ステップ1304〜1327の処理の繰り返しでは、カウンタtとポインタptr_t0を更新しながら、ポインタptr_t0のノートデータに対応する基準データのノートデータの検索が行われる。
【0167】
先ず、ステップ1304では、カウンタtの値が被験データの総ノート数よりも小さいか否か判定する。この総ノート数は、図5に示すノート数取得処理を実行することで得た値である。カウンタtの値が総ノート数よりも小さい場合、その判定はYESとなってステップ1305の処理に移行する。そうでない場合には、その判定はNOとなって一連の処理を終了する。
【0168】
ステップ1305では、ポインタptr_t0が示す音符(ノートデータ)の分析用データから、押鍵タイミングデータを取得し、それを変数t_timeにセットする。続くステップ1306では、ポインタptr_m1が示す音符(ノートデータ)の分析用データから、押鍵タイミングデータを取得し、それら音符(ノートデータ)間のイベント発生時刻の時間差(変数)dtime1を取得する。この時間差dtime1は、例えばポインタptr_m1から取得した押鍵タイミングデータをmt1とすれば、時間差dtime1に、mt1から変数t_timeを減算した値(=mt1−t_time)をセットすることで取得する。時間差dtime1を取得した後、ステップ1307の処理に移行する。
【0169】
ステップ1307では、上記フラグfrがクリアされているか否か判定する。フラグfrがクリアされていた場合、その判定はYESとなってステップ1310の処理に移行する。そうでない場合には、その判定はNOとなってステップ1308の処理に移行する。
【0170】
ステップ1308では、ポインタptr_t0が示す被験データの音符(ノートデータ)に、ポインタptr_m1が示す基準データの音符(ノートデータ)のシリアル番号をタイミング番号として設定する。これは、メインCPU101が、ワークRAM104の被験データの分析用データが格納されているワークエリアのポインタptr_t0が示す領域に、そのシリアル番号を格納することで実現される。このシリアル番号の設定が終了すると、ステップ1309の処理に移行し、そこでカウンタtとポインタptr_t0をインクリメントして、それらの更新を行う。その後、ステップ1304の処理に戻る。
このフラグfrは、それがクリアされていれば新たにセットされ、被験データの音符(ノートデータ)にマッチする基準データの音符(ノートデータ)が見つかった場合にはクリアされる。従って、フラグfrがクリアされないことは、即ちステップ1307の判定がNOとなることは、被験データの音符(ノートデータ)にマッチする基準データの音符(ノートデータ)が見つからず、それらのマッチが行えなかったことを意味する。このため、第1の実施の形態では、ステップ1307の判定がNOとなった場合、単にステップ1308の処理を実行し、被験データの音符(ノートデータ)にシリアル番号をタイミング番号として設定している。
【0171】
一方、フラグfrがクリアされていた場合に次に実行されるステップ1310では、フラグfrをセットする。ステップ1310に続くステップ1311〜1321の繰り返しでは、被験データのポインタptr_t0が示す音符(ノートデータ)にマッチする音符(ノートデータ)を、基準データ用に用いられる各種カウンタ、及び各種ポインタを更新しながら検索する。
【0172】
先ず、続くステップ1311では、カウンタm2の値が基準データの総ノート数よりも小さいか否か判定する。カウンタm2の値が基準データの総ノート数よりも小さい場合、その判定はYESとなってステップ1312の処理に移行する。そうでない場合には、その判定はnoとなってステップ1322の処理に移行する。
【0173】
ステップ1312では、ポインタptr_m2が示す音符(ノートデータ)の分析用データから、押鍵タイミングデータを取得し、被験データのポインタptr_t0が示す音符(ノートデータ)とのイベント発生時刻の時間差(変数)dtime2を取得する。被験データのポインタptr_t0が示す音符(ノートデータ)の押鍵タイミングデータは変数t_timeにセットされている。時間差dtime2は、例えばポインタptr_m2から取得した押鍵タイミングデータをmt2とすれば、時間差dtime2に、mt2から変数t_timeを減算(mt2−t_time)した値をセットすることで取得する。時間差dtime2を取得した後、ステップ1313の処理に移行する。
【0174】
ステップ1313では、時間差dtime2が0よりも大きいか否か判定する。基準データのポインタptr_m2が示す音符(ノートデータ)のイベント発生時刻が、被験データのポインタptr_t0が示す音符(ノートデータ)のそれよりも遅い場合、その判定はYESとなり、ステップ1314の処理に移行する。そうでない場合には、その判定はNOとなってステップ1315の処理に移行する。ステップ1314では、ポインタptr_t0が示す音符(ノートデータ)が基準データから見つかったとして、フラグfrをクリアする。その後、ステップ1322の処理に移行する。
【0175】
ステップ1315では、カウンタm2に1を加算した値(=m2+1)が基準データの総ノート数よりも小さいか否か判定する。その値が総ノート数よりも小さい場合、その判定はYESとなってステップ1316の処理に移行する。そうでない場合には、ステップ1322の処理に移行する。ステップ1316では、カウンタm、m1、及びm2と、ポインタptr_m1、及びptr_m2をそれぞれインクリメントし、それらの更新を行う。その後、ステップ1317の処理に移行する。
【0176】
ステップ1317では、カウンタm2の値が基準データの総ノート数よりも小さいか否か判定する。カウンタm2の値がその総ノート数よりも小さい場合、その判定はYESとなってステップ1318の処理に移行する。そうでない場合には、その判定はNOとなってステップ1322の処理に移行する。
【0177】
ステップ1318では、ステップ1316、或いは1320で更新されたポインタptr_m2が示す音符(ノートデータ)の分析用データから、押鍵タイミングデータを取得し、被験データのポインタptr_t0が示す音符(ノートデータ)とのイベント発生時刻の時間差(変数)dtime2を新たに取得する。続くステップ1319では、時間差dtime1とdtime2が等しくないか否か判定する。ポインタptr_m1とptr_m2が示すそれぞれの音符(ノートデータ)のイベント発生時刻が同じであった場合、その判定はNOとなってステップ1320の処理に移行する。そうでない場合には、ステップ1321の処理に移行する。
【0178】
ステップ1320では、カウンタm2とポインタptr_m2をそれぞれインクリメントし、それらを更新する。その後、ステップ1317の処理に戻る。一方、ステップ1321では、フラグfrをクリアし、その後にステップ1311の処理に戻る。
【0179】
上記ステップ1311〜1321の処理の実行後、ポインタptr_m2には、被験データのポインタptr_t0が示す音符(ノートデータ)のイベント発生時刻よりも遅いイベント発生時刻の音符(ノートデータ)のポインタ値がセットされる。
【0180】
ステップ1322〜1327では、ポインタptr_m1、或いはptr_m2が示す音符(ノートデータ)が、ポインタptr_t0が示す音符(ノートデータ)にマッチする音符(ノートデータ)であるとして、それら基準データの音符のなかから最も被験データの音符(ノートデータ)にマッチする音符(ノートデータ)を特定するための処理が行われる。
【0181】
先ず、ステップ1322では、フラグfrはクリアされているか否か判定する。被験データのポインタptr_t0が示す音符(ノートデータ)にマッチさせる基準データの音符(ノートデータ)が見つかった場合、その判定はYESとなってステップ1323の処理に移行する。そうでない場合には、その判定はNOとなってステップ1327の処理に移行する。
【0182】
ステップ1323では、時間差dtime1は0以上か否か判定する。ポインタptr_t0が示す音符(ノートデータ)のイベント発生時刻が、ポインタptr_m1が示す音符(ノートデータ)のイベント発生時刻と同じか、或いはそれよりも早い場合、その判定はYESとなってステップ1324の処理に移行する。そうでない場合には、その判定はNOとなってステップ1325の処理に移行する。
【0183】
ステップ1324では、ポインタptr_t0が示す被験データの音符(ノートデータ)に、ポインタptr_m1が示す基準データの音符(ノートデータ)のシリアル番号をタイミング番号として設定する。これは、通常、ポインタptr_m1が示す音符(ノートデータ)よりも、ポインタptr_m2が示す音符(ノートデータ)のほうが、イベント発生時刻が遅いためである。そのシリアル番号の設定が終了すると、ステップ1309の処理に移行する。
【0184】
ステップ1325では、時間差dtime1とdtime2を加算した値が0以上か否か判定する。ポインタptr_m1とptr_m2が示すそれらの音符(ノートデータ)のイベント発生時刻が、ポインタptr_t0が示す音符(ノートデータ)のそれと同じか、或いはそれよりも遅い場合、更には、時間差dtime2がdtime1と同じか、或いは時間差dtime2のほうがdtime1よりも大きい場合には、その判定はYESとなってステップ1326の処理に移行する。そうでない場合には、その判定はNOとなってステップ1327の処理に移行する。
【0185】
時間差dtime2のほうがdtime1よりも大きい場合は、ポインタptr_t0が示す音符(ノートデータ)のイベント発生時刻と比較して、ポインタptr_m1が示す音符(ノートデータ)のそれは早く、他方のポインタptr_m2が示す音符(ノートデータ)のそれは遅く、且つポインタptr_m1が示す音符(ノートデータ)のほうがポインタptr_t0が示す音符(ノートデータ)に近接しているということになる。
【0186】
このため、ステップ1326では、ポインタptr_t0が示す被験データの音符(ノートデータ)に、ポインタptr_m1が示す基準データの音符(ノートデータ)のシリアル番号をタイミング番号として設定する。そのシリアル番号の設定が終了すると、ステップ1309の処理に移行する。一方、ステップ1327では、ステップ1326とは逆に、ポインタptr_t0が示す被験データの音符(ノートデータ)に、ポインタptr_m2が示す基準データの音符(ノートデータ)のシリアル番号をタイミング番号として設定する。そのシリアル番号の設定が終了すると、ステップ1309の処理に移行する。
【0187】
図15は、図11のステップ1103として実行されるノートマッチ補正処理の動作フローチャートである。次に、図15を参照して、ノートマッチ補正処理について詳細に説明する。このノートマッチ補正処理は、上述したように、ステップ1102の押鍵タイミングのノートマッチ処理を実行することで得られた基準データと被験データ間における音符(ノートデータ)の対応関係を、ノートナンバーに着目して補正するものである。
【0188】
先ず、ステップ1501では、ワークRAM104のワークエリアに格納された被験データの分析用データにアクセスするためのポインタptr_t1、及びptr_t2に、図5に示すノート数取得処理内のステップ507の処理を実行することにより得たワークエリアの先頭ポインタをコピーする。続くステップ1502では、それらのポインタに対応させて用いるカウンタt1、及びt2に0をセットする。これらのカウンタをセットした後は、ステップ1503の処理に移行する。
【0189】
ステップ1503〜1518の処理の繰り返しでは、カウンタt1とポインタptr_t1を更新しながら、ポインタptr_t0の音符(ノートデータ)にマッチする基準データの音符(ノートデータ)の検索が、ノートナンバーに着目して行われる。
【0190】
先ず、ステップ1503では、カウンタt1の値が被験データの総ノート数よりも小さいか否か判定する。この総ノート数は、図5に示すノート数取得処理を実行することで得た値である。カウンタt1の値が総ノート数よりも小さい場合、その判定はYESとなってステップ1504の処理に移行する。そうでない場合には、その判定はNOとなって一連の処理を終了する。
【0191】
ステップ1504では、ポインタptr_t1が示す音符(ノートデータ)の分析用データから、タイミング番号を取得し、それを変数time_t1にセットする。続くステップ1505では、ポインタptr_t1が示す音符(ノートデータ)の分析用データから、ノートナンバーを取得し、それを変数note_t1にセットする。その後、ステップ1506のノートナンバーチェック処理を実行する。
【0192】
ノートナンバーチェック処理は、基準データのなかから、ポインタptr_t1が示す音符(ノートデータ)のノートナンバーと等しい音符(ノートデータ)を検索する処理である。このノートナンバーチェック処理へは、ステップ1504、及び1505で値をセットした変数time_t1、及び変数note_t1が引数として渡され、ノートナンバーチェック処理からは、ポインタptr_t1が示す音符(ノートデータ)のノートナンバーと等しい基準データの音符(ノートデータ)のシリアル番号が引数seri_m1として返される。ノートナンバーが等しい音符(ノートデータ)を検索できなかった場合には、その引数seri_m1にはその旨(エラーERR)を示す値(例えば負の値)がセットされる。
【0193】
ステップ1506に続くステップ1507では、引数seri_m1にエラーを示す値がセットされていないか否か判定する。基準データから該当する音符(ノートデータ)が見つけられなかった場合、その判定はNOとなってステップ1508の処理に移行する。そうでない場合には、その判定はYESとなってステップ1509の処理に移行する。ステップ1508では、その検索結果に従い、ポインタptr_t1が示す被験データ側の分析用データに、エラーフラグをセットし、また、それのシリアル番号に、例えば負の値をセットして対応ナンバーをクリアする。その後、ステップ1518の処理に移行する。
ステップ1509では、引数seri_m1にセットされたシリアル番号の音符(ノートデータ)のポインタptr_m1を取得する。続くステップ1510では、このポインタptr_m1の音符(ノートデータ)に、被験データの音符(ノートデータ)のなかでマッチしているものが有るか否かを示すマッチフラグがセットされているか否か判定する。ポインタptr_tの音符(ノートデータ)にマッチする被験データの音符(ノートデータ)が存在していた場合、その判定はYESとなってステップ1512の処理に移行する。そうでない場合、その判定はNOとなってステップ1511の処理に移行する。
【0194】
ステップ1511では、ポインタptr_m1の音符(ノートデータ)にマッチフラグをセットする一方、ポインタptr_t1が示す被験データ側の音符(ノートデータ)のエラーフラグをクリアし、また、シリアル番号に、それに対応する基準データ側の音符(ノートデータ)のシリアル番号をセットする。その後、ステップ1518の処理に移行する。
【0195】
ステップ1512は、ポインタptr_t1が示す音符(ノートデータ)にマッチさせる基準データの音符(ノートデータ)が、既に他の被験データの音符(ノートデータ)にマッチさせられていた場合に実行される。このため、ステップ1512〜1517では、その基準データの音符(ノートデータ)にマッチさせる音符(ノートデータ)を、被験データ側のそれらの音符(ノートデータ)のなかから選択する。
【0196】
先ず、ステップ1512では、カウンタt2の値がカウンタt1の値よりも小さいか否か判定する。カウンタt2の値がカウンタt1の値よりも小さい場合、その判定はYESとなってステップ1513の処理に移行する。そうでない場合には、その判定はNOとなってステップ1518の処理に移行する。
【0197】
ステップ1513では、引数seri_m1のシリアル番号が、ポインタptr_t2の音符(ノートデータ)にセットされているシリアル番号に等しいか否か判定する。それらシリアル番号が等しい場合、その判定はYESとなってステップ1515の処理に移行する。そうでない場合には、その判定はNOとなってステップ1514の処理に移行する。ステップ1514では、カウンタt2、及びポインタptr_t2をインクリメントして、それらを更新し、その後、ステップ1512の処理に戻る。
【0198】
上記ステップ1512〜1514の繰り返しにより、ポインタptr_t2の値がポインタptr_t1を超えない範囲内で、基準データの音符(ノートデータ)にマッチさせる被験データの音符(ノートデータ)が検索される。ステップ1515は、基準データの音符(ノートデータ)にマッチさせる被験データの他の音符(ノートデータ)が検索された場合に実行される。
【0199】
ステップ1515では、これら被験データの音符(ノートデータ)と基準データの音符(ノートデータ)のイベント発生時刻間の差である時間差dtを算出する。これは、例えば、ポインタptr_t1で示される現在の処理対象の音符(ノートデータ)のイベント発生時刻をt1、ポインタptr_t2で示される既にマッチさせられた被験データの音符(ノートデータ)のイベント発生時刻をt2、既にマッチさせられた基準データの音符(ノートデータ)のイベントデータをm1とした場合、時間差dtは、例えばdt=(m1−t1)−(m1−t2)として算出する。時間差dtを算出した後、ステップ1516の処理に移行する。
【0200】
ステップ1516では、時間差dtが0以下か否か判定する。時間差dtの値が負であった場合、その判定はYESとなってステップ1517の処理に移行する。そうでない場合には、その判定はNOとなってステップ1511の処理に移行する。
【0201】
上記のようにして時間差dtを算出した場合、その時間差dtの値が負であることは、その基準データの音符(ノートデータ)に、ポインタptr_t1の音符(ノートデータ)のほうが近接していることを意味する。このため、ステップ1517では、ポインタptr_t2が示す既にマッチさせられている音符(ノートデータ)の分析用データに、エラーフラグをセットし、また、それのシリアル番号に、例えば負の値をセットして対応ナンバーをクリアする。その後、ステップ1518の処理に移行する。
【0202】
ステップ1518では、カウンタt1及びポインタptr_t1をインクリメントして、それらの更新を行う。それらの更新を行った後、ステップ1503の処理に戻る。
【0203】
次に、上記ステップ1506として実行されるノートナンバーチェック処理について、図16に示すその動作フローチャートを参照して詳細に説明する。このノートナンバーチェック処理は、上述したように、基準データのなかから、ポインタptr_t1が示す音符(ノートデータ)のノートナンバーと等しい音符(ノートデータ)を検索する処理である。
【0204】
先ず、ステップ1601では、ワークRAM104のワークエリアに格納された基準データの分析用データにアクセスするためのポインタptr_mに初期値を設定する。このとき初期設定される値は、例えば図5に示すノート数取得処理内のステップ507の処理を実行することにより得たワークエリアの先頭ポインタの値である。続くステップ1602では、ノートマッチ補正処理に渡す引数serial(ノートナンバーチェック処理内ではこの名称である)にエラーを示す値をセットする。その後、ステップ1603の処理に移行する。
【0205】
ステップ1603では、ポインタptr_mが示す音符(ノートデータ)のタイミング番号が、引数として受け取ったタイミング番号と等しいか否か判定する。それらのタイミング番号が等しい場合、その判定はYESとなってステップ1605の処理に移行する。そうでない場合には、その判定はNOとなってステップ1604の処理に移行する。ステップ1604では、ポインタptr_mをインクリメントし、それの更新を行う。その後、ステップ1603の処理に移行する。
【0206】
ステップ1603〜1604の処理を繰り返すことにより、押鍵タイミングでマッチさせた基準データの音符(ノートデータ)が検索される。
ステップ1605では、ポインタptr_mが示す音符(ノートデータ)のノートナンバーが、引数として受け取ったノートナンバーと等しいか否か判定する。それらのノートナンバーが等しい場合、その判定はYESとなってステップ1606の処理に移行する。そうでない場合には、ここで一連の処理を終了する。この場合、ステップ1602で引数serialにセットしたエラーであることを示す値はそのままとなる。
【0207】
ステップ1606では、引数serialに、ポインタptr_mの音符(ノートデータ)のシリアル番号をセットする。これにより、ノートマッチ補正処理に、基準データにおいてマッチする音符(ノートデータ)のシリアル番号が渡されることになる。その後、一連の処理を終了する。
【0208】
図17は、図3のステップ305として実行される差分取得処理の動作フローチャートである。次に、図17を参照して、差分取得処理について詳細に説明する。
【0209】
この差分取得処理は、ワークRAM104の異なるワークエリアにそれぞれ格納されている基準データと被験データの分析用データを対象とし、被験データの各音符(ノートデータ)毎に、それに対応(マッチ)する基準データの音符(ノートデータ)の分析用データを読み出して、それらの間における各パラメータの差分を取得していくものである。
【0210】
先ず、ステップ1701では、ワークRAM104の被験データの分析用データにアクセスするためのポインタptr_t1に、図5に示すノート数取得処理内のステップ507の処理を実行することにより得たワークエリアの先頭ポインタをセットする。続くステップ1702では、ポインタptr_t1に対応させて用いるカウンタt1に0をセットする。カウンタt1に0をセットした後、ステップ1713の処理に移行する。
【0211】
ステップ1703〜1711では、被験データの音符(ノートデータ)を変更していきながら、音符(ノートデータ)と基準データの音符(ノートデータ)を対応させて、それらの間における各パラメータの差分の取得が行われる。なお、カウンタt1の値は、現在処理対象としている被験データの音符(ノートデータ)が、その先頭から何番目に発生したイベントであるか、言い換えれば、現在処理している音符(ノートデータ)の順番を意味する。
【0212】
先ずステップ1703では、カウンタt1の値が被験データの総ノート数よりも小さいか否か判定する。この総ノート数は、図5に示すノート数取得処理を実行することで得た値である。カウンタt1の値が総ノート数よりも小さい場合、その判定はYESとなってステップ1704の処理に移行する。そうでない場合には、その判定はNOとなって一連の処理を終了する。
【0213】
ステップ1704では、カウンタt1が示す現在処理対象となっている音符(ノートデータ)のノートマッチさせた結果を取得する。この取得は、カウンタt1と同じ値をシリアル番号として持つ基準データの音符(ノートデータ)の分析用データを検索することで行う。
【0214】
ステップ1704に続くステップ1705では、そのノートマッチの結果が有効であるか否か判定する。ステップ1704で検索した音符(ノートデータ)の分析用データのフラグがエラーフラグであった場合、その判定はNOとなってステップ1711の処理に移行する。そうでない場合には、その判定はYESとなってステップ1706の処理に移行する。
【0215】
ステップ1706では、マッチされている基準データの音符(ノートデータ)のポインタptr_m1を取得する。それに続くステップ1707〜1710では、ポインタptr_t1が示す被験データの音符(ノートデータ)の分析用データと、ポインタptr_m1が示す基準データの音符(ノートデータ)の分析用データを、パラメータの種類別に対比して、それらの間の差分を取得する。具体的には、図2に示すように、ベロシティ、押鍵タイミング、離鍵タイミング、押鍵時間(音符長)の差分をそれぞれ取得する。これらは、例えばポインタptr_t1が示す被験データの音符(ノートデータ)の分析用データ、及びポインタptr_m1が示す基準データの音符(ノートデータ)の分析用データとしてそれぞれに格納される。
【0216】
ステップ1710に続くステップ1711では、カウンタt1とポインタptr_t1をそれぞれインクリメントし、それらの更新を行う。それらのインクリメントが終了すると、ステップ1703の処理に戻る。
【0217】
図18は、図3のステップ306として実行される平均値取得処理の動作フローチャートである。次に、図18を参照して、平均値取得処理について詳細に説明する。
【0218】
この平均値取得処理は、ワークRAM104のワークエリアに格納されている被験データの分析用データを対象として、演奏者(ユーザ)がコントロールスイッチ群103の所定のスイッチを操作することで指定したパラメータ(項目)の差分の平均値を算出する処理である。ここで算出された平均値は、これに続くステップ307の標準偏差取得処理で使用される。
【0219】
ステップ1801〜1803では、各種変数の初期設定が行われる。
先ず、ステップ1801では、ワークRAM104の被験データの分析用データにアクセスするためのポインタptr_t1に、図5に示すノート数取得処理内のステップ507の処理を実行することにより得たワークエリアの先頭ポインタをセットする。続くステップ1802では、ポインタptr_t1に対応させて用いるカウンタt1に0をセットする。その後、ステップ1803において、変数である有効サンプルカウンタ、及び差分累算値をそれぞれクリアする。
【0220】
ステップ1803に続くステップ1804〜1811では、被験データの音符(ノートデータ)を、カウンタt1とともに変更していきながら、その音符(ノートデータ)にマッチする基準データの音符(ノートデータ)の有無に応じて、上記有効サンプルカウンタのインクリメント、差分累算値への有効な差分の加算が行われる。
【0221】
先ず、ステップ1804では、カウンタt1の値が被験データの総ノート数よりも小さいか否か判定する。この総ノート数は、図5に示すノート数取得処理を実行することで得た値である。カウンタt1の値が総ノート数よりも小さい場合、その判定はYESとなってステップ1805の処理に移行する。そうでない場合には、その判定はNOとなってステップ1812の処理に移行する。
【0222】
ステップ1805では、カウンタt1が示す現在処理対象となっている音符(ノートデータ)のノートマッチさせた結果を取得する。この取得は、ポインタptr_t1に従ってアクセスされる分析用データのなかから、制御用フラグ(図2参照)を読み出すか、或いはシリアル番号(ノートマッチが有効でなければ負の値がセットされている)を読み出すことで行う。
【0223】
ステップ1805に続くステップ1806では、そのノートマッチの結果が有効であるか否か判定する。例えばステップ1805で読み出した制御用フラグがエラーフラグであった場合、その判定はNOとなってステップ1811の処理に移行する。そうでない場合には、その判定はYESとなってステップ1807の処理に移行する。
【0224】
ステップ1807では、有効サンプルカウンタをインクリメントする。続くステップ1808では、その音符(ノートデータ)の分析用データのなかから、指定されたパラメータ(項目)の差分を取得する。これに続いて実行されるステップ1809では、ステップ1808で取得した差分に応じて、指定されたパラメータ(項目)における最大値、及び最小値の更新を行う。その後、ステップ1808で得た差分を差分累算値に加算する。
【0225】
ステップ1810に続くステップ1811では、カウンタt1とポインタptr_t1をそれぞれインクリメントし、それらの更新を行う。それらのインクリメントが終了すると、ステップ1804の処理に戻る。
【0226】
ステップ1812は、カウンタt1の値が総ノート数以上になった場合に実行される。このとき、有効サンプルカウンタには、ノートマッチが有効な音符(ノートデータ)数が保持され、他方の差分累算値には、ノートマッチが有効な全ての音符(ノートデータ)の分析用データから取得される指定されたパラメータ(項目)の差分の累算値が保持される。ステップ1812では、差分累算値に保持されている値を、を有効サンプルカウンタの値で割ることにより、指定されたパラメータ(項目)の差分の平均値を取得する。この平均値を取得すると、一連の処理を終了する。
【0227】
なお、第1の実施の形態では、分析結果を表示させる対象とするパラメータ(項目)を演奏者が指定するようにしているが、例えば、予め定めたパラメータを全て対象として、各パラメータ毎に分析を行い、その分析結果を、演奏者のスイッチ等に対する操作に応じて選択的に表示させるようにしても良い。このように分析結果を分割して表示させることにより、表示装置117の画面が小さくとも、様々な分析結果を表示させることができる。
【0228】
また、第1の実施の形態では、分析用データとするデータ(パラメータ)を予め定めた設定に固定させているが、分析用データとするデータ(パラメータ)の種類を、演奏者(ユーザ)が指定するようにしても良い。
【0229】
分析用データは、図2に示すように、1音符(ノートデータ)あたり複数のデータで構成されている。このことから、分析結果として表示させる情報としては、度数分布や標準偏差等の他に、或いはそれの換わりに、分析用データのなかの少なくとも一つのデータを表示させても良い。そのデータの表示は、基準データと被験データ間での対比が容易なように、音符(ノートデータ)毎に対応させて表示することが望ましい。その表示させるデータは演奏者(ユーザ)が選択できるようにしても良い。
【0230】
そのデータを表示させる形態としては、数値で表示しても良く、直感的にそれらを対比できるように、グラフ等の図形で表示しても良い。当然のことながら、分析用データのなかから表示するデータに対しては、そのデータの意味を演奏者(ユーザ)が容易に把握できるように、何らかの加工を行っても良い。
<第2の実施の形態>
上述した第1の実施の形態では、基準データと被験データが共に同じ精度で時間管理されていることを前提としている。しかし、時間管理の精度は、周知のように、装置の基本性能、例えば分解能に応じて変動する。その分解能は、1拍当たりのクロック数であることから、そのクロック数で表されるデルタタイム(イベント間の時間情報)の値が意味する実際の時間も、分解能により変化する。
【0231】
一方、基準データと被験データは、異なる装置で別々に作成することができる。これは、基準データと被験データの分解能は、必ずしも一致しないことを意味する。基準データと被験データの分解能が異なっている場合、上記第1の実施の形態は、基準データと被験データの分解能が一致している、即ちクロックの周期が一致していることを前提としているため、それらの間のイベントの対応付け(マッチング)を実質的に行うことができない。第2の実施の形態は、このようなことを回避し、時間管理の精度が異なる演奏データ間でイベントのマッチングを行えるようにしたものである。
【0232】
この第2の実施の形態の構成は、図1を参照して説明した第1の実施の形態のそれと基本的に同じである。また、動作においても、一致している部分が多い。このため、第1の実施の形態から異なる部分だけ説明する。
【0233】
始めに、第2の実施の形態で採用した演奏分析について説明する。
第1の実施の形態では、演奏分析結果として、押鍵タイミング、ベロシティ等のパラメータ毎に、基準データと被験データとを対比して得られる平均値、標準偏差、度数分布等を表示させている。それらの特性量を表示することで、演奏者は自身が行った演奏の全体的な傾向を知ることができるが、その細部については表示されている特性量から知ることはできず、自分で判断しなければならない。このことから、第2の実施の形態では、演奏者が、自身の演奏の細部まで詳細に把握できるようにしている。具体的には、第2の実施の形態では、パラメータ毎に、基準データと被験データのイベント間の相違を表示することで、演奏の全体、更にはその細部まで演奏者が演奏内容を容易に把握できるようにしている。
【0234】
図21は、第2の実施の形態による分析結果の表示例を示す図である。この分析結果は、図1に示す表示装置117に表示されるものである。この図21を参照して、第2の実施の形態が行う演奏分析について具体的に説明する。
【0235】
演奏者は、技術が伴わない場合、楽譜に忠実に従った演奏を行うことができない。具体的には、鍵盤上のある鍵を弾いてから次の鍵を弾くまでの間隔、即ちイベント間の間隔を、例えば楽譜に記譜されているその間隔に常に合わせることができない。イベント間の間隔は、当然のことながら、テンポによっても異なる。このことから、第2の実施の形態では、そのイベント間の間隔をテンポとして仮想的にとらえ、演奏者が行った演奏(被験データ)のテンポと手本(基準)の演奏(基準データ)のそれとの違いをイベント毎に抽出し、それを分析結果として表示させている。上記図21は、そのテンポの推移例である。
【0236】
なお、以降においては、イベント間の間隔の表現に使用するテンポを自動演奏等で一般に指定するテンポと区別するために、前者については仮想テンポ、後者については単にテンポと呼ぶことにする。
【0237】
仮想テンポは、演奏者自身の演奏におけるイベント間の間隔が、手本の演奏(基準データ)におけるイベント間の間隔とはどのようにズレているかを相対的に表現する。このため、図21に示すように、その仮想テンポをイベント毎に表示することで、演奏者は、自身の演奏で各鍵を弾いていったタイミングが、基準の演奏のそれとはどのように異なっているかを詳細、且つ、容易に把握することができる。これにより、第1の実施の形態と比較して、演奏者の独習をより強力に支援することができ、練習効率を更に向上させることができる。
【0238】
次に、上記演奏分析を行い、その結果を表示するための動作について、図19、図20に示す動作フローチャートを参照して詳細に説明する。
上記図19は、第2の実施の形態による演奏分析処理の動作フローチャートである。この図19を参照して、始めに演奏分析処理について詳細に説明する。
【0239】
この演奏分析処理は、演奏者(ユーザ)がコントロールスイッチ群103の所定のスイッチを操作し、演奏傾向の分析を指示した場合に、メインCPU101が、プログラムROM102に格納されている制御プログラムを読み出してそれを実行することで実現される処理である。
【0240】
先ず、ステップ1901では、演奏データ取得処理を実行する。この演奏データ取得処理は、例えばユーザがコントロールスイッチ群103の所定のスイッチに対する操作に応じて、ネットワークインターフェイス115、或いは外部記憶装置116から入力した演奏データを、基準データRAM112、或いは被験データRAM113の一方にSMFのデータ形式で格納する処理である。
【0241】
ステップ1901に続くステップ1902では、所得した基準データ、被験データの各演奏データに含まれているノートデータ数を取得するノート数取得処理を実行する。ノートデータ数を取得すると、続くステップ1903では、各演奏データから1次データ(図2参照)を取得する1次データ取得処理を実行する。この1次データ取得処理が終了すると、ステップ1904の処理に移行する。
【0242】
ステップ1904では、基準データと被験データ間におけるノートデータの対応関係を求めるノートマッチ処理を実行する。このノートマッチ処理では、基準データと被験データの各々の分解能を考慮して、演奏データ間におけるノートデータの対応付け(マッチング)を行う。そのノートマッチ処理を実行することで、図2に示す1音符(ノートデータ)あたりの分析用データとして、シリアル番号、及びタイミング番号が各音符(ノートデータ)毎にワークRAM104に書き込まれる。即ち基準データと被験データ間におけるノートデータの対応関係が確定される。
【0243】
ステップ1904に続くステップ1905では、基準データと被験データ間の仮想テンポを演算する仮想テンポ演算処理を実行する。続いて、ステップ1906では、その仮想テンポを図21に示すように出力する分析結果出力処理を実行する。その後、一連の処理を終了する。
【0244】
上述したステップ1901〜1903の各サブルーチン処理の内容は、第1の実施の形態におけるそれらの処理の内容と基本的に同じである。ステップ1904のノートマッチ処理では、第1の実施の形態と同様に、図12〜図16に示す各種サブルーチン処理が実行される。しかし、基準データと被験データの分解能の違いに対応させるために、それら各種サブルーチン処理のなかにはその内容に若干相違しているものがある。以下、その相違について説明する。
【0245】
図12〜図16に示す各種サブルーチン処理のなかで、図13に示す押鍵タイミングによるノートマッチ処理、及び図15に示すノートマッチ補正処理が第1の実施の形態から相違する部分を有する。
【0246】
先ず、押鍵タイミングによるノートマッチ処理では、ステップ1305の処理が第1の実施の形態とは異なる。上述したように、第1の実施の形態におけるステップ1305では、ポインタptr_t0が示す音符(ノートデータ)の分析用データから、押鍵タイミングデータを取得し、それを変数t_timeにセットすることが行われる。ステップ1305以降は、変数t_timeにセットされた押鍵タイミングデータを基に、基準データと被験データ間の音符(ノートデータ)が対応付けられる。
【0247】
上記押鍵タイミングデータは、クロック数で表現された値である。そのクロックの周期は、分解能によって異なる。このため、第2の実施の形態におけるステップ1305では、対象としている押鍵タイミングデータを取得すると、それを基準データの分解能とした場合の値に変更し、その変更後の値を変数t_timeにセットする。具体的には、被験データの分解能をVt、基準データの分解能をVmとした場合には、取得した押鍵タイミングデータの値Dに、それら間の比率(=Vm/Vt)を乗算し、その乗算結果(=D・Vm/Vt)を変数t_timeにセットする。これにより、ステップ1305以降の処理の内容を変更させることなく、被験データと基準データ間の音符(ノートデータ)の対応付けを行うことができる。
【0248】
図15に示すノートマッチ補正処理では、ステップ1515の処理が第1の実施の形態とは異なる。そのステップ1515は、被験データのある音符(ノートデータ)に基準データの音符(ノートデータ)を対応付けした後、更にそれに対応付けるべき音符(ノートデータ)を検出した場合に実行される処理である。ステップ1515では、被験データの音符(ノートデータ)と基準データの音符(ノートデータ)のイベント発生時刻間の差(時間差)dtを算出する。
【0249】
第1の実施の形態では、上述したように、時間差dtを、例えば、ポインタptr_t1で示される現在の処理対象の音符(ノートデータ)のイベント発生時刻をt1、ポインタptr_t2で示される既にマッチさせられた被験データの音符(ノートデータ)のイベント発生時刻をt2、既にマッチさせられた基準データの音符(ノートデータ)のイベントデータをm1とした場合、dt=(m1−t1)−(m1−t2)の式から算出する。これに対し、第2の実施の形態では、分解能の違いを考慮し、何れかの分解能に合わせて上記時間差dtを算出している。具体的には、例えば基準データの分解能に合わせて、被験データの分解能をVt、基準データの分解能をVmとすると、上記t1、t2には、その基の値に、基準データと被験データの分解能の比率(=Vm/Vt)を乗算して得られる値をセットしている。
【0250】
以上が、ノートマッチ処理における第1の実施の形態からの変更部分である。次に、図19に示す演奏分析処理内でステップ1905として実行される仮想テンポ演算処理について、図20に示すその動作フローチャートを参照して詳細に説明する。
【0251】
先ず、ステップ2001では、基準データRAM112にSMF形式で格納されている基準データのヘッダー部から、基準演奏のテンポを取得する。続くステップ2002では、そのヘッダー部から分解能を更に取得する。その後、ステップ2003の処理に移行する。
【0252】
ステップ2003では、被験データRAM113にSMF形式で格納されている被験データのヘッダー部から、その演奏の分解能を取得する。続くステップ2004では、取得した2つの分解能から、それらの比rateを算出する。その分解能比rateは、基準データの分解能を被験データの分解能で割った値である。
【0253】
上記ステップ2001〜2004の処理は、仮想テンポ演算処理における初期設定を行う処理に相当する。ステップ2004に続くステップ2005〜2009は、処理ループを形成している。この処理ループでは、対象とする音符(ノートデータ)を順次変更しながら(移動させながら)、各音符(ノートデータ)毎に、その音符(ノートデータ)の仮想テンポを算出し、それを分析用データとしてストアすることが行われる。
【0254】
ステップ2005〜2009の処理ループは、ワークRAM104に格納した基準データ、及び被験データの分析用データを対象にして実行される。その分析用データは、1音符(ノートデータ)毎に、そのイベントの発生順に格納されている。上記処理ループでは、基準データの分析用データを基準にして、基準データと被験データ間の音符(ノートデータ)を対応させながら、各音符(ノートデータ)毎に仮想テンポの算出が行われる。
【0255】
先ず、ステップ2005では、基準データの全ての音符(ノートデータ)を処理したか否か、言い換えれば、各音符(ノートデータ)の仮想テンポの算出が全て終了したか否か判定する。各音符(ノートデータ)の仮想テンポを全て算出した場合、その判定はYESとなって一連の処理を終了する。そうでない場合には、その判定はNOとなってステップ2006の処理に移行する。
【0256】
ステップ2006では、基準データ中の対象とする音符(ノートデータ)を一つ移動させ、その音符(ノートデータ)とその一つ前の音符(ノートデータ)との間のイベント間時間(クロック数)time_orgを取得する。ここで、対象とする音符(ノートデータ)の指定は、カウンタを用いて行い、イベント間時間time_orgは、対象とする音符(ノートデータ)の押鍵タイミングから、その一つ前の音符(ノートデータ)の押鍵タイミングを減算することで取得する。押鍵タイミングは、図2に示すように、分析用データ中の1次データの一つとして格納されているデータである。
【0257】
基準データの音符(ノートデータ)に対応付けられた被験データ中の音符(ノートデータ)は、分析用データ中の対応番号、タイミング対応番号、及び制御用フラグを基に特定する。ステップ2006に続くステップ2007では、それらのデータから、基準データ中で対象としている音符(ノートデータ)に対応付けられた被験データの音符(ノートデータ)を特定し、上記と同様にして、その音符(ノートデータ)のイベント間時間time_targを取得する。その後、ステップ2008の処理に移行する。
【0258】
ステップ2008では、ステップ2007で特定した被験データの音符(ノートデータ)の仮想テンポ値v_tempoを取得する。その仮想テンポ値v_tempoは、ステップ2001で取得したテンポの値をtempo_orgとすると、以下に示す数式によって算出される。
【0259】
v_tempo=(time_org/(rate・time_targ))
・tempo_org
ステップ2008に続くステップ2009では、ステップ2008で算出した仮想テンポ値v_tempoを順にストアする。具体的には、例えば仮想テンポ値v_tempoを、ステップ2007で特定した音符(ノートデータ)に、その分析用データの一つとしてストアする。これは、仮想テンポ値v_tempoを図2に示す分析用データの1項目として追加しても良く、押鍵タイミング差分、或いは離鍵タイミング差分等の換わりに仮想テンポ値v_tempoをストアさせても良い。
【0260】
この仮想テンポ値v_tempoのストアが終了すると、ステップ2005の処理に戻る。このときには、対象とする音符(ノートデータ)を一つ移動して、上記と同様に処理ループが実行される。
【0261】
なお、第2の実施の形態では、押鍵イベント発生時刻の間隔に着目して、基準データと被験データを押鍵イベント毎に対比し、その結果を演奏者に演奏傾向を示す情報として提供しているが、押鍵イベントの他に、ベロシティに着目して、各演奏データを押鍵イベント毎に対比した結果を演奏者に提供するようにしても良い。また、押鍵イベント発生時刻、ベロシティ、音符長(発音期間)等の各種パラメータを用意し、そのなかから演奏者がパラメータの種類を選択できるようにしても良い。何れの場合においても、演奏者は、自身の行った演奏の傾向を具体的に把握することができるので、修得すべき演奏技術を特定した効果的な練習を行えるようになる。
【0262】
また、第2の実施の形態では、各イベント毎に、その演奏内容の相違を表示しているが、それに加えて、第1の実施の形態のように、演奏の全体的な傾向を示すデータ(標準偏差、度数分布等)を表示するようにしても良い。また、押鍵イベント毎の相違を表示する場合、楽曲の全体、特定の部分の詳細等、演奏者が所望する状態でそれを表示できるようにすることが望ましい。
<第3の実施の形態>
周知のように、高度な演奏技術を持つ演奏者は、楽譜等に記譜されている内容に忠実に従って演奏を行うことは実際は少なく、通常、何らかの音楽表現(ゆらぎ)を加えた演奏を行う。演奏技術があまり高くない演奏者にとって、前者と後者の演奏をそれぞれ修得することが目標といえる(普通、修得する順序は、前者、後者の順である)。これは、そのような演奏者(練習者)にとって、参考とすべき演奏は必ずしも1つだけではないことを意味する。このことから、第3の実施の形態は、自身が行った演奏(被験データ)を、複数の他の演奏と対比できるようにしたものである。
【0263】
第3の実施の形態では、自身の演奏を、2つの他の演奏と対比できるようにしている。具体的には、2つの他の演奏のうちの一方を基準演奏として、その基準演奏に、演奏者自身の演奏(被験演奏)、及び2つの他の演奏のうちの他方の演奏をそれぞれ対比し、それらと基準演奏の相違を分析結果としてそれぞれ表示している。
【0264】
例えば、上記基準演奏としては、楽譜に記譜されている内容に忠実に従った演奏、他方の演奏としては、上級者(例えば音楽の教師)による演奏を想定している。このため、以降、前者についてはこれまでと同様に基準演奏、後者については手本演奏と呼ぶことにする。
【0265】
第3の実施の形態の構成は、第2の実施の形態のそれに加えて、図1に示すように、手本演奏の演奏データ(以降、手本データと呼ぶ)を格納するための手本データRAM120を備えている。動作においては、基準演奏を2つの演奏と個別に対比させることから、第3の実施の形態では基準演奏を対比させる演奏数が増えるだけで、基本的な動作は第2の実施の形態のそれと同じである。このため、第2の実施の形態から異なる部分だけ説明する。
【0266】
先ず、第3の実施の形態で採用した分析結果の表示法について、図23を参照して説明する。この図23は、第3の実施の形態による分析結果の表示例を示す図である。
【0267】
第3の実施の形態は、上記第2の実施の形態と同様に、分析結果を仮想テンポで表示する。その仮想テンポは、上述したように、基準演奏に被験演奏と手本演奏を共に対比させることから、2種類ある。このため、図23に示すように、被験演奏と手本演奏の仮想テンポの推移を重ねて表示させている。この仮想テンポによる分析結果の表示は、図1に示す表示装置117の画面上に行われる。
【0268】
図23に示すように分析結果を表示させた場合、基準演奏と被験演奏の相違はもとより、基準演奏と手本演奏の相違、手本演奏と被験演奏の相違を演奏者は容易に認識することができるようになる。例えば、手本演奏と基準演奏(楽譜に従った演奏)の相違からは、豊かな音楽表現を実現するための効果的な押鍵タイミングのズレといったことが判り、その視点からも演奏者は自身の演奏を検討することができる。このように、演奏者はより多くの視点から自身の演奏を検討することができるため、基本的な演奏操作(基準演奏を再現するような演奏操作)の修得だけでなく、上級者が行うような演奏操作(表現力が豊かな演奏操作)といった内容が異なる他の演奏操作も修得することができる。即ち、第2の実施の形態と比較して、演奏者の独習をより強力に支援することができる。
【0269】
次に、上記演奏分析を行い、その分析結果を表示するためメインCPU101の動作について詳細に説明する。そのメインCPU101の動作は、プログラムROM102から読み出した制御プログラムを実行することで実現されるものである。
【0270】
第3の実施の形態では、基準演奏と被験演奏を対比させての分析の他に、基準演奏と被験演奏を対比させての分析を行うが、それらの実質的な内容は同じである。このため、第3の実施の形態による自動演奏処理は、図19に示す第2の実施の形態のそれと基本的に同じとなる。より具体的に言えば、ステップ1901の演奏データ取得処理においては、基準データと被験データの取得に加えて、手本データの取得も合わせて行うことになり、他のステップ1902〜1906の処理にも同様な変更は存在するが、それらはフローチャート自体を変えるものではない。ステップ1901〜1904の各サブルーチン処理の詳細については既に説明済みであるため、ステップ1905として実行される仮想テンポ演算処理だけを、図22に示すその動作フローチャートを参照して詳細に説明する。
【0271】
先ず、ステップ2201では、基準データRAM112にSMF形式で格納されている基準データのヘッダー部から、基準演奏のテンポを取得する。続くステップ2202では、そのヘッダー部から分解能を更に取得する。その後、ステップ2203の処理に移行する。
ステップ2203では、手本データRAM120にSMF形式で格納されている手本データのヘッダー部から、その演奏の分解能を取得する。続くステップ2204では、被験データRAM113にSMF形式で格納されている被験データのヘッダー部から、その演奏の分解能を取得する。その後、ステップ2205の処理に移行する。
【0272】
ステップ2205では、所得した基準データと被験データの分解能から、それらの比rate_t(=基準データの分解能/被験データの分解能)を算出する。続くステップ2206では、所得した基準データと手本データの分解能から、それらの比rate_m(=基準データの分解能/手本データの分解能)を算出する。その後、ステップ2207の処理に移行する。
【0273】
上記ステップ2201〜2206の処理は、仮想テンポ演算処理における初期設定を行う処理に相当する。ステップ2206に続くステップ2207〜2213は、処理ループを形成している。この処理ループでは、基準データ中で対象とする音符(ノートデータ)を順次変更しながら(移動させながら)、各音符(ノートデータ)毎に、その音符(ノートデータ)に対応する被験データ、及び手本データ中の音符(ノートデータ)の仮想テンポをそれぞれ算出し、それらを分析用データとしてストアしていくことが行われる。そのステップ2207〜2213の処理ループにおいて対象とするデータは、ワークRAM104に格納されている基準データ、被験データ、及び手本データの分析用データである。
【0274】
先ず、ステップ2207では、基準データの全ての音符(ノートデータ)を処理したか否か、言い換えれば、各音符(ノートデータ)の仮想テンポの算出が全て終了したか否か判定する。各音符(ノートデータ)の仮想テンポを全て算出した場合、その判定はYESとなって一連の処理を終了する。そうでない場合には、その判定はNOとなってステップ2208の処理に移行する。
【0275】
ステップ2208では、基準データ中の対象とする音符(ノートデータ)を一つ移動させ、その音符(ノートデータ)とその一つ前の音符(ノートデータ)との間のイベント間時間(クロック数)time_orgを取得する。ここで、対象とする音符(ノートデータ)の指定は、カウンタを用いて行い、イベント間時間time_orgは、対象とする音符(ノートデータ)の押鍵タイミングから、その一つ前の音符(ノートデータ)の押鍵タイミングを減算することで取得する。押鍵タイミングは、図2に示すように、分析用データ中の1次データの一つとして格納されているデータである。
【0276】
基準データの音符(ノートデータ)に対応付けられた被験データ中の音符(ノートデータ)は、分析用データ中の対応番号、タイミング対応番号、及び制御用フラグを基に特定する。これは、手本データにおいても同じである。ステップ2208に続くステップ2209では、それらのデータから、基準データ中で対象としている音符(ノートデータ)に対応付けられた被験データの音符(ノートデータ)を特定し、上記と同様にして、その音符(ノートデータ)のイベント間時間time_targを取得する。続くステップ2210では、基準データ中で対象としている音符(ノートデータ)に対応付けられた手本データの音符(ノートデータ)を特定して、その音符(ノートデータ)のイベント間時間time_mastを取得する。その後、ステップ2211の処理に移行する。
【0277】
ステップ2211では、ステップ2209で特定した被験データの音符(ノートデータ)の仮想テンポ値tempo_tを取得する。その仮想テンポ値tempo_tは、ステップ2201で取得したテンポの値をtempo_orgとすると、以下に示す数式によって算出される。
【0278】
tempo_t=(time_org/(rate_t・time_targ))・tempo_org
ステップ2211に続くステップ2212では、ステップ2210で特定した被験データの音符(ノートデータ)の仮想テンポ値tempo_mを取得する。その仮想テンポ値tempo_mは、ステップ2201で取得したテンポの値をtempo_orgとすると、以下に示す数式によって算出される。
【0279】
tempo_t=(time_org/(rate_m・time_mast))・tempo_org
ステップ2212に続くステップ2213では、ステップ2211、2212で算出した仮想テンポ値tempo_t、tempo_mを順にストアする。具体的には、例えば仮想テンポ値tempo_tを、ステップ2209で特定した音符(ノートデータ)の分析用データの一つとしてストアし、他方の仮想テンポ値tempo_mを、ステップ2210で特定した音符(ノートデータ)の分析用データの一つとしてストアする。なお、これらの仮想テンポ値tempo_t、tempo_mは、図2に示す分析用データの1項目として追加しても良く、押鍵タイミング差分、或いは離鍵タイミング差分等の換わりにストアさせても良い。
【0280】
これら仮想テンポ値tempo_t、tempo_mのストアが終了すると、ステップ2207の処理に戻る。このときには、対象とする音符(ノートデータ)を一つ移動して、上記と同様に処理ループが実行される。その処理ループにおいて、ステップ2207でYESと判定された場合には、仮想テンポ演算処理が終了して図19に示すステップ1906の分析結果出力処理に移行する。その分析結果出力処理を実行することで、ワークRAM104に格納されている基準データ、被験データ、及び手本データの各分析用データから、図23に示すような分析結果が表示装置117に表示されることになる。
【0281】
なお、第3の実施の形態では、図23に示すように、被験演奏と手本演奏の仮想テンポを共に表示させるようにしているが、それらを選択的に表示できるようにしても良い。また、更に多くの演奏を基準演奏と対比させて、より多くの仮想テンポを表示できるようにしても良い。
【0282】
度数分布や標準偏差等を分析結果として表示する第1の実施の形態においては、第3の実施の形態のように、複数の演奏間(例えば基準演奏と被験演奏、基準演奏と手本演奏)の分析をそれぞれ行うようにしても良い。そのように変形した場合であっても、上述した理由により、その動作の流れ(図3に示す演奏分析処理)は基本的には変形前と同じである。
【0283】
また、第1および第3の実施の形態を組み合わせて、例えば基準演奏と被験演奏間の相違は仮想テンポ、基準演奏と手本演奏間の相違は度数分布と標準偏差といったように、演奏間の相違を示す情報を演奏者が所望の形態で表示できるようにしても良い。演奏間の相違を基準演奏に反映させた自動再生については、各演奏間毎に行っても良く、演奏者(ユーザ)が選択した演奏間のものに対してのみ行うようにしても良い。
【0284】
また、第2および第3の実施の形態では、演奏データの分解能を考慮して演奏データ間の音符(ノートデータ)の対応付けを行っているが、それらの演奏データのテンポが異なることも考えられる。このことから、分解能の他に、テンポを考慮して、演奏データ間の音符(ノートデータ)の対応付けを行うようにしても良い。テンポ、分解能の何れかが変更された場合、それに合わせて1クロックの周期が変化する。このため、例えば1クロックの周期の相違に着目することで、テンポ、及び分解能の少なくとも一方が異なっていても、演奏データ間の音符(ノートデータ)の対応付けを正確に行うことができるようになる。
【0285】
第1〜第3の実施の形態は、電子楽器100に本発明を適用したものであるが、演奏情報をデジタルで扱うMIDI規格が定められていることから、本発明は、他の装置、例えばパーソナルコンピュータ(パソコン)に対しても容易に適用することができる。パソコンは、普通、本発明を実現するために必要なハード上の構成(メモリやCPU、データの入出力装置等)を備えている。このため、パソコンに対しては、本発明の機能(動作)を実現するためのプログラムを格納するだけで、本発明を適用させることができる。そのプログラムは、CD−ROMやフロッピーディスク、MO等の記憶媒体に記憶させて配付してもよく、何らかのネットワークを介して配信しても良い。
【0286】
【発明の効果】
以上、説明したように本発明は、演奏者の演奏内容を手本、或いは基準となる演奏内容と対比して分析し、その演奏内容から異なる部分の情報、或いはそれらの間の相違を対比するための情報を具体的に数値、或いは図形(グラフ等)で演奏者に提供する。このため、演奏者は自身の演奏内容を客観的、且つ具体的に把握することができる。また、それによって演奏者は、課題を克服するための効果的な練習を行うことができるので、高い練習効率を得ることができる。
【0287】
また、本発明は、演奏者の演奏内容を手本、或いは基準となる演奏内容に反映させ、その反映させた演奏内容を再生させるため、演奏者は自身の演奏で悪い点を聴感から認識(把握)することができる。また、演奏者は、演奏の部分的な箇所を含め、全体的な演奏傾向を容易に認識することができる。これにより、高い練習効率を得ることができる。
【0288】
これらを組み合わせた場合には、より高い上記の効果を得ることができる。
【図面の簡単な説明】
【図1】本実施の形態が適用された電子楽器の構成を示すブロック図である。
【図2】1音符当たりの分析用データの構造を示す図である。
【図3】演奏分析処理の動作フローチャートである。
【図4】演奏データ取得処理の動作フローチャートである。
【図5】ノート数取得処理の動作フローチャートである。
【図6】SMF処理の動作フローチャートである。
【図7】チャンネルメッセージ処理の動作フローチャートである。
【図8】ノートオンコード処理の動作フローチャートである。
【図9】ノートオフコード処理の動作フローチャートである。
【図10】1次データ取得処理の動作フローチャートである。
【図11】ノートマッチ処理の動作フローチャートである。
【図12】基準演奏の同タイミング押鍵検出処理の動作フローチャートである。
【図13】押鍵タイミングによるノートマッチ処理の動作フローチャートである。
【図14】基準データポインタのイニシャル処理の詳細を示す図である。
【図15】ノートマッチ補正処理の動作フローチャートである。
【図16】ノートナンバーチェック処理の動作フローチャートである。
【図17】差分取得処理の動作フローチャートである。
【図18】平均値取得処理の動作フローチャートである。
【図19】演奏分析処理の動作フローチャートである(第2の実施の形態)。
【図20】仮想テンポ演算処理の動作フローチャートである。
【図21】分析結果の表示例を示す図である。
【図22】仮想テンポ演算処理の動作フローチャートである(第3の実施の形態)。
【図23】分析結果の表示例を示す図である(第3の実施の形態)。
【符号の説明】
101 メインCPU
102 プログラムROM
104 ワークRAM
108 楽音発生装置
112 基準データRAM
113 被験データRAM
114 シリアルインターフェイス
115 ネットワークインターフェイス
116 外部記憶装置
117 表示装置
120 手本データRAM

Claims (4)

  1. 演奏者が演奏操作子群に対して行った演奏操作の情報である被験データと、前記演奏操作子群への目標とすべき演奏操作の情報である基準データとから、演奏者の演奏内容を分析する装置であって、
    前記被験データの演奏イベントデータと前記基準データの演奏イベントデータの対応関係を検出するイベントマッチ手段と、
    前記イベントマッチ手段が検出した対応関係に従って、前記被験データの演奏イベントデータと前記基準データの演奏イベントデータとを対比し、前記演奏イベントデータ毎に、該演奏イベントデータのパラメータの差分、及びイベント発生タイミングの時間の差分を取得する差分取得手段と、
    前記差分取得手段が取得した差分の少なくとも1種類の差分を用いて、演奏者の演奏内容を分析する分析手段と、
    前記分析手段の分析結果を演奏者に通知する通知手段と、
    前記差分取得手段が取得した差分の少なくとも1種類の差分に基づいて前記基準データを変更する演奏データ変更手段と、
    前記演奏データ変更手段により変更された前記基準データを再生させる再生手段と、
    を具備したことを特徴とする演奏分析装置。
  2. 前記演奏データ変更手段は、前記基準データの変更に用いる差分を強調させた上で前記基準データを変更する、ことを特徴とする請求項1記載の演奏分析装置。
  3. 前記演奏データ変更手段は、演奏者により指定された種類のパラメータの差分に基づいて前記基準データを変更する、ことを特徴とする請求項記載の演奏分析装置。
  4. 演奏者が演奏操作子群に対して行った演奏操作の情報である被験データと、前記演奏操作子群への目標とすべき演奏操作の情報である基準データとから、演奏者の演奏内容を分析する方法であって、
    前記被験データの演奏イベントデータと前記基準データの演奏イベントデータの対応関係を検出し、
    該検出した対応関係に従って、前記被験データの演奏イベントデータと前記基準データの演奏イベントデータとを対比し、前記演奏イベントデータ毎に、該演奏イベントデータのパラメータの差分、及びイベント発生タイミングの時間の差分を取得し、
    前記取得した差分の少なくとも1種類の差分を用いて、演奏者の演奏内容を分析し、
    前記分析の結果を演奏者に通知し、
    前記取得した差分の少なくとも1種類の差分に基づいて前記基準データを変更し、
    該変更された基準データを再生させる、
    ことを特徴とする演奏分析方法。
JP21489096A 1995-12-28 1996-08-14 演奏分析装置及び演奏分析方法 Expired - Fee Related JP3577561B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP21489096A JP3577561B2 (ja) 1995-12-28 1996-08-14 演奏分析装置及び演奏分析方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP34350195 1995-12-28
JP7-343501 1995-12-28
JP21489096A JP3577561B2 (ja) 1995-12-28 1996-08-14 演奏分析装置及び演奏分析方法

Publications (2)

Publication Number Publication Date
JPH09237088A JPH09237088A (ja) 1997-09-09
JP3577561B2 true JP3577561B2 (ja) 2004-10-13

Family

ID=26520569

Family Applications (1)

Application Number Title Priority Date Filing Date
JP21489096A Expired - Fee Related JP3577561B2 (ja) 1995-12-28 1996-08-14 演奏分析装置及び演奏分析方法

Country Status (1)

Country Link
JP (1) JP3577561B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008132088A (ja) * 2006-11-28 2008-06-12 Taito Corp リズムゲーム装置

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4144296B2 (ja) 2002-08-29 2008-09-03 ヤマハ株式会社 データ管理装置、プログラムおよびデータ管理システム
US7663044B2 (en) 2002-09-04 2010-02-16 Kabushiki Kaisha Kawai Gakki Seisakusho Musical performance self-training apparatus
JP4628725B2 (ja) * 2004-08-30 2011-02-09 株式会社河合楽器製作所 テンポ情報出力装置、テンポ情報出力方法及びテンポ情報出力のためのコンピュータプログラム、タッチ情報出力装置、タッチ情報出力方法及びタッチ情報出力のためのコンピュータプログラム
JP4419911B2 (ja) * 2004-11-16 2010-02-24 ヤマハ株式会社 音楽セッションシステム
JP2009186591A (ja) * 2008-02-04 2009-08-20 Seiko Instruments Inc テンポ表示装置及びテンポ表示方法
JP2009204822A (ja) * 2008-02-27 2009-09-10 Kawai Musical Instr Mfg Co Ltd 電子鍵盤楽器
JP5189952B2 (ja) * 2008-10-21 2013-04-24 株式会社河合楽器製作所 楽譜認識装置、及びコンピュータプログラム
JP5418561B2 (ja) 2011-09-26 2014-02-19 カシオ計算機株式会社 サポート機能推薦装置、サポート機能推薦方法、サポート機能推薦システム、並びにプログラム
JP6708180B2 (ja) 2017-07-25 2020-06-10 ヤマハ株式会社 演奏解析方法、演奏解析装置およびプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008132088A (ja) * 2006-11-28 2008-06-12 Taito Corp リズムゲーム装置

Also Published As

Publication number Publication date
JPH09237088A (ja) 1997-09-09

Similar Documents

Publication Publication Date Title
JP3812328B2 (ja) 自動伴奏パターン発生装置及び方法
JP3293745B2 (ja) カラオケ装置
JP2658463B2 (ja) 自動演奏装置
US20050211074A1 (en) Tone control apparatus and method
US6911591B2 (en) Rendition style determining and/or editing apparatus and method
JP3577561B2 (ja) 演奏分析装置及び演奏分析方法
JP3509545B2 (ja) 演奏情報評価装置、演奏情報評価方法及び記録媒体
JP3915807B2 (ja) 奏法自動判定装置及びプログラム
JP3760833B2 (ja) カラオケ装置
JP4525591B2 (ja) 演奏評価装置、及びプログラム
JP3915428B2 (ja) 楽曲分析装置、及びプログラム
JP3879524B2 (ja) 波形生成方法、演奏データ処理方法および波形選択装置
JP4614307B2 (ja) 演奏データ処理装置及びプログラム
JP3417662B2 (ja) 演奏分析装置
JPH1078750A (ja) カラオケ装置
JP2000330580A (ja) カラオケ装置
JP3807333B2 (ja) メロディ検索装置およびメロディ検索プログラム
JP3430895B2 (ja) 自動伴奏装置及び自動伴奏制御プログラムを記録したコンピュータ読み取り可能な記録媒体
JP3767418B2 (ja) 自動演奏装置及び自動演奏制御プログラム
JP3752956B2 (ja) 演奏ガイド装置および演奏ガイド方法並びに演奏ガイドプログラムを記録したコンピュータ読み取り可能な記録媒体
JP3777976B2 (ja) 演奏情報解析装置及び記録媒体
JP2614532B2 (ja) 楽音データ補正装置
JP2005017676A (ja) 自動演奏装置及びプログラム
JP3832147B2 (ja) 曲データ加工方法
JPH0822282A (ja) ギター自動伴奏装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040311

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040323

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040519

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20040615

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040628

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20070723

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080723

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080723

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090723

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090723

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100723

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110723

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110723

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120723

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120723

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130723

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees