以下、本発明の好ましい実施例について、添付図面を参照して説明する。図2は、本発明の波形発生装置1の構成を概略的に示したブロック図である。
波形発生装置1は、CPU10と、ROM14と、RAM16と、DSP20と、演奏データ入力手段28と、それらの構成間を接続するバス(BUS)12と、演奏データ入力手段28に接続され、この波形発生装置1に演奏データを入力するための鍵盤22と自動演奏装置24とを主に搭載している。
CPU10は、波形発生装置1全体を制御する中央演算処理装置である。後述する図7、図8、図12のフローチャートに示される処理の制御はCPU10により行われる。ROM(Read Only Memory)14は、CPU10により実行される各種の制御プログラムや、その実行の際に参照される固定値データが格納されている。
RAM(Random Access Memory)16は、ROM14内に記憶される制御プログラムの実行にあたって必要な各種レジスタや各種バッファ等が設定されたワーキングエリアや、処理中のデータを一時的に格納するテンポラリエリアや、鍵盤22により入力された演奏データやその演奏データを記憶する記憶領域や、CPU10の制御により取得された時間圧伸率情報や音高情報などを記憶する記憶領域等を有し任意にアクセスできる書き換え可能なメモリである。なお、演奏データには、例えば、ノートオンやノートオフのような押鍵又は離鍵に関する情報、これらのノートオン又はノートオフに対する時刻情報、楽曲の進行とテンポの変化とを記述したデータであるテンポマップを含むテンポ情報、及び、時間圧伸率情報等が含まれている。
DSP20は、デジタル信号の波形データを演算処理するための演算装置であり、その演算処理の制御プログラム等を記憶するプログラムデータメモリやその制御プログラム実行時に使用されるワーキングメモリ等を含んでいる。また、このDSP20は、特開平10−260685号公報に開示されるオーディオ・フレーズ音源に搭載されるDSPと同様の構成を備えている。即ち、記憶手段に記憶される複数の区間に区切られている一連の波形データをDSP20へ読み出し、読み出された波形データに対し、波形発生手段により、CPU10から供給される時間圧伸率情報や音高情報に基づいて時間圧伸又は音高変更が施され、DSP20から出力する。
この波形発生装置1は、鍵盤22及び自動演奏装置24から入力された演奏データに従って、元波形データに対して必要に応じて時間圧伸や音高変更を施し、ユーザが意図する波形データ(以下、「目標波形データ」と称する)を生成するものである。
次に、図3を参照して、元波形データ30とその元波形データ30を時間圧伸することにより生成される目標波形データ31とについて概念的に説明する。図3(a)は、元波形データ30による発音の態様を概念的に示した図であり、図3(b)は、元波形データ30を時間圧伸することにより生成される目標波形データ31による発音の態様を概念的に示した図である。なお、図3においては、本発明の理解を容易にするために、元波形データ30から目標波形データ31を生成する場合に音高の変化はないものとする。
図3(a)は、波形データ30が3つに区切られた波形区間30a〜30cを備えており、第1波形区間30aは2分音符の長さで「アイ」と発音され、第2波形区間30bは4分音符の長さで「ラブ」と発音され、第3波形区間30cは4分音符の長さで「ユー」と発音されることを示している。
一方、図3(b)は、目標とする発音形態にある目標波形データ31を概念的に示しており、ここで、第1波形区間31aは、第1波形区間30aの半分である4分音符の発音長で「ア」ではなく「アイ」と発音させることを目標としている。また、第2波形区間31bは、第2波形区間30bの2倍の長さの2分音符の長さで「ラブ」と発音させるが、伸ばすことのできない「ヴ(ve)」の音を機械的に伸ばして「ラブー(「ー」は雑音)」とするのではなく、又は、伸ばすことのできない「ヴ(ve)」の音を伸ばさずに第2波形区間30bに対して発音を不足させるのではなく、「ラーブ」とその第2波形区間内30bにおいて時間的に均等に発音させることを目標としている。
次に、図4を参照して、本発明の波形発生装置1の第1実施例の動作について具体的に説明する。なお、図4においては、本発明の理解を容易にするために、音高の変化は表さないものとする。この第1実施例では、図4(a)に示される元波形データに対して、複数の波形区間を各々の圧伸率にて時間軸圧伸することで、目標の発音態様を得るために、同じ内容の演奏を2度行う。その場合、第1回目の演奏データを、次回の発音態様を予定する演奏データとして記憶しておき、その第1回目の演奏データを第2回目の演奏時に各波形区間の時間圧伸率情報の計算に用い、目標の発音態様を実現する。ここで、次回の発音態様を予定して記憶された演奏データを「予定演奏データ」と称する。
図4(b)は、図4(a)の元波形データに対して行われた第1回目の演奏、即ち、図4(b)に示される演奏データを入力した際の発音態様を示す図である。本実施例において、先ず、ユーザは、鍵盤22の押鍵又は離鍵操作を行い、第1波形区間(区間1)と第2波形区間(区間2)と第3波形区間(区間3)との再生時間長が目標の発音態様と同じ時間長となるように、第1回目の演奏として手動演奏を行う。
第1回目の演奏において、鍵盤22に含まれる鍵の1つが押鍵されると、第1波形区間の発音がその押鍵された鍵に従う音高で開始され、時間a’経過後に別の鍵が押鍵されると、第2波形区間の発音がその別の鍵の音高で開始される。これにより、鍵盤22を構成する鍵が押鍵される度に、1の波形区間の再生が次の波形区間へ移行する。なお、この第1回目の演奏時には、第1波形区間、第2波形区間及び第3波形区間のいずれにおいても、時間圧伸率情報は、図4(a)の元波形データに対応して先に記憶されている図4(a)の元演奏データから波形データを圧縮も伸長もしないことを示す「1」として読み出され、CPU10よりDSP20へ出力される。
その結果、図4(b)に示すように、1つ目の押鍵により第1波形区間の発音を開始し、時間a’が経過した時点で2つ目の押鍵をしたため、図4(a)の元波形データの第1波形区間の再生は再生時間a’の時点から急速減衰され、時間a’以降の波形は再生されない。よって、図4(a)の元波形データの第1波形区間のほぼ半分の再生が行われた時点で次の第2波形区間の発音指示をしたため、図4(a)の元波形データの第1波形区間「アーイ」は、「アー」としか発音されない。
また、第1回目の演奏における第2波形区間の長さは、元波形データの第2波形区間のおよそ2倍の長さとなるため、図4(a)の元波形データにおける、第2波形区間の終了点近くに所定のループ区間を設定している場合は、そのループ区間まで再生を進めた後、そのままループ区間を繰り返して再生する。そして、次の第3波形区間の発音指示をうけると、第2波形区間の発音を急速減衰し、第3波形区間の発音を開始する。あるいは、図4(a)の元波形データの第2波形区間の終了点近くに所定のループ区間を設定していない場合は、第2波形区間をオリジナルの長さで再生し終わると消音し、そのまま無音で待機状態となり、次いで、第3波形区間の発音指示をうけて、第3波形区間の発音を開始する。
この第1回目の演奏は、予定演奏データとして記憶される。この予定演奏データにおいて、各区間の再生時間(演奏時間)a’、b’…としては、計測した時間a’、b’…を記憶してもよいし、各鍵の押鍵及び離鍵時刻を記憶し、1の押鍵をされてからその鍵が離鍵されるまでの時間、あるいは、レガート演奏をされた場合は、1の押鍵をされてから次の押鍵をされるまでの時間を計算することにより得られた時間a’、b’…を記憶するようにしてもよい。
第1回目の演奏に基づいて記憶した予定演奏データを参照することにより、第2回目の演奏において、第2回目の演奏の演奏データが順々に入力される(演奏が進む)に従って、波形データを時間軸圧縮伸長しながら再生する。具体的には、第1波形区間の再生指示(鍵盤22の押鍵、自動演奏データによる再生指示)があると、先ず、CPU10は、その再生指示に基づく音高情報と第1波形区間における時間圧伸率情報a’/aとをDSP20へ出力する。DSP20では、CPU10から入力された音高情報により指定される音高の楽音を、同じくCPU10から入力された時間圧伸率情報に応じて圧伸して再生を開始する。そして、次の押鍵を検出すると、DSP20は、現在の波形区間(第1波形区間)の波形の再生を急速減衰することにより中止し、次の波形区間(第2波形区間)の波形に対し、CPU10から入力される再生指示に基づく音高情報と時間圧伸率情報(b’/b)とに従う再生を開始する。ここで、次の押鍵を検出する前に現在の波形区間(第1波形区間)の波形の読み出しているポイントがループ区間に入った場合には、次の再生指示があるまで所定のループ区間を繰り返し読み出して再生を延長する。又は、現在の波形区間にループ区間を設定していない場合には、その波形区間の波形の読み出しを終えると、次の再生指示を待つ。
第1回目の演奏では、元波形データに対応した元演奏データの各区間の長さと手動演奏等により入力される演奏データの各区間の長さとが大きく異なるため、第1波形区間に基づいて本来発音されるべき「アイ」における「イ」の音が発音されなかったり、第2波形区間に基づいて本来発音されるべき「ラブ」は、「ヴ(ve)」が「ラブー」と伸ばせない音であるために、その音を伸ばさずに演奏により指示された発音長さより短い発音時間となったり、又は、無理に伸ばすことにより「ラブー(「ー」は雑音)」にように雑音として発音されたりして、発音に不自然さが生じる。しかし、同じ内容の演奏を2度行う場合の、第2回目の演奏の際に、第1回目の演奏から得られた各区間毎の時間圧伸率情報を用いて波形データを時間軸圧伸しつつ再生すれば、上述のような演奏の不自然さを解消することができる。
一方、第1回目の演奏データと第2回目の演奏データとの間に大きな差がある場合、第1回目の演奏について上記した理由と同様の理由により、発音される楽音には不自然さが生じる。しかし、楽音をどのように発音させるかという演奏目標を定めた場合、その演奏目標に対応した演奏データを手動操作により続けて2回入力することによって、2回目の演奏時には、演奏目標に従う楽音を違和感なく発音再生することができる。即ち、1回目の演奏により、各々の波形区間毎の発音長さが目標の発音長さとなっている演奏データ(予定演奏データ)を記憶しているので、第2回目の演奏時には、各波形区間の発音長さを、先に記憶した予定演奏データより取得した各々の波形区間の時間圧伸率情報に応じた長さで発音することができる。
従って、演奏目標が定まった後、第2回目の演奏を行うと、第2回目の演奏が自動演奏である場合は全く誤差がなく(図4(c)参照)、また、手動演奏である場合も微小な誤差で発音再生できるため(図4(d)参照)、違和感のない演奏目標通りの発音再生をすることができる。
なお、第1回目の演奏により記録された予定演奏データと、それと同じ演奏内容で行われる第2回目の演奏による演奏データとの微細な誤差は、従来より公知の手法などにより対処することができる。図5は、予定演奏データより微細に早く波形区間を進めるような手動演奏(第2回目の演奏)が行われた場合の誤差の処理の一例を説明する図である。図5(a)は、波形区間を進める指示(次の波形区間の発音指示)が入力された時刻から予定演奏データにおける次の波形区間の先頭の開始予定時刻までの時間が所定時間(ジャンプ限度区間)を越える場合の誤差の処理の一例を説明する図である。この場合、次の波形区間の発音指示が入力された時点から現在発音中の波形データの発音を急速減衰させ、次いで、次の波形区間の先頭から波形データの再生を開始する。
また、図5(b)は、波形区間を進める指示(次の波形区間の発音指示)が入力された時刻から予定演奏データにおける次の波形区間の先頭の開始予定時刻までの時間が所定時間(ジャンプ限度区間)以下である場合の誤差の処理の一例を説明する図である。この場合、次の波形区間の発音指示が行われても急速減衰することなく、現在の時間圧伸率を保ったまま再生を進め、次の波形区間の先頭に達したら次の波形区間の波形データの再生を開始する。
一方、図6は、予定演奏データより微細に遅く波形区間を進めるような手動演奏(第2回目の演奏)が行われた場合の誤差の処理の一例を説明する図である。図6(a)は、元波形データにおいて、予定演奏データにおける現在発音中の波形区間の終了点近くに所定の長さのループ区間を設けた場合の状態を示す図である。現在演奏中の波形区間の終了点近くに設けたループ区間に再生点を進め、ループ再生をする。現在演奏中の波形区間の再生時間が予定演奏データに予定された再生時間を超えても次の発音指示がされない場合には、図6(a)に示されるループ区間に含まれるいくつかの波形を繰り返し再生し、次の波形区間の発音指示を待機する。
図6(b)は、予定演奏データより波形区間を進める手動演奏が遅くなった場合であり、現在演奏中の波形区間の再生時間が、予定演奏データに予定された再生時間を超えて所定時間(延長リミット)以上、次の波形区間の発音指示されない場合の処理の一例を示す図である。この場合、延長リミット区間の終端に到達した時点で、再生中の区間の波形データの発音を減衰し、再生を停止する。
図6(c)は、予定演奏データより遅く波形区間を進める手動演奏が行われた場合であり、現在演奏中の波形区間の再生時間が、予定演奏データに予定された再生時間を越えて、所定時間(延長リミット)以内に、次の波形区間の発音指示がされる場合の処理の一例を示す図である。この場合、次の波形区間の発音指示があった時点で再生中の区間の波形データの発音を急速減衰し、次の波形区間の先頭から発音を開始する。
次に、図7及び図8のフローチャートを参照して、波形発生装置1において実行される時系列的な処理動作について説明する。なお、以下の説明においては、説明を簡略化して発明の理解を容易にするために、波形発生装置1はモノモードで単音のみの発音を行うものとし、鍵盤22の押鍵又は離鍵操作に基づいて演奏データを入力するものとする。
なお、図7及び図8に示される処理ルーチンは、第1回目の演奏であっても第x回目の演奏であっても共通して実行されるものである。第1回目の演奏の開始前において、記憶されている演奏データは元演奏データであるため、時間圧伸率情報は、全ての波形区間に対して「1」となる。また、波形データの先頭から再生する演奏の開始時点において、波形区間を指定する区間カウンタnは「0」に初期化される。
第1実施例においては、鍵盤22の鍵が押鍵される度に、波形区間が順次移行する。即ち、鍵盤22の鍵が押鍵されると、その押鍵により演奏の開始される波形区間が、押鍵された鍵に対応する音高で発音開始され、次いで、押鍵されていた鍵が離鍵されると現在演奏中の区間の波形データの発音が停止される。続いて鍵盤22の鍵が押鍵されると、同様に次の波形区間の発音が開始される。
なお、先に押鍵された鍵が離鍵される前に、新たな鍵が押鍵された場合(以下、このような演奏を「レガート演奏」と称する。)には、先の押鍵に対応する波形区間に基づく発音を停止し、次の波形区間に基づく発音が開始される。
図7(a)は、CPU10により実行されるこの第1実施例の押鍵時割り込み処理ルーチンのフローチャートである。この押鍵時割り込み処理ルーチンのプログラムは、鍵盤22の鍵を押鍵されることにより、あるいは、演奏データの押鍵情報を入力されることにより起動される。鍵盤22の押鍵によって押鍵時割り込み処理ルーチンが起動すると、先ず、新たな押鍵に基づき区間カウンタnを「1」進め、次の波形区間を指定する(S101)。
S101の処理後、所定の記憶領域(RAM16など)に既に記憶されている演奏データの区間カウンタnに対応した時間圧伸率情報と、鍵盤22によって入力される音高情報及びベロシティ値とをDSP20へ出力し(S102)、DSP20に対し発音開始を指示する(S103)。
S103の処理後、区間カウンタnが「1」であるか否か、即ち、この押鍵時割り込み処理ルーチンが第1番目の押鍵であるか否かを確認する(S104)。S104の処理により確認した結果、第1番目の押鍵であれば(S104:Yes)、この押鍵時割り込み処理ルーチンを終了し、波形発生装置1のメイン処理ルーチン(図示せず)にリターンする。
一方、S104の処理により確認した結果、第1番目の押鍵でなければ(S104:No)、レガート演奏であるか否か、即ち、今回に押鍵された鍵が、前回に押鍵された鍵が離鍵される前に押鍵されたか否かを確認する(S105)。S105の処理により確認した結果、レガート演奏でなければ(S105:No)、この押鍵時割り込み処理ルーチンを終了し、波形発生装置1のメイン処理ルーチンにリターンする。
一方、S105の処理により確認した結果、レガート演奏であれば(S105:Yes)、前回の押鍵から今回の押鍵までの時間を求め、それに基づいて新たな時間圧伸率情報を演算し、演算により得られた時間圧伸率情報と、今回の演奏に関するテンポマップを含む演奏データとを所定の記憶領域(例えば、RAM16)に記憶する(S106)。S106の処理後、前回の押鍵により発音していた波形区間の発音を消音し(S107)、この押鍵時割り込み処理ルーチンを終了し、波形発生装置1のメイン処理ルーチンにリターンする。
次に、図8のフローチャートを参照して、CPU10により実行される離鍵時割り込み処理ルーチンについて説明する。この離鍵時割り込み処理ルーチンのプログラムは、鍵盤22の鍵を離鍵されることにより、あるいは、演奏データの離鍵情報を入力されることにより起動される。鍵盤22の離鍵によって離鍵時割り込み処理ルーチンが起動すると、先ず、レガート演奏であるか否か、即ち、今回に離鍵された時点に、他の押鍵されている鍵があるか否かを確認する(S201)。S201の処理で確認した結果、レガート演奏であれば(S201:Yes)、この離鍵時割り込み処理ルーチンを終了し、波形発生装置1のメイン処理ルーチン(図示せず)にリターンする。
一方、S201の処理で確認した結果、レガート演奏でなければ(S201:No)、今回離鍵された鍵の押鍵(前回の押鍵)に基づいて発音されていた楽音を消音する(S202)。S202の処理後、前回の押鍵時刻と離鍵時刻との差(押鍵時間)を求め、その押鍵時間に基づいて新たな時間圧伸率情報を演算し、演算により得られた時間圧伸率情報と、今回の演奏に関するテンポマップを含む演奏データとを所定の記憶領域(例えば、RAM16)に記憶し(S203)、この離鍵時割り込み処理ルーチンを終了し、波形発生装置1のメイン処理ルーチンにリターンする。
ここで、図9は、自動演奏される演奏データを入力する間、又は、鍵盤22の押鍵又は離鍵操作に基づいて演奏データを入力する間、表示装置26において表示される表示内容を示す図である。図9に示されるように、表示装置26は、鍵盤22の操作等により入力された演奏データにより確定し再生される各波形区間の音高や発音長さを、波形データの再生開始ポイントから現在再生ポイントに到るまで時々刻々と表示する。また、現在の再生ポイント以降については、それまでの表示形態とは異なる表示形態にて、予定演奏データを参照して各波形区間の音高や発音長さを表示する。
上述のように、本発明の波形発生装置1の第1実施例においては、第1回目の演奏に基づいた予定演奏データを、その予定演奏データより取得した各波形区間の時間圧伸率情報を含んだ形で、所定の記憶領域(RAM16など)に記憶している。そして、この予定演奏データ(即ち、第1回目の演奏データ)を参照して第2回目の演奏を行うと、発音の不自然さを回避することができる。
次に図10及び図11と図7(b)及び図12のフローチャートとを参照して、本発明の波形発生装置1の第2実施例について説明する。上記第1実施例では、第2回目の演奏を行うと、元波形データの各区間に対し、第1回目の演奏により取得された時間圧伸率情報に基づいて波形データを圧縮伸長させた。これに対し、第2実施例では、第2回目の演奏において、第1回目の演奏を記憶した演奏データの時間圧伸率情報に基づいて波形データを圧縮伸長すると共に、第2回目の演奏の演奏テンポと第1回目の演奏の演奏テンポとの相違を検出すると、その検出した時点で、所定の記憶領域に記憶した演奏データのテンポマップを更新し、更新したテンポマップに応じた新たなテンポに基づいて波形データの時間軸上での圧縮伸長を行う。ここで、テンポマップとは、楽曲の進行とテンポの変化を記述したデータであり、予定演奏データとして記憶されている。
図10は楽譜データであり、図10(a)は、元の演奏に従う楽譜データであり、図10(b)は、ユーザが目標とする演奏の楽譜データである。即ち、本実施例において、ユーザは、図10(a)で示される楽譜に従う波形データに対し、図10(b)に示される楽譜データに従う演奏を行う。
図11は、実際の演奏データである。演奏データは、ノートオンが順次入力される各楽音番号、ティック単位で表されるノートオン入力時刻(「Time」)と、ノートオンが入力されたノートナンバ(「Note No.」)、ノートオンからノートオフまでの時間(レガート演奏でない場合)又はノートオンから次のノートオンまでの時間(レガート演奏である場合)(「Duration」)、ベロシティなどから構成される。また、この演奏データは、RAM16内の所定の領域に記憶されており、ノートオン等が入力される毎に順次記憶される。なお、本実施例では、発明の理解を容易にするために、図11に示される演奏データは、図10の楽譜に示される音高に対応するノートナンバを誤りなく順次入力した場合について説明する。即ち、図10の楽譜における各音符の楽音番号と、図11の各楽音番号はそれぞれ対応している。
図11(a)は、図10(a)に示される楽譜データに従った演奏データであり、所定の記憶領域(例えば、RAM16)に記憶される元演奏データである。この元演奏データ(図11(a))は、元演奏データの押鍵間隔(今回押鍵時刻(Time)と次回押鍵時刻との差)及び押鍵時間(押鍵時刻と離鍵時刻との差(レガート演奏でない場合)又は押鍵時刻と次の押鍵時刻との差(レガート演奏である場合)、即ち、「Duration」の値)が図10(a)に示される楽譜データの原理的な音符長に従う演奏データとした。なお、本実施例では、4分の4拍子の単位音符(1拍)である4分音符を構成するティック(自動演奏装置で時間間隔を表すための最小時間単位)の数は「120」である。また、この元の演奏データにはテンポ情報としてテンポマップが付加されており、本実施例では、元の演奏データの開始時点の演奏テンポは「90」であり、その後、演奏テンポは、「90」にて一定であるとする。
ここで、先ず、図11(a)に示される元波形データに従った元演奏データを予定演奏データとして、図10(b)の楽譜に沿った演奏を、第1回目の演奏として、手動演奏にて行う。図11(b)は、所定の記憶領域(例えば、RAM16)に記憶された、第1回目の演奏の演奏データを示す図である。図11(b)によれば、各々の押鍵間隔は、楽譜に示される対応する音符の長さにほぼ従うが、手動演奏であるため、楽譜に示される各々の音符の長さよりその音符のそれぞれに対応する、各々の波形区間となる押鍵時間(発音長さ)は、短くなる傾向にある。各小節のティック数(この例の場合、各小節の先頭の楽音の押鍵時刻と、次の小節の先頭の楽音の押鍵時刻との差)は、どれも約「480」であり、演奏のテンポは約「90」のほぼ一定の状態で演奏されていることがわかる。なお、この演奏テンポ情報は、図11(b)に示される演奏データの一部として記憶される。
次に、図11(c)は、図11(b)に示される第1回目の演奏データを予定演奏データとして、その第1回目の演奏に次いで新たに行われた第2回目の演奏の演奏データを示す図である。図11(c)に示す演奏データによれば、第1小節目(楽音番号1〜5)及び第2小節目(楽音番号6〜10)では、両小節のティック数は約「480」という値が計測されている。しかし、第3小節目(楽音番号11〜15)では「398」という値が計測され、演奏されたテンポは、第3小節全体として従来のテンポ「90」より速くなっていることを示す。
この第2実施例において、波形発生装置1では、演奏開始時の演奏テンポとして、第1回目の演奏の演奏データのテンポ、又は、操作子等によりテンポの変更があった場合にはその変更したテンポを設定する。ここで、操作子等によりテンポの変更があった場合、その設定テンポの変化分(増加分又は減少分)により、所定の記憶領域(RAM16など)に記憶している前回の演奏データの、楽曲の進行とテンポの変化を記述したデータであるテンポマップを更新する。テンポマップの更新は、テンポマップにテンポの増加率又は減少率を掛ける、あるいは、テンポの増加量又は減少量を加えること、即ち、演奏データ全体のテンポマップに対して、そのテンポマップに含まれているテンポの移り変わりの様子を残したまま、テンポマップで表されるテンポの変化線を上下に平行移動させることによって行われる。第1回目の演奏と同じ演奏内容の第2回目の演奏時には、第1回目の演奏を記憶した演奏データの圧伸率に基づいて、波形データの各波形区間を圧伸する。更に、後述するテンポ変更処理(図12)により、第1回目の演奏テンポに対して、第2回目の演奏のテンポに新たなテンポを検出すると、検出時点にて、先に記憶した第1回目の演奏データのテンポマップを更新し、更新した現在のテンポに応じて各音符(各区間)に対する波形データを圧縮又は伸長をする。従って、演奏中のテンポの変化に対応し得る。
図7(b)は、CPU10により実行される第2実施例の押鍵時割り込み処理ルーチンのフローチャートである。この第2実施例の押鍵時割り込み処理ルーチンのプログラムもまた、第1実施例の押鍵割り込み処理ルーチン(図7(a))のプログラムと同様に、鍵盤22の鍵を押鍵されることにより、あるいは、演奏データの押鍵情報を入力されることにより起動される。鍵盤22の押鍵によって押鍵時割り込み処理ルーチンが起動すると、先ず、新たな押鍵に基づき区間カウンタnを「1」進め、次の波形区間を指定する(S101)。
S101の処理後、テンポ変更処理(S108)を行う。ここで、図12を参照して、テンポ変更処理(S108)について説明する。図12は、CPU10により実行されるテンポ変更処理のフローチャートである。このテンポ変更処理では、先ず、押鍵されたノートナンバに基づいてノート列メモリを更新する(S301)。ここで、このノート列メモリは、RAM16内に構成される図示しないメモリであり、押鍵された順に最新の10個のノートナンバを、それぞれの押鍵時刻と共に記憶するメモリである。S301の処理において、このノート列メモリに既に10個のノートナンバが記憶されている場合、最も古い押鍵時刻に対応するノートナンバを削除し、今回押鍵されたノートナンバとその押鍵時刻T2を記憶する。なお、押鍵時刻T2は、波形データの先頭から演奏を開始する毎に「0」に初期化される。また、このノート列メモリは、ノートナンバと押鍵時刻T2とを記憶するだけでなく、上述の図11に示される演奏データと同様に押鍵時間(Duration)などの情報を含む構成にしてもよい。
S301の処理後、今回の押鍵時刻T2が、前回、テンポを算出した時刻T1(S305参照)から4拍以上経過しているか否かを確認する(S302)。なお、S305の処理においてテンポの更新をした時刻T1は、演奏が開始される毎に「0」に初期化される。S302の処理で確認した結果、今回の押鍵時刻が、時刻T1(前回にテンポの設定を行った時刻)から4拍以上経過していない、即ち、時間(T2−T1)が4拍に相当する時間に到達しない場合(S302:No)、このテンポ変更処理を終了する。
一方、S302の処理で確認した結果、今回の押鍵時刻がS305の処理によるテンポの算出から4拍以上経過していれば(S302:Yes)、前回演奏データ(第1回目の演奏データ)に対しマッチング判定を行う(S303)。S303の処理後、今回演奏(第2回目の演奏データ)において、時間(T2−T1)の間に押鍵されたノートナンバが、前回の演奏データにおけるいずれかの4拍分以上の区間と対応するか否かを判定する(S304)。
ここで、S303の処理で行われるマッチング判定は既に公知である。例えば、特開平9−292882号公報には、自動伴奏制御方法の一部として、連続して入力される複数の音高について楽譜のデータと一致する位置を検索し、その位置に応じてテンポを算出することにより、楽譜上の表示を追尾することが記載されている。この特開平9−292882号公報に記載されるマッチング方法によれば、間違って演奏した場合や、楽譜に記載される音符以外に押鍵した場合や、楽譜に記載される音符を意図的に押鍵しなかった場合などを考慮しつつ演奏データと楽譜とのマッチングを行うことができる。
S304の処理において、前回演奏データとのマッチングが取れないと判定された場合には(S304:No)、このテンポ変更処理ルーチンを終了する。一方、S304の処理により、今回演奏データと前回演奏データにおけるいずれかの4拍分以上(即ち、本実施例における1小節分以上)の領域とのマッチングが取れたと判定された場合(S304:Yes)、マッチングのとれた今回演奏データに対し、テンポの算出を行う(S305)。
S305の処理では、今回演奏データにおいて、前回演奏データに対してマッチングのとれた1小節分以上(4拍分以上)の押鍵計測時間(単位:ティック)を求め、その演奏計測時間とマッチングをとるために要した拍数分の理論ティック数(例えば、本実施例では、4拍分の理論ティック数=「480」)に基づいてテンポを算出する。
例えば、図11(c)に示される今回演奏データ(第2回目の演奏データ)によれば、2小節目(楽音番号6〜10)の演奏計測時間は「479」(=961−482)であるので、今回演奏において、2小節目は「90.2」(=90*480/479)のテンポで演奏されたと計算される。なお、値「90」は、本実施例における前回演奏(第1回目の演奏)時の演奏テンポであり、前回演奏データを予定演奏データとして所定の記憶領域(RAM16など)に記憶されている値である。S305の処理において、演奏テンポの算出が実行されたら、現在の押鍵時刻T2をT1として設定する。
S305の処理によりテンポが算出されたら、次いで、今回演奏時の算出されたテンポが現在のテンポを基準とする所定範囲内にあるか否かを確認する(S306)。S306の処理では、算出されたテンポと現在のテンポとの比を取り、その比(算出されたテンポ/現在のテンポ)が所定範囲内にあるか否かを確認する。S306において、例えば、本実施例では、算出されたテンポが現在のテンポに対して0.5〜0.9倍又は1.1倍から1.5倍の範囲にあるか否か、即ち、今回の演奏においてテンポ変化が所定の範囲内であったか否かを確認する。
S306の処理により確認した結果、S305の処理により算出されたテンポが所定範囲内になければ(S306:No)、このテンポ変更処理ルーチンを終了する。一方、S306の処理により確認した結果、S305の処理により算出されたテンポが所定範囲内にある場合(S306:Yes)、演奏テンポの変更があったと判定し、その演奏テンポの変更に基づくテンポマップの更新を行い、現在の演奏テンポを更新し(S307)、この演奏テンポ変更処理(S108)を終了する。
ここで、S307の処理では、現在のテンポから新たなテンポへの演奏テンポの変化分(増加分又は減少分)により、所定の記憶領域(RAM16など)に記憶されている前回の演奏データのテンポマップを更新し、現在の演奏テンポが更新される。なお、「演奏データのテンポマップの更新」とは、演奏データのテンポマップにテンポの増加率又は減少率を掛ける、あるいは、テンポの増加量又は減少量を加えること、即ち、演奏データ全体のテンポマップに対して、そのテンポマップに含まれているテンポの移り変わりの様子を残したまま、テンポマップで表されるテンポの変化線を上下に平行移動させることを意味する。また、この演奏データのテンポマップの更新は、上記のように更新されたテンポマップに対応するティックを発生するようにクロック信号発生回路(図示せず)の周期を制御することによって行われる。
本実施例では、第2回目の演奏時における1小節目(楽音番号1〜5)及び2小節目(楽音番号6〜10)のテンポは、S305の処理により、それぞれ、「90」及び「90.2」であると算出される。よって、S306の処理によれば、第1小節目及び第2小節目についてはテンポの変化はなかったと判断される。
一方、S305の処理によれば、第2回目の演奏時における3小節目(楽音番号11〜15)のテンポが「109」と算出される(図11(c)参照)。このテンポは第1回目の演奏テンポの「1.2」倍であるので、S306の処理においてテンポが変化したと判断される。そして、S307の処理により、前回演奏を記憶した予定演奏データのテンポマップにおける4小節目以降(楽音番号16以降)の部分を更新し、演奏テンポをS305の処理により算出された新たなテンポ「109」に変更し、その新たなテンポに基づいて波形データを圧縮する。
4小節目の波形データに対してテンポ「109」に同期するように圧縮したので、3小節目のテンポと変わりのないテンポで演奏された4小節目(楽音番号16〜20)のティック数は、理論的な4拍のティック数に対して誤差の少ない「479」として計測された。従って、第2回目の演奏中に、第1回目の演奏とは異なる演奏テンポとなった第3小節目では、新たなテンポと第1回目の演奏データとの誤差が大きいために、違和感のある音を発音したが、S307の処理により4小節目の演奏テンポを変更し、そのテンポに基づいて時間圧伸率情報を補正するため、4小節目における楽音の違和感はほとんどなくなった。
図7(b)に戻って説明する。テンポ変更処理(S108)の終了後、S108の処理において変更された現在のテンポに基づいて、区間カウンタnに対応する区間に対して設定するための時間圧伸率情報を算出する(S109)。S109の処理により算出された時間圧伸率情報と鍵盤22により入力される音高情報及びベロシティ値とをDSP20へ出力し(S102)、DSP20に対し発音開始を指示する(S103)。
S109及びS102〜S103の処理により、現在のテンポに応じた時間圧伸率情報が新たに取得され、その新たな時間圧伸率情報がDSPへ出力され、その新たな時間圧伸率情報に応じた発音が開始される。
S103の処理後、区間カウンタnが「1」であるか否かを確認し(S104)、区間カウンタnが「1」であれば(S104:Yes)、この押鍵時割り込み処理ルーチンを終了し、波形発生装置1のメイン処理ルーチン(図示せず)へリターンする。
一方、S104の処理により確認した結果、区間カウンタnが「1」でなければ(S104:No)、レガート演奏であるか否かを確認する(S105)。S105の処理により確認した結果、レガート演奏でなければ(S105:No)、この押鍵時割り込み処理ルーチンを終了し、波形発生装置1のメイン処理ルーチン(図示せず)へリターンする。
一方、S105の処理により確認した結果、レガート演奏であれば(S105:Yes)、前回の押鍵から今回の押鍵までの時間を求めて新たな時間圧伸率情報を演算し、演算により得られた時間圧伸率情報と、今回の演奏に関するテンポマップを含む演奏データとを所定の記憶領域(例えば、RAM16)に記憶する(S106)。ここで、S106の処理において演算される新たな時間圧伸率情報は、次回に演奏する際に音符毎の波形データを再生する際に参照される時間圧伸率情報である。S106の処理後、前回の押鍵により発音していた波形区間の音を消音し(S107)、この押鍵時割り込み処理ルーチンを終了し、波形発生装置1のメイン処理ルーチン(図示せず)にリターンする。
第2実施例において離鍵が確認された場合、第1実施例と同様に図8の離鍵時割り込み処理ルーチンが起動され、その離鍵時割り込み処理ルーチンに従う処理が実行される。ここで、離鍵時割り込み処理ルーチンにおけるS203の処理において演算される新たな時間圧伸率情報は、次回に演奏する際に、音符毎(各区間毎)の波形データを再生する際に参照される時間圧伸率情報である。
なお、上記第2実施例では、マッチングを得た4拍分あるいはそれ以上の拍数分の楽音の計測時間を基にS305の処理で第2回目の演奏テンポを算出した後、S306の処理により、そのテンポ値が所定範囲内にあるか否かを確認したが、第2回目の演奏テンポを求めることなく、マッチングを得た4拍分あるいはそれ以上の拍数分の楽音を計測した時間に相当するティック数とその拍数分に該当する理論的ティック数との比が所定範囲内にあるか否かを確認してもよい。
また、上記第2実施例におけるテンポ変更処理(図12)のS303の処理では、現在演奏中の演奏データと前回の演奏データとをマッチング判定させるように構成したが、マッチングさせる対象は前回の演奏データに限られず、前々回の演奏データなどの過去の演奏データ全てを対象とするようにしてもよい。更に、マッチングさせる対象を、同じ楽曲の演奏データに限ることなく、違う楽曲の演奏データを対象とするようにしてもよい。また、この場合、マッチング対象とされる演奏データは、波形発生装置1に備えられている記憶手段(例えば、RAM16)に記憶されたものに限られず、例えば、ネットワーク上に存在する他の記憶媒体であってもよい。
また、上記第2実施例では、発明の理解を容易にするために、第1回目の演奏のテンポが一律「90」であるとして説明したが、種々のテンポの演奏区間を含むような演奏データであってもよい。
上述のように、本発明の波形発生装置1の第2実施例においては、第2回目の演奏の途中で、第1回目の演奏と異なるテンポでの演奏が、所定区間(上記第2実施例では、4拍(1小節)分)経過後、その所定区間内の演奏データのマッチングが取れたことを検出すると共に、新たなテンポへの変化が所定範囲内の変化であると確認されたら、新たなテンポに従うように、記憶していた前回演奏データのテンポマップを更新し、新たなテンポに基づいた時間圧伸率情報が取得される。従って、テンポマップを更新した時点から、新たなテンポにより取得された時間圧伸率情報に基づいて、新たなテンポに同期した波形を生成する。これにより、演奏途中でのテンポ変化に対応し得、ユーザに感じさせる違和感を低減することができる。
次に、図13を参照して、本発明の波形発生装置1の第3実施例について説明する。上記第1及び第2実施例では、元波形データの各発音区間(波形区間)の発音長さを時間軸上で圧縮伸長させた。これに対し、第3実施例では、元波形データの変化している音高(ピッチ)を指示される音高に基づいて変化させる。即ち、第3実施例では、音楽のポルタメント又はスラーと呼ばれる、発音する音高を徐々に変化させる奏法に対応し得る波形発生装置1について説明する。なお、前記した第1及び第2実施例と同一の部分には同一の符号を付して、その説明は省略する。
図13は、元波形データのピッチ変化を滑らかに移行するように処理する場合のポルタメント(又はスラー)の音高変化を説明する図である。図13(a)は、元波形データの音高変化の様子を模式的に示す図であり、標準ピッチ「C」の第1波形区間から標準ピッチ「D」の第2波形区間に向かう場合に、第1波形区間におけるポルタメント区間において、標準ピッチが「C」から「D」に向かって徐々に音高が高くなる様子を示している。
ここで、「標準ピッチ」とは、その区間の代表となるピッチを意味する。ある区間をあるピッチ(音高)で発音指示された場合、発音指示された区間において、その区間に元々含まれている自然なピッチの揺らぎを残しつつ、発音指示されたピッチでの発音が行われる。
図13(b)は、鍵盤22の押鍵又は離鍵操作により、図13(a)に示される元波形データに対して第1回目の演奏を行った場合の音高変化を示す図である。図13(b)に示すように、本実施例の第1回目の演奏では、標準ピッチが「C」から「D」へ向かうポルタメント演奏を表す元波形データに対し、第1波形区間に対して「C」、第2波形区間に対して「B♭」が押鍵される。この場合、「C」の押鍵により、第1波形区間では音高「C」で発音を開始し、ポルタメント区間において、音高は「D」に向かって徐々に変化するが、「B♭」の押鍵により、第2波形区間では「B♭」の音高で発音を開始する。従って、第1回目の演奏は非常に不自然な感じを与えるものとなる。
図13(c)は、第1回目の演奏データに基づく予定演奏データを参照して、第2回目の演奏を行った場合の音高変化を示す図である。図13(c)に示すように、第2回目の演奏では、第1回目の演奏と同じ演奏が行われ、予定演奏データとして記憶した第1回目の演奏データによりポルタメント区間の音高変化を補正する。即ち、予定演奏データでは、「C」の次に「B♭」を指定(押鍵)しているので、第2回目の演奏時には、第1波形区間のポルタメント区間において、音高を「C」から「B♭」へ徐々に変化するように制御する。従って、第2回目の演奏では、自然なポルタメント演奏を行うことができる。
上述のように、本発明の波形発生装置1の第3実施例においては、元波形データにおける各波形区間に対して、第1回目の演奏に基づいて音高情報を取得する。第1回目の演奏が目標とする演奏であれば、第2回目の演奏時の発音は、第1回目の演奏に基づいて取得された音高情報に従って発音されるために、ポルタメント(又はスラー)演奏時における各波形区間の音高変化の不自然さを回避することができる。
次に、図14および図15を参照して、本発明の波形発生装置1の第4実施例について説明する。上記第3実施例では、元波形データの変化している音高(ピッチ)を指示される音高に基づいて変化させた。これに対し、第4実施例では、元波形データの変化している音量を指示される音量に基づいて変化させる。なお、前記した第3実施例と同一の部分には同一の符号を付して、その説明は省略する。
図14は、持続音系の楽音でポルタメント演奏(又は、スラー演奏)を行った場合の音量変化を説明する図である。図14(a)は、元波形データの音量変化の様子を模式的に示す図である。また、図14は、元波形データと、元波形データの各波形区間に対応した演奏データとを合わせて示した図である。第1波形区間の発音に対応した押鍵1と、第2波形区間の発音に対応した押鍵2とは、演奏データの音量指示となる各々の押鍵速度は、ほぼ同じとなっている。そして、第2波形区間の後半、音量が徐々に変化する区間を経て、第3波形区間の音量に到達している。従って、第3波形区間に対応した押鍵3の押鍵速度は、第1又は第2の押鍵速度より強く(速く)なっている。
図14(b)は、鍵盤22の押鍵又は離鍵操作により、図14(a)に示される元波形データと元演奏データに対して第1回目の演奏を行った場合の音量変化を示す図である。図14(b)に示すように、本実施例の第1回目の演奏では、押鍵1及び押鍵2においては、元演奏データと同等の速度で押鍵されたが、押鍵3において、元演奏データの押鍵速度より強く(速く)押鍵された。この場合、第1波形区間及び第2波形区間では元波形データとほぼ同じ音量で発音を開始し、音量変化区間では、元演奏データにおける音量変化区間の音量変化に従う音量変化、即ち、元演奏データの押鍵3の押鍵速度に従う音量へ徐々に向かう音量変化を行う(実線151)。ここで、第1回目の演奏において、元波形データの押鍵3より強い(速い)押鍵速度の押鍵3があると、第3波形区間はその押鍵3に応じた音量で発音されるため、非常に不自然な感じを与える演奏となる。
図14(c)は、第1回目の演奏データに基づく予定演奏データを参照して、第2回目の演奏を行った場合の音量変化を示す図である。図14(c)に示すように、第1回目の演奏と同じ演奏内容の第2回目の演奏では、第1回目の演奏データを記憶した予定演奏データに基づいて、音量変化区間の音量変化を破線152から実線153へ補正する。即ち、押鍵3の押鍵速度情報を含んだ予定演奏データにより、第2回目の演奏時には、押鍵2に応じた音量から次の押鍵3に応じた音量へ徐々に変化するように制御する(実線153)。従って、第2回目の演奏では、自然な音量変化をする演奏を行うことができる。
また、図15は、減衰音系の楽音でポルタメント演奏(又は、スラー演奏)を行った場合の音量変化を説明する図である。図15(a)は、元波形データの音量変化の様子を模式的に示す図である。図15(a)によれば、スラー区間である第2波形区間の後半から音量が徐々に変化する区間を経て、第3波形区間の音量となっている。従って、第3波形区間に対応した押鍵3の押鍵速度は、第1又は第2の押鍵速度より強く(速く)なっている。
図15(b)は、予定演奏データに基づいてスラー区間の音量変化を行った場合を示す図である。第1回目の演奏では、押鍵3において、元演奏データにおける押鍵3の押鍵速度よりも強く(速く)押鍵されたので、持続音系の場合(図14(b))と同様に、音量変化は第2波形区間の音量から元演奏データの押鍵3の音量へ向かう変化となるために(破線161)、不自然な感じを与える演奏になる。しかし、第2回目の演奏では、図15(b)に示すように、第1回目の演奏を記憶した予定演奏データに基づいて、押鍵2から押鍵3への音量変化を、元波形データに従う破線161から実線162になるように補正する。従って、第2回目の演奏では、自然な音量変化をする演奏を行うことができる。
上述のように、本発明の波形発生装置1の第4実施例においては、元波形データにおける各波形区間に対して、第1回目の演奏に基づいて音量情報を取得する。第1回目の演奏が目標とする演奏であれば、第2回目の演奏時の発音は、第1回目の演奏に基づいて取得された音量情報に従って発音されるために、ポルタメント(又はスラー)演奏時おける各波形区間の音量変化の不自然さを回避することができる。
以上、実施例に基づき本発明を説明したが、本発明は上記実施例に何ら限定される物ではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変形が可能であることは容易に推察できるものである。
例えば、上記実施例では、波形発生装置1は、記憶手段(RAM16)に記憶される時間圧伸率情報を用いるように構成したが、記憶手段に記憶される各押鍵(ノートオン)や各離鍵(ノートオフ)の時刻情報から時間圧伸率情報を算出して用いるように構成してもよい。
また、上記実施例では、レガート奏法の時を除いて、押鍵から離鍵までの発音長さに基づいて、各波形区間を時間軸上で圧縮又は伸長して再生したが、常に、押鍵から次の押鍵までの時間長さに基づいて各波形区間を圧伸して再生するように構成してもよい。
また、上記実施例では、説明を簡略化して理解を容易にするために、複数の区間に分割された一連の波形データの詳細な構成についての説明を省略した。この「複数の区間に分割された一連の波形データ」は、例えば、各記憶単位毎に読出指定可能な記憶手段に記憶される波形データである。その場合、波形データを区間毎に区切るためのマーク情報が付加されるよう構成できる。又は、各記憶単位毎に読み出し指定可能な複数の記憶単位に波形データを区間毎に分割してそれぞれ記憶することによって、区間を区切るためのマーク情報を付加せずに構成してもよい。
また、上記第2実施例において、4拍以上の演奏に対してマッチングを行い、1小節分を越える演奏区間のマッチングが取れた場合にテンポを算出するように構成したが、これに変えて、押鍵毎にマッチングを行い、マッチングが取れる毎に前回のマッチング取得時刻からの経過時間を元にテンポを算出するように構成してもよい。更に、上記第2実施例では、楽譜における小節線間に対応する1小節分のテンポ変化を検出するよう構成したが、任意のタイミングからの1小節分のテンポ変化を検出するよう構成してもよい。
また、上記第2実施例において、1小節(4拍)を越える演奏区間についてマッチングが取れる毎に算出されるテンポが所定範囲内であれば、予定演奏データのテンポマップを更新するよう構成したが、これに代えて、連続する複数の音符や小節(又は、小節に代わる単位区間)毎に算出されるテンポを平均化し、その値が所定範囲内であった場合に、予定演奏データのテンポマップを更新するように構成してもよい。
また、上記第2実施例では、1小節(4拍)を越える演奏区間についてマッチングが取れる毎にテンポを算出し、その値をそのまま用いて予定演奏データのテンポマップを更新するように構成したが、これに代えて、算出されたテンポに対し、更にフィルタリング処理を行うように構成してもよい。これにより、マッチングを取る最小範囲(上記実施例では、小節)の間のテンポ変化を平滑化することができる。
また、算出されたテンポが所定範囲を越えて大きく変化した場合には、テンポマップを更新しないように構成したが、そのような大きなテンポ変化が数小節(又は、小節に変わる単位区間が数区間)続いた場合はテンポマップを更新するように構成してもよい。あるいは、1小節を越える演奏区間についてマッチングが取れた時に算出されるテンポが所定範囲内であれば、算出されたテンポで予定演奏データのテンポマップを更新するように構成したが、テンポマップを更新する場合に、その算出されたテンポが最終的なテンポになるように、その最終的なテンポへ向かって現在のテンポから徐々に変化するようにテンポマップを更新していってもよい。
また、上記第2実施例では、テンポマップで表されるテンポの変化線を上下に平行移動することによってテンポマップを更新するように構成した。これに代えて、テンポマップで表されるテンポの変化線を上下に平行移動するだけでなく、平行移動後のテンポの変化線において、所定の第1閾値を越える領域では、平行移動後のテンポの変化線の最大値と最小値との差がより拡大(又は縮小)されるように平行移動後のテンポの変更線を補正し、一方で、所定の第2閾値(第2閾値<第1閾値)を下回る領域においても、平行移動後のテンポの変化線の最大値と最小値との差がより拡大(又は縮小)されるように平行移動後のテンポの変化線を補正するように構成してもよい。
また、上記第2実施例において、演奏開始前のタップテンポ操作により、演奏開始時点のテンポ値が決定されるように構成してもよい。
また、上記第2実施例において、第1回目の演奏データに基づく自動演奏(第2回目の演奏)において、演奏開始の指示後、タップテンポ操作によりテンポをとり、そのテンポ変化を検出させるように構成してもよい。
また、上記実施例では、鍵盤22における音高に応じた鍵を楽曲のリズムに合わせて演奏するよう構成したが、鍵盤22のうちのいずれかの鍵が楽曲のリズムに合わせて押鍵されると、次の発音態様を予定して記憶した予定演奏データの音高情報に応じて各波形区間を発音するように構成してもよい。この場合、上記実施例と同様に、鍵盤22の押鍵時間と押鍵強さの各々、又は、その組み合わせに応じて、波形データの各波形区間を圧縮伸長して発音区間の発音長さを変化させるように、又は、音量を変化させるように構成すればよい。更に、楽曲のテンポを変化させるように押鍵された場合に、テンポ変化に応じて波形データの圧縮伸長を行うように構成してもよい。
また、上記実施例において、複数区間に分割された波形データを、予定演奏データに基づいた完全な手動演奏で再生して発音するか、あるいは、予定演奏データをそのまま自動演奏により再生するように構成したが、ユーザが操作子などを操作することにより、完全な手動演奏、上記のような任意の鍵にてリズムだけ入力する演奏、同じく上記のような演奏中のタップテンポでテンポだけ入力する演奏、及び自動演奏等の複数の演奏方法から、任意の演奏方法を選択し、任意に切り換えるように構成してもよい。
また、上記第2実施例において、押鍵の強弱又は音量に応じてテンポ制御するように構成してもよい。
また、上記第2実施例において、1拍における前半の半拍と後半の半拍との時間的割合を所定区間を越える範囲において観測し、観測された時間的割合がスイング割合に対応すると判断されると、現在のスイング割合に応じて更新した予定演奏データに基づいて、波形データを圧縮伸長するように構成してもよい。
また、上記第2実施例と同様の手法にて、移調などの調性変化をするよう構成してもよい。
また、上記第1から第4実施例と上記変形例を適宜組み合わせるように構成してもよい。