(57)【特許請求の範囲】
【請求項１】
所定数の発音チャンネルを有する発音手段の各発音チャンネルに割り当てられる発音イベントに対して音高変化を与える制御イベントの種別夫々に応じた第１の優先度係数、及び前記発音イベントのエンベロープの各ステップに対応した第２の優先度係数を記憶する記憶手段と、
前記制御イベントが受信された場合、当該受信された制御イベントの受信値を格納する第１の格納手段と、
前記エンベロープのステップの変更が検出された場合、当該変更されたステップを格納する第２の格納手段と、
新たな発音イベントが発生した場合、前記記憶手段に記憶された第１の優先度係数、前記第１の格納手段に格納された受信値及びエンベロープのアタックステップに対応する第２の優先度係数に基づいて、前記新たな発音イベントに対する優先度を算出する第１の算出手段と、
前記第１の格納手段に前記受信値が格納された場合、あるいは前記第２の格納手段に前記変更されたステップが格納された場合、前記記憶手段に記憶された第１の優先度係数、前記第１の格納手段に格納された受信値及び前記第２の格納手段に格納されたエンベロープのステップに対応する第２の優先度係数に基づいて、発音中の発音イベントに対する優先度を算出する第２の算出手段と、
前記所定数の発音チャンネルのすべてが発音状態である場合に新たな発音イベントが発生したときに、前記第２の算出手段によって算出された各発音チャンネルの優先度のうち最も低い優先度が前記第１の算出手段によって算出された新たな発音イベントの優先度より低いか否かを判定する判定手段と、
この判定手段によって前記最も低い優先度が前記新たな発音イベントの優先度より低いと判定された場合に前記最も低い優先度の発音イベントを強制的に消音させてその発音チャンネルに前記新たな発音イベントを割り当てる割当手段と、
を備えた楽音発生装置。
【請求項２】
所定数の発音チャンネルによって複数の発音パートを分担する発音手段の各発音チャンネルに割り当てられる発音イベントに対して音高変化を与える制御イベントの種別夫々に応じた第１の優先度係数、及び前記発音イベントのエンベロープの各ステップに対応した第２の優先度係数を記憶する記憶手段を有する楽音発生装置のコンピュータに、
前記制御イベントが受信された場合、当該受信された制御イベントの受信値を格納する第１の格納ステップと、
前記エンベロープのステップの変更が検出された場合、当該変更されたステップを格納する第２の格納ステップと、
新たな発音イベントが発生した場合、前記記憶手段に記憶された第１の優先度係数、前記第１の格納ステップにて格納された受信値及びエンベロープのアタックステップに対応する第２の優先度係数に基づいて、前記新たな発音イベントに対する優先度を算出する第１の算出ステップと、
前記第１の格納ステップにて前記受信値が格納された場合、あるいは前記第２の格納ステップにて前記変更されたステップが格納された場合、前記記憶手段に記憶された第１の優先度係数、前記格納された受信値及び前記第２の格納ステップにより格納されたエンベロープのステップに対応する第２の優先度係数に基づいて、発音中の発音イベントに対する優先度を算出する第２の算出ステップと、
前記所定数の発音チャンネルのすべてが発音状態である場合に新たな発音イベントが発生したときに、前記第２の算出ステップによって算出された各発音チャンネルの優先度のうち最も低い優先度が前記第１の算出ステップによって算出された新たな発音イベントの優先度より低いか否かを判定する判定ステップと、
この判定ステップによって前記最も低い優先度が前記新たな発音イベントの優先度より低いと判定された場合に前記最も低い優先度の発音イベントを強制的に消音させてその発音チャンネルに前記新たな発音イベントを割り当てる割当ステップと、
を実行させることを特徴とする楽音発生処理のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、楽音発生装置及び楽音発生処理のプログラムに関する。
【０００２】
【従来の技術】
近年の電子楽器等の楽音発生装置においては、複数の発音イベントを同時に発音して豊かな楽音を提供できる構成になっている。そのために、音源等の発音手段は所定数の発音チャンネル（「ボイス」ともいう）を備え、アサイナ等によって、各発音チャンネルに発音イベントを割り当てる処理を行っている。ＭＩＤＩデータの入力や演奏等により発音イベントが発生したときに、所定数の発音チャンネルがすべて発音中である場合には、その中の１つの発音イベントをファーストダンプして強制的に消音させて発音チャンネルを確保するアサイン処理（「トランケート処理」ともいう）、すなわち後着優先のアサイン処理を行うのが一般的である。
このアサイン処理では、何らかの条件で消音する発音チャンネルを選択する必要がある。従来においては、次の３つの選択方法が採られていた。第１の方法は、発音している楽音信号のエンベロープのステップが最も進んでいるものを選択する。第２の方法は、楽音信号のエンベロープのレベルが最も低いものを選択する。第３の方法は、受信したＭＩＤＩデータのうちで最も古いもの又は演奏例えば押鍵が最も古いものを選択する。
【０００３】
【発明が解決しようとする課題】
しかしながら、上記従来の技術においては、消音する発音チャンネルの選択方法が音楽的な要素を考慮していないために、例えば、同じ音源手段でメロディパートのような主旋律の発音パート及びリズムパートやコードパート等の伴奏の発音パートが同時に発音しているときに、主旋律の発音パートを従来の選択方法でを強制的に消音すると、発生する音に不自然な影響を与えるという課題があった。
本発明の課題は、発音中の発音イベントを強制的に消音させて発音チャンネルを確保するアサイン処理を行っても、音楽的に不自然な影響を与えないようにすることである。
【０００４】
【課題を解決するための手段】
請求項１に記載の楽音発生装置は、所定数の発音チャンネルを有する発音手段の各発音チャンネルに割り当てられる発音イベントに対して音高変化を与える制御イベントの種別夫々に応じた第１の優先度係数、及び前記発音イベントのエンベロープの各ステップに対応した第２の優先度係数を記憶する記憶手段と、前記制御イベントが受信された場合、当該受信された制御イベントの受信値を格納する第１の格納手段と、前記エンベロープのステップの変更が検出された場合、当該変更されたステップを格納する第２の格納手段と、新たな発音イベントが発生した場合、前記記憶手段に記憶された第１の優先度係数、前記第１の格納手段に格納された受信値及びエンベロープのアタックステップに対応する第２の優先度係数に基づいて、前記新たな発音イベントに対する優先度を算出する第１の算出手段と、前記第１の格納手段に前記受信値が格納された場合、あるいは前記第２の格納手段に前記変更されたステップが格納された場合、前記記憶手段に記憶された第１の優先度係数、前記第１の格納手段に格納された受信値及び前記第２の格納手段に格納されたエンベロープのステップに対応する第２の優先度係数に基づいて、発音中の発音イベントに対する優先度を算出する第２の算出手段と、前記所定数の発音チャンネルのすべてが発音状態である場合に新たな発音イベントが発生したときに、前記第２の算出手段によって算出された各発音チャンネルの優先度のうち最も低い優先度が前記第１の算出手段によって算出された新たな発音イベントの優先度より低いか否かを判定する判定手段と、この判定手段によって前記最も低い優先度が前記新たな発音イベントの優先度より低いと判定された場合に前記最も低い優先度の発音イベントを強制的に消音させてその発音チャンネルに前記新たな発音イベントを割り当てる割当手段と、を備えた構成になっている。
【０００５】
請求項２に記載の楽音発生処理のプログラムは、楽音発生装置のコンピュータ（実施形態においては、図１のＣＰＵ１に対応する）によって実行される楽音発生処理のプログラムであって、所定数の発音チャンネルによって複数の発音パートを分担する発音手段の各発音チャンネルに割り当てられる発音イベントに対して音高変化を与える制御イベントの種別夫々に応じた第１の優先度係数、及び前記発音イベントのエンベロープの各ステップに対応した第２の優先度係数を記憶する記憶手段を有する楽音発生装置のコンピュータに、前記制御イベントが受信された場合、当該受信された制御イベントの受信値を格納する第１の格納ステップと、前記エンベロープのステップの変更が検出された場合、当該変更されたステップを格納する第２の格納ステップと、新たな発音イベントが発生した場合、前記記憶手段に記憶された第１の優先度係数、前記第１の格納ステップにて格納された受信値及びエンベロープのアタックステップに対応する第２の優先度係数に基づいて、前記新たな発音イベントに対する優先度を算出する第１の算出ステップと、前記第１の格納ステップにて前記受信値が格納された場合、あるいは前記第２の格納ステップにて前記変更されたステップが格納された場合、前記記憶手段に記憶された第１の優先度係数、前記格納された受信値及び前記第２の格納ステップにより格納されたエンベロープのステップに対応する第２の優先度係数に基づいて、発音中の発音イベントに対する優先度を算出する第２の算出ステップと、前記所定数の発音チャンネルのすべてが発音状態である場合に新たな発音イベントが発生したときに、前記第２の算出ステップによって算出された各発音チャンネルの優先度のうち最も低い優先度が前記第１の算出ステップによって算出された新たな発音イベントの優先度より低いか否かを判定する判定ステップと、この判定ステップによって前記最も低い優先度が前記新たな発音イベントの優先度より低いと判定された場合に前記最も低い優先度の発音イベントを強制的に消音させてその発音チャンネルに前記新たな発音イベントを割り当てる割当ステップと、を実行させる。
【０００７】
【発明の実施の形態】
以下、本発明による実施形態について、図を参照して説明する。
図１は、本発明による楽音発生装置の実施形態の構成を示すブロック図である。図において、ＣＰＵ１はシステムバス２を介してＲＯＭ３、ＲＡＭ４、鍵盤５、スイッチ部６、ＭＩＤＩ  Ｉ／Ｆ（インターフェース）７に接続されている。ＣＰＵ１はワークエリアとしてのＲＡＭ４上でＲＯＭ３に格納された楽音発生処理のプログラムを実行するコンピュータを構成している。
【０００８】
鍵盤５は、演奏によって発音イベントである楽音データを入力する。スイッチ部６は、鍵盤演奏や自動演奏等の演奏モードを設定するスイッチ、複数の発音パートの各々に対する音色を設定するスイッチ、発音パートごとの優先度であるパートオフセット値の設定及び変更を入力するスイッチ、エンベロープステップの重みの設定及び変更を入力するスイッチ等で構成されている。ＭＩＤＩ  Ｉ／Ｆ７は、外部のＭＩＤＩ機器とこの楽音発生装置との間で発音イベントや制御データのイベント等からなるＭＩＤＩデータの授受を行う。ＣＰＵ１はまた音源ＬＳＩ８に接続され、鍵盤５及びＭＩＤＩ  Ｉ／Ｆ７からの発音イベントの音高データや制御データ等を音源ＬＳＩ８に出力する。
【０００９】
音源ＬＳＩ８は、ＣＨ０〜ＣＨ７からなる８個の発音チャンネルを備え、この８個の発音チャンネルによって複数の発音パートを分担し、各発音チャンネルにアサインされた発音イベントの楽音信号を同時に発生することができる。また、音源ＬＳＩ８には、８個の発音チャンネルの楽音信号を例えば２チャンネルのステレオ楽音信号に合成する合成器を備えている。そして、音源ＬＳＩ８から出力された合成楽音信号はＡ／Ｄ９によってディジタル信号からアナログ信号に変換され、出力回路１０においてフィルタ処理や増幅処理がなされて、外部のスピーカから発音される。
【００１０】
図２はＲＡＭ４のエリアの一部を示し、エンベロープパラメータ、音色パラメータ、発音パートパラメータ、発音チャンネルパラメータのエリアがある。また、図には示さないが、ＲＡＭ４には各種のレジスタ（データ用レジスタ、フラグ用レジスタ、ポインタ用レジスタ等）が設けられており、ＣＰＵ１によって実行される楽音発生処理に伴う各種の情報を一時的に記憶する。
【００１１】
エンベロープパラメータには、図３に示すように、ストップ（消音）、アタック、ディケイ、サスティン、リリースすなわちＡＤＳＲ方式におけるエンベロープの各ステップごとに優先度の重み（優先度係数）の設定値が記憶される。ＡＤＳＲ方式以外のエンベロープの場合も各ステップごとに優先度の重みの設定値が記憶される。
音色パラメータのエリアには、図４に示すように、各音色（ｎ）ごとに（この実施形態では音色０及び音色１ごとに）演奏ファクタであるピッチベンド（ＰＢ）、ビブラート（ＶＢ）、エンベロープステップ（ＥＳ）の変数名（Ｔ ＰＢ［ｎ］、Ｔ ＶＢ［ｎ］、Ｔ ＥＳ［ｎ］）に対応して優先度の重みの設定値が記憶される。同じファクタであっても音色ごとに優先度の重みは異なる。
【００１２】
発音パートパラメータのエリアには、図５に示すように、各発音パート（ｐ）ごとに設定される音色（ｎ）に応じて、図４に設定されたピッチベンド（Ｔ ＰＢ［ｎ］）、ビブラート（Ｔ ＶＢ［ｎ］）、エンベロープステップ（Ｔ ＥＳ［ｎ］）の優先度の重みが、Ｐ ＰＢ［ｐ］、Ｐ ＶＢ［ｐ］、Ｐ ＥＳ［ｐ］に記憶され、設定又は変更されたパートオフセットの値がＰ ＰＯ［ｐ］に記憶される。
発音チャンネルパラメータのエリアには、図６に示すように、各発音チャンネルすなわち各ボイス（ｖ）ごとに分担する音色番号、エンベロープステップ（Ｖ ＥＳ［ｖ］）、及び後述する演算処理によって算出される優先度（Ｖ ＰＲ［ｖ］）が記憶される。
【００１３】
次に図１の楽音発生装置における楽音発生処理の動作について説明する。
図７は、ＣＰＵ１の楽音発生処理の動作を示すメインフローチャートである。まず、所定のイニシャライズ(ステップＡ１)の後、スイッチ処理(ステップＡ２)、鍵盤処理(ステップＡ３)、ＭＩＤＩ処理(ステップＡ４)、アサイン処理(ステップＡ５)、発音処理(ステップＡ６)、その他の処理(ステップＡ７)を繰り返し実行する。
なお、ステップＡ５のアサイン処理とステップＡ６の発音処理は、ＣＰＵ１及び音源ＬＳＩ８による連続した協働作用であるが、説明の便宜上、２つの処理として区別している。
【００１４】
図８は、図７におけるステップＡ２のスイッチ処理のフローである。スイッチ部のモードスイッチを検索して(ステップＢ１)、現在のモードが自動演奏モードであるか否かを判別する（ステップＢ２）。自動演奏モードである場合には、ＭＩＤＩ  Ｉ／Ｆ７を介して入力されるＭＩＤＩデータの入力設定を行う（ステップＢ３）。自動演奏モードでなく、マニュアル演奏モードである場合には、鍵盤５の操作によって入力される演奏データの入力設定を行う（ステップＢ４）。ステップＢ３又はＢ４の設定の後は、他のスイッチ検索処理を行い（ステップＢ５）、図７のメインフローに戻る。以下に述べるように、この実施形態においては自動演奏モードにおける楽音発生処理を説明する。
【００１５】
図９は、メインフローにおけるステップＡ４のＭＩＤＩ処理のフローである。ＭＩＤＩイベントを受信したか否かを判別し（ステップＣ１）、受信したときはそのＭＩＤＩイベントが新たな発音イベントであるか否かを判別する（ステップＣ２）。発音イベントである場合には、アサインフラグＡＳＦに１をセットし（ステップＣ３）、音高データ等をレジスタに格納する発音イベント処理を行い（ステップＣ４）、さらに優先度計算処理を行う（ステップＣ５）。そして、メインフローに戻る。
【００１６】
ステップＣ２において、ＭＩＤＩイベントが発音イベントでなく、コントロールチェンジ等の制御データである場合には、そのＭＩＤＩイベントのチャンネルがパート番号に合致するか否かを判別する（ステップＣ６）。合致したときはＭＩＤＩデータの合致したパート番号をレジスタｐにセットする（ステップＣ７）。次に、受信したＭＩＤＩイベントに音色変化を与える制御データが含まれているか否かを判別して、含まれている場合には、受信した制御データをパート番号［ｐ］に対応するＲＡＭのエリアに格納する。
【００１７】
すなわち、ピッチベンドを受信したか否かを判別し（ステップＣ８）、受信したときは、図５に示したＲＡＭのエリアにおけるパート番号（ｐ）のＰ ＰＢ［ｐ］に受信値を格納する（ステップＣ９）。また、ビブラートを受信したか否かを判別し（ステップＣ１０）、受信したときは、図５に示したＲＡＭのエリアにおけるパート番号（ｐ）のＰ ＶＢ［ｐ］に受信値を格納する（ステップＣ１１）。
【００１８】
次に、エンベロープステップの重みが変更されたか否かを判別し（ステップＣ１２）、変更されたときは図５に示したＲＡＭのエリアにおけるパート番号（ｐ）のＰ ＥＳ［ｐ］に変更値を格納する（ステップＣ１３）。また、パートオフセットが変更されたか否かを判別し（ステップＣ１４）、変更されたときは図５に示したＲＡＭのエリアにおけるパート番号（ｐ）のＰ ＰＯ［ｐ］に変更値を格納する（ステップＣ１５）。
【００１９】
なお、ステップＣ１においてＭＩＤＩデータを受信していない場合、又はステップＣ６においてＭＩＤＩチャンネルがパート番号に合致しない場合にも、パート番号（ｐ）において設定されているエンベロープステップの重み及びパートオフセットの値がこの楽音発生装置のスイッチ操作によって変更されたか否かをステップＣ１２及びＣ１４において判別して、変更された場合にはステップＣ１３及びＣ１５においてその変更値を格納する。
次に、格納した制御データの値に基づいて優先度の計算（再計算）を実行する（ステップＣ１６）。そして、メインフローに戻る。
【００２０】
図１０は、ステップＣ５及びステップＣ１６における優先度計算のフローであり、図１１は優先度計算に用いる重み付け変換テーブルを表す特性曲線である。図１０のフローにおいて、ステップＣ５における優先度計算処理は新たな発音イベントすなわちノートオンイベントに対する優先度計算であり、ステップＣ１６における優先度計算処理は発音チャンネルにおいてすでに発音中の発音イベントの優先度再計算であるが、基本的に同じ動作であるので同じフローで表す。
【００２１】
まず、Ｐ ＰＢ［ｐ］のピッチベンドのＭＩＤＩ値を図１１の変換テーブルで変換してレジスタＸ ＰＢにストアした後、下記の演算式（１）により計算し、レジスタＰＢに格納する（ステップＤ１）。
ＰＢ＝｛（Ｘ ＰＢ）×（Ｔ ＰＢ［ｎ］）｝／１０          （１）
ここで、分母の値１０は正規化すなわちビット調整のためのもの（他の演算式においても同様）である。
【００２２】
次に、Ｐ ＶＢ［ｐ］のピッチベンドのＭＩＤＩ値を図１１の変換テーブルで変換してレジスタＸ ＶＢにストアした後、ビブラートの優先度の値を下記の演算式（２）により計算し、レジスタＶＢに格納する（ステップＤ２）。
ＶＢ＝｛（Ｘ ＶＢ）×（Ｔ ＶＢ［ｎ］）｝／１０          （２）
【００２３】
次に、ＭＩＤＩイベントが発音イベントである場合には、Ｐ ＥＳ［ｐ］のエンベロープステップの値を図３におけるアタックの重みで変換してレジスタＸ ＥＳにストアした後、エンベロープステップの優先度を下記の演算式（３）により計算し、レジスタＥＳに格納する（ステップＤ３）。
ＥＳ＝｛（Ｘ ＥＳ）×（Ｔ ＥＳ［ｎ］）｝／１０          （３）
ＭＩＤＩデータが発音イベントでない場合には、後述するように、エンベロープステップの推移に応じて優先度を演算式（３）により再計算する。
【００２４】
次に、Ｐ ＰＯ［ｐ］のパートオフセットの値を図１１の変換テーブルで変換してレジスタＰＯに格納する（ステップＤ４）。
そして、各レジスタの優先度の値に基づいて、下記の演算式（４）により総合的なチャンネル優先度の平均値を計算し、レジスタＳＳに格納する（ステップＤ８）。
ＳＳ＝（ＰＢ＋ＶＢ＋ＰＯ＋ＥＳ）／４          （４）
【００２５】
各発音チャンネルにおいてすでに発音中の発音イベントに対して、ＳＳに格納した優先度の値は、図６に示したＲＡＭのエリアにおいて、各チャンネル番号すなわちボイス番号（ｖ）に対応する優先度ＶＴ ＰＲ［ｖ］に転送されて記憶される。一方、新たな発音イベントに対して、ＳＳに格納した優先度の値は、次に述べるアサイン処理において利用される。
【００２６】
図１２はメインフローにおけるステップＡ５のアサイン処理のフローである。まず、アサインフラグＡＳＦが１であるか否かを判別する（ステップＥ１）。ＡＳＦが０の場合、すなわち新たな発音イベントを受信していない場合には、アサインの必要がないのでこのフローを終了する。
ＡＳＦが１で新たな発音イベントを受信した場合には、アサイン処理変数の初期化を行う。すなわち、現在見つかっている最も低い優先度をセットするレジスタＰＬに２５５（最大値）をセットし、現在調査中のチャンネル番号をセットするレジスタＣＣに０（チャンネル番号０）をセットし、現在までに見つかっている最も低い優先度のチャンネル番号をセットするレジスタＣＬに０をセットする(ステップＥ２)。
【００２７】
次に、現在調査中の発音チャンネルの優先度をセットするレジスタＰに現在の発音チャンネルの優先度をセットする(ステップＥ３)。最初は、現在調査中のチャンネル番号ＣＣの値は０である。次に、Ｐの値が０であるか否かを判別する(ステップＥ４)。すなわち、現在調査中の発音チャンネルの優先度が０で、その発音チャンネルが消音状態であるか否かを判別する。この場合には、ＰＬにＰの値すなわち０をセットし、ＣＬにＣＣの値すなわち現在調査中のチャンネル番号をセットする(ステップＥ５)。
【００２８】
ステップＥ４においてＰの値が０でない場合には、Ｐの値がＰＬの値より小さいか否かを判別する(ステップＥ６)。すなわち、現在調査中の発音チャンネルの優先度が現在見つかっている最も低い優先度よりも低いか否かを判別する。Ｐの値がＰＬの値より小さい場合には、ＰＬにＰの値をセットし、ＣＬにＣＣのチャンネル番号をセットする(ステップＥ７)。すなわち、現在調査中の発音チャンネルを現在見つかっている最も低い優先度のチャンネル番号として入れ替える。
【００２９】
この入れ替えの後、又はステップＥ６においてＰの値がＰＬの値以上である場合には、ＣＣの値をインクリメントして(ステップＥ８)、次のチャンネル番号を指定する。そして、インクリメントしたＣＣの値が８より小さいか否か、すなわち最大チャンネル番号である７以下か否かを判別する(ステップＥ９)。ＣＣの値が８より小さい場合には、次のチャンネル番号が存在するので、ステップＥ３に移行して上記処理を繰り返す。
【００３０】
例えば、図６の例では、ステップＥ３において、チャンネル番号０の音色０の優先度である５０をＰにセットした後、ステップＥ４ではＰの値が０でないのでステップＥ６に進む。ステップＥ６において、Ｐの値５０はＰＬの値２５５よりも小さいのでステップＥ７に進んで、ＰＬに優先度５０をセットし、ＣＬにチャンネル番号０をセットする。次に、ステップＥ８において次のチャンネル番号１がセットされ、ステップＥ３に移行する。
【００３１】
ステップＥ３において、Ｐにチャンネル番号１の音色１の優先度４２がセットされる。そして、ステップＥ３、ステップＥ５に進む。ステップＥ５において、Ｐの値４２はＰＬの値５０より小さいので、見つかっている最も低い優先度のチャンネル番号が入れ替わり、ステップＥ６に進んでＰＬに優先度４２をセットし、ＣＬにチャンネル番号１をセットする。
【００３２】
このように、ステップＥ４においてＰの値が０でない場合には、ステップＥ９においてＣＣの値が８になるまで、すなわちすべての発音チャンネルの優先度を検索するまで、ステップＥ３からステップＥ９までのループを繰り返し実行して、すべての発音チャンネルの中で最も低い優先度（図６の例では優先度８）の発音チャンネル（ＣＬのチャンネル番号）を捜す。そして、ＣＬの値を割り当てチャンネル番号として保持する(ステップＥ１０)。したがって、図６の例ではチャンネル番号５を保持する。ステップＥ４においてＰの値が０で現在調査中の発音チャンネルが消音状態である場合には、発音イベントを無条件にその発音チャンネルに割り当てられるので、ステップＥ５においてそのチャンネル番号をＣＬにセットした後は、ステップＥ１０に進んでＣＬの値を割り当てチャンネル番号として保持する。
【００３３】
ステップＥ１０において、最も低い優先度の発音イベントのチャンネル番号を保持した後は、ＰＬの優先度の値が図１０のフローにおけるステップＤ８でレジスタＳＳに格納した新たな発音イベントの優先度の値よりも小さいか否かを判別する（ステップＥ１１）。ＰＬの優先度がＳＳの優先度よりも小さい場合には、現在指定している発音チャンネルに新たな発音イベントを割り当てることができる。この場合において、ＰＬが０であるか否か、すなわち優先度が０で消音状態であるか否かを判別する（ステップＥ１２）。
【００３４】
ＰＬが０でない場合には、割り当てチャンネル番号における発音イベントのレベルが０（消音状態）になっていないので、強制ファーストダンプ処理を行ってその発音イベントを強制的に消音する(ステップＥ１３)。一方、ＰＬが０である場合には、すでにその発音チャンネルは消音状態になっているので、強制ファースト処理を行う必要はない。ステップＥ１３の強制ファーストダンプ処理の後、又はステップＥ１２においてＰＬが０（消音状態）である場合、すなわち新たに受信したＭＩＤＩイベントである発音イベントのアサインが終了したときは、アサインフラグＡＳＦに０をセットする（ステップＥ１４）。そして、メインフローに戻る。
【００３５】
図１３は、各発音チャンネルにおいて発音中の発音イベントのエンベロープステップの推移を検索するタイマインタラプトのフローである。一定時間ごとのタイマインタラプトが発生すると、チャンネル番号を指定するポインタｖに０をセットし（ステップＦ）、ｖをインクリメントしながら以下のループ処理を実行する。すなわち、ｖで指定した発音チャンネル［ｖ］のエンベロープのステップを記憶するレジスタＥｎｖＳｔｅｐ［ｖ］が変化したか否かを判別する（ステップＦ２）。変化した場合には、図６のＶ ＥＳ［ｖ］の値を更新する（ステップＦ３）。そして、更新したＶ ＥＳ［ｖ］の値に応じて発音チャンネル［ｖ］の優先度を再計算する（ステップＦ４）。
【００３６】
優先度の再計算の後、又はステップＦ２においてＥｎｖＳｔｅｐ［ｖ］が変化していない場合には、ｖの値をインクリメントする（ステップＦ５）。そして、ｖの値が７より大きいか否かを判別する（ステップＦ６）。ｖの値が７以下である場合には、ステップＦ２に移行して上記ループ処理を繰り返す。ｖの値が７より大きい場合には、すべての発音チャンネルの変化の検索が終了したので、メインフローに戻る。
【００３７】
以上のように、上記実施形態の楽音発生装置の構成によれば、所定数の発音チャンネルによって複数の発音パートを分担する場合に、各発音チャンネルに割り当てられる発音イベントに対して音色変化を与える制御データの種別、発音イベントのエンベロープのステップ、及び各発音パートに応じて優先度を算出し、発音チャンネルのすべてが発音状態である場合に新たな発音イベントが発生したときは、その新たな発音イベントの優先度が発音中の発音イベントのうち最も低い優先度より高い場合に、その発音チャンネルの発音イベントを強制的に消音して新たな発音イベントを割り当てる。
【００３８】
また、上記実施形態のプログラムは、楽音発生装置のコンピュータによって実行させる楽音発生処理のプログラムであって、
所定数の発音チャンネルによって複数の発音パートを分担する発音手段の各発音チャンネルに割り当てられる発音イベントに対して音色変化を与える制御データの種別、発音イベントのエンベロープのステップ、及び各発音パートに応じて優先度係数を設定するステップと、所定数の発音チャンネルのすべてが発音状態である場合に新たな発音イベントが発生したときは各発音チャンネルにおいて発音中の発音イベント及び新たな発音イベントに対する優先度を優先度係数に基づいて算出するステップと、この算出するステップによって算出された各発音チャンネルの優先度のうち最も低い優先度が新たな発音イベントの優先度より低いか否かを判定するステップと、この判定するステップによって最も低い優先度が新たな発音イベントの優先度より低いと判定された場合に最も低い優先度の発音イベントを強制的に消音させてその発音チャンネルに新たな発音イベントを割り当てるステップとを有する構成になっている。
すなわち、このプログラムは、楽音発生装置のコンピュータであるＣＰＵ１を楽音発生処理における各処理を実行する複数の手段として機能させる。
【００３９】
したがって、このような楽音発生装置又は楽音発生処理のプログラムによれば、所定数の発音チャンネルのすべてが発音状態である場合に新たな発音イベントが発生したときに、発音中の発音イベントを強制的に消音させて発音チャンネルを確保するアサイン処理を行っても音楽的に不自然な影響を与えることがない。
【００４０】
なお、上記実施形態においては、各発音パートに応じて優先度係数を設定するが、その場合において、メロディパート等のように主旋律の発音パートに対して高い優先度を設定する。したがって、重要な発音パートである主旋律の発音パートを強制的に消音することを回避できる。
また、上記実施形態においては、プログラムチェンジ等の制御データによって与えられる音色変化量が大きいほど高い優先度を設定する。したがって、ユーザが意識的に強調した発音イベントを強制的に消音することを回避できる。
【００４１】
さらに、上記実施形態においては、発音中の発音イベントのエンベロープステップを一定時間ごとに検索して、各発音チャンネルの優先度を再計算する。したがって、新たな発音イベントの発生に対して迅速なアサイン処理が可能となり、例えば、その発音イベントのアサインが遅れて音切れが発生するのを回避できる。
【００４２】
なお、上記実施形態においては、ＭＩＤＩデータの入力に対して優先度に基づくアサイン処理を行う場合について説明したが、図８のフローにおいて鍵盤入力が設定された場合にも、鍵盤から入力される演奏データに含まれる制御データ、各発音チャンネルに対して指定された発音パートに応じて、鍵盤入力に対して優先度に基づくアサイン処理を行う構成にしてもよい。この場合にも当然に、上記実施形態と同様の効果が得られる。
【００４３】
【発明の効果】
本発明によれば、所定数の発音チャンネルのすべてが発音状態である場合に新たな発音イベントが発生したときに、発音中の発音イベントを強制的に消音させて発音チャンネルを確保するアサイン処理を行っても音楽的に不自然な影響を与えることがない。
【図面の簡単な説明】
【図１】本発明による楽音発生装置の実施形態の構成を示すブロック図。
【図２】図１におけるＲＡＭのエリアのデータ構成を示す図。
【図３】図２におけるのエンベロープステップの優先度の重みのデータ構成例を示す図。
【図４】図２における音色パラメータの優先度の重みのデータ構成例を示す図。
【図５】図２における発音パートパラメータのデータ構成例を示す図。
【図６】図２におけるチャンネル優先度のデータ構成例を示す図。
【図７】図１のＣＰＵの動作を示すメインフローチャート。
【図８】図４におけるスイッチ処理のフローチャート。
【図９】図４におけるＭＩＤＩ処理のフローチャート。
【図１０】図９における優先度計算処理のフローチャート。
【図１１】優先度計算に用いる重み付け変換テーブルを表す特性曲線の図。
【図１２】図４におけるアサイン処理のフローチャート。
【図１３】タイマインタラプトのフローチャート。
【符号の説明】
１  ＣＰＵ
３  ＲＯＭ
４  ＲＡＭ
５  鍵盤
６  スイッチ部
７  ＭＩＤＩインターフェース
８  音源ＬＳＩ
【図１】
0004329276.tif 000002
【図２】
0004329276.tif 000003
【図３】
0004329276.tif 000004
【図４】
0004329276.tif 000005
【図５】
0004329276.tif 000006
【図６】
0004329276.tif 000007
【図７】
0004329276.tif 000008
【図８】
0004329276.tif 000009
【図９】
0004329276.tif 000010
【図１０】
0004329276.tif 000011
【図１１】
0004329276.tif 000012
【図１２】
0004329276.tif 000013
【図１３】
0004329276.tif 000014