(57)【特許請求の範囲】
【請求項１】
鍵盤の複数の鍵に対応し、各鍵ごとに押鍵及び離鍵の駆動を行う複数の鍵駆動手段と、
自動演奏曲の発音に係る音高データの鍵に対応する鍵駆動手段を当該発音に係るベロシティデータに応じた速度で押鍵駆動させる駆動制御手段と、
前記鍵駆動手段によって押鍵駆動された鍵の速度を検出してベロシティデータを生成する押鍵速度検出手段と、
前記自動演奏曲のベロシティデータ又は前記押鍵速度検出手段によって生成されたベロシティデータのいずれかを選択する選択手段と、
この選択手段によって選択されたベロシティデータに応じて発音を制御する発音制御手段と、
を有することを特徴とする自動演奏装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、自動演奏装置に関する。
【０００２】
【従来の技術】
アコースティック鍵盤楽器の中には、各鍵に対応して、ソレノイドコイル、プランジャー、バネ等（以下、「ソレノイド機構」という）からなる鍵駆動手段を備えて、自動演奏曲に応じて鍵を自動的に押鍵及び離鍵をさせ、演奏操作を自動的に行うものがある。一方、電子鍵盤楽器においても自動演奏機能を備えたものが普及している。そこで、この電子鍵盤楽器としての自動演奏装置に鍵駆動手段を付加した製品が考えられる。鍵駆動手段を付加した自動演奏装置の場合、鍵駆動手段によって自動演奏を行うモードと、鍵駆動手段の動作を停止して自動演奏のみを行うモードと、通常の手動演奏のモードと、３通りのモードで演奏することができる。
【０００３】
【発明が解決しようとする課題】
しかしながら、鍵駆動手段によって自動演奏を行うモードの場合には、各鍵に対応した複数のソレノイド機構の特性のばらつき、及び、各鍵ごとの回動部の摩擦係数のばらつきのために、自動演奏曲のベロシティデータを正確に反映した音量での発音がなされないという問題があった。
本発明の課題は、鍵駆動手段によって自動演奏を行う場合に、自動演奏曲のベロシティデータを正確に反映した発音ができるようにすることである。
【０００４】
【課題を解決するための手段】
本発明は、鍵盤の複数の鍵に対応し、各鍵ごとに押鍵及び離鍵の駆動を行う複数の鍵駆動手段と、自動演奏曲の発音に係る音高データの鍵に対応する鍵駆動手段を当該発音に係るベロシティデータに応じた速度で押鍵駆動させる駆動制御手段と、鍵駆動手段によって押鍵駆動された鍵の速度を検出してベロシティデータを生成する押鍵速度検出手段と、自動演奏曲のベロシティデータ又は押鍵速度検出手段によって生成されたベロシティデータのいずれかを選択する選択手段と、選択手段によって選択されたベロシティデータに応じて発音を制御する発音制御手段と、を有することを特徴とする。
【０００５】
【発明の実施の形態】
以下、本発明の実施形態を図を参照して説明する。
図１は、実施形態における自動演奏装置のシステム構成を示すブロック図である。音高及びベロシティを入力する鍵盤１には、図には示さないが、各鍵ごとに第１接点及び第２接点、、及び、全ての鍵の第１及び第２接点のオン・オフをスキャンするためのマトリックス回路、並びに、音色スイッチ、モードスイッチ等の各種のスイッチ（各スイッチについては後述する）が設けられている。そして、各鍵を押鍵した場合には、まず第１接点がオンになり、さらに押下すると第２接点がオンになる。したがって、ＣＰＵ３は、鍵盤１をスキャンすることによって、第１接点がオンになってから第２接点がオンになるまでの時間差によって押鍵の速度すなわちベロシティを検出することができる。すなわち、ＣＰＵ３は、押鍵駆動された鍵の速度を検出してベロシティデータを生成する押鍵速度検出手段を構成する。
【０００６】
ソレノイド機構２は、ＣＰＵ３の駆動指令に応じて、鍵盤１の各鍵を自動的に押鍵及び離鍵する鍵駆動手段を構成する。そして、ＣＰＵ３は、鍵駆動手段であるソレノイド機構２を自動演奏データに応じて駆動させる駆動制御手段を構成する。
【０００７】
ＣＰＵ３は、システムバス４を介して、上記した鍵盤１及びソレノイド機構２の他に、プログラムＲＯＭ５、ワークＲＡＭ６、自動演奏データメモリ７、音源部８、タイマ部９に接続されている。また、音源部８には発音部１０が接続されている。プログラムＲＯＭは、ＣＰＵ３によって実行されるプログラム、及びイニシャライズ処理における初期データ等を記憶している。ワークＲＡＭ６は、ＣＰＵ３によって処理された各種のデータを記憶する。例えば、鍵盤１をスキャンして得られた第１及び第２接点のオン・オフのデータ、押鍵及び離鍵された鍵のＫＥＹ番号のデータ等を記憶する。
【０００８】
音源部８は、ＣＰＵ３の発音指示に応じて楽音信号を生成して発音部１０に入力して発音処理を行うとともに、ＣＰＵ３の消音指示に応じて消音処理を行う。すなわち、ＣＰＵ３は、発音を制御する発音制御手段を構成する。なお、音源部８は、８個のチャンネルを備え、８個の音を同時に発音することができる。発音部１０は、楽音信号をデジタルからアナログに変換するＤＡＣ、フィルタ回路、アンプ、スピーカ等（図示せず）を備え、音源部８から入力される楽音信号に応じて発音を行う。タイマ部９は、２つのタイマ回路（図示せず）を備え、異なるタイミングで一定時間ごとにＣＰＵ３に対してタイマインタラプト１及び２を入力する。
【０００９】
自動演奏データメモリ７は、複数の自動演奏曲のデータが記憶され、鍵盤１の曲選択スイッチの操作に応じてＣＰＵ３によって、１つの自動演奏曲のデータが読み出されて音源部８に入力される。自動演奏曲のデータは、図２に示すように、タイムデータ、キー番号及びそのオン／オフデータ、ベロシティデータからなるイベントデータがアドレス順に複数配列され、曲の最後にはＥＮＤデータが挿入されている。
【００１０】
次に、実施形態の自動演奏装置の動作について、ＣＰＵ３のフローチャートを参照して説明する。図３はメインフローである。所定のイニシャライズ処理（ステップＡ１）の後、スイッチ処理（ステップＡ２）、鍵処理（ステップＡ３）、自動演奏処理（ステップＡ４）、鍵駆動処理（ステップＡ５）、発音処理（ステップＡ６）、その他の処理（ステップＡ７）のループを繰り返し実行する。
【００１１】
メインフローにおけるスイッチ処理のフローを図４に示す。モードスイッチがオンされたか否かを判別し（ステップＢ１）、オンされたときはモードフラグＭＦを反転する（ステップＢ２）。モードスイッチは、鍵駆動をするかしないかを設定するスイッチであり、ＭＦが１のときは鍵駆動モードであり、ＭＦが０のときは鍵非駆動モードである。次に、ベロシティスイッチがオンされたか否かを判別し（ステップＢ３）、オンされたときはベロシティフラグＶＥＬＦを反転する（ステップＢ４）。
【００１２】
ベロシティスイッチは、発音の元になるベロシティデータを押鍵の速度を検出して生成したベロシティデータにするか、又は、図２に示した自動演奏データのベロシティデータにするかを設定するスイッチである。すなわち、ベロシティスイッチは、自動演奏曲のベロシティデータ又はＣＰＵ３の押鍵速度検出によって生成されたベロシティデータのいずれかを選択する選択手段を構成する。ＶＥＬＦの値が０の場合には、押鍵速度を検出して生成したベロシティデータを発音のベロシティデータとする。ＶＥＬＦが１である場合には、自動演奏データのベロシティデータを発音のベロシティデータとする。
【００１３】
次に、自動演奏のスタートスイッチがオンされたか否かを判別し（ステップＢ５）、オンされない場合には直ちにこのフローを終了する。スタートスイッチがオンされたときは、スタートフラグＳＴＦを反転する（ステップＢ６）。そして、ＳＴＦが１であるか否かを判別する（ステップＢ７）。ＳＴＦが１である場合には、自動演奏データの初期アドレスをレジスタＡＤＤにセットする（ステップＢ８）。そして、ＡＤＤのデータをレジスタＴＩＭＥにセットする（ステップＢ９）。図２において、初期アドレスのデータはタイムデータであるので、ＴＩＭＥにはそのタイムデータがセットされる。次に、タイマインタラプト１を解除する（ステップＢ１０）。後述するように、タイマインタラプト１が解除されると、一定時間ごとにＴＩＭＥの値は減算される。ステップＢ１０の後、このフローを終了する。
【００１４】
ステップＢ７において、ＳＴＦが０である場合には、モードフラグＭＦが１（鍵駆動モード）であるか否かを判別する（ステップＢ１１）。ＭＦが１である場合は、ソレノイド機構２を全て駆動停止にする（ステップＢ１２）。そして、音源部８に対して消音指示をする（ステップＢ１３）。ステップＢ１１においてＭＦが０（鍵非駆動モード）の場合には、ソレノイド機構２は停止状態であるので、ステップＢ１３に移行して消音指示をする。消音指示の後は、タイマインタラプト１を禁止して（ステップＢ１４）、このフローを終了する。
【００１５】
メインフローにおける鍵処理のフローを図５〜図７に示す。図５において、ＭＦが１であるか否かを判別し（ステップＣ１）、ＭＦが１である場合にはＶＥＬＦが１であるか否かを判別する（ステップＣ２）。ＭＦが０（鍵非駆動モード）である場合、又はＶＥＬＦが０（押鍵速度によるベロシティ）である場合には、鍵番号を示すポインタｎを１にセットして（ステップＣ３）、ｎをインクリメントしながら、各鍵（ＫＥＹ）のオン・オフをスキャンする。
【００１６】
ＫＥＹ（ｎ）の第１接点がオンに変化したか否かを判別し（ステップＣ４）、オンに変化したときは、仮オンフラグＫＯＮＦ（ｎ）を１にセットする（ステップＣ５）。また、カウンタＣＯＵＮＴ（ｎ）を０にリセットする（ステップＣ６）。次に、ＫＥＹ（ｎ）の第２接点が変化したか否かを判別する（ステップＣ７）。この接点がオフからオン（押鍵状態）に変化したときは、第１接点のオン時に１にセットしたフラグＫＯＮＦ（ｎ）を０にリセットする（ステップＣ８）。
【００１７】
次に、発音チャンネルの番号を示すポインタＣＨを１にセットして（ステップＣ９）、ＣＨをインクリメントしながら、押鍵された鍵の番号ＫＥＹ（ｎ）の空きチャンネルを捜す。このため、発音フラグＯＮＦ（ＣＨ）及び発音トリガフラグＯＮＴＦ（ＣＨ）がともに０であるか否かを判別する（ステップＣ１０）。ＯＮＦ（ＣＨ）は、チャンネル（ＣＨ）が発音状態のとき１、消音状態のとき０となるフラグである。また、ＯＮＴＦ（ＣＨ）は、チャンネル（ＣＨ）に発音開始指示がされたときに１、発音開始指示がされないときに０となるフラグである。すなわち、ステップＣ１０においてポインタＣＨで指定したチャンネル（ＣＨ）が発音状態でなく、かつ、発音開始指示がなされていないかどうかを判別する。
【００１８】
ＯＮＦ（ＣＨ）及びＯＮＴＦ（ＣＨ）のうちいずれか一方でも１である場合には、チャンネル（ＣＨ）は空きチャンネルではないので、ＣＨをインクリメントする（ステップＣ１１）。そして、ＣＨが８（チャンネル数）を超えたか否かを判別する（ステップＣ１２）。ＣＨが８以下である場合には、ステップＣ１０に移行して、ＣＨをインクリメントして指定したチャンネルが空きチャンネルであるか否かを判別する。
【００１９】
ステップＣ１０においてＯＮＦ（ＣＨ）及びＯＮＴＦ（ＣＨ）がともに０で、そのチャンネルが空きチャンネルである場合には、ＯＮＴＦ（ＣＨ）を１にセットする（ステップＣ１３）。そして、音高のレジスタＮＯＴＥ（ＣＨ）にｎすなわち鍵番号をセットし（ステップＣ１４）、ベロシティのレジスタＶＥＬ（ＣＨ）にカウンタＣＯＮＴ（ｎ）の値をセットする（ステップＣ１５）。ＣＯＮＴ（ｎ）の値は、後述するように、タイマ部９からのタイマインタラプト２に応じて、インクリメントされる。したがって、図５のステップＣ１５において、ＶＥＬ（ＣＨ）にセットされるＣＯＵＮＴ（ｎ）の値は、第１接点がオンされたときから第２接点がオンになるまでの時間差すなわち押鍵速度を表わす。したがって、押鍵速度の検出から得られたベロシティデータがＶＥＬ（ＣＨ）にセットされる。
【００２０】
図５のステップＣ７において、ＫＥＹ（ｎ）の第２接点がオンからオフに変化したときは、図６のステップＣ１６においてポインタＣＨを１にセットして、ＣＨをインクリメントしながら、オフにされた鍵の発音に対応しているチャンネルを捜す。発音フラグＯＮＦ（ＣＨ）が１（発音状態）であるか否かを判別し（ステップＣ１７）、ＯＮＦ（ＣＨ）が１である場合には、ＮＯＴＥ（ＣＨ）の値（発音の音高）がｎ（鍵番号）と一致しているか否かを判別する（ステップＣ１８）。
【００２１】
ＯＮＦ（ＣＨ）が０（消音状態）であるか、又は、ＮＯＴＥ（ＣＨ）の鍵番号データがｎでない場合には、ＣＨで指定したチャンネルが消音指示対象のチャンネルでないので、ＣＨをインクリメントする（ステップＣ１９）。そして、ＣＨが８（チャンネル数）を超えたか否かを判別する（ステップＣ２０）。ＣＨが８以下である場合には、ステップＣ１７に移行して、ＯＮＦ（ＣＨ）の値を判別する。
【００２２】
ステップＣ１８において、ＮＯＴＥ（ＣＨ）とｎとが一致した場合、すなわちポインタＣＨで指定したチャンネルが消音指示の対象となるチャンネルである場合には、そのチャンネルの消音フラグＯＦＦＦ（ＣＨ）を１にセットする（ステップＣ２１）。また、発音フラグＯＮＦ（ＣＨ）を０にリセットする（ステップＣ２２）。この後、又はステップＣ２０においてＣＨが８（チャンネル数）を超えた場合は、ｎをインクリメントする（ステップＣ２３）。そして、ｎが鍵数を超えたか否かを判別する（ステップＣ２４）。ｎが鍵数以下である場合には、図５のステップＣ４に移行して、ＫＥＹ（ｎ）の第１接点の状態を判別する。ｎが鍵数を超えた場合には、このフローを終了する。
【００２３】
図５のステップＣ１２においてＣＨが８（チャンネル数）を超えた場合、若しくは、ステップＣ１５においてＶＥＬ（ＣＨ）にＣＯＵＮＴ（ｎ）の値をセットした場合、又は、ステップＣ７においてＫＥＹ（ｎ）の第２接点が変化しない場合には、図６のステップＣ２３に移行してｎをインクリメントする。例えば、任意の鍵の第１接点がオンに変化して、第２接点がまだオンにならない押鍵途中の状態では、図５のステップＣ４、ステップＣ７、図６のステップＣ２３の処理になる。
【００２４】
図５のステップＣ２においてＶＥＬＦが１である場合、すなわち、自動演奏データのベロシティデータを発音のベロシティデータとする場合には、図７のステップＣ２５において、ＳＴＦが１であるか否かを判別する。ＳＴＦが０である場合には、自動演奏モードではないので、図５のステップＣ３に移行して、各鍵のオン・オフをスキャンする。図７のステップＣ２５において、ＳＴＦが１である場合には、鍵番号を示すポインタｎを１にセットして（ステップＣ２６）、ｎをインクリメントしながら、ＫＥＹ（ｎ）の第２接点が変化したか否かを判別する（ステップＣ２７）。第２接点がオフからオンに変化した場合には、ポインタＣＨを１にセットして（ステップＣ２８）、ＣＨをインクリメントしながら、発音指示の対象となる空きチャンネルを捜す。
【００２５】
すなわち、発音フラグＯＮＦ（ＣＨ）及び発音トリガフラグＯＮＴＦ（ＣＨ）がともに０であるか否かを判別する（ステップＣ２９）。ＯＮＦ（ＣＨ）は、チャンネル（ＣＨ）が発音状態のとき１、消音状態のとき０となるフラグである。また、ＯＮＴＦ（ＣＨ）は、チャンネル（ＣＨ）に発音開始指示がされたときに１、発音開始指示がされないときに０となるフラグである。すなわち、ポインタＣＨで指定したチャンネル（ＣＨ）が発音状態でなく、かつ、発音開始指示がなされていないかどうかを判別する。
【００２６】
ＯＮＦ（ＣＨ）及びＯＮＴＦ（ＣＨ）のうちいずれか一方でも１である場合には、チャンネル（ＣＨ）は空きチャンネルではないので、ＣＨをインクリメントする（ステップＣ３０）。そして、ＣＨが８（チャンネル数）を超えたか否かを判別する（ステップＣ３１）。ＣＨが８以下である場合には、ステップＣ２９に移行して、ＣＨをインクリメントして指定したチャンネルが空きチャンネルであるか否かを判別する。
【００２７】
ステップＣ２９においてＯＮＦ（ＣＨ）及びＯＮＴＦ（ＣＨ）がともに０で、そのチャンネルが空きチャンネルである場合には、ＯＮＴＦ（ＣＨ）を１にセットする（ステップＣ３２）。そして、音高のレジスタＮＯＴＥ（ＣＨ）にｎすなわち鍵番号をセットし（ステップＣ３３）、ベロシティのレジスタＶＥＬ（ＣＨ）にＶＥＬのデータをセットする（ステップＣ３４）。ＶＥＬのデータは自動演奏データのベロシティデータであるが、これについては後述する。
【００２８】
ステップＣ２７において、ＫＥＹ（ｎ）の第２接点がオンからオフに変化した場合には、ポインタＣＨを１にセットして（ステップＣ３５）、ＣＨをインクリメントしながら、オフにされた鍵の発音に対応しているチャンネルを捜す。発音フラグＯＮＦ（ＣＨ）が１（発音状態）であるか否かを判別し（ステップＣ３６）、ＯＮＦ（ＣＨ）が１である場合には、ＮＯＴＥ（ＣＨ）の鍵番号がｎの鍵番号と一致しているか否かを判別する（ステップＣ３７）。
【００２９】
ＯＮＦ（ＣＨ）が０（消音状態）であるか、又は、ＮＯＴＥ（ＣＨ）の鍵番号とｎの鍵番号とが一致しない場合には、ＣＨで指定したチャンネルが消音指示対象のチャンネルでないので、ＣＨをインクリメントする（ステップＣ３８）。そして、ＣＨが８（チャンネル数）を超えたか否かを判別する（ステップＣ３９）。ＣＨが８以下である場合には、ステップＣ３６に移行して、ＯＮＦ（ＣＨ）及びＯＮＴＦ（ＣＨ）の値を判別する。
【００３０】
ステップＣ３７において、ＮＯＴＥ（ＣＨ）の鍵番号とｎの鍵番号とが一致した場合、すなわちポインタＣＨで指定したチャンネルが消音指示の対象となるチャンネルである場合には、そのチャンネルの消音フラグＯＦＦＦ（ＣＨ）を１にセットする（ステップＣ４０）。また、発音フラグＯＮＦ（ＣＨ）を０にリセットする（ステップＣ４１）。
【００３１】
ステップＣ３１若しくはステップＣ３９においてＣＨが８（チャンネル数）を超えた場合、又は、ステップＣ２７においてＫＥＹ（ｎ）の第２接点に変化がない場合、又は、ステップＣ３４においてＶＥＬ（ＣＨ）にＶＥＬのデータをセットした後は、ｎをインクリメントする（ステップＣ４２）。そして、ｎが鍵数を超えたか否かを判別する（ステップＣ４３）。ｎが鍵数以下である場合には、ステップＣ２７に移行して、ＫＥＹ（ｎ）の第２接点の変化を判別する。ステップＣ４３においてｎが鍵数を超えたときは、このフローを終了する。
【００３２】
メインフローの自動演奏処理、鍵駆動を行わない通常の自動演奏処理のフローを図８及び図９に示す。図８において、モードフラグＭＦが０であるか否かを判別し（ステップＤ１）、ＭＦが１である場合には直ちにこのフローを終了する。ＭＦが０である場合は、ＳＴＦが１であるか否かを判別し（ステップＤ２）、ＳＴＦが０である場合には直ちにこのフローを終了する。ＳＴＦが１である場合は、ＴＩＭＥが０になったか否かを判別する（ステップＤ３）。ＴＩＭＥのタイムデータの値は、タイマインタラプト１の処理で減算する。ＴＩＭＥが０でない場合には、まだ発音指示のタイミングではないので、直ちにこのフローを終了する。
【００３３】
ＴＩＭＥの値が０になったときは、ＡＤＤの値をインクリメントして（ステップＤ４）、図２に示したデータエリアを１つ進める。そして、ＡＤＤに対応するデータがＥＮＤデータでないか否かを判別する（ステップＤ５）。ＥＮＤデータでない場合には、そのデータはキーオン又はキーオフの鍵番号のデータである。したがって、ＡＤＤのデータがキーオンであるか否かを判別する（ステップＤ６）。
【００３４】
キーオンである場合には、ポインタＣＨを１にセットして（ステップＤ７）、ＣＨをインクリメントしながら、発音指示の対象となる空きチャンネルを捜す。すなわち、発音フラグＯＮＦ（ＣＨ）及び発音トリガフラグＯＮＴＦ（ＣＨ）がともに０であるか否かを判別する（ステップＤ８）。ＯＮＦ（ＣＨ）及びＯＮＴＦ（ＣＨ）のうちいずれか一方でも１である場合には、チャンネル（ＣＨ）は空きチャンネルではないので、ＣＨをインクリメントする（ステップＤ９）。そして、ＣＨが８（チャンネル数）を超えたか否かを判別する（ステップＤ１０）。ＣＨが８以下である場合には、ステップＤ８に移行して、ＣＨをインクリメントして指定したチャンネルが空きチャンネルであるか否かを判別する。
【００３５】
ステップＤ８においてＯＮＦ（ＣＨ）及びＯＮＴＦ（ＣＨ）がともに０で、そのチャンネルが空きチャンネルである場合には、ＮＯＴＥ（ＣＨ）にＡＤＤのデータすなわち鍵番号をセットする（ステップＤ１１）。そして、ＡＤＤをインクリメントする（ステップＤ１２）。したがってＡＤＤのデータは、図２に示したように、ベロシティデータになる。次に、ＶＥＬ（ＣＨ）にＡＤＤのデータすなわち自動演奏データのベロシティデータをセットする（ステップＤ１３）。そして、発音トリガフラグＯＮＴＦ（ＣＨ）を１（発音開始指示）にセットする（ステップＤ１４）。
【００３６】
ステップＤ１０においてＣＨが８（チャンネル数）を超えた場合には、空きチャンネルがないので発音することができず、ＡＤＤをインクリメントする（ステップＤ１５）。図２に示したように、鍵番号のデータの次のデータはベロシティデータである。したがって、さらにＡＤＤをインクリメントして（ステップＤ１６）、次のイベントデータのタイムデータのアドレスに移行する。そして、ＡＤＤのタイムデータをＴＩＭＥにセットする（ステップＤ１７）。ステップＤ１３においてベロシティデータをセットして、ステップＤ１４においてＯＮＴＦ（ＣＨ）を１にセットした後は、ステップＤ１６に移行してＡＤＤをインクリメントし、ステップＤ１７において次のイベントデータのタイムデータをＴＩＭＥにセットする。
【００３７】
ステップＤ５において、ＡＤＤのデータがＥＮＤデータである場合には、自動演奏が終了したので、音源部８に対して消音指示を行い（ステップＤ１８）、ＳＴＦを０にリセットし（ステップＤ１９）、タイマインタラプト１を禁止する（ステップＤ２０）。そして、このフローを終了する。
【００３８】
ステップＤ６において、ＡＤＤのデータがキーオフである場合には、図９のステップＤ２１に移行してポインタＣＨを１にセットし、ＣＨをインクリメントしながら、オフにされた鍵の発音に対応しているチャンネルを捜す。発音フラグＯＮＦ（ＣＨ）が１（発音状態）であるか否かを判別し（ステップＤ２２）、ＯＮＦ（ＣＨ）が１である場合には、ＮＯＴＥ（ＣＨ）の鍵番号のデータがＡＤＤの鍵番号のデータと一致しているか否かを判別する（ステップＤ２３）。
【００３９】
ＯＮＦ（ＣＨ）が０（消音状態）であるか、又は、ＮＯＴＥ（ＣＨ）のデータとＡＤＤのデータとが異なる場合には、ＣＨで指定したチャンネルが消音指示対象のチャンネルでないので、ＣＨをインクリメントする（ステップＤ２４）。そして、ＣＨが８（チャンネル数）を超えたか否かを判別する（ステップＤ２５）。ＣＨが８以下である場合には、ステップＤ２２に移行して、ＯＮＦ（ＣＨ）の値を判別する。ステップＤ２５においてＣＨが８を超えた場合には、ＡＤＤをインクリメントする（ステップＤ２６）。そして、図８のステップＤ１６に移行する。
【００４０】
ステップＤ２３において、ＮＯＴＥ（ＣＨ）のデータとＡＤＤのデータとが一致した場合、すなわちポインタＣＨで指定したチャンネルが消音指示の対象となるチャンネルである場合には、そのチャンネルの消音フラグＯＦＦＦ（ＣＨ）を１にセットする（ステップＤ２７）。また、発音フラグＯＮＦ（ＣＨ）を０にリセットする（ステップＤ２８）。次に、ＡＤＤをインクリメントする（ステップＤ２９）。そして、ＶＥＬ（ＣＨ）にＡＤＤのベロシティデータ（この場合は０である）をセットする（ステップＤ３０）。そして、図８のステップＤ１６に移行する。
【００４１】
メインフローにおける自動鍵処理のフローを図１０に示す。モードフラグＭＦが１であるか否かを判別し（ステップＥ１）、ＭＦが０である場合には、鍵非駆動モードであるので、直ちにこのフローを終了する。ＭＦが１である場合には、ＴＩＭＥの値が０になったか否かを判別する（ステップＥ２）。ＴＩＭＥの値が０でない場合には、発音指示及び消音指示のタイミングではない。すなわち、押鍵及び離鍵のタイミングではない。したがって、直ちにこのフローを終了する。
【００４２】
ステップＥ２において、ＴＩＭＥの値が０になったときは、ＡＤＤの値をインクリメントして（ステップＥ３）、図２に示したデータエリアを１つ進める。そして、ＡＤＤに対応するデータがＥＮＤデータでないか否かを判別する（ステップＥ４）。ＥＮＤデータでない場合には、そのデータはキーオン又はキーオフの鍵番号のデータである。したがって、ＡＤＤのデータがキーオンであるか否かを判別する（ステップＥ５）。
【００４３】
キーオンである場合には、レジスタＮＯＴＥにＡＤＤのデータである鍵番号をセットする（ステップＥ６）。そして、ＡＤＤをインクリメントして（ステップＥ７）、ＡＤＤのベロシティデータ、すなわち自動演奏データのベロシティデータをレジスタＶＥＬにセットする（ステップＥ８）。したがって、このＶＥＬにセットされた自動演奏データのベロシティデータが、図７の鍵処理のステップＣ３４におけるＶＥＬ（ＣＨ）のベロシティデータとなる。
【００４４】
図１０のステップＥ８の後、ＡＤＤをインクリメントして（ステップＥ９）、次のイベントデータにおけるＡＤＤのタイムデータをＴＩＭＥにセットする（ステップＥ１０）。次に、ＮＯＴＥにセットしたキーオンの鍵番号に対応するソレノイド（ＮＯＴＥ）に対し、ＶＥＬのベロシティデータの強さで通電して押鍵駆動させる（ステップＥ１１）。そして、このフローを終了する。
【００４５】
ステップＥ５において、ＡＤＤのデータがキーオフである場合には、ＮＯＴＥにＡＤＤの鍵番号のデータをセットして（ステップＥ１２）、ＡＤＤを２つインクリメントする（ステップＥ１３）。すなわち、値が０であるベロシティデータのアドレスを指定せずに、次のイベントデータのタイムデータのアドレスを指定する。そして、ＡＤＤのタイムデータをＴＩＭＥにセットする（ステップＥ１４）。次に、ＮＯＴＥにセットしたキーオフの鍵番号に対応ソレノイド（ＮＯＴＥ）の通電を停止する（ステップＥ１５）。そして、このフローを終了する。
【００４６】
ステップＥ４において、ＡＤＤのデータがＥＮＤデータである場合には、自動演奏データが終了したので、音源部８に対して消音処理を行い（ステップＥ１６）、ＳＴＦを０にリセットする（ステップＥ１７）。また、全てのソレノイドの通電を停止する（ステップＥ１８）。そして、タイマインタラプト１を禁止して（ステップＥ１９）、このフローを終了する。
【００４７】
メインフローにおける発音処理のフローを図１１に示す。チャンネルを示すポインタＣＨを１にセットして（ステップＦ１）、ＣＨをインクリメントしながら、８つの全てのチャンネルの発音指示及び消音指示を行う。消音フラグＯＦＦＦ（ＣＨ）が１であるか否かを判別し（ステップＦ２）、ＯＦＦＦ（ＣＨ）が１である場合は、音源部８に対してＮＯＴＥ（ＣＨ）の消音指示を行う（ステップＦ３）。次に、ＯＦＦＦ（ＣＨ）を０にリセットし（ステップＦ５）、ＣＨをインクリメントする（ステップＦ６）。そして、ＣＨが８（チャンネル数）を超えたか否かを判別する（ステップＦ７）。ＣＨが８以下である場合は、ステップＦ２に移行して、ＯＦＦＦ（ＣＨ）の値を判別する。
【００４８】
ＯＦＦＦ（ＣＨ）が０である場合は、発音トリガフラグＯＮＴＦ（ＣＨ）が１であるか否かを判別する（ステップＦ７）。ＯＮＴＦ（ＣＨ）が１である場合には、音源部８に対してＮＯＴＥ（ＣＨ）の音高、ＶＥＬ（ＣＨ）のベロシティで発音指示を行う（ステップＦ８）。次に、ＯＮＴＦ（ＣＨ）を０にリセットし（ステップＦ９）、ＯＮＦ（ＣＨ）を１（発音状態）にセットする（ステップＦ１０）。次に、ＣＨをインクリメントして（ステップＦ６）、ＣＨが８（チャンネル数）を超えたか否かを判別する（ステップＦ７）。ＣＨが８以下である場合は、ステップＦ２に移行して、ＯＦＦＦ（ＣＨ）の値を判別する。
【００４９】
ステップＦ７においてＯＮＴＦ（ＣＨ）が０である場合には、ＣＨで指定したチャンネルがすでに発音状態又は消音状態になっているので、ＣＨをインクリメントして（ステップＦ６）、ＣＨが８（チャンネル数）を超えたか否かを判別する（ステップＦ７）。ＣＨが８以下である場合は、ステップＦ２に移行して、ＯＦＦＦ（ＣＨ）の値を判別する。ステップＦ６において、ＣＨが８（チャンネル数）を超えた場合には、このフローを終了する。
【００５０】
図１２にタイマインタラプト１のフローを示す。タイマ部９からタイマインタラプトが入るたびにＴＩＭＥの値をデクリメントして（ステップＧ１）、メインフローに戻る。したがって、ＴＩＭＥにセットされたタイムデータの値は時間の経過に応じて減算されていく。
【００５１】
図１３は、タイマインタラプト２のフローである。鍵番号を示すポインタｍを１にセットし（ステップＨ１）、ｍをインクリメントしながら以下のループ処理を行う。フラグＫＯＮＦ（ｍ）が１であるか否かを判別する（ステップＨ２）。すなわち、ＫＥＹ（ｍ）の第１接点がオンに変化したか否かを判別する。ＫＯＮＦ（ｍ）が１である場合には、ＣＯＵＮＴ（ｍ）をインクリメントする（ステップＨ３）。ＣＯＵＮＴ（ｍ）をインクリメントした後、又はＫＯＮＦ（ｍ）が０である場合には、ｍをインクリメントして（ステップＨ４）、ｍが鍵の数を超えたか否かを判別する（ステップＨ５）。ｍが鍵数以内である場合には、ステップＨ２に移行してＫＯＮＦ（ｍ）の値を判別し、ｍが鍵数を超えた場合、すなわち第１接点がオンで第２接点がまだオンになっていない全ての鍵について、ＣＯＵＮＴ（ｍ）のインクリメントが終了したときは、メインフローに戻る。
【００５２】
このように、上記実施形態によれば、鍵駆動手段であるソレノイド機構２によって自動演奏を行う場合にも、押鍵駆動された鍵の速度の検出によるベロシティデータではなく、自動演奏曲のベロシティデータに応じて発音を制御する。したがって、鍵駆動手段によって自動演奏を行う場合に、自動演奏曲のベロシティデータを正確に反映した発音ができる。
【００５３】
なお、ユーザによっては、自動演奏曲のベロシティデータを正確に反映するよりも、各鍵に対応した複数のソレノイド機構の特性のばらつきをむしろ人間的な音として好む場合もある。上記実施形態によれば、自動演奏曲のベロシティデータ又は押鍵速度の検出によって生成されたベロシティデータのいずれかを自在に選択して発音を行うので、ユーザの好みに応じた発音を自在に選択することができる。
【００５４】
【発明の効果】
本発明によれば、鍵駆動手段によって自動演奏を行う場合にも、押鍵駆動された鍵の速度の検出によるベロシティデータではなく、自動演奏曲のベロシティデータに応じて発音を制御する。したがって、鍵駆動手段によって自動演奏を行う場合に、自動演奏曲のベロシティデータを正確に反映した発音ができる。
【図面の簡単な説明】
【図１】実施形態における自動演奏装置のシステム構成を示すブロック図。
【図２】図１のＲＡＭにおける自動演奏データの構成を示す図。
【図３】図１のＣＰＵのメインフローチャート。
【図４】図３におけるスイッチ処理のフローチャート。
【図５】図３における鍵処理のフローチャート。
【図６】図５に続く鍵処理のフローチャート。
【図７】図５に続く鍵処理のフローチャート。
【図８】図３における自動演奏処理のフローチャート。
【図９】図８に続く自動演奏処理のフローチャート。
【図１０】図３における自動鍵処理のフローチャート。
【図１１】図３における発音処理のフローチャート。
【図１２】タイマインタラプト１のフローチャート。
【図１３】タイマインタラプト２のフローチャート。
【符号の説明】
１  鍵盤
２  ソレノイド機構
３  ＣＰＵ
５  プログラムＲＯＭ
６  ワークＲＡＭ
７  自動演奏データメモリ
８  音源部
【図１】
0003775058.tif 000002
【図２】
0003775058.tif 000003
【図３】
0003775058.tif 000004
【図４】
0003775058.tif 000005
【図５】
0003775058.tif 000006
【図６】
0003775058.tif 000007
【図７】
0003775058.tif 000008
【図８】
0003775058.tif 000009
【図９】
0003775058.tif 000010
【図１０】
0003775058.tif 000011
【図１１】
0003775058.tif 000012
【図１２】
0003775058.tif 000013
【図１３】
0003775058.tif 000014