以下、本発明の好ましい実施例について、添付図面を参照して説明する。図1は、本発明の電子楽器1の電気的構成を示したブロック図である。
図1に示すように、電子楽器1には、CPU2(中央処理装置)と、ROM(リード・オンリー・メモリ)3と、RAM(ランダム・アクセス・メモリ)4と、操作パネル5と、MIDIインターフェース(I/F)6と、音源7と、D/A変換器8とが設けられており、これらはバスラインにより相互に接続されている。
また、MIDI I/F6には、外部に設けられたMIDI鍵盤20が接続されており、そのMIDI鍵盤20から、MIDI規格に適合した演奏情報が入力される。演奏情報には、所定の楽音の発音開始を指示するノートオン情報や、所定の楽音の発音停止を指示するノートオフ情報、所定の楽音の音高、所定の楽音の発音強さなどが含まれている。
また、音源7に接続されたD/A変換器8は、外部に設けられたアンプ21に接続されており、そのアンプ21は、スピーカ22に接続されている。音源7は、MIDI I/F6により入力された演奏情報に対応した楽音信号を生成するものであり、デジタルの楽音信号を出力する。そして、音源7から出力されたデジタル信号は、D/A変換器8によりアナログの楽音信号に変換され、そのアナログ信号がアンプ9に供給され、スピーカ11から楽音が発音される。
CPU2は、電子楽器1全体を制御する演算処理装置である。また、CPU2には、タイマ2aが設けられており、このタイマ2aに基づいてMIDI鍵盤20から入力された演奏情報の入力時刻が設定される。
ROM3には、CPU2により実行される各種の制御プログラムやその実行の際に参照される固定値データが記憶されている。本実施例では、図6〜図10に示すフローチャートを実行する制御プログラム3aや、図5に示す音高差と変化時間とを関連付けした変化時間算出テーブル3bなどが記憶されている。
RAM4は、ROM3等に記憶される制御プログラムの実行に当たって各種のデータ等を一時的に記憶するためのメモリであり、書き換え可能に構成されている。なお、RAM4には、テンポラリメモリ4aが設けられている。このテンポラリメモリ4aの詳細な説明については、図2を参照して後述する。
操作パネル5は、複数の操作子(ボタンやレバーなど)と、液晶ディスプレイなどの表示部とを有して構成されており、各パラメータの設定や、音源7に出力する楽音の編集などを行なうものである。なお、図示しないが、操作パネル5には、ポルタメントスイッチが設けられており、そのポルタメントスイッチは、電子楽器1においてポルタメント奏法に伴う処理を実行するか否かを選択するスイッチである。
ここで、図2を参照して、RAM4に設けられたテンポラリメモリ4aの詳細について説明する。図2は、RAM4のテンポラリメモリ4aの構成を示した図である。
テンポラリメモリ4aには、ノートAに関する情報を記憶するノートA記憶エリア4a1と、ノートAの次にMIDI鍵盤20より入力されたノートBに関する情報を記憶するノートB記憶エリア4a2と、モード1の状態を記憶するモード1記憶エリア4a3と、モード2の状態を記憶するモード2記憶エリア4a4と、カウンタの値(tの値)を記憶するカウンタ記憶エリア4a5とが設けられている。
ノートA,B記憶エリア4a1,4a2は、更に、MIDI鍵盤20からノートオン情報が入力された時刻が記憶される時刻記憶エリア(図2の時刻T1,T2)と、ノートオン情報を示すデータ(9H)とチャンネル番号を示すデータ(XH)とからなるステータス(9XH、Hは16進数を示す)が記憶されるステータス記憶エリア(図2のステータスS1,S2)と、入力されたノートオン情報に含まれるノートナンバにより示される音高が記憶される音高記憶エリア(図2の音高N1,N2)と、入力されたノートオン情報に含まれるベロシティが記憶されるベロシティ記憶エリア(図2のベロシティV1,V2)とを有しており、それぞれのノートA,Bに対応した値が記憶される。
なお、ステータス記憶エリアに記憶されるステータスは、ノートオフ情報を示すデータの場合には「8XH」となる。よって、音源7にノートオフ情報が出力された場合には、ステータスの値が「9XH」から「8XH」に書き換えられる。
モード1記憶エリア4a3は、後述する楽音設定処理(図10参照)により楽音が設定されるノートを示す値が記憶されており、本実施例では、ノートAかノートBに対応した値が記憶される。モード2記憶エリア4a4は、実行された処理が速弾き処理(図8参照)かポルタメント処理(図9参照)かを示す値が記憶されており、カウンタ記憶エリア4a5は、t(以後「カウンタt」と称す)の値が記憶されている。
次に、図3及び図4を参照して、電子楽器1において、速弾き時またはポルタメント時に設定される楽音について説明する。図3は、速弾き時のノートイベントの一例を示したグラフであり、図4は、ポルタメント時のノートイベントの一例を示したグラフである。図3(a)及び図4(a)は、ノートAの示す音高がノートBの示す音高より低い場合のグラフであり、図3(b)及び図4(b)は、ノートAの示す音高がノートBの示す音高より高い場合のグラフである。
ここで、ノートイベントとは、ノートオン情報およびノートオフ情報の総称であり、ノートオン情報は、発音の開始を指示する演奏情報であり、ノートオフ情報は、発音の停止を指示する演奏情報である。なお、ノートオン情報およびノートオフ情報は、音高を示すノート情報と、押鍵速度または離鍵速度を示すベロシティ情報とを含んでいる。
また、図3及び図4は、横軸を時間(単位:msec)とし、縦軸を音高(単位:半音)とし、各図の上段が入力ノートイベントを示し、各図の下段が出力ノートイベントを示している。さらに、各図において、ノートイベントは、音高の高さを示す実線と、その実線を囲む長方形とで図示されている。
また、ノートA又はノートBの音高が変更される変化時間は、変化時間Δtで示されており、その音高が変更される変化幅は、変化幅Δpで示されている。また、入力されたノートAのノートオン情報が示す音高とノートBのノートオン情報が示す音高差は、音高差Iで示されている。
まず、図3(a)を参照して、速弾き時にノートAの示す音高がノートBの示す音高より低い場合について説明する。
図3(a)上段(入力ノートイベント)に示すように、時刻t1にノートAのノートオン情報がMIDI鍵盤20より入力され、時刻t2にノートAのノートオフ情報がMIDI鍵盤20よりに入力されている。そして、時刻t3にノートBのノートオン情報がMIDI鍵盤20より入力され、時刻t5にノートBのノートオフ情報がMIDI鍵盤20より時刻t5に入力されている。
図3(a)下段(出力ノートイベント)に示すように、ノートAのノートオン情報が入力された時刻t1に、そのノートAのノートオン情報を音源7に出力し、ノートAのノートオフ情報が入力された時刻t2に、そのノートAのノートオフ情報を音源7に出力している。
即ち、速弾き時にノートAの示す音高がノートBの示す音高より低い場合において、ノートAのノートオン情報およびノートオフ情報は、入力された演奏情報をそのまま楽音7に出力していることになる。
また、ノートBのノートオン情報が入力された時刻t3に、そのノートBのノートオン情報が音源7に出力されるが、入力されたノートBのノートオン情報が示す音高より低い音高から発音開始を指示している。その後、時刻t4までの変化時間Δtの間は、低い音高からノートBのノートオン情報が示す音高に向かって徐々に高くなっている。後述するが、この時刻t3〜t4の間は、1msec毎に、所定量のピッチが変化するようなピッチベンドが音源7に出力される。
その後、時刻t4以降は、入力されたノートBのノートオン情報が示す音高で発音され、ノートBのノートオフ情報が入力された時刻t5に、そのノートBのノートオフ情報を音源7に出力している。
なお、速弾き判定時間とは、ノートAのノートオン情報が入力された時刻t1からノートBのノートオン情報が入力された時刻t3までの時間であり、本実施例では、時刻t1〜t3の時間間隔が、100msec以内であれば、速弾きと判断する。
また、助刻t3〜t4の間に変化する音高の変化幅Δp(=最大ベンド幅×音高差I/12)及び変化時間Δt(=Mt2/12×変化幅Δp)は、ROM3の変化時間算出テーブル3bを参照して算出される。なお、本実施例では、最大ベンド幅および最大変化時間Mt2は、予め定められており、最大ベンド幅は2半音であり、最大変化時間Mt2は100msecである。
次に、図3(b)を参照して、速弾き時にノートAの示す音高がノートBの示す音高より高い場合について説明する。なお、図3(b)において、ノートA,Bのノートオン情報およびノートオフ情報が入力される時刻t1,t2,t3,t5は、図3(a)と同様になるので、その詳細な説明は省略し、出力ノートイベント(図3(b)下段)の時刻t3〜t4の間のみ説明する。
図3(b)下段(出力ノートイベント)に示すように、ノートBのノートオン情報が入力された時刻t3に、そのノートBのノートオン情報が音源7に出力されるが、入力されたノートBのノートオン情報が示す音高より高い音高から発音開始が指示されている。その後、時刻t4までの変化時間Δtの間は、高い音高からノートBのノートオン情報が示す音高に向かって徐々に低くなっている。後述するが、この時刻t3〜t4の間は、1msec毎に、所定量のピッチが変化するようなピッチベンドが音源7に出力される。
以上、説明したように、速弾き時には、ノートBのノートオン情報が音源7に出力されると、そのノートBのノートオン情報に基づく楽音が、ノートAのノートオン情報が示す音高からノートBのノートオン情報が示す音高に向かって徐々に音高変化して発音するように指示が音源7に出力される。よって、ノートAのノートオン情報に基づく楽音からノートBのノートオン情報に基づく楽音への音のつながりが滑らかになる。
次に、図4(a)を参照して、ポルタメント時にノートAの示す音高がノートBの示す音高より低い場合について説明する。
図4(a)上段(入力ノートイベント)に示すように、時刻t1にノートAのノートオン情報がMIDI鍵盤20より入力され、時刻t2にノートAのノートオフ情報がMIDI鍵盤20より入力されている。また、ノートBのノートオン情報がMIDI鍵盤20より入力される時刻t3は、ノートAのノートオフ情報が入力される時刻t2より前となっている。その後、時刻t5にノートBのノートオフ情報がMIDI鍵盤20より入力されている。
なお、本実施例では、ノートAのノートオフ情報が入力される前に、ノートBのノートオン情報が入力される場合をレガート演奏と判断している。よって、図示および説明は省略するが、CPU2によって、レガート演奏であるか否かを判断する処理が、ノートオン情報およびノートオフ情報が入力される毎に実行されている。
なお、ノートAのノートオフ情報が入力される時刻t2と、ノートBのノートオン情報が入力される時刻t3とがほぼ同時刻である場合をレガート演奏であると判断するものとしても良いし、ノートAのノートオフ情報が入力された後、所定時間以内(例えば、50msec以内)に、ノートBのノートオン情報が入力された場合をレガート演奏と判断するものとしても良い。
図4(a)下段(出力ノートイベント)に示すように、ノートAのノートオン情報が入力された時刻t1に、そのノートAのノートオン情報が音源7に出力されている。そして、ノートAのノートオフ情報は、ノートAのノートオフ情報が入力される時刻t2より前に、ノートBのノートオン情報が入力された時刻t3に音源7に出力されている。
また、ノートBのノートオン情報が入力された時刻t3に、そのノートBのノートオン情報が音源7に出力されるが、入力されたノートBのノートオン情報が示す音高より低い音高から発音開始を指示している。その後、時刻t4までの変化時間Δtの間は、低い音高からノートBのノートオン情報が示す音高に向かって徐々に高くなっている。後述するが、この時刻t3〜t4の間は、1msec毎に、所定量のピッチが変化するようなピッチベンドが音源7に出力される。
その後、時刻t4以降は、入力されたノートBのノートオン情報が示す音高で発音され、ノートBのノートオフ情報が入力された時刻t5に、そのノートBのノートオフ情報を音源7に出力している。
また、助刻t3〜t4の間に変化する音高の変化幅Δp(=最大ベンド幅×音高差I/12)及び変化時間Δt(=Mt1/12×変化幅Δp)は、ROM3の変化時間算出テーブル3bを参照して算出される。なお、本実施例では、最大ベンド幅および最大変化時間Mt1は、予め定められており、最大ベンド幅は2半音であり、最大変化時間Mt1は150msecである。
次に、図4(b)を参照して、ポルタメント時にノートAの示す音高がノートBの示す音高より高い場合について説明する。なお、図4(b)において、ノートA,Bのノートオン情報およびノートオフ情報が入力される時刻t1,t2,t3,t5は、図4(a)と同様になるので、その詳細な説明は省略し、出力ノートイベント(図4(b)下段)の時刻t3〜t4の間のみ説明する。
図4(b)下段(出力ノートイベント)に示すように、ノートBのノートオン情報が入力された時刻t3から時刻t4までの変化時間Δtの間は、入力されたノートAのノートオン情報が示す音高から低い音高に向かって徐々に音高変化して発音する指示が音源7に出力されている。なお、後述するが、この時刻t3〜t4の間は、1msec毎に、所定量のピッチが変化するようなピッチベンドが音源7に出力される。
その後、時刻t4に、ノートBのノートオン情報が入力された時刻t3より遅れて、ノートオン情報が音源7に出力され、時刻t4〜t5の間は、入力されたノートBのノートオン情報が示す音高により発音がなさる。
以上、説明したように、ポルタメント時には、2つのノートオン情報に基づく楽音の発音が重なる、所謂レガート演奏である場合には、ノートBのノートオン情報が入力されたタイミング(時刻t3)で、ノートBのノートオン情報やノートAのノートオフ情報を音源7に出力し、発音の開始または停止を指示している。また、ノートA又はノートBに基づく楽音の音高変化は、ノートA又はノートBのノートオン情報が示す音高の高い方が変更され、徐々に音高変化している。よって、ノートAのノートオン情報に基づく楽音からノートBのノートオン情報に基づく楽音への音のつながりが滑らかになる。
次に、図5を参照して、ノートAのノートオン情報が示す音高とノートBのノートオン情報が示す音高との音高差Iと、最大変化時間Mt1,Mt2との関係について説明する。図5は、音高差Iと最大変化時間Mt1,Mt2との関係を示したグラフである。なお、図5は、ROM3の変化時間算出テーブル3bに記憶されているテーブルをグラフ化したものである。
また、図5は、横軸が音高差(単位:半音)であり、縦軸が最大変化時間(単位:msec)である。さらに、音高差Iの最大範囲は12半音までとし、それ以上の音高差は、全て12とする。
図5に示すように、最大変化時間Mt1,Mt2は、音高差Iに比例して大きな値となるよう設定され、ポルタメント時の最大変化時間Mt1と、速弾き時の最大変化時間Mt2との傾きが異なって設定されている。
これは、速弾き時は、ノートAのノートオン情報が入力される時刻と、ノートBのノートオン情報が入力される時刻との時間間隔が短いためであり、速弾き時に長い変化時間が設定されると、ノートBに基づく楽音の発音が短くなったり、全く発音されないなどの弊害が生じるからである。
また、音高差Iの最大範囲は12とされ、それ以上の音高差であっても12に設定されるので、音高差Iに基づいて算出される変化時間Δtが極端に長くなることを防止することができ、上記弊害の発生を防止することができる。
次に、図6〜図10を参照して、上述のように構成された電子楽器1で実行されるノートイベント入力処理について説明する。図6は、電子楽器1のCPU2において実行されるノートイベント入力処理を示したフローチャートである。なお、ノートイベント入力処理は、MIDI鍵盤20からノートオン情報またはノートオフ情報が入力される毎に実行される。
ノートイベント入力処理が実行されると、まず、MIDI鍵盤20から入力されたノートのステータスがオンであるか否か、即ち、MIDI鍵盤20から入力された演奏情報がノートオン情報であるか否かを判断し(S101)、入力された演奏情報がノートオン情報であれば(S101:Yes)、S102の処理へ移行し、入力された演奏情報がノートオフ情報であれば(S101:No)、S121の処理へ移行する。
S102の処理では、カウンタ記憶エリア4a5に記憶されているカウンタtの値が0であるか否かを判断する(S102)。カウンタtの値は、後述するが、ノートA又はノートBのノートオン情報に基づく楽音を設定し発音を指示した際に加算が開始されるので、カウンタtの値が0であるか否かを判断することで、新たに、ノートオン情報が入力されたか否かを判断することができる。
S102の処理で、カウンタtの値が0でなければ(S102:No)、新たなノートオン情報に対応した処理を行なうために初期値設定処理を実行し(S103)、カウンタtの値が0であれば(S102:Yes)、S103の処理を実行せずに、S104の処理へ移行する。
ここで、図7を参照して、初期値設定処理について説明する。図7は、ノートイベント入力処理内で実行される初期値設定処理を示したフローチャートである。この初期値設定処理は、新たなノートオン情報が入力された場合に、各変数を初期化する処理である。
初期値設定処理が実行されると、まず、ピッチ変化の値に初期値(値0)を設定し(S201)、そして、ピッチ変化の値が0に応じたピッチベンドを音源7に出力し(S202)、最後に、カウンタtの値に初期値(値0)を設定して(S204)、本処理を終了する。
図6に戻り、ノートイベント入力処理のS104以降の処理について説明する。
S104の処理では、ノートB記憶エリア4a2の時刻記憶エリア及びステータス記憶エリア、音高記憶エリア、ベロシティ記憶エリアに記憶されている時刻およびステータス、音高、ベロシティを、ノートA記憶エリア4a1の各記憶エリアに転記し(S104)、ノートB記憶エリア4a2に、ノートオン情報が入力された現在時刻、そのノートオン情報に含まれるステータス及び音高、ベロシティを、それぞれの記憶エリアに記憶する(S105)。具体的には、ノートオン情報が入力された現在時刻は、タイマー2aの値が時刻記憶エリアに記憶され、ノートオン情報に含まれる情報は、ステータス記憶エリア、音高記憶エリア、ベロシティ記憶エリアに記憶される。
次に、ノートA記憶エリア4a1の時刻記憶エリアに記憶されている現在時刻と、ノートB記憶エリア4a2の時刻記憶エリアに記憶されている現在時刻とに基づく、ノートAのノートオン情報が入力された時刻とノートBのノートオン情報が入力された時刻との時間差が、速弾き判定時間以下であるか否かを判断する(S106)。なお、本実施例では、速弾き判定時間は、100msecに設定されている。
S106の処理で、ノートAとノートBとの時間差が、速弾き判定時間以下であると判断されると(S106:Yes)、速弾き処理を実行し(S107)、本処理を終了する。
一方、S106の処理で、ノートA及びノートBのノートオン情報が入力された時間差が、速弾き判定時間より長いと判断されると(S106:No)、レガート演奏であるか否かを判断し(S108)、レガート演奏であれば(S108:Yes)、次に、操作パネル6のポルタメントスイッチ(図示せず)がオンされているか否かを判断する(S109)。
そして、レガート演奏であると判断され、且つ、ポルタメントスイッチがオンであった場合に(S108:Yes、S109:Yes)、ポルタメント処理を実行し(S110)、本処理を終了する。
なお、S108の処理においてレガート演奏であるか否かに応じて、ポルタメント処理を実行するか否かが選択されている。上述したように、レガート演奏であるか否かの判断は、ノートAのノートオフ情報が入力される時刻t2(図4参照)と、ノートBのノートオン情報が入力される時刻t3(図4参照)とにより判断されるので、MIDI鍵盤20の演奏を変更することで、任意にポルタメント処理を実行するか否かを選択することができる。さらに、操作パネル6にポルタメントスイッチを設けているので、演奏者の好みに応じた楽音の演奏を行なうこともできる。
一方、レガート演奏であると判断されたが、ポルタメントスイッチがオフであった場合には(S108:Yes、S109:No)、ポルタメント処理を実行する必要がないので、ノートAのノートオフ情報とノートBのノートオン情報とを音源7に出力して(S111)、本処理を終了する。
さらに、S108の処理で、レガート演奏でないと判断されると(S108:No)、ノートイベントがノートBのノートオンとなるので、入力されたノートBのノートオン情報を、そのまま音源7に出力して(S112)、本処理を終了する。
また、S101の処理で、入力された演奏情報がノートオフ情報であると判断されると(S101:No)、その入力された演奏情報がノートBに対するノートオフ情報であるか否かを判断し(S121)、ノートBに対するノートオフ情報でなければ(S121:No)、そのまま、本処理を終了する。
一方、S121の処理で、入力された演奏情報がノートBに対するノートオフ情報であれば(S121:Yes)、ノートAのステータス記憶エリアに記憶されるステータスが、オン(9XH)されているか否かを判断する(S122)。
S122の処理で、ノートAのステータス記憶エリアに記憶されているステータスがオン(9XH)であれば(S122:Yes)、ノートAに対する発音を停止するために、ノートAのノートオフ情報を音源7に出力し(S123)、ノートAのステータス記憶エリアに記憶されているステータスがオフ(8XH)であれば(S122:No)、既にノートAに対する発音が停止されているので、S123の処理を実行せずに、S124の処理へ移行する。
S124の処理では、ノートBのノートオフ情報を音源7に出力して(S124)、本処理を終了する。
次に、図8を参照して、速弾き処理について説明する。図8は、ノートイベント入力処理内で実行される速弾き処理を示したフローチャートである。
速弾き処理が実行されると、まず、変化時間Δtを算出する(S301)。変化時間Δtの算出は、図5に示す音高差Iと最大変化時間Mt2との関係から求めることができる。まず、ピッチの変化幅Δp(=最大ベンド幅×音高差I/12)を算出し、その後、変化時間Δt(=Mt2/12×変化幅Δp)を算出する。なお、ピッチの変化幅Δp及び変化時間Δtは、RAM4の所定エリアに記憶し、後述する楽音設定処理内で使用される。
S302の処理では、レガート演奏であるか否かを判断し(S302)、レガート演奏であれば(S302:Yes)、ノートBのノートオン情報を音源7に出力する前に、ノートAのノートオフ情報を音源7に出力するために、ノートA記憶エリア4a1のステータス記憶エリアに記憶されているステータスをオフ(8XH)に書き換え、ノートAのノートオフ情報を音源7に出力し(S303)、S304の処理へ移行する。
一方、S302の処理で、レガート演奏でないと判断されたら(S302:No)、速弾き処理では、既に、ノートAのノートオフ情報が音源7に出力されているので、S303の処理を実行せずに、S304の処理へ移行する。
S304の処理では、モード1記憶エリア4a3の値をノートBに対応した値に設定し(S304)、その後、モード2記憶エリア4a4の値を速弾きに対応した値に設定して(S305)、楽音設定処理の割込みを許可した後に(S306)、本処理を終了する。なお、S304の処理でモード1をノートBに設定しているのは、速弾き処理がノートBのノートオン情報に基づく楽音を設定するからである。
次に、図9を参照して、ポルタメント処理について説明する。図9は、ノートイベント入力処理内で実行されるポルタメント処理を示したフローチャートである。
ポルタメント処理が実行されると、まず、S301の処理と同様の方法により変化時間Δtを算出する(S401)。また、同様に、ピッチの変化幅Δp及び変化時間Δtは、RAM4の所定エリアに記憶し、後述する楽音設定処理内で使用される。
S402の処理では、ノートA記憶エリア4a1の音高記憶エリアと、ノートB記憶エリア4a2の音高記憶エリアとを参照して、ノートAのノートオン情報が示す音高が、ノートBのノートオン情報が示す音高より低いか否かを判断する(S402)。
S402の処理で、ノートAのノートオン情報が示す音高の方が低ければ(S402:Yes)、本実施例のポルタメント処理は音高の高いノートBのノートオン情報に基づく楽音を設定するので、ノートBのノートオン情報を音源7に出力する前に、ノートAのノートオン情報に基づく楽音の発音停止を指示するために、ノートA記憶エリア4a1のステータス記憶エリアをオフ(8XH)に書き換え、ノートAのノートオフ情報を音源7に出力する(S403)。
そして、ノートBのノートオン情報に基づく楽音を変更するので、モード1記憶エリア4a3をノートBに対応した値に設定し(S404)、S406の処理へ移行する。
一方、S402の処理で、ノートAのノートオン情報が示す音高の方が高ければ(S402:No)、本実施例のポルタメント処理は音高の高いノートAのノートオン情報に基づく楽音を設定するので、ノートA記憶エリア4a1のステータス記憶エリアをオフに書き換えることなく(即ち、オン(9XH)のまま)、モード1記憶エリア4a3をノートAに対応した値に設定し(S405)、S406の処理へ移行する。
S406の処理では、モード2記憶エリア4a4の値をポルタメントに対応した値に設定し(S305)、その後、楽音設定処理の割込みを許可して(S406)、本処理を終了する。
次に、図10を参照して、楽音設定処理について説明する。図10は、電子楽器1のCPU2において実行される楽音設定処理を示したフローチャートである。なお、楽音設定処理は、速弾き処理内のS306の処理およびポルタメント処理内のS407の処理において、割込みが許可された場合に1msec間隔で実行される割込処理である。
楽音設定処理が実行されると、モード1記憶エリア4a3に記憶されている情報がノートBで且つモード2記憶エリア4a4に記憶されている情報がポルタメントであるか否かを判断し(S501)、モード1記憶エリア4a3に記憶されている情報がノートAであるか、モード2記憶エリア4a4に記憶されている情報が速弾きであれば(S501:No)、S502の処理へ移行し、モード1記憶エリア4a3に記憶されている情報がノートBで且つモード2記憶エリア4a4に記憶されている情報がポルタメントであれば(S501:Yes)、S521の処理へ移行する。
S502の処理では、カウンタtの値が、S301の処理またはS401の処理で設定した変化時間Δt以下であるか否かを判断し(S502)、カウンタtの値が変化時間Δt以下であれば(S502:Yes)、楽音設定処理が実行されてから変化時間Δtを経過していないことになるので、S503の処理へ移行して、モード2記憶エリア4a4に記憶されている情報がポルタメントであるか否かを判断する(S503)。
S503の処理で、モード2記憶エリア4a4に記憶されている情報がポルタメントであれば(S503:Yes)、ピッチ変化率Pcをポルタメント時の最大変化時間Mt1に基づいて算出し(S504)、S506の処理へ移行する。本実施例では、ピッチ変化率Pcは、「12/Mt1」で算出される。
一方、S503の処理で、モード2記憶エリア4a4に記憶されている情報が速弾きであれば(S503:No)、ピッチ変化率Pcを速弾き時の最大変化時間Mt2に基づいて算出し(S505)、S506の処理へ移行する。本実施例では、ピッチ変化率Pcは、「12/Mt2」で算出される。
なお、S504及びS505の処理で設定されるピッチ変化率Pcは、音高差Iが12以下であれば、音高差Iに比例した値となり略一定となるので、S504及びS505の処理で一度ピッチ変化率が設定されたら、その後、S504及びS5050の処理を実行せずに、S506の処理へ移行するものとしても良い。
S506の処理では、ノートA,B記憶エリア4a1,4a2の音高記憶エリアの値を参照して、ノートAのノートオン情報の示す音高が、ノートBのノートオン情報の示す音高より低いか否かを判断し(S506)、ノートAのノートオン情報の示す音高の方が低ければ(S506:Yes)、ノートBのノートオン情報に基づく楽音の音高を徐々に高くする場合となるので、ピッチ変化率Pcにカウンタtの値を乗算した値から、S301又はS401の処理で記憶された変化幅Δpを減算してピッチ変化を算出して(S507)、S509の処理へ移行する。
一方、S506の処理で、ノートAのノートオン情報の示す音高の方が高ければ(S506:No)、ノートBのノートオン情報に基づく楽音の音高を徐々に低くする場合となるので、ピッチ変化率−Pcにカウンタtの値を乗算した値に、S301又はS401の処理で記憶された変化幅Δpを加算してピッチ変化を算出して(S508)、S509の処理へ移行する。
なお、本実施例では、楽音設定処理は、1msec毎の割込み処理で実行されているので、S507及びS508の処理では、1msec毎のピッチ変化を算出していることになる。また、楽音設定処理の実行が初回であれば、tの値が0であるので、ピッチ変化の値も0となる。
S509の処理では、S507及びS508の処理で算出したピッチ変化に応じたピッチベンドを音源7に出力し(S509)、次に、カウンタtの値が0であるか否かを判断する(S510)。
S510の処理で、カウンタtの値が0であれば(S510:Yes)、楽音設定処理の実行が初回となり、楽音の発音開始指示をしていないことになるので、ノートBのノートオン情報を音源7に出力し(S511)、カウンタtの値が0でなければ(S510:No)、既に、ノートBのノートオン情報が音源7に出力されていることになるので、S511の処理を実行せずに、S512の処理へしてカウンタtの値に1を加算し(S512)、本処理を終了する。
ここで、楽音設定処理が1msec毎に実行されるので、カウンタtの値が1大きくなると、前の状態から1msec経過したこととなる。即ち、上述したS502の処理では、カウンタtの値が、ノートBの楽音を変更開始してからの経過時間である。
一方、S502の処理で、カウンタtの値が変化時間Δtを越えていれば(S502:Yes)、楽音設定処理が実行されてから変化時間Δtを経過していることになるので、楽音設定処理の実行を停止するために、楽音設定処理の割込みを禁止し(S513)、本処理を終了する。S513の処理で、楽音設定処理の割込みが禁止されると、次に、楽音設定処理の割込みが許可されるまで、楽音設定処理の実行が禁止される。
次に、S521以降の処理について説明する。S521の処理では、カウンタtの値が変化時間Δt以下であるか否かを判断し(S521)、カウンタtの値が変化時間Δt以下であれば(S502:Yes)、楽音設定処理が実行されてから変化時間Δtを経過していないことになるので、S522の処理へ移行する。
S522の処理では、本実施例においてモード1記憶エリア4a3に記憶されている情報がノートBで且つモード2記憶エリア4a4に記憶されている状態がポルタメントなので、ピッチ変化率Pcをポルタメント時の最大変化時間Mt1に基づいて算出して(S522)、S523の処理へ移行する。本実施例では、ピッチ変化率Pcは、「12/Mt1」で算出される。
S523の処理では、ノートAのノートオン情報に基づく楽音の音高を徐々に低くする場合となるので、ピッチ変化率−Pcにカウンタtの値を乗算した値に、S301又はS401の処理で記憶された変化幅Δpを加算してピッチ変化を算出する(S523)。
S523の処理で、ピッチ変化が算出されると、その算出したピッチ変化に応じたピッチベンドを音源7に出力し(S524)、S512の処理へ移行してカウンタtの値に1を加算し(S512)、本処理を終了する。
一方、S521の処理で、カウンタtの値が変化時間Δtを越えていれば(S521:No)、ノートAのノートオン情報に基づく楽音を設定する変化時間Δtが経過したことになるので、ノートA記憶エリア4a1のステータス記憶エリアがオン(9XH)であるか否かを判断し(S525)、ノートA記憶エリア4a1のステータス記憶エリアがオンであれば(S525:Yes)、変化時間Δtが経過した場合はノートAの発音停止タイミングでありノートBの発音開始タイミングであるので、ノートA記憶エリア4a1のステータス記憶エリアをオフ(8XH)に書き換え、ノートAのノートオフ情報を音源7に出力すると共に(S526)、ノートBのノートオン情報を音源7に出力して(S527)、S528の処理へ移行する。
一方、S525の処理で、ノートA記憶エリア4a1のステータス記憶エリアがオフ(8XH)であれば(S525:No)、既に、S526及びS527の処理は実行されたことになるので、S526及びS527の処理を実行せずに、S528の処理へ移行する。
S528の処理では、楽音設定処理が実行されてから変化時間Δtを経過していることになるので、楽音設定処理の実行を停止するために、楽音設定処理の割込みを禁止して(S528)、本処理を終了する。
以上、説明したように、ポルタメント時の楽音設定処理では、ノートBのノートオン情報が入力された場合に、そのノートBのノートオン情報の示す音高が、ノートAのノートオン情報の示す音高より高い場合には、変化時間Δtの間、ノートBのノートオン情報が示す音高より低い音高から徐々に音高の高い方へ音高変化する指示が音源7に出力される。一方、ノートAのノートオン情報の示す音高の方が高い場合には、変化時間Δtの間、ノートAのノートオン情報の示す音高から徐々に低い音高に向かって音高変化する指示が音源7に出力される。よって、スピーカ22からは、ノートAのノートオン情報に基づく楽音と、ノートBのノートオン情報に基づく楽音とのつながりが滑らかに発音される。
ここで、一般的に、管楽器は、喉の開き具合や唇の閉め具合などを調整して、音高を連続的に滑らかに変化させる。この音高の変化は、高い音高から低い音高へ変化する場合には喉の開き具合や唇の閉め具合の調整は困難でないが、反対に、低い音高から高い音高へ変化する場合には喉の開き具合や唇の閉め具合の調整が困難となる。そのため、電子楽器において、喉の開き具合や唇の閉め具合を含む管楽器の演奏を忠実に行なおうとした場合、演奏者は操作パネルの操作子などを複雑に操作しなければならないので、熟練した奏者でなければ、管楽器の演奏を忠実に行なうことが困難であった。
しかし、ポルタメント時の楽音設定処理によれば、ノートAのノートオン情報の示す音高と、ノートBのノートオン情報の示す音高とを比較し、変化時間Δtの間、ノートオン情報の示す音高が高い方の楽音を、徐々に音高変化させて発音するので、管楽器の演奏を模擬した楽音を発音する場合に、より忠実に模擬した演奏を行なうことができる。従って、演奏者は、MIDI鍵盤20を操作するだけで、楽器固有の特定に応じた演奏を複雑な操作をすることなく演奏することができる。
また、ノートAのノートオン情報が入力される時刻と、ノートBのノートオン情報が入力される時刻との間が100msec以内であれば、速弾き時の楽音設定処理が実行され、ノートBのノートオン情報に基づく楽音が変化時間Δtのあいだ徐々に音高変化して発音する指示が音源7に出力されるので、ノートAのノートオン情報に基づく楽音の発音と、ノートBのノートオン情報に基づく楽音の発音とのつながりが滑らかになる。よって、演奏者によってMIDI鍵盤20が速弾きされ、管楽器が速弾きされた場合の演奏であっても、より忠実に模擬した演奏を行なうことができる。
以上、各実施形態に基づき本発明を説明したが、本発明は上述した実施形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変更が可能であることは容易に推察できるものである。
例えば、上記各実施形態では、電子楽器1に設けられた音源7にノートオン情報およびノートオフ情報とを出力する構成としたが、電子楽器1に音源7を設けずに外部に設けられた音源にノートオン情報およびノートオフ情報を出力する構成としても良い。さらに、電子楽器1に鍵盤を設け、ノートオン情報およびノートオフ情報を電子楽器1で生成するものとしても良い。
ここで、本実施形態において、請求項1の音高判断手段としては図9のS402の処理および図10のS506の処理が該当し、請求項1の第1指示手段としては図10のS509及びS524の処理が該当し、請求項2記載のレガート演奏判断手段としては図6のS108の処理が該当し、請求項3の音高判断手段としては図10のS506の処理が該当し、請求項3の時間間隔判断手段としては図6のS106の処理が該当し、請求項3記載の第2指示手段としては図10のS509の処理が該当し、請求項4の設定手段としては図8のS301の処理および図9のS401の処理が該当する。