(57)【特許請求の範囲】
【請求項１】
所定数の発音チャンネルを有する発音手段の発音チャンネル夫々において発音中の楽音信号のエンベロープステップを一定時間ごとに検索する検索手段と、
前記検索手段により検索されるごとに、検索されたエンベロープステップ及び当該エンベロープステップに設定された優先度を前記発音チャンネル毎に記億する記憶手段と、
発音すべき発音イベントが発生したときに、前記記億手段に記億されている優先度のうち、最も低い優先度の発音チャンネルを判定する判定手段と、
この判定手段によって判定された最も低い優先度の発音チャンネルに前記発音イベントを割り当てる割当手段と、
を備えた楽音発生装置。
【請求項２】
前記割当手段は、前記所定数の発音チャンネルのすべてが発音状態である場合には前記最も低い優先度の発音チャンネルで発音中の楽音信号を強制的に消音させて発生した発音イベントをその発音チャンネルに割り当てることを特徴とする請求項１記載の楽音発生装置。
【請求項３】
楽音発生装置のコンピュータによって実行される楽音発生処理のプログラムであって、
所定数の発音チャンネルを有する発音手段の発音チャンネル夫々において発音中の楽音信号のエンベロープステップを一定時間ごとに検索するステップと、
前記検索するステップにより検索されるごとに、検索されたエンベロープステップ及び当該エンベロープステップに設定された優先度を前記発音チャンネル毎に所定の記億手段に記億するステップと、
発音すべき発音イベントが発生したときに、前記記億手段に記億されている優先度のうち、最も低い優先度の発音チャンネルを判定するステップと、
この判定するステップによって判定された最も低い優先度の発音チャンネルに前記発音イベントを割り当てるステップと、
を有することを特徴とする楽音発生処理のプログラム。
【請求項４】
前記割り当てるステップは、前記所定数の発音チャンネルのすべてが発音状態である場合には前記最も低い優先度の発音チャンネルで発音中の楽音信号を強制的に消音させて発生した発音イベントをその発音チャンネルに割り当てる処理を行うことを特徴とする請求項３記載の楽音発生処理のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、楽音発生装置及び楽音発生処理のプログラムに関する。
【０００２】
【従来の技術】
近年の電子楽器等の楽音発生装置においては、複数の楽音信号を同時に発音して豊かな楽音を提供できる構成になっている。そのために、音源等の発音手段は所定数の発音チャンネル（「ボイス」ともいう）を備え、アサイナ等によって、各発音チャンネルに発音イベントを割り当てる処理を行っている。演奏等により発音イベントが発生したときに、所定数の発音チャンネルがすべて発音中である場合には、その中の１つの楽音信号をファーストダンプして強制的に消音させて発音チャンネルを確保するアサイン処理（「トランケート処理」ともいう）、すなわち後着優先のアサイン処理を行うのが一般的である。
【０００３】
このアサイン処理では、何らかの条件で消音する発音チャンネルを選択する必要がある。従来においては、次の３つの選択方法が採られていた。第１の方法は、発音している楽音信号のエンベロープの段階（例えば、エンベロープのアタック、ディケイ、サスティン、リリースのステップ）が最も進んでいるものを選択する。第２の方法は、楽音信号のエンベロープのレベルが最も低いものを選択する。第３の方法は、演奏例えば押鍵が最も古いものを選択する。
【０００４】
【発明が解決しようとする課題】
しかしながら、上記従来の技術においては、消音する発音チャンネルの選択方法が音楽的な要素を考慮していないために、強制的な消音の結果によっては発生する音に不自然な影響を与えるという課題があった。
例えば、発音している楽音信号のエンベロープの段階（ステップ）で選択する場合、ある音色の段階が他の音色の段階よりも進んでいても、他の音色よりも音楽的に重要度が高いこともある。例えば、ＰＣＭ波形などにエンベロープをかけている場合には、元の楽音波形のレベルとエンベロープとを乗算しているので、減衰の速い音色はエンベロープのステップが進んでいなくても発音がほぼ終わっていることが多い。
【０００５】
また、複数の発音チャンネルにおいて、楽音信号のエンベロープが同じリリース状態すなわち減衰状態であっても、ミュート機構のない楽器の楽音は一般的に減衰時間が長く、減衰の途中でアサインすると不自然さが大きいが、ミュート機構のある楽器の楽音は一般的に減衰時間が短く、減衰の途中でアサインしても不自然にならない。したがって、これら複数の楽音信号におけるエンベロープの段階だけで消音の発音チャンネルを選択することは音楽的に好ましくない。
【０００６】
以上のことは、楽音信号のエンベロープのレベルが最も低いものを選択する方法、又は、演奏例えば押鍵が最も古いものを選択する方法においても同じように、強制的な消音の結果によっては発生する音に不自然な影響を与えることになる。
本発明の課題は、発音中の楽音信号を強制的に消音させて発音チャンネルを確保するアサイン処理を行っても、音楽的に不自然な影響を与えないようにすることである。
【０００７】
【課題を解決するための手段】
請求項１に記載の楽音発生装置は、所定数の発音チャンネルを有する発音手段の発音チャンネル夫々において発音中の楽音信号のエンベロープステップを一定時間ごとに検索する検索手段と、前記検索手段により検索されるごとに、検索されたエンベロープステップ及び当該エンベロープステップに設定された優先度を前記発音チャンネル毎に記億する記憶手段と、発音すべき発音イベントが発生したときに、前記記億手段に記億されている優先度のうち、最も低い優先度の発音チャンネルを判定する判定手段と、この判定手段によって判定された最も低い優先度の発音チャンネルに前記発音イベントを割り当てる割当手段と、を備えた構成になっている。
【０００８】
請求項３に記載の楽音発生処理のプログラムは、楽音発生装置のコンピュータによって実行される楽音発生処理のプログラムであって、所定数の発音チャンネルを有する発音手段の発音チャンネル夫々において発音中の楽音信号のエンベロープステップを一定時間ごとに検索するステップと、前記検索するステップにより検索されるごとに、検索されたエンベロープステップ及び当該エンベロープステップに設定された優先度を前記発音チャンネル毎に所定の記億手段に記億するステップと、発音すべき発音イベントが発生したときに、前記記億手段に記億されている優先度のうち、最も低い優先度の発音チャンネルを判定するステップと、この判定するステップによって判定された最も低い優先度の発音チャンネルに前記発音イベントを割り当てるステップと、を有する構成になっている。
【０００９】
請求項１又は請求項３に記載の発明によれば、所定数の発音チャンネルがすべて発音中である場合において、新たに発音イベントが発生したときは、各発音チャンネルにおいて発音中の楽音信号の音色及び発音推移に対応する優先度を検索して、最も低い優先度の発音チャンネルを発生した発音イベントのチャンネルに割り当てる。
【００１０】
【発明の実施の形態】
以下、本発明による実施形態について、図を参照して説明する。
図１は、本発明による楽音発生装置を電子楽器に適用した実施形態の構成を示すブロック図である。図において、ＣＰＵ１はシステムバス２を介してＲＯＭ３、ＲＡＭ４、鍵盤５、ＭＩＤＩ  Ｉ／Ｆ（インターフェース）６に接続されている。ＣＰＵ１はワークエリアとしてのＲＡＭ４上でＲＯＭ３に格納された制御プログラムを実行するコンピュータである。
【００１１】
鍵盤５は、演奏によって発音イベントである楽音データを入力するとともに、発音する音色その他音楽的な効果の制御イベントを設定するスイッチを有する。したがって鍵盤楽器はもちろんのこと、弦楽器や打楽器を含む様々な楽器の発音イベントを入力することができる。ＭＩＤＩ  Ｉ／Ｆ６は、外部のＭＩＤＩ機器とこの電子楽器との間で発音イベントや制御イベント等からなるＭＩＤＩデータの授受を行う。ＣＰＵ１はまた音源ＬＳＩ７に接続され、鍵盤５及びＭＩＤＩ  Ｉ／Ｆ６からの発音イベント及び制御イベントを音源ＬＳＩ７に出力する。
【００１２】
音源ＬＳＩ７は、ＣＨ０〜ＣＨ７からなる８個の発音チャンネル（以下、単にチャンネルという）を備え、８個の発音イベントに対応する楽音を同時に発生することができる。また、音源ＬＳＩ７内には、各チャンネルにおける楽音信号のエンベロープを発生するエンベロープジェネレータを備えている。この場合のエンベロープは、音が出始めてから最大音量に達するまでのアタック（Ａｔｔａｃｋ）のステップ、最大音量から減衰して持続音量に達するまでのディケイ（Ｄｅｃａｙ）のステップ、音量持続のサスティン（Ｓｕｓｔａｉｎ）のステップ、音が減衰して消音に達するまでのリリース（Ｒｅｌｅａｓｅ）のステップからなる、いわゆるＡＤＳＲの４段階のステップで構成される。
【００１３】
音源ＬＳＩ７にはさらに、８個のチャンネルからの楽音信号を例えば２チャンネルのステレオ楽音信号に合成する合成器を備えている。そして、音源ＬＳＩ７から出力された合成楽音信号はＡ／Ｄ８によってアナログ信号に変換され、出力回路９においてフィルタ処理や増幅処理がなされて、外部のスピーカから発音される。
【００１４】
図２及び図３はＲＡＭ４のワークエリアの一部を示している。図２に示すように、各音色ごとの優先度パラメータ及び各チャンネルごとのチャンネル優先度がストアされる。各音色ごとの優先度パラメータは、図３に示すように、上記したアタック、ディケイ、サスティン、リリースの４段階のステップ（それぞれステップ番号１，２，３，４）に加えて、消音段階のステップ（ステップ番号０）の各ステップごとに優先度が設定されている。この図に示すように、優先度は各音色及びエンベロープの各ステップすなわち発音推移に応じて変化する。この優先度はユーザによって設定されるが、優先度のデフォルトの値をＲＯＭ３内にあらかじめ記憶しておいてもよい。
【００１５】
なお、各チャンネルの優先度はステップ番号の変化すなわち発音推移に応じて変化するので、一定時間ごとに各チャンネルの優先度を検索する。後述する図７に示すように、その検索結果を記憶するたの優先度検索エリアがＲＡＭ４に設けられている。
【００１６】
図１は、ＣＰＵ１の動作を示すメインフローチャートである。まず、所定のイニシャライズ(ステップＡ１)の後、スイッチ処理(ステップＡ２)、鍵盤処理(ステップＡ３)、ＭＩＤＩ処理(ステップＡ４)、アサイン処理(ステップＡ５)、発音処理(ステップＡ６)、その他の処理(ステップＡ７)を繰り返し実行する。
なお、ステップＡ５のアサイン処理とステップＡ６の発音処理は、ＣＰＵ１及び音源ＬＳＩ７による連続した協働作用であるが、説明の便宜上、２つの処理として区別している。
【００１７】
ステップＡ２のスイッチ処理では、設定された複数の音色スイッチやその他演奏や制御に関係するスイッチの状態を検索する。
ステップＡ３の鍵盤処理では、図５のフローに示すように、鍵変化があるか否かを判別し(ステップＢ１)、鍵変化がない場合にはこのフローを終了するが、鍵変化があったときは押鍵であるか離鍵であるかを判別する。押鍵である場合には発音イベントが新たに発生したので、８個のチャンネルのいずれかにその発音イベントを割り当てる（アサインする）ために、アサインフラグＡＳＦを１にセットする(ステップＢ２)。
【００１８】
一方、鍵変化が離鍵である場合には、離鍵された鍵の音高が発音中のチャンネルの音高であるか否かを判別する(ステップＢ３)。発音中のチャンネルの音高である場合には、そのチャンネル番号をレジスタｍにセットする(ステップＢ４)。そして、リリースフラグＲＳＦに１をセットする(ステップＢ５)。
ステップＢ２においてＡＳＦをセットした後、ステップＢ５においてＲＳＦをセットした後、又はステップＢ３において離鍵された鍵の音高が発音中のチャンネルの音高でない場合（例えば、制御データ用に割り当てた鍵である場合）には、その他の処理（例えば、発音又は消音等のフラグ処理）を行い(ステップＢ６)、このフローを終了して図４のメインフローに戻る。
【００１９】
図６はメインフローにおけるステップＡ５のアサイン処理のフローであり、図７はＲＡＭ４の優先度検索エリアである。図６において、ＡＳＦが１であるか否かを判別し(ステップＣ１)、このフラグが０の場合はこのフローを終了する。このフラグが１の場合は、現在見つかっている最も低い優先度をセットするレジスタＰＬに２５５（最大値）をセットし、現在調査中のチャンネル番号をセットするレジスタＣＣに０（チャンネル番号０）をセットし、現在までに見つかっている最も低い優先度のチャンネル番号をセットするレジスタＣＬに０をセットする(ステップＣ２)。すなわち、アサイン処理の初期設定を行う。
【００２０】
次に、現在調査中のチャンネルの優先度をセットするレジスタＰに現在のチャンネルの優先度をセットする(ステップＣ３)。最初は、現在調査中のチャンネル番号ＣＣの値は０であるので、図７の例ではＰの値はチャンネル番号０の優先度である８になる。次に、Ｐの値が０であるか否かを判別する(ステップＣ４)。すなわち、現在調査中のチャンネルの優先度が０で、そのチャンネルが消音状態であるか否かを判別する。この場合には、ＰＬにＰの値すなわち０をセットし、ＣＬにＣＣの値すなわち現在調査中のチャンネル番号をセットする(ステップＣ５)。
【００２１】
ステップＣ４においてＰの値が０でない場合には、Ｐの値がＰＬの値より小さいか否かを判別する(ステップＣ６)。すなわち、現在調査中のチャンネルの優先度が現在見つかっている最も低い優先度よりも低いか否かを判別する。Ｐの値がＰＬの値より小さい場合には、ＰＬにＰの値をセットし、ＣＬにＣＣのチャンネル番号をセットする(ステップＣ７)。すなわち、現在調査中のチャンネルを現在見つかっている最も低い優先度のチャンネル番号として入れ替える。
【００２２】
この入れ替えの後、又はステップＣ６においてＰの値がＰＬの値以上である場合には、ＣＣの値をインクリメントして(ステップＣ８)、次のチャンネル番号を指定する。そして、インクリメントしたＣＣの値が８より小さいか否か、すなわち最大チャンネル番号７以下か否かを判別する(ステップＣ９)。ＣＣの値が８より小さい場合には、次のチャンネル番号が存在するので、ステップＣ３に移行して上記処理を繰り返す。
【００２３】
例えば、図７の例では、ステップＣ３においてＰにチャンネル番号０の音色０、ステップ番号２の優先度である８をＰにセットした後、ステップＣ４ではＰの値が０でないのでステップＣ６に進む。ステップＣ６において、Ｐの値８はＰＬの値２５５よりも小さいのでステップＣ７に進んで、ＰＬに優先度８をセットし、ＣＬにチャンネル番号０をセットする。次に、ステップＣ８において次のチャンネル番号１がセットされ、ステップＣ３に移行する。
【００２４】
次に、ステップＣ３において、Ｐにチャンネル番号１の音色１、ステップ番号１の優先度１０がセットされる。そして、ステップＣ４、ステップＣ６に進む。ステップＣ６において、Ｐの値１０はＰＬの値８より大きいので、ステップＣ８に進んで次のチャンネル番号２を指定してステップＣ３に移行する。ステップＣ３において、Ｐにチャンネル番号２の音色１、ステップ番号２の優先度７がセットされる。そして、ステップＣ４、ステップＣ６に進む。ステップＣ６において、Ｐの値７はＰＬの値８より小さいので、見つかっている最も低い優先度のチャンネル番号が入れ替わり、ステップＣ７に進んでＰＬに優先度７をセットし、ＣＬにチャンネル番号２をセットする。
【００２５】
このように、ステップＣ４においてＰの値が０でない場合には、ステップＣ９においてＣＣの値が８になるまで、すなわちすべてのチャンネルの優先度を検索するまで、ステップＣ３からステップＣ９までのループを繰り返し実行して、すべてのチャンネルの中で最も低い優先度のチャンネル（ＣＬのチャンネル番号）を捜す。そして、ＣＬの値を割り当てチャンネル番号として保持する(ステップＣ１０)。
【００２６】
ステップＣ４においてＰの値が０で現在調査中のチャンネルが消音状態である場合には、発音イベントを無条件にそのチャンネルに割り当てられるので、ステップＣ５においてそのチャンネル番号をＣＬにセットした後は、ステップＣ１０に進んでＣＬの値を割り当てチャンネル番号として保持する。
【００２７】
ステップＣ１０においてチャンネル番号を保持した後はステップＣ１１に進み、ＰＬが０であるか否か、すなわち優先度が０で消音状態であるか否かを判別する。ＰＬが０でない場合には、割り当てチャンネル番号における楽音信号のレベルが０（消音）になっていないので、強制ファーストダンプ処理を行ってその楽音信号を強制的に消音する(ステップＣ１２)。例えば、図７の例では、最も優先度が低い値１のチャンネル番号７が発音イベントに割り当てられ、強制ファーストダンプ処理によってリリース状態（ｓｔｅｐ番号４）の楽音信号を消音する。
【００２８】
そして、ＡＳＦに０をセットし(ステップＣ１３)、発音イベントを割り当てたチャンネルＣＬのステップであるｓｔｅｐ（ＣＬ）に１（アタック）をセットする(ステップＣ１４)。ステップＣ１１においてＰＬが０である場合には、すでにそのチャンネルは消音状態になっているので、強制ファースト処理を行う必要がないので、ステップＣ１３、ステップＣ１４と進む。
【００２９】
図８は、一定時間ごとに発生するタイマインタラプトのフローである。このタイマインタラプトの処理によって、各チャンネルの楽音信号のレベルを検出して、エンベロープのｓｔｅｐ番号が推移したかどうかを検索する。
最初に、チャンネル番号を指定するレジスタｎに０をセットし(ステップＤ１)、ｎの値をインクリメントしながら、以下のループ処理を実行する。
まず、ｎで指定したチャンネルＣＨ（ｎ）のレベルをレジスタＬＥＶにストアする(ステップＤ２)。次に、リリースフラグＲＳＦが１（離鍵）であるか否かを判別する(ステップＤ３)。
【００３０】
ＲＳＦが１である場合には、ｎで指定しているチャンネル番号と離鍵されたチャンネル番号ｍとが一致するか否かを判別する(ステップＤ４)。両者が一致した場合には、そのチャンネルにおけるエンベロープがｓｔｅｐ番号３のサスティンからｓｔｅｐ番号４のリリースに推移したことになるので、図７における指定しているチャンネル番号のｓｔｅｐ（ｎ）を４に更新する(ステップＤ４)。そして、ＲＳＦに０をセットする(ステップＤ５)。すなわち、サスティン状態においては楽音信号のレベルが一定であるので、レベル変化によらず離鍵のタイミングでステップの変化を検出する。
【００３１】
ステップＤ３においてＲＳＦが０である場合、又はステップＤ４においてｎで指定しているチャンネル番号と離鍵されたチャンネル番号ｍとが一致しない場合は、ステップＤ７に進んで、ステップＤ２においてストアしたＬＥＶの値がエンベロープのステップの最終値に達して、次のステップに変化したか否かを判別する。ステップが変化した場合には、図７のステップ優先度を更新する(ステップＤ８)。
【００３２】
次に、ｎの値をインクリメントして次のチャンネル番号を指定する(ステップＤ９)。そして、ｎの値が８以上になったか否かを判別する(ステップＤ１０)。ｎの値が７以下である場合には、ステップＤ２に移行してループ処理を繰り返す。ｎの値が８以上になってすべてのチャンネルの検索が終了した場合には、このフローを終了して図４のメインフローに戻る。
【００３３】
以上のように、上記実施形態の楽音発生装置のアサイン処理によれば、所定数の発音チャンネルがすべて発音中である場合において、新たに発音イベントが発生したときは、各発音チャンネルにおいて発音中の楽音信号の音色及び発音推移に対応する優先度を検索して、最も低い優先度の発音チャンネルを発生した発音イベントのチャンネルに割り当てる。
したがって、発音中の楽音信号を強制的に消音させて発音チャンネルを確保するアサイン処理を行っても、音楽的に不自然な影響を与えないアサイン装置を実現することが可能になる。
【００３４】
この場合において、判定手段としてのＣＰＵ１は、所定数の発音チャンネルにおける楽音信号の発音推移を一定時間ごとに検索して、その検索結果及びその楽音信号の音色に応じて所定の記憶手段であるＲＡＭ４に一定時間ごとの各発音チャンネルの優先度を記憶して、発音すべき発音イベントが発生したときはＲＡＭ４を参照して最も低い優先度の発音チャンネルを判定する。
したがって、発音すべき発音イベントの発生に対して迅速なアサイン処理が可能になり、例えば、発生した発音イベントのアサインが遅れて楽音の音切れが発生するような事態を防止できる。
【００３５】
また、上記実施形態によれば、電子楽器である楽音発生装置のコンピュータを、所定数の発音チャンネルを有する発音手段によって発音すべき発音イベントが発生したときは各発音チャンネルにおいて発音中の楽音信号の音色及び発音推移に対応する優先度を検索して最も低い優先度の発音チャンネルを判定するステップを実行する判定手段、並びに、この判定手段によって判定された最も低い優先度の発音チャンネルに発音イベントを割り当てるステップを実行する割当手段として機能させる楽音発生処理のプログラムを提供する。
【００３６】
言い換えれば、このプログラムは、楽音発生装置のコンピュータによって実行させる楽音発生処理のプログラムであって、所定数の発音チャンネルを有する発音手段によって発音すべき発音イベントが発生したときは各発音チャンネルにおいて発音中の楽音信号の音色及び発音推移に対応する優先度を検索して最も低い優先度の発音チャンネルを判定するステップと、この判定するステップによって判定された最も低い優先度の発音チャンネルに発音イベントを割り当てるステップとを有する楽音発生処理のプログラムを提供する。
【００３７】
【発明の効果】
本発明によれば、発音中の楽音信号を強制的に消音させて発音チャンネルを確保するアサイン処理を行っても、音楽的に不自然な影響を与えない。
【図面の簡単な説明】
【図１】本発明による楽音発生装置を電子楽器に適用した実施形態の構成を示すブロック図。
【図２】図１におけるＲＡＭのエリアのデータ構成を示す図。
【図３】図２における優先度パラメータの詳細なデータ構成を示す図。
【図４】図１のＣＰＵの動作を示すメインフローチャート。
【図５】図４における鍵盤処理のフローチャート。
【図６】図４におけるアサイン処理のフローチャート。
【図７】図１におけるＲＡＭの優先度検索エリアのデータ構成を示す図。
【図８】タイマインタラプトのフローチャート。
【符号の説明】
１  ＣＰＵ
３  ＲＯＭ
４  ＲＡＭ
５  鍵盤
６  ＭＩＤＩインターフェース
７  音源ＬＳＩ
【図１】
0004306138.tif 000002
【図２】
0004306138.tif 000003
【図３】
0004306138.tif 000004
【図４】
0004306138.tif 000005
【図５】
0004306138.tif 000006
【図６】
0004306138.tif 000007
【図７】
0004306138.tif 000008
【図８】
0004306138.tif 000009