(57)【要約】【課題】複数の同時発音が可能な音源を用いた自動演奏装置で、音源の同時発音数が上限に達する状態を事前に把握して、さらなる発音に対処する場合の処理を円滑に実行する。【解決手段】ソングメモリ41、シーケンサ42により複数の同時発音情報が含まれる演奏データを取得させ、イベント・タイム・ジェネレータ43及びイベント・ディレイ・バッファ44により演奏情報に一定の遅延時間を与え、第１イベントバッファ45及び音源ドライバ48により遅延された演奏情報に基づいて音源を駆動して演奏させ、同時発音数管理部47により音源の同時発音数上限の超過を判断し、判断結果に基づいて消音させる発音情報を決定し、決定した発音情報により音源ドライバ48での音源の一部の駆動を遅延時間内で停止させる。【選択図】      図３
2019168515.tif 000002
【特許請求の範囲】
【請求項１】
演奏データを読み込む読込処理と、
前記読込処理により読み込まれた前記演奏データの再生開始タイミングを遅らせた遅延演奏データを出力する出力処理と、
複数のオシレータのうちのいずれかのオシレータを発振させることにより、前記出力処理により出力された前記遅延演奏データに応じた自動演奏を発音部に発音させる自動演奏処理と、
前記読込処理による前記演奏データの読み込みにより、前記複数のオシレータ中で発振していないオシレータがあるかどうかを判断する判断処理と、
前記判断処理により前記発振していないオシレータがないと判断した場合に、発振中のいずれかのオシレータの発振を中止させる消音処理と、
を実行する電子楽器。
【請求項２】
前記出力処理は、前記演奏データに含まれる各イベントが発生するタイミングにそれぞれ一定の遅延時間を与える遅延処理を実行することにより前記遅延演奏データを出力する、請求項１に記載の電子楽器。
【請求項３】
前記発音された自動演奏に合わせて演奏操作子が操作されることにより、前記操作に応じた波形データに基づいて、前記複数のオシレータのうちのいずれかのオシレータを発振させることにより、前記波形データに応じた楽音を前記発音部に発音させる演奏処理、をさらに実行する請求項１または２に記載の電子楽器。
【請求項４】
前記判断処理により、前記発振していないオシレータがないと判断した場合に、前記遅延演奏データによる自動演奏に応じて発振しているオシレータに付与されるポイントより前記操作に応じて発振しているオシレータに付与されるポイントを高く設定した第１重み付けと、ある音域を発振しているオシレータに付与されるポイントより前記ある音域より低音域を発振しているオシレータに付与されるポイントを高く設定した第２重み付けと、あるベロシティで発振しているオシレータに付与されるポイントより前記あるベロシティより大きいベロシティで発振しているオシレータに付与されるポイントを高く設定した第３重み付けと、の少なくとも２つの重み付けの合計により前記消音処理させるオシレータを決定する、請求項３に記載の電子楽器。
【請求項５】
電子楽器のコンピュータに、
演奏データを読み込む読込処理と、
前記読込処理により読み込まれた前記演奏データの再生開始タイミングを遅らせた遅延演奏データを出力する出力処理と、
複数のオシレータのうちのいずれかのオシレータを発振させることにより、前記出力処理により出力された前記遅延演奏データに応じた自動演奏を発音部に発音させる自動演奏処理と、
前記読込処理による前記演奏データの読み込みにより、前記複数のオシレータのなかに発振していないオシレータがあるかどうかを判断する判断処理と、
前記判断処理により前記発振していないオシレータがないと判断した場合に、発振中のいずれかのオシレータの発振を中止させる消音処理と、
を実行させる方法。
【請求項６】
電子楽器のコンピュータに、
演奏データを読み込む読込処理と、
前記読込処理により読み込まれた前記演奏データの再生開始タイミングを遅らせた遅延演奏データを出力する出力処理と、
複数のオシレータのうちのいずれかのオシレータを発振させることにより、前記出力処理により出力された前記遅延演奏データに応じた自動演奏を発音部に発音させる自動演奏処理と、
前記読込処理による前記演奏データの読み込みにより、前記複数のオシレータのなかに発振していないオシレータがあるかどうかを判断する判断処理と、
前記判断処理により前記発振していないオシレータがないと判断した場合に、発振中のいずれかのオシレータの発振を中止させる消音処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子楽器、方法及びプログラムに関する。
【背景技術】
【０００２】
電子鍵盤楽器等を用いた自動演奏装置において、波形再生用バッファの容量を増大させずに、キーオン時のレスポンスを良くし、且つ自動演奏に際して楽音情報の音色割当を効率的に行なうための技術が提案されている。（例えば、特許文献１）
前記特許文献に記載された技術も含めて一般に電子楽器においては、ハードウェア回路での性能に対する制約から、同時発音数が有限である。加えて、ミュージックシーケンサや自動伴奏機能を有する自動演奏装置等では、演奏者の鍵盤演奏に比して遙かに多くのノートを含む演奏が可能である。そのため、自動再生する演奏データの状況と演奏者による演奏の状況とによっては、音源の同時発音数が最大に達することも容易に起こり得る。
【０００３】
そして、音源の同時発音数が最大に達している状態から、さらに発音数を増やすような状況となった場合には、増やすことになった発音数分だけ、その時点ですでに発音しているものの中からいずれかを消音させる必要がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平  ６−  ２７９４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、音源による発音の一部を消音させる場合、瞬時にその音圧レベルを落とすとクリックノイズが発生してしまう。そのため、再生音上での違和感をなくすべく、当該音圧レベルを一定時間、例えば２〜３［ミリ秒］程度をかけて徐々に下げる必要が生じる。したがって、実時間上においては前記消音処理で無視できない時間を要するため、例えば押鍵情報に対するレスポンスが悪化するなど、演奏性や再生される音楽の質が犠牲となるという可能性がある。。
【０００６】
本発明は前記のような実情に鑑みてなされたもので、その目的とするところは、音源の同時発音数が上限に達する状態を事前に把握して、さらなる発音に対処する場合の処理を円滑に実行することが可能な電子楽器、方法及びプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明の一態様は、演奏データを読み込む読込処理と、前記読込処理により読み込まれた前記演奏データの再生開始タイミングを遅らせた遅延演奏データを出力する出力処理と、複数のオシレータのうちのいずれかのオシレータを発振させることにより、前記出力処理により出力された前記遅延演奏データに応じた自動演奏を発音部に発音させる自動演奏処理と、前記読込処理による前記演奏データの読み込みにより、前記複数のオシレータ中で発振していないオシレータがあるかどうかを判断する判断処理と、前記判断処理により前記発振していないオシレータがないと判断した場合に、発振中のいずれかのオシレータの発振を中止させる消音処理と、を実行する。
【発明の効果】
【０００８】
本発明によれば、音源の同時発音数が上限に達する状態を事前に把握して、さらなる発音に対処する場合の処理を円滑に実行することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施形態に係る電子鍵盤楽器の外観構成を示す平面図。
【図２】同実施形態に係るハードウェア上の回路構成を示すブロック図。
【図３】同実施形態に係るデータ処理上の機能構成を示すブロック図。
【図４】同実施形態に係るシーケンサに記録されるシーケンスデータのフォーマット構成を示す図。
【図５】同実施形態に係る実際のイベントの発生タイミングとこれに対応するイベントデータの例を示す図。
【図６】同実施形態に係るイベント・ディレイ・バッファが取り扱うデータのフォーマット構成を示す図。
【図７】同実施形態に係るメインルーチンの処理内容を示すフローチャート。
【図８】同実施形態に係るシーケンサ再生時のサブルーチンを示すフローチャート。
【図９】同実施形態に係るイベント・ディレイ・バッファでのサブルーチンを示すフローチャート。
【図１０】同実施形態に係る同時発音数管理部での第１の処理のサブルーチンを示すフローチャート。
【図１１】同実施形態に係る同時発音数の管理上で使用する重み付けの具体例を示す図。
【図１２】同実施形態に係る同時発音数管理部での第２の処理のサブルーチンを示すフローチャート。
【発明を実施するための形態】
【００１０】
本発明を、自動伴奏機能を有する電子鍵盤楽器に適用した場合の一実施形態について、以下に図面を参照して詳細に説明する。  
図１は、この電子鍵盤楽器１０の外観構成を示す平面図である。同図において、電子鍵盤楽器１０は、薄板状筐体の上面に、発生すべき楽音の音高を指定する、演奏操作子としての複数の鍵からなる鍵盤１１と、楽音の音色を選択するための音色選択ボタン部（ＴＯＮＥ）１２と、自動伴奏機能に関する各種選択設定のためのシーケンサ操作ボタン部（ＳＥＱＵＥＮＣＥＲ）１３と、ピッチベンドやトレモロ、ビブラート等の各種モジュレーション（演奏効果）を付加するベンダ／モジュレーションホイール１４と、各種設定情報等を表示する液晶表示部１５と、演奏により生成された楽音を放音する左右のスピーカ１６，１６等とを備える。
【００１１】
前記音色選択ボタン部１２は、例えばピアノや電子ピアノ、オルガン、電気ギター１，２、アコースティックギター、サクソフォン、ストリングス、シンセサイザ１，２、クラリネット、ビブラフォン、アコーディオン、ベース、トランペット、クワイヤ等の選択ボタンを有する。
【００１２】
前記シーケンサ操作ボタン部１３は、例えばトラックを選択する「トラック１」〜「トラック４」、ソングメモリを選択する「ソング１」〜「ソング４」、一時停止（ＰＡＵＳＥ）、再生（ＰＬＡＹ）、録音（ＲＥＣ）、曲頭戻し、巻き戻し、早送り、テンポダウン（ＴＥＭＰＯ  ＤＯＷＮ）、テンポアップ（ＴＥＭＰＯ  ＵＰ）等の選択ボタンを有する。
【００１３】
図２は、ハードウェア上の回路構成を示すブロック図である。電子鍵盤楽器１０では、ＣＰＵ（中央演算処理装置）２１、ＲＡＭ（ランダムアクセスメモリ）２２、ＲＯＭ（リードオンリメモリ）２３、音源ＬＳＩ（大規模集積回路）２４、入出力（Ｉ／Ｏ）コントローラ２５が、それぞれバスＢを介して接続される。
【００１４】
ＣＰＵ２１は、機器全体の処理を行なうメインプロセッサである。ＲＡＭ２２は、例えばＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）で構成され、ＣＰＵ２１のワークメモリとして機能する。ＲＯＭ２３は、ＣＰＵ２１の動作プログラムや該動作プログラムで使用する各種固定データ等を格納していると共に、この電子鍵盤楽器１０に装着されるメモリカードを含み、当該メモリカードには、演奏データを記録させ、あるいは記録されている自動演奏データを読み出して再生させることが可能であるものとする。
【００１５】
音源ＬＳＩ２４は、多数の楽音波形データを記憶した波形ＲＯＭ２６が接続され、この波形ＲＯＭ２６に記憶された楽音波形データを用いてデジタル楽音波形データを生成し、Ｄ／Ａコンバータ２７へ出力する。
【００１６】
Ｄ／Ａコンバータ２７は、デジタルの楽音波形データをアナログの楽音波形信号に変換する。変換により得られたアナログの楽音波形信号は、さらにアンプ２８により増幅された後に、前記スピーカ１６，１６で可聴周波数範囲の楽音として拡声出力されるか、または前記図１では示さなかった出力端子より出力される。
【００１７】
前記入出力コントローラ２５は、前記バスＢと周辺接続されるデバイスとのインタフェイスを行なうもので、ＬＣＤコントローラ２９、キースキャナ３０、Ａ／Ｄコンバータ３１を接続する。
【００１８】
ＬＣＤコントローラ２９は、前記図１の液晶表示部（ＬＣＤ）１５を接続し、入出力コントローラ２５、バスＢを介してＣＰＵ２１の制御の下に、与えられる各種動作状態等を示す情報を液晶表示部１５により表示出力させる。
【００１９】
キースキャナ３０は、前記鍵盤１１や、前記音色選択ボタン部１２及びシーケンサ操作ボタン部１３を含むスイッチパネルでのキー操作状態を走査して、その走査結果を入出力コントローラ２５を介してＣＰＵ２１へ通知する。
【００２０】
Ａ／Ｄコンバータ３１は、前記ベンダ／モジュレーションホイール１４や、この電子鍵盤楽器１０の外付けオプション装備となるダンパペダル等の各操作位置を示すアナログ信号を受付け、当該操作量をデジタルデータに変換した上で、前記ＣＰＵ２１へ通知する。
【００２１】
次に図３により、ＣＰＵ２１の制御の下に実行される処理上の機能構成を示すブロック図についても説明しておく。  
同図において、この電子鍵盤楽器１０の演奏者による、前記音色選択ボタン部１２での音色選択操作に対応した操作信号、鍵盤１１での操作に伴うノート情報のオン／オフ信号、及び、ベンダ／モジュレーションホイール１４やオプションとなるダンパペダルでの操作による操作信号が、シーケンサ４２、第１イベントバッファ４５、及び第２イベントバッファ４６に入力される。
【００２２】
また前記シーケンサ４２には、シーケンサ操作ボタン部１３での操作信号と、ソングメモリ４１からの自動演奏データとが入力される。ソングメモリ４１は、複数曲、例えば４曲分の自動演奏データを記憶しており、選択した１曲分の自動演奏データをシーケンサ４２に読み出す。
【００２３】
シーケンサ４２は、図示するように４トラック（「Ｔｒａｃｋ１」〜「Ｔｒａｃｋ４」）の構成となっており、前記ソングメモリ４１から選択して読み出される１曲の自動演奏データを用いて演奏や録音を行なうことができる。
【００２４】
録音時には、いずれかの録音対象トラックを選択して演奏者の演奏を記録することが可能となる。また再生時には、４つのトラックを同期させて、出力する演奏データをミックスした状態で出力する。
【００２５】
このシーケンサ４２から出力される最大４トラック分の演奏データが、イベント・ディレイ・バッファ４４、及び前記第２イベントバッファ４６へ送出される。この電子鍵盤楽器１０を操作する演奏者は、シーケンサ操作ボタン部１３において必要なボタンを操作することにより、それらの動作を選択して指示する。
【００２６】
イベント・ディレイ・バッファ４４は、前記図２のＲＡＭ２２のワーク領域に形成されたリングバッファで構成され、イベント・タイム・ジェネレータ４３から与えられる現在時刻情報Ｔに基づいて、シーケンサ４２から送られてきた演奏データを予め設定された一定時間、例えば５０［ミリ秒］だけ遅延した後に前記第１イベントバッファ４５へ送出する。そのため、イベント・ディレイ・バッファ４４は、前記一定時間に発生し得るイベントを保持できるだけの容量が確保されている。
【００２７】
前記第２イベントバッファ４６は、前記図２のＲＡＭ２２のワーク領域に形成され、前記鍵盤１１、音色選択ボタン部１２、ベンダ／モジュレーションホイール１４等から送られてくる操作信号と、前記シーケンサ４２から送られてくる演奏データとを保持し、その保持内容を同時発音数管理部４７へ送出する。
【００２８】
同時発音数管理部４７は、後述する第１及び第２の同時発音数管理処理により、同時発音数をこの電子鍵盤楽器１０の最大同時発音数に制限した演奏データを前記第１イベントバッファ４５へ送出する。
【００２９】
第１イベントバッファ４５は、前記図２のＲＡＭ２２のワーク領域に形成され、前記鍵盤１１、音色選択ボタン部１２、ベンダ／モジュレーションホイール１４等から送られてくる操作信号と、前記イベント・ディレイ・バッファ４４で遅延された演奏データと、前記同時発音数管理部４７で最大同時発音数に制限された演奏データとを保持し、その保持内容を音源ドライバ４８へ送出する。
【００３０】
音源ドライバ４８は、前記図２の音源ＬＳＩ２４をコントロールするインタフェイスであり、第１イベントバッファ４５から与えられる入力に基づいて、最大同時発音数の範囲内でデジタルの楽音データを発生させる。
【００３１】
次に前記実施形態の動作について説明する。  
図４は、前記シーケンサ４２に記録されるシーケンスデータのフォーマットを示す図である。同図に示すように、イベントデータ長Ｌ（ＬＥＮＧＴＨ）、イベント内容Ｅ（ＥＶＥＮＴ）、及び次のイベントまでの時間間隔を示すインターバルＩ（ＩＮＴＥＲＶＡＬ）の３つのフィールドを１組のデータとして、各トラック毎にこれらのデータの複数の組がそれぞれ羅列される。
【００３２】
イベントデータ長Ｌのフィールドは、続くイベント内容Ｅの長さを定義するもので、８ビットの固定語長で「０」〜「２５５」の値域となるため、実際のデータ長を「−１」した値をとる。
【００３３】
イベント内容Ｅのフィールドは、１バイト乃至２５６バイトの可変となる語長をとり、１６進数で先頭の２桁が「００Ｈ」〜「７ＦＨ」で始まる場合はコントロールイベントである一方、「９０Ｈ」〜「ＦＦＨ」で始まる場合はＭＩＤＩ（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔｓ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ）イベントとなる。
【００３４】
前記コントロールイベントとしては、例えばトラックの先頭やインターバルタイムが６５５５３５足りないときにダミーイベントとして使用する「ＮＯＰ（Ｎｏｎ  ＯＰｅｒａｔｉｏｎ）」イベント、トラックの最後に配置する「ＥＯＴ（Ｅｎｄ  Ｏｆ  Ｔｒａｃｋ）」イベント、テンポを設定するための「ＴＥＭＰＯ」イベント等が存在する。
【００３５】
前記「ＴＥＭＰＯ」イベントは、トラック１のみでしか配置、認識することができず、トラック１の記録（録音）中にシーケンサ操作ボタン部１３のテンポボタンを操作することで記録される。前記「ＴＥＭＰＯ」イベントでは、分解能を例えば０．１［ＢＰＭ］単位で設定する。
【００３６】
インターバルＩのフィールドは、１６ビットの固定長で「０」〜「６５５３５」の値域となり、１拍を４８０分割したＴｉｃｋという単位で次のイベントまでの時間間隔を表現する。もし１６ビットの最大値である「６５５３５」Ｔｉｃｋ以上の時間間隔が発生した場合には、コントロールイベントである前記「ＮＯＰ」イベントを使ってダミーとなるイベントを必要なだけ繋げることで、長時間を表現する。
【００３７】
図５は、実際のイベントの発生タイミング（図５（Ａ））と、これに対応するイベントデータ（図５（Ｂ））の例を示す図である。
【００３８】
図５（Ａ）に示すように、開始時のＴＥＭＰＯイベント、押鍵（ＮＯＴＥ  ＯＮ）イベント、離鍵（ＮＯＴＥ  ＯＦＦ）イベント、‥‥、ピッチベンドイベントを経てトラック終了のＥＯＴイベントとなる一連の流れを例示している。
【００３９】
同図中、Ｋはノート番号（音階）、Ｖは音の強さ、Ｐｂはピッチベンド、Ｔ１〜Ｔｎはインターバルの時間間隔を示している。
【００４０】
次に図６により、前記イベント・ディレイ・バッファ４４で取り扱うデータのフォーマット構成について説明する。上述した如くイベント・ディレイ・バッファ４４は、演奏データを一定時間だけ遅延させるための回路である。
【００４１】
ここで取扱うデータのフォーマット構成は、前記図４に示したシーケンスデータのフォーマット構成に比して、インターバルＩのフィールドを廃し、代わって先頭にタイムＴのフィールドを設けて、タイムＴ、イベントデータ長Ｌ、及びイベント内容Ｅの３つのフィールドを１組のデータとして、複数のデータの組を羅列する構成となる。
【００４２】
タイムＴのフィールドは、３２ビットの固定語長で「０Ｈ」〜「ＦＦＦＦＦＦＦＦＨ」の値域となり、当該イベントが処理されるべき時刻を定義する。
【００４３】
続くイベントデータ長Ｌのフィールド、及びイベント内容Ｅのフィールドは、前記図４で示したシーケンサのイベントデータと同様の内容となる。
【００４４】
自動演奏用の演奏データを、このイベント・ディレイ・バッファ４４で一定時間だけ遅延させる。そのため、前記音源ドライバ４８においては、遅延させた遅延演奏データを複数の発音チャンネル（波形データ発生装置又はオシレータともいう）にてそれぞれ発振させることで発音を行ない、遅延演奏データを発振中の複数の発音チャンネルのなかのいずれかの発音チャンネルに対して、遅延させる前の演奏データを元に消音処理を行なうので、消音処理が必要と予想された演奏データに対する消音処理を発音の直前に実行する必要がなくなり、クリックノイズが発生するような事態を回避できるものである。
【００４５】
前記遅延時間は、上述した如く例えば５０［ミリ秒］に設定するもので、シーケンサ操作ボタン部１３でのボタン操作に対応して遅延を行なうもので、実際に演奏される楽曲音声に合わせて、この電子鍵盤楽器１０の使用者が前記鍵盤１１を用いて行なう演奏には何ら影響しない。
【００４６】
イベント・タイム・ジェネレータ４３は、前記遅延時間の基準となる計時回路であり、最大値ＦＦＦＦＦＦＦＦＨの次に０Ｈに戻る３２ビットのフリーランニングタイマで構成される。イベント・タイム・ジェネレータ４３は、１［ミリ秒］毎に１づつ計時値をインクリメントする。
【００４７】
イベント・ディレイ・バッファ４４は、前記Ｔｉｃｋがテンポに依存するので遅延時間の基準とはなり得ないため、上述した如くイベント・タイム・ジェネレータ４３の計時値に基づいて、保持内容を遅延して出力する。
【００４８】
イベント・ディレイ・バッファ４４では、シーケンサ４２の出力する演奏データが入力された際、イベント・タイム・ジェネレータ４３の計時する時刻Ｔを読み取り、その値に遅延時間に相当する５０を加算した時刻情報を当該演奏データに付加しておく。
【００４９】
イベント・ディレイ・バッファ４４は、読み出しポイントに待機しているイベントに付加されている時刻情報が、イベント・タイム・ジェネレータ４３の計時値と一致するか、または経過した時点で当該イベントを読み出して第１イベントバッファ４５へ送出する。
【００５０】
以下、前記同時発音数管理部４７における基本的な動作を説明する。  
本電子鍵盤楽器１０での最大同時発音数を「２５６」とする。この同時発音数は、電子鍵盤楽器１０の演奏者による前記鍵盤１１を用いた演奏と、遅延前のシーケンサ４２での演奏とを合算したものから判断して予想を行なう。
【００５１】
これらの演奏データは、第２イベントバッファ４６によってミックスされて、同時発音数管理部４７に入力される。同時発音数管理部４７では、演奏データを音源ドライバ４８に送出する前の段階で、各演奏ノートと実際の発音チャンネルへの割り当てシミュレーションを行ない、その時点での同時発音数を算出する。  
算出した同時発音数が最大値２５６を超えている場合、同時発音数管理部４７は音源ドライバ４８で発音中のチャンネルのいずれかを消音させるために「消音イベント」を発生させ、第１イベントバッファ４５にイベントデータを入力させる。
【００５２】
この消音イベントは、ＭＩＤＩ規格では定義されていないが、通常は００Ｈ〜７ＦＨの範囲であるノートオフメッセージのベロシティ値をＦＦＨとして送る。
【００５３】
例えば、「８０  ３Ｃ  ＦＦ」(Ｈ)とすることで、Ｃ４（８８鍵盤における中央のド(Ｃ)）で発音しているノートを従来の離鍵よりも速い速度でダンプ（無段階に減衰）させることができる。  
本実施形態では、減衰時にクリックノイズが発生するのを避けるために、最大振幅から一定時間、例えば２［ミリ秒］の時間をかけて無段階に減衰させるものとする。
【００５４】
以下、前記ＣＰＵ２１が実行する動作プログラムについて説明する。  
図７は、ＣＰＵ２１が実行するメインルーチンの処理内容を示すフローチャートである。電子鍵盤楽器１０の電源を投入して本メインルーチンを開始し、ＣＰＵ２１はまず回路内の各部を初期化する（ステップＳ１０１）。この初期化に関する処理は、詳細を後述する同時発音数管理機能で使用するシミュレート用の発音チャンネルの情報などの初期化も含む。
【００５５】
初期化完了後にＣＰＵ２１は、鍵盤１１等での押鍵、離鍵操作に対する鍵盤処理や音色選択ボタン部１２、シーケンサ操作ボタン部１３でのボタン操作に対するスイッチ処理を含むイベント処理（ステップＳ１０２）、シーケンサ４２での演奏データの再生や停止中を行なうシーケンサ処理（ステップＳ１０３）、イベント・ディレイ・バッファ４４でのイベントデータに対するディレイ処理や同時発音数管理部４７で定期的に実行する処理などを含む周期処理（ステップＳ１０４）を順次繰返して実行する。
【００５６】
前記ステップＳ１０２におけるイベント処理中、鍵盤１１での押鍵イベントがあった場合、ＣＰＵ２１は押鍵された鍵盤の位置に応じたノート番号と押鍵時の強さに応じたベロシティとを含む鍵盤発音イベントを生成し、生成した発音イベントを第２イベントバッファ４６及び第１イベントバッファ４５に送信する。
【００５７】
同様にイベント処理中、鍵盤１１での離鍵イベントがあった場合、ＣＰＵ２１は離鍵された鍵盤の位置に応じたノート番号と離鍵時の強さに応じたベロシティとを含む鍵盤消音イベントを生成し、生成した消音イベントを第２イベントバッファ４６及び第１イベントバッファ４５に送信する。
【００５８】
第１イベントバッファ４５にイベントが送信された場合、音源ドライバ４８は第１イベントバッファ４５に保持されているイベントを取得した上で、音源ＬＳＩ２４による発音や消音の処理を実行する。
【００５９】
図８は、前記ステップＳ１０３のシーケンサ処理で実行される、シーケンサ再生時のサブルーチンのフローチャートである。電子鍵盤楽器１０の演奏者がシーケンサ操作ボタン部１３の再生（ＰＬＡＹ）を操作した場合、ＣＰＵ２１によりこの図８の処理が起動される。
【００６０】
処理当初には、まず再生開始からのＴｉｃｋを更新した上で（ステップＳ２０１）、更新したＴｉｃｋで処理するイベントがあるか否かを判断する（ステップＳ２０２）。
【００６１】
処理するイベントがあると判断した場合（ステップＳ２０２のＹｅｓ）、まず第２イベントバッファ４６に送信を行ない（ステップＳ２０３）、次にイベント・タイム・ジェネレータ４３から現在の時刻情報Ｔを取得する（ステップＳ２０４）。
【００６２】
ＣＰＵ２１は、この取得した時刻情報Ｔに、一定の遅延時間５０［ミリ秒］を加算した時刻をイベントの時刻ＴＩＭＥとして当該イベントデータに付加した上で（ステップＳ２０５）、前記のようにイベント・ディレイ・バッファ４４に送信して保持させる（ステップＳ２０６）。
【００６３】
その後、前記ステップＳ２０２からの処理に戻り、同一のＴｉｃｋで他に処理すべきイベントがあれば、同様の処理を繰返し実行する。
【００６４】
前記ステップＳ２０２において、イベントがない、もしくは同一のＴｉｃｋで処理すべきイベントを完了したと判断した場合（ステップＳ２０２のＮｏ）、ＣＰＵ２１はこの図８の処理を終了する。
【００６５】
図９は、前記図７のステップＳ１０４において、シーケンサ４２から送信されてきたイベントデータを保持するイベント・ディレイ・バッファ４４で定期的に実行する処理を示すサブルーチンのフローチャートである。
【００６６】
ＣＰＵ２１は、イベント・ディレイ・バッファ４４により、まずイベント・タイム・ジェネレータ４３から現在の時刻情報Ｔを取得させる（ステップＳ３０１）。
【００６７】
次にＣＰＵ２１は、イベント・ディレイ・バッファ４４の読み出し用のリードポインタに示されるイベントデータに付加されている時間情報ＴＩＭＥを取得し、取得した時刻情報ＴＩＭＥが、その直前にイベント・タイム・ジェネレータ４３から取得した現在の時刻情報Ｔと等しいか、あるいは超えているか否かにより、その時点のタイミングで処理すべきイベントデータがあるか否かを判断する（ステップＳ３０２）。
【００６８】
ここで取得した時刻情報ＴＩＭＥが、その直前に取得した現在の時刻情報Ｔと等しいか、あるいは超えていると判断した場合（ステップＳ３０２のＹｅｓ）、ＣＰＵ２１は、該当するイベントデータをイベント・ディレイ・バッファ４４から読み出して第１イベントバッファ４５へ送信させる（ステップＳ３０３）。
【００６９】
次にＣＰＵ２１は、前記リードポインタの値を１イベント分更新設定した上で（ステップＳ３０４）、再び前記ステップＳ３０２からの処理に戻り、まだこのタイミングで他に処理すべきイベントデータがあれば、同様に読み出して第１イベントバッファ４５へ送信させる。
【００７０】
そして、前記ステップＳ３０２において、イベント・ディレイ・バッファ４４の読み出し用のリードポインタに示されるイベントデータに付加されている時間情報ＴＩＭＥが現在の時刻情報Ｔに達していないと判断した場合、もしくはイベント・ディレイ・バッファ４４から読み出すべきイベントデータがないと判断した場合に（ステップＳ３０２のＮｏ）、この図９の処理を終了する。
【００７１】
次に、ＣＰＵ２１が同時発音数管理部４７により処理させる、演奏データによる同時発音数の管理処理について説明する。  
図１０は、同時発音数管理部４７にイベントデータが送信されてきた際に、前記図７のステップＳ１０４において、ＣＰＵ２１の制御により同時発音数管理部４７で処理される第１の同時発音数管理機能の処理内容を示すサブルーチンのフローチャートである。
【００７２】
処理当初にＣＰＵ２１は、第２イベントバッファ４６に送信されてきたイベントデータを取得して（ステップＳ４０１）、取得したイベントデータが発音イベントであるか否かを判断する（ステップＳ４０２）。
【００７３】
取得したイベントデータが発音イベントであると判断した場合（ステップＳ４０２のＹｅｓ）、ＣＰＵ２１はまず、発音チャンネル比較用の重み付け変数「Ｗｅｉｇｈｔ＿Ｃｍｐ」を初期化して、予め設定されている閾値「１０００」を設定する（ステップＳ４０３）。
【００７４】
その後、ＣＰＵ２１はチャンネル番号を示す変換数ｉに初期値「１」を設定した上で（ステップＳ４０４）、ｉ番目の発音チャンネルの状態から、使用中であるか否かを判断する（ステップＳ４０５）。
【００７５】
ここでｉ番目の発音チャンネルが使用中であると判断した場合（ステップＳ４０５のＹｅｓ）、ＣＰＵ２１は次にそのｉ番目の発音チャンネルに設定されている重み付けの値「Ｗｅｉｇｈｔ」を、具体的にはワークメモリであるＲＡＭ２２から読み出して取得する（ステップＳ４０６）。
【００７６】
図１１は、このとき各チャンネル毎に重み付けの値「Ｗｅｉｇｈｔ」を算出する基準となる、パート情報、ノート番号、ベロシティ、及び発音状態それぞれについてのポイントを例示するものである。
【００７７】
図１１（Ａ）に示すパート情報においては、鍵盤１１での演奏及びシーケンサ４２でのトラック１をより優先するような重み付けとなっている。
【００７８】
図１１（Ｂ）に示すノート番号においては、音域「Ａ０」〜「Ｂ２」のノート番号「２１」〜「４７」を最も優先するような重み付けとなっている。
【００７９】
図１１（Ｃ）に示すベロシティにおいては、値が大きく、音の強さが高い程優先するような重み付けとなっている。
【００８０】
図１１（Ｄ）に示す発音状態においては、「ノートオン中」が５０ポイントであるのに対して、「リリース中」が０ポイントとなるような重み付けとなっている。
【００８１】
以上、パート情報、ノート番号、ベロシティ、及び発音状態の各ポイントの合計値が重み付けの値「Ｗｅｉｇｈｔ」としてチャンネル毎に予め設定されている。
【００８２】
ＣＰＵ２１は、取得したｉ番目の発音チャンネルの重み付けの値「Ｗｅｉｇｈｔ」と前記比較用の重み付け変数「Ｗｅｉｇｈｔ＿Ｃｍｐ」とを比較し、変数「Ｗｅｉｇｈｔ＿Ｃｍｐ」がｉ番目の発音チャンネルの重み付けの値「Ｗｅｉｇｈｔ」より大きいか否かを判断する（ステップＳ４０７）。
【００８３】
前記変数「Ｗｅｉｇｈｔ＿Ｃｍｐ」がｉ番目の発音チャンネルの重み付けの値「Ｗｅｉｇｈｔ」より大きいと判断した場合（ステップＳ４０７のＹｅｓ）、ＣＰＵ２１はあらためて前記変数「Ｗｅｉｇｈｔ＿Ｃｍｐ」を再設定するべく、その時点のｉ番目の発音チャンネルの重み付けの値「Ｗｅｉｇｈｔ」をそのまま前記変数「Ｗｅｉｇｈｔ＿Ｃｍｐ」として設定する（ステップＳ４０８）。
【００８４】
その後、ＣＰＵ２１はｉ番目の発音チャンネルをワークメモリであるＲＡＭ２２に一旦保存する（ステップＳ４０９）。さらにＣＰＵ２１は、チャンネル番号を示す変数ｉを「＋１」更新設定した上で（ステップＳ４１０）、その更新設定後の変数ｉが上限値「２５６」を超えた「２５７」以上となっているか否かにより、必要な全チャンネル分の処理を終えたか否かを判断する（ステップＳ４１１）。
【００８５】
更新設定後の変数ｉが「２５７」未満であり、必要な全チャンネル分の処理をまだ終えていないと判断した場合（ステップＳ４１１のＮｏ）、ＣＰＵ２１は更新設定後の変数ｉに基づいて前記ステップＳ４０５からの処理に戻る。
【００８６】
また前記ステップＳ４０７において、前記変数「Ｗｅｉｇｈｔ＿Ｃｍｐ」がｉ番目の発音チャンネルの重み付けの値「Ｗｅｉｇｈｔ」以下であると判断した場合（ステップＳ４０７のＮｏ）、ＣＰＵ２１は、前記ステップＳ４０８，Ｓ４０９の処理を省略する。
【００８７】
こうしてＣＰＵ２１は、変数ｉで示されるチャンネルが使用中であれば、それぞれその重み付け「Ｗｅｉｇｈｔ」に基づき、必要に応じて適宜変数「Ｗｅｉｇｈｔ＿Ｃｍｐ」を書換えながら、最も重み付け「Ｗｅｉｇｈｔ」のポイントが小さいチャンネルの情報をＲＡＭ２２に更新しながら保存していく。
【００８８】
２５６チャンネル分の発音チャンネルについて前記処理を繰返し実行した後、変数ｉが「２５７」以上となり、必要な全チャンネル分の処理を終えたと判断した場合（ステップＳ４１１のＹｅｓ）、未使用のチャンネルが１つもなかったこととなる。ＣＰＵ２１は、その時点でＲＡＭ２２に保存している、２５６チャンネル中で最も重み付け「Ｗｅｉｇｈｔ」のポイントが小さいと判断した発音チャンネルに基づいて、設定されているパート情報、ノート番号を用い、ベロシティ値を０ｘＦＦＨとする消音イベントを生成させ（ステップＳ４１２）、生成した消音イベントを第１イベントバッファ４５へ送信させる（ステップＳ４１３）。
【００８９】
その後にＣＰＵ２１は、その時点のｉ番目のチャンネル番号の発音チャンネルに発音イベントを割り当てた上で（ステップＳ４１４）、前記図１１で示したようにパート情報とノート番号、ベロシティ、ノートオン中状態からそれぞれ対応する重み付けポイントを取得し、それらの合計値を重み付けの値「Ｗｅｉｇｈｔ」として当該チャンネルに設定し（ステップＳ４１５）、以上で図１０の第１の同時発音数管理機能の処理を終了する。
【００９０】
なお前記ステップＳ４０５において、その時点のｉ番目の発音チャンネルの状態から、使用中ではなく未使用の状態であると判断した場合（ステップＳ４０５のＮｏ）、ＣＰＵ２１は直接前記ステップＳ４１４からの処理に進んで、その未使用の状態の発音チャンネルｉに発音イベントを割り当てる。
【００９１】
また前記ステップＳ４０２において、第２イベントバッファ４６に送信されてきたイベントデータが発音イベントではなかったと判断した場合（ステップＳ４０２のＮｏ）、次にＣＰＵ２１は、そのイベントデータが消音イベントであるか否かを判断する（ステップＳ４１６）。
【００９２】
イベントデータが消音イベントでもないと判断した場合（ステップＳ４１６のＮｏ）、ＣＰＵ２１はそのまま図１０の第１の同時発音数管理機能の処理を終了する。
【００９３】
さらに前記ステップＳ４１６において、イベントデータが消音イベントであると判断した場合（ステップＳ４１６のＹｅｓ）、パート情報及びノート番号から、その時点で割り当てられている発音チャンネルの重み付けを、前記図１１（Ｄ）で示した如く、発音状態を「ノートオン中」の５０ポイントから、「リリース」の０ポイントとなるように５０ポイント減算するべく更新設定する（ステップＳ４１７）。
【００９４】
続いてＣＰＵ２１は、当該発音チャンネルに設定されている音色のリリースタイム情報から、この発音チャンネルの消音予想時間情報を取得する（ステップＳ４１８）。この消音予想時間情報としては、音色の内容によって異なるものの、およそ前記ダンプ（減衰）時間に相当する、２［ミリ秒］に前後する情報が取得されるものとする。
【００９５】
そして、割り当てられている発音チャンネルに、直前の前記ステップＳ４１７で更新した重み付けと、前記取得した消音予測時間情報とを設定し（ステップＳ４１９）、以上で図１０の第１の同時発音数管理機能の処理を終了する。
【００９６】
図１２は、前記図７のステップＳ１０４の周期処理において、ＣＰＵ２１の制御により同時発音数管理部４７で処理される第２の同時発音数管理機能の処理内容を示すサブルーチンのフローチャートである。
【００９７】
処理当初にＣＰＵ２１は、チャンネル番号を示す変換数ｉに初期値「１」を設定する（ステップＳ５０１）。
【００９８】
その後、ＣＰＵ２１は、当該ｉ番目の発音チャンネルの状態から、使用中であること（ステップＳ５０２）、且つそのｉ番目の発音チャンネルに設定されている発音状態が「リリース中」であること（ステップＳ５０３）、且つそのリリース中で設定されている消音予測時間に到達あるいは経過していること（ステップＳ５０４）の３条件が重ねて成立するか否かを判断する。
【００９９】
ここで、これら３条件が重ねて成立すると判断した場合にのみ（ステップＳ５０２〜Ｓ５０４のＹｅｓ）、ＣＰＵ２１は当該ｉ番目の発音チャネルを未使用の状態に設定する（ステップＳ５０６）。
【０１００】
また前記ステップＳ５０２において、ｉ番目の発音チャンネルがすでに未使用であると判断した場合（ステップＳ５０２のＮｏ）、及び前記ステップＳ５０３において、ｉ番目の発音チャンネルに設定されている発音状態が「リリース中」ではなく「ノートオン中」であると判断した場合（ステップＳ５０３のＮｏ）、及び前記ステップＳ５０４において、リリース中で設定されている消音予測時間に到達も経過もしておらず、未到達であると判断した場合（ステップＳ５０４のＮｏ）、ＣＰＵ２１は前記ステップＳ５０５における当該ｉ番目の発音チャンネルを未使用の状態に設定する処理を実行しない。
【０１０１】
その後にＣＰＵ２１は、チャンネル番号を示す変数ｉを「＋１」更新設定した上で（ステップＳ５０６）、その更新設定後の変数ｉが上限値「２５６」を超えた「２５７」以上となっているか否かにより、必要な全チャンネル分の処理を終えたか否かを判断する（ステップＳ５０７）。
【０１０２】
更新設定後の変数ｉが「２５７」未満であり、必要な全チャンネル分の処理をまだ終えていないと判断した場合（ステップＳ５０６のＮｏ）、ＣＰＵ２１は更新設定後の変数ｉに基づいて前記ステップＳ５０２からの処理に戻る。
【０１０３】
こうしてＣＰＵ２１は、ステップＳ５０２〜Ｓ５０７の処理を全２５６チャンネルの発音チャンネル分だけ繰返して実行し、未使用であると判断したチャンネルに対してはその設定を実行していく。
【０１０４】
そして、全２５６チャンネルの発音チャンネル分の処理が終了したと判断すると（ステップＳ５０７のＹｅｓ）、ＣＰＵ２１は以上でこの図１２の第２の同時発音数管理機能の処理を終了する。
【０１０５】
したがって、同時発音数管理部４７により使用中のチャンネルであっても、前記図１０の処理によりリリース中であり、かつ設定された消音予測時間に到達あるいは経過したチャンネルは、ＣＰＵ２１により即時未使用のチャンネルとして設定されることとなる。
【０１０６】
したがって、同時発音数がその上限を超えることが予想されていた場合でも、前記遅延時間（例えば５０［ミリ秒］）に比して、前記ダンプ（減衰）させる消音予測時間（例えば２［ミリ秒］）との差に応じた分だけ、前記図１０、図１２による処理を実行する時間的な余裕が与えられる。
【０１０７】
以上詳述した如く本実施形態によれば、音源の同時発音数が上限に達する状態を事前に把握して、さらなる発音に対処する場合の処理を円滑に実行することが可能となる。
【０１０８】
また前記実施形態では、前記消音イベントでダンプ（減衰）させる時間を設定できるため、消音によるクリックノイズの発生を確実に回避できる。
【０１０９】
さらに前記実施形態では、消音させる発音チャネルを選択する場合に、演奏のパートの優先順位、音程、及び音の大きさを含む組合わせの合計により重み付けを行なった上で、最も重み付けの結果が小さく、音響上も消音させた場合の影響が最も小さくなる発音チャネルをより簡易な演算工程により選択できる。
【０１１０】
この際、重み付けに予め設定した一定値を用いて消音させるチャンネルの閾値とすることにより、消音を行なうか否かの基準を任意に設定できる。
【０１１１】
加えて前記実施形態では、鍵盤１１での演奏操作による演奏データは、イベント・ディレイ・バッファ４４による遅延系の回路系統を経ずに、第２イベントバッファ４６から同時発音数管理部４７を介して第１イベントバッファ４５に供されるため、鍵盤１１を操作する演奏者は、自動演奏される演奏データの処理回路上の遅延時間、例えば５０［ミリ秒］を意識することなく、自動演奏に合わせてリアルタイムに演奏操作を継続できる。
【０１１２】
なお前記実施形態では、鍵盤１１とＰＣＭ音源とを用いた電子鍵盤楽器１０に適用した場合について説明したが、本発明は電子楽器としての種類や音源方式等を限定するものではなく、演奏データの自動再生が可能な電子機器であれば、ソフトウェアを含む各種シンセサイザやタブレット端末、パーソナルコンピュータ等でも同様に適用することが可能となる。
【０１１３】
その他、本願発明は、前記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は可能な限り適宜組み合わせて実施してもよく、その場合組み合わせた効果が得られる。更に、前記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適当な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【０１１４】
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。  
［請求項１］  
演奏データを読み込む読込処理と、  
前記読込処理により読み込まれた前記演奏データの再生開始タイミングを遅らせた遅延演奏データを出力する出力処理と、  
複数のオシレータのうちのいずれかのオシレータを発振させることにより、前記出力処理により出力された前記遅延演奏データに応じた自動演奏を発音部に発音させる自動演奏処理と、  
前記読込処理による前記演奏データの読み込みにより、前記複数のオシレータ中で発振していないオシレータがあるかどうかを判断する判断処理と、  
前記判断処理により前記発振していないオシレータがないと判断した場合に、発振中のいずれかのオシレータの発振を中止させる消音処理と、  
を実行する電子楽器。  
［請求項２］  
前記出力処理は、前記演奏データに含まれる各イベントが発生するタイミングにそれぞれ一定の遅延時間を与える遅延処理を実行することにより前記遅延演奏データを出力する、請求項１に記載の電子楽器。  
［請求項３］  
前記発音された自動演奏に合わせて演奏操作子が操作されることにより、前記操作に応じた波形データに基づいて、前記複数のオシレータのうちのいずれかのオシレータを発振させることにより、前記波形データに応じた楽音を前記発音部に発音させる演奏処理、をさらに実行する請求項１または２に記載の電子楽器。  
［請求項４］  
前記判断処理により、前記発振していないオシレータがないと判断した場合に、前記遅延演奏データによる自動演奏に応じて発振しているオシレータに付与されるポイントより前記操作に応じて発振しているオシレータに付与されるポイントを高く設定した第１重み付けと、ある音域を発振しているオシレータに付与されるポイントより前記ある音域より低音域を発振しているオシレータに付与されるポイントを高く設定した第２重み付けと、あるベロシティで発振しているオシレータに付与されるポイントより前記あるベロシティより大きいベロシティで発振しているオシレータに付与されるポイントを高く設定した第３重み付けと、の少なくとも２つの重み付けの合計により前記消音処理させるオシレータを決定する、請求項３に記載の電子楽器。  
［請求項５］  
電子楽器のコンピュータに、  
演奏データを読み込む読込処理と、  
前記読込処理により読み込まれた前記演奏データの再生開始タイミングを遅らせた遅延演奏データを出力する出力処理と、  
複数のオシレータのうちのいずれかのオシレータを発振させることにより、前記出力処理により出力された前記遅延演奏データに応じた自動演奏を発音部に発音させる自動演奏処理と、  
前記読込処理による前記演奏データの読み込みにより、前記複数のオシレータのなかに発振していないオシレータがあるかどうかを判断する判断処理と、  
前記判断処理により前記発振していないオシレータがないと判断した場合に、発振中のいずれかのオシレータの発振を中止させる消音処理と、  
を実行させる方法。  
［請求項６］  
電子楽器のコンピュータに、  
演奏データを読み込む読込処理と、  
前記読込処理により読み込まれた前記演奏データの再生開始タイミングを遅らせた遅延演奏データを出力する出力処理と、  
複数のオシレータのうちのいずれかのオシレータを発振させることにより、前記出力処理により出力された前記遅延演奏データに応じた自動演奏を発音部に発音させる自動演奏処理と、  
前記読込処理による前記演奏データの読み込みにより、前記複数のオシレータのなかに発振していないオシレータがあるかどうかを判断する判断処理と、  
前記判断処理により前記発振していないオシレータがないと判断した場合に、発振中のいずれかのオシレータの発振を中止させる消音処理と、  
を実行させるプログラム。
【符号の説明】
【０１１５】
１０…電子鍵盤楽器、
１１…鍵盤、
１２…音色選択ボタン部（ＴＯＮＥ）、
１３…シーケンサ操作ボタン部（ＳＥＱＵＥＮＣＥＲ）、
１４…ベンダ／モジュレーションホイール、
１５…液晶表示部、
１６…スピーカ、
２１…ＣＰＵ、
２２…ＲＡＭ、
２３…ＲＯＭ、
２４…音源ＬＳＩ、
２５…入出力（Ｉ／Ｏ）コントローラ、
２６…波形ＲＯＭ、
２７…Ｄ／Ａコンバータ、
２８…アンプ、
２９…ＬＣＤコントローラ、
３０…キースキャナ、
３１…Ａ／Ｄコンバータ、
４１…ソングメモリ、
４２…シーケンサ、
４３…イベント・タイム・ジェネレータ、
４４…イベント・ディレイ・バッファ、
４５…第１イベントバッファ、
４６…第２イベントバッファ、
４７…同時発音数管理部、
４８…音源ドライバ、
Ｂ…バス
【図１】
2019168515.tif 000003
【図２】
2019168515.tif 000004
【図３】
2019168515.tif 000005
【図４】
2019168515.tif 000006
【図５】
2019168515.tif 000007
【図６】
2019168515.tif 000008
【図７】
2019168515.tif 000009
【図８】
2019168515.tif 000010
【図９】
2019168515.tif 000011
【図１０】
2019168515.tif 000012
【図１１】
2019168515.tif 000013
【図１２】
2019168515.tif 000014