(57)【特許請求の範囲】
【請求項１】
楽音を発生する際に、制御手段から供給された楽音パラメータが書き込まれる音源制御レジスタと、
前記音源制御レジスタに波形生成開始時に書き込まれた楽音パラメータが書き込まれる現在値レジスタを有し、該現在値レジスタに書き込まれた楽音パラメータを使用して波形信号を生成すると共に、前記音源制御レジスタに書き込まれた次の同種の楽音パラメータを前記現在値レジスタの楽音パラメータが目標値とする処理を行うことにより波形信号を生成していく波形生成部と、
前記現在値レジスタに書き込まれた楽音パラメータが目標値に達した際に、到達フラグと割込信号を生成する生成手段と、
前記音源制御レジスタへ書き込まれている楽音パラメータが読み出されて、前記現在値レジスタへの書き込みが終了するまでの時間を計数する第１のタイマ手段と、
前記割込信号を受けて前記制御手段が次の楽音パラメータを前記音源制御レジスタに書き込んだ際に、当該書き込みの結果が前記到達フラグに反映されるまでの動作遅延時間以上の時間を計数する第２のタイマとを備え、
前記第１のタイマ手段がタイムアップした後に、前記制御手段が次の同種の楽音パラメータを前記音源制御レジスタに書き込むと共に、前記第２のタイマがタイムアップするまで前記到達フラグおよび前記割込信号をマスクするようにしたことを特徴とする音源装置。
【請求項２】
前記音源制御レジスタに複数種類の波形信号にそれぞれ対応する楽音パラメータが書き込まれるようにされていると共に、前記楽音パラメータをそれぞれ使用して前記波形生成部が前記複数種類の波形信号をそれぞれ生成するようにされており、前記制御手段により前記波形生成部の前記複数種類の内の特定の波形信号に関する読み出し設定が行われた際に、該特定の波形信号における全チャンネルの前記到達フラグが揃うに十分な期間とされる所定の時間を計数する第３のタイマを備え、前記割込信号の発生時に前記制御手段は、前記波形生成部の前記複数種類の内の特定の波形信号に関する読み出し設定を行い、その後の前記第３のタイマのタイムアップに応じて前記到達フラグを検出し、該当するチャンネルにおける次の楽音パラメータを前記音源制御レジスタに書き込むようにしたことを特徴とする請求項１記載の音源装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、波形信号を生成する波形信号生成手段を備える音源装置に関するものである。
【０００２】
【従来の技術】
従来、電子楽器などに備えられている音源装置は、楽音波形を発生する際に使用する種々の楽音パラメータを記憶する音源制御レジスタを有している。通常、音源装置は複数の楽音信号を同時に発音するために、時分割処理により各チャンネルの楽音生成処理を行っている。この時分割チャンネル処理における各チャンネルの処理は、各処理段階で使用される楽音パラメータを音源制御レジスタから逐次読み出しながら実行されている。従って、音源制御レジスタには各チャンネル毎の各処理段階で使用される複数の楽音パラメータを記憶することのできる複数の記憶領域が備えられている。
【０００３】
【発明が解決しようとする課題】
従来の電子楽器等に備えられる音源装置の一部の構成を図８に示す。この図８には音源装置におけるエンベロープを生成するエンベロープ生成部（ＥＧ）１３２の構成が示されている。このＥＧ１３２において、図９に示すエンベロープ波形を生成させる動作を説明する。ＥＧ１３２は音源制御レジスタ１３０におけるＥＧパラメータレジスタ１３０ｂに書き込まれているエンベロープパラメータを使用して図９に示すエンベロープ波形を生成するようにしている。ノートオンが指示された際に、エンベロープ波形はイニシャルエンベロープ値ＩＮＥＧのレベルから生成開始される。このため、ＥＧパラメータレジスタ１３０ｂにイニシャルエンベロープ値ＩＮＥＧを書き込んでおき、このイニシャルエンベロープ値ＩＮＥＧを読み出してエンベロープ波形を生成するＥＧ部１３２ａにおける現在値レジスタ１３２ｃに書き込んでおくようにする。
【０００４】
ＥＧパラメータレジスタ１３０ｂには、エンベロープ値およびレート情報が書込可能とされており、ノートオン時にはＣＰＵ１１０が、イニシャルエンベロープ値ＩＮＥＧとレート情報をバスライン１２４を介してＥＧパラメータレジスタ１３０ｂに書き込むようにしている。イニシャルエンベロープ値ＩＮＥＧが書き込まれた際には、イニシャルレジスタ（ＩＮＩＴ）１３０ａの出力が立ち上がるようになる。すると、イニシャルレジスタ１３０ａの出力により現在値レジスタ１３２ｃにＥＧパラメータレジスタ１３０ｂに書き込まれているイニシャルエンベロープ値ＩＮＥＧが書き込まれるようになる。このようにして、現在値レジスタ１３２ｃにイニシャルエンベロープ値ＩＮＥＧが書き込まれると、ＣＰＵ１１０は次の第１エンベロープ値ＥＧ１をＥＧパラメータレジスタ１３０ｂに書き込むようにする。この場合はイニシャルレジスタ１３０ａの出力は立ち上がらない。この状態において、ノートオンが指示されてエンベロープ波形の生成が開始されると、ＥＧ部１３２ａは現在値レジスタ１３２ｃの値にレート情報により決定される所定値を演算タイミング毎に加算して現在値レジスタ１３２ｃに書き込む。同時に、現在値レジスタ１３２ｃの値をＥＧパラメータレジスタ１３０ｂに書き込まれている第１エンベロープ値１３０ｂと比較し、第１エンベロープ値ＥＧ１に達しているか否かを検出する。
【０００５】
これにより、現在値レジスタ１３２ｃの値はイニシャルエンベロープ値ＩＮＥＧから第１エンベロープ値ＥＧ１に向かうようになる。そして、演算タイミング毎に現在値レジスタ１３２ｃの値が加算されることにより、その値が第１エンベロープ値ＥＧ１に達するようになると、ＥＧ部１３２ａにおける到達検出手段１３２ｂが到達フラグ生成部１３２ｄに到達フラグを生成させる出力を与える。これにより、到達フラグ生成部１３２ｄにおいて到達フラグが生成されて出力される。さらに、この到達フラグは割込発生部１３２ｅに供給されて、割込発生部１３２ｅにおいてＣＰＵ割込信号が発生されて出力されるようになる。ＣＰＵ割込信号をＣＰＵ１１０が受け取ると、ＣＰＵ割込の原因が複数あることからＣＰＵ１１０はその原因を検出する。
【０００６】
この場合は、ＣＰＵ割込の原因として到達フラグが検出されることから、ＣＰＵ１１０は第２エンベロープ値ＥＧ２を音源制御レジスタ１３０に供給して、ＥＧパラメータレジスタ１３０ｂに書き込むようにする。これにより、現在値レジスタ１３２ｃの値は第１エンベロープ値ＥＧ１から第２エンベロープ値ＥＧ２に向かうようになる。そして、演算タイミング毎に現在値レジスタ１３２ｃの値に所定値が加算されることにより、その値が第２エンベロープ値ＥＧ２に達するようになり、上述した動作が繰り返し行われるようになる。この結果、ＥＧ部１３２ａからは図９に示すような、第１エンベロープ値ＥＧ１に向かうと共に、第１エンベロープ値ＥＧ１に達した際には第２エンベロープ値ＥＧ２に向かい、さらに図示しない第３エンベロープ値に向かうエンベロープ波形が生成されて出力されるようになる。
【０００７】
ところで、順次データが書き込まれるレジスタにおいて、書き込まれたデータを読み出して第２のレジスタに書き込む際には、第２のレジスタへのデータの書き込みが有効に終了した際に、次のデータをレジスタに書き込むようにしないと第２のレジスタへのデータ書込に失敗することがある。例えば、図８に示す音源装置において、ＥＧパラメータレジスタ１３０ｂにイニシャルエンベロープ値ＩＮＥＧを書き込んで、そのイニシャルエンベロープ値ＩＮＥＧを読み出して現在値レジスタ１３２ｃに書き込む際に、ＣＰＵ１１０におけるＥＧパラメータレジスタ１３０ｂへの書込タイミングによっては、現在値レジスタ１３２ｃへのイニシャルエンベロープ値ＩＮＥＧの書き込みが完了する前に、次の第１エンベロープ値ＥＧ１がＥＧパラメータレジスタ１３０ｂに書き込まれてしまうようになる。この場合には、現在値レジスタ１３２ｃへのイニシャルエンベロープ値ＩＮＥＧの書き込みが失敗し、第１エンベロープ値ＥＧ１が書き込まれてしまうようになり、所望の波形信号が生成されないという問題点があった。
【０００８】
また、到達フラグを検出することにより次の楽音パラメータを音源制御レジスタ１３０に書き込んだ際には、検出された到達フラグはリセットされて到達フラグが出力されない状態になる。すなわち、割込信号は停止されるようになる。しかしながら、書き込まれた次の楽音パラメータが到達フラグに反映されて割込信号が停止されるまでには若干の時間がかかるようになる。すると、割込信号により割込原因とされた到達フラグを検出して次の楽音パラメータを音源制御レジスタ１３０に書き込み、引き続いて波形生成処理を続行した際に、割込信号が停止されていない場合があり、このような場合には誤動作してしまうという問題点があった。
【０００９】
さらに、図８に示す音源装置においては振幅エンベロープやフィルタエンベロープ等の複数種類のエンベロープ波形を時分割処理により作成していると共に、それぞれの種類のエンベロープ波形を時分割チャンネル処理により複数チャンネル分作成している。すると、ＣＰＵ割込が発生してＣＰＵ１１０が特定のエンベロープ種類における全チャンネルの到達フラグの読み出しを行う際に、全チャンネルの到達フラグが用意されるまでに時間がかかるようになる。この場合、ＣＰＵ割込を受けて特定のエンベロープ種類における全チャンネルの到達フラグを直ちに読むようにすると、全てのチャンネルにおける正確な到達フラグの状態を読み出すことができないという問題点があった。
これらの問題点を解決するために、データが有効になるまで待って処理を開始することが考えられるが、ＣＰＵ１１０の動作タイミングと音源装置との動作タイミングが異なっていることから、ＣＰＵ１１は音源装置が現在どのような状態であるのか検出することができない。このため、その待ち時間はデータが有効になるに十分な長い時間を設定しなければならないことになる。すると、この待ち時間がＣＰＵ１１０において制御遅れを生じさせる原因になるという問題点が生じるようになる。
【００１０】
そこで、本発明は、制御遅れを生じることなくデータが有効になるまで待つことができる音源装置を提供することを目的としている。
【００１１】
【課題を解決するための手段】
上記目的を達成するために、本発明の音源装置は、楽音を発生する際に、制御手段から供給された楽音パラメータが書き込まれる音源制御レジスタと、前記音源制御レジスタに波形生成開始時に書き込まれた楽音パラメータが書き込まれる現在値レジスタを有し、該現在値レジスタに書き込まれた楽音パラメータを使用して波形信号を生成すると共に、前記音源制御レジスタに書き込まれた次の同種の楽音パラメータを前記現在値レジスタの楽音パラメータが目標値とする処理を行うことにより波形信号を生成していく波形生成部と、前記現在値レジスタに書き込まれた楽音パラメータが目標値に達した際に、到達フラグと割込信号を生成する生成手段と、前記音源制御レジスタへ書き込まれている楽音パラメータが読み出されて、前記現在値レジスタへの書き込みが終了するまでの時間を計数する第１のタイマ手段と、前記割込信号を受けて前記制御手段が次の楽音パラメータを前記音源制御レジスタに書き込んだ際に、当該書き込みの結果が前記到達フラグに反映されるまでの動作遅延時間以上の時間を計数する第２のタイマとを備え、前記第１のタイマ手段がタイムアップした後に、前記制御手段が次の同種の楽音パラメータを前記音源制御レジスタに書き込むと共に、前記第２のタイマがタイムアップするまで前記到達フラグおよび前記割込信号をマスクするようにしている。
【００１３】
また、上記本発明の音源装置において、前記音源制御レジスタに複数種類の波形信号にそれぞれ対応する楽音パラメータが書き込まれるようにされていると共に、前記楽音パラメータをそれぞれ使用して前記波形生成部が前記複数種類の波形信号をそれぞれ生成するようにされており、前記制御手段により前記波形生成部の前記複数種類の内の特定の波形信号に関する読み出し設定が行われた際に、該特定の波形信号における全チャンネルの前記到達フラグが揃うに十分な期間とされる所定の時間を計数する第３のタイマを備え、前記割込信号の発生時に前記制御手段は、前記波形生成部の前記複数種類の内の特定の波形信号に関する読み出し設定を行い、その後の前記第３のタイマのタイムアップに応じて前記到達フラグを検出し、該当するチャンネルにおける次の楽音パラメータを前記音源制御レジスタに書き込むようにしてもよい。
【００１４】
このような本発明によれば、音源制御レジスタへ書き込まれた楽音パラメータが有効となって、次の楽音パラメータの書き込みが許可されるまでの時間を計数する第１のタイマ手段を設けるようにしている。これにより、現在値レジスタへのイニシャルエンベロープ値の書き込みが完了する前に、次の目標値が音源制御レジスタに書き込まれることを防止することができるようになる。
また、書き込みの結果が到達フラグに反映されるまでの時間を計数する第２のタイマがタイムアップするまで到達フラグおよび割込信号をマスクするようにしたので、その書込が到達フラグに反映されるまでに時間がかかっても誤動作しないようになる。さらに、到達フラグが揃うまでの時間を計数する第３のタイマを設けるようにしたので、複数チャンネルにおける正確な到達フラグの状態を読み出すことができるようになる。
【００１５】
【発明の実施の形態】
本発明の実施の形態にかかる音源装置を備える電子楽器の構成を示すブロック図を図１に示す。
この図に示す電子楽器は本発明にかかる音源装置を音源２０として備えている。この電子楽器において、中央処理装置（ＣＰＵ）１０は、ＲＯＭ１１やＲＡＭ１２に記憶された制御プログラムに基いて電子楽器全体の動作を制御することにより、演奏データに応じた楽音を生成している。また、パネルスイッチ１８の操作に応じて、音源２０において生成する楽音信号の音色の選択処理を実行したり、ミキサ＆ＤＳＰ部３７で付与する効果の選択処理を実行している。そして、ＭＩＤＩインタフェース１６からの演奏入力に応じて、音源２０において生成する楽音信号の制御を行っている。例えば、ノートオンが入力された場合、該ノートオンに対し音源２０における発音チャンネルを割当て、割り当てた発音チャンネルにおいて該ノートオンに対応した楽音信号の発生を指示している。また、ＣＰＵ１０は、電子楽器におけるその他のブロックの制御処理も行っている。
【００１６】
ＲＯＭ１１はＣＰＵ１０が実行する各種プログラムや各種データが格納されている記憶手段であり、リードオンリーメモリ（ＲＯＭ）で構成されている。ＲＡＭ１２はランダムアクセスメモリであり、ＣＰＵ１０がプログラムを実行する際に発生する各種データを一時的に記憶するワークメモリエリアや、各種データを記憶する記憶エリアが設定されており、レジスタ、フラグ、バッファ等として利用されている。タイマ１３は動作時の経過時間を示したり、特定の間隔でタイマ割込を発生するタイマであり、自動演奏の時間管理等に使用される。
【００１７】
また、ディスク１５はハードディスク、フロッピーディスク、リムーバブルディスク等の記録媒体であり、波形メモリ２１にロードする波形データなどが格納されている。ドライブ１４はセットされたディスク１５の読出／書込を行うディスクドライブである。ＭＩＤＩインタフェース１６は、電子楽器内部で作成したＭＩＤＩメッセージを外部へ送出したり、外部からのＭＩＤＩメッセージを受信するＭＩＤＩインタフェースである。ネットワークインタフェース１７は、ＬＡＮ（Local Area Network ）やインターネット、電話回線等の通信ネットワークを介してサーバコンピュータに接続するためのネットワークインタフェースである。パネルスイッチ（パネルＳＷ）１８は、電子楽器のパネルに設けられている各種スイッチであり、これを操作することにより電子楽器に各種指示を与えることができる。パネル表示器１９は、楽音生成時に各種情報が表示されるディスプレイである。
【００１８】
音源２０は、発生すべき楽音の音高に対応する周波数データ（Ｆナンバ）に応じて波形メモリ２１から楽音波形データを順次読み出す波形メモリ読出方式により、楽音信号を発生する音源である。この音源２０は、複数の発音チャンネルを使用して複数の楽音信号を同時に発生することが可能とされており、バスライン２４を経由して与えられた演奏データ（ＭＩＤＩ規格に準拠したデータ等）が入力され、このデータに基づいて楽音信号を発生している。なお、この実施例では、電子楽器は、例えば６４チャンネル時分割で動作している。
【００１９】
音源２０における音源制御レジスタ３０には、楽音信号を生成するために必要な演奏データ（ピッチデータＫＣ、ノートオン、波形スタートアドレス（ＷＳＡ）、エンベロープパラメータやその他の各種のパラメータやＭＩＤＩ規格に準拠したデータ等）が供給されて書き込まれ、これらのデータを使用して楽音データが生成される。生成された楽音データは、ＤＡＣ（ディジタル・アナログ変換器）２２によりアナログの楽音信号に変換されてサウンドシステム２３から放音されるようになる。音源２０は、音源制御レジスタ３０に加えて時間計測部３１，マルチＥＧ部３２，アドレス発生部３３，補間部３４，フィルター制御部（ＤＣＦ）３５，振幅制御部３６，ミキサ＆ＤＳＰ部３７から構成されている。
【００２０】
時間計測部３１は、後述するが３つのタイマを備えており、この３つのタイマはデータが有効になるまで処理を待たせたり、フラグをマスクするためのタイマである。これらのタイマにより、マルチＥＧ部３２が各種のエンベロープ波形を制御遅れを生じることなく正確に発生できるようにしている。マルチＥＧ部３２は、複数の機能を有するエンベロープ波形発生器であり、ピッチエンベロープ波形（ＰＥＧ波形）、フィルタエンベロープ波形（ＦＥＧ波形）、振幅エンベロープ波形（ＡＥＧ波形）、効果エンベロープ波形（ＥＥＧ波形）の発生、および、フィルタ係数オフセット（Ｆオフセット）、音量レベル、変調レベルの補間等を、共通のハードウェア回路において時分割で実行している。マルチＥＧ部３２には、音源制御レジスタ３０から各種エンベロープの初期値情報や目標値情報、およびそのレート情報が供給されている。
【００２１】
アドレス発生部３３は、音源制御レジスタ３０から供給されているピッチデータおよび読出開始アドレスに基づいて波形メモリ２１の読出アドレスを生成している。具体的には、ピッチデータであるＦナンバを演算タイミング毎に累算し、その整数部を読出アドレスとして波形メモリ２１に供給し、その小数部を補間部３４に補間情報として供給している。補間部３４は、波形メモリ２１から読み出された２サンプルの間をアドレス発生部３３から供給された小数部に基づいて補間することにより、アドレス発生部３３で発生された読出アドレスに対応するサンプルデータを得るようにしている。なお、補間部３４においては２点補間に限らず４点補間によりサンプルデータを得るようにしてもよい。ＤＣＦ３５は、音源制御レジスタ３０から供給されたフィルター係数に基づいて、補間部３４おいて得られた補間されたサンプルデータをフィルタリングして周波数特性を調整している。また、ＤＣＦ３５にはマルチＥＧ部３２により生成されたＦＥＧ波形が供給されており、このＦＥＧ波形によりＤＣＦ３５のフィルタ特性が変化するため、ＤＣＦ３５から出力される楽音データの周波数特性も時間軸上で変化するようになる。
【００２２】
振幅制御部３６は、音源制御レジスタ３０から供給された音量情報に基づいてＤＣＦ３５から出力された楽音データの音量を制御している。また、振幅制御部３６にはマルチＥＧ部３２により生成されたＡＥＧ波形が供給されており、このＡＥＧ波形に応じて楽音データの音量レベルが変化するようになる。これにより、振幅制御部３６から出力される楽音データの音量レベル特性も時間軸上で変化するようになる。上述したアドレス発生部３３ないし振幅制御部３６は時分割チャンネル処理を行うことにより、例えば６４発音チャンネルの楽音データを同時に生成している。そして、生成された各チャンネル毎の独立した楽音データは、ミキサ＆ＤＳＰ３７に供給されるようになる。ミキサ＆ＤＳＰ３７においては、生成された複数チャンネルの楽音データ、および、ＤＳＰの複数エフェクトが付与された楽音データを複数通りにミキシングし、その結果生成される複数のミキシング波形をＤＡＣ２２に供給している。ＤＡＣ２２から出力されるアナログの楽音信号はサウンドシステム２３から放音される。なお、ミキシング波形にさらにＤＳＰによる複数エフェクトを付与するようにしてもよい。また、ＤＳＰは、ＣＰＵ１０により設定されたマイクロプログラムに基いて、入力する複数のミキシング波形に対する複数エフェクト処理を実行している。さらに、ＤＳＰは、リバーブ処理、ディストーション処理、コーラス処理等のエフェクト処理を時分割処理により並行して実行することができるようにされている。
【００２３】
次に、音源２０におけるマルチＥＧ部３２の構成とマルチＥＧ部３２に関連する音源制御レジスタ３０の構成を図２に示す。
図２に示すマルチＥＧ部３２は、図３に示すようなピッチエンベロープ波形（ＰＥＧ波形）、フィルタエンベロープ波形（ＦＥＧ波形）、振幅エンベロープ波形（ＡＥＧ波形）、効果エンベロープ波形（ＥＥＧ波形）を発生している。これらの複数種類のエンベロープ波形を、時分割チャンネル処理により発音チャンネル分発生している。一例として、図３に示すＰＥＧ波形のエンベロープを生成させる動作を説明する。マルチＥＧ部３２は音源制御レジスタ３０における目標値レジスタ３０ｄに書き込まれているエンベロープパラメータを使用して図３に示すＰＥＧ波形を生成するようにしている。ノートオンが指示された際に、ＰＥＧ波形はイニシャルエンベロープ値ＩＮＰＥＧのレベルから生成開始される。このため、ＣＰＵ１０から目標値レジスタ３０ｄにＰＥＧイニシャルエンベロープ値ＩＮＰＥＧを書き込んでおき、このＰＥＧイニシャルエンベロープ値ＩＮＰＥＧをマルチＥＧ部３２に内蔵されている現在値レジスタ３２ｄに書き込んでおくようにする。
【００２４】
音源制御レジスタ３０には、目標値とされるエンベロープ値が書き込まれる目標値レジスタ３０ｄと、エンベロープのレート情報が書き込まれるレートレジスタ３０ｅが用意されており、ノートオンイベント処理時にはＣＰＵ１０が、各エンベロープのイニシャルエンベロープ値（ＩＮＰＥＧ，ＩＮＦＥＧ，ＩＮＡＥＧ，ＩＮＥＥＧ）とレート情報をバスライン２４を介して音源制御レジスタ３０に書き込むようにしている。そして、ＰＥＧイニシャルエンベロープ値ＩＮＰＥＧ等のイニシャルエンベロープ値が書き込まれた際には、イニシャルレジスタ（ＩＮＩＴ）３０ｂの出力が立ち上がるようになる。すると、イニシャルレジスタ３０ｂの出力によりロード信号発生部３２ｅからロード信号が発生され、このロード信号が供給されているセレクタ３２ｃは、目標値レジスタ３０ｄからの入力ｂを選択して現在値レジスタ３２ｄに供給する。これにより、現在値レジスタ３２ｄに目標値レジスタ３０ｄに書き込まれているＰＥＧイニシャルエンベロープ値ＩＮＰＥＧが書き込まれるようになる。
【００２５】
このようにして、現在値レジスタ３２ｄにＰＥＧイニシャルエンベロープ値ＩＮＰＥＧが書き込まれると、ＣＰＵ１０は次の第１ＰＥＧエンベロープ値ＰＥＧ１を目標値レジスタ３０ｄに書き込むようにする。この場合はイニシャルエンベロープ値でないことからイニシャルレジスタ３０ｂの出力は立ち上がらない。この状態において、ノートオンレジスタ３０ｃにノートオンが書き込まれるとノートオンが指示されてエンベロープ波形の生成が開始される。すると、比較器３２ａは目標値レジスタ３０ｄの第１ＰＥＧエンベロープ値ＰＥＧ１と現在値レジスタ３２ｄのＰＥＧイニシャルエンベロープ値ＩＮＰＥＧとを比較するが、第１ＰＥＧエンベロープ値ＰＥＧ１の値の方が大きいため加減算器３２ｂに加算命令を与える。これにより、加減算器３２ｂにおいて現在値レジスタ３２ｄのＰＥＧイニシャルエンベロープ値ＩＮＰＥＧにレート情報により決定される所定値が加算されて、その加算値が現在値レジスタ３２ｄに書き込まれる。この場合、セレクタ３２ｃにはロード信号が供給されていないため、加減算器３２ｂからのａ入力が選択されている。
【００２６】
次の演算タイミングになると、比較器３２ａは目標値レジスタ３０ｄの第１ＰＥＧエンベロープ値ＰＥＧ１と現在値レジスタ３２ｄのエンベロープ値とを比較するが、第１ＰＥＧエンベロープ値ＰＥＧ１の値の方が大きい場合は加減算器３２ｂに加算命令を与える。これにより、加減算器３２ｂにおいて現在値レジスタ３２ｄのエンベロープ値にレート情報により決定される所定値がさらに加算されて、その加算値が現在値レジスタ３２ｄに書き込まれる。このような加算動作は、現在値レジスタ３２ｄのエンベロープ値が第１ＰＥＧエンベロープ値ＰＥＧ１に達するまで行われる。そして、現在値レジスタ３２ｄのエンベロープ値が第１ＰＥＧエンベロープ値ＰＥＧ１に達すると、比較器３２ａは現在値レジスタ３２ｄのエンベロープ値が、第１ＰＥＧエンベロープ値ＰＥＧ１に達していると判断して、ロード信号発生部３２ｅおよび到達フラグ生成部３２ｆに到達信号を供給する。
【００２７】
これにより、ロード信号発生部３２ｅはロード信号を発生してセレクタ３２ｃに供給することから現在値レジスタ３２ｄの値は第１ＰＥＧエンベロープ値ＰＥＧ１となる。さらに、到達フラグ生成部３２ｆにおいて到達フラグが生成されて出力される。また、この到達フラグは割込発生部３２ｇに供給されて、割込発生部３２ｇにおいてＣＰＵ割込信号が発生されて出力されるようになる。現在値レジスタ３２ｄからは、ＰＥＧイニシャルエンベロープ値ＩＮＰＥＧから第１ＰＥＧエンベロープ値ＰＥＧ１に達するように順次上昇するＰＥＧ波形が出力されるようになる。そして、出力されたＣＰＵ割込信号をＣＰＵ１０が受け取ると、ＣＰＵ割込の原因が複数あることからＣＰＵ１０はその原因を検出する。この場合は、ＣＰＵ割込の原因としてＰＥＧ波形の到達フラグが検出されることから、ＣＰＵ１０は第２ＰＥＧエンベロープ値ＰＥＧ２を音源制御レジスタ３０に供給して、目標値レジスタ３０ｄに書き込むようにする。
【００２８】
次の演算タイミングになると、比較器３２ａは目標値レジスタ３０ｄの第２ＰＥＧエンベロープ値ＰＥＧ２と現在値レジスタ３２ｄの第１ＰＥＧエンベロープ値ＰＥＧ１とを比較するが、第２ＰＥＧエンベロープ値ＰＥＧ２の値が小さくされているため加減算器３２ｂに減算命令を与える。これにより、加減算器３２ｂにおいて現在値レジスタ３２ｄのエンベロープ値からレート情報により決定される所定値が減算されて、その減算値が現在値レジスタ３２ｄに書き込まれる。このような演算タイミング毎の減算動作は、現在値レジスタ３２ｄのエンベロープ値が第２ＰＥＧエンベロープ値ＰＥＧ２に達するまで行われる。そして、現在値レジスタ３２ｄのエンベロープ値が第２ＰＥＧエンベロープ値ＰＥＧ２に達すると、比較器３２ａは現在値レジスタ３２ｄのエンベロープ値が、第２ＰＥＧエンベロープ値ＰＥＧ２に達していると判断して、ロード信号発生部３２ｅおよび到達フラグ生成部３２ｆに到達信号を供給する。
【００２９】
これにより、ロード信号発生部３２ｅはロード信号を発生してセレクタ３２ｃに供給することから現在値レジスタ３２ｄの値は第２ＰＥＧエンベロープ値ＰＥＧ２となる。さらに、到達フラグ生成部３２ｆにおいて到達フラグが生成されて出力される。また、この到達フラグは割込発生部３２ｇに供給されて、割込発生部３２ｇにおいてＣＰＵ割込信号が発生されて出力されるようになる。現在値レジスタ３２ｄからは、ＰＥＧイニシャルエンベロープ値ＩＮＰＥＧから上昇して第１ＰＥＧエンベロープ値ＰＥＧ１に達し、次いで第２ＰＥＧエンベロープ値ＰＥＧ２に達するように下降するＰＥＧ波形が出力されるようになる。そして、出力されたＣＰＵ割込信号をＣＰＵ１０が受け取ると、ＣＰＵ割込の原因が複数あることからＣＰＵ１０はその原因を検出する。この場合は、ＣＰＵ割込の原因としてＰＥＧ波形の到達フラグが検出されることから、ＣＰＵ１０は図示されていない第３ＰＥＧエンベロープ値ＰＥＧ３を音源制御レジスタ３０に供給して、目標値レジスタ３０ｄに書き込むようにする。
【００３０】
以降、上述した動作が繰り返し行われるようになり、その結果、マルチＥＧ部３２からは図３に示すような、ＰＥＧイニシャルエンベロープ値ＩＮＰＥＧから上昇して第１ＰＥＧエンベロープ値ＰＥＧ１に達し、次いで下降して第２ＰＥＧエンベロープ値ＰＥＧ２に達し、さらに第３ＰＥＧエンベロープ値ＰＥＧ３に達するように上昇するＰＥＧ波形が出力されるようになる。また、同様にして図３に示すようなフィルタエンベロープ波形（ＦＥＧ波形）、振幅エンベロープ波形（ＡＥＧ波形）、効果エンベロープ波形（ＥＥＧ波形）を発生することができる。このような複数種類のエンベロープ波形は、時分割チャンネル処理によりチャンネル毎に発生されるようになる。
【００３１】
次に、本発明の特徴点である時間計測部３１が備える３つのタイマについて説明する。
本発明にかかる音源２０においては時分割チャンネル処理により複数のチャンネルの楽音データを同時に生成するようにしている。この場合、音源制御レジスタ３０に書き込まれる各発音チャンネルの楽音パラメータの書込期間は図４に示すように割り当てられる。例えば、最大発音チャンネル数を６４チャンネルとすると、時刻ｔ０から時刻ｔ１までの１サンプリング周期（１ＤＡＣ）において６４チャンネルの各楽音パラメータが順次音源制御レジスタ３０に書き込まれる。この場合、楽音パラメータの種類毎の全チャンネル分のレジスタが音源制御レジスタに用意されているため、書込期間は同一楽音パラメータの書込期間だけ異なるように一部他のチャンネルと重複するようにされている。
【００３２】
ここで、図２に示す音源制御レジスタ３０における目標値レジスタ３０ｄには、前述したようにノートオン時にイニシャルエンベロープ値が書き込まれると共に、第１エンベロープ値も書き込まれるようになる。イニシャルエンベロープ値は、現在値レジスタ３２ｄに書き込まれるのであるが、現在値レジスタ３２ｄに有効に書き込まれるには若干の時間が必要である。現在値レジスタ３２ｄにイニシャルエンベロープ値が有効に書き込まれない内に、第１エンベロープ値を目標値レジスタ３０ｄに書き込むと現在値レジスタ３２ｄへのイニシャルエンベロープ値の書込に失敗することがある。すなわち、目標値レジスタ３０ｄへの第１エンベロープ値の書き込みが速すぎる場合は、現在値レジスタ３２ｄに第１エンベロープ値が書き込まれてしまうようになる。そこで、目標値レジスタ３０ｄにイニシャルエンベロープ値を書き込む際に時間計測部３１におけるタイマ１を起動する。そして、タイマ１がタイムアップしたことを検出してからＣＰＵ１０が第１エンベロープ値を目標値レジスタ３０ｄに書き込むようにする。このタイマ１は、現在値レジスタ３２ｄにイニシャルエンベロープ値が有効に書き込まれない内はタイムアップしないようにされている。
【００３３】
この様子を図５にタイマ１として示している。図５におけるタイマ１では、第４発音チャンネル（＃４ｃｈ）を例にして、計測時間の態様が３つ例示されている。＃４ｃｈにおける楽音パラメータの書込期間は、１ＤＡＣにおけるハッチした期間で示されている。ここで、計測時間Ａで示すように時刻ｔ０から時刻ｔ１のＤＡＣ周期における時刻ｔ０１においてＣＰＵ１０からイニシャルエンベロープ値が目標値レジスタ３０ｄに書き込まれた場合には、この時刻ｔ０１においてタイマ１が起動される。タイマ１を起動する情報としては、音源制御レジスタ３０にＣＰＵ１０から供給される書込アドレスの一部のビットを使用することができる。このタイマ１は次のＤＡＣ周期における＃４ｃｈの書込期間が終了する時刻ｔ１２においてタイムアップする。この場合、＃４の書込期間が終了するまでタイムアップしないタイマ１のタイムアップを検出してから、ＣＰＵ１０は第１エンベロープ値を目標値レジスタ３０ｄに書き込むようになる。これにより、現在値レジスタ３２ｄにイニシャルエンベロープ値が有効に書き込まれてから、第１エンベロープ値があ目標値レジスタ３０ｄに書き込まれるようになる。
【００３４】
また、計測時間Ｂで示す例では時刻ｔ１から時刻ｔ２のＤＡＣ周期における時刻ｔ１１においてＣＰＵ１０からイニシャルエンベロープ値が目標値レジスタ３０ｄに書き込まれている。この場合には、この時刻ｔ１１においてタイマ１が起動される。このタイマ１は当該ＤＡＣ周期における＃４ｃｈの書込期間が終了する時刻ｔ１２においてタイムアップする。この場合、タイマ１のタイムアップを検出してから、ＣＰＵ１０は第１エンベロープ値を目標値レジスタ３０ｄに書き込むことから、現在値レジスタ３２ｄにイニシャルエンベロープ値が有効に書き込まれてから、第１エンベロープ値が目標値レジスタ３０ｄに書き込まれるようになる。
【００３５】
さらに、計測時間Ｃで示す例では時刻ｔ１から時刻ｔ２のＤＡＣ周期における＃４ｃｈの書込期間中の時刻ｔ１３においてＣＰＵ１０からイニシャルエンベロープ値が目標値レジスタ３０ｄに書き込まれている。この場合には、この時刻ｔ１３においてタイマ１が起動される。このタイマ１は次のＤＡＣ周期における＃４ｃｈの書込期間が終了する時刻ｔ２１においてタイムアップする。この場合もタイマ１のタイムアップを検出してから、ＣＰＵ１０は第１エンベロープ値を目標値レジスタ３０ｄに書き込むことから、現在値レジスタ３２ｄにイニシャルエンベロープ値が有効に書き込まれてから、第１エンベロープ値が目標値レジスタ３０ｄに書き込まれるようになる。
計測時間Ａないし計測時間Ｃに示すように、ＣＰＵ１０が目標値レジスタ３０ｄにイニシャルエンベロープ値を書き込むタイミングによっては、１ＤＡＣ周期待つことなくタイマ１はタイムアップするようになる。このように、最小時間の待ち時間により、現在値レジスタ３２ｄにイニシャルエンベロープ値を有効に書き込めると共に、第１エンベロープ値を目標値レジスタ３０ｄに書き込むことができるようになる。
【００３６】
また、上述したようにマルチＥＧ部３２においてエンベロープ波形を発生する際には、目標値に達した際に到達フラグを出力して、ＣＰＵ割込を出力するようにしている。ＣＰＵ１０はこのＣＰＵ割込を検出することにより、ＣＰＵ割込の原因を到達フラグから読み取り次の目標値を音源制御レジスタ３０における目標値レジスタ３０ｄに書き込むようにしている。そして、次の目標値が目標値レジスタ３０ｄに書き込まれた際には、比較器３２ａの出力は元に戻り、このため到達フラグがリセットされて、さらにＣＰＵ割込信号も停止されるようになる。しかしながら、書き込まれた次の目標値が到達フラグに反映されてＣＰＵ割込信号が停止するまでには若干の動作遅延時間がかかるようになる。すると、ＣＰＵ割込信号により割込原因とされた到達フラグを検出して次の目標値を音源制御レジスタ３０の目標値レジスタ３０ｄに書き込み、引き続いてエンベロープ波形の生成処理を続行した際に、ＣＰＵ割込信号が未だ停止されていない場合があり、このような場合には誤動作してしまうことになる。そこで、割込原因とされた到達フラグを検出して次の目標値を音源制御レジスタ３０の目標値レジスタ３０ｄに書き込む際に、時間計測部３１におけるタイマ２を起動する。そして、タイマ２がタイムアップするまで到達フラグ生成部３２ｆから出力される到達フラグをマスクすることにより、到達フラグおよびＣＰＵ割込信号を停止させる。このタイマ２は、到達フラグ生成部３２ｆが到達フラグをリセットするまではタイムアップしないようにされている。
【００３７】
この様子を図５にタイマ２として示している。図５におけるタイマ２では、第４発音チャンネル（＃４ｃｈ）を例にして、計測時間の態様が３つ例示されている。＃４ｃｈにおける楽音パラメータが書き込まれてから読み出されてフラグに反映されるまでの書込〜読出期間は、１ＤＡＣにおけるハッチした期間で示されている。この期間はタイマ１における書込期間より若干後に長くされている。ここで、計測時間Ａで示すように時刻ｔ０から時刻ｔ１のＤＡＣ周期における時刻ｔ０１において割込原因とされた到達フラグを検出して次の目標値がＣＰＵ１０から目標値レジスタ３０ｄに書き込まれた場合には、この時刻ｔ０１においてタイマ２が起動される。同時にマスクレジスタ３０ａに“１”がセットされて到達フラグ生成部３２ｆの出力はマスクされる。これにより、割込発生部３２ｇには到達フラグが供給されないようになり、割込発生部３２ｇはＣＰＵ割込信号を停止させるようになる。マスクレジスタ３０ａに“１”をセットする情報としては、音源制御レジスタ３０にＣＰＵ１０から供給される書込アドレスの一部のビットを使用することができ、このビットによりタイマ２も起動することができる。このタイマ２は次のＤＡＣ周期における＃４ｃｈの書込〜読出期間が終了する時刻ｔ１４においてタイムアップし、これによりマスクレジスタ３０ａは“０”にリセットされる。従って、目標値レジスタ３０ｄに新たに書き込まれた目標値が到達フラグ生成部３２ｆが出力する到達フラグに反映されるまでに動作遅延時間があったとしても、誤った到達フラグおよびＣＰＵ割込信号が出力されないようになる。
【００３８】
また、計測時間Ｂで示す例では時刻ｔ１から時刻ｔ２のＤＡＣ周期における時刻ｔ１１において割込原因とされた到達フラグを検出して次の目標値がＣＰＵ１０から目標値レジスタ３０ｄに書き込まれている。この場合には、この時刻ｔ１１においてタイマ２が起動される。同時にマスクレジスタ３０ａに“１”がセットされて到達フラグ生成部３２ｆの出力はマスクされる。これにより、割込発生部３２ｇには到達フラグが供給されないようになり、割込発生部３２ｇはＣＰＵ割込信号を停止させる。このタイマ２は当該ＤＡＣ周期における＃４ｃｈの書込〜読出期間が終了する時刻ｔ１４においてタイムアップし、これによりマスクレジスタ３０ａは“０”にリセットされる。従って、目標値レジスタ３０ｄに新たに書き込まれた目標値が到達フラグ生成部３２ｆが出力する到達フラグに反映されるまでに動作遅延時間があったとしても、誤った到達フラグおよびＣＰＵ割込信号が出力されないようになる。
【００３９】
さらに、計測時間Ｃで示す例では時刻ｔ１から時刻ｔ２のＤＡＣ周期における書込〜読出期間中の時刻ｔ１３において割込原因とされた到達フラグを検出して次の目標値がＣＰＵ１０から目標値レジスタ３０ｄに書き込まれている。この場合には、この時刻ｔ１３においてタイマ２が起動される。同時にマスクレジスタ３０ａに“１”がセットされて到達フラグ生成部３２ｆの出力はマスクされる。これにより、割込発生部３２ｇには到達フラグが供給されないようになり、割込発生部３２ｇはＣＰＵ割込信号を停止させる。このタイマ２は次のＤＡＣ周期における＃４ｃｈの書込〜読出期間が終了する時刻ｔ２２においてタイムアップし、これによりマスクレジスタ３０ａは“０”にリセットされる。従って、目標値レジスタ３０ｄに新たに書き込まれた目標値が到達フラグ生成部３２ｆが出力する到達フラグに反映されるまでに動作遅延時間があったとしても、誤った到達フラグおよびＣＰＵ割込信号が出力されないようになる。
計測時間Ａないし計測時間Ｃに示すように、ＣＰＵ１０が目標値レジスタ３０ｄに次の目標値を書き込むタイミングによっては、１ＤＡＣ周期待つことなくタイマ２はタイムアップするようになる。
【００４０】
さらに、図２に示すマルチＥＧ部３２においてはピッチエンベロープ波形（ＰＥＧ波形）、フィルタエンベロープ波形（ＦＥＧ波形）、振幅エンベロープ波形（ＡＥＧ波形）、効果エンベロープ波形（ＥＥＧ波形）の複数種類のエンベロープ波形を時分割処理により作成していると共に、それぞれの種類のエンベロープ波形を時分割チャンネル処理により発音チャンネル分作成している。すると、ＣＰＵ割込が発生してＣＰＵ１０が特定のエンベロープ種類における各チャンネルの到達フラグを読み出しにいった際に、全チャンネルの到達フラグが用意されるまでに時間がかかるようになる。この全チャンネルの到達フラグはビットマップで用意される。この場合、ＣＰＵ割込を受けて特定のエンベロープ種類における各チャンネルの到達フラグが揃う前に読み出すようにすると、全発音チャンネルにおける正確な到達フラグの状態を読み出すことができないことになる。そこで、割込を発生させたエンベロープ種類における全発音チャンネルの到達フラグを読み出す際に、時間計測部３１におけるタイマ３を起動する。そして、タイマ３がタイムアップしたことを検出してからＣＰＵ１０が全発音チャンネルの到達フラグを読み出すようにする。このタイマ３は、全発音チャンネルの到達フラグがビットマップ上に揃うまでタイムアップしないようにされている。
【００４１】
この様子を図５にタイマ３として示している。図５におけるタイマ３では、計測時間の態様が３つ例示されている。ここで、計測時間Ａで示すように時刻ｔ０から時刻ｔ１のＤＡＣ周期における時刻ｔ０１においてＣＰＵ１０から特定のエンベロープ種類における全チャンネルの到達フラグの読出命令が音源制御レジスタ３０に供給されたとする。この場合には、この時刻ｔ０１においてタイマ３が起動される。タイマ３を起動する情報としては、音源制御レジスタ３０にＣＰＵ１０から供給される読出命令を構成する読出アドレスの一部のビットを使用することができる。このタイマ３は次のＤＡＣ周期における時刻ｔ１５においてタイムアップする。この場合、時刻ｔ０１〜ｔ１５の期間は、ビットマップ上に全チャンネルの到達フラグが揃うに十分な期間とされているから、タイマ３がタイムアップした際に読み出される全チャンネルの到達フラグは、各チャンネルの状態を正確に示しているようになる。
【００４２】
また、計測時間Ｂで示すように時刻ｔ１から時刻ｔ２のＤＡＣ周期における時刻ｔ１１においてＣＰＵ１０から特定のエンベロープ種類における全チャンネルの到達フラグの読出命令が音源制御レジスタ３０に供給されたとする。この場合には、この時刻ｔ１１においてタイマ３が起動される。このタイマ３は次のＤＡＣ周期における時刻ｔ２３においてタイムアップする。この場合、時刻ｔ１１〜ｔ２３の期間は、時刻ｔ０１〜ｔ１５の期間と同様の長さの期間とされているから、タイマ３がタイムアップした際に読み出される全チャンネルの到達フラグは、各チャンネルの状態を正確に示しているようになる。
【００４３】
さらに、計測時間Ｃで示すように時刻ｔ１から時刻ｔ２のＤＡＣ周期における時刻ｔ１３においてＣＰＵ１０から特定のエンベロープ種類における全チャンネルの到達フラグの読出命令が音源制御レジスタ３０に供給されたとする。この場合には、この時刻ｔ１３においてタイマ３が起動される。このタイマ３は次のＤＡＣ周期における時刻ｔ２４においてタイムアップする。この場合、時刻ｔ１３〜ｔ２４の期間は、時刻ｔ０１〜ｔ１５の期間と同様の長さの期間とされているから、タイマ３がタイムアップした際に読み出される全チャンネルの到達フラグは、各チャンネルの状態を正確に示しているようになる。なお、全チャンネルの到達フラグがビットマップ上に揃う期間は、エンベロープ種類によらずほぼ一定の期間とされる。
【００４４】
次に、図１に示す電子楽器におけるＣＰＵ１０が実行するノートオンイベント処理のフローチャートを図６に示す。
図６に示すノートオンイベント処理はノートオンイベントが検出された際にスタートされ、ステップＳ１にてノートオンイベントにおけるパート情報がＰＴレジスタに、そのノート番号がＮＮレジスタに、そのベロシティがＶＥＬレジスタに格納される。次いで、ステップＳ２にてパートＰＴに選択されている音色に必要とされているレイヤ数がＬＮレジスタに格納される。そして、ステップＳ３にてレイヤ数ＬＮの発音チャンネルがパートＰＴに割り当てられる。ここで、ｎが１に設定（ステップＳ４）され、ステップＳ５にてｎ（＝１）番目の割当チャンネルにｎ（＝１）のレイヤの各初期値が音源制御レジスタ３０に設定される。この初期値には目標値レジスタ３０ｄに設定されるイニシャルエンベロープ値も含まれており、ステップＳ６にてイニシャルレジスタ（ＩＮＩＴ）３０ｂの出力を立ち上げて、タイマ１を起動すると共に、ロード信号発生部３２ｅにロード信号を発生させる。
【００４５】
次いで、ステップＳ７にて同じチャンネルの同じレイヤのエンベロープパラメータ以外の音色パラメータを、音源制御レジスタ３０に書き込む。ここで、タイマ１がタイムアップするまで待ち（ステップＳ８）、タイマ１のタイムアップにより、現在値レジスタ３２ｄにイニシャルエンベロープ値が有効に書き込まれたことが確認される。タイマ１がタイムアップした際には、ステップＳ９にて同じチャンネルの同じレイヤにおける第１ステートのエンベロープパラメータであるアタックレベルとアタックレートを音源制御レジスタ３０に書き込む。この場合、アタックレベルは目標とされる第１エンベロープ値として目標値レジスタ３０ｄに書き込まれ、アタックレートは、レートレジスタ３０ｅに書き込まれる。さらに、ステップＳ１０にてｎがレイヤ数ＬＮ以上となったか判断されるが、ここでレイヤ数ＬＮ以上となっていないと判断された場合はステップＳ１１に分岐する。このステップＳ１１にてｎが１つインクリメントされてｎ＝２とされ、ステップＳ５に戻り、レイヤ２における設定が同様に行われる。このようなステップＳ５ないしステップＳ１１の処理が繰り返し行われて、全てのレイヤにおける設定が終了すると、ステップＳ１０にてＹＥＳと判断されてステップＳ１２に進み全割当チャンネルに同時ノートオンが指示されてノートオンイベント処理は終了する。これにより音源２０はレイヤ数に相当する発音チャンネルの楽音の生成を開始する。なお、同時ノートオンは、ノートオンのビットマップにおいて割り当てられた全チャンネルに“１”をセットすることにより行われる。
【００４６】
次に、図１に示す電子楽器におけるＣＰＵ１０が実行するＥＧ割込イベント処理のフローチャートを図６に示す。
図７に示すＥＧ割込イベント処理はエンベロープ生成処理におけるＣＰＵ割込が発生された際にスタートされ、ステップＳ２０にてＣＰＵ割込を発生させたエンベロープ種類が検出される。次いで、ステップＳ２１にて検出されたエンベロープ種類における全チャンネルの到達フラグの読み出しが設定されて、タイマ３が起動される。ここで、タイマ３がタイムアップするまで待ち（ステップＳ２２）、タイマ３がタイムアップした際に全発音チャンネルの到達フラグがビットマップ上に揃うようになる。タイマ３がタイムアップすると、ステップＳ２３に進み全チャンネルの到達フラグが読み出されて、ＣＰＵ割込を発生させた全てのチャンネルが検出される。そこで、ステップＳ２４にて検出された最初のチャンネルにおける目標値レジスタ３０ｄに、次ステートのエンベロープパラメータ（次の目標値）を書き込む。同時に、マスクレジスタ３０ａに“１”をセットして到達フラグおよびＣＰＵ割込信号をマスクすると共に、タイマ２を起動する。
【００４７】
ここで、タイマ２がタイムアップするまで待ち、タイマ２がタイムアップしたことが検出される（ステップＳ２６）と、ステップＳ２７に進みマスクが解除される。これにより、次ステートのエンベロープパラメータが到達フラグ生成部３２ｆが出力する到達フラグに反映されるまでに動作遅延時間があったとしても、誤った到達フラグおよびＣＰＵ割込信号が出力されないようになる。そして、ステップＳ２８にてステップＳ２３にて検出されたチャンネルの内の残るチャンネルがあるか否かが判断され、残るチャンネルがある場合はステップＳ２４に戻る。そして、残るチャンネルがなくなるまでステップＳ２４ないしステップＳ２８の処理が繰り返し行われて、次ステートのエンベロープパラメータが該当する全てのチャンネルに設定されるようになる。次いで、ステップＳ２９にて割込を発生させた残るエンベロープ種類がある場合は、ステップＳ２１に戻り残るエンベロープ種類がなくなるまでステップＳ２１ないしステップＳ２９の処理が繰り返し行われる。これにより、ＣＰＵ割込を発生させた全てのエンベロープ種類における全てのチャンネルに次ステートのエンベロープパラメータが設定されるようになる。
【００４８】
【発明の効果】
本発明は以上説明したように、音源制御レジスタへ書き込まれた楽音パラメータが有効となって、次の楽音パラメータの書き込みが許可されるまでの時間を計数する第１のタイマ手段を設けるようにしている。これにより、現在値レジスタへのイニシャルエンベロープ値の書き込みが完了する前に、次の目標値が音源制御レジスタに書き込まれることを防止することができるようになる。
また、書き込みの結果が到達フラグに反映されるまでの時間を計数する第２のタイマがタイムアップするまで到達フラグおよび割込信号をマスクするようにしたので、その書込が到達フラグに反映されるまでに時間がかかっても誤動作しないようになる。さらに、到達フラグが揃うまでの時間を計数する第３のタイマを設けるようにしたので、複数チャンネルにおける正確な到達フラグの状態を読み出すことができるようになる。
【図面の簡単な説明】
【図１】  本発明の実施の形態にかかる音源装置を備える電子楽器の構成を示すブロック図である。
【図２】  本発明の実施の形態にかかる音源装置におけるマルチＥＧの構成と音源制御レジスタの構成を示す図である。
【図３】  本発明の実施の形態にかかる音源装置におけるマルチＥＧが発生するエンベロープ波形の例を示す図である。
【図４】  本発明の実施の形態にかかる音源装置における楽音パラメータの書込期間を示す図である。
【図５】  本発明の実施の形態にかかる音源装置におけるタイマ１ないしタイマ３の動作を示す図である。
【図６】  本発明の実施の形態にかかる音源装置が備えられている電子楽器におけるノートオンイベント処理のフローチャートである。
【図７】  本発明の実施の形態にかかる音源装置が備えられている電子楽器におけるＥＧ割込イベント処理のフローチャートである。
【図８】  従来の音源装置の一部の構成を示す図である。
【図９】  エンベロープ波形の例を示す図である。
【符号の説明】
１０  ＣＰＵ、１１  ＲＯＭ、１２  ＲＡＭ、１３  タイマ、１４  ドライブ、１５  ディスク、１６  ＭＩＤＩインタフェース、１７  ネットワークインタフェース、１８  パネルスイッチ、１９  パネル表示器、２０  音源、２１  波形メモリ、２２  ＤＡＣ、２３  サウンドシステム、２４  バスライン、３０  音源制御レジスタ、３０ａ  マスクレジスタ、３０ｂ  イニシャルレジスタ、３０ｃ  ノートオンレジスタ、３０ｄ  目標値レジスタ、３０ｅ  レートレジスタ、３１  時間計測部、３２  マルチＥＧ部、３２ａ  比較器、３２ｂ  加減算器、３２ｃ  セレクタ、３２ｄ  現在値レジスタ、３２ｅ  ロード信号発生部、３２ｆ  到達フラグ生成部、３２ｇ  割込発生部、３３  アドレス発生部、３４  補間部、３５  ＤＣＦ、３６  振幅制御部、３７  ミキサ＆ＤＳＰ部、１２４  バスライン、１３０  音源制御レジスタ、１３０ａ  イニシャルレジスタ、１３０ｂ  エンベロープ値、１３０ｂ  ＥＧパラメータレジスタ、１３２  エンベロープ生成部、１３２ａ  ＥＧ部、１３２ｂ  到達検出手段、１３２ｃ  現在値レジスタ、１３２ｄ  到達フラグ生成部、１３２ｅ  割込発生部
【図１】
0003695402.tif 000002
【図２】
0003695402.tif 000003
【図３】
0003695402.tif 000004
【図４】
0003695402.tif 000005
【図５】
0003695402.tif 000006
【図６】
0003695402.tif 000007
【図７】
0003695402.tif 000008
【図８】
0003695402.tif 000009
【図９】
0003695402.tif 000010