a.全体構成
まず、本発明の一実施形態に係る楽音信号発生装置を適用した電子楽器の全体構成について図1を用いて説明する。図1に示すように、この電子楽器は、鍵盤11、パネル操作子12、ペダル操作子13、操作子インターフェース回路14、表示器16、音源回路17、サウンドシステム18、コンピュータ部19、記憶装置21及び外部インターフェース回路22を備えている。
鍵盤11は、演奏者の手によって操作されて、それぞれ発生させる楽音信号の音高を指定するとともに楽音信号の発生及び停止を指示する複数の白鍵及び黒鍵からなる。パネル操作子12は、電子楽器の操作パネル上に設けられ、演奏者の手によって操作されて、発生される楽音信号の音色、音量、効果等の楽音特性を設定するとともに、電子楽器全体の動作を設定する。ペダル操作子13は、演奏者の足によって操作されて、発生される楽音信号の音色、音量、効果などの楽音特性を設定する。
鍵盤11、パネル操作子12及びペダル操作子13は、バス23に接続された操作子インターフェース回路14に接続されている。そして、鍵盤11、パネル操作子12及びペダル操作子13の操作を表す演奏情報及び操作情報が、操作子インターフェース回路14及びバス23を介して後述するコンピュータ部19に供給される。表示器16は、液晶ディスプレイ(LCD)によって構成され、表示画面上に文字、図形などを表示する。この表示器16の表示は、バス23を介してコンピュータ部19によって制御される。
音源回路17は、複数の波形データを記憶した波形メモリWMを含み、波形メモリWMから、コンピュータ部19によって指定された波形データを読み出してディジタル楽音信号を生成する複数の発音チャンネルを備える。各発音チャンネルにて生成されたディジタル楽音信号はサウンドシステム18に供給される。なお、ディジタル楽音信号にコーラス効果、残響効果などの各種効果を付加するエフェクタ回路は、後述するように音源回路17に含まれている。サウンドシステム18は、音源回路17から供給されたディジタル楽音信号をアナログ楽音信号にD/A変換するD/A変換器、変換したアナログ楽音信号を増幅するアンプ、及び増幅されたアナログ楽音信号を音響信号に変換して出力するスピーカを備えている。
コンピュータ部19は、バス23にそれぞれ接続されたCPU19a、タイマ19b、ROM19c及びRAM19dからなる。CPU19aは、操作子インターフェース回路14及び外部インターフェース回路22から供給される演奏情報に応じて、音源回路17に発音のために必要な情報を供給する。とくに、CPU19aは、演奏者による鍵盤11の押鍵操作及び外部インターフェース回路22を介した外部機器からの演奏情報の供給によって発生するノートオンイベントに対応した楽音の発生を、1つ又は複数の発音チャンネルに割り当てる。また、この電子楽器は、記憶装置21に記憶された演奏情報を読み出して再生する自動演奏装置を備えている。この自動演奏装置による演奏情報の再生によってもノートオンイベントが発生し、CPU19aは、このノートオンイベントに対応した楽音の発生を、1つ又は複数の発音チャンネルに割り当てる。
また、記憶装置21は、HDD、FDD、CD−ROM、MO、DVDなどの大容量の不揮発性記録媒体と、同各記録媒体に対応するドライブユニットを含むものであり、各種データ及びプログラムの記憶及び読出しを可能にしている。これらのデータ及びプログラムは予め記憶装置21に記憶されていてもよいし、外部インターフェース回路22を介して外部から取り込んでもよい。そして、記憶装置21に記憶された各種データ及びプログラムは、CPU19aによって読み込まれ、電子楽器の制御に利用される。外部インターフェース回路22は、MIDIインターフェース回路及び通信インターフェース回路を含んでおり、他の電子音楽装置、パーソナルコンピュータなどのMIDI対応の外部機器に接続可能となっているとともに、インターネットなどの通信ネットワークに接続可能となっている。
b.音源回路の構成
次に、音源回路17の構成について詳しく説明する。まず音源回路17の全体構成について説明する。音源回路17は、図2に示すように、波形データを記憶した波形メモリWMを備えている。また、音源回路17は、波形メモリWMから波形データを読み出してディジタル楽音信号を生成する複数(例えば128個)の発音チャンネルCH0,CH1・・・CH127を備えている。また、音源回路17は、発音チャンネルCH0,CH1・・・CH127にて生成されたディジタル楽音信号を累算してサウンドシステム18に出力するチャンネル累算回路17aを備えている。また、音源回路17は、CPU19aによる発音チャンネルの予約の受け付け及び予約された発音チャンネルに発音の開始指示を行う発音予約回路17bを備えている。つぎに、これらの波形メモリWM、発音チャンネルCH0,CH1・・・CH127、チャンネル累算回路17a、及び発音予約回路17bについて詳しく説明する。
b1.波形メモリ
波形メモリWMには、図3に示すように複数種類の楽器の楽音波形を表す波形データが記憶されている。1つの楽器の楽音が複数の成分に分解されて別々の楽音波形として記憶されている場合もある。例えばピアノ音のように、発音開始時の音色が激しく変化する成分と、発音開始から終了まであまり音色が変化しない成分とに分解して別々の楽音波形として記憶している場合もある。そこで、1つの楽音波形を構成要素ごとに分解した楽音波形をエレメント波形といい、それぞれ別々の発音チャンネルによって読み出されたエレメント波形から生成されるそれぞれのディジタル楽音信号をエレメント信号という。生成された各エレメント信号は、チャンネル累算回路17aによって合成されて1つの楽器の楽音信号となる。なお、楽器の種類によっては、1つの楽音波形を構成要素ごとに分解することなく、1つの波形として記憶してもよい。この場合、1つの楽器の楽音信号が1つのエレメント波形のみから生成されるとみなすことができるので、この場合の楽音波形もエレメント波形という。
各エレメント波形は、鍵音高の所定の範囲毎(例えば、1オクターブ毎)に設けられた波形セットから構成され、各発音チャンネルCH0,CH1・・・CH127において補間処理を行うことにより、押鍵された鍵の音高に対応したディジタル楽音信号を生成する。また、波形セットは、押鍵強さの所定の範囲毎(例えば、4段階に分けた押鍵強さの段階毎)に設けられた波形データから構成され、各発音チャンネルCH0,CH1・・・CH127において補間処理を行うことにより、押鍵強さに対応した音色及び音量のエレメント信号を生成する。なお、各鍵ごとに波形セットを設けてもよい。また、エレメント波形を、鍵音高に関係なく、1つの波形セットのみから構成してもよい。さらに、各波形セットは、押鍵強さに関係なく、1つの波形データのみから構成される場合もある。
b2.発音チャンネル
各発音チャンネルCH0,CH1・・・CH127は、それぞれ同様に構成されており、サンプリング周期ごとにエレメント信号の生成をそれぞれ行う。以下の説明では、発音チャンネルにおけるエレメント信号の生成を単に発音という。各発音チャンネルCH0,CH1・・・CH127は、低周波信号発生回路LFO、ピッチ変更回路PEG、カットオフ周波数変更回路FEG及び音量変更回路AEGを備えている。さらに、各発音チャンネルCH0,CH1・・・CH127は、アドレス発生回路ADR、サンプル補間回路SPI、フィルタ回路FLT及び音量制御回路AMPも備えている。
低周波信号発生回路LFOは、発音開始後、音高、音色及び音量を周期的に変化させる変調信号を生成して、アドレス発生回路ADR、フィルタ回路FLT及び音量制御回路AMPにそれぞれ供給する。低周波信号発生回路LFOには、CPU19aから低周波信号制御パラメータが供給される。低周波信号制御パラメータには、低周波信号発生回路LFOから出力する変調信号の波形、周波数及び振幅を指定するデータが含まれる。
ピッチ変更回路PEGは、エレメント信号の音高を制御する音高制御信号をアドレス発生回路ADRに供給する。ピッチ変更回路PEGは、発音開始後の時間経過に従ってエレメント信号の音高が変化するように、時間経過に従って変化する音高制御信号を生成してアドレス発生回路ADRに供給する。この時間経過に従って変化する一連の音高制御信号をピッチエンベロープと呼ぶ。また、カットオフ周波数変更回路FEGは、エレメント信号の周波数特性を制御するカットオフ周波数制御信号をフィルタ回路FLTに供給する。カットオフ周波数制御回路FEGは、発音開始後の時間経過に従ってフィルタのカットオフ周波数が変化するように、時間経過に従って変化するカットオフ周波数制御信号を生成して、フィルタ回路FLTに供給する。この時間経過に従って変化する一連のカットオフ周波数制御信号をカットオフエンベロープと呼ぶ。また、音量変更回路AEGは、エレメント信号の音量を制御する音量制御信号を音量制御回路AMPに供給する。音量変更回路AEGは、発音開始後の時間経過に従ってエレメント信号の音量が変化するように、時間経過に従って変化する音量制御信号を生成して音量制御回路AMPに供給する。この時間経過に従って変化する一連の音量制御信号を音量エンベロープと呼ぶ。
アドレス発生回路ADRは、CPU19aから供給された楽音パラメータの1つである押鍵された鍵の鍵音高を表す音高値、ピッチ変更回路PEGから供給された音高制御信号及び低周波信号発生回路LFOから供給された変調信号を合成し、ピッチシフト量を算出する。ここで、アドレス発生回路ADRには、CPU19aから、楽音パラメータの1つとして、波形データ情報も供給される。波形データ情報は、波形メモリWMから読み出す波形データの先頭アドレス及び末尾アドレス、並びにこの波形データの音高を表す元ピッチからなる。ピッチシフト量とは、波形データ情報に含まれる元ピッチと発音する楽音のピッチとの差である。次に、アドレス発生回路ADRは、前記算出したピッチシフト量に応じて、波形データの読み出しレートを決定する。そして、アドレス発生回路ADRは、前記決定した読み出しレートで波形メモリWMから波形データを読み出す。ただし、ピッチシフト量に応じて決定される読み出しレートは、通常、小数部を含むので、波形データの読み出しアドレスも整数部と小数部からなる。そこで、この波形データの読み出しでは、整数部を用いて波形データの隣合う前後一対のサンプル値を読み出し、サンプル補間部SPIへ供給する。サンプル補間部SPIは、供給された一対のサンプル値とアドレスの小数部とを用いて補間演算を行ってディジタル楽音データを生成して、フィルタ回路FLTに供給する。
フィルタ回路FLTは、カットオフ周波数変更回路FEGから供給されたカットオフ周波数制御信号及び低周波信号発生回路LFOから供給された変調信号を合成して、フィルタのカットオフ周波数を算出する。フィルタ回路FLTには、CPU19aから、フィルタ制御パラメータも供給される。フィルタ制御パラメータには、フィルタの種類(例えば、ハイパスフィルタ、ローパスフィルタなど)を選択するフィルタ選択情報が含まれる。フィルタ回路FLTは、フィルタ選択情報に従って選択したフィルタのカットオフ周波数を前記算出したカットオフ周波数に設定し、サンプル補間回路SPIから供給されたディジタル楽音データをこのフィルタでフィルタリング処理した後、音量制御回路AMPへ出力する。
音量制御回路AMPは、音量変更回路AEGから供給された音量制御信号及び低周波信号発生回路LFOから供給された変調信号を合成して、発生すべき楽音信号の音量を算出する。そして、音量制御回路AMPは、フィルタ回路FLTから供給されたディジタル楽音データを前記算出した音量に応じて増幅して、チャンネル累算回路17aへ出力する。
なお、本実施形態においては、音源回路17は、128個の発音チャンネルCH0,CH1・・・CH127を備えているが、発音チャンネルを1つのみ備えるようにしておいて、その発音チャンネルを時分割で利用してもよい。例えば1サンプリング周期を128分割すれば、分割された各期間においてなされる処理は、本実施形態における発音チャンネルCH0,CH1・・・CH127においてなされる処理にそれぞれ対応する。
b3.チャンネル累算回路17a
チャンネル累算回路17aは、サンプリング周期ごとに、各発音チャンネルCH0,CH1・・・CH127から出力されたディジタル楽音信号を累算して、累算したディジタル楽音信号をサウンドシステム18に出力する。なお、チャンネル累算回路17aは、各発音チャンネルから出力されるディジタル楽音信号にそれぞれ共通の効果(例えば、コーラス効果、残響効果など)を付加するエフェクト処理回路を備えている。
b4.発音予約回路17b
次に、発音予約回路17bについて説明する。発音予約回路17bは、CPU19aにより指定された発音チャンネルの予約に関する情報を生成して記憶するとともに、所定のタイミングで、その発音チャンネルに対し発音開始を指示する。
発音予約回路17bは、図4に示すように、チャンネル指定レジスタCS0,CS1・・・CS127及び予約受付回路17b1を備えている。チャンネル指定レジスタCS0,CS1・・・CH127は、発音チャンネルCH0,CH1・・・CH127にそれぞれ対応したビットで構成された128ビットからなるビットマップであり、CPU19aが音源回路17に対し、発音チャンネルを特定して指示を行うときに用いられる。例えば、複数のエレメント波形に分解された楽音波形の生成を行うために、CPU19aは、発音予約回路17bにエレメント信号の発生に使用する複数の発音チャンネルを指定する。このとき、CPU19aは、チャンネル指定レジスタCS0,CS1・・・CS127のうち、使用する発音チャンネルに対応したビットであって、楽音波形を構成するエレメント信号の数と同数のビットを「予約」にセットする。その後、CPU19aは、指示した発音チャンネルに共通のグループ番号を割り当てさせるために、予約受付回路17b1に予約トリガ信号を出力する。
なお、チャンネル指定レジスタCS0,CS1・・・CS127は、CPU19aのメモリアドレス空間における「チャンネルビット0」〜「チャンネルビット127」で表わされるアドレスに割り当てられていて、CPU19aは、「チャンネルビット0」〜「チャンネルビット127」を用いて、チャンネル指定レジスタCS0,CS1・・・CH127のビット操作(予約する発音チャンネルの指定)を行うことができる。また、予約受付回路17b1内に設けられた図示しない予約トリガレジスタが、CPU19aのメモリアドレス空間における「予約トリガ」で表わされるアドレスに割り当てられていて、CPU19aは、「予約トリガ」を用いて、予約受付回路17b1に予約トリガ信号を出力することができる。
予約受付回路17b1は、チャンネル指定レジスタCS0,CS1・・・CS127で指定された複数の発音チャンネルに対し共通のグループ番号を割り当てる。上記の例のように、1つの楽音波形が複数のエレメント波形に分解されている場合(すなわち複数の発音チャンネルを同時に使用する場合)、これらの複数の発音チャンネルに共通のグループ番号を割り当てておき、同時に発音開始させる発音チャンネルをグループ番号で管理するようにしている。なお、1つの楽音波形が、1つのエレメント波形から構成される場合は、複数の発音チャンネルのグループ化はしないが、回路構成を共通にして簡単にするため、複数のエレメント信号を合成する場合と同様に、1つの発音チャンネルのみからなるグループを構成して、グループ番号を割り当てる。ただし、グループ数には上限があり、本実施形態では30個のグループが使用可能である。そこで、各グループ番号が使用可能か否かを示すグループ使用可否フラグを記憶するグループ使用状況レジスタGU1〜GU30が設けられている。予約受付回路17b1は、グループ使用状況レジスタGU1〜GU30の中から「使用可」となっている1つのグループ番号を発音チャンネルに割り当てた後、グループ使用状況レジスタGU1〜GU30のうちで、そのグループ番号に対応するレジスタを「使用不可」にセットする。なお、「使用不可」にセットされたグループ使用可否フラグは、発音開始時に後述の発音開始指示回路17b6によって「使用可」にセットされる。ここで、CPU19aは、予約しようとする発音チャンネルにグループ番号の割り当てが可能であることをグループフルフラグGFによって確認した上で、予約トリガ信号を出力するようになっている。したがって、予約トリガ信号を入力した予約受付回路17b1は必ずグループ番号を発音チャンネルに割り当てることができる。
グループフルフラグGFとは、空きグループがあるか否か(すなわち、発音チャンネルに対しグループ番号の割り当てが可能か否か)を示すフラグである。グループフルフラグGFは、グループフルフラグセット回路17b2によって、「空きグループ有り」又は「空きグループ無し」にセットされる。すなわち、グループフルフラグセット回路17b2は、グループ使用状況レジスタGU1〜GU30のうち、「使用可」となっているレジスタが1つでもあればグループフルフラグを「空きグループ有り」にセットする。一方、グループ使用状況レジスタGU1〜GU30のすべてのレジスタが「使用不可」となっていれば、グループフルフラグGFを「空きグループ無し」にセットする。なお、グループフルフラグGFは、CPU19aのメモリアドレス空間における「グループフル」で表わされるアドレスに割り当てられていて、CPU19aは、「グループフル」を用いて、グループフルフラグGFの値を読み込むことができる。
予約受付回路17b1は、取得したグループ番号を、キーオンマップに書き込む。キーオンマップは、発音チャンネルCH0〜CH127にそれぞれ対応して設けられたキーオンマップレジスタKM0〜KM127からなる。キーオンマップレジスタKM0〜KM127は、グループ番号「1」〜「30」のうちのいずれかの番号又は「グループ割り当てなし」を表す。キーオンマップは、ノートオンイベントが発生するごとに更新される。すなわち、ノートオンイベントが発生すると、CPU19aによって、1つ又は複数の発音チャンネルが選択され、選択された発音チャンネルに係るキーオンマップレジスタに共通のグループ番号が書き込まれる。その後、予約受付回路17b1は、「予約」にセットされているチャンネル指定レジスタを「指定なし」にセットする。
レベル検出回路17b3は、各発音チャンネルCH0,CH1・・・CH127の音量制御回路AMPから出力されるエレメント信号の音量レベルを検出して、音量レベルレジスタAL0,AL1・・・AL127に記録する。また、音量レベルレジスタAL0,AL1・・・AL127内に記録された音量レベルは、ダンプレベル到達検出回路17b4に供給される。なお、音量レベルレジスタAL0,AL1・・・AL127は、CPU19aのメモリアドレス空間における「音量レベルCH0」〜「音量レベルCH127」で表わされるアドレスに割り当てられていて、CPU19aは、「音量レベルCH0」〜「音量レベルCH127」を用いて、音量レベルレジスタAL0,AL1・・・AL127の値を読み込むことができる。
レベル検出回路17b3による発音チャンネルCH0〜CH127のエレメント信号の音量レベル検出及び検出結果のダンプレベル到達検出回路17b4への供給は、1サンプリング周期内に時分割でなされる。レベル検出回路17b3が一連の発音チャンネルCH0〜CH127の楽音データのレベル検出を開始する直前に、キーオンマップの内容が、キーオンマップラッチ回路17b5によって、キーオンマップラッチとして、キーオンマップレジスタKM0〜KM127と同様のキーオンマップラッチレジスタKML0〜KML127にコピーされて保持される。ダンプレベル到達検出回路17b4は、キーオンマップラッチに基づいて、各グループに属する全ての発音チャンネルにて生成されているエレメント信号の音量レベルがダンプレベル以下になっているか否かの判定を行う。
ダンプレベル到達検出回路17b4は、上記の判定において、発音予約回路17bが備えるダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1に記憶されたダンプレベルと各エレメント信号の音量レベルとを比較する。ダンプレベル設定レジスタDS0は、演奏者が鍵盤11を押離鍵して演奏する手動演奏に係るエレメント信号のダンプレベルを記憶し、ダンプレベル設定レジスタDS1は、自動演奏装置が記憶装置21に記憶された演奏情報を読み出して演奏する自動演奏によるエレメント信号のダンプレベルを記憶する。ダンプレベル設定レジスタDS,DS1には、この電子楽器の電源投入時の初期化処理において、CPU19aによって、それぞれ異なるダンプレベルが書き込まれる。ダンプレベル設定レジスタDS0,DS1に書き込まれるダンプレベルは、エレメント信号がとり得る最大レベルに対する相対値で表される。また、ダンプレベル設定レジスタDS0に書き込まれるダンプレベルは、ダンプレベル設定レジスタDS1に書き込まれるダンプレベルよりも小さい。例えば、ダンプレベルDS0には、「−96dB」が書き込まれ、ダンプレベル設定レジスタDS1には、「−84dB」が書き込まれる。なお、ダンプレベル設定レジスタDS0及びダンプレベル設定レジスタDS1は、CPU19aのメモリアドレス空間における「ダンプレベル0」及び「ダンプレベル1」で表わされるアドレスにそれぞれ割り当てられていて、CPU19aは、「ダンプレベル0」及び「ダンプレベル1」を用いて、ダンプレベル設定レジスタDS0及びダンプレベル設定レジスタDS1にダンプレベルをそれぞれ書き込むことができる。また、「ダンプレベル0」及び「ダンプレベル1」を用いて、ダンプレベル設定レジスタDS0,DS1からダンプレベルを読み込むことができる。
また、ダンプレベル到達検出回路17b4には、後述のパラメータ出力回路17c4から、各発音チャンネルごとに、ダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1のどちらのレジスタに記憶されているダンプレベルを用いるかを表すダンプレベル参照情報DPn(n=0,1・・・127)も供給される。ダンプレベル参照情報DPnは、対応する発音チャンネルCHnのエレメント信号が手動演奏により発生させられている場合は、ダンプレベル設定レジスタDS0のアドレスを表し、自動演奏により発生させられている場合は、ダンプレベル設定レジスタDS1のアドレスを表す。ダンプレベル到達検出回路17b4は、ダンプレベル参照情報DPnを用いて、ダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1に記憶されているダンプレベルを取得する。そして、ダンプレベル到達検出回路17b4は、キーオンマップラッチ、各発音チャンネルCHnの音量レベル及び前記取得したダンプレベルを用いて上記の判定を行い、判定結果をダンプレベル到達検出レジスタDL1,DL2・・・DL30に順次書き込んでいく。ダンプレベル到達検出レジスタDL1,DL2・・・DL30は、各グループに対応して設けられたレジスタであって、それぞれ「ダンプレベル到達」又は「ダンプレベル未到達」を表すデータを記憶する。まず、ダンプレベル到達検出回路17b4は、レベル検出回路17b3が一連の発音チャンネルCH0〜CH127についてのエレメント信号の音量レベルの検出を開始する前に、ダンプレベル到達検出レジスタDL1,DL2・・・DL30を「ダンプレベル到達」にセットする。そして、レベル検出回路17b3によって検出された各発音チャンネルのエレメント信号の音量レベルとダンプレベル参照情報DP0〜DP127によって参照されるダンプレベルとをそれぞれ比較する。
例えば、発音チャンネルCHn(n=0,1・・・127)のエレメント信号の音量レベルがダンプレベル参照情報DPnによって参照されるダンプレベルよりも大きい場合、発音チャンネルCHnに対応するキーオンマップラッチレジスタKMLnに記憶されているグループ番号m(m=1,2・・・30)を取得し、グループ番号mに対応するダンプレベル到達検出レジスタDLmを「ダンプレベル未到達」にセットする。このとき、すでにダンプレベル到達検出レジスタDLmが「ダンプレベル未到達」にセットされている場合は、ダンプレベル到達検出レジスタDLmの操作を行うことなく、次の発音チャンネルの判定を行う。一方、発音チャンネルCHnの音量レベルがダンプレベル参照情報DPnによって参照されるダンプレベル以下になっていた場合は、ダンプレベル到達検出レジスタDLmの操作を行わない。なお、発音チャンネルCHn(n=0,1・・・127)のエレメント信号の音量レベルがダンプレベル参照情報DPnによって参照されるダンプレベルよりも大きい場合及び発音チャンネルCHnの音量レベルがダンプレベル参照情報DPnによって参照されるダンプレベル以下になっていた場合のいずれにおいても、取得したキーオンマップレジスタの値が「グループ割り当てなし」の場合は、ダンプレベル到達検出レジスタDLmの操作を行うことなく、次の発音チャンネルの判定を行う。
上記の判定処理を全ての発音チャンネルについて行った後、ダンプレベル到達検出レジスタDLmが「ダンプレベル未到達」にセットされていれば、グループmに属する発音チャンネルのうち、いずれか1つ又は複数の発音チャンネルのエレメント信号の音量レベルがダンプレベルよりも大きいことになる。一方、ダンプレベル到達検出レジスタDLmが「ダンプレベル到達」にセットされていれば、グループmに属する全発音チャンネルのエレメント信号の音量レベルがダンプレベル以下であることになる。
ここで、キーオンマップではなくキーオンマップラッチに基づいて、上記ダンプレベル到達の判定を行う理由について説明しておく。前述のように、ダンプレベル到達検出回路17b4が発音チャンネルCH0、CH1・・・CH127のエレメント信号の音量レベルの判定をしている間であっても、キーオンマップレジスタKM0〜KM127は更新されていく。
例えば、発音チャンネルCH0が発音中でダンプレベルに到達していない状態であり、かつキーオンマップレジスタKM0にはグループ番号が記録されていない(すなわち、発音チャンネルCH0の予約がなされていない)ものとする。さらに、発音チャンネルCH5は、発音に使用されていないチャンネル(空きチャンネル)であるとする。そして、レベル検出回路17b3及びダンプレベル到達検出回路17b4が発音チャンネルCH0についての判定を行った後、発音チャンネルCH5の判定を行うまでの間に、新たなノートオンイベントが発生して、発音チャンネルCH0及び発音チャンネルCH5が新たな発音に使用する発音チャンネルとして指定され、キーオンマップレジスタKM0及びKM5にグループ番号「3」が記録されたとする。その後、レベル検出回路17b3及びダンプレベル到達検出回路17b4が発音チャンネルCH5の判定を行うと、発音チャンネルCH5は空きチャンネルなので、ダンプレベルに到達していると判定される。すると、グループ番号「3」に属する発音チャンネルCH0で発音中の楽音信号がダンプレベルに到達していないにもかかわらず、発音チャンネルCH0及び発音チャンネルCH5に対して後述する発音開始指示回路17b6によって、発音開始指示がなされる。したがって、発音チャンネルCH0にて発音中の楽音が、突然途切れたような不自然な楽音となる。このような不自然な楽音の発生を防止するため、レベル検出回路17b3及びダンプレベル到達検出回路17b4が一連の発音チャンネルCH0〜CH127についての判定をしている間は、各発音チャンネルの属するグループが変化しないようにしておく必要がある。したがって、キーオンマップの内容をキーオンマップラッチにコピーしておき、キーオンマップラッチに基づいてダンプレベル到達の判定を行うようにしている。
発音開始指示回路17b6は、ダンプレベル到達検出レジスタDLm(m=1,2・・・30)が「ダンプレベル到達」にセットされていると、グループmに属する全発音チャンネルに対して、発音の開始を指示する。そして、発音開始指示回路17b6は、グループmに属する全発音チャンネルに対応するキーオンマップレジスタ及びキーオンマップラッチレジスタを「グループ割り当てなし」にセットする。また、発音開始指示回路17b6は、グループ使用状況レジスタGUmを「使用可」にセットする。また、発音開始指示回路17b6は、発音開始指示の直前に、後述のパラメータ転送回路17c2及びパラメータ出力回路17c4に転送及び出力の指示を行う。
また、発音予約回路17bは、各発音チャンネルが予約可能か否かを示す予約可否フラグを記憶する予約可否フラグレジスタAF0、AF1・・・AF127を有している。予約可否フラグレジスタAF0,AF1・・・AF127は、チャンネル指定レジスタCS0,CS1・・・CS127と同様に、発音チャンネルCH0,CH1・・・CH127に対応した128ビットからなるビットマップである。予約可否フラグレジスタAF0,AF1・・・AF127においては、予約可否フラグセット回路17b8によって、各ビットが「予約可」又は「予約不可」にセットされる。予約可否フラグセット回路17b8は、発音チャンネルCHn(n=0,1・・・127)に対応するキーオンマップレジスタKMnに「1」〜「30」のうちのいずれかのグループ番号が書き込まれている場合は、発音チャンネルCHnに対応する予約可否フラグレジスタAFnを「予約不可」にセットする。一方、予約可否フラグセット回路17b8は、キーオンマップレジスタKMnが「グループ割り当てなし」にセットされてから所定の期間(例えば、サンプリング周期の5周期分)「予約不可」に保持した後、予約可否フラグレジスタAFnを「予約可」にセットする。前記所定の期間においては、音源回路17は、発音開始の処理中であり、新たにその発音チャンネルCHnの予約を受け付けられる状態にないからである。
なお、予約可否フラグレジスタAF0,AF1・・・AF127は、CPU19aのメモリアドレス空間における「チャンネルビット0」〜「チャンネルビット127」で表わされるアドレスに割り当てられていて、CPU19aは、「チャンネルビット0」〜「チャンネルビット127」を指定して読み込みを行うことにより、予約可否フラグレジスタAF0,AF1・・・AF127内の値を読み込むことができる。上記のように、チャンネル指定レジスタCS0,CS1・・・CS127及び予約可否フラグレジスタAF0,AF1・・・AF127は、同じアドレスに割り当てられているが、CPU19aによる書き込み動作時においては、チャンネル指定レジスタCS0,CS1・・・CS127が指定され、読み込み動作時においては、予約可否フラグレジスタAF0,AF1・・・AF127が指定されるようになっている。
また、発音予約回路17bは、楽音パラメータ入出力回路17cを備える。楽音パラメータ入出力回路17cは、第1メモリ17c1、パラメータ転送回路17c2、第2メモリ17c3及びパラメータ出力回路17c4からなる。楽音パラメータ入出力回路17cは、バス16を介してCPU19aから供給される楽音パラメータを入力して、音源回路17の各部に出力する。また、楽音パラメータ入出力回路17cは、音源回路17の各回路(ピッチ変更回路PEG、カットオフ周波数変更回路FEG、音量変更回路AEGなど)の状態を表すパラメータを入力して、CPU19aに出力する。
第1メモリ17c1は、音源回路17の各回路に供給するパラメータを発音チャンネルの予約時からその発音開始時まで記憶しておくメモリである。第1メモリ17c1の記憶領域は、発音チャンネルごと、かつパラメータの種類ごとに分割されて、CPU19aのメモリアドレス空間の所定のアドレスにそれぞれ割り当てられている。例えば、第1メモリ17c1におけるダンプレベル参照情報DP0〜DP127の記憶領域は、CPU19aのメモリアドレス空間において、「予約用ダンプレベル参照情報CH0」〜「予約用ダンプレベル参照情報CH127」で表わされるアドレスにそれぞれ割り当てられていて、CPU19aは、「予約用ダンプレベル参照情報CH0」〜「予約用ダンプレベル参照情報CH127」を用いて、予約する発音チャンネルのダンプレベルを記憶したダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1のいずれかのアドレスをダンプレベル参照情報DP0〜DP127として第1メモリ17c1に書き込むことができる。
また、パラメータ転送回路17c2は、発音開始指示回路17b6による発音開始指示に応答して、第1メモリ17c1に書き込まれたパラメータを第2メモリ17c3に転送する。第2メモリ17c3は、発音チャンネルにて生成中のエレメント信号に関するパラメータを記憶するメモリである。第2メモリ17c3の記憶領域も、第1メモリ17c1の記憶領域と同様に、発音チャンネルごと、かつパラメータの種類ごとに分割されていて、各パラメータの記憶領域は、CPU19aのメモリアドレス空間の所定のアドレスにそれぞれ割り当てられている。
例えば、第2メモリ17c3におけるダンプレベル参照情報DP0〜DP127の記憶領域は、CPU19aのメモリアドレス空間において、「実行用ダンプレベル参照情報CH0」〜「実行用ダンプレベル参照情報CH127」で表わされるアドレスにそれぞれ割り当てられている。予約された発音チャンネルCHn(n=0,1・・・127)にて発音を開始する場合、パラメータ転送回路17c2は、「予約用ダンプレベル参照情報CHn」で表されるアドレスを用いてダンプレベル参照情報DPnを第1メモリ17c1から読み出し、「実行用ダンプレベル参照情報CHn」で表されるアドレスを用いて前記読み出したダンプレベル参照情報DPnを第2メモリ17c3に書き込む。これにより、ダンプレベル参照情報DPnが第1メモリ17c1から第2メモリ17c3に転送される。また、詳しくは後述するように、CPU19aは、発音チャンネルCHnのエレメント信号の音量レベルがダンプレベル以下であるか否かを判定するとき、「実行用ダンプレベル参照情報CHn」で表されるアドレスを用いて、第2メモリ17c3からダンプレベル参照情報DPnを読み出すことができる。そして、読み出したダンプレベル参照情報DPnを用いて、ダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1から上記の判定に用いるダンプレベルを読み出すことができる。
また、パラメータ出力回路17c4は、発音開始指示回路17b6による発音開始指示に応答して、第2メモリ17c3に書き込まれたパラメータを、音源回路17の各部にそれぞれ出力する。例えば、ダンプレベル参照情報DP0〜DP127を、ダンプレベル到達検出回路17b4に出力する。なお、パラメータ出力回路17c4は、第2メモリ17c3に書き込まれたパラメータを、1サンプリング周期を128分割した時分割で出力する。すなわち、1サンプリング周期を128分割した各期間がそれぞれ発音チャンネルCH0〜CH127に対応していて、パラメータ出力回路17c4は、各期間内に、対応する発音チャンネルのパラメータを出力する。
また、CPU19aは、第2メモリ17c3にパラメータを直接書き込むことができる。例えば、CPU19aは、各種エンベロープに関するパラメータを逐次更新して、発音中の楽音の音高、音色及び音量を変化させる。
なお、第1メモリ17c1と第2メモリ17c3を1つのメモリで構成してもよい。すなわち、大きな記憶容量を有するメモリの記憶領域を分割して、第1メモリ17c1に相当する領域と第2メモリ17c3に相当する領域を確保すればよい。
c.コンピュータ部19の構成
次に、コンピュータ部19の構成について詳しく説明する。とくに、ROM19c及びRAM19dに記憶されるプログラム及び各種データについて詳しく説明する。ROM19cには、ボイスデータリストが記憶されている。ボイスデータリストは、図5に示すように、各音色ごとに規定されたボイスデータからなる。ボイスデータは、各音色の楽音波形を構成するエレメント波形ごとに設けられたエレメントデータ及び各エレメント信号の生成に共通に使用されるコモンデータからなる。
各エレメントデータの構成は共通である。各エレメントデータは、フィルタ回路FLTを制御するためのフィルタ制御パラメータ、低周波信号発生回路LFOを制御するための低周波信号制御パラメータ、各種エンベロープ生成用のエンベロープパラメータ及び波形データの選択に関する波形データ選択情報から構成されている。波形データ選択情報は、ノートナンバ及びベロシティと選択する波形データに関する情報を表す波形データ情報との対応関係を記録したテーブルである。波形データ情報は、波形データの先頭アドレス、末尾アドレス及び元ピッチからなる。
また、コモンデータは、音色名を表す音色名情報及びチャンネル累算回路17aにおいて各発音チャンネルから出力される全てのエレメント信号に共通の効果を付与するためのエフェクトパラメータなどから構成される。
また、ROM19cには、発音予約プログラム(図9)、発音チャンネル確保プログラム(図10)、音量レベル取得の周期処理プログラム(図15)及びパラメータ更新の周期処理プログラム(図16)が記憶されている。発音予約プログラムは、ノートオンイベントが発生すると実行され、前記ノートオンイベントに対応した発音を行うために使用する発音チャンネルの予約及び発生させる楽音に関するパラメータの書き込みを行うためのプログラムである。発音チャンネル確保プログラムは、発音予約プログラムのサブルーチンであって、発音に必要な発音チャンネルを確保するためのプログラムである。発音予約プログラムの実行において、CPU19aは、確保した発音チャンネルが他の発音処理に使用されているか否かに関わらず、前記発生したノートオンイベントに対応した楽音に関するパラメータを音源回路17の第1メモリ17c1に書き込む。これにより、発音チャンネルの予約が終了する。すなわち、CPU19aは、発音予約プログラムの実行により予約した発音チャンネルにて発音処理が開始されるのを待たずに発音予約プログラムを終了する。音源回路17は、予約された発音チャンネルが前記発生したノートオンイベントに対応した楽音の生成のために使用可能な状態になると、発音予約プログラムの実行により第1メモリ17c1に書き込まれたパラメータを用いて発音処理を開始する。
音量レベル取得の周期処理プログラム及びパラメータ更新の周期処理プログラムは、タイマ19bから供給される割り込み信号をトリガとして実行される。音量レベル取得の周期処理プログラムは、音量レベルレジスタAL0〜AL127の値を定期的に読み出して、後述する各発音チャンネル情報を更新するプログラムである。また、パラメータ更新の周期処理プログラムは、発音中の各発音チャンネルにて発生されるエレメント信号をリアルタイムに変化させるために音源回路17に供給する楽音パラメータを所定の周期で更新するプログラムであって、例えば、各エンベロープ生成のためのパラメータを第2メモリ17c3に書き込むプログラムである。
また、RAM19dには、各プログラムの実行により一時的に生成されるデータが記憶される。この一時的に生成されるデータには、メロディパート、伴奏パートなどの演奏パートごとに設けられたパート情報からなるパート情報リストPLが含まれる。本実施形態においては、16個の演奏パートを備えていて、各演奏パートには、それぞれパート番号PN(PN=0,1・・・16)が付されている。したがって、パート情報リストPLは16個のパート情報からなる。各パート情報は、図6に示すように、ノート情報リストNLへの参照情報及びボイスデータへの参照情報からなる。
ボイスデータへの参照情報は、各パートに割り当てられた音色のボイスデータへの参照情報である。ノート情報リストNLは、演奏パートごとに設けられている。各演奏パートごとのノート情報リストNLは、1つの演奏パートに属するノートオンイベントごとに発音中又は予約された発音に関する情報を記憶したノート情報からなる。各ノート情報には、図7に示すように、音高を表すノートナンバ、押鍵タッチ強さを表すべロシティ及び使用する発音チャンネルに関する情報を表す発音チャンネル情報への参照情報(チャンネル番号など)が含まれる。各ノート情報は、1つの楽音波形を構成するエレメント波形の数と同数の発音チャンネルへの参照情報を有する。図5乃至図7に示す例では、パート1に割り当てられた音色は、楽音波形が2つのエレメント波形から構成されている。したがって、パート1の各ノート情報は、発音チャンネルへの参照情報をそれぞれ2つずつ有する。ノート情報は、ノートオンイベントが発生するごとにノート情報リストNLに1つずつ追加される。また、ノートオフイベントの発生により発音が終了すると、ノート情報はノート情報リストNLから削除される。ただし、必ず最も古いノート情報から順番に削除されるとは限らない。そこで、各ノート情報は、1つ前のノート情報のアドレスを示す前方リンク及び1つ後のノート情報のアドレスを示す後方リンクを有している。なお、最も古いノート情報の前方リンク及び最も新しいノート情報の後方リンクには、リンク先のノート情報が無いことを示す値(例えば「0」)が記録される。ノート情報の追加及び削除がなされるごとに、前方リンク及び後方リンクを更新することにより、ノートオンイベントが発生した順にノート情報を辿ることができるようにしている。
発音チャンネル情報リストCLは、各発音チャンネルごとに設けられた発音チャンネル情報1乃至発音チャンネル情報127からなり、各発音チャンネル情報は、図8に示すように、発音中か否かを表す空きチャンネルフラグ、各種エンベロープに関するエンベロープ情報及びその発音チャンネル情報への参照情報を記憶しているノート情報への参照情報からなる。いずれのノート情報からも参照されていない発音チャンネル情報に対応した発音チャンネル(例えば、図6における発音チャンネルCH4)は、空きチャンネルである。
次に、上記のように構成した電子楽器の動作について説明する。演奏者が鍵盤11のいずれかの鍵を押鍵操作してノートオンイベントが発生すると、CPU19aは、図11に示すように、ステップS10にて、発音予約プログラムを開始する。次に、CPU19aは、ステップS12にて、操作子インターフェース回路14から供給された演奏情報から、押鍵された鍵を表すノート番号NN、押鍵の強さを表すベロシティVEL及びパート番号PNを取得する。鍵盤11には、予めいずれかの演奏パートが割り当てられていて、鍵盤11の押鍵操作により、その演奏パートに割り当てられた音色で発音するようになっている。また、鍵域ごとに異なる演奏パートを割り当てることもできる。CPU19aは、ノートオンイベントが鍵盤11の押鍵操作により発生したこと、前記取得したノート番号NNなどから押鍵された鍵が属する演奏パートを表すパート番号PNを特定する。次に、CPU19aは、ステップS14にて、前記取得したパート番号PNを用いて、対応するボイスデータを特定し、このボイスデータを構成するエレメントデータの数を取得する。すなわち、前記ステップS12において取得したパートに割り当てられた音色で発音するのに必要な発音チャンネル数を取得する。そして、CPU19aは、ステップS16にて、図10に示す発音チャンネル確保プログラムを実行して、前記ステップS14において取得した数の発音チャンネルを確保する。
CPU19aは、図10に示すように、ステップS16aにて、発音チャンネル確保プログラムの実行を開始し、ステップS16bにて、発音チャンネル情報の空きチャンネルフラグを参照して、空きチャンネルを検索する。ステップS16bの検索結果、空きチャンネルがある場合、後述のステップS16hに進む。一方、空きチャンネルが無い場合、CPU19aは、ステップS16cにて、発音チャンネルCH0,CH1・・・CH127のうちの、予約済みでない発音チャンネルの中から、トランケートする発音チャンネルCHn(n=0,1・・・127)を1つ選択する。予約済みが否かは、予約可否フラグAFn(n=0,1・・・127)を参照することにより判断する。また、予約済みでない発音チャンネルのうち、どの発音チャンネルをトランケートするかは、予め定められた規則に従う。例えば、発音チャンネル情報を参照して、エレメント信号の音量レベルが最も小さい発音チャンネルをトランケートするチャンネルとして決定する。また、ノート情報の前方リンクを次々と辿って最も古いノート情報を特定し、最も古いノート情報が参照している発音チャンネル情報に記録されているエレメント信号の音量レベルが最も小さい発音チャンネルをトランケートするチャンネルとして決定してもよい。
次に、CPU19aは、ステップS16dにて、前記ステップS16cの処理により選択したトランケートする発音チャンネルCHnに対応する発音チャンネル情報n内のノート情報への参照情報を用いて、発音チャンネル情報nを参照しているノート情報(参照元のノート情報)を特定し、この参照元のノート情報から発音チャンネル情報nへの参照情報を削除する。そして、CPU19aは、ステップS16eにて、参照元のノート情報内の発音チャンネル情報への参照情報が全て削除されたか否かを判定する。ステップS16eの判定の結果、参照元のノート情報内の発音チャンネル情報への参照情報が全て削除されている場合、CPU19aは、ステップS16fにて、ノート情報リストNLから参照元のノート情報を削除する。一方、ステップS16eの処理の結果、参照元のノート情報内に他の発音チャンネル情報への参照情報が残っている場合は、ノート情報リストNLから参照元のノート情報を削除することなく、ステップS16gに進む。そして、CPU19aは、ステップ16gにて、前記ステップS16cの処理により選択した発音チャンネルCHnのトランケートを指示する。具体的には、発音チャンネルCHnのエレメント信号の音量レベルを急速に小さくするエンベロープを音量変更回路AEGに生成させるためのパラメータを第2メモリ17c3に書き込む。
そして、CPU19aは、ステップS16hにて、前記ステップS16gにおいてトランケート指示を行った発音チャンネルCHnを新たな発音に使用する発音チャンネルとして確保する。また、上述のステップS16bによる空きチャンネルの検索の結果、空きチャンネルが有った場合、CPU19aは、ステップS16hにて、その空きチャンネルを新たな発音に使用する発音チャンネルとして確保する。
次に、CPU19aは、ステップS16iにて、発音に必要なチャンネル数分の発音チャンネルを確保したかの判定を行う。すなわち、図9のステップS14の処理により取得したエレメントデータの数と同じ数の発音チャンネルを確保した場合は、ステップS16jにて、発音チャンネル確保プログラムを終了して、発音予約プログラムに戻る。一方、確保した発音チャンネルの数が、ステップS14の処理により取得したエレメントデータ数未満の場合は、ステップS16b〜ステップS16hからなる処理を繰り返し実行して、エレメントデータ数分の発音チャンネルを確保する。
ふたたび図9の説明に戻る。発音チャンネル確保プログラムの実行により、発音に必要なチャンネル数分の発音チャンネルを確保すると、CPU19aは、ステップS18にて、ノート情報リストNLに新たなノート情報を1つ追加する(図6及び図7参照)。そして、追加したノート情報に、前記ステップS12にて取得したノートナンバ及びベロシティを書き込む。また、確保した発音チャンネルに対応する発音チャンネル情報への参照情報を書き込む。さらに、1つ前に発生したノートオンイベントに対応するノート情報への参照情報である前方リンクを書き込む。次に、CPU19aは、ステップS20にて、前記ステップS16の処理により確保した発音チャンネルに対応する発音チャンネル情報を初期化する(図6及び図8参照)。具体的には、空きチャンネルフラグを「使用中」にセットし、ノート情報への参照情報として、前記ステップS18の処理により追加した新たなノート情報への参照情報をセットする。また、各種エンベロープの初期値をセットする。
次に、CPU19aは、ステップS20にて、前記ステップS16の処理により確保した発音チャンネルのそれぞれについての各種パラメータを第1メモリ17c1に書き込む。すなわち、ステップS14において特定したボイスデータから、エフェクトパラメータ、エンベロープパラメータ、波形データの先頭及び末尾アドレス、元ピッチなどを取得して、これらを第1メモリ17c1にそれぞれ書き込む。また、CPU19aは、第1メモリ17c1にダンプレベル参照情報を第1メモリ17c1に書き込む。すなわち、CPU19aは、ステップS12において取得したパート番号PNに応じて、第1メモリ17c1にダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1のアドレスを書き込む。この例においては、手動演奏によってノートオンイベントが発生しているので、ダンプレベル設定レジスタDS0のアドレスを書き込む。なお、自動演奏によってノートオンイベントが発生した場合は、ダンプレベル設定レジスタDS1のアドレスを書き込む。
ふたたび、図9の説明に戻る。CPU19aは、ステップS24にて、チャンネル指示レジスタCS0,CS1・・・CS127のうち、前記ステップS16の処理により確保した発音チャンネルに対応するレジスタを「予約」にセットする。次に、CPU19aは、ステップS26にて、グループフルレジスタGFが「空きグループあり」になるまで待つ。なお、上述のように、本実施形態においては30個のグループを使用することができるので、ステップS26の開始時にグループフルレジスタGFが「空きグループ無し」の状態になっていることはほとんど無い。たとえ、ステップS26の開始時にグループフルレジスタGFが「空きグループ無し」の状態になっていても、音源回路17において、発音チャンネルに対するトランケート処理が行われ、予約中の楽音の生成が開始されることにより、短時間(例えば数ミリ秒)でグループフルレジスタGFが「空きグループあり」になる。したがって、ステップS26の待ち時間が長くなって、CPU19aが他の処理をタイミング良く実行できなくなるという問題は発生しない。
CPU19aは、ステップS26の処理にて、「空きグループあり」と判定すると、ステップS28にて、予約受付回路17b1に対し、予約トリガ信号を出力し、ステップS30にて、発音予約プログラムを終了する。これにより、1つのノートオンイベントについての発音チャンネルの予約が完了する。
つぎに、発音予約プログラムのステップS16において確保した発音チャンネルCHn(n=0,1・・・127)が空きチャンネルであって、ステップS18乃至ステップS28において、発音チャンネルCHnを予約した場合の音源回路17の動作について図11を用いて説明する。
予約トリガ信号を入力した予約受付回路17b1は、グループ使用可否フラグGU0,GU1・・・GU30から空きグループ番号mを取得するとともに、そのグループ使用可否フラグGUmを「使用中」にセットする。そして、取得した空きグループ番号mを、発音チャンネルCHnに対応するキーオンマップレジスタKMnに書き込む。その後、予約受付回路17b1は、チャンネル指定レジスタCSを「指定なし」にセットする。キーオンマップレジスタKMnにグループ番号mが書き込まれると、予約可否フラグセット回路17b8が、発音チャンネルCHnに対応する予約可否フラグAFnを「予約不可」にセットする。また、キーオンマップレジスタKMnにグループ番号mが書き込まれたサンプリング周期の次のサンプリング周期の開始時に、キーオンマップラッチ回路17b5が、キーオンマップKMの内容をキーオンマップラッチKMLにコピーする。すなわち、キーオンマップラッチレジスタKMLnにグループ番号mが書き込まれる。
そして、ダンプレベル到達検出回路17b4は、音量レベルレジスタAL0〜AL127を介してレベル検出回路17b3から供給される各発音チャンネルのエレメント信号の音量レベル、及びキーオンマップラッチに基づいて、グループmに属する全ての発音チャンネルにて生成されているエレメント信号の音量レベルがそれぞれの発音チャンネルに設定されているダンプレベルに到達したか否かを判定する。発音チャンネルCHnについての判定において、ダンプレベル到達検出回路17b4には、パラメータ出力回路17c4からダンプレベル参照情報DPnが供給される。ダンプレベル到達検出回路17b4は、ダンプレベル参照情報DPnを用いて、ダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1を参照し、発音チャンネルCHnについての上記の判定に用いるダンプレベルを取得する。この例の場合、手動演奏によってノートオンイベントが発生しているので、ダンプレベル参照情報DPnには、ダンプレベル設定レジスタDS0のアドレスが書き込まれている。したがって、ダンプレベル到達検出回路17b4は、ダンプレベル設定レジスタDS0に記憶されているダンプレベルを取得する。そして、ダンプレベル到達検出回路17b4は、判定結果をダンプレベル到達検出レジスタDLmに書き込む。上記のように、発音チャンネルCHnの予約時においては、発音チャンネルCHnは空きチャンネルとなっている。すなわち、発音チャンネルCHnのエレメント信号の音量レベルは、ダンプレベル参照情報DPnにより参照されるダンプレベルよりも小さくなっている。したがって、ダンプレベル到達検出回路17b4は、CPU19aが発音チャンネルCHnの予約を行ったサンプリング周期の次のサンプリング周期にて、発音チャンネルCHnの音量レベルはダンプレベルに到達していると判定する。
一方、CPU19aによる発音予約プログラムのステップS22の処理によって、図12に示すように、第1メモリ17c1にパラメータが書き込まれ、これらのパラメータは、ダンプレベル到達検出レジスタDLmの値が「ダンプレベル到達」になるまで、第1メモリ17c1に保持されている。そして、ダンプレベル到達レジスタDLmの値が「ダンプレベル到達」になると、その次のサンプリング周期にて、パラメータ転送回路17c2が、第1メモリ17c1に書き込まれているパラメータを第2メモリ17c3にコピーする。第1メモリ17c1に保持されていたパラメータが第2メモリ17c3にコピーされた後に発生したノートオンイベントに対応して再び発音チャンネルCHnが予約され、その新たな予約に係るパラメータが第1メモリ17c1に書き込まれるまでは、元のパラメータは、第1メモリ17c1に残るが、この記憶領域は参照されず、未使用となる。
そして、発音開始指示回路17b6が、グループmに属する全発音チャンネルに対し、発音開始を指示するとともに、これらの発音チャンネルに対応するキーオンマップレジスタ及びキーオンマップラッチレジスタを「グループ割り当てなし」にセットする。さらに、発音開始指示回路17b6は、グループ使用状況レジスタGUmを「使用可」にセットする。予約可否フラグセット回路17b8は、キーオンマップレジスタKMnが「グループ割り当てなし」にセットされても、所定時間(例えば、サンプリング周期の5周期分)だけ予約可否フラグを「予約不可」に保持し、その後「予約可」にセットする。
パラメータ転送回路17c2によって第2メモリ17c3に書き込まれたパラメータは、パラメータ出力回路17c4によって、サンプリング周期ごとに、ダンプレベル到達検出回路17b4及び各発音チャンネルの所定の回路にそれぞれ出力される。
つぎに、発音チャンネルCHn(n=0,1・・・127)の発音中(すなわち、空きチャンネルでないとき)に、新たなノートオンイベントが発生し、CPU19aが、このノートオンイベントに対応する楽音生成のために発音チャンネルCHnの予約をした場合の音源回路17の動作について、図13を用いて説明する。この例においては、予約する発音チャンネルCHnは、ノートオフイベント発生後の楽音を発音中である。すなわち、音源回路17は、発音チャンネルCHnにて生成されているエレメント信号の音量レベルをサンプリング周期ごとに徐々に小さくしている。そして、CPU19aが、発音チャンネル確保プログラムのステップS16gを実行して、発音チャンネルCHnのトランケート指示を行うと、音量変更回路AEGが、エレメント信号の音量レベルの減少率を大きくするエンベロープを生成して音量制御回路AMPに供給するので、急速に音量レベルが小さくなっていく。そして、ダンプレベル到達検出回路17b4は、サンプリング周期ごとに、音量レベルレジスタAL0〜AL127を介してレベル検出回路17b3から供給される各発音チャンネルのエレメント信号の音量レベル、及びキーオンマップラッチに基づいて、グループmに属する全ての発音チャンネルの音量レベルがそれぞれの発音チャンネルに設定されているダンプレベルに到達したか否かを判定する。この場合も、予約時に発音チャンネルCHnが空きチャンネルである場合と同様に、ダンプレベル到達検出回路17b4には、パラメータ出力回路17c4からダンプレベル参照情報DPnが供給され、ダンプレベル到達検出回路17b4は、ダンプレベル参照情報DPnを用いて、ダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1に記憶されているダンプレベルを取得する。また、この例においても、手動演奏によってノートオンイベントが発生しているので、ダンプレベル参照情報DPnには、ダンプレベル設定レジスタDS0のアドレスが書き込まれている。したがって、ダンプレベル到達検出回路17b4は、ダンプレベル設定レジスタDS0に記憶されているダンプレベルを取得する。そして、取得したダンプレベルを用いて上記の判定を行い、ダンプレベル到達の判定結果を、ダンプレベル到達検出レジスタDLmに書き込む。
上記のように、予約時に発音チャンネルCHnが発音中である場合においては、予約時に発音チャンネルCHnが空きチャンネルである場合と比べると、ダンプレベル到達検出回路17b4によって発音チャンネルCHnがダンプレベルに到達していると判定されるまでにサンプリング周期の数周期分の時間がかかるという違いがあるが、図14に示すように、パラメータの第1メモリ17c1及び第2メモリ17c3への書き込みの動作及びパラメータの各回路への出力の動作は、予約時に発音チャンネルCHnが空きチャンネルである場合と同様である。
なお、上記の例においては、ノートオンイベント及びノートオフイベントは、鍵盤11の手動演奏によって発生しているが、ノートオンイベント及びノートオフイベントは、自動演奏によっても発生する。この場合のCPU19a及び音源回路17の動作は、ステップS12にて、自動演奏装置が再生する演奏情報に応じたパート番号PNが割り当てられる点及びダンプレベル参照情報によってダンプレベル設定レジスタDS1が参照される点を除いて、ノートオンイベント及びノートオフイベントが手動演奏によって発生した場合と同様である。
また、CPU19aは、一定の時間間隔(例えば1ミリ秒)でタイマ19cから割り込み信号を供給され、この割り込み信号に基づいて前記所定の時間間隔(例えば10ミリ秒)ごとに、音量レベルチェックの周期処理プログラム及びパラメータ更新の周期処理プログラムを繰り返し実行する。
つぎに、音量レベル取得の周期処理プログラムについて説明する。図15に示すように、CPU19aは、ステップS40にて、音量レベル取得の周期処理プログラムを開始すると、ステップS42にて、1つの発音チャンネルCHn(n=0,1・・・127)を選択して、「音量レベルCHn」で表されるアドレスを用いて、発音チャンネルCHnで生成されているエレメント信号の音量レベルを、音量レベルレジスタALnから読み出す。次に、CPU19aは、ステップS44にて、「実行用ダンプレベル参照情報CHn」で表されるアドレスを用いて、第2メモリ17c3に記憶されているダンプレベル参照情報DPnを読み出す。次に、CPU19aは、ステップS46にて、前記ステップS42において読み出したダンプレベル参照情報DPnを用いて、ダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1に記憶されているダンプレベルを読み出す。そして、CPU19aは、ステップS48にて、前記ステップS44の処理により読み出したエレメント信号の音量レベルが、前記ステップS46の処理により読み出したダンプレベル以下であるか否かを判定する。ステップS48の判定の結果、エレメント信号の音量レベルがダンプレベル以下でない場合、後述のステップS58に進む。
一方、ステップS48の判定の結果、エレメント信号の音量レベルがダンプレベル以下である場合は、ステップS50にて、発音チャンネルCHnに対応する発音チャンネル情報nの空きチャンネルフラグを「空き」にセットする。つぎに、CPU19aは、ステップS52にて、発音チャンネル情報nに記録されているノート情報への参照情報を用いて、発音チャンネル情報nへの参照情報を記憶している参照元のノート情報を特定する。そして、参照元のノート情報の発音チャンネル情報nへの参照情報を削除する。つぎに、CPU19aは、ステップS54にて、参照元のノート情報内のすべての発音チャンネル情報への参照情報が削除されているか否かを判定する。参照元のノート情報内に発音チャンネル情報への参照情報が残っている場合は、ステップS58に進む。
一方、すべての発音チャンネル情報への参照情報が削除されている場合は、CPU19aは、ステップS56にて、そのノート情報を削除する。そして、削除したノート情報の1つ前及び1つ後のノート情報内の前方リンク及び後方リンクを更新する。次に、CPU19aは、ステップS58にて、全ての発音チャンネルの処理が終了したか否かの判定を行う。残りの発音チャンネルがあれば、ステップS42乃至ステップS56からなる処理を繰り返して、全ての発音チャンネルの音量レベルの取得を行う。すべての発音チャンネルの音量レベルの取得が終了すると、CPU19aは、ステップS60にて、音量レベル取得の周期処理プログラムを終了する。
つぎに、パラメータ更新の周期処理プログラムについて説明する。パラメータ更新の周期処理プログラムは、発音中の楽音の音高、音色及び音量を変化させるエンベロープを生成するためのパラメータなどを書き込むプログラムである。CPU19aは、図16に示すステップS60にて、パラメータ更新の周期処理を開始すると、ステップS62にて、1つの発音チャンネルCHn(n=0,1・・・127)を選択し、発音チャンネルCHnに対応する予約可否フラグAFnを参照して、発音チャンネルCHnにて発生中の楽音信号がトランケート処理中か否かの判定を行う。すなわち、予約可否フラグAFnが、「予約不可」であるということは、発音チャンネルCHnにて生成中のエレメント信号がトランケート処理中であることになる。この場合、後述のステップS66に進む。一方、予約可否フラグAFnが「予約可」であるということは、発音チャンネルCHnにて生成中のエレメント信号はトランケート処理中でないことになる。この場合、CPU19aは、ステップS64にて、第2メモリ17c3のパラメータを更新する。
上記ステップS64のパラメータの書き込みの例としては、演奏者によるパネル操作子12、ペダル操作子13などの操作により発生する演奏情報及び外部インターフェース回路22を介したMIDI対応の外部機器から送信された演奏情報に応じて、発音中の楽音の音高、音色、音量などを変化させる場合が挙げられる。これらの場合、CPU19aは、前記演奏情報に応じて、対応する発音チャンネルのパラメータを第2メモリ17c3に書き込んで更新する。更新されたパラメータは、更新されなかった他のパラメータとともに、パラメータ出力回路17c4によって各発音チャンネルの各回路に出力される。
CPU19aは、第2メモリ17c3に記憶された発音チャンネルCHnに関するパラメータを更新すると、ステップS66にて、全ての発音チャンネルについてのパラメータの更新が終了したか否かの判定を行う。残りの発音チャンネルがあれば、ステップS62乃至ステップS64からなる処理を繰り返して、全ての発音チャンネルについてのパラメータの更新を行う。全ての発音チャンネルについてのパラメータの更新が終了すると、CPU19aは、ステップS68にて、パラメータ更新の周期処理プログラムを終了する。
上記の電子楽器においては、手動演奏のパートの楽音のダンプレベルを自動演奏のパートの楽音のダンプレベルよりも小さくした。したがって、音量レベル取得の周期処理のステップS48において、自動演奏のパートのエレメント信号を発生している発音チャンネルは、手動演奏のパートのエレメント信号を発生している発音チャンネルよりも音量レベルが大きい段階でダンプレベル以下であると判定される。したがって、自動演奏のパートのエレメント信号と手動演奏のパートのエレメント信号の音量レベルの減衰速度が同一であるとき、自動演奏のパートのエレメント信号を発生している発音チャンネルは、手動演奏のパートのエレメント信号を発生している発音チャンネルよりも、エレメント信号の発生開始からの経過時間が短い時点で開放される。自動演奏のパートは、手動演奏のパートに比べて、音数が多く、音色も多様であるであることが多いので、自動演奏に係る発音チャンネルにおいては、比較的音量レベルが大きい段階で消音して、他のノートオンイベントに対応する楽音を発生させても、楽音が不自然に途切れたように感じ難い。一方、手動演奏に係る発音チャンネルにおいては、楽音の音量レベルの減衰時間が長く、発音開始からの経過時間が長くなったとしても、音量レベルが十分に小さくなるまで開放されないので、減衰時間の長い音色で演奏しても楽音が途切れたように感じ難い。したがって、自動演奏によって多くの発音チャンネルを使用しても、主に、自動演奏に使用した発音チャンネルの中から空きチャンネルを確保することができ、発音中の楽音をトランケートする機会を減らすことができる。とくに、自動演奏よりも演奏上の重要度が高い手動演奏のパートの楽音をトランケートする機会を減らすことができるので、演奏が不自然に途切れたように感じられるのを抑制できる。
また、発音チャンネル確保処理(図10)において、音量レベルがダンプレベル以下である発音チャンネルがないとき、あらかじめ決められた規則に従って、新たな楽音信号の発生を割り当てる発音チャンネルを選択するようにした。例えば、最も古くから発生されていて演奏上重要でなくなっている楽音信号を発生している発音チャンネル又は音量レベルが閾値より大きい楽音信号を発生している発音チャンネルのうち、音量レベルが最も小さく、演奏上重要でなくなっている楽音信号を発生している発音チャンネルを新たな楽音信号発生を割り当てる発音チャンネルとして選択するようにした。そして、選択した発音チャンネルにて発生中の楽音信号をトランケートした後、新たな楽音信号の発生を開始するので、演奏中の楽音が不自然に途切れたように感じられることを抑制できるとともに、新たな楽音信号の発生を発音チャンネルに割り当ててから新たな楽音信号の発生を開始するまでの時間を短くできる。
さらに、本発明の実施にあたっては、上記実施形態に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。
g.変形例
上記実施形態においては、1つのノートオンイベントに対応した楽音信号の発生のために十分な数の空きチャンネルがある場合であっても、空きチャンネルが不足していて発音中の楽音をトランケートする場合と同様に、発音チャンネルを予約するようにした。これは、音源回路17の処理手順を統一することにより、音源回路17の回路構成を簡単にするためである。しかし、1つのノートオンイベントに対応した楽音信号の発生のために十分な数の空きチャンネルがある場合は、それらの発音チャンネルを予約する必要はない。すなわち、第1メモリ17c1及び第2メモリ17c3を介することなく、CPU19aが、各発音チャンネルCHn(n=0,1・・・127)のレジスタにパラメータを直接書き込み可能に構成しておき、CPU19aが、ステップS22(図9)にて、パラメータを第1メモリ17c1ではなく、各発音チャンネルのレジスタに直接書き込んでもよい。ただし、ダンプレベル参照情報は、第2メモリ17c3に書き込んでおく。そして、ステップS24乃至ステップS28(図9)に代えて、CPU19aが発音開始指示するようにすればよい。これによれば、ノートオンイベントに対応する十分な数の空きチャンネルがある場合には、発音チャンネルの予約のための処理を省略できるので、処理速度を向上させることができる。
また、上記の変形例においては、ダンプレベル到達検出回路17b4は、空きチャンネルが不足する場合にのみ、予約された発音チャンネルの音量レベルがダンプレベルに到達したか否かを判定する。このとき、比較対象とするダンプレベルは、全ての発音チャンネルに共通(例えば、ダンプレベル設定レジスタDS0に記憶されているダンプレベル)としてもよい。このように構成しても、予約された発音チャンネルにおいては、トランケート処理によって、音量レベルが急速に減少しているので、ダンプレベルとしてどのような値を設定しても、ダンプレベルに到達したと判定されるのにサンプリング周期の数周期分の差しか生じない。これによれば、ダンプレベル到達検出回路17b4は、発音チャンネルごとにダンプレベルに到達したことを判定するために比較対象とするダンプレベルを取得する必要がないので、処理速度をさらに向上させることができる。
また、上記実施形態においては、手動演奏のパート用と自動演奏のパート用の2つのダンプレベルを設定するようにした。しかし、さらに多くのダンプレベルを設定してもよい。例えば、手動演奏パートにおいて、右手で演奏するメロディパートのダンプレベルと左手で演奏する伴奏パートのダンプレベルを異ならせてもよい。例えば、メロディパートのダンプレベルを「−96dB」に設定し、伴奏パートのダンプレベルを「−90dB」に設定してもよい。これによれば、演奏上最も重要な手動演奏のメロディパートの楽音がトランケートされる機会を減らすことができる。また、上記実施形態及びその変形例においては、パートを条件としてダンプレベルを設定するようにしたが、パート以外にも、エフェクトの種類、MIDIチャンネル、演奏情報の送信元(外部機器又は内蔵の自動演奏装置)などを条件としてダンプレベルを設定するようにしてもよい。
また、上記実施形態においては、ダンプレベル設定レジスタDS0及びダンプレベル設定レジスタDS1にダンプレベルをそれぞれ書き込んでおき、ダンプレベル参照情報DPnには、ダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1のアドレスを書き込むようにした。そして、このダンプレベル参照情報DPnに書き込まれているアドレスを用いてダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1のいずれかを特定するようにした。しかし、これに代えて、ダンプレベル設定レジスタDS0及びダンプレベル設定レジスタDS1にそれぞれ対応するインデックス番号(「0」及び「1」)で識別するようにし、ダンプレベル参照情報DPnとしてインデックス番号を記憶するようにしてもよい。そして、このダンプレベル参照情報DPnに書き込まれているインデックス番号を用いてダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1のいずれかを特定するようにしてもよい。これによれば、ダンプレベル参照情報DPnの桁数を小さくすることができ、第1メモリ17c1及び第2メモリ17c3の記憶容量を小さくすることができる。また、ダンプレベル設定レジスタDS0及びダンプレベル設定レジスタDS1の桁数を大きくする場合、ダンプレベル参照情報DPnの桁数を大きくする必要はない。すなわち、ダンプレベル参照情報DPnの桁数を小さくしたまま、ダンプレベル設定レジスタDS0及びダンプレベル設定レジスタDS1の桁数を大きくしてダンプレベルのダイナミックレンジを大きくすることができる。
また、上記実施形態においては、ダンプレベル設定レジスタDS0,DS1にダンプレベルを書き込んでおき、キーオンイベントが発生して発音チャンネルを予約するごとに、予約する発音チャンネルにて発生させる楽音信号のダンプレベルを規定するために、ダンプレベル設定レジスタDS0又はダンプレベル設定レジスタDS1を参照するダンプレベル参照情報を第1メモリ17c1に書き込むようにした。しかしこれに代えて、ダンプレベル自体を第1メモリ17c1に書き込んでもよい。そして、第1メモリ17c1に書き込んだダンプレベルをパラメータ転送回路17c2によって第2メモリ17c3に転送し、第2メモリ17c3に転送されたダンプレベルをパラメータ出力回路17c4によって、ダンプレベル到達検出回路17b4に出力するようにしてもよい。これによれば、ダンプレベル設定レジスタDS0,DS1を設けておく必要がないので、音源回路17の回路構成をより簡単にできる。
また、上記実施形態においては、レベル検出回路17b3は、各発音チャンネルの音量制御回路AMPから出力されるエレメント信号の音量レベルを検出するようにした。そして、ダンプレベル到達検出回路17b4は、レベル検出回路17b3が検出した音量レベルを用いて、各グループに属する発音チャンネルのエレメント信号がダンプレベルに到達したか否かを判定するようにした。また、レベル検出回路17b3が検出した音量レベルを用いて、トランケートする発音チャンネルを決定するようにした(図10のステップS16c)。さらに、レベル検出回路17b3が検出した音量レベルを用いて、空きチャンネルを検索するようにした(図15のステップS46乃至S57)。しかし、上記ダンプレベル到達の検出、トランケートする発音チャンネルの決定及び空きチャンネルの検索の各処理に対応して、各発音チャンネルの音量制御回路AMPから出力されるエレメント信号の音量レベルを検出するレベル検出回路をそれぞれ設けてもよいし、2つのレベル検出回路を設けて、一方のレベル検出回路を各処理のうちのいずれか1つの処理用とし、他方のレベル検出回路を残りの処理用としてもよい。また、ダンプレベル到達の検出専用のレベル検出回路を設けた場合、このダンプレベル到達の検出専用のレベル検出回路は、上記実施形態のように、この電子楽器が有する全ての発音チャンネルにて生成されているエレメント信号の音量レベルを検出してもよいし、予約されている発音チャンネルにて生成されているエレメント信号の音量レベルのみを検出するようにしてもよい。
また、上記のダンプレベル到達の検出、トランケートする発音チャンネルの決定及び空きチャンネルの検索においては、各発音チャンネルの音量制御回路AMPから出力されるエレメント信号の音量レベルではなく、音量変更回路AEGが音量制御回路AMPに供給する音量制御信号を用いてもよい。すなわち、レベル検出回路17b3は、音量制御回路AMPから出力されるエレメント信号の音量レベルを検出するのではなく、音量変更回路AEGが音量制御回路AMPに供給する音量制御信号を検出するようにしてもよい。
また、音量制御回路AMPから出力されるエレメント信号の音量レベルを検出するレベル検出回路17b3に加えて、音量変更回路AEGが音量制御回路AMPに供給する音量制御信号を検出する音量制御信号検出回路を設けておき、ダンプレベル到達の検出、トランケートする発音チャンネルの決定及び空きチャンネルの検索の各処理に応じて、レベル検出回路17b3及び音量制御信号検出回路によってそれぞれ検出される音量レベル及び音量制御信号を組み合わせて用いてもよいし、適宜使い分けるようにしてもよい。
また、上記実施形態においては、音源回路17は、波形メモリWMから波形データを読み出して発音する波形メモリ音源とした。しかし、本発明は、波形メモリ音源に限られず、楽音信号を発生させる発音チャンネルを有する音源であれば、どのような方式の音源であっても適用でき、上記実施形態と同様の効果が得られる。