(57)【要約】【課題】電子楽器などの音源を制御する音源制御プログラムにおいて、楽音の発音遅れを極力防止することができるようにすることを目的とする。【解決手段】現在の負荷状態を検出し、負荷が軽い場合は音源制御処理を実行し、負荷が重い場合は音源制御処理を実行しないようにする。例えば、現在の負荷状態が、負荷が軽い第１段階の状態か、それよりもさらに負荷が軽い第２段階の状態か、または前記第１段階および第２段階以外の状態かを検出し、負荷状態が第１段階または第２段階にあるときは各種エンベロープ発生器のステート管理処理を実行し、負荷状態が第２段階にあるときは各種リアルタイム制御値に応じた音源制御処理を実行し、負荷状態が前記第１段階および第２段階以外の状態にあるときはこれらの処理の何れも実行しないようにする。【選択図】　図３
2004109285.tif 000002
【特許請求の範囲】
【請求項１】
ノートオンやノートオフに応じた制御処理と所定の周期で周期的に起動される周期処理とを含む音源制御プログラムであって、該周期処理には、
現在の負荷状態を検出するステップと、
前記検出結果に応じて、負荷が軽い場合には発音中の楽音の時間変化を制御する楽音制御処理を実行し、負荷が重い場合は該楽音制御処理を実行しないステップと
が備えられていることを特徴とする音源制御プログラム。
【請求項２】
ノートオンやノートオフに応じた制御処理と所定の周期で周期的に起動される周期処理とを含む音源制御プログラムであって、該周期処理には、
現在の負荷状態が、負荷が軽い第１段階の状態か、それよりもさらに負荷が軽い第２段階の状態か、または前記第１段階および第２段階以外の状態かを検出するステップと、
前記検出結果に応じて、負荷状態が第１段階または第２段階にあるときは各種エンベロープ発生器のステート管理処理を実行し、負荷状態が第２段階にあるときは各種リアルタイム制御値に応じた音源制御処理を実行し、負荷状態が前記第１段階および第２段階以外の状態にあるときは前記ステート管理処理および各種リアルタイム制御値に応じた音源制御処理の何れも実行しないようにするステップと
が備えられていることを特徴とする音源制御プログラム。
【請求項３】
請求項２に記載の音源制御プログラムにおいて、
前記現在の負荷状態を検出するステップは、
直前に発生したイベントから現在時点までの時間が、第１の閾値より大きいとき第１段階と判別するステップと、
直前に発生したイベントから現在時点までの時間が、前記第１の閾値より大きい値である第２の閾値より大きいとき第２段階と判別するステップと
を含むことを特徴とする音源制御プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、電子楽器などの音源を制御する音源制御プログラムに関する。
【０００２】
【従来の技術】
従来より、楽音を発生する音源とその音源に指示を与えるＣＰＵ（Ｃｅｎｔｒａｌ　Ｐｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ）などの処理装置とを備えた電子楽器などの装置が知られている。このような装置では、ＣＰＵが音源の各発音チャンネル（ｃｈ）に指示を与えることにより楽音が生成出力される。各発音ｃｈで生成される楽音は、発音開始後もＣＰＵにより様々なリアルタイム制御を受ける。
【０００３】
例えば、音源の各発音ｃｈのエンベロープ発生器（ピッチＥＧ、フィルタＥＧ、音量ＥＧなど）を１組の目標値とレートのレジスタで制御するものがある。これは、例えばＡＤＳＲ（アタック、ディケイ、サスティン、リリース）の各ステートを有するＥＧ波形を発生させたいとき、ＣＰＵが各ステートの目標値とそこに至るレートを前記レジスタに設定し、現ＥＧ値がその目標値に到達したか否か判定し、到達したと判定されたら前記レジスタにその次のステートの目標値とレートを設定し、これを繰り返して所定のＥＧ波形を得るものである。
【０００４】
さらに、発音開始後の楽音へのリアルタイム制御の別の例として、演奏操作子の操作による制御がある。これは、発音開始後に演奏操作子が操作されたとき、その操作データ（例えばＭＩＤＩのコントロールチェンジなど）を受け取り、その操作データに応じて、発音中の楽音のピッチ、音色、および音量などを制御するものである。
【０００５】
【発明が解決しようとする課題】
近年の電子楽器の高機能化に伴い、音源の発音ｃｈ数が増加している。ｃｈ数の増加に伴い、押鍵に応じた発音に発音遅れが発生するようになってきている。特に、上述したような楽音へのリアルタイム制御のためＣＰＵが各発音ｃｈに関する周期的制御を行なっている場合は、発音遅れが起こりがちである。
【０００６】
この発明は、上述の従来技術における問題点に鑑み、楽音の発音遅れを極力防止することができる音源制御プログラムを提供することを目的とする。
【０００７】
【課題を解決するための手段】
上記目的を達成するため、この発明では、ノートオンやノートオフに応じた制御処理と所定の周期で周期的に起動される周期処理とを含む音源制御プログラムで、該周期処理では、現在の負荷状態を検出し、負荷が軽い場合は発音中の楽音の時間変化を制御する楽音制御処理を実行し、負荷が重い場合は該楽音制御処理を実行しないようにしている。
【０００８】
例えば、現在の負荷状態が、負荷が軽い第１段階の状態か、それよりもさらに負荷が軽い第２段階の状態か、または前記第１段階および第２段階以外の状態かを検出し、負荷状態が第１段階または第２段階にあるときは各種エンベロープ発生器のステート管理処理を実行し、負荷状態が第２段階にあるときは各種リアルタイム制御値に応じた音源制御処理を実行し、負荷状態が前記第１段階および第２段階以外の状態にあるときはこれらの処理の何れも実行しないようにする。現在の負荷状態の検出は、直前に発生したイベントから現在時点までの時間が、第１の閾値より大きいとき第１段階と判別し、第１の閾値より大きい値である第２の閾値より大きいとき第２段階と判別する。
【０００９】
【発明の実施の形態】
以下、図面を用いて、この発明の実施の形態を説明する。
【００１０】
図１は、この発明に係る音源制御プログラムを適用した電子楽器の構成を示すブロック図である。この電子楽器は、ＣＰＵ（中央処理装置）１０１、タイマ１０２、リードオンリメモリ（ＲＯＭ）１０３、ランダムアクセスメモリ（ＲＡＭ）１０４、ディスク装置１０５、ＭＩＤＩ（Ｍｕｓｉｃａｌ　Ｉｎｓｔｒｕｍｅｎｔ　Ｄｉｇｉｔａｌ　Ｉｎｔｅｒｆａｃｅ）インターフェース１０７、ネットワークインターフェース１０８、パネルスイッチ（ＳＷ）１０９、パネル表示器１１０、音源１１１、波形メモリ１１２、ディジタルアナログ変換器（ＤＡＣ）１１３、サウンドシステム１１４、およびバスライン１３０を備えている。音源１１１は、音源制御レジスタ１２１、アドレス発生部１２２、補間部１２３、音色制御部１２４、振幅制御部１２５、およびミキサ＆ＤＳＰ１２６を備えている。
【００１１】
ＣＰＵ１０１は、ＲＯＭ１０３またはＲＡＭ１０４に記憶された制御プログラムに基づいてこの電子楽器全体の動作を制御する。タイマ１０２は、一定周期ごとにＣＰＵ１０１に割込信号を送って割込をかけるためのタイマである。ＲＯＭ１０３は、ＣＰＵ１０１が実行・使用する各種の制御プログラムやデータなどを格納した不揮発性メモリである。ＲＡＭ１０４は、ＣＰＵ１０１が実行するプログラムのロード領域やワーク領域に使用する揮発性メモリである。ディスク装置１０５は、プログラムや楽音データを記憶する記憶手段であり着脱可能なものでもよい。ＭＩＤＩインターフェース１０７は、外部のＭＩＤＩ機器と接続するインタフェースである。ネットワークインターフェース１０８は、外部のコンピュータなどと接続するインターフェースである。パネルＳＷ１０９は、外部パネル上に設けられている種々の操作子を示す。パネル表示器１１０は、外部パネル上に設けられているディスプレイである。音源１１１は、ＣＰＵ１０１の指示に応じて楽音信号を発生する。音源１１１からの楽音信号は、ＤＡＣ１１２でアナログ信号に変換され、サウンドシステム１１３で放音される。
【００１２】
音源１１１は、複数の発音ｃｈを有する。ＣＰＵ１０１は、ＭＩＤＩインタフェース１０７からの演奏入力に応じて、音源１１１で生成する楽音の制御を行なう。例えば、ノートオンが入力した場合、ＣＰＵ１０１は、ノートオンイベント処理で、該ノートオンに対し音源１１１の発音ｃｈを割当て、割当てたｃｈに該ノートオンに対応した楽音の発生を指示する。またＣＰＵ１０１は、パネルＳＷ１０９の操作に応じて、音源の波形生成部で発生する楽音の音色を選択する処理を実行したり、ミキサ＆ＤＳＰ１２６で付与する効果の選択処理を実行する。
【００１３】
音源１１１において、音源制御レジスタ１２１は、ＣＰＵ１０１と音源１１１との間のインターフェースの役割を果たす。ＣＰＵ１０１は、音源制御レジスタ１２１の中の所定のレジスタに所定の値を書き込むことにより、音源１１１の各発音ｃｈに各種の指示命令を出す。
【００１４】
アドレス発生部１２２は、ＣＰＵ１０１の指示に応じて、各発音ｃｈごとに、読出す波形データの元の音高と発音すべき楽音の音高との音高比（セント）に応じた速度で変化する読出しアドレスを発生する。またアドレス発生部１２２は、ビブラートを制御する低周波発生器ＰＬＦＯなどを備えており、これにより発生した低周波信号で前記読出しアドレスを変調し、楽音に付与するビブラートを実現する。ＣＰＵ１０１は、リアルタイムで、前記低周波発生器で発生する低周波信号を制御できる。
【００１５】
アドレス発生部１２２で発生した読出しアドレスにより、波形メモリ１１２の波形データが読出される。読出された波形データは補間部１２３で補間処理され、音色制御部１２４に入力する。音色制御部１２４は、デジタルフィルタにより、各発音ｃｈで生成される楽音の音色の時間変化を制御する。そのため、音色制御部１２４は、発音開始からの音色の時間変化を制御する音色エンベロープ発生器ＣＥＧなどを備える。ＣＰＵ１０１は、リアルタイムで、前記音色エンベロープ発生器で発生するエンベロープを制御できる。
【００１６】
振幅制御部１２５は、デシベルリニア乗算器により、各発音ｃｈで生成される楽音の振幅の時間変化を制御する。振幅制御部１２５は、発音開始からの音量の時間的変化を制御する振幅エンベロープ発生器ＡＥＧ、トレモロを制御する低周波発生器ＡＬＦＯなどを備える。ＣＰＵ１０１は、リアルタイムで、これらのエンベロープ発生器や低周波発生器などを制御できる。
【００１７】
ミキサ＆ＤＳＰ１２７は、ミキサとＤＳＰを備える。ミキサは、振幅制御部１２５の複数ｃｈからの出力楽音およびＤＳＰの複数エフェクトからの出力楽音を複数通りにミキシングし、その結果生成される複数混合波形をＤＳＰの複数エフェクトないしＤＡＣ１１３に供給する。ミキシングの入出力の結線関係は、ＣＰＵ１０１から制御できる。ＤＳＰは、ＣＰＵ１０１により設定されたマイクロプログラムに基いて、入力する複数混合波形に対する複数エフェクト処理を実行する。すなわち、ＤＳＰは、リバーブ、コーラスなどのエフェクト処理を複数時分割で並行して実行可能なデジタル信号処理装置である。
【００１８】
図２（ａ）は、この電子楽器のメインルーチンの処理手順を示す。ＣＰＵ１０１は、ステップ２０１で初期設定を行なう。ステップ２０２で各種のイベント（例えば、ノートオンイベント、各種操作子の操作イベントなど）を待つ。イベントがあったときには、ステップ２０３で、当該イベントの開始時刻を記録する。ステップ２０４では、発生したイベントに対応したイベント処理を起動する。イベント処理が終わったら、ステップ２０５でその終了時刻を記録する。その後、ステップ２０２に戻り、処理を繰り返す。このようにして、イベント処理の開始と終了に関するログが保存される。
【００１９】
図２（ｂ）に、ノートオンイベントが発生したときのＣＰＵ１０１の処理手順を示す。なお、レジスタを示す記号は、そのレジスタに格納されたデータをも示すものとする。
【００２０】
ステップ２１１で、発生したノートオンイベントのパート番号、ノート番号、およびベロシティをそれぞれレジスタＰＴ，ＮＮ，ＶＬに設定する。ステップ２１２で、発音に必要な数の空きｃｈがあるかどうか判定する。必要数の空きｃｈがあれば、ステップ２１３で、それらの空きｃｈを割当てる。必要数分が無いときは、ステップ２１４で、足りない数のトランケートｃｈを決定しトランケートする。トランケートとは、音源の全発音ｃｈが発音中である場合に、何れかのｃｈを選択して音量を急速減衰させ、空きｃｈを強制的に作り出す処理のことである。トランケートの後、ステップ２１５で、空きｃｈとトランケートにより強制減衰させたｃｈを割当てる。ステップ２１３，２１５の後、ステップ２１６で、パート番号ＰＴ、ノート番号ＮＮ、およびベロシティＶＬに応じた楽音の音源パラメータを、上記割当てたｃｈに設定（音源制御レジスタ１２１への設定）する。ステップ２１７で、割当てたｃｈに発音開始を指示して、処理終了する。
【００２１】
図３は、一定周期でタイマ１０２からの割込があったときに実行されるタイマ割込処理の手順を示す。ステップ３０１で、カウント値を保持するレジスタＣＮＴを歩進する。ステップ３０２で、先述したログを参照することにより直前イベントからの時間（現在時刻と直前イベント開始時刻との差）を算出してレジスタΔＴに設定する。ステップ３０３で、この時間ΔＴが所定値Ｔ１より大きいときは、イベントとイベントの時間間隔が長い、すなわちイベントの発生頻度が低くＣＰＵの負荷は軽いので、ステップ３０４に進んで各種ＥＧのステート管理処理（後述）を行なう。その後、ステップ３０５に進む。ΔＴ＞Ｔ１でないときは、イベントの発生頻度が高くＣＰＵの負荷が重いので、処理を終了する。なお、このＣＰＵ負荷の判断では、各イベント処理にかかる時間がイベントの種類に関わらず大体均一であることが仮定されている。
【００２２】
ステップ３０５では、直前イベントからの時間ΔＴと所定値Ｔ２とを比較する。ただし、Ｔ２＞Ｔ１である。時間ΔＴが所定値Ｔ２より大きいときは、イベントとイベントの時間間隔が、ステップ３０３の判断の場合よりもさらに長い時間間隔Ｔ２より大きいということであり、さらにＣＰＵの負荷が軽い状態であるから、ステップ３０６に進んでリアルタイム制御値に応じた処理（後述）を行なう。その後、ステップ３０７に進む。ΔＴ＞Ｔ２でないときは、比較的ＣＰＵの負荷が重いので、処理終了する。
【００２３】
ステップ３０７では、カウント値ＣＮＴが所定値ＣＮＴＸ以上であるか否か判定し、そうでないときは処理を終了する。ＣＮＴ≧ＣＮＴＸのときは、ステップ３０８で、音源から発音中の各発音ｃｈの音量レベルを取得し、十分に減衰の進んだ発音ｃｈを発音終了ｃｈとして検出して空きｃｈのリストに登録する。ステップ３０９でカウント値ＣＮＴをゼロクリアし、処理を終了する。カウント値ＣＮＴは、初期値が０で、ステップ３０１でカウントアップされ、さらにステップ３０９で０に処理化される。従って、ステップ３０８に進むのは、ステップ３０３，３０５でＣＰＵの負荷が充分に軽く、かつ、前に空きｃｈの検出（ステップ３０８）を行なってから充分な時間が経過した（ＣＮＴＸ以上の回数分の割込があった）場合である。空きｃｈの検出は、ＣＰＵの負荷が小さいときに、ある程度の時間間隔で行なえばよいので、このようにしている。仮に開放が遅れた発音ｃｈがあったとしても、ノートオンイベント処理における発音割当処理でその発音ｃｈが空きｃｈとして検出できないだけであり、同発音割当処理における空きｃｈが１つも無かったときに実行されるトランケート処理で同じ発音ｃｈ（その開放が遅れた発音ｃｈ）が選択されるので問題はない。
【００２４】
上述のステップ３０４の各種ＥＧのステート管理処理は、音色制御部１２４内の音色エンベロープ発生器ＣＥＧや振幅制御部１２５内の振幅エンベロープ発生器ＡＥＧなどの各種ＥＧのステート制御を行なうものである。本実施の形態の電子楽器は、目標値とレートのレジスタを１組（１ステート分）だけ備え、ＣＰＵが周期処理においてステート管理処理を行なうタイプのものである。具体的に、ステート管理処理では以下の▲１▼〜▲３▼の処理を行なう。▲１▼各ＥＧの各ｃｈについて、生成しているエンベロープ値が設定された目標値に達したか否かを示すフラグを音源から読み出す。▲２▼各ＥＧの、フラグに基づき目標値に達したと判定されたｃｈについては、直前に設定したステートの次のステートの目標値とレートを当該ＥＧの当該ｃｈの目標値レジスタとレートレジスタに設定する。▲３▼各ＥＧの、まだ目標値に達していないと判定されたｃｈについては、何も処理を行なわない。
【００２５】
上述のステップ３０６の各種リアルタイム制御値に応じた処理は、例えば以下のような制御を行うものである。まず、リアルタイム制御値の発生元としては、▲１▼ピッチベンド操作子（通常、ピッチを制御する）、▲２▼アフタタッチ（設定に応じて、音量、音色、ピッチなどを制御する）、▲３▼エクスプレションペダル（通常、音量を制御する）、▲４▼アサイナブルホイール（設定に応じて、何でも制御可能）などがある。これらの操作に応じて発生したリアルタイム制御値で制御する対象として、▲１▼音量データ（デシベル値として、ＡＥＧの値に足しこまれる）、▲２▼ピッチずれデータ（セント値として、読出レートを変化させる）、▲３▼Ｃｆベースデータ（カットオフのベースとして、ＣＥＧと合成される）、▲４▼ビブラートデプス（ＰＬＦＯの振幅を制御する）などがある。
【００２６】
上記のタイマ割込み処理では、特に２つの閾値Ｔ１，Ｔ２（Ｔ２＞Ｔ１）を設け、２段階で処理を行なうか否か判定している。すなわち、第１段階の判別（ステップ３０３）でＣＰＵの負荷が軽いと判断したとき各種ＥＧのステート制御処理（ステップ３０４）を実行し、第２段階の判別（ステップ３０５）でＣＰＵの負荷が第１段階よりさらに軽いと判断したとき各種のリアルタイム制御値に応じた処理を行なうようにしている。第１段階で各種ＥＧのステート制御処理を行なうのは、各ＥＧのステートの管理が遅れると、発生するエンベロープ波形の時間変化形状が変化し、楽音にも聴感上検知可能な変化が生じてしまうためである。すなわち、ＥＧのステート管理が遅れると、当該音色（ＥＧパラメータを含む）の作成者が意図した音色と異なる音色になってしまうため、より短い間隔でステート管理を行なっている。一方、リアルタイム制御値は、通常、演奏操作子を人間が操作することにより発生するので、値の変化がエンベロープ波形に比べて緩やかであり、その値に応じた楽音の制御が多少遅れても聴感上検知されない。そこで、第２段階で各種リアルタイム制御値に応じた制御を行なうようにしている。このようにして、ＣＰＵ負荷が大きいときには音源制御処理を省略して、発音遅れが起こらないようにしている。音色やピッチのリアルタイム制御と発音遅れであれば、発音遅れのほうがより演奏に対する影響が大きいため、新規発音が遅れるくらいなら、音色やピッチの変化が多少変わってしまうほうがましである。
【００２７】
なお、上記実施の形態では、ＣＰＵの負荷状態を２段階に分けているが、その数は２に限ることなく、１、３、４、…などでもよい。また、同じＣＰＵの負荷状態の段階で実行されるべき複数の音源制御処理がある場合、それらをｎグループに分けておき、ＣＰＵの負荷状態がその段階になる毎に各グループの処理を順番に実行するようにしてもよい。さらに、ＣＰＵ負荷が重くても省略されない処理（例えば、ＡＥＧのステート管理）を設けてもよい。
【００２８】
また、上記実施の形態では、直前のイベントからの時間を閾値Ｔ１やＴ２と比較して現在のＣＰＵ負荷を判断しているが、上記ログを使用してある時間内に発生したイベント回数Ｎを求め、その回数Ｎを所定の閾値Ｎ１やＮ２と比較するようにしてもよい。さらに、各イベント処理の時間が均一であると仮定せず、上記ログに基づいてＣＰＵの負荷を直接算出するようにしても良い。すなわち、記録されている各イベント処理の開始時刻と終了時刻に基づいて、所定期間内にＣＰＵがイベント処理を実行していた時間を算出してもよい。
【００２９】
上記実施の形態では、音色エンベロープ発生器ＣＥＧおよび振幅エンベロープ発生器ＡＥＧはステート管理機能を有しておらず、ＣＰＵがステート管理を行うようになっていたが、それぞれステート管理機能付きのエンベロープ発生器に置き換えてもよい。ここで、ステート管理機能付きエンベロープ発生器とは、目標値とレートのレジスタを複数ステート分備えており、生成しているエンベロープの値に応じて順次ステートを切り換えていく機能を有するエンベロープ発生器のことである。図３のタイマ割込処理において、ステート管理付きに置き換えられたエンベロープ発生器に関してはステップ３０４の処理が不要になる。また、全エンベロープ発生器がステート管理機能付きに置き換わった場合には、２段階で分岐する必要は無くステップ３０５の閾値Ｔ２による分岐だけを行えばよい。
【００３０】
【発明の効果】
以上説明したように、この発明によれば、周期的に音源に対して行なっている制御処理をＣＰＵ負荷が大きいときには省略するようにしているので、結果的にＣＰＵ負荷が大きいときでも発音割当て処理だけは行なわれるようになり、発音遅れを極力防止することができる。
【図面の簡単な説明】
【図１】この発明に係る音源制御プログラムを適用した電子楽器の構成を示すブロック図
【図２】メインルーチンおよびノートオンイベント処理のフローチャート図
【図３】タイマ割込処理のフローチャート図
【符号の説明】
１０１…中央処理装置（ＣＰＵ）、１０２…タイマ、１０３…リードオンリメモリ（ＲＯＭ）、１０４…ランダムアクセスメモリ（ＲＡＭ）、１０７…ＭＩＤＩインターフェース、１０９…パネルスイッチ、１１０…パネル表示器、１１１…音源、１１２…波形メモリ、１１３…ディジタルアナログ変換器（ＤＡＣ）、１１４…サウンドシステム、１２１…音源制御レジスタ、１２２…アドレス発生部、１２３…補間部、１２４…音色制御部、１２５…振幅制御部、１２６…ミキサ＆ＤＳＰ。
【図１】
2004109285.tif 000003
【図２】
2004109285.tif 000004
【図３】
2004109285.tif 000005