(57)【特許請求の範囲】
【請求項１】
演奏上のイベントの内容を表す演奏情報を発生する演奏情報発生手段と、
前記演奏情報発生手段が発生させた演奏情報を外部に出力する演奏情報出力手段と、
外部機器から出力された演奏情報を入力する演奏情報入力手段と、
前記演奏情報に従って楽音を発生させる楽音発生手段と、
前記演奏情報出力手段が出力した検出のための演奏情報と同一の演奏情報が、該演奏情報が出力されてから所定時間が経過するまでの監視期間内に前記演奏情報入力手段に入力された場合を第１の状態として検出する一方、それ以外の場合を第２の状態として検出する演奏情報検出手段と、
前記演奏情報検出手段が前記第１の状態を検出した場合は、前記演奏情報発生手段が発生させた演奏情報を前記楽音発生手段に出力させないようにする一方、前記演奏情報検出手段が前記第２の状態を検出した場合は、前記演奏情報発生手段が発生させた演奏情報を前記楽音発生手段に出力させる制御手段と、
を具備したことを特徴とする楽音発生装置。
【請求項２】
前記制御手段は、前記演奏情報検出手段が前記第１の状態を検出した場合は、前記演奏情報発生手段が発生させた演奏情報の前記楽音発生手段への出力、及び前記演奏情報出力手段による前記演奏情報の出力の何れか一方を行わないようにする、
ことを特徴とする請求項１記載の楽音発生装置。
【請求項３】
コンピュータ読み取り可能な記録媒体であって、
コンピュータを、
演奏上のイベントの内容を表す演奏情報を発生する手段と、
前記発生する手段が発生させた演奏情報を外部に出力する手段と、
外部機器から出力された演奏情報を入力する手段と、
前記演奏情報に従って楽音を発生させる手段と、
前記出力する手段が出力した検出のための演奏情報と同一の演奏情報が、該演奏情報が出力されてから所定時間が経過するまでの監視期間内に前記入力する手段によって入力された場合を第１の状態として検出する一方、それ以外の場合を第２の状態として検出する手段と、
前記検出する手段が前記第１の状態を検出した場合は、前記発生する手段が発生させた演奏情報を前記発生させる手段に処理させないようにする一方、前記検出する手段が前記第２の状態を検出した場合は、前記発生する手段が発生させた演奏情報を前記発生させる手段に処理させて楽音を発生させる制御を行う手段、
として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、外部機器と演奏情報の送受信を行える楽音発生装置に関する。
【０００２】
【従来の技術】
現在では、ＭＩＤＩは広く普及し、電子楽器等の楽音発生装置の殆どはＭＩＤＩ対応、即ちＭＩＤＩデータを送受信する機能が搭載されるようになっている。そのため、他の楽音発生装置と有機的な結びつきを持たせることが容易に行えるようになっている。
【０００３】
鍵盤やペダル、或いはピッチベンダー等といった演奏操作子、及び内部音源装置を備えた楽音発生装置では、一般的に、演奏操作子への操作に応じた楽音の発音に内部音源装置を用いる（ローカルオン）か、その内部音源装置を用いない（ローカルオフ）かを設定するローカル機能が搭載されている。
【０００４】
ローカルオンが設定された場合、演奏操作子への操作に応じた楽音が内部音源装置から発音され、また、その楽音に対応するＭＩＤＩデータが、送信用のＭＩＤＩ端子（以降、ＭＩＤＩ  ＯＵＴ端子と呼ぶ）から外部に送信される。これは、ペダルやホイール等の操作子が操作された場合、更には音響効果等が選択されたような場合も同様である。
【０００５】
一方、ローカルオフに設定された場合では、演奏操作子が操作されても内部音源装置には楽音の発音が指示されず、ＭＩＤＩ  ＯＵＴ端子からＭＩＤＩデータだけが外部に送信される。これは、演奏操作子の種類に関わらず同じである。
【０００６】
上記ローカルオン、及びローカルオフの何れが設定されている場合であっても、受信用のＭＩＤＩ端子（以降、ＭＩＤＩ  ＩＮ端子と呼ぶ）がＭＩＤＩデータを受信すると、そのＭＩＤＩデータを処理して内部音源装置に楽音を発音させるようになっている。
【０００７】
【発明が解決しようとする課題】
上記のような従来の楽音発生装置では、搭載されたローカル機能によって、他の楽音発生装置に発生（発音）させる楽音のコントロール用としてのみ使用するか否か選択することができる。しかし、基本的にそれ以外のことはできず、他の楽音発生装置を接続した際の利用形態の幅が狭いという問題点があった。
【０００８】
その問題点によって、従来の楽音発生装置では、以下のようなことを行うことができなかった。
例えば、自動伴奏との合奏を従来の楽音発生装置で行った場合には、内部音源装置での楽音の発音は自動伴奏によるものだけとして自身の演奏によっては楽音を発音させないようすることはできなかった。また、音響効果を付加させる場合には、内部音源装置で発音される楽音には付加させずに、他の楽音発生装置で発音される楽音だけに付加させるようなことはできなかった。
【０００９】
本発明の課題は、他の楽音発生装置と接続した際に可能な利用形態の幅を広げられるようにすることにある。
【００１０】
【課題を解決するための手段】
本発明の第１の態様の楽音発生装置は、演奏上のイベントの内容を表す演奏情報を発生する演奏情報発生手段と、演奏情報発生手段が発生させた演奏情報を外部に出力する演奏情報出力手段と、外部機器から出力された演奏情報を入力する演奏情報入力手段と、演奏情報に従って楽音を発生させる楽音発生手段と、演奏情報出力手段が出力した検出のための演奏情報と同一の演奏情報が、該演奏情報が出力されてから所定時間が経過するまでの監視期間内に演奏情報入力手段に入力された場合を第１の状態として検出する一方、それ以外の場合を第２の状態として検出する演奏情報検出手段と、演奏情報検出手段が第１の状態を検出した場合は、演奏情報発生手段が発生させた演奏情報を楽音発生手段に出力させないようにする一方、演奏情報検出手段が第２の状態を検出した場合は、演奏情報発生手段が発生させた演奏情報を楽音発生手段に出力させる制御手段と、を具備する。
【００１１】
なお、上記の構成において、制御手段は、演奏情報検出手段が第１の状態を検出した場合は、演奏情報発生手段が発生させた演奏情報の楽音発生手段への出力、及び演奏情報出力手段による演奏情報の出力の何れか一方を行わないようにする、ことが望ましい。
【００１４】
本発明の第１の態様のコンピュータ読み取り可能な記録媒体は、コンピュータを、演奏上のイベントの内容を表す演奏情報を発生する手段と、発生する手段が発生させた演奏情報を外部に出力する手段と、外部機器から出力された演奏情報を入力する手段と、演奏情報に従って楽音を発生させる手段と、出力する手段が出力した検出のための演奏情報と同一の演奏情報が、該演奏情報が出力されてから所定時間が経過するまでの監視期間内に入力する手段によって入力された場合を第１の状態として検出する一方、それ以外の場合を第２の状態として検出する手段と、検出する手段が第１の状態を検出した場合は、発生する手段が発生させた演奏情報を発生させる手段に処理させないようにする一方、検出する手段が第２の状態を検出した場合は、発生する手段が発生させた演奏情報を発生させる手段に処理させて楽音を発生させる制御を行う手段、として機能させるためのプログラムを記録している。
【００１７】
本発明では、出力した検出のための演奏情報と同一の演奏情報が、その演奏情報が出力されてから所定時間が経過するまでの監視期間内に入力されるか否か検出し、その検出結果に基づいて、内部で発生させた演奏情報を内部音源である楽音発生手段に出力させるか否か制御する。それにより、外部に出力した演奏情報と同一の演奏情報を重ねて処理するようなことを確実に回避するのが可能となる。
【００２０】
【発明の実施の形態】
以下、図面を参照しながら、本発明の実施の形態につき詳細に説明する。
図１は、本実施の形態による電子楽器の構成図である。
【００２１】
その電子楽器１００は、図１に示すように、楽器１００全体の制御を行うＣＰＵ１０１と、そのＣＰＵ１０１が実行するプログラム等を格納したプログラムＲＯＭ１０２と、ＣＰＵ１０１がワーク用に使用するワーク用ＲＡＭ１０３と、ＣＰＵ１０１の指示に従って楽音の波形データを生成する音源ＬＳＩ１０４と、その音源ＬＳＩ１０４から波形データを入力して楽音を発音する発音回路１０５と、ユーザが足で操作するペダル１０６と、多数の鍵を有する鍵盤１０７と、各種スイッチを有するスイッチ群１０８と、外部機器とＭＩＤＩデータの送受信を行うＭＩＤＩインターフェイス回路１０９と、を備えて構成される。
【００２２】
以上の構成において、その動作を説明する。
不図示の電源がオンされると、ＣＰＵ１０１はプログラムＲＯＭ１０２に格納されたプログラムを読み出して実行することにより、楽器１００全体の制御を開始する。その後は、ワーク用ＲＡＭ１０３を作業用に使用しながら、ペダル１０６、鍵盤１０７、及びスイッチ群１０８の操作状態、更にはＭＩＤＩインターフェイス回路１０９によるＭＩＤＩデータの受信の有無に応じた制御を行う。
【００２３】
上記スイッチ群１０８を構成するスイッチのなかには、ローカルオンオフ設定スイッチ群１０８ａ、ＭＩＤＩ  ＯＵＴチャネル設定スイッチ群１０８ｂ、ローカル機能有効／無効設定スイッチ１０８ｃ〜１０８ｅがある。それらのスイッチ、或いはスイッチ群は、以下の内容の設定用である。
【００２４】
なお、スイッチ群１０８を構成する他のスイッチとしては、楽音に付加する音響効果を指定するためのスイッチや、その深さを指定（調整）するためのスイッチ、自動演奏させる曲を指定するためのスイッチ、音色を指定するためのスイッチ等がある。
【００２５】
ローカルオンオフ設定スイッチ群１０８ａは、ＭＩＤＩチャネル数に合わせて設けられた計１６個のスイッチから構成されている。それらのスイッチは、ＭＩＤＩチャネル毎にローカルオンか否か、即ちそのＭＩＤＩチャネルのデータは外部に送信させるだけか否かを設定するためのスイッチである。
【００２６】
ＭＩＤＩ  ＯＵＴチャネル設定スイッチ群１０８ｂは、上記ローカルオンオフ設定スイッチ群１０８ａと同様に、計１６個のスイッチから構成されている。それらのスイッチは、送信するＭＩＤＩデータのチャネルを設定するためのスイッチである。本実施の形態では、それらのなかで最後に操作されたスイッチに割り当てているチャネルをそのチャネルとして設定している。
【００２７】
演奏内容は様々に分類することができる。ローカル機能有効／無効設定スイッチ１０８ｃ〜１０８ｅは、演奏内容別に、ローカルオンオフ設定スイッチ群１０８ａを介して行われた設定が有効か否かを設定するためのスイッチである。具体的には、ローカル機能有効／無効設定スイッチ１０８ｃは楽音の発音に直接的に関わるノートオン、ノートオフのノートメッセージ、スイッチ１０８ｄはコントロールチェンジに関するメッセージであるコントロールメッセージ、スイッチ１０８ｅはその他のメッセージが有効か否かの設定用である。それらのスイッチ１０８ｃ〜１０８ｅを操作することで、ペダル１０６、鍵盤１０７、或いはスイッチ群１０８が操作されることに伴って音源ＬＳＩ１０４に制御コマンド（例えばＭＩＤＩデータ）を送るか否かを、演奏内容別に指定することができるようにしている。
【００２８】
ＣＰＵ１０１は、スイッチ群１０８を走査することにより、各スイッチの操作状態を検出し、その検出結果に従って設定を行う。その設定は、後述するように、予め用意した変数（レジスタ）に、操作状態に応じて保持させる値を変更することで行う。そのようにして変数（レジスタ）に保持させた値を参照して各部の制御を行うことにより、各スイッチを介して指定された動作を実現させる。
【００２９】
その一方では、ＭＩＤＩインターフェイス回路１０９がＭＩＤＩデータを受信する度に、それの処理を行う。その処理は、例えば受信したＭＩＤＩデータをそのまま内部音源である音源ＬＳＩ１０４に送ることで行う。
【００３０】
音源ＬＳＩ１０４は、例えばＰＣＭ録音された楽音の波形データを基にして、発音させる楽音の波形データを生成する。音響効果は、その生成した波形データを加工することで付加する。そのようにして生成した波形データが発音回路１０５に出力される。
【００３１】
その発音回路１０５は、例えばＤ／Ａコンバータ、アンプ、及びスピーカから構成される。音源ＬＳＩ１０４が出力した波形データをアナログのオーディオ信号に変換し、それを増幅した後、スピーカに入力させる。そのようにして楽音を発音させる。
【００３２】
上記ＭＩＤＩインターフェイス回路１０９は、特には図示していないが、ＭＩＤＩ端子として、ＭＩＤＩ  ＩＮ端子、ＭＩＤＩ  ＯＵＴ端子、及びＭＩＤＩ  ＴＨＲＵ端子の３つを備えている。ＭＩＤＩ  ＩＮ端子はＭＩＤＩデータの受信用、ＭＩＤＩ  ＯＵＴ端子はＭＩＤＩデータの送信用、ＭＩＤＩ  ＴＨＲＵ端子はＭＩＤＩ  ＩＮ端子で受信したＭＩＤＩデータをそのまま送信するための端子である。
【００３３】
ＭＩＤＩインターフェイス回路１０９は、例えば受信したＭＩＤＩデータ、及び送信すべきＭＩＤＩデータを一時格納しておくためのバッファを備えている。そのバッファには、受信したＭＩＤＩデータの格納用、送信させるＭＩＤＩデータの格納用といったように、処理別に領域が設けられている。ＣＰＵ１０１は、ＭＩＤＩデータの受信を、そのバッファ内の受信したＭＩＤＩデータ格納用の領域にアクセスすることで認識する。ＭＩＤＩデータの送信は、そのバッファ内の送信させるＭＩＤＩデータの格納用の領域に、ＭＩＤＩデータを書き込むことで、ＭＩＤＩインターフェイス回路１０９に行わせる。なお、以降、そのバッファについてはＭＩＤＩデータバッファ、その内のＭＩＤＩデータ受信用の領域は受信用領域、ＭＩＤＩデータ送信用の領域は送信用領域と呼ぶことにする。
【００３４】
次に、上記ＣＰＵ１０１の動作について、図２〜図１２に示す各種の動作フローチャートを参照して詳細に説明する。それらの動作フローチャートは、ＣＰＵ１０１が、プログラムＲＯＭ１０２に格納されたプログラムを読み出して実行することで実現される。
【００３５】
図２は、全体処理の動作フローチャートである。始めに、この図２を参照して、全体処理について詳細に説明する。
電子楽器１００の特には図示しない電源がオンされ、プログラムＲＯＭ１０２に格納されているプログラムの実行を開始したＣＰＵ１０１は、先ず、ステップ２０１でイニシャライズ処理を行う。そのイニシャライズ処理を実行することによって、音源システムＬＳＩ１０４等は予め定められた状態に設定される。また、外部機器との接続状態が検出され、その検出結果に応じた設定が行われる。その後、ステップ２０２に移行する。
【００３６】
ステップ２０２では、スイッチ処理を行う。このスイッチ処理は、スイッチ群１０８を走査し、その走査結果に応じて各種の設定を行う処理である。これを実行することにより、電子楽器１００への操作に応じて生成されたＭＩＤＩデータを送信するＭＩＤＩチャネル、音源ＬＳＩ１０４に処理させるべき演奏情報（メッセージ）の種類等が特定される。
【００３７】
ステップ２０２に続くステップ２０３では、鍵盤処理を行う。この鍵盤処理は、鍵盤１０７を走査し、その走査結果に従った楽音の発音／消音の指示を、その時点での設定内容に応じて行う処理である。それが終了すると、ステップ２０４に移行する。
【００３８】
ステップ２０４では、ペダル処理を行う。そのペダル処理は、上記鍵盤処理と同様に、ペダル１０６を走査し、その走査結果に従ったダンパー（ホールド）のオン／オフの指示を、その時点での設定内容に応じて行う処理である。
【００３９】
ステップ２０４に続くステップ２０５では、ＭＩＤＩインターフェイス回路１０９が外部機器から受信したＭＩＤＩデータを処理するＭＩＤＩＩＮ処理を実行する。その後、ステップ２０２に戻る。
【００４０】
上記ステップ２０２〜２０５は処理ループを形成している。その処理ループを繰り返し実行することにより、電子楽器１００に搭載された機能が実現され、スイッチ群１０８を介してユーザが行った設定に従って、ＭＩＤＩデータの送信や音源ＬＳＩ１０４への発音指示等が行われることになる。
【００４１】
以降は、上記全体処理内で実行されるサブルーチン処理の内容について、詳細に説明する。
図３は、上記ステップ２０１として実行されるイニシャライズ処理の動作フローチャートである。次に、図３を参照して、そのイニシャライズ処理の内容について詳細に説明する。
【００４２】
先ず、ステップ３０１では、ワーク用ＲＡＭ１０３のクリアや、音源ＬＳＩ１０４を所定の状態に設定するといった各種の初期化を行う。それが終了すると、ステップ３０２に移行して、外部機器との接続状態を検出するＭＩＤＩ  ＩＮ／ＯＵＴループ検出処理を実行する。その後、ステップ３０３に移行する。
【００４３】
ステップ３０３では、ワーク用ＲＡＭ１０３に保持させる変数のなかの幾つかに、予め定められた値を代入する。具体的には、電子楽器１００がＭＩＤＩデータを送信するチャネル番号を管理するための変数ＭＩＤＩＯＵＴＣＨに１、音源ＬＳＩ１０４に鍵盤１０７への操作に応じて生成した制御コマンド（ＭＩＤＩデータ）を送るか否かを管理するための変数ＬＯＣＡＬＦＵＮＣＮＯＴＥに１、ペダル１０６への操作に応じて生成した制御コマンド（ＭＩＤＩデータ）を音源ＬＳＩ１０４に送るか否かを管理するための変数ＬＯＣＡＬＦＵＮＣＣＴＲＬに１、及び、スイッチ群１０８が備えた音色選択用スイッチ等への操作に応じて生成した制御コマンド（ＭＩＤＩデータ）を音源ＬＳＩ１０４に送るか否かを管理するための変数ＬＯＣＡＬＦＵＮＣＯＴＨＥＲＳに１を各々代入する。
【００４４】
変数ＭＩＤＩＯＵＴＣＨに代入された１は、１６あるＭＩＤＩチャネル中の１チャネルを表す値である（１チャネルはＭＩＤＩデータ上では０である）。その変数には、選択したＭＩＤＩチャネルの番号（ＭＩＤＩデータでの値に１を加算した値）が代入される。変数ＬＯＣＡＬＦＵＮＣＮＯＴＥ、ＬＯＣＡＬＦＵＮＣＣＴＲＬ、及びＬＯＣＡＬＦＵＮＣＯＴＨＥＲＳに各々代入された１は、音源ＬＳＩ１０４に制御コマンド（ＭＩＤＩデータ）を送出させる、即ち設定がローカルオン（有効）であることを表す値である。設定がローカルオフ（無効）のときの値は０である。なお、以降、変数についてはレジスタと呼ぶことにする。
【００４５】
上記のようにして、電子楽器１００の初期設定が行われる。そのときにステップ３０３で値が代入された各レジスタの値は、その後のユーザのスイッチ群１０８への操作、より具体的には、ローカルオンオフ設定スイッチ群１０８ａ、ＭＩＤＩ  ＯＵＴチャネル設定スイッチ群１０８ｂ、ローカル機能有効／無効設定スイッチ１０８ｃ〜１０８ｅへの操作に応じて変更されることになる。
【００４６】
次に、上記ステップ３０２として実行されるＭＩＤＩ  ＩＮ／ＯＵＴループ検出処理について、図４に示すその動作フローチャートを参照して詳細に説明する。
【００４７】
他の楽音発生装置を接続させてシステムを構築させる場合、その接続によっては電子楽器１００が出力したＭＩＤＩデータが帰還されてしまうことがある。送信したＭＩＤＩデータが帰還すると、同じ楽音が二重に発音されたり（このとき、その楽音の音量はそうでないときよりも大きくなる）、音響効果では所望の変調がかけられなくなったりすることから、演奏に悪影響を及ぼす恐れがある。ＭＩＤＩ  ＩＮ／ＯＵＴループ検出処理は、そのような悪影響が発生するのを回避するために行われる処理である。
【００４８】
なお、ＭＩＤＩデータが帰還する接続例としては、自身の演奏内容を記録させるために、シーケンサに電子楽器１００を接続した場合が挙げられる。その場合、記録された内容を確認するために、シーケンサが出力したＭＩＤＩデータを電子楽器１００が入力するように接続されることが多い。そのシーケンサは、入力したＭＩＤＩデータをそのまま出力するようになっているものが殆どである。このため、そのように接続した場合、電子楽器１００が出力したＭＩＤＩデータが帰還することになる。
【００４９】
先ず、ステップ４０１では、レジスタＭＩＤＩＯＵＴＣＨに１を代入する。そのレジスタＭＩＤＩＯＵＴＣＨは、ここでは各ＭＩＤＩチャネル毎にＭＩＤＩデータが帰還するか否かを検出していくために用いられる。
【００５０】
ステップ４０１に続くステップ４０２では、ＭＩＤＩデータが帰還するループ接続となっているか否かを検出するためのＭＩＤＩデータを生成し、それを外部に送出させる。そのＭＩＤＩデータとしては、外部機器が実際に動作しないように、本実施の形態では、コントロールチェンジメッセージであることを表す値ｂ０（Ｈｅｘ）に、レジスタＭＩＤＩＯＵＴＣＨの値から１を減算した値を加算してステータスバイト（１バイト目のデータ）を生成し、そのステータスバイトに、コントロールナンバーとしてダンパー（ホールド）を表す値４０（Ｈｅｘ）、ダンパーオフを表す値００（Ｈｅｘ）を、各々２バイト目、３バイト目のデータバイトとして付加することで生成している。
【００５１】
なお、そのようにして生成したＭＩＤＩデータの外部への出力は、ＣＰＵ１０１が、そのＭＩＤＩデータをＭＩＤＩインターフェイス回路１０９のＭＩＤＩデータバッファ内の送信用領域に書き込むことで実現される。生成するＭＩＤＩデータとしては、当然のことながら、他のＭＩＤＩデータでも良い。
【００５２】
ＭＩＤＩデータを送信させた後は、ステップ４０３に移行し、タイマをクリアする。そのタイマは、例えばＣＰＵ１０１が備えたハードタイマが所定時間計時する度に値をインクリメントさせる変数（レジスタ）である。そのレジスタをクリア、即ち０を代入させると、ステップ４０４に移行する。なお、そのレジスタについては、以降、タイマ用レジスタと呼ぶことにする。
【００５３】
ステップ４０４では、ステップ４０２で送信させたＭＩＤＩデータが受信されたか否か判定する。そのＭＩＤＩデータが、ＭＩＤＩインターフェイス回路１０９のＭＩＤＩデータバッファ内の受信用領域に格納されていた場合、その判定はＹＥＳとなってステップ４０５に移行する。そうでない場合には、その判定はＮＯとなってステップ４０８に移行する。
【００５４】
ステップ４０５では、ＭＩＤＩデータが帰還するＭＩＤＩチャネルを管理するためのレジスタ（配列変数）ＬＯＣＡＬＭＯＤＥの変数ＭＩＤＩＯＵＴＣＨの値で特定される要素ＬＯＣＡＬＭＯＤＥ［ＭＩＤＩＯＵＴＣＨ］に、ＭＩＤＩデータの帰還が確認されたことから、ローカルオフを表す値である０を代入する。続くステップ４０６では、レジスタＭＩＤＩＯＵＴＣＨの値をインクリメントする。その後、ステップ４０７に移行する。
【００５５】
ステップ４０７では、インクリメント後のレジスタＭＩＤＩＯＵＴＣＨの値が１７か否か判定する。周知のように、ＭＩＤＩにおけるチャネル数は１６である。変数ＭＩＤＩＯＵＴＣＨの初期値は１である。そのため、全てのＭＩＤＩチャネルでチェックが終了した場合、その判定はＹＥＳとなって一連の処理を終了する。そうでない場合には、その判定はＮＯとなってステップ４０２に戻り、それ以降の処理を同様に繰り返す。
【００５６】
一方、ステップ４０４の判定がＮＯ、即ちＭＩＤＩデータを受信したと判定しなかった場合には、ステップ４０８に移行し、タイマ用レジスタの値をインクリメントする。そのインクリメントは、上記したように、ステップ４０３でその値をクリアしてから、或いは前回のインクリメントから所定時間経過するのを待って行う。それを行った後、ステップ４０９に移行する。
【００５７】
ステップ４０９では、そのタイマ用レジスタの値が予め定めた値に達したか否か判定する。ステップ４０２でＭＩＤＩデータを送信してからそれの帰還を監視すると定めた期間（時間：以降、監視期間と呼ぶ）が経過した場合、その判定はＹＥＳとなってステップ４１０に移行する。そうでない場合には、ステップ４０４に戻る。
【００５８】
電子楽器１００のＭＩＤＩ  ＯＵＴ端子とＭＩＤＩ  ＩＮ端子との間に接続された外部機器の数が多くなる程、ＭＩＤＩデータが帰還するのに要する時間は長くなる。そのため、上記監視期間は、楽器１００に複数の外部機器が接続されている場合も想定して定めている。その監視期間、ＭＩＤＩデータの受信を監視することで、ＭＩＤＩデータの帰還の有無を確実に検出することができる。
【００５９】
ステップ４１０では、ＭＩＤＩデータの帰還が確認されなかったことから、レジスタ（配列変数）ＬＯＣＡＬＭＯＤＥの変数ＭＩＤＩＯＵＴＣＨの値で特定される要素ＬＯＣＡＬＭＯＤＥ［ＭＩＤＩＯＵＴＣＨ］に、ローカルオンを表す値である１を代入する。その後、ステップ４０６に移行する。
【００６０】
このように、ＭＩＤＩ  ＩＮ／ＯＵＴループ検出処理では、各ＭＩＤＩチャネル毎にＭＩＤＩデータの帰還の有無を確認し、その結果をレジスタＬＯＣＡＬＭＯＤＥに各々代入させている。それにより、意図してないＭＩＤＩデータの帰還により個別、更にはシステム全体の演奏に悪影響がでるのを回避させている。
【００６１】
図５は、図２に示す全体処理内でステップ２０２として実行されるスイッチ処理の動作フローチャートである。次に、図５を参照して、その処理内容について詳細に説明する。
【００６２】
先ず、ステップ５０１では、スイッチ群１０８の走査を行い、各スイッチの操作状態を検出する。続くステップ５０２以降は、その検出結果に応じて処理が行われる。
【００６３】
そのステップ５０２では、走査を行った結果、スイッチ群１０８全体で操作状態に変化があったか否か判定する。ユーザがスイッチ群１０８を構成する何れのスイッチも操作していなかった場合、その判定はＮＯとなり、操作されたスイッチに応じた処理が不要であるとして一連の処理を終了する。そうでない場合には、即ちスイッチ群１０８を構成する何れかのスイッチをユーザが操作した場合には、その判定はＹＥＳとなってステップ５０３に移行する。
【００６４】
ステップ５０３では、レジスタＬＯＯＰに１を代入する。そのレジスタＬＯＯＰは、各ＭＩＤＩチャネルを対象とした設定を行うためのレジスタ（変数）である。代入された１は、１チャネルを表す値である。その後は、ステップ５０４に移行し、以後、操作されたスイッチの特定、その特定したスイッチに応じた設定を行う。
【００６５】
ステップ５０４〜ステップ５１１は、各ＭＩＤＩチャネルを対象とした設定を行うための処理ループを形成している。ここでは、レジスタＬＯＯＰの値をインクリメントしながら、その値に対応するローカルオンオフ設定スイッチ群１０８ａ中のスイッチ、及びＭＩＤＩ  ＯＵＴチャネル設定スイッチ群１０８ｂ中のスイッチへの操作の有無を判定し、その判定結果に応じた設定が行われる。なお、ローカルオンオフ設定スイッチ群１０８ａ、及びＭＩＤＩ  ＯＵＴチャネル設定スイッチ群１０８ｂ中のレジスタＬＯＯＰの値から特定されるスイッチについては、便宜的に、以降、例えばＭＩＤＩ  ＯＵＴチャネル設定スイッチＬＯＯＰといったように、ＬＯＯＰを用いて表すことにする。
【００６６】
先ず、ステップ５０４では、ローカルオンオフ設定スイッチ群１０８ａ中のレジスタＬＯＯＰの値から特定されるスイッチであるローカルオンオフ設定スイッチＬＯＯＰの入力があったか否か判定する。そのスイッチＬＯＯＰをユーザが操作した場合、その判定はＹＥＳとなってステップ５０５に移行する。そうでない場合には、その判定はＮＯとなってステップ５０８に移行する。
【００６７】
ステップ５０５では、レジスタＬＯＯＰの値から特定されるレジスタＬＯＣＡＬＭＯＤＥの要素ＬＯＣＡＬＭＯＤＥ［ＬＯＯＰ］の値が１か否か判定する。その要素に図３に示すイニシャライズ処理の実行時、レジスタＬＯＯＰの値に対応するＭＩＤＩチャネルでＭＩＤＩデータの帰還が検出されなかった、或いはローカルオンオフ設定スイッチＬＯＯＰを操作（当然のことながら、イニシャライズ処理の実行後である）してローカルオン、即ち音源ＬＳＩ１０４への楽音の発音に関わる制御コマンドを送出させるとユーザが指定（設定）した場合、その判定はＹＥＳとなってステップ５０６に移行する。そうでない場合には、その判定はＮＯとなってステップ５０７に移行する。
【００６８】
ステップ５０６では、要素ＬＯＣＡＬＭＯＤＥ［ＬＯＯＰ］に０を代入する。他方のステップ５０７では、その要素に１を代入する。そのステップ５０６、或いは５０７が終了した後は、ステップ５０８に移行する。
【００６９】
ステップ５０８では、ＭＩＤＩ  ＯＵＴチャネル設定スイッチ群１０８ｂ中のレジスタＬＯＯＰの値から特定されるスイッチであるＭＩＤＩ  ＯＵＴチャネル設定スイッチＬＯＯＰの入力があったか否か判定する。そのスイッチＬＯＯＰをユーザが操作した場合、その判定はＹＥＳとなってステップ５０９に移行する。そうでない場合には、その判定はＮＯとなってステップ５１０に移行する。
【００７０】
ステップ５０９では、レジスタＭＩＤＩＯＵＴＣＨに、レジスタＬＯＯＰの値を代入する。それにより、レジスタＬＯＯＰの現在値に対応するＭＩＤＩチャネルが、ＭＩＤＩデータを送信するチャネルとして設定される。その後は、ステップ５１０に移行して、レジスタＬＯＯＰの値をインクリメントする。
【００７１】
ステップ５１０に続くステップ５１１では、インクリメント後のレジスタＬＯＯＰの値が１７か否か判定する。ローカルオンオフ設定スイッチ群１０８ａ、及びＭＩＤＩ  ＯＵＴチャネル設定スイッチ群１０８ｂの全てのスイッチを対象に、各スイッチへの操作に応じた設定を終了した場合、その判定はＹＥＳとなってステップ５１２に移行する。そうでない場合には、その判定はＮＯとなってステップ５０４に戻る。
【００７２】
上記のようにして、ＭＩＤＩデータを出力させるチャネル、及びＭＩＤＩチャネル毎のローカルオン・オフが設定される。ＭＩＤＩデータの出力チャネルを設定できるようにしたことで、自身の演奏をチャネル別に記録（シーケンサ等を用いて）させたり、他の楽音発生装置に行わせるといったことができるようになる。ローカルオン・オフをチャネル毎に設定できるようにしたことで、自動演奏（伴奏）と自身の演奏の何れかのみを、電子楽器１００に実際に楽音を発音させる演奏として設定（選択）するといったことができるようになる。
【００７３】
ステップ５１２〜５１５は、ユーザのローカル機能有効／無効設定スイッチ１０８ｃへの操作に応じた設定を行うための処理群である。
先ず、ステップ５１２では、ローカル機能有効／無効設定スイッチ１０８ｃの入力があったか否か判定する。そのスイッチ１０８ｃを操作して鍵盤１０７への操作に応じて生成されるメッセージ（ノートメッセージ）の送出先の変更をユーザが指示した場合、その判定はＹＥＳとなってステップ５１３に移行する。そうでない場合には、即ちユーザがスイッチ１０８ｃを操作していなかった場合には、その判定はＮＯとなってステップ５１６に移行する。
【００７４】
ステップ５１３では、レジスタＬＯＣＡＬＦＵＮＣＮＯＴＥの値が１か否か判定する。それまでノートメッセージの送出先に音源ＬＳＩ１０４が設定されていた場合、その判定はＹＥＳとなってステップ５１４に移行する。そうでない場合には、即ちそのメッセージの送出先に音源ＬＳＩ１０４が設定されていない場合には、その判定はＮＯとなってステップ５１５に移行する。
【００７５】
ステップ５１４では、レジスタＬＯＣＡＬＦＵＮＣＮＯＴＥに０を代入する。他方のステップ５１５では、レジスタＬＯＣＡＬＦＵＮＣＮＯＴＥに１を代入する。それらステップ５１４、或いは５１５が終了した後、ステップ５１６に移行する。
【００７６】
ステップ５１６〜５１９は、ユーザのローカル機能有効／無効設定スイッチ１０８ｄへの操作に応じた設定を行うための処理群である。
先ず、ステップ５１６では、ローカル機能有効／無効設定スイッチ１０８ｄの入力があったか否か判定する。そのスイッチ１０８ｄを操作してペダル１０６への操作に応じて生成されるメッセージ（コントロールメッセージ）の送出先の変更をユーザが指示した場合、その判定はＹＥＳとなってステップ５１７に移行する。そうでない場合には、即ちユーザがスイッチ１０８ｄを操作していなかった場合には、その判定はＮＯとなってステップ５２０に移行する。
【００７７】
ステップ５１７では、レジスタＬＯＣＡＬＦＵＮＣＣＴＲＬの値が１か否か判定する。それまでコントロールメッセージの送出先に音源ＬＳＩ１０４が設定されていた場合、その判定はＹＥＳとなってステップ５１８に移行する。そうでない場合には、即ちそのメッセージの送出先に音源ＬＳＩ１０４が設定されていない場合には、その判定はＮＯとなってステップ５１９に移行する。
【００７８】
ステップ５１８では、レジスタＬＯＣＡＬＦＵＮＣＣＴＲＬに０を代入する。他方のステップ５１９では、レジスタＬＯＣＡＬＦＵＮＣＣＴＲＬに１を代入する。それらステップ５１８、或いは５１９が終了すると、ステップ５２０に移行する。
【００７９】
ステップ５２０〜５２３は、ユーザのローカル機能有効／無効設定スイッチ１０８ｅへの操作に応じた設定を行うための処理群である。
先ず、ステップ５２０では、ローカル機能有効／無効設定スイッチ１０８ｅの入力があったか否か判定する。そのスイッチ１０８ｅをユーザが操作して、スイッチ群１０８中で楽音の発音に直接的に関わるスイッチ（音色等の選択（設定）用のスイッチ）等への操作に応じて生成されるその他のメッセージの送出先の変更を指示した場合、その判定はＹＥＳとなってステップ５２１に移行する。そうでない場合には、即ちユーザがスイッチ１０８ｅを操作していなかった場合には、その判定はＮＯとなってステップ５２４に移行する。
【００８０】
ステップ５２１では、レジスタＬＯＣＡＬＦＵＮＣＯＴＨＥＲＳの値が１か否か判定する。それまでその他のメッセージの送出先に音源ＬＳＩ１０４が設定されていた場合、その判定はＹＥＳとなってステップ５２２に移行する。そうでない場合には、その判定はＮＯとなってステップ５２３に移行する。
【００８１】
ステップ５２２では、レジスタＬＯＣＡＬＦＵＮＣＯＴＨＥＲＳに０を代入する。他方のステップ５２３では、レジスタＬＯＣＡＬＦＵＮＣＯＴＨＥＲＳに１を代入する。それらステップ５２２、或いは５２３が終了すると、ステップ５２４に移行する。
【００８２】
そのステップ５２４では、上記した以外のスイッチへのユーザの操作に対応するための処理を行う。このとき、例えばユーザが音色選択用のスイッチを操作して楽音の音色の変更を指示していると、このステップ５２４では、そのスイッチへの操作に応じてＭＩＤＩデータ（その他のメッセージ）を生成し、それをレジスタＬＡＣＡＬＦＵＮＣＯＴＨＥＲＳの値から音源ＬＳＩ１０４に送出するか否か判定し、その判定結果に従って生成したＭＩＤＩデータ（制御コマンド）を音源ＬＳＩ１０４に送ることが行われる。一連の処理はその後に終了する。
【００８３】
このようにして、スイッチ処理では、ローカルオンオフ設定スイッチ群１０８ａ、ＭＩＤＩ  ＯＵＴチャネル設定スイッチ群１０８ｂ、及びローカル機能有効／無効設定スイッチ１０８ｃ〜１０８ｅへのユーザの操作に応じてＭＩＤＩデータを送るチャネル、音源ＬＳＩ１０４に送出するメッセージ等を設定する。その設定に従って、図２に示す全体処理中のステップ２０３の鍵盤処理、及びステップ２０４のペダル処理は実行される。
【００８４】
図６は、その鍵盤処理の動作フローチャートである。次に、この図６を参照してその処理内容を詳細に説明する。
先ず、ステップ６０１では、鍵盤１０７の走査を行い、各鍵の操作状態を検出する。続くステップ６０２以降は、その検出結果に応じて処理が行われる。
【００８５】
そのステップ６０２では、走査を行った結果、鍵盤１０７のなかで操作状態が変化した鍵があるか否か、即ち新たに離鍵、或いは押鍵された鍵があるか否か判定する。そのような鍵が無かった場合、その判定はＮＯとなり、鍵の状態の変化に応じた処理が不要であるとして一連の処理を終了する。そうでない場合には、即ち鍵盤１０７のなかで新たに操作状態が変化した鍵があった場合には、その判定はＹＥＳとなってステップ６０３に移行する。なお、その操作状態の変化の検出は、例えば前回の走査結果と今回の走査結果とを比較することで行うことができる。
【００８６】
鍵盤１０７の各鍵には、ＭＩＤＩデータで用いられるノート番号（ノートナンバー）を割り当てている。そのため、ステップ６０３では、操作状態が変化、即ち新たに押鍵、或いは離鍵された鍵に割り当てたノート番号を、そのままレジスタＮＯＴＥに代入する。その後は、ステップ６０４に移行する。
【００８７】
ステップ６０４では、押鍵によって鍵の操作状態が変化したか否か判定する。レジスタＮＯＴＥの値がノート番号に割り当てられた鍵をユーザが押鍵した場合、その判定はＹＥＳとなってステップ６０５に移行する。そうでない場合には、即ちその鍵をユーザが離鍵した場合には、その判定はＮＯとなってステップ６０９に移行する。
【００８８】
ステップ６０５では、その鍵に割り当てられたノート番号の楽音の発音を指示するＭＩＤＩデータを外部に送信するノートオンＭＩＤＩ  ＯＵＴ処理を実行する。その後は、ステップ６０６に移行する。
【００８９】
ステップ６０６では、レジスタＬＯＣＡＬＦＵＮＣＮＯＴＥの値が１か否か判定する。ユーザが音源ＬＳＩ１０４による楽音の発音を設定していた場合、その判定はＹＥＳとなってステップ６０７に移行する。そうでない場合には、その判定はＮＯとなって一連の処理を終了する。
【００９０】
ステップ６０７では、レジスタＬＯＣＡＬＭＯＤＥのレジスタＭＩＤＩＯＵＴＣＨの値で特定される要素ＬＯＣＡＬＭＯＤＥ［ＭＩＤＩＯＵＴＣＨ］の値が１か否か判定する。図３に示すイニシャライズ処理の実行時に、レジスタＭＩＤＩＯＵＴＣＨの値で特定されるＭＩＤＩチャネルでＭＩＤＩデータの帰還が検出された、或いはそのレジスタの値に対応するローカルオンオフ設定スイッチ群１０８ａ中のスイッチをユーザが操作してその要素に０（ローカルオフを表す値である）を代入させていた場合、その判定はＮＯとなって一連の処理を終了する。そうでない場合には、その判定はＹＥＳとなってステップ６０８に移行する。
【００９１】
ステップ６０８では、ユーザが押鍵した鍵に対応する楽音の発音を音源ＬＳＩ１０４に指示するアサイン処理を実行する。それが終了した後、一連の処理を終了する。なお、上記アサイン処理は、例えばステップ６０５で生成されたＭＩＤＩデータを音源ＬＳＩ１０４に送出することで行われる。
【００９２】
上記イニシャライズ処理の実行時にＭＩＤＩデータの帰還を検出したことでその要素に０が代入されていた場合、ステップ６０７の判定はＮＯとなり、ステップ６０８のアサイン処理は実行されないことになる。しかし、ステップ６０５で送信したＭＩＤＩデータはＭＩＤＩ  ＩＮ端子で受信されるため、図１２に示すＭＩＤＩＩＮ処理の実行時に処理される。それにより、ＭＩＤＩデータが帰還する場合には、同じ楽音を２重に発音させることは回避されることになる。
【００９３】
一方、ＭＩＤＩデータが帰還しない場合（これは、ＭＩＤＩ  ＯＵＴ端子が外部機器に接続されていない場合も含んでいる）では、たとえ楽音の発音に音源ＬＳＩ１０４を設定していても（レジスタＬＯＣＡＬＦＵＮＣＮＯＴＥの値は１）、要素ＬＯＣＡＬＭＯＤＥ［ＭＩＤＩＯＵＴＣＨ］の値を０とすれば、ステップ６０８のアサイン処理は行われないため、音源ＬＳＩ１０４による楽音の発音が回避されることになる。
【００９４】
そのように設定すると、電子楽器１００は、受信したＭＩＤＩデータに従って発音される楽音に音響効果を付加したり、その変調の深さを変更させたりといった用途に限定されることになる。言い換えれば、複数の楽音発生装置を接続して構築されたシステム内での電子楽器１００の役割を特定させるようなことができる。そのため、システム内での電子楽器（楽音発生装置）１００の用途（利用形態）の幅が広がり、新たな演奏の形態の実現に寄与することも可能である。
【００９５】
一方、ユーザが鍵を離鍵してステップ６０４の判定がＮＯとなることで実行されるステップ６０９では、その鍵に割り当てられたノート番号の楽音の消音を指示するＭＩＤＩデータを外部に送信するノートオフＭＩＤＩ  ＯＵＴ処理を実行する。その後は、ステップ６１０に移行する。
【００９６】
ステップ６１０では、レジスタＬＯＣＡＬＦＵＮＣＮＯＴＥの値が１か否か判定する。ユーザが音源ＬＳＩ１０４による楽音の発音を設定していた場合、その判定はＹＥＳとなってステップ６１１に移行する。そうでない場合には、その判定はＮＯとなって一連の処理を終了する。
【００９７】
ステップ６１１では、レジスタＬＯＣＡＬＭＯＤＥのレジスタＭＩＤＩＯＵＴＣＨの値で特定される要素ＬＯＣＡＬＭＯＤＥ［ＭＩＤＩＯＵＴＣＨ］の値が１か否か判定する。図３に示すイニシャライズ処理の実行時に、レジスタＭＩＤＩＯＵＴＣＨの値で特定されるＭＩＤＩチャネルでＭＩＤＩデータの帰還が検出された、或いはそのレジスタの値に対応するローカルオンオフ設定スイッチ群１０８ａ中のスイッチをユーザが操作してその要素に０（ローカルオフを表す値である）を代入させていた場合、その判定はＮＯとなって一連の処理を終了する。そうでない場合には、その判定はＹＥＳとなってステップ６１２に移行する。
【００９８】
ステップ６１２では、ユーザが押鍵した鍵に対応する楽音の消音を音源ＬＳＩ１０４に指示する消音処理を実行する。それが終了した後、一連の処理を終了する。なお、上記消音処理は、例えばステップ６０９で生成されたＭＩＤＩデータを音源ＬＳＩ１０４に送出することで行われる。
【００９９】
次に、上記鍵盤処理内で実行されるサブルーチン処理について、図７及び図８を参照して詳細に説明する。
図７は、鍵盤処理内でステップ６０５として実行されるノートオンＭＩＤＩ  ＯＵＴ処理の動作フローチャートである。始めに、図７を参照して、その処理内容について詳細に説明する。
【０１００】
このノートオンＭＩＤＩ  ＯＵＴ処理は、ノートオンメッセージのＭＩＤＩデータを送信する。そのＭＩＤＩデータは、周知のように、メッセージがノートオンであることを表すステータスバイトと、発音させる楽音の音高を表すノート番号を格納したデータバイトと、その楽音を発音させる音量を表すベロシティデータを格納したデータバイトとから構成される。ここでは、それらを順次生成・送信していくことが行われる。
【０１０１】
先ず、ステップ７０１では、ノートオンメッセージであることを表す９０（Ｈｅｘ）に、ＭＩＤＩデータを送信するチャネル番号を格納したレジスタＭＩＤＩＯＵＴＣＨの値から１を減算した値を加算し、それを１バイト目のデータとして送信する。
【０１０２】
続くステップ７０２では、レジスタＮＯＴＥに格納されている値（押鍵された鍵のノート番号）を２バイト目のデータとして送信する。その後に移行するステップ７０３では、３バイト目のベロシティデータとして７ｆ（Ｈｅｘ）を送信する。そのベロシティデータを送信した後、一連の処理を終了する。
【０１０３】
なお、上記のデータの送信は、ＣＰＵ１０１が、ＭＩＤＩインターフェイス回路１０９のＭＩＤＩデータバッファ内の送信用領域に送信させるデータを書き込むことで行われる。
【０１０４】
図８は、鍵盤処理内でステップ６０９として実行されるノートオフＭＩＤＩ  ＯＵＴ処理の動作フローチャートである。次に、図８を参照して、その処理内容について詳細に説明する。
【０１０５】
このノートオフＭＩＤＩ  ＯＵＴ処理は、ノートオフメッセージのＭＩＤＩデータを送信する。そのＭＩＤＩデータは、通常、メッセージがノートオフであることを表すステータスバイトと、消音させる楽音の音高を表すノート番号を格納したデータバイトと、ベロシティデータを格納したデータバイトとから構成される。ここでは、それらを順次生成・送信していくことが行われる。なお、周知のように、ステータスバイトがノートオンメッセージでベロシティデータが００（Ｈｅｘ）としても、そのＭＩＤＩデータはノートオフメッセージのＭＩＤＩデータと解釈される。
【０１０６】
先ず、ステップ８０１では、ノートオフメッセージであることを表す８０（Ｈｅｘ）に、ＭＩＤＩデータを送信するチャネル番号を格納したレジスタＭＩＤＩＯＵＴＣＨの値から１を減算した値を加算し、それを１バイト目のデータとして送信する。
【０１０７】
続くステップ８０２では、レジスタＮＯＴＥに格納されている値（離鍵された鍵のノート番号）を２バイト目のデータとして送信する。その後に移行するステップ８０３では、３バイト目のベロシティデータとして００（Ｈｅｘ）を送信する。そのベロシティデータを送信した後、一連の処理を終了する。
【０１０８】
なお、上記のデータの送信は、ＣＰＵ１０１が、ＭＩＤＩインターフェイス回路１０９のＭＩＤＩデータバッファ内の送信用領域に送信させるデータを書き込むことで行われる。
【０１０９】
以上の内容のサブルーチン処理が、図６の鍵盤処理内で実行される。次に、図２に示す全体処理内でステップ２０４として実行されるペダル処理について、図９に示すその動作フローチャートを参照して詳細に説明する。
【０１１０】
本実施の形態では、ペダル１０６にダンパーペダルの機能を割り当てている。そのため、ここでは、ユーザのペダル１０６への操作に応じてダンパーのオン／オフ、即ち発音させている楽音をホールドさせるか否かを判定し、その判定結果に従って処理が行われる。
【０１１１】
先ず、ステップ９０１では、ペダル１０６の走査を行い、ペダル１０６の操作状態を検出する。続くステップ９０２以降は、その検出結果に応じて処理が行われる。
【０１１２】
そのステップ９０２では、走査を行った結果、ペダル１０６の操作状態が変化したか否か判定する。ユーザがペダル１０６を踏み込む、或いは離すといったことを行わなかった場合、その判定はＮＯとなり、ペダル１０６の状態の変化に応じた処理が不要であるとして一連の処理を終了する。そうでない場合には、即ちユーザがペダル１０６への操作を行った場合には、その判定はＹＥＳとなってステップ９０３に移行する。なお、その操作状態の変化の検出は、例えば前回の走査結果と今回の走査結果とを比較することで行うことができる。
【０１１３】
ステップ９０３では、ペダル１０６の操作状態の変化がユーザの踏み込みによる変化であるのか否か判定する。ユーザがペダル１０６を踏み込んだ場合、その判定はＹＥＳとなってステップ９０４に移行する。そうでない場合には、即ちユーザがペダル１０６を離した場合には、その判定はＮＯとなってステップ９０８に移行する。
【０１１４】
ステップ９０４では、ダンパーオンを指示するＭＩＤＩデータを外部に送信するダンパーオンＭＩＤＩ  ＯＵＴ処理を実行する。その後は、ステップ９０５に移行する。
【０１１５】
ステップ９０５では、レジスタＬＯＣＡＬＦＵＮＣＣＴＲＬの値が１か否か判定する。ユーザがペダル１０６への操作を音源ＬＳＩ１０４による楽音の発音に反映させることを設定していた場合、その判定はＹＥＳとなってステップ９０６に移行する。そうでない場合には、その判定はＮＯとなって一連の処理を終了する。
【０１１６】
ステップ９０６では、レジスタＬＯＣＡＬＭＯＤＥのレジスタＭＩＤＩＯＵＴＣＨの値で特定される要素ＬＯＣＡＬＭＯＤＥ［ＭＩＤＩＯＵＴＣＨ］の値が１か否か判定する。図３に示すイニシャライズ処理の実行時に、レジスタＭＩＤＩＯＵＴＣＨの値で特定されるＭＩＤＩチャネルでＭＩＤＩデータの帰還が検出された、或いはそのレジスタの値に対応するローカルオンオフ設定スイッチ群１０８ａ中のスイッチをユーザが操作してその要素に０を代入させていた場合、その判定はＮＯとなって一連の処理を終了する。そうでない場合には、その判定はＹＥＳとなってステップ９０７に移行する。
【０１１７】
ステップ９０７では、ユーザがペダル１０６を踏み込んだことから、発音中の楽音のホールドを音源ＬＳＩ１０４に指示する。それが終了した後、一連の処理を終了する。なお、上記ホールドの指示は、例えばステップ９０４で生成されたＭＩＤＩデータを音源ＬＳＩ１０４に送出することで行われる。
【０１１８】
上記イニシャライズ処理の実行時にＭＩＤＩデータの帰還を検出したことでその要素に０が代入されていた場合、ステップ９０６の判定はＮＯとなり、ステップ９０７のホールド指示は行われないことになる。しかし、ステップ９０４で送信したＭＩＤＩデータはＭＩＤＩ  ＩＮ端子で受信されるため、図１２に示すＭＩＤＩＩＮ処理の実行時に処理される。それにより、音源ＬＳＩ１０４による楽音の発音にペダル１０６への操作が反映されることになる。
【０１１９】
コントロールの対象がダンパーであった場合、そのＭＩＤＩデータを音源ＬＳＩ１０４が２度処理したとしても、実質的な影響は小さい。しかし、例えばメインボリュームのように、その影響が大きくでるものもある。そのメインボリュームでは、通常、つまみ等で設定されている元の音量にデータバイトの値を掛けるようになっていることから、所望の音量より大幅に大きくなるか、或いは大幅に小さくなるかの何れかになる。しかし、このようなことは、ＭＩＤＩデータの帰還の有無を検出し、その検出結果を基に音源ＬＳＩ１０４に指示を行うことで確実に回避されることになる。
【０１２０】
一方、ＭＩＤＩデータが帰還しない場合（これは、ＭＩＤＩ  ＯＵＴ端子が外部機器に接続されていない場合も含んでいる）では、たとえ楽音の発音に音源ＬＳＩ１０４を設定していても（レジスタＬＯＣＡＬＦＵＮＣＣＴＲＬの値は１）、要素ＬＯＣＡＬＭＯＤＥ［ＭＩＤＩＯＵＴＣＨ］の値を０とすれば、ステップ９０７のホールド指示は行われないため、音源ＬＳＩ１０４による楽音の発音にペダル１０６の操作が反映されないことになる。
【０１２１】
そのように設定すると、電子楽器１００は、発音させている楽音を受信したＭＩＤＩデータに従って変化させるだけとなる。言い換えれば、複数の楽音発生装置を接続して構築されたシステム内での電子楽器１００の役割を特定させるようなことができる。そのため、システム内での電子楽器（楽音発生装置）１００の用途（利用形態）の幅が広がり、新たな演奏の形態を実現に寄与することも可能である。
【０１２２】
一方、ユーザがペダル１０６を離してステップ９０３の判定がＮＯとなることで実行されるステップ９０８では、ダンパーオフを指示するＭＩＤＩデータを外部に送信するダンパーオフＭＩＤＩ  ＯＵＴ処理を実行する。その後は、ステップ９０９に移行する。
【０１２３】
ステップ９０９では、レジスタＬＯＣＡＬＦＵＮＣＣＴＲＬの値が１か否か判定する。ユーザがペダル１０６への操作を音源ＬＳＩ１０４による楽音の発音に反映させることを設定、即ちローカルオンを設定していた場合、その判定はＹＥＳとなってステップ９１０に移行する。そうでない場合には、その判定はＮＯとなって一連の処理を終了する。
【０１２４】
ステップ９１０では、レジスタＬＯＣＡＬＭＯＤＥのレジスタＭＩＤＩＯＵＴＣＨの値で特定される要素ＬＯＣＡＬＭＯＤＥ［ＭＩＤＩＯＵＴＣＨ］の値が１か否か判定する。図３に示すイニシャライズ処理の実行時に、レジスタＭＩＤＩＯＵＴＣＨの値で特定されるＭＩＤＩチャネルでＭＩＤＩデータの帰還が検出された、或いはそのレジスタの値に対応するローカルオンオフ設定スイッチ群１０８ａ中のスイッチをユーザが操作してその要素に０を代入させていた場合、その判定はＮＯとなって一連の処理を終了する。そうでない場合には、その判定はＹＥＳとなってステップ９１１に移行する。
【０１２５】
ステップ９１１では、ユーザがペダル１０６を離したことから、楽音のホールドの解除を音源ＬＳＩ１０４に指示する。それが終了した後、一連の処理を終了する。なお、上記ホールドの解除の指示は、例えばステップ９０８で生成されたＭＩＤＩデータを音源ＬＳＩ１０４に送出することで行われる。
【０１２６】
このように、ペダル１０６への操作の検出によって作成したＭＩＤＩデータ（制御コマンド）の音源ＬＳＩ１０４への出力は、レジスタＬＯＣＡＬＦＵＮＣＣＴＲＬの値、及び要素ＬＯＣＡＬＭＯＤＥ［ＭＩＤＩＯＵＴＣＨ］の値に応じて行われる。音響効果の選択やその変調の深さ等の他のコントロールメッセージについては、特に図示しないが、図５に示すスイッチ処理中のステップ５２４で処理される。その処理内容は、図９と同様である。
【０１２７】
次に、上記ペダル処理内で実行されるサブルーチン処理について、図１０及び図１１を参照して詳細に説明する。
図１０は、ペダル処理内でステップ９０４として実行されるダンパーオンＭＩＤＩ  ＯＵＴ処理の動作フローチャートである。最初に、図１０を参照して、その処理内容について詳細に説明する。
【０１２８】
このダンパーオンＭＩＤＩ  ＯＵＴ処理では、コントロールメッセージ（コントロールチェンジメッセージ）のＭＩＤＩデータを送信する。そのＭＩＤＩデータは、周知のように、メッセージがコントロールメッセージであることを表すステータスバイトと、コントロールする対象を指定するコントロールナンバーを格納したデータバイトと、そのコントロールの内容を指定するデータバイトとから構成される。ここでは、それらを順次生成・送信していくことが行われる。
【０１２９】
先ず、ステップ１００１では、コントロールメッセージであることを表すｂ０（Ｈｅｘ）に、ＭＩＤＩデータを送信するチャネル番号を格納したレジスタＭＩＤＩＯＵＴＣＨの値から１を減算した値を加算し、それを１バイト目のデータ（ステータスバイト）として送信する。
【０１３０】
続くステップ１００２では、コントロールナンバーとして、コントロールの対象がダンパー（ホールド１）であることを表す４０（Ｈｅｘ）を２バイト目のデータとして送信する。その後に移行するステップ１００３では、コントロールの内容を表すデータとして７Ｆ（Ｈｅｘ：オンを指示する値である）を送信する。その３バイト目のデータを送信した後、一連の処理を終了する。
【０１３１】
なお、上記のデータの送信は、ＣＰＵ１０１が、ＭＩＤＩインターフェイス回路１０９のＭＩＤＩデータバッファ内の送信用領域に送信させるデータを書き込むことで行われる。
【０１３２】
図１１は、ペダル処理内でステップ９０８として実行されるダンパーオフＭＩＤＩ  ＯＵＴ処理の動作フローチャートである。次に、図１１を参照して、その処理内容について詳細に説明する。このダンパーオフＭＩＤＩ  ＯＵＴ処理においても、ダンパーのオフを指示するＭＩＤＩデータを１バイトずつ生成・送信していくことが行われる。
【０１３３】
先ず、ステップ１１０１では、コントロールメッセージであることを表すｂ０（Ｈｅｘ）に、ＭＩＤＩデータを送信するチャネル番号を格納したレジスタＭＩＤＩＯＵＴＣＨの値から１を減算した値を加算し、それを１バイト目のデータ（ステータスバイト）として送信する。
【０１３４】
続くステップ１１０２では、コントロールの対象がダンパー（ホールド１）であることを表す４０（Ｈｅｘ）を２バイト目のデータとして送信する。その後に移行するステップ１１０３では、コントロールの内容を表すデータとして００（Ｈｅｘ；オフを指示する値である）を送信する。その３バイト目のデータを送信した後、一連の処理を終了する。
【０１３５】
なお、上記のデータの送信は、ＣＰＵ１０１が、ＭＩＤＩインターフェイス回路１０９のＭＩＤＩデータバッファ内の送信用領域に送信させるデータを書き込むことで行われる。
【０１３６】
以上の内容のサブルーチン処理が、図９のペダル処理内で実行される。次に、図２に示す全体処理内でステップ２０５として実行されるＭＩＤＩＩＮ処理について、図１２に示すその動作フローチャートを参照して詳細に説明する。
【０１３７】
ＭＩＤＩインターフェイス回路１０９が受信したＭＩＤＩデータは、ＭＩＤＩデータバッファ内の受信用領域に格納される。ここでは、その受信用領域に格納されているＭＩＤＩデータを読み出し、それに従った音源ＬＳＩ１０４への指示が行われる。
【０１３８】
先ず、ステップ１２０１では、ＭＩＤＩインターフェイス回路１０９のＭＩＤＩデータバッファ内の受信用領域から１メッセージ分のＭＩＤＩデータを読み出す。それに続くステップ１２０２以降は、その読み出したＭＩＤＩデータのメッセージの種類を判別し、その判別結果に従って処理することが行われる。
【０１３９】
なお、ＭＩＤＩＩＮ処理では、ステップ１２０１を実行することで得た１メッセージ分のＭＩＤＩデータだけを処理するようにしている。これは、通常、複数のＭＩＤＩデータを非常に短い間隔で受信することがないためである。
【０１４０】
ステップ１２０２では、ステップ１２０１で得たＭＩＤＩデータのチャンネルメッセージがノートオンメッセージか否か判定する。それの１バイト目のデータの上位４ビットで表される値が９（Ｈｅｘ）であった場合、その判定はＹＥＳとなってステップ１２０３に移行する。そうでない場合には、その判定はＮＯとなってステップ１２０４に移行する。
【０１４１】
ステップ１２０３では、そのＭＩＤＩデータが指示する楽音の発音を音源ＬＳＩ１０４に指示する。その後、一連の処理を終了する。
他方のステップ１２０４では、ステップ１２０１で得たＭＩＤＩデータのチャンネルメッセージがノートオフメッセージか否か判定する。それの１バイト目のデータの上位４ビットで表される値が８（Ｈｅｘ）、或いはその４ビットで表される値が９で、且つ３バイト目のデータの値が００（Ｈｅｘ）であった場合、その判定はＹＥＳとなってステップ１２０５に移行する。そうでない場合には、その判定はＮＯとなってステップ１２０６に移行する。
【０１４２】
ステップ１２０５では、そのＭＩＤＩデータが指示する楽音の消音を音源ＬＳＩ１０４に指示する。その後、一連の処理を終了する。なお、上記発音指示、及び消音指示は、例えば、ステップ１２０１で得たＭＩＤＩデータをそのまま音源ＬＳＩ１０４に送ることで行われる。
【０１４３】
ステップ１２０６〜１２０９の処理群では、コントロールナンバーが４０（Ｈｅｘ）、即ちコントロールの対象をダンパーとするＭＩＤＩデータの処理が行われる。
【０１４４】
先ず、ステップ１２０６では、ステップ１２０１で得たＭＩＤＩデータがダンパーオンを指示しているか否か判定する。それの１バイト目のデータの上位４ビットで表される値がｂ（Ｈｅｘ）、２バイト目の値が４０（Ｈｅｘ）、及び３バイト目の値が７ｆ（Ｈｅｘ）であった場合、その判定はＹＥＳとなってステップ１２０７に移行する。そうでない場合には、その判定はＮＯとなってステップ１２０８に移行する。
【０１４５】
ステップ１２０７では、そのＭＩＤＩデータに従って発音中の楽音のホールドを音源ＬＳＩ１０４に指示する。その後、一連の処理を終了する。
ステップ１２０８では、ステップ１２０１で得たＭＩＤＩデータがダンパーオフを指示しているか否か判定する。それの１バイト目のデータの上位４ビットで表される値がｂ（Ｈｅｘ）、２バイト目の値が４０（Ｈｅｘ）、及び３バイト目の値が００（Ｈｅｘ）であった場合、その判定はＹＥＳとなってステップ１２０９に移行する。そうでない場合には、その判定はＮＯとなってステップ１２１０に移行する。
【０１４６】
ステップ１２０９では、そのＭＩＤＩデータに従って楽音のホールドの解除を音源ＬＳＩ１０４に指示する。その後、一連の処理を終了する。なお、上記ホールド指示、及びホールドの解除指示は、例えば、ステップ１２０１で得たＭＩＤＩデータをそのまま音源ＬＳＩ１０４に送ることで行われる。
【０１４７】
ステップ１２１０では、その他のメッセージ、具体的には、ノートオン、ノートオフ、ダンパーオン、及びダンパーオフ以外のチャンネルメッセージの受信に対処する処理を行う。このステップ１２１０を実行することで、楽音に付加する音響効果や変調の深さ等の変更や設定、更には音色の変更等が音源ＬＳＩ１０４に対して指示される。当然のことながら、ステップ１２０１でＭＩＤＩデータが得られなかった場合には、ここでは何も行わない。このような処理を実行した後、一連の処理を終了する。
【０１４８】
なお、本実施の形態では、ＭＩＤＩデータの帰還の有無を電源がオンとなった直後に行うイニシャライズ処理（図２中のステップ２０１）を実行することで検出しているが、その検出は必ずしもイニシャライズ処理で行わなくて良い。例えば、ステップ２０５のＭＩＤＩＩＮ処理でＭＩＤＩデータの帰還の有無を随時検出し、帰還を検出したＭＩＤＩデータを処理しないようにしても良い。
【０１４９】
また、ＭＩＤＩデータの帰還を検出した場合、本実施の形態では、内部音源（音源ＬＳＩ１０４）に制御コマンド（ＭＩＤＩデータ）の出力は行わないようにしているが、内部音源には制御コマンドを出力して、その換わりに外部にはＭＩＤＩデータを出力しないようにしても良い。
【０１５０】
演奏内容の分類（ローカルオン・オフ用である）としては、本実施の形態ではノートメッセージ、コントロールメッセージ、及びその他のメッセージの３つに演奏内容を分類しているが、演奏内容の分類はこれに限定されるものではない。その分類は、より細かくても大まかであっても良い。例えばコントロールナンバーで更に分類するといったように、具体的にはダンパー、モジュレーション・デプス、ポルタメント・タイムといった項目毎にローカルオン・オフを設定できるようにしても良い。これらのように、様々な変形が可能である。
【０１５１】
本発明の適用方法としては、本発明を適用した楽音発生装置を新商品として製品化するだけに限定されない。既存の製品であっても、上記のような処理を実現するためのプログラムを新たにロードすることでも本発明を適用させることができる。そのロードは、図１に示す構成ではプログラムＲＯＭ１０２の交換等によって行うことができる。
【０１５２】
また、本実施の形態は、電子楽器に本発明を適用したものであるが、本発明が適用できるのは電子楽器等の楽音発生装置に限定されるものではない。例えばパーソナルコンピュータ（以降、パソコンと略す）にも本発明を適用させることができる。本発明の適用を実現させるためのプログラムは、フロッピーディスクやＣＤ−ＲＯＭ、或いはＲＯＭカードといった記録媒体に記録して配布しても良く、或いは何らかの通信手段を介して配信するようにしても良い。
【０１５３】
【発明の効果】
以上説明したように本発明は、出力した検出のための演奏情報と同一の演奏情報が、その演奏情報が出力されてから所定時間が経過するまでの監視期間内に入力されるか否か検出し、その検出結果に基づいて、内部で発生させた演奏情報を内部音源である楽音発生手段に出力させるか否か制御する。そのため、外部に出力した演奏情報と同一の演奏情報を重ねて（極めて短い間で）処理するようなことを確実に回避することができる。
【０１５６】
上記発明では、他の楽音発生装置と接続させてシステムが構築されている場合、接続の対象や接続方法等によって発生する演奏上の不具合の回避を行えるようになる。それにより、結果として、他の楽音発生装置と接続した際に可能な利用形態の幅を広げられるようになる。
【図面の簡単な説明】
【図１】本実施の形態による演奏電子楽器の構成図である。
【図２】全体処理の動作フローチャートである。
【図３】イニシャライズ処理の動作フローチャートである。
【図４】ＭＩＤＩ  ＩＮ／ＯＵＴループ検出処理の動作フローチャートである。
【図５】スイッチ処理の動作フローチャートである。
【図６】鍵盤処理の動作フローチャートである。
【図７】ノートオンＭＩＤＩ  ＯＵＴ処理の動作フローチャートである。
【図８】ノートオフＭＩＤＩ  ＯＵＴ処理の動作フローチャートである。
【図９】ペダル処理の動作フローチャートである。
【図１０】ダンパーオンＭＩＤＩ  ＯＵＴ処理の動作フローチャートである。
【図１１】ダンパーオフＭＩＤＩ  ＯＵＴ処理の動作フローチャートである。
【図１２】ＭＩＤＩＩＮ処理の動作フローチャートである。
【符号の説明】
１０１    ＣＰＵ
１０２    プログラムＲＯＭ
１０３    ワーク用ＲＡＭ
１０４    音源ＬＳＩ
１０５    発音回路
１０６    ペダル
１０７    鍵盤
１０８    スイッチ群
１０８ａ  ローカルオンオフ設定スイッチ群
１０８ｂ  ＭＩＤＩ  ＯＵＴチャネル設定スイッチ群
１０８ｃ〜１０８ｅ  ローカル機能有効／無効設定スイッチ
【図１】
0003687317.tif 000002
【図２】
0003687317.tif 000003
【図３】
0003687317.tif 000004
【図４】
0003687317.tif 000005
【図５】
0003687317.tif 000006
【図６】
0003687317.tif 000007
【図７】
0003687317.tif 000008
【図８】
0003687317.tif 000009
【図９】
0003687317.tif 000010
【図１０】
0003687317.tif 000011
【図１１】
0003687317.tif 000012
【図１２】
0003687317.tif 000013