(57)【特許請求の範囲】
【請求項１】
同期クロック信号を受信する毎にインクリメントし、音楽的長さに対応する数を計数すると初期化する計数値を生成する計数値生成手段と、
所定時間毎に、前記計数値生成手段により生成された計数値と、前記同期クロック信号の受信間隔時間に対する、最新の同期クロック信号受信から前記所定時間毎のタイミングの次回タイミングまでの時間の割合とに基づき、前記次回タイミングにおける計数推測値を演算する計数推測値演算手段と、
前記計数推測値演算手段により演算された計数推測値に対応するＬＦＯ波形の位相を演算する位相演算手段と、
前記位相演算手段により演算された位相に対応するＬＦＯ波形のレベルを演算するレベル演算手段と、
前記ＬＦＯ波形に演算するエンベロープ波形を生成するエンベロープ波形生成手段と、
前記レベル演算手段により演算されたＬＦＯ波形のレベルに前記エンベロープ波形生成手段により生成されたエンベロープ波形のレベルを演算して、前記次回タイミングにおける波形レベルの目標値を生成する目標値生成手段と、
波形レベルが前記次回タイミングに前記目標値生成手段により生成された目標値に到達するように波形を生成する波形生成手段と、
前記波形生成手段により生成された波形に基づき楽音を制御する楽音制御手段と
を有する電子楽器の楽音制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、電子楽器の楽音制御装置に関し、さらに詳細には、ＬＦＯ波形などの楽音を制御するための信号（以下、適宜に「楽音制御信号」と称する。）の周期を自動演奏のテンポと同期させて、楽音制御信号の周期を自動演奏される楽曲の音符や拍や小節の周期と同期させるようにし、こうした楽音制御信号を用いて楽音を制御する電子楽器の楽音制御装置に関する。
【０００２】
【従来の技術】
一般に、電子楽器の分野においては、楽音を制御するための信号、即ち、楽音制御信号として、ＬＦＯ波形などを用いて楽音を制御することが行われている。
【０００３】
そして、ＬＦＯ波形などの楽音制御信号の周期を自動演奏のテンポと同期させ、楽音制御信号の周期を自動演奏される楽曲の音符や拍や小節の周期と同期させるようにした電子楽器の楽音制御装置としては、例えば、特公昭５５−１５８８号公報に開示されたような電子楽器の楽音制御装置が知られている。
【０００４】
この特公昭５５−１５８８号公報に開示されたような電子楽器の楽音制御装置においては、テンポ・クロックを分周し、その分周出力を利用して楽音制御信号を発生したり、あるいは、テンポ・クロックをカウントし、そのカウント値に応じた電圧（この電圧は、楽音制御信号のサンプル値になるように設定する。）を設けておいて、選択回路で順次選択することにより任意の階段状の楽音制御信号を得るようになされている。
【０００５】
また、こうした方法とは別に、テンポ・クロックの間隔を計測して、その計測結果に基づき楽音制御信号の周期を定める処理により楽音制御信号の波形を生成することにより、楽音制御信号の周期を自動演奏のテンポと同期させ、楽音制御信号の周期を自動演奏される楽曲の音符や拍や小節のタイミングに同期させるようにする方法も知られている。
【０００６】
しかしながら、上記したようなテンポ・クロックを分周することにより楽音制御信号を生成する方法では生成できる楽音制御信号の波形は限定されたものとなるという問題点があった。
【０００７】
また、上記したテンポ・クロックをカウントし、そのカウント値に応じた電圧を設けておいて、選択回路で順次選択することにより任意の階段状の楽音制御信号を得る方法では、テンポ・クロックをカウントするという回路の制限をうけて、テンポ・クロックのタイミングでしか楽音制御信号が変化せず、滑らかな波形を生成することができないという問題点があった。
【０００８】
また、テンポ・クロックの間隔を測定してその計測結果に基づいて楽音制御信号の周期を定める処理によって楽音制御信号の波形を生成する方法では、計測誤差が発生してまい、正しい周期の波形を得ることができず、楽音制御信号の周期と自動演奏される楽曲の音符や拍や小節の周期とが同期しなくなるという問題点があった。
【０００９】
即ち、この誤差は、累積されていくので、例えば、シーケンサーにより一曲通して自動演奏を行うと、その曲の最後の方では上記した誤差が大きくなり、いったん楽音制御信号と自動演奏される楽曲の音符や拍や小節に同期して初期化しても、曲の最後の方では楽音制御信号と自動演奏される楽曲の音符や拍や小節のタイミングとが同期しなくなるという問題点があった（図１参照）。
【００１０】
【発明が解決しようとする課題】
本発明は、上記したような従来の技術の有する種々の問題点に鑑みてなされたものであり、その目的とするところは、楽音を制御するための信号の周期とテンポ・クロックなどの同期クロックに従って自動演奏される楽曲の音符や拍や小節の周期とを同期させることができるようにした電子楽器の楽音制御装置を提供しようとするものである。
【００１１】
【課題を解決するための手段】
上記目的を達成するために、本発明のうち請求項１に記載の発明は、同期クロック信号を受信する毎にインクリメントし、音楽的長さに対応する数を計数すると初期化する計数値を生成する計数値生成手段と、所定時間毎に、上記計数値生成手段により生成された計数値と、上記同期クロック信号の受信間隔時間に対する、最新の同期クロック信号受信から上記所定時間毎のタイミングの次回タイミングまでの時間の割合とに基づき、上記次回タイミングにおける計数推測値を演算する計数推測値演算手段と、上記計数推測値演算手段により演算された計数推測値に対応するＬＦＯ波形の位相を演算する位相演算手段と、上記位相演算手段により演算された位相に対応するＬＦＯ波形のレベルを演算するレベル演算手段と、上記ＬＦＯ波形に演算するエンベロープ波形を生成するエンベロープ波形生成手段と、上記レベル演算手段により演算されたＬＦＯ波形のレベルに上記エンベロープ波形生成手段により生成されたエンベロープ波形のレベルを演算して、上記次回タイミングにおける波形レベルの目標値を生成する目標値生成手段と、波形レベルが上記次回タイミングに上記目標値生成手段により生成された目標値に到達するように波形を生成する波形生成手段と、上記波形生成手段により生成された波形に基づき楽音を制御する楽音制御手段とを有するようにしたものである。
【００１３】
ここで、上記した「同期クロック信号」は「発明の実施の形態」の項におけるテンポ・クロックたる「ＴｉｍｉｎｇＣｌｏｃｋ（タイミング・クロック）」に対応する。
【００２１】
【発明の実施の形態】
以下、添付の図面を参照しながら、本発明による電子楽器の楽音制御装置の実施の形態の一例を詳細に説明する。
【００２２】
図２には、本発明による電子楽器の楽音制御装置を備えた電子楽器のブロック構成図が示されており、この電子楽器は、その全体の動作の制御を中央処理装置（ＣＰＵ）１０を用いて制御するように構成されている。
【００２３】
そして、この電子楽器は、全体の動作の制御のための所定のプログラムや音色パラメータ（本発明の実施に関連する音色パラメータとしては、ＬＦＯ波形の深さを「０〜１」の範囲で設定するＬＦＯＤｅｐｔｈ（ＬＦＯ深さ）が設けられている。）などが格納されたリード・オンリ・メモリー（ＲＯＭ）１２と、ＣＰＵ１０によるプログラムの実行に必要な各種レジスタ群やフラグなどが設定されたワーキング・エリアとしてのランダム・アクセス・メモリー（ＲＡＭ）１４と、この電子楽器に電源が投入されてからの経過時間を計数するとともに、１０ｍｓｅｃ毎の時間間隔でＣＰＵ１０にタイマー割り込みをかけるためのタイマー１６と、演奏者の押鍵操作に応じて押鍵信号を生成するとともに演奏者の離鍵操作に応じて離鍵信号を生成して後述する波形再生装置２４へ出力する鍵盤装置２０と、波形データが記憶されている波形メモリー２２と、波形メモリー２２に記憶された波形データを再生して楽音信号として後述する振幅制御装置２６に出力する波形再生装置２４と、ＣＰＵ１０から出力される後述するレジスタＮｅｘｔＬｅｖｅｌ（ネクスト・レベル）に記憶された値に応じて波形再生装置２４から出力された楽音信号に対してＬＦＯ波形（振幅ＬＦＯ）およびエンベロープ波形（振幅エンベロープ）を付与して後述するデジタル／アナログ変換器（Ｄ／Ａ）に出力する振幅制御装置２６と、振幅制御装置２６から出力された楽音信号たるデジタル信号を入力してアナログ信号に変換して後述するスピーカー３０に出力するデジタル／アナログ変換器（Ｄ／Ａ）２８と、Ｄ／Ａ２８から出力されたアナログ信号の楽音信号を楽音として空間に放音するスピーカー３０とを有している。
【００２４】
また、この電子楽器には、シーケンサー１８が接続されており、シーケンサー１８は演奏者の設定したテンポ（Ｔｅｍｐｏ）を記憶し、通常の自動演奏を行う他に、ＣＰＵ１０へ後述するクロック信号を出力するようになされている。
【００２５】
なお、シーケンサー１８には音源（図示せず）が接続されており、シーケンサー１８による後述するＴｉｍｉｎｇＣｌｏｃｋに従った自動演奏に合わせて、演奏者は鍵盤装置２０を用いて演奏することができる。
【００２６】
ここで、シーケンサー１８に記憶されるテンポとは、ＢＰＭ（Ｂｅａｔ  Ｐｅｒ  Ｍｉｎｕｔｅｓ：ビート・パー・ミニッツ）、即ち、１分あたりの拍の数で設定されるものである。
【００２７】
また、シーケンサー１８からＣＰＵ１０に出力されるクロック信号としては、ＰｌａｙＳｔａｒｔ（プレイ・スタート）とＴｉｍｉｎｇＣｌｏｃｋ（タイミング・クロック）との２つの種類がある。
【００２８】
ＰｌａｙＳｔａｒｔ（プレイ・スタート）は、演奏者が所定の操作子（図示せず）を操作することによる自動演奏の演奏開始操作に応じて出力される開始信号である。
【００２９】
一方、ＴｉｍｉｎｇＣｌｏｃｋ（タイミング・クロック）は、演奏者によって設定されたテンポに従って順次出力されるものであって、四分音符１個につき２４回の割合で出力されるクロック信号である。
【００３０】
そして、テンポ・クロックたるＴｉｍｉｎｇＣｌｏｃｋに従ってシーケンサー１８による自動演奏が行われるものである。
【００３１】
従って、拍子が四分の四拍子の場合には、ＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃ（ｍｓｅｃ：ミリ秒）は、次の数式１を用いて求められるものである。
【００３２】
Ｔｃ＝（６０×１０００／Ｔｅｍｐｏ）／２４・・・数式１
例えば、テンポが１２５ＢＰＭの場合、即ち、「Ｔｅｍｐｏ＝１２５（ＢＰＭ）」の場合には、上記した数式１は、
Ｔｃ＝（６０×１０００／１２５）／２４
と代入されて、ＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃは２０ｍｓｅｃとなる。
【００３３】
また、テンポが２５０ＢＰＭの場合には、即ち、「Ｔｅｍｐｏ＝２５０（ＢＰＭ）」の場合には、上記した数式１は、
Ｔｃ＝（６０×１０００／２５０）／２４
と代入されて、ＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃは１０ｍｓｅｃとなる。
【００３４】
つまり、テンポが早くなるとＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃが短くなり、逆に、テンポが遅くなるとＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃが長くなる。
【００３５】
なお、この実施の形態においては、演奏者はテンポの設定を任意に変更することができるようになされているものであるが、新たに設定されたテンポは、変更後に初めてＴｉｍｉｎｇＣｌｏｃｋを出力したときから、ＴｉｍｉｎｇＣｌｏｃｋを出力する間隔Ｔｃに反映されるものである。
【００３６】
即ち、演奏者によってテンポの変更が行われた場合のＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃについては、演奏者によるテンポの変更後の最初のＴｉｍｉｎｇＣｌｏｃｋが出力されてから、当該ＴｉｍｉｎｇＣｌｏｃｋの次のＴｉｍｉｎｇＣｌｏｃｋが出力されるまでの間隔Ｔｃ以降の間隔Ｔｃに対して、変更されたテンポが反映されることになる。
【００３７】
例えば、図３に示すように演奏者によってテンポが１２５ＢＰＭから２５０ＢＰＭに変更された場合には、演奏者によるテンポの変更後の最初のＴｉｍｉｎｇＣｌｏｃｋが出力されてから、当該最初のＴｉｍｉｎｇＣｌｏｃｋの次のＴｉｍｉｎｇＣｌｏｃｋが出力されるまでの間隔Ｔｃ以降の間隔Ｔｃに対して、変更されたテンポが反映されて間隔Ｔｃは１０ｍｓｅｃとなる。一方、それ以前の間隔Ｔｃは、１２５ＢＰＭのテンポに応じて２０ｍｓｅｃとなる。
【００３８】
なお、この実施の形態においては、テンポの取り得る範囲は「２０ＢＰＭ〜２５０ＢＰＭ」とされており、拍子は四分の四拍子に固定されているものとする。
【００３９】
ここで、上記した各構成要素を適宜に説明すると、上記したようにタイマー１６は、この電子楽器に電源が投入されてからの経過時間を計数しているものであり、ＣＰＵ１０は、このタイマー１６の示す現在時刻をいつでも読み出すことができるようになされている。
【００４０】
次に、波形再生装置２４は、鍵盤装置２０から出力された押鍵信号が入力されたときには、波形メモリー２２に記憶された波形データの再生を開始し、波形データを再生して得られた楽音信号を振幅制御装置２６に出力するものである。
【００４１】
また、波形再生装置２４は、鍵盤装置２０から出力された離鍵信号が入力されたときには、波形メモリー２２に記憶された波形データの再生を停止し、これにより楽音信号が振幅制御装置２６へ出力されなくなる。
【００４２】
そして、振幅制御装置２６は、波形再生装置２４から出力された楽音信号を入力し、当該楽音信号にＬＦＯ波形（振幅ＬＦＯ）およびエンベロープ波形（振幅エンベロープ）を付与し、当該ＬＦＯ波形およびエンベロープ波形が付与された楽音信号をＤ／Ａ２８に出力するものである。
【００４３】
ここで、楽音信号に付与されるＬＦＯ波形の波高値は、１０ｍｓｅｃ間隔でＣＰＵ１０から出力されて振幅制御装置２６に入力されるレジスタＮｅｘｔＬｅｖｅｌの値に応じたものである。
【００４４】
即ち、このレジスタＮｅｘｔＬｅｖｅｌの値は、ＬＦＯ波形のエンベロープ波形とを演算した波形の波高値の１０ｍｓｅｃ後に到達すべき目標値を示すものであり、振幅制御装置２６は、前述の演算した波形の現在の波高値を、入力されたレジスタＮｅｘｔＬｅｖｅｌの値によって指定される波高値まで滑らかに変化させて補間するものであり、補間器としての機能を有している。
【００４５】
図４（ａ）には、１０ｍｓｅｃ間隔でＣＰＵ１０から出力されて振幅制御装置２６に入力されるレジスタＮｅｘｔＬｅｖｅｌの値の一例が示されており、図４（ｂ）には、図４（ａ）に示すレジスタＮｅｘｔＬｅｖｅｌの値から得られる補間された波形の現在の波高値が示されている。
【００４６】
即ち、例えば、図４（ａ）に示すように、振幅制御装置２６には時間ｔ１にＮｅｘｔＬｅｖｅｌ▲１▼が入力され、時間ｔ１の１０ｍｓｅｃ後の時間ｔ２にＮｅｘｔＬｅｖｅｌ▲２▼が入力されるものとする。
【００４７】
そうすると、図４（ｂ）に示すように、振幅制御装置２６は、時間ｔ１の１０ｍｓｅｃ後の時間ｔ２に、波形の現在の波高値が時間ｔ１におけるレジスタＮｅｘｔＬｅｖｅｌの値たるＮｅｘｔＬｅｖｅｌ▲１▼に到達するように波形の現在の波高値を補間して、時間ｔ２における波形の現在の波高値たるＣｕｒＬｅｖｅｌ▲１▼は、時間ｔ１におけるレジスタＮｅｘｔＬｅｖｅｌの値たるＮｅｘｔＬｅｖｅｌ▲１▼に等しくなり、また、時間ｔ２の１０ｍｓｅｃ後の時間ｔ３に、波形の現在の波高値が時間ｔ２におけるレジスタＮｅｘｔＬｅｖｅｌの値たるＮｅｘｔＬｅｖｅｌ▲２▼に到達するように波形の現在の波高値を補間して、時間ｔ３における波形の現在の波高値たるＣｕｒＬｅｖｅｌ▲２▼は、時間ｔ２におけるレジスタＮｅｘｔＬｅｖｅｌの値たるＮｅｘｔＬｅｖｅｌ▲２▼に等しくなるものである。
【００４８】
なお、図４から明らかなように、振幅制御装置２６による補間は、レジスタＮｅｘｔＬｅｖｅｌの入力１０ｍｓｅｃよりも短い間隔で行われる。
【００４９】
こうして、レジスタＮｅｘｔＬｅｖｅｌの値に基づいて振幅制御装置２６が補間した現在の波高値を備えた波形が、波形再生装置２４から出力された楽音信号に付与されることによって、具体的には、当該波形の現在の波高値を楽音信号に乗ずることによって、当該波形に応じて楽音信号の波形の振幅が変化し、当該振幅変化を施こされた楽音信号がＤ／Ａ２８に出力されることになる。
【００５０】
従って、振幅制御装置２６は、ＣＰＵ１０から１０ｍｓｅｃ間隔で定期的にレジスタＮｅｘｔＬｅｖｅｌの値を入力することによって波形を補間し、任意の形状の振幅変化を楽音信号の波形に与えることが可能となるものである。
【００５１】
なお、この実施の形態においては、振幅制御装置２６には、エンベロープ波形とＬＦＯ波形が演算された波形がレジスタＮｅｘｔＬｅｖｅｌとして入力されるものである。従って、振幅制御装置２６によっては、結果としてＬＦＯ波形とともにエンベロープ波形の補間も行なわれることになり、こうして補間されたＬＦＯ波形およびエンベロープ波形、即ち、ＬＦＯ波形とエンベロープ波形との演算結果が楽音信号に付与されるものである。
【００５２】
ここで、振幅制御装置２６によって楽音信号に付与されるＬＦＯ波形は、本実施の形態においては、設定されたテンポに応じて１周期の長さが四分音符１個の長さと等しくなような三角波であり（図５参照）、図６にはＬＦＯ波形の位相が示されている。
【００５３】
上記したようにＴｉｍｉｎｇＣｌｏｃｋは、シーケンサー１８からテンポに応じた間隔Ｔｃで四分音符１個につき２４個出力され、また、ＬＦＯ波形の１周期の長さが四分音符１個の長さと等しいことから、ｎ番目（「ｎ」は１以上２４以下の整数である。）のＴｉｍｉｎｇＣｌｏｃｋがＣＰＵ１０に入力された時のＬＦＯ波形の位相Ｐは、次の数式２を用いて求められるものである。
【００５４】
Ｐ＝ｎ／２４・・・数式２
なお、位相Ｐの範囲は、「０〜１」とする。
【００５５】
従って、ｎ番目のＴｉｍｉｎｇＣｌｏｃｋがＣＰＵ１０に入力されてからの経過時間をｔとし、ＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃが一定、即ち、テンポに変化がなく一定とすると、ｎ番目のＴｉｍｉｎｇＣｌｏｃｋがＣＰＵ１０に入力されてから、ｎ＋１番目のＴｉｍｉｎｇＣｌｏｃｋがＣＰＵ１０に入力されるまでの間のＬＦＯ波形の位相Ｐ’は、次の数式３を用いて求められる。
【００５６】
Ｐ’＝（ｎ＋ｔ／Ｔｃ）／２４・・・数式３
また、上記したようにＲＡＭ１４には、ＣＰＵ１０によるプログラムの実行に必要な各種レジスタ群（上記したレジスタＮｅｘｔＬｅｖｅｌなどを含む）やフラグなどが設定されており、後述するクロック信号受信処理ルーチンあるいは定期サービス処理ルーチンにおいて用いられるレジスタとしては、以下に示すものがある。
【００５７】
なお、本明細書においては、各レジスタの内容（データなど）は、特に断らない限り、同一のラベル名で示すものとする。
【００５８】
（１）ＣｕｒＴｉｍｅＣ（カレント・タイム・シー）
後述するクロック信号受信処理ルーチンにおいて処理中のＴｉｍｉｎｇＣｌｏｃｋが、シーケンサー１８から出力されてＣＰＵ１０に入力されたときの現在時刻をタイマー１６から読み出して記憶するレジスタであり、電源投入時に「０」に初期化される。後述するクロック信号受信処理ルーチンにおいてのみ用いられる。
【００５９】
（２）ＰｒｅｖＴｉｍｅＣ（プリビアス・タイム・シー）
後述するクロック信号受信処理ルーチンにおいて、レジスタＣｕｒＴｉｍｅＣの値、即ち、現在時刻を記憶するレジスタであり、電源投入時に「０」に初期化される。後述するクロック信号受信処理ルーチンならびに定期サービス処理ルーチンにおいて用いられる。
【００６０】
（３）ＩｎｔｅｒｖａｌＣ（インターバル・シー）
レジスタＣｕｒＴｉｍｅＣの値とレジスタＰｒｅｖＴｉｍｅＣの値との差分値、即ち、ＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃを記憶するレジスタであり、電源投入時に「０」に初期化される。後述するクロック信号受信処理ルーチンならびに定期サービス処理ルーチンにおいて用いられる。
【００６１】
（４）ＣｏｕｎｔｅｒＣ（カウンター・シー）
シーケンサー１８から出力されてＣＰＵ１０に入力されるＴｉｍｉｎｇＣｌｏｃｋの順番、即ち、ＬＦＯ波形の１周期において２４個出力されるＴｉｍｉｎｇＣｌｏｃｋのうちの何番目であるかを記憶するレジスタであり、電源投入時に「０」に初期化される。後述するクロック信号受信処理ルーチンならびに定期サービス処理ルーチンにおいて用いられる。
【００６２】
（５）ＣｕｒＴｉｍｅＬ（カレント・タイム・エル）
後述する定期サービス処理ルーチンにおいて、当該定期サービス処理ルーチンが起動されたときの現在時刻をタイマー１６から読み出して記憶するレジスタであり、電源投入時に「０」に初期化される。後述する定期サービス処理ルーチンにおいてのみ用いられる。
【００６３】
（６）ＩｎｔｅｒｖａｌＬ（インターバル・エル）
レジスタＣｕｒＴｉｍｅＬの値とレジスタＰｒｅｖＴｉｍｅＣとの差分値、即ち、後述するクロック信号受信処理ルーチンにおいて処理中のＴｉｍｉｎｇＣｌｏｃｋがＣＰＵ１０に入力されてから後述する定期サービス処理ルーチンが起動されるまでの間の経過時間、具体的には、最後にＴｉｍｉｎｇＣｌｏｃｋが入力されてから後述する定期サービス処理ルーチンが起動されるまでの間の経過時間を記憶するレジスタであり、電源投入時に「０」に初期化される。後述する定期サービス処理ルーチンにおいてのみ用いられる。
【００６４】
（７）ＰｈａｓｅＬ（フェイズ・エル）
後述する定期サービス処理ルーチンにおいて、後述する数式４により求められた当該定期サービス処理ルーチンが起動されたときから１０ｍｓｅｃ後に到達するＬＦＯ波形の位相を記憶するレジスタであり、電源投入時に「０」に初期化される。後述する定期サービス処理ルーチンにおいてのみ用いられる。
【００６５】
（８）ＮｅｘｔＬｅｖｅｌＬ（ネクスト・レベル・エル）
後述する定期サービス処理ルーチンにおいて、生成されたＬＦＯ波形を記憶するレジスタであり、電源投入時に「０」に初期化される。後述する定期サービス処理ルーチンにおいてのみ用いられる。
【００６６】
（９）ＮｅｘｔＬｅｖｅｌ（ネクスト・レベル）
後述する定期サービス処理ルーチンにおいて、当該定期サービス処理ルーチンが起動されたときから１０ｍｓｅｃ後に到達するＬＦＯ波形とエンベロープ波形とを演算した値を記憶するレジスタであり、電源投入時に「０」に初期化される。後述する定期サービス処理ルーチンにおいてのみ用いられる。
【００６７】
（１０）ＳｔａｒｔＦｌａｇ（スタート・フラグ）
後述するクロック信号受信処理ルーチンにおいて用いられるフラグであり、電源投入時に「０」に初期化される。後述するクロック信号受信処理ルーチンにおいてのみ用いられる。
【００６８】
そして、本発明による電子楽器は、シーケンサー１８による自動演奏制御の処理によって、演奏者によって設定されたテンポで自動演奏が行われる一方で、演奏者の鍵盤装置２０の押鍵操作によって押鍵信号が出力されると、波形再生装置２４が波形メモリー２２に記憶された波形データの再生を開始して楽音信号が振幅制御装置２６に出力される。
【００６９】
そして、振幅制御装置２６へ出力された楽音信号は、振幅制御装置２６によってＬＦＯ波形とエンベロープ波形とを演算した波形を付与されてＤ／Ａ２８に出力され、Ｄ／Ａ２８によってアナログ信号に変換されてスピーカー３０に出力され、楽音として空間に放音されることになる。
【００７０】
以上の構成において、図７乃至図８に示すフローチャートを参照しながら、本発明による電子楽器の動作の説明を行うものとする。
【００７１】
なお、鍵盤装置２０の押鍵操作ならびに離鍵操作に基づいて押鍵信号ならびに離鍵信号を出力したり、あるいは、波形メモリー２２に記憶された波形データの再生したりする処理などは、公知の技術を適用することができるものであるため、その詳細な説明は省略するものとし、以下においては、本発明の実施に関連する処理についてのみ説明する。
【００７２】
なお、この電子楽器の楽音制御装置においては、ＰｌａｙＳｔａｒｔかあるいはＴｉｍｉｎｇＣｌｏｃｋのいずれかの信号がＣＰＵ１０に入力されると、クロック信号受信処理ルーチン（図７）が実行され、また、１０ｍｓｅｃの間隔でＣＰＵ１０に対してタイマー割り込みがかけられると、定期サービス処理ルーチン（図８）が実行される。
【００７３】
ここで、本発明による電子楽器の楽音制御装置による楽音の制御の処理の概要を説明しておくと、クロック信号受信処理ルーチンにおいて求められるＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃを示すレジスタＩｎｔｅｒｖａｌＣの値と、ＴｉｍｉｎｇＣｌｏｃｋが何番目であるかを示すレジスタＣｏｕｎｔｅｒＣの値とを用いて、定期サービス処理ルーチンにおいて１０ｍｓｅｃ後に到達するＬＦＯ波形とエンベロープ波形との演算値（レジスタＮｅｘｔＬｅｖｅｌの値）が求められ、当該レジスタＮｅｘｔＬｅｖｅｌの値に基づいて楽音信号が制御されるものである。
【００７４】
以下、本発明による電子楽器の楽音制御装置による楽音の制御の処理を詳細に説明することとする。
【００７５】
まず、図７に示すクロック信号受信処理ルーチンについて説明すると、このクロック信号受信処理ルーチンは、シーケンサー１８から出力されたクロック信号がＣＰＵ１０に入力される度に読み出されて起動される割り込みルーチンである。
【００７６】
このクロック信号受信処理ルーチンにおいて、ＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃを示すレジスタＩｎｔｅｒｖａｌＣの値とＴｉｍｉｎｇＣｌｏｃｋが何番目であるかを示すレジスタＣｏｕｎｔｅｒＣの値とが求められるものである。
【００７７】
クロック信号受信処理ルーチンが起動されると、まず、ステップＳ７０２において、入力されたクロック信号がＰｌａｙＳｔａｒｔであるか否かが判断される。
【００７８】
このステップＳ７０２における判断処理において、入力されたクロック信号がＰｌａｙＳｔａｒｔであると判断された場合には、ステップＳ７０４に進み、入力されたクロック信号がＰｌａｙＳｔａｒｔではないと判断された場合には、ステップＳ７０６に進む。
【００７９】
ステップＳ７０４においては、ＳｔａｒｔＦｌａｇ（スタート・フラグ）に１を設定する。このＳｔａｒｔＦｌａｇは、クロック信号のうちＰｌａｙＳｔａｒｔがＣＰＵ１０に入力されると１に設定されるフラグである。
【００８０】
そして、ステップＳ７０４を終了すると、このクロック信号受信処理ルーチンを終了する。
【００８１】
一方、ステップＳ７０６においては、入力されたクロック信号がＴｉｍｉｎｇＣｌｏｃｋであるか否かが判断される。
【００８２】
このステップＳ７０６における判断処理において、入力されたクロック信号がＴｉｍｉｎｇＣｌｏｃｋであると判断された場合には、ステップＳ７０８に進み、入力されたクロック信号がＴｉｍｉｎｇＣｌｏｃｋではないと判断された場合には、このクロック信号受信処理ルーチンを終了する。
【００８３】
そして、ステップＳ７０８においては、タイマー１６から読み出された現在時刻をレジスタＣｕｒＴｉｍｅＣに記憶し、処理中のＴｉｍｉｎｇＣｌｏｃｋが入力された時刻がレジスタＣｕｒＴｉｍｅＣに記憶される。
【００８４】
ステップＳ７０８の処理を終了するとステップＳ７１０の処理に進み、レジスタＣｕｒＴｉｍｅＣに記憶された値と、レジスタＰｒｅｖＴｉｍｅＣに記憶された値との差分値を求め、その差分値をレジスタＩｎｔｅｒｖａｌＣに記憶する。
【００８５】
従って、レジスタＩｎｔｅｒｖａｌＣには、処理中のＴｉｍｉｎｇＣｌｏｃｋとそれより１つ前のＴｉｍｉｎｇＣｌｏｃｋとがＣＰＵ１０に入力されるまでの間の時間、即ち、前回のＴｉｍｉｎｇＣｌｏｃｋが入力されてから今回のＴｉｍｉｎｇＣｌｏｃｋが入力されるまでの経過時間たる間隔Ｔｃが記憶されることになる。
【００８６】
また、こうして求められたレジスタＩｎｔｅｒｖａｌＣは、後述する定期サービス処理ルーチンにおいて、レジスタＰｈａｓｅＬを求めるときの処理（ステップＳ８０４）に用いられることになる。
【００８７】
ステップＳ７１０の処理を終了すると、ステップＳ７１２の処理に進み、レジスタＰｒｅｖＴｉｍｅＣにレジスタＣｕｒＴｉｍｅＣの値を記憶する。即ち、処理中のＴｉｍｉｎｇＣｌｏｃｋが入力された時刻が、次のＴｉｍｉｎｇＣｌｏｃｋが入力されて次にこのクロック信号受信処理ルーチンが起動されたときには、ステップＳ７０８においてレジスタＩｎｔｅｒｖａｌＣを求めるときのレジスタＰｒｅｖＴｉｍｅＣの値となるものである。
【００８８】
また、こうして求められたレジスタＰｒｅｖＴｉｍｅＣは、後述する定期サービス処理ルーチンにおいて、レジスタＩｎｔｅｒｖａｌＬを求めるときの処理（ステップＳ８０２）に用いられることになる。
【００８９】
ステップＳ７１２を終了すると、ステップＳ７１４に進み、ＳｔａｒｔＦｌａｇに１が設定されているか否かを判断する。
【００９０】
このステップＳ７１４の判断処理において、ＳｔａｒｔＦｌａｇに１が設定されていると判断された場合には、ステップＳ７１６に進み、次にこのクロック信号受信処理ルーチンが起動されたときのために、ＳｔａｒｔＦｌａｇに０を設定して初期化するとともに、レジスタＣｏｕｎｔｅｒＣに０を設定して初期化して、このクロック信号受信処理ルーチンを終了する。
【００９１】
一方、このステップＳ７１４の判断処理において、ＳｔａｒｔＦｌａｇに１が設定されていないと判断された場合には、ステップＳ７１８に進み、レジスタＣｏｕｎｔｅｒＣの値を１だけインクリメントする。
【００９２】
ステップＳ７１８を終了するとステップＳ７２０に進み、レジスタＣｏｕｎｔｅｒＣの値が２４より小さいか否かが判断される。
【００９３】
このステップＳ７２０の判断処理において、レジスタＣｏｕｎｔｅｒＣの値が２４より小さいと判断された場合には、このクロック信号受信処理ルーチンを終了する。
【００９４】
一方、このステップＳ７２０の判断処理において、変数ＣｏｕｎｔｅｒＣの値が２４より小さくはないと判断された場合には、ステップＳ７２２に進んで、レジスタＣｏｕｎｔｅｒＣに０を設定して初期化し、このクロック信号受信処理ルーチンを終了する。
【００９５】
従って、レジスタＣｏｕｎｔｅｒＣの値は、ＰｌａｙＳｔａｒｔが入力された後の最初のＴｉｍｉｎｇＣｌｏｃｋが入力されたときにはステップＳ７１６において０に初期化されるが、ステップＳ７１８、ステップＳ７２０ならびにステップＳ７２２の処理によって、ＴｉｍｉｎｇＣｌｏｃｋが入力される度に１ずつインクリメントされ、２４に到達すると０に初期化されるので、レジスタＣｏｕｎｔｅｒＣには、処理中のＴｉｍｉｎｇＣｌｏｃｋがＬＦＯ波形の１周期において２４個出力されるＴｉｍｉｎｇＣｌｏｃｋのうちの何番目であるかが記憶されることになる。
【００９６】
また、こうして求められたレジスタＣｏｕｎｔｅｒＣは、後述する定期サービス処理ルーチンにおいて、レジスタＩｎｔｅｒｖａｌＣとともにレジスタＰｈａｓｅＬを求めるときの処理（ステップＳ８０４）に用いられることになる。
【００９７】
次に、図８に示す定期サービス処理ルーチンについて説明すると、この定期サービス処理ルーチンは、ＣＰＵ１０がタイマー１６から１０ｍｓｅｃ毎に出力される割り込み信号を入力する度に読み出され起動される割り込みルーチンである。即ち、定期サービス処理ルーチンは、１０ｍｓｅｃの間隔で定期的に起動することになる。
【００９８】
この定期サービス処理ルーチンにおいては、１０ｍｓｅｃ後に到達するＬＦＯ波形とエンベロープ波形との演算値（レジスタＮｅｘｔＬｅｖｅｌの値）が求められて振幅制御装置２６に出力されることになる。
【００９９】
定期サービス処理ルーチンが起動されると、まず、ステップＳ８０２において、タイマー１６から読み出された現在時刻をレジスタＣｕｒＴｉｍｅＬに記憶する。これにより、定期サービス処理ルーチンが起動された時刻が、レジスタＣｕｒＴｉｍｅＬに記憶されることになる。
【０１００】
それから、レジスタＣｕｒＴｉｍｅＬに記憶された値と、レジスタＰｒｅｖＴｉｍｅＣに記憶された値との差分値を求め、その差分値をレジスタＩｎｔｅｒｖａｌＬに記憶する。
【０１０１】
従って、レジスタＩｎｔｅｒｖａｌＬには、最後にＴｉｍｉｎｇＣｌｏｃｋが入力されてから定期サービス処理ルーチンが起動されるまでの間の経過時間が記憶されることになる。
【０１０２】
ステップＳ８０２を終了すると、ステップＳ８０４に進んで、クロック信号受信処理ルーチンにおいて求めたレジスタＩｎｔｅｒｖａｌＣとレジスタＣｏｕｎｔｅｒＣとを用いて、数式４による演算によって１０ｍｓｅｃ後に到達するＬＦＯ波形の位相を求めてレジスタＰｈａｓｅＬを求める。
【０１０３】
ＰｈａｓｅＬ＝（ＣｏｕｎｔｅｒＣ＋（ＩｎｔｅｒｖａｌＬ＋１０）／ＩｎｔｅｒｖａｌＣ）／２４・・・数式４
ここで、クロック信号受信処理ルーチンにおいて求めたレジスタＩｎｔｅｒｖａｌＣはＴｉｍｉｎｇＣｌｏｃｋが出力される間隔Ｔｃを示すものであり、レジスタＣｏｕｎｔｅｒＣはＴｉｍｉｎｇＣｌｏｃｋが何番目であるかを示すものであるので、数式４のそれぞれのレジスタは上記した数式３における「Ｔｃ」に「レジスタＩｎｔｅｒｖａｌＣ」が対応し、「ｎ」に「レジスタＣｏｕｎｔｅｒＣ」が対応し、「ｔ」には「レジスタＩｎｔｅｒｖａｌＬ＋１０」が対応して、「Ｐ’」に「レジスタＰｈａｓｅＬ」が対応することとなる。
【０１０４】
その結果、レジスタＰｈａｓｅＬには、定期サービス処理ルーチンが起動されたときから１０ｍｓｅｃ後に到達するＬＦＯ波形の位相が記憶される。
【０１０５】
ステップＳ８０４を終了すると、ステップＳ８０６に進んで、ステップＳ８０４において求めたレジスタＰｈａｓｅＬの値が１未満であるか否かが判断される。
【０１０６】
このステップＳ８０６の判断処理において、レジスタＰｈａｓｅＬの値が１未満ではないと判断された場合には、ステップＳ８０８に進み、レジスタＰｈａｓｅＬの値が１未満であると判断された場合には、ステップＳ８１０に進む。
【０１０７】
ステップＳ８０８においては、レジスタＰｈａｓｅＬの値から１を引いた差をレジスタＰｈａｓｅＬに記憶して、ステップＳ８１０に進む。
【０１０８】
そして、ステップＳ８１０においては、レジスタＰｈａｓｅＬの値が０．５未満であるか否かが判断される。このステップＳ８１０と、後述するステップＳ８１２あるいはステップＳ８１４の処理は、生成されるＬＦＯ波形をのこぎり波から三角波に変更するものである。
【０１０９】
このステップＳ８１０の判断処理によって、レジスタＰｈａｓｅＬの値が０．５未満であると判断された場合には、ステップＳ８１２に進み、レジスタＰｈａｓｅＬの値が０．５未満ではないと判断された場合には、ステップＳ８１４に進む。
【０１１０】
ステップＳ８１２においては、レジスタＰｈａｓｅＬの値に２を乗じた積をレジスタＮｅｘｔＬｅｖｅｌＬに記憶して、ステップＳ８１６に進む。
【０１１１】
ステップＳ８１４においては、レジスタＰｈａｓｅＬの値に２を乗じた積を２から引いた差にレジスタＮｅｘｔＬｅｖｅｌＬに記憶して、ステップＳ８１６進む。
【０１１２】
こうしてステップＳ８１２あるいはステップＳ８１４において、生成されたＬＦＯ波形がレジスタＮｅｘｔＬｅｖｅｌＬに記憶されると、次に、ステップＳ８１６においては、楽音を制御するエンベロープ波形が生成される。
【０１１３】
そして、ステップＳ８１６を終了すると、ステップＳ８１８に進み、音色パラメータであるＬＦＯＤｅｐｔｈの値とレジスタＮｅｘｔＬｅｖｅｌＬの値とを乗算した積に１を加算した和に、ステップＳ８１６において生成されたエンベロープ波形を乗算した積をレジスタＮｅｘｔＬｅｖｅｌに記憶してステップＳ８２０に進む。
【０１１４】
従って、ステップＳ８１８においてレジスタＮｅｘｔＬｅｖｅｌには、定期サービス処理ルーチンが起動されたときから１０ｍｓｅｃ後に到達するＬＦＯ波形とエンベロープ波形との演算値が記憶されることになり、当該レジスタＮｅｘｔＬｅｖｅｌの値を、ステップＳ８２０において振幅制御装置２６に出力して、この定期サービス処理ルーチンを終了する。
【０１１５】
そして、上記した定期サービス処理ルーチンによって求められたレジスタＮｅｘｔＬｅｖｅｌの値に応じたＬＦＯ波形とエンベロープ波形との演算値によって、楽音信号は振幅制御装置２６において振幅変化が施され、スピーカー３０から楽音として空間に放音されることとなる。
【０１１６】
なお、図９には、演奏者によってテンポの変更が行われた場合のＬＦＯ波形の追従の様子が示されている。この図９に示すものは、定期サービス処理ルーチンが起動された時刻をＳ１〜Ｓ７とし、演奏者によりテンポがＳ４とＳ５との間で１２５ＢＰＭから２５０ＢＰＭに変更された場合を示している。
【０１１７】
ここで、定期サービス処理ルーチンによって求められたレジスタＮｅｘｔＬｅｖｅｌの値は、１０ｍｓｅｃ後のＬＦＯ波形を予測した値であり、また、上記したように演奏者による変更後のテンポは、演奏者によるテンポの変更後の最初のＴｉｍｉｎｇＣｌｏｃｋが出力されてから、当該ＴｉｍｉｎｇＣｌｏｃｋの次のＴｉｍｉｎｇＣｌｏｃｋが出力されるまでの間隔Ｔｃにはじめて反映されることになる。
【０１１８】
従って、Ｓ５においては演奏者によるテンポの変化を検出することができず、Ｓ６においてはじめて演奏者によるテンポの変化を検出することができるようになるので、Ｓ４〜Ｓ７の間は理想的なＬＦＯ波形から実際のＬＦＯ波形が離れてしまうことになる。
【０１１９】
しかしながら、この際、最大でも３０ｍｓｅｃ程度の遅れで理想的なＬＦＯ波形に実際のＬＦＯ波形が追従するようになり、しかも、Ｓ７以降のＬＦＯ波形は、Ｓ５〜Ｓ６における理想的なＬＦＯ波形と実際のＬＦＯ波形との間の誤差の影響を受けずに生成されるので、聴感上は全く問題ない十分な精度のＬＦＯ波形が生成されるものである。
【０１２０】
さらに、定期サービス処理ルーチンが起動される間隔を１０ｍｓｅｃよりも短くすることで、理想的なＬＦＯ波形と実際のＬＦＯ波形との誤差は小さくなり、より高精度のＬＦＯ波形が生成されることになるものである。
【０１２１】
上記したようにして、この電子楽器においては、ＴｉｍｉｎｇＣｌｏｃｋが受信されたときのＬＦＯ波形の位相を用いて、定期サービス処理ルーチンが起動される１０ｍｓｅｃ間隔でＬＦＯ波形を生成しているので、テンポ・クロックに従って自動演奏される楽曲の音符や拍や小節の周期と同期する周期のＬＦＯ波形（即ち、このＬＦＯ波形の初期化のタイミングとテンポ・クロックに従って自動演奏される楽曲の音符や拍や小節のタイミングとが同期する。）を得ることができ、当該ＬＦＯ波形を用いて振幅制御装置によって楽音を制御することができる。
【０１２２】
また、振幅制御装置２６に出力されているレジスタＮｅｘｔＬｅｖｅｌの値は、定期サービス処理ルーチンが起動されたときから１０ｍｓｅｃ後に到達するＬＦＯ波形とエンベロープ波形との演算値であるので、エンベロープ波形の補間のために別途補間器を必要とすることなく、振幅制御装置２６のみによってＬＦＯ波形とエンベロープ波形との補間をすることができる。
【０１２３】
さらに、定期サービス処理ルーチンにおいては、ＴｉｍｉｎｇＣｌｏｃｋが受信されたときのＬＦＯ波形の位相を用いたり、ＴｉｍｉｎｇＣｌｏｃｋが受信されたときと定期サービス処理ルーチンが起動されたときとの時間差を考慮したり、振幅制御装置２６によるＬＦＯ波形の補間を考慮したりしてＬＦＯ波形を生成しているので、ＬＦＯ波形が歪むようなことなく正確なＬＦＯ波形を生成することができる。
【０１２４】
なお、上記した実施の形態においては、ＬＦＯ波形は三角波としたが、これに限られるものではないことは勿論であり、例えば、ＬＦＯの位相を示すレジスタＰｈａｓｅＬに基づきメモリより各種波形形状を読み出すようにしてもよい。
【０１２５】
また、上記した実施の形態においては、エンベロープ波形のＬＦＯ波形との演算は乗算によって行うようにしたが、これに限られるものではないことは勿論であり、例えば、エンベロープ波形のＬＦＯ波形との演算は加算によって行うようにしてもよい。
【０１２６】
また、上記した実施の形態においては、レジスタＮｅｘｔＬｅｖｅｌ（エンベロープ波形のＬＦＯ波形との演算値）によって生成される楽音の振幅を制御するようにしたが、これに限られるものではないことは勿論であり、レジスタＮｅｘｔＬｅｖｅｌによって生成される楽音の振幅以外のものを制御するようにしてもよい。
【０１２７】
また、上記した実施の形態においては、外部から受信したＴｉｍｉｎｇＣｌｏｃｋを基に定期サービス処理ルーチンで用いられるＬＦＯ波形の位相を求めたが、これに限られるものではないことは勿論であり、内部で生成されたＴｉｍｉｎｇＣｌｏｃｋを基にＬＦＯ波形の位相を求めるようにしてもよい。
【０１２８】
【発明の効果】
本発明は、以上説明したように構成されているので、楽音を制御するための信号の周期、即ち、楽音を制御するための信号の初期化のタイミングとテンポ・クロックなどの同期クロックに従って自動演奏される楽曲の音符や拍や小節のタイミングとを同期させることができるようになるという優れた効果を奏する。
【図面の簡単な説明】
【図１】従来の技術を用いてシーケンサーにより１曲通して自動演奏を行った場合に、その曲の最後の方で楽音制御信号の周期、即ち、楽音制御信号のリスタート（初期化）のタイミングと外部のテンポ・クロックに従って自動演奏される楽曲の音符や拍や小節のタイミングとが同期しなくなる状態を示す説明図である。
【図２】本発明による電子楽器の楽音制御装置を備えた電子楽器のブロック構成図である。
【図３】テンポとＴｉｍｉｎｇＣｌｏｃｋとの関係を示す概念説明図である。
【図４】（ａ）は、レジスタＮｅｘｔＬｅｖｅｌの値の一例を示す説明図であり、（ｂ）は、（ａ）に示すレジスタＮｅｘｔＬｅｖｅｌの値から得られるＬＦＯ波形の現在の波高値を示す説明図である。
【図５】四分音符とＬＦＯ波形との関係を示す説明図である。
【図６】ＬＦＯ波形の位相を示す説明図である。
【図７】クロック信号受信処理の処理ルーチンのフローチャートである。
【図８】定期サービス処理の処理ルーチンのフローチャートである。
【図９】ＬＦＯ波形の追従を示す説明図である。
【符号の説明】
１０        中央処理装置（ＣＰＵ）
１２        リード・オンリ・メモリー（ＲＯＭ）
１４        ランダム・アクセス・メモリー（ＲＡＭ）
１６        タイマー
１８        シーケンサー
２０        鍵盤装置
２２        波形メモリー
２４        波形再生装置
２６        振幅制御装置
２８        デジタル／アナログ変換器（Ｄ／Ａ）
３０        スピーカー
【図１】
0004152540.tif 000002
【図２】
0004152540.tif 000003
【図３】
0004152540.tif 000004
【図４】
0004152540.tif 000005
【図５】
0004152540.tif 000006
【図６】
0004152540.tif 000007
【図７】
0004152540.tif 000008
【図８】
0004152540.tif 000009
【図９】
0004152540.tif 000010