(57)【特許請求の範囲】
【請求項１】
複数の異なる音高の楽音の波形を表す各波形データであって、前記楽音をサンプリングして得られた複数の波高値を１つ前のサンプリング期間における波高値からの変化に関係して圧縮した複数の圧縮データからなる各波形データを前記異なる音高ごとに記憶した波形メモリと、
発生させる楽音の音高を表す音高情報を入力して、前記波形メモリに記憶されている複数の波形データのうち、前記音高情報に対応する波形データを特定するとともに、前記特定した波形データに関連付けられた情報であって、前記波形データを構成する圧縮データをデコードするために必要な演算処理期間の長さに関する情報に基づいて、前記演算処理期間の長さを決定する演算処理期間決定手段と、
前記決定された演算処理期間内に、前記特定した波形データを構成する圧縮データを読み出すとともに、前記圧縮データをデコードして波高値を表すデータとして出力する演算処理手段と、
前記演算処理手段によって出力された波高値を表すデータを、前記演算処理期間決定手段によって特定された波形データの元になる楽音の音高に対する前記発生させる楽音の音高の比率に応じて補間して出力する補間手段とを備えたことを特徴とする楽音信号発生装置。
【請求項２】
請求項１に記載の楽音信号発生装置において、
前記演算処理期間決定手段によって特定された波形データの元になる楽音の音高に対する前記発生させる楽音の音高の比率に応じて、前記演算処理期間内にデコードする圧縮データの数を算出するデコード数算出手段をさらに備えたことを特徴とする楽音信号発生装置。
【請求項３】
請求項１又は請求項２に記載の楽音信号発生装置において、
前記演算処理手段は、
前記圧縮データを前記波形メモリから読み込んで一時的に記憶しておくキャッシュ処理を実行するキャッシュ手段と、
前記キャッシュ手段に記憶されている前記圧縮データをデコードして波高値を算出するデコード処理を実行するデコード手段を備え、
前記演算処理期間は、
前記キャッシュ手段が前記キャッシュ処理を実行するキャッシュ処理期間と、
前記デコード手段が前記デコード処理を実行するデコード処理期間からなることを特徴とする楽音信号発生装置。
【請求項４】
請求項３に記載の楽音信号発生装置において、
前記波形メモリは、所定のアドレス範囲ごとのページに区分され、１つのアドレスに記憶された第１のデータを読み出した後、連続して、前記第１のデータが記憶されているページから第２のデータを読み出すとき、前記第２のデータを前記第１のデータよりも高速に読み出すことができるメモリであって、
前記キャッシュ処理期間を同一ページから少なくとも２つのデータを読み出すために必要な時間より長くしたことを特徴とする楽音信号発生装置。
【請求項５】
請求項４に記載の楽音信号発生装置において、
前記第１のデータ及び第２のデータは、複数の前記圧縮データを含む楽音信号発生装置。
【請求項６】
請求項３乃至請求項５のうちのいずれか１つに記載の楽音信号発生装置において、
前記キャッシュ処理期間及び前記デコード処理期間は、所定の期間を時分割した１つ又は複数の時分割タイムスロットからなり、
前記演算処理期間決定手段は、前記演算処理期間の長さに関する情報に基づいて、前記キャッシュ処理期間及び前記デコード処理期間として割り当てる前記時分割タイムスロットの数をそれぞれ決定することを特徴とする楽音信号発生装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楽音波形を表す波形データを記憶した波形メモリから、波形データを読み出して楽音信号を発生する楽音信号発生装置に関する。
【背景技術】
【０００２】
従来から、例えば下記特許文献１に示されているように、楽音信号を発生するための複数の発音チャンネルを備えた楽音信号発生装置は知られている。この楽音信号発生装置は、所定の音域ごとに楽音を１つずつサンプリングして得られた各サンプリング周期の波高値を圧縮して、サンプリング周期の順に連続するアドレスに記憶した波形メモリを備えている。この楽音信号発生装置においては、サンプリングした各波高値を１つ前の波高値からの変化に関係して圧縮する圧縮方式を採用しており、圧縮データをデコードするためには、１つ前の波高値を用いる必要がある。したがって、波形メモリから圧縮データを読み出す際には、読み出しアドレスを１つずつ進めている。
【０００３】
また、この楽音信号発生装置においては、全発音チャンネルについての楽音信号を発生する周期（以下、再生周期という）の１周期分の期間を時分割した各期間を、各発音チャンネルの処理期間として割り当てている。すなわち、各発音チャンネルは、楽音信号発生の指示に応答して、それぞれ割り当てられた処理期間に波形メモリから圧縮データを読み出してデコードすることにより、１つの楽音信号を発生する。このとき、サンプリングした楽音の音高（以下、元ピッチという）と発生させる楽音信号の音高（以下、再生ピッチという）とが異なる場合は、連続するアドレスに記憶されている複数の圧縮データを読み出して、前記読み出した圧縮データをデコードすることにより複数の波高値を算出する。そして、前記算出した複数の波高値を用いて補間演算を実行し、発生させる楽音信号の音高に対応した波高値を算出する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平９−１４６５５５号公報
【発明の概要】
【０００５】
しかし、波形メモリから１つの圧縮データを読み出すためには一定の時間がかかる。したがって、各発音チャンネルに割り当てられた処理期間において読み出すことができる圧縮データの数は少なく、その処理期間内にデコードできる圧縮データの数も少ない。特に、発音チャンネル数が多い場合には、各発音チャンネルに割り当てられる処理期間が非常に短いので、その処理期間内にデコードできる圧縮データの数は非常に少ない。例えば、割り当てられた処理期間内にデコードできる圧縮データの数は、高々２個であった。この楽音信号発生装置においては、読み出しアドレスを必ず１つずつ進めるために、割り当てられた処理期間内に進めることができるアドレスは２つまでであって、元ピッチに対する再生ピッチの比率（以下、ピッチ倍率という）が２倍以下に制限されていた。そのため、楽音を少なくとも１オクターブ毎にサンプリングしておく必要があり、容量の大きな波形メモリが必要であった。
【０００６】
本発明は上記問題に対処するためになされたもので、その目的は、サンプリングした各波高値を１つ前の波高値からの変化に関系して圧縮した圧縮データをデコードして次の波高値を算出する楽音信号発生装置において、ピッチ倍率を大きくできるようにして波形メモリの容量を小さくすることにある。なお、下記本発明の各構成要件の記載においては、本発明の理解を容易にするために、後述する実施形態の対応箇所の符号を括弧内に記載しているが、本発明の各構成要件は、実施形態の符号によって示された対応箇所の構成に限定解釈されるべきものではない。
【０００７】
上記目的を達成するために、本発明の特徴は、複数の異なる音高の楽音の波形を表す各波形データであって、前記楽音をサンプリングして得られた複数の波高値を１つ前のサンプリング期間における波高値からの変化に関係して圧縮した複数の圧縮データからなる各波形データを前記異なる音高ごとに記憶した波形メモリ（ＷＭ）と、発生させる楽音の音高を表す音高情報を入力して、前記波形メモリに記憶されている複数の波形データのうち、前記音高情報に対応する波形データを特定するとともに、前記特定した波形データに関連付けられた情報であって、前記波形データを構成する圧縮データをデコードするために必要な演算処理期間の長さに関する情報に基づいて、前記演算処理期間の長さを決定する演算処理期間決定手段（Ｓ１２，Ｓ１４，Ｓ１６）と、前記決定された演算処理期間内に、前記特定した波形データを構成する圧縮データを読み出すとともに、前記圧縮データをデコードして波高値を表すデータとして出力する演算処理手段（７４０，７５０）と、前記演算処理手段によって出力された波高値を表すデータを、前記演算処理期間決定手段によって特定された波形データの元になる楽音の音高に対する前記発生させる楽音の音高の比率に応じて補間して出力する補間手段（７６０）とを備えた楽音信号発生装置としたことにある。
【０００８】
この場合、演算処理期間決定手段によって特定された波形データの元になる楽音の音高に対する発生させる楽音の音高の比率に応じて、演算処理期間内にデコードする圧縮データの数を算出するデコード数算出手段（７３０）をさらに備えるとよい。
【０００９】
また、この場合、演算処理手段は、圧縮データを波形メモリから読み込んで一時的に記憶しておくキャッシュ処理を実行するキャッシュ手段（７４０）と、キャッシュ手段に記憶されている圧縮データをデコードして波高値を算出するデコード処理を実行するデコード手段（７５０）を備え、演算処理期間は、キャッシュ手段がキャッシュ処理を実行するキャッシュ処理期間と、デコード手段がデコード処理を実行するデコード処理期間からなるようにするとよい。
【００１０】
さらに、この場合、キャッシュ処理期間及びデコード処理期間は、所定の期間を時分割した１つ又は複数の時分割タイムスロットからなり、演算処理期間決定手段は、前記演算処理期間の長さに関する情報に基づいて、キャッシュ処理期間及びデコード処理期間として割り当てる時分割タイムスロットの数をそれぞれ決定するようにするとよい。
【００１１】
上記のように構成した楽音信号発生装置によれば、波形データに応じて、波高値を算出する演算処理に割り当てる期間の長さを変更できる。すなわち、ピッチ倍率を大きくする可能性のある波形データが選択された場合は、ピッチ倍率を大きくする必要のない波形データが選択された場合に比べて割り当てる期間を長くすることができる。これにより、演算処理手段は、各再生周期において割り当てられた期間内に、ピッチ倍率に応じた値だけ読み出しアドレスを進めて圧縮データを読み出すことができ、読み出した圧縮データをデコードして波高値を算出することができる。そして、補間手段は、演算処理手段が算出した波高値を用いて、ピッチ倍率に応じた波高値を算出することができる。したがって、ピッチ倍率を大きくできる。すなわち、ピッチ倍率を２倍よりも大きくすることができる。そのため、楽音をサンプリングするときに、１オクターブ以上の間隔をおいて（例えば２オクターブ毎）サンプリングしておくことができるので、波形メモリの容量を小さくすることができる。また、選択した波形データに応じて割り当てる期間の長さを変更できるので、同時に発音させることができる楽音信号の数を大きく減少させることもない。
【００１２】
また、本発明の他の特徴は、波形メモリは、所定のアドレス範囲ごとのページに区分され、１つのアドレスに記憶された第１のデータを読み出した後、連続して、第１のデータが記憶されているページから第２のデータを読み出すとき、第２のデータを第１のデータよりも高速に読み出すことができるメモリであって、キャッシュ処理期間を同一ページから少なくとも２つのデータを読み出すために必要な時間より長くしたことにある。この場合、前記第１のデータ及び第２のデータは、複数の圧縮データを含むようにするとよい。
【００１３】
上記のように構成した楽音信号発生装置によれば、キャッシュ処理期間内に波形メモリの同一ページに複数回アクセスできる。この場合、２つ目以降のデータを高速に読み出せるので、演算処理手段は、キャッシュ処理期間内に、大量の圧縮データを効率的に読み込んでおくことができる。すなわち、再生周期の複数周期分のデコード数に対応した圧縮データを１つのキャッシュ処理期間内に予め読みこんでおくことができる。とくに、１つのアドレスに記憶されたデータが複数の圧縮データを含むようにすれば、１度のアクセスで複数の圧縮データを読み込むことができるので、より効率的である。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態に係る楽音信号発生装置を適用した電子楽器の全体ブロック図である。
【図２】図１の音源回路の具体的構成を示すブロック図である。
【図３】圧縮データのデコードについての説明図である。
【図４】圧縮データの構成を示すメモリマップである。
【図５】波形メモリのアクセスタイミングを示すタイムチャートである。
【図６】図２のキャッシュ回路の具体的構成を示すブロック図である。
【図７】キャッシュメモリの構成を示すメモリマップである。
【図８】図２のデコード回路の具体的構成を示すブロック図である。
【図９】補間テーブルの概念図である。
【図１０】ボイスデータの構成を示すメモリマップである。
【図１１】発音予約プログラムを示すフローチャートである。
【図１２】パラメータ更新処理プログラムを示すフローチャートである。
【図１３】ピッチ倍率が「１．０」である場合の音源回路の動作を示すタイムチャートである。
【図１４】ピッチ倍率が「１．７」である場合の音源回路の動作を示すタイムチャートである。
【図１５】ピッチ倍率が「３．７」である場合の音源回路の動作を示すタイムチャートである。
【発明を実施するための形態】
【００１５】
ａ．全体構成
まず、本発明の一実施形態に係る楽音信号発生装置を適用した電子楽器の全体構成について図１を用いて説明する。図１に示すように、この電子楽器は、鍵盤１００、パネル操作子２００、ペダル操作子３００、操作子インターフェース回路４００、表示器６００、音源回路７００、サウンドシステム８００、コンピュータ部９００、記憶装置１０００及び外部インターフェース回路１１００を備えている。
【００１６】
鍵盤１００は、演奏者の手によって操作されて、それぞれ発生させる楽音信号の音高を指定するとともに楽音信号の発生及び停止を指示する複数の白鍵及び黒鍵からなる。パネル操作子２００は、電子楽器の操作パネル上に設けられ、演奏者の手によって操作されて、発生される楽音信号の音色、音量、効果などの楽音特性を設定するとともに、電子楽器全体の動作を設定する。ペダル操作子３００は、演奏者の足によって操作されて、発生される楽音信号の音色、音量、効果などの楽音特性を設定する。
【００１７】
鍵盤１００、パネル操作子２００及びペダル操作子３００は、バス１２００に接続された操作子インターフェース回路４００に接続されている。そして、鍵盤１００、パネル操作子２００及びペダル操作子３００の操作を表す演奏情報及び操作情報が、操作子インターフェース回路４００及びバス１２００を介して後述するコンピュータ部９００に供給される。表示器６００は、液晶ディスプレイ（ＬＣＤ）によって構成され、表示画面上に文字、図形などを表示する。この表示器６００の表示は、バス１２００を介してコンピュータ部９００によって制御される。
【００１８】
音源回路７００は、複数の波形データを記憶した波形メモリＷＭを含み、波形メモリＷＭから、コンピュータ部９００によって指定された波形データを読み出してディジタル楽音信号を生成する複数の発音チャンネルを備える。各発音チャンネルにて生成されたディジタル楽音信号はサウンドシステム８００に供給される。なお、ディジタル楽音信号にコーラス効果、残響効果などの各種効果を付加するエフェクタ回路は、音源回路７００に含まれている。サウンドシステム８００は、音源回路７００から供給されたディジタル楽音信号をアナログ楽音信号にＤ／Ａ変換するＤ／Ａ変換器、変換したアナログ楽音信号を増幅するアンプ、及び増幅されたアナログ楽音信号を音響信号に変換して出力するスピーカを備えている。
【００１９】
コンピュータ部９００は、バス１２００にそれぞれ接続されたＣＰＵ９０１、タイマ９０２、ＲＯＭ９０３及びＲＡＭ９０４からなる。ＣＰＵ９０１は、操作子インターフェース回路４００及び外部インターフェース回路１１００から供給される演奏情報に応じて、音源回路７００に発音のために必要な情報を供給する。とくに、ＣＰＵ９０１は、演奏者による鍵盤１００の押鍵操作及び外部インターフェース回路１１００を介した外部機器からの演奏情報の供給によって発生するノートオンイベントに対応した楽音の発生を、１つ又は複数の発音チャンネルに割り当てる。
【００２０】
また、記憶装置１０００は、ＨＤＤ、ＦＤＤ、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどの大容量の不揮発性記録媒体と、同各記録媒体に対応するドライブユニットを含むものであり、各種データ及びプログラムの記憶及び読出しを可能にしている。これらのデータ及びプログラムは予め記憶装置１０００に記憶されていてもよいし、外部インターフェース回路１１００を介して外部から取り込んでもよい。そして、記憶装置１０００に記憶された各種データ及びプログラムは、ＣＰＵ９０１によって読み込まれ、電子楽器の制御に利用される。外部インターフェース回路１１００は、ＭＩＤＩインターフェース回路及び通信インターフェース回路を含んでおり、他の電子音楽装置、パーソナルコンピュータなどのＭＩＤＩ対応の外部機器に接続可能となっているとともに、インターネットなどの通信ネットワークに接続可能となっている。
【００２１】
ｂ．音源回路の構成
ｂ１．全体構成
次に、音源回路７００の構成について詳しく説明する。まず音源回路７００の全体構成について図２を用いて説明する。音源回路７００は、ＣＰＵ９０１から供給されるパラメータを入力し、音源回路７００を構成する各回路に、前記入力したパラメータを出力して各発音チャンネルの各種設定を行うチャンネル設定回路７１０を備えている。また、音源回路７００は、楽音をサンプリングして、サンプリング周期ごとの波高値を圧縮した圧縮データを記憶した波形メモリＷＭを備えている。また、音源回路７００は、時分割動作により、波形メモリＷＭから圧縮データを順次読み込んでデコードして、元の波高値を算出し、ディジタル楽音信号を生成する複数（例えば２５６個）の発音チャンネルＣＨ０，ＣＨ１・・・ＣＨ２５５を備えている。また、各発音チャンネルＣＨ０，ＣＨ１・・・ＣＨ２５５は、変調信号発生回路７２０、音高制御回路７３０、キャッシュ回路７４０、デコード回路７５０、補間回路７６０、フィルタ回路７７０及び音量制御回路７８０をそれぞれ備えている。ただし、これらの回路は、各発音チャンネルＣＨ０，ＣＨ１・・・ＣＨ２５５ごとに設けられているわけではなく、時分割で各発音チャンネルＣＨ０，ＣＨ１・・・ＣＨ２５５についての処理を実行する。また、音源回路７００は、発音チャンネルＣＨ０，ＣＨ１・・・ＣＨ２５５にて生成されたディジタル楽音信号を累算してサウンドシステム８００に出力するチャンネル累算回路７９０も備えている。
【００２２】
ここで、各発音チャンネルにおける圧縮データのデコードについて簡単に説明しておく。波形メモリＷＭには、線形予測法を用いて各サンプリング周期における波高値を圧縮した圧縮データが記憶されている。圧縮データは、サンプリングした波高値と線形予測法によって算出される予測値との差である残差データのＬＳＢ側の幾つかのビットを切り捨ててビットシフトしたデータである。本実施例においては、１つ前の再生周期における波高値に線形予測係数Ｃを乗算して予測値を算出する。図３を用いて、再生周期Ｔ２における波高値Ｄ２の算出方法について具体的に説明する。まず、１つ前の再生周期Ｔ１において算出した波高値Ｄ１に線形予測係数Ｃを乗算して予測値を算出する。また、圧縮データを逆正規化係数Ｒだけビットシフトして、前記算出した予測値と波高値Ｄ２との差を表す残差データを算出する。そして、前記算出した予測値と残差データを合算して波高値Ｄ２を算出する。なお、上記の線形予測係数Ｃ及び逆正規化係数Ｒについては後述する。
【００２３】
ｂ２．チャンネル設定回路
チャンネル設定回路７１０は、発音チャンネルごとに各種パラメータを記憶する予約レジスタ７１１及び実時間制御レジスタ７１２を備えている。ＣＰＵ９０１は、キーオンイベントに対応する楽音信号を発生させる発音チャンネルを決定すると、予約レジスタ７１１の前記決定した発音チャンネルに対応する領域に、発生させる楽音を規定するパラメータを書き込む。そして、チャンネル設定回路７１０は、前記発音チャンネルにて前記パラメータによって規定される新たな楽音を発生できる状態になると、前記パラメータを実時間制御レジスタ７１２にコピーするとともに、前記発音チャンネルの各回路に、対応するパラメータを出力して、発音チャンネルを初期化する。そして、前記発音チャンネルに楽音信号発生の処理を開始させる。なお、ＣＰＵ９０１は、前記決定した発音チャンネルにて楽音信号の発生中に、実時間制御レジスタ７１２にパラメータを書き込むことができる。たとえば、パネル操作子２００の操作に応じて、発生中の楽音の音高を変化させるためのパラメータを書き込むことができる。チャンネル設定回路７１０は、楽音信号の発生中にＣＰＵ９０１によって更新されたパラメータを、対応する発音チャンネルに出力する。
【００２４】
ｂ３．波形メモリ
波形メモリＷＭには、図４に示すように、楽音波形を表す波形データを線形予測法によって圧縮した圧縮データが記憶されている。楽音波形を表す波形データ（以下、元の波形データという。）とは、楽音を所定のサンプリング周波数（例えば３２ｋＨｚ）でサンプリングして、各サンプリング周期における波高値をディジタルデータに変換したものである。
【００２５】
１つの音色についての楽音をサンプリングするとき、所定の鍵音高の間隔（例えば１オクターブ、２オクターブなど）をおいてサンプリングする。すなわち、元の波形データは、各鍵音高ごとに用意されているわけではないので、元の波形データの音高（元ピッチ）と演奏情報に含まれる音高情報が表す音高（再生ピッチ）とが異なる場合、各発音チャンネルＣＨ０，ＣＨ１・・・ＣＨ２５５において補間処理を行うことにより、音高情報が表す音高に対応したディジタル楽音信号を生成する。本実施形態においては、例えば１オクターブ以内の間隔をおいて元の波形データがサンプリングされているために、必ず再生ピッチが元ピッチの２倍以下となる場合、再生周期ごとに、１つの発音チャンネルを用いて１つのディジタル楽音信号を生成する。この動作モードを第１モードという。一方、例えば２オクターブの間隔をおいて元の波形データがサンプリングされているために、再生ピッチが元ピッチの２倍より高くなることがある場合、再生周期ごとに、２つの発音チャンネルを用いて１つのディジタル楽音信号を生成する。この動作モードを第２モードという。いずれの動作モードで発音するかは、予め元の波形データごとに決められてボイスデータとして記憶されている（図１０参照）。
【００２６】
元の波形データは、サンプリング周期の複数周期分（図４の例では、８周期分）の波高値を１つのフレームとして複数（図４の例では、ｎ＋１個）のフレームに分割され、各フレームごとに線形予測法を用いて圧縮されて、フレームデータＦＤ０〜ＦＤｎとして、波形メモリＷＭの下位アドレス側から上位アドレス側にこの順に配置されて記憶されている。フレームデータＦＤｍ（ｍ＝０，１・・・ｎ）は、複数（例えば４個）のセグメントデータＳＤ０〜ＳＤ３からなる。各セグメントデータのデータ長は１６ビット（１ワード）である。波形メモリＷＭの１つのアドレスに１つのセグメントデータが記憶されている。セグメントデータＳＤ０〜ＳＤ３は、波形メモリＷＭの下位アドレス側から上位アドレス側にこの順に配置されて記憶されている。フレームデータＦＤｍのセグメントデータＳＤｋ（ｋ＝０，１・・・３）は、２つの圧縮データＺ８ｍ＋２ｋ，Ｚ８ｍ+２ｋ+１と１つのパラメータＰｋとからなる。圧縮データＺ８ｍ＋２ｋ，Ｚ８ｍ+２ｋ+１のデータ長は、それぞれ６ビットであり、パラメータＰｋのデータ長は４ビットである。具体的には、セグメントデータの第０ビット〜第５ビットからなるデータが圧縮データＺ８ｍ＋２ｋであり、第６ビット〜第１１ビットからなるデータが圧縮データＺ８ｍ+２ｋ+１である。また、第１２ビット〜第１５ビット〜なるデータがパラメータＰｋである。なお、「８ｍ＋２ｋ」及び「８ｍ＋２ｋ＋１」は、圧縮データの番号であり、元の波高値のサンプリング周期（すなわち、元の波高値をサンプリングした順番）に対応している。
【００２７】
また、パラメータＰ０乃至パラメータＰ３からなる１６ビット（＝４ビット×４）のデータは、波高値をデコードするための線形予測係数Ｃ及び逆正規化係数Ｒからなる。線形予測係数Ｃのデータ長は１２ビットである。パラメータＰ０が、線形予測係数Ｃの第８ビット〜第１１ビットに相当し、パラメータＰ１が線形予測係数Ｃの第４ビット〜第７ビットに相当する。そして、パラメータＰ２が線形予測係数Ｃの第０ビット〜第３ビットに相当する。線形予測係数Ｃは、次のフレームに属する波高値のデコードに用いられる。
【００２８】
逆正規化係数Ｒのデータ長は、４ビットであって、パラメータＰ３がこの逆正規化係数Ｒに相当する。逆正規化係数Ｒは、次に説明するように、正規化された圧縮データから元の残差データを算出するためのパラメータである。圧縮データは、線形予測によって算出される予測値と元の波形データが表す波高値との差を表す残差データを正規化したデータである。ここで、残差データの正規化について詳しく説明する。以下の説明において、残差データのデータ長は１６ビットとする。残差データの値が小さく、その値を６ビットで表すことができる場合はその残差データの値をそのままセグメントデータに記憶できる。しかし、残差データの値が大きく、６ビットで表すことができないこともある。そこで、まず１つのフレームを選択し、選択したフレームに属する残差データのうち最大の残差データを求める。そして、前記最大の残差データを２進数で表記したとき、値が「１」であるビットの最上位のビットが第ｘビット（ｘ＝６，７・・・１５）であるとすると、前記最大の残差データが属するフレームに属する全ての残差データの第（ｘ−５）ビット〜第ｘビットの６ビットをそれぞれ圧縮データとする。すなわち、前記最大の残差データが属するフレームデータに属する全ての残差データについて、第０ビットから第（ｘ−６）ビット以下を切り捨ててビットシフトするビットシフト演算を実行する。そこで、前記ビットシフト演算において何ビットシフトしたかを逆正規化係数Ｒとして記憶しておき、圧縮データのデコードにおいて、圧縮データを逆正規化係数Ｒの値だけシフトアップして残差データを算出する。
【００２９】
つぎに、この波形メモリＷＭからのデータの読み出し速度について説明する。この波形メモリＷＭは、連続する８ワードごとに記憶領域が分割されていて、この連続する８ワード分の記憶領域をページと呼ぶ。あるページから１つのデータを読み出した後、連続して同ページから２つ目以降のデータを読み出すとき、この２つ目以降のデータを、１つ目のデータよりも高速に読み出すことができる。このように、同一ページ内から複数のデータを連続して読み出すことをページリードという。
【００３０】
上記のページリードについて、図５を用いて具体的に説明する。まず、１つ目のデータのアドレスを指定してデータを読み出す。この１つ目の読み出しにはサンプリング周期の１周期分の時間の８／１５３６の時間がかかる。つぎに、１つ目のデータのアドレスの第３ビット以上を固定したまま、第０ビット〜第２ビットを変更して、２つ目のデータを読み出す。この２つ目の読み出しにはサンプリング周期の１周期分の時間の４／１５３６の時間しかからない。本実施形態においては、先頭のフレームデータＦＤ０のセグメントデータＳＤ０が、ちょうどページの先頭に位置するように配置している。詳しくは後述するように、キャッシュ回路７４０のセグメントデータ入力回路７４１は、先頭のセグメントデータから順に２つずつセグメントデータを読み出す。したがって、セグメントデータ入力回路７４１は、ページリードにより２つ目のデータを高速に読み出すことができる。
【００３１】
ｂ４．変調信号発生回路
変調信号発生回路７２０は、エンベロープ信号発生回路７２１及び低周波信号発生回路７２２からなる。エンベロープ信号発生回路７２１は、ピッチ変更回路、カットオフ周波数変更回路及び音量変更回路からなる。エンベロープ信号発生回路７２１には、チャンネル設定回路７１０から各種エンベロープパラメータが供給される。ピッチ変更回路は、生成するディジタル楽音信号の音高を制御する音高制御信号を音高制御回路７３０に供給する。ピッチ変更回路は、チャンネル設定回路７１０から供給されたエンベロープパラメータに応じて、発音開始後の時間経過に従ってディジタル楽音信号の音高が変化するように、時間経過に従って変化する音高制御信号を生成して音高制御回路７３０に供給する。この時間経過に従って変化する一連の音高制御信号をピッチエンベロープと呼ぶ。
【００３２】
また、カットオフ周波数変更回路は、エレメント信号の周波数特性を制御するカットオフ周波数制御信号をフィルタ回路７７０に供給する。カットオフ周波数制御回路は、チャンネル設定回路７１０から供給されたエンベロープパラメータに応じて、発音開始後の時間経過に従ってフィルタのカットオフ周波数が変化するように、時間経過に従って変化するカットオフ周波数制御信号を生成して、フィルタ回路７７０に供給する。この時間経過に従って変化する一連のカットオフ周波数制御信号をカットオフエンベロープと呼ぶ。
【００３３】
また、音量変更回路は、エレメント信号の音量を制御する音量制御信号を音量制御回路７８０に供給する。音量変更回路は、チャンネル設定回路７１０から供給されたエンベロープパラメータに応じて、発音開始後の時間経過に従ってディジタル楽音信号の音量が変化するように、時間経過に従って変化する音量制御信号を生成して音量制御回路７８０に供給する。この時間経過に従って変化する一連の音量制御信号を音量エンベロープと呼ぶ。
【００３４】
低周波信号発生回路７２２は、発音開始後、音高、音色及び音量を周期的に変化させる変調信号を生成して、音高制御回路７３０、フィルタ回路７７０及び音量制御回路７８０にそれぞれ供給する。低周波信号発生回路７２２には、チャンネル設定回路７１０によって、チャンネル設定回路７１０から低周波信号制御パラメータが供給される。低周波信号制御パラメータには、低周波信号発生回路７２２から出力する変調信号の波形、周波数及び振幅を指定するデータが含まれる。
【００３５】
ｂ５．音高制御回路
音高制御回路７３０は、チャンネル設定回路７１０から供給されたピッチ情報、エンベロープ信号発生回路７２１から供給された音高制御信号及び低周波信号発生回路７２２から供給された変調信号を用いて、ピッチ倍率を算出する。ピッチ情報は、元ピッチと演奏情報に含まれる音高情報からなる。つぎに、音高制御回路７３０は、前記算出したピッチ倍率に応じて、次のサンプリング周期においてデコードする波高値の数を表すデコード数ＩＮＣＯを算出する。具体的には、サンプリング周期の第４周期目以降の各サンプリング周期ごとに、ピッチ倍率を累算し、前回の累算結果の整数部と今回の累算結果の整数部との差の値を次のサンプリング周期のデコード数ＩＮＣＯとする。そして、前記算出したデコード数ＩＮＣＯをデコード回路７５０に供給する。
【００３６】
ただし、第２モードにおいて、算出したデコード数が「３」以上のときは、第２モードに設定された２つの発音チャンネル（以下、発音チャンネルＣＨａ及び発音チャンネルＣＨｂとして説明する。）に供給されるデコード数の合計が前記算出したデコード数となるように配分する。たとえば、算出したデコード数ＩＮＣＯが「３」の場合は、まず、発音チャンネルＣＨａにデコード数ＩＮＣＯとして「２」を供給し、次に、発音チャンネルＣＨｂにデコード数ＩＮＣＯとして「１」を供給する。また、算出したデコード数が「４」のときは、発音チャンネルＣＨａ及び発音チャンネルＣＨｂにデコード数ＩＮＣＯとして「２」をそれぞれ供給する。なお、再生周期の第１周期から第４周期についてのデコード数ＩＮＣＯは、動作モード及びピッチ倍率によらず一定である。すなわち、第１周期及び第２周期のデコード数ＩＮＣＯは、「０」である。また、第３周期のデコード数ＩＮＣＯは「２」であり、第４周期のデコード数ＩＮＣＯは、「１」である。
【００３７】
ピッチ倍率は、通常、小数部を含む。音高制御回路７３０は、前記算出したピッチ倍率の累算値の小数部を補間係数算出データＦＲＡＣとして補間回路７６０へ供給する。また、音高制御回路７３０は、発音チャンネルごとに、１つ前の再生周期において波高値を算出するために最後に用いた圧縮データを表す処理済みデータ情報ＯＬＤＣＮＴを記憶している。処理済みデータ情報ＯＬＤＣＮＴは、前記圧縮データが属するフレームデータの番号を表すフレームデータ番号、セグメントデータの番号を表すセグメントデータ番号及びセグメントデータに属する複数の圧縮データのいずれのデータであるかを表すインデックス番号からなる。すなわち、前記圧縮データが、フレームデータＦＤｍのセグメントデータＳＤｋに属する場合、フレームデータ番号として「ｍ」を記憶し、セグメントデータ番号として「ｋ」を記憶している。また、インデックス番号は、セグメントデータのＬＳＢ側から数えて何個目の圧縮データであるかを表す。前記圧縮データが、セグメントデータのＬＳＢ側から数えて１つ目のデータであるときは、インデックス番号として「０」を記憶し、セグメントデータのＬＳＢ側から数えて２つ目のデータであるときは、インデックス番号として「１」を記憶している。なお、各発音チャンネルの発音開始時に、フレームデータ番号が「ｎ」に初期化され、セグメント番号が「３」に初期化される。また、インデックス番号が「１」に初期化される。
【００３８】
音高制御回路７３０は、デコード数ＩＮＣＯを算出すると、前記算出したデコード数ＩＮＣＯと処理済みデータ情報ＯＬＤＣＮＴを記憶していて、次の再生周期の各発音チャンネルのデコード処理の開始時に、前記記憶していたデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０にそれぞれ供給する。そして、デコード回路７５０にデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを供給すると、供給したデコード数ＩＮＣＯの数だけ、処理済みデータ情報ＯＬＤＣＮＴのインデックス番号をインクリメントする。ここで、音高制御回路７３０には、チャンネル設定回路７１０から、１つのセグメントデータに含まれる圧縮データの数を表すフォーマットデータＢＰＳが供給される。本実施例においては、フォーマットデータＢＰＳの値は「２」である。音高制御回路７３０は、上記のインデックス番号のインクリメント処理において、インデックス番号が前記供給されたフォーマットデータＢＰＳと同じ値になるごとに、セグメント番号を１回インクリメントするとともに、インデックス番号を「０」に設定する。また、セグメント番号が「４」になるごとに、フレーム番号を１回インクリメントするとともに、セグメント番号を「０」に設定する。ただし、第２モードにおいては、発音チャンネルＣＨａ及び発音チャンネルＣＨｂのいずれの処理においても、発音チャンネルＣＨａの処理済みデータ情報ＯＬＤＣＮＴを用いる。
【００３９】
ｂ６．キャッシュ回路
キャッシュ回路７４０は、図６に示すように、セグメントデータを波形メモリＷＭからキャッシュメモリＣＭ０〜ＣＭ２５５に読み込むセグメントデータ入力回路７４１と、キャッシュメモリＣＭ０〜ＣＭ２５５に読み込んだセグメントデータをデコード回路７５０へ供給するセグメントデータ出力回路７４２を備えている。
【００４０】
キャッシュメモリＣＭ０〜ＣＭ２５５は、各発音チャンネルＣＨ０〜ＣＨ２５５に対応して設けられ、セグメントデータ入力回路７４１が読み出した圧縮データを一時的に記憶しておくメモリである。キャッシュメモリＣＭ０〜ＣＭ２５５は、それぞれ６ワードの記憶容量を有する。そして、キャッシュメモリＣＭ０〜ＣＭ２５５は、図７に示すように、それぞれ２ワードの記憶容量を有する領域ＣＡ０〜領域ＣＡ２に区分されている。各領域ＣＡ０、領域ＣＡ１及び領域ＣＡ２の下位アドレス側の領域をそれぞれ領域ＣＡ００、領域ＣＡ１０及び領域ＣＡ２０と呼ぶ。また、領域ＣＡ０、領域ＣＡ１及び領域ＣＡ２の上位アドレス側の領域をそれぞれ領域ＣＡ０１、領域ＣＡ１１及び領域ＣＡ２１と呼ぶ。ただし、第２モードにおいては、発音チャンネルＣＨａと発音チャンネルＣＨｂにそれぞれ対応して設けられたキャッシュメモリＣＭａ及びキャッシュメモリＣＭｂを一体として使用する。すなわち、１２ワードの記憶領域が、それぞれ２ワードの記憶容量を有する領域ＣＡ０〜領域ＣＡ５に区分される。この場合、領域ＣＡ３〜領域ＣＡ５についても、領域ＣＡ０〜領域ＣＡ２と同様に、下位アドレス側の領域をそれぞれ領域ＣＡ３０、領域ＣＡ４０及び領域ＣＡ５０と呼び、上位アドレス側の領域をそれぞれ領域ＣＡ３１、領域ＣＡ４１及び領域ＣＡ５１と呼ぶ。
【００４１】
セグメントデータ入力回路７４１は、再生周期の１周期を１２８等分した各期間に偶数番号の発音チャンネルＣＨ０、ＣＨ２・・・ＣＨ２５４についてのセグメントデータをそれぞれキャッシュメモリＣＭ０、ＣＭ２・・・ＣＭ２５４に読み込む。そして、その次の再生周期を１２８等分した各期間に奇数番号の発音チャンネルＣＨ１、ＣＨ３・・・ＣＨ２５５についてのセグメントデータをそれぞれキャッシュメモリＣＭ１、ＣＭ３・・・ＣＭ２５５に読み込む。再生周期の１周期を発音チャンネルの総数である２５６分割した場合の各期間は短すぎて、セグメントデータを読み込むことができない（図５参照）。そこで、再生周期の１周期を１２８分割した各期間にページリードによって２つのセグメントデータを読み込むようにしている。
【００４２】
セグメントデータ入力回路７４１には、チャンネル設定回路７１０から先頭のフレームデータＦＤ０のセグメントデータＳＤ０の絶対アドレス及び末尾のフレームデータＦＤｎのセグメントデータＳＤ３の絶対アドレスが供給される。セグメントデータ入力回路７４１は、フレームデータＦＤ０のセグメントデータＳＤ０のアドレスを「０」とした相対アドレスであって、セグメントデータＳＤ０に連続するアドレスに記憶された各セグメントデータのうち、次に読み込むセグメントデータの相対アドレスを発音チャンネルごとに記憶している。セグメントデータ入力回路７４１は、各発音チャンネルの発音開始時に相対アドレスを「０」に初期化し、セグメントデータを２つ読み込むごとに相対アドレスを２回インクリメントする。そして、フレームデータＦＤ０のセグメントデータＳＤ０の絶対アドレスに相対アドレスを加算して、読み込むセグメントデータが記憶されている絶対アドレスを表す読み出しアドレスを算出する。ただし、第２モードにおける発音チャンネルＣＨｂの発音開始時には、読み込み対象の波形データのフレームデータＦＤ０のセグメントデータＳＤ０の絶対アドレスとして、発音チャンネルＣＨａと同じアドレスが供給される。そして、発音チャンネルＣＨｂの処理においては、セグメントデータ入力回路７４１は、発音チャンネルＣＨａの相対アドレスを用いて、読み出しアドレスを算出する。読み出しアドレスが、フレームデータＦＤｎのセグメントデータＳＤ３の絶対アドレスよりも大きくなると、セグメントデータ入力回路７４１は、セグメントデータの読み込みを終了する。これにより、１つのノートオンイベントに対応した発音処理が終了する。
【００４３】
セグメントデータ入力回路７４１は、処理対象の発音チャンネルのキャッシュメモリに空き領域があるときに、セグメントデータをその空き領域に読み込む。キャッシュメモリに空き領域があるときとは、キャッシュメモリにセグメントデータが読み込まれていない領域があるとき、及び既に全ての圧縮データがデコードされたセグメントデータのみを記憶している領域があるときをいう。
【００４４】
キャッシュ回路７４０は、第１モード用の３進カウンタ回路であって、領域ＣＡ０〜ＣＡ２のうち、次にセグメントデータを読み込む領域を表す第１入力領域カウンタ７４３ａを備えている。また、キャッシュ回路７４０は、第２モード用の６進カウンタ回路であって、領域ＣＡ０〜ＣＡ５のうち、次にセグメントデータを読み込む領域を表す第２入力領域カウンタ７４３ｂを備えている。また、キャッシュ回路７４０は、第１モード用の３進カウンタ回路であって、領域ＣＡ０〜ＣＡ２のうち、次にデコード回路７５０へ供給するセグメントデータが記憶されている領域を表す第１出力領域カウンタ７４４ａを備えている。さらに、キャッシュ回路７４０は、第２モード用の６進カウンタ回路であって、領域ＣＡ０〜ＣＡ５のうち、次にデコード回路７５０へ供給するセグメントデータが記憶されている領域を表す第２出力領域カウンタ７４４ｂを備えている。
【００４５】
１つ前の再生周期の各発音チャンネルの処理期間の終了時における各カウンタのカウント値は、それぞれ発音チャンネルごとに入力領域カウンタメモリ７４５及び出力領域カウンタメモリ７４６に記憶されている。そして、次の再生周期の各発音チャンネルの処理の開始時に、動作モードに応じて、入力領域カウンタメモリ７４５から第１入力領域カウンタ７４３ａ又は第２入力領域カウンタに１つ前の再生周期の終了時におけるカウント値が読み込まれ、出力カウンタメモリから第１出力領域カウンタ７４４ａ又は第２出力領域カウンタ７４４ｂに１つ前の再生周期の終了時におけるカウント値が読み込まれる。
【００４６】
また、キャッシュ回路７４０は、第１入力領域カウンタ７４３ａと第１出力領域カウンタ７４４ａのカウント値を比較して、両者の値が一致するか否かを表す信号をセグメントデータ入力回路７４１に供給する第１比較器７４７ａを備えている。第１モードにおいては、次に説明するように、第１入力領域カウンタ７４３ａと第１出力領域カウンタ７４４ａのカウント値が同じであるとき、キャッシュメモリに空きがないことを表し、第１入力領域カウンタ７４３ａと第１出力領域カウンタ７４４ａのカウント値が異なるとき、キャッシュメモリに空きがあることを表す。
【００４７】
キャッシュメモリに読み込んだセグメントデータをデコード回路７５０に出力するのであるから、第１入力領域カウンタ７４３ａのカウント値は、第１出力領域カウンタ７４４ａのカウント値よりも先に進んでいる。しかし、詳しくは後述するように、ピッチ倍率が小さい(例えば「１．０」)場合には、第１出力領域カウンタ７４４ａのカウント値よりも、第１入力領域カウンタ７４３ａのカウンタ値の方が早く進む。第１入力領域カウンタ７４３ａ及び第１出力領域カウンタ７４４ａは、３進カウンタ回路なので、カウントアップするごとに、そのカウント値は「０」、「１」、「２」、「０」、「１」、「２」・・・と変化する。すなわち、３回ごとに繰り返し同じ値を表す。したがって、第１入力領域カウンタ７４３ａのカウント値が第１出力領域カウンタ７４４ａのカウント値よりも３回分早く進んだとすると、両者のカウント値が一致する。このとき、そのカウント値で表される領域には、まだデコードされていない圧縮データが含まれている可能性があるため、キャッシュメモリに空き領域がない状態であるとする。一方、両者の値が異なるときは、第１入力領域カウンタ７４３ａのカウント値で表される領域は、発音開始後一度もセグメントデータを読み込んでいない領域であるか、全ての圧縮データがデコードされたセグメントデータを記憶している領域である。すなわち、少なくともこの領域には新たなセグメントデータを読み込むことができるため、キャッシュメモリに空き領域がある状態とする。
【００４８】
したがって、第１モードにおいて、第１比較器７４７ａの出力信号が、第１入力領域カウンタ７４３ａと第１出力領域カウンタ７４４ａのカウント値が一致することを表すとき、セグメントデータ入力回路７４１は、セグメントデータを読み込まない。一方、第１比較器７４７ａの出力信号が、第１入力領域カウンタ７４３ａと第１出力領域カウンタ７４４ａのカウント値が異なる値であることを表すとき、セグメントデータ入力回路７４１は、前記算出した読み出しアドレスを先頭として連続する２つのセグメントデータを、第１入力領域カウンタ７４３ａが示す領域に読み込む。
【００４９】
また、キャッシュ回路７４０は、第２入力領域カウンタ７４３ｂと第２出力領域カウンタ７４４ｂのカウント値を比較して、両者の値が一致するか否かを表す信号をセグメントデータ入力回路７４１に供給する第２比較器７４７ｂを備えている。第２モードにおいても、上記の第１モードと同様に、第２入力領域カウンタ７４３ｂと第２出力領域カウンタ７４４ｂのカウント値が一致するとき、キャッシュメモリに空きがないことを表し、第２入力領域カウンタ７４３ｂと第２出力領域カウンタ７４４ｂのカウント値が異なるとき、キャッシュメモリに空きがあることを表す。この理由は、第１モードと同様である。したがって、第２比較器７４７ｂの出力信号が、第２入力領域カウンタ７４３ｂと第２出力領域カウンタ７４４ｂのカウント値が同じ値であることを表すとき、セグメントデータ入力回路７４１は、セグメントデータを読み込まない。一方、第２比較器７４７ｂの出力信号が、第２入力領域カウンタ７４３ｂと第２出力領域カウンタ７４４ｂのカウント値が異なる値であることを表すとき、セグメントデータ入力回路７４１は、前記算出した読み出しアドレスを先頭として連続する２つのセグメントデータを、第２入力領域カウンタ７４３ｂが示す領域に読み込む。
【００５０】
入力領域カウンタ更新回路７４８は、セグメントデータ入力回路７４１が２つのセグメントデータをキャッシュメモリに読み込むと、動作モードに応じて、第１入力領域カウンタ７４３ａ又は第２入力領域カウンタ７４３ｂのカウント値をインクリメントする。なお、第１出力領域カウンタ７４４ａ及び第２出力領域カウンタ７４４ｂは、後述する出力領域カウンタ更新回路７４９によって制御される。
【００５１】
セグメントデータ出力回路７４２は、予めキャッシュメモリに読み込んだセグメントデータを、デコード回路７５０からの要求に応じてデコード回路７５０に供給する。セグメントデータ出力回路７４２は、再生周期の１周期を２５６等分した各期間に、発音チャンネルＣＨ０〜ＣＨ２５５について、デコード回路７５０から要求されたセグメントデータをデコード回路７５０へそれぞれ供給する。
【００５２】
セグメントデータ出力回路７４２は、デコード回路７５０に供給するセグメントデータを次のようにして特定する。まず、出力領域カウンタ更新回路７４９は、デコード回路７５０から、１つ前の再生周期において最後にデコード回路７５０に供給したセグメントデータの番号を表すセグメントデータ番号を含むカウンタ更新情報ＵＰＤを図示しない比較用レジスタに入力する。セグメントデータ出力回路７４２は、チャンネル設定回路７１０から供給された動作モード情報ＭＤに応じて、出力領域カウンタメモリ７４６から１つ前の再生周期の終了時におけるカウント値を第１出力領域カウンタ７４４ａ又は第２出力領域カウンタ７４４ｂに読み出す。
【００５３】
つぎに、セグメントデータ出力回路７４２及び出力領域カウンタ更新回路７４９は、デコード回路７５０から要求データ情報ＲＥＱを入力する。出力領域カウンタ更新回路７４９は、カウンタ更新情報ＵＰＤと要求データ情報ＲＥＱの第１ビットの値を比較して、両者の値が異なっていれば、動作モードに応じて、第１出力領域カウンタ７４４ａ又は第２出力領域カウンタ７４４ｂのカウント値をカウントアップする。そして、セグメントデータ出力回路７４２は、第１出力領域カウンタ７４４ａ又は第２出力領域カウンタ７４４ｂが示す２ワードの領域のうち、要求データ情報ＲＥＱのＬＳＢが「０」であれば、下位アドレス側の記憶領域のセグメントデータをデコード回路７５０に供給し、要求データ情報ＲＥＱのＬＳＢが「１」であれば、上位アドレス側の記憶領域のセグメントデータをデコード回路７５０に供給する。そして、出力領域カウンタ更新回路７４９は、要求データ情報ＲＥＱをカウンタ更新情報ＵＰＤとして比較用レジスタに入力する。すなわち、１つの発音チャンネルの処理期間内に複数の要求データ情報ＲＥＱがデコード回路７５０から供給された場合、２つ目の要求データ情報ＲＥＱの処理については、１つ目の要求データ情報ＲＥＱをカウンタ更新情報ＵＰＤとして用いる。
【００５４】
ｂ７．デコード回路
デコード回路７５０は、予めキャッシュメモリＣＭ０〜ＣＭ２５５に読み込まれたセグメントデータに含まれる圧縮データ及びパラメータを取り出す。そして、前記取り出した圧縮データをシフト演算して残差データを算出するとともに、過去にデコードした波高値のうちの最新の波高値を用いて、線形予測法により予測値を算出し、前記算出した残差データと前記算出した予測値とを加算して、新たな波高値を算出する。デコード回路７５０は、サンプリング周期の１周期を２５６等分した各期間に、発音チャンネルＣＨ０〜ＣＨ２５５についてそれぞれ新たな波高値を算出する。
【００５５】
デコード回路７５０は、図８に示すように、音高制御回路７３０から供給された処理済みデータ情報ＯＬＤＣＮＴ及びデコード数ＩＮＣＯを用いて、次のデコード処理に用いる圧縮データが含まれるセグメントデータを供給するよう、キャッシュ回路７４０のセグメントデータ出力回路７４２に要求するセグメントデータ要求回路７５１を備える。デコード回路７５０は、デコード数ＩＮＣＯが「２」の場合は、まず１つ目のセグメントデータを要求して、供給されたセグメントデータを用いて１つ目の波高値を算出し、次に２つ目のセグメントデータを要求して、供給されたセグメントデータを用いて２つ目の波高値を算出する。
【００５６】
セグメントデータ要求回路７５１は、音高制御回路７３０から供給された処理済みデータ情報ＯＬＤＣＮＴを構成するフレーム番号、セグメント番号及びインデックス番号を図示しないバッファメモリに読み込む。そして、前記バッファメモリに読み込んだセグメント番号をカウンタ更新情報ＵＰＤとしてキャッシュ回路７４０の出力領域カウンタ更新回路７４９に供給する。つぎに、セグメントデータ要求回路７５１は、１つの波高値の算出を開始するごとに、バッファメモリに読み込んだインデックス番号をインクリメントする。データ取り出し回路７５３は、１つ前のフレームデータに含まれる圧縮データのデコード（以下、単にフレームデータのデコードという。）において、今回のフレームデータのデコードに用いるパラメータである、線形予測係数Ｃ及び逆正規化係数Ｒを、パラメータメモリ７５２に記憶している。なお、デコードしようとするフレームデータが先頭のフレームデータＦＤ０である場合は、線形予測係数Ｃ及び逆正規化係数Ｒは、チャンネル設定回路７１０によって、パラメータメモリ７５２に書き込まれる。上記のインデックス番号のインクリメント処理により、インデックス番号がフォーマットデータＢＰＳの値と同じ値になると、セグメント番号を１回インクリメントするとともにインデックス番号を「０」に設定する。また、セグメント番号が「４」になると、フレーム番号を１回インクリメントするとともにセグメント番号を「０」に設定する。
【００５７】
上記のインデックス番号のインクリメント処理が終了すると、セグメントデータ要求回路７５１は、セグメント番号を要求データ情報ＲＥＱとしてキャッシュ回路７４０のセグメントデータ出力回路７４２及び出力領域カウンタ更新回路７４９に供給する。すると、セグメントデータ出力回路７４２は、上記のように、要求データ情報ＲＥＱに対応する領域に記憶されているセグメントデータをデコード回路７５０に供給する。
【００５８】
デコード回路７５０は、データ取り出し回路７５３を備えている。データ取り出し回路７５３は、セグメントデータ出力回路７４２から供給されたセグメントデータから圧縮データ及びパラメータを取り出す。圧縮データの取り出しにおいては、インデックス番号を用いて、セグメントデータに含まれる２つの圧縮データのうちのいずれかを取り出す。すなわち、インデックス番号が「０」のとき、セグメントデータのＬＳＢ側の圧縮データを取り出し、インデックス番号が「１」のとき、セグメントデータのＭＳＢ側の圧縮データを取り出す。上記のように、データ取り出し回路７５３には、セグメントデータＳＤ０〜セグメントデータＳＤ３がこの順に供給されるが、線形予測係数Ｃは、セグメントデータＳＤ０〜ＳＤ２のそれぞれ上位４ビットに相当するパラメータＰ０〜パラメータＰ２から構成されている。そこで、データ取り出し回路７５３は、セグメントデータ番号が「０」〜「２」のときにそれぞれ入力したセグメントデータの上位４ビット（すなわち、パラメータＰ０〜パラメータＰ２）を図示しないバッファメモリにそれぞれ記憶する。また、データ取り出し回路７５３は、セグメントデータ番号が「３」のときに入力したセグメントデータの上位４ビット（すなわち、パラメータＰ３）を前記バッファメモリに記憶する。そして、データ取り出し回路７５３は、各フレームデータのデコードの処理の終了時に、パラメータＰ０を２５６倍した値にパラメータＰ１を１６倍した値を加算し、この加算結果にさらにパラメータＰ２を加算して、線形予測係数Ｃを算出する。そして、前記算出した線形予測係数Ｃをパラメータメモリ７５２に書き込むとともに、パラメータＰ３を逆正規化係数Ｒとしてパラメータメモリ７５２に書き込む。
【００５９】
また、デコード回路７５０は、シフト演算回路７５４、乗算器７５５及び加算器７５６を備えている。シフト演算回路７５４は、パラメータメモリ７５２に記憶されている逆正規化係数Ｒを読み出す。そして、データ取り出し回路７５３から供給された圧縮データを逆正規化係数Ｒの値だけシフトアップして残差データを算出し、算出した残差データを加算器７５６へ供給する。
【００６０】
乗算器７５５は、新たな波高値ＷＤ０のデコードにおいて、詳しくは後述する遅延メモリＤＭ１に記憶されている、過去にデコードした波高値のうちの最新の波高値ＷＤ１を読み込む。乗算器７５５は、パラメータメモリ７５２に記憶されている線形予測係数Ｃを読み込む。そして、乗算器７５５は、波高値ＷＤ１に線形予測係数Ｃを乗算して予測値を算出して加算器７５６へ出力する。加算器７５６は、シフト演算回路７５４から供給された残差データと乗算器７５５から供給された予測値とを加算して、新たな波高値ＷＤ０を算出し、算出した波高値ＷＤ０を波高値出力回路７５７へ出力する。
【００６１】
また、デコード回路７５０は、波高値出力回路７５７を備えている。波高値出力回路７５７は、過去にデコードした波高値のうち最新の４つの波高値ＷＤ１〜ＷＤ４をそれぞれ記憶する遅延メモリＤＭ１〜ＤＭ４を備えている。なお、最も新しい波高値が波高値ＷＤ１であり、以下、新しい順に波高値ＷＤ２〜ＷＤ４と呼ぶ。波高値出力回路７５７は、加算器７５６から、新たな波高値ＷＤ０が供給されるごとに、遅延メモリＤＭ１〜ＤＭ３に記憶していた波高値ＷＤ１〜ＷＤ３を波高値ＷＤ２〜ＷＤ４として遅延メモリＤＭ２〜ＤＭ４にそれぞれ転送し、新たな波高値ＷＤ０を波高値ＷＤ１として遅延メモリＤＭ１に記憶する。ただし、各発音チャンネルの発音開始時においては、実時間制御レジスタ７１２に書き込まれた初期波高値Ｄｉが、チャンネル設定回路７１０によって、遅延メモリＤＭ１に書き込まれる。
【００６２】
また、波高値出力回路７５７は、波高値バッファＳＢ１〜ＳＢ４を備えている。波高値バッファＳＢ１〜ＳＢ４は、各発音チャンネルごとに設けられ、それぞれ遅延メモリＤＭ１〜ＤＭ４に接続されている。波高値出力回路７５７は、各再生周期における各発音チャンネルのデコード処理の終了時に遅延メモリＤＭ１〜ＤＭ４に記憶している波高値を波高値バッファＳＢ１〜ＳＢ４に転送して記憶する。そして、次の再生周期のデコード処理の開始時に、対応する発音チャンネルの最新の４つの波高値を波高値バッファＳＢ１〜ＳＢ４から遅延メモリＤＭ１〜ＤＭ４にそれぞれ読み込む。ただし、詳しくは後述するように、ピッチ倍率が「１．０」以上のときには、再生周期ごとに、１つ以上の新たな波高値ＷＤ０が加算器７５６から波高値出力回路７５７に供給される。これにより、遅延メモリＤＭ４に記憶されている波高値は、再生周期ごとに更新される。すなわち、ピッチ倍率が「１．０」以上であるときには、波高値バッファＳＢ４に記憶されていて、遅延メモリＤＭ４に読み込まれた波高値は、次に説明する補間演算には用いられない。そこで、ピッチ倍率が「１．０」以上であるときは、波高値出力回路７５７は、各再生周期における各発音チャンネルのデコード処理の終了時に遅延メモリＤＭ１〜ＤＭ３に記憶している波高値を波高値バッファＳＢ１〜ＳＢ３に転送して記憶し、次の再生周期のデコード処理の開始時に対応する発音チャンネルの最新の３つの波高値を波高値バッファＳＢ１〜ＳＢ３から遅延メモリＤＭ１〜ＤＭ３にそれぞれ読み込むようにしてもよい。後述の動作説明においては、波高値出力回路７５７は、上記のように、最新の３つの波高値を用いるように構成されているものとして説明する。なお、本発明とは直接関係しないが、ピッチ倍率が「１．０」より小さいときには、新たな波高値ＷＤ０が加算器７５６から波高値出力回路７５７に供給されない再生周期も存在する。この場合、波高値バッファＳＢ１〜ＳＢ４から遅延メモリＤＭ１〜ＤＭ４にそれぞれ読み込んだ最新の４つの波高値を用いて、次に説明する補間演算を実行する。
【００６３】
波高値出力回路７５７は、各発音チャンネルのデコード処理の終了時に遅延メモリＤＭ１〜ＤＭ４に記憶している波高値ＷＤ１〜ＷＤ４を補間回路７６０へ出力する。ただし、第２モードにおいては、発音チャンネルＣＨａのデコード処理が終了したとしても、波高値出力回路７５７は、波高値ＷＤ１〜ＷＤ４を補間回路７６０へ出力せず、発音チャンネルＣＨｂのデコード処理の終了時に、波高値ＷＤ１〜ＷＤ４を補間回路７６０へ出力する。
【００６４】
ｂ８．補間回路
補間回路７６０は、デコード回路７５０から供給された４つ波高値ＷＤ１〜ＷＤ４と音高制御回路７３０から供給された補間係数算出データＦＲＡＣを用いて、ピッチ倍率の累算値に対応した波高値を補間演算により求める。具体的には、図９に示すような、波高値ＷＤ１〜ＷＤ４にそれぞれ乗算する補間係数ＬＧ１〜ＬＧ４と補間係数算出データＦＲＡＣとの関係を表している補間係数テーブルを用いて、補間係数ＬＧ１〜ＬＧ４を求める。補間係数テーブルは、図示しないメモリに記憶されていて、補間係数算出データＦＲＡＣに対応したアドレスに、ラグランジュ補間係数が記憶されている。補間係数テーブルの記憶領域のうち、先頭の１／４の領域ＴＡ１に補間係数ＬＧ１が記憶され、領域ＴＡ１に続く１／４の領域ＴＡ２に補間係数ＬＧ２が記憶されている。さらに、領域ＴＡ２に続く１／４の領域ＴＡ３に補間係数ＬＧ３が記憶され、末尾の１／４の領域ＴＡ４に補間係数ＬＧ４が記憶されている。
【００６５】
まず、補間回路７６０は、補間係数算出データＦＲＡＣに応じたアドレスオフセット値を求める。そして、補間回路７６０は、領域ＴＡ１の末尾アドレスＢＡ１を基準として、前記算出したアドレスオフセット値だけ先頭アドレスＢＡ０側にオフセットしたアドレスに記憶されている値を補間係数ＬＧ１として読み出す。以下、補間係数ＬＧ１と同様に、領域ＴＡ２，ＴＡ３，ＴＡ４の末尾アドレスＢＡ２，ＢＡ３，ＢＡ４をそれぞれ基準として、前記算出したアドレスオフセット値だけ先頭アドレス側にそれぞれオフセットしたアドレスに記憶されている値を、補間係数ＬＧ２，ＬＧ３，ＬＧ４として読み出す。補間回路７６０は、この補間係数テーブルを用いて求めた補間係数ＬＧ１〜ＬＧ４を波高値ＷＤ４〜ＷＤ１にそれぞれ乗算し、それぞれの乗算結果を合算して、ピッチ倍率の累算値に対応した波高値を算出する。そして、前記算出した波高値をフィルタ回路７７０へ供給する。ただし、補間係数算出データＦＲＡＣが「０」の場合は、補間係数ＬＧ２を「１．０」とし、補間係数ＬＧ１、補間係数ＬＧ３及び補間係数ＬＧ４を「０」とする。すなわち、波高値ＷＤ３をそのままフィルタ回路７７０へ供給する。
【００６６】
ｂ９．フィルタ回路
フィルタ回路７７０は、エンベロープ信号発生回路７２１から供給されたカットオフ周波数制御信号及び低周波信号発生回路７２２から供給された変調信号を合成して、フィルタのカットオフ周波数を算出する。フィルタ回路７７０には、チャンネル設定回路７１０からフィルタ制御パラメータも供給される。フィルタ制御パラメータには、フィルタの種類（例えば、ハイパスフィルタ、ローパスフィルタなど）を選択するフィルタ選択情報が含まれる。フィルタ回路７７０は、フィルタ選択情報に従って選択したフィルタのカットオフ周波数を前記算出したカットオフ周波数に設定し、補間回路７６０から供給されたディジタル楽音データをこのフィルタで処理した後、音量制御回路７８０へ出力する。
【００６７】
ｂ１０．音量制御回路
音量制御回路７８０は、エンベロープ信号発生回路７２１から供給された音量制御信号及び低周波信号発生回路７２２から供給された変調信号を合成して、発生すべき楽音信号の音量を算出する。そして、音量制御回路７８０は、フィルタ回路７７０から供給されたディジタル楽音データを前記算出した音量に応じて増幅して、チャンネル累算回路７９０へ出力する。
【００６８】
ｂ１１．チャンネル累算回路
チャンネル累算回路７９０は、再生周期ごとに、各発音チャンネルＣＨ０，ＣＨ１・・・ＣＨ２５５から出力されたディジタル楽音信号を累算して、累算したディジタル楽音信号をサウンドシステム８００に出力する。なお、チャンネル累算回路７９０は、各発音チャンネルから出力されるディジタル楽音信号にそれぞれ共通の効果（例えば、コーラス効果、残響効果など）を付加するエフェクト処理回路を備えている。
【００６９】
ｃ．コンピュータ部９００
つぎに、コンピュータ部９００の構成について説明する。とくに、ＲＯＭ９０３に記憶されたプログラム及び各種データについて詳しく説明する。ＲＯＭ９０３には、ボイスデータリストが記憶されている。ボイスデータリストは、図１０に示すように、各音色ごとに規定されたボイスデータからなる。
【００７０】
ボイスデータは、音色名情報、初期パラメータ、エフェクトパラメータ、フィルタ制御パラメータ、低周波信号制御パラメータ、エンベロープパラメータ及び波形データの選択に関する波形データ選択情報を含む。音色名情報は、音色の音色名を表す。初期パラメータは、１つのセグメントデータに含まれる圧縮データの数を表すフォーマットデータＢＰＳ、先頭のフレームデータＦＤ０のデコードに用いる線形予測係数Ｃ、逆正規化係数Ｒ、初期波高値Ｄｉなどからなる。また、エフェクトパラメータは、チャンネル累算回路７９０において各発音チャンネルから出力される全ての楽音信号に共通の効果を付与するためのパラメータである。
【００７１】
フィルタ制御パラメータは、フィルタ回路７７０を制御するためのパラメータである。低周波信号制御パラメータは、低周波信号発生回路７２２を制御するためのパラメータである。エンベロープパラメータは、各種エンベロープ生成用のパラメータである。波形データ選択情報は、ノート番号ＮＮと選択する波形データに関する情報を表す波形データ情報との対応関係を記録したテーブルである。波形データ情報は、波形データの先頭アドレス、末尾アドレス、元ピッチ及び動作モード情報ＭＤからなる。
【００７２】
また、ＲＯＭ９０３には、発音予約プログラム（図１１）及びパラメータ更新の周期処理プログラム（図１２）が記憶されている。発音予約プログラムは、ノートオンイベントが発生すると実行され、前記ノートオンイベントに対応した楽音信号を発生させるための発音チャンネルの確保及び発生させる楽音信号に関するパラメータを書き込むためのプログラムである。発音予約プログラムの実行において、ＣＰＵ９０１は、確保した発音チャンネルが他の発音処理に使用されているか否かに関わらず、前記発生したノートオンイベントに対応した楽音信号に関するパラメータを音源回路７００の予約レジスタ７１１に書き込む。これにより、発音の予約が終了する。すなわち、ＣＰＵ９０１は、発音予約プログラムの実行により予約した発音チャンネルにて発音処理が開始されるのを待たずに発音予約プログラムを終了する。
【００７３】
パラメータ更新の周期処理プログラムは、タイマ９０２から供給される割り込み信号をトリガとして実行される。パラメータ更新の周期処理プログラムは、発音中の各発音チャンネルにて発生される楽音信号をリアルタイムに変化させるために、実時間制御レジスタ７１２に書き込まれたパラメータを所定の周期で更新するプログラムである。
【００７４】
次に、上記のように構成した電子楽器の動作について説明する。演奏者が鍵盤１００のいずれかの鍵を押鍵操作してノートオンイベントが発生すると、ＣＰＵ９０１は、図１１に示すように、ステップＳ１０にて、発音予約プログラムを開始する。次に、ＣＰＵ９０１は、ステップＳ１２にて、操作子インターフェース回路４００から供給された演奏情報から、押鍵された鍵を表すノート番号ＮＮを取得する。鍵盤１００には、予めいずれかの演奏パートが割り当てられている。また、鍵域ごとに異なる演奏パートを割り当てることもできる。ＣＰＵ９０１は、ノートオンイベントが鍵盤１００の押鍵操作により発生したこと、前記取得したノート番号ＮＮなどから押鍵された鍵が属する演奏パートを表すパート番号ＰＮを特定する。
【００７５】
つぎにＣＰＵ９０１は、ステップＳ１４にて、ボイスデータリストを参照して、前記ステップＳ１２において特定したパートにわりあてられている対応する音色を特定するとともに、前記特定した音色の波形データ選択情報を参照して、前記取得したノート番号ＮＮに対応する波形データを特定する。つぎに、ＣＰＵ９０１は、ステップＳ１６にて、前記特定した波形データの波形データ情報を参照して、動作モード情報を取得する。つぎにＣＰＵ９０１は、ステップＳ１８にて、前記特定した波形データの波形データ情報から元ピッチを取得する。そして、前記取得したノート番号ＮＮ及び元ピッチを含むピッチ情報を生成する。つぎに、ＣＰＵ９０１は、ステップＳ２０にて、前記取得した動作モード情報に従って、必要な発音チャンネルを確保する。すなわち、前記取得した動作モード情報が表す動作モードが第１モードであれば、１つの発音チャンネルを確保し、第２モードであれば、２つの発音チャンネルを確保する。第２モードのときには、発音チャンネル番号が連続する２つの発音チャンネルを確保する。全発音チャンネルのうち、生成中の楽音信号の音量レベルが所定の小さな音量レベルよりも小さい発音チャンネル（以下、空きチャンネルという。）を、今回のノートオンイベントに対応した楽音を発生させるための発音チャンネルとして選択する。空きチャンネルがない場合は、所定の規則に従っていずれかの発音チャンネルを選択してトランケートする。例えば、音量レベルが最も小さい発音チャンネルを選択してトランケートする。また、最も古いノートオンイベントに対応して楽音信号を発生している発音チャンネルを選択してトランケートしてもよい。
【００７６】
ＣＰＵ９０１は、発音に必要な発音チャンネルを確保すると、ステップＳ２２にて、発生させる楽音信号についての各種パラメータを前記ステップＳ２０の処理により確保した発音チャンネルの予約レジスタ７１１に書き込む。すなわち、ステップＳ１４において特定した音色のボイスデータから、エフェクトパラメータ、エンベロープパラメータ、波形データの先頭及び末尾アドレスなどを取得して、前記ステップＳ１６において取得した動作モード情報及び前記ステップＳ１８において生成したピッチ情報と共に予約レジスタ７１１に書き込む。ただし、第２モードにおいては、確保した２つの発音チャンネルの予約レジスタ７１１にそれぞれ同じパラメータを書き込む。さらに、ＣＰＵ９０１は、予約レジスタ７１１に、前記確保した発音チャンネルにて発音開始することを表すキーオン情報を書き込む。そして、ＣＰＵ９０１は、ステップＳ２４にて、発音予約プログラムを終了する。これにより、１つのノートオンイベントについての発音の予約が完了する。
【００７７】
音源回路７００のチャンネル設定回路７１０は、予約レジスタ７１１にキーオン情報及び各種パラメータが書き込まれた発音チャンネルの音量レベルがダンプレベル以下になったことを検出すると、予約レジスタ７１１に書き込まれた各種パラメータを実時間制御レジスタにコピーする。そして、前記コピーした各種パラメータを対応する発音チャンネルに供給して発音処理を開始させる。
【００７８】
つぎに、パラメータ更新の周期処理プログラムについて説明する。パラメータ更新の周期処理プログラムは、発音中の楽音の音高、音色及び音量を変化させるエンベロープを生成するためのパラメータなどを書き込むプログラムである。ＣＰＵ９０１は、図１２に示すステップＳ３０にて、パラメータ更新の周期処理を開始すると、ステップＳ３２にて、１つの発音チャンネルＣＨｎ（ｎ＝０，１・・・２５５）を選択し、発音チャンネルＣＨｎ、発音チャンネルＣＨｎにて発生中の楽音信号がトランケート処理中か否かの判定を行う。トランケート処理中である場合、後述のステップＳ３６に進む。一方、トランケート処理中でない場合、ＣＰＵ９０１は、ステップＳ３４にて、実時間制御レジスタ７１２のパラメータを更新する。
【００７９】
上記ステップＳ３４のパラメータの書き込みの例としては、演奏者によるパネル操作子２００、ペダル操作子３００などの操作により発生する演奏情報及び外部インターフェース回路１１００を介したＭＩＤＩ対応の外部機器から送信された演奏情報に応じて、発音中の楽音の音高、音色、音量などを変化させる場合が挙げられる。これらの場合、ＣＰＵ９０１は、前記演奏情報に応じて、対応する発音チャンネルのパラメータを実時間制御レジスタ７１２に書き込んで更新する。更新されたパラメータは、更新されなかった他のパラメータとともに、チャンネル設定回路７１０によって対応する発音チャンネルの処理期間に音源回路７００を構成する各回路に出力される。
【００８０】
ＣＰＵ９０１は、発音チャンネルＣＨｎに関するパラメータを更新すると、ステップＳ３６にて、全ての発音チャンネルについてのパラメータの更新が終了したか否かの判定を行う。残りの発音チャンネルがあれば、ステップＳ３２乃至ステップＳ３４からなる処理を繰り返して、全ての発音チャンネルについてのパラメータの更新を行う。全ての発音チャンネルについてのパラメータの更新が終了すると、ＣＰＵ９０１は、ステップＳ３８にて、パラメータ更新の周期処理プログラムを終了する。
【００８１】
つぎに、動作モードが第１モードであって、図４に示す波形データを元ピッチと同じピッチ（すなわち、ピッチ倍率が「１．０」）で発音する発音チャンネルＣＨａ（ただし、「ａ」は偶数）の動作について図１３を用いて説明する。まず、発音処理開始後の最初の再生周期である第１周期の発音チャンネルＣＨａについての処理開始時において、入力領域カウンタ更新回路７４８は、第１入力領域カウンタ７４３ａのカウント値を「０」に初期化し、出力領域カウンタ更新回路７４９は、第１出力領域カウンタ７４４ａのカウント値を「２」に初期化する。以下、第１周期以降の再生周期を、それぞれ第２周期、第３周期・・・と呼ぶ。また、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴのフレームデータ番号を「ｎ」、セグメントデータ番号を「３」、インデックス番号を「１」にそれぞれ初期化する。
【００８２】
チャンネル設定回路７１０は、発音処理開始時に、フォーマットデータＢＰＳ、先頭のフレームデータＦＤ０のデコードにおいて用いる線形予測係数Ｃ及び逆正規化係数Ｒをデコード回路７５０のパラメータメモリ７５２に書き込む。また、チャンネル設定回路７１０は、発音処理開始時に、初期波高値Ｄｉを波高値バッファＳＢ１に書き込む。また、チャンネル設定回路７１０は、発音処理開始時に、波形データの先頭アドレスをセグメントデータ入力回路７４１に供給する。
【００８３】
セグメントデータ入力回路７４１は、チャンネル設定回路７１０から供給された先頭アドレスに記憶されているセグメントデータを先頭とする２つのセグメントデータをキャッシュメモリＣＭａの領域ＣＡ０に読み込み、第１入力領域カウンタ７４３ａをカウントアップする。これにより、第１入力領域カウンタ７４３ａのカウント値が「１」になる。また、セグメントデータ入力回路７４１は、相対アドレスカウンタをカウントアップする。これにより、相対アドレスカウンタのカウント値が「２」になる。なお、図１３においては、キャッシュメモリＣＭａに読み込んだ圧縮データの番号のみを示し、各再生周期においてデコードする圧縮データの番号を丸で囲んで示している。
【００８４】
チャンネル設定回路７１０は、第１周期のデコード数を表すデコード数ＩＮＣＯをデコード回路７５０のセグメントデータ要求回路７５１に供給するが、このデコード数ＩＮＣＯの値は「０」であるので、第１周期においては、デコード回路７５０は波高値をデコードせず、補間回路７６０、フィルタ回路７７０及び音量制御回路７８０は動作しない。したがって、第１出力領域カウンタ７４４ａのカウント値は更新されず、「２」のままである。
【００８５】
また、音高制御回路７３０は、チャンネル設定回路７１０から、次の第２周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを入力する。このデコード数ＩＮＣＯの値は「０」であり、補間係数算出データＦＲＡＣの値は、「０」である。また、上記のように、第１周期においては波高値をデコードしていないので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを更新しない。したがって、処理済みデータ情報ＯＬＤＣＮＴは、初期化された状態のままである。すなわち、インデックスデータ番号は「１」であり、セグメントデータ番号は「３」であり、フレームデータ番号は「ｎ」である。音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第２周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【００８６】
つぎに、第２周期の動作について説明する。発音チャンネルＣＨａは偶数番号の発音チャンネルであるので、第２周期においては、セグメントデータ入力回路７４１はキャッシュメモリＣＭａに空きがあってもセグメントデータを読み込まない。したがって、第１入力領域カウンタ７４３ａのカウント値は、「１」のままである。
【００８７】
セグメントデータ要求回路７５１は、音高制御回路７３０から、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力する。このデコード数ＩＮＣＯの値は「０」であるから、第２周期においても、デコード回路７５０は圧縮データをデコードしない。したがって、補間回路７６０、フィルタ回路７７０及び音量制御回路７８０は動作しない。また、第１出力領域カウンタ７４４ａのカウント値は更新されず、「２」のままである。
【００８８】
音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、チャンネル設定回路７１０から、第３周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを入力する。このデコード数ＩＮＣＯの値は、「２」であり、補間係数算出データＦＲＡＣの値は、「０」である。また、上記のように、第２周期においては圧縮データをデコードしていないので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを更新しない。したがって、インデックスデータ番号は「１」、セグメントデータ番号は「３」、フレームデータ番号は「ｎ」のままである。音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第３周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【００８９】
つぎに、第３周期の動作について説明する。セグメントデータ入力回路７４１は、相対アドレスカウンタの値と先頭アドレスの値を用いて、入力するセグメントデータの絶対アドレスを算出する。第１入力領域カウンタ７４３ａのカウント値が「１」であり、第１出力領域カウンタ７４４ａのカウント値が「２」であるので、第１比較器７４７ａは、キャッシュメモリＣＭａに空きがあることを表す信号をセグメントデータ入力回路７４１に供給する。したがって、セグメントデータ入力回路７４１は、第１入力領域カウンタ７４３ａのカウント値に対応する領域ＣＡ１に、前記算出した絶対アドレスを先頭とする２つのセグメントデータを入力する。入力領域カウンタ更新回路７４８は、第１入力領域カウンタ７４３ａを１回カウントアップする。これにより第１入力領域カウンタ７４３ａのカウント値が「２」になる。また、セグメントデータ入力回路７４１は、相対アドレスカウンタを２回カウントアップする。これにより、相対アドレスカウンタのカウント値が「４」になる。
【００９０】
セグメントデータ要求回路７５１は、音高制御回路７３０から、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力する。このデコード数ＩＮＣＯの値は「２」であるから、第３周期において、デコード回路７５０は、２つの圧縮データをデコードする。まず、セグメントデータ要求回路７５１は、音高制御回路７３０から入力した処理済みデータ情報ＯＬＤＣＮＴのうちのセグメントデータ番号を、カウンタ更新情報ＵＰＤとして、出力領域カウンタ更新回路７４９に供給する。このカウンタ更新情報ＵＰＤの値は「３」である。出力領域カウンタ更新回路７４９は、カウンタ更新情報ＵＰＤを比較レジスタに入力する。
【００９１】
デコード回路７５０は、１つ目の波高値圧縮データのデコードを開始する。セグメントデータ要求回路７５１は、音高制御回路７３０から入力した処理済みデータ情報ＯＬＤＣＮＴのうちのインデックス番号を１回インクリメントする。音高制御回路７３０から入力したインデックス番号が「１」であるので、上記のインクリメント処理によって、インデックス番号が「２」になる。本実施例においては、フォーマットデータＢＰＳの値は「２」である。したがって、インデックス番号とフォーマットデータＢＰＳの値が一致する。そこで、セグメントデータ要求回路７５１は、インデックス番号を「０」に設定し、セグメントデータ番号及びフレームデータ番号をそれぞれ１回ずつインクリメントする。これにより、セグメントデータ番号及びフレームデータ番号は、いずれも「０」になる。セグメントデータ要求回路７５１は、セグメントデータ出力回路７４２及び出力領域カウンタ更新回路７４９に、要求データ情報ＲＥＱを供給する。セグメントデータ番号の値が「０」であるから、要求データ情報ＲＥＱの値は「０」である。出力領域カウンタ更新回路７４９は、比較レジスタに入力したカウンタ更新情報ＵＰＤ（＝３）と要求データ情報ＲＥＱ（＝０）の第１ビットを比較する。すると、両者の値が異なっているので、出力領域カウンタ更新回路７４９は、第１出力領域カウンタ７４４ａをカウントアップする。これにより、第１出力領域カウンタ７４４ａのカウント値が「０」になる。そして、セグメントデータ出力回路７４２は、第１出力領域カウンタ７４４ａのカウント値に対応する領域ＣＡ０に記憶された２つのセグメントデータのうち、要求データ情報ＲＥＱの第０ビットの値に対応する下位アドレス側（すなわち、領域ＣＡ００）のセグメントデータをデータ取り出し回路７５３に供給する。そして、出力領域カウンタ更新回路７４９は、要求データ情報ＲＥＱを比較レジスタに入力して記憶しておき、２つ目の波高値のデコードにおいてデコード回路７５０から供給される新たな要求データ情報ＲＥＱと比較する。
【００９２】
データ取り出し回路７５３は、前記供給されたセグメントデータから、インデックス番号に対応した圧縮データを取り出す。このとき、インデックス番号が「０」であるので、セグメントデータのＬＳＢ側の圧縮データＺ０を取り出す。そして、取り出した圧縮データＺ０をシフト演算回路７５４に供給する。また、データ取り出し回路７５３は、前記供給されたセグメントデータからパラメータＰ０を取り出して、図示しないバッファメモリに記憶しておく。シフト演算回路７５４はパラメータメモリ７５２から逆正規化係数Ｒを読み込んで、圧縮データＺ０を逆正規化係数Ｒの値だけシフトアップして、残差データを算出する。また、乗算器７５５は、パラメータメモリ７５２から線形予測係数Ｃを読み込み、遅延メモリＤＭ１から初期波高値Ｄｉを読み込む。そして、線形予測係数Ｃと初期波高値Ｄｉを乗算して予測値を算出し、加算器７５６に供給する。加算器７５６は、シフト演算回路７５４から供給された残差データと乗算器７５５から供給された予測値とを加算して、波高値Ｄ０を算出して、波高値出力回路７５７に供給する。波高値出力回路７５７は、初期波高値Ｄｉを遅延メモリＤＭ２に記憶し、波高値Ｄ０を遅延メモリＤＭ１に記憶する。
【００９３】
つぎに、デコード回路７５０は、２つ目の圧縮データのデコードを開始する。まず、セグメントデータ要求回路７５１は、インデックス番号を１回インクリメントする。これにより、インデックス番号は「１」になる。このインデックス番号は、フォーマットデータＢＰＳの値とは異なるため、セグメントデータ番号及びフレームデータ番号は「０」のままである。したがって、上記の１つ目の圧縮データのデコードのときと同様に、要求データ情報ＲＥＱの値は「０」である。キャッシュ回路７４０の出力領域カウンタ更新回路７４９は、比較レジスタに記憶した１つ目の要求データ情報ＲＥＱ（＝０）の第１ビットと２つ目の要求データ情報ＲＥＱ（＝０）の第１ビットの値が同じなので、第１出力領域カウンタ７４４ａを更新しない。また、セグメントデータ出力回路７４２は、要求データ情報ＲＥＱの値が１つ目の圧縮データのデコードのときと同じなので、１つ目の圧縮データのデコードのときと同じセグメントデータをデータ取り出し回路７５３に供給する。このときのインデックス番号が「１」であるから、データ取り出し回路７５３は、前記供給されたセグメントデータのＭＳＢ側の圧縮データＺ１を取り出す。そして、１つ目の圧縮データのデコードと同様に、シフト演算回路７５４、乗算器７５５及び加算器７５６は、パラメータメモリ７５２に記憶されている線形予測係数Ｃ及び逆正規化係数Ｒ並びに遅延メモリＤＭ１に記憶されている波高値Ｄ０を用いて波高値Ｄ１をデコードする。
【００９４】
波高値出力回路７５７は、遅延メモリＤＭ２及び遅延メモリＤＭ１にそれぞれ記憶していた初期波高値Ｄｉ及び波高値Ｄ０を、それぞれ遅延メモリＤＭ３及び遅延メモリＤＭ２に記憶するとともに、波高値Ｄ１を遅延メモリＤＭ１に記憶する。この第３周期までに２つの圧縮データをデコードすることにより、２つの波高値を算出している。補間回路７６０において補間演算するためには４つの波高値を供給する必要があるが、上記のように２つの波高値しか算出していないので、波高値出力回路７５７は、この第３周期においては、波高値を補間回路７６０へ供給しない。そして、遅延メモリＤＭ１〜ＤＭ３に記憶している各波高値を波高値バッファＳＢ１〜ＳＢ３に転送して、次の再生周期まで記憶しておく。上記のように、デコード回路７５０から補間回路７６０に波高値が供給されないので、補間回路７６０は動作しない。
【００９５】
音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、チャンネル設定回路７１０から、第４周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを入力する。このデコード数ＩＮＣＯの値は「１」であり、補間係数算出データＦＲＡＣの値は「０」である。また、第３周期においては２つの圧縮データをデコードしたため、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号を２回インクリメントする。これにより、インデックス番号が「１」になる。セグメントデータ番号及びフレームデータ番号は「０」のままである。音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第４周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【００９６】
つぎに第４周期の動作について説明する。セグメントデータ入力回路７４１は、第２周期と同様に、この第４周期においても、セグメントデータを読み込まない。したがって、第１入力領域カウンタ７４３ａのカウント値は、「２」のままである。
【００９７】
セグメントデータ要求回路７５１は、音高制御回路７３０から、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力する。このデコード数ＩＮＣＯの値は「１」であるから、第４周期においては、デコード回路７５０は、１つの波高値をデコードする。まず、波高値出力回路７５７は、波高値バッファＳＢ１〜ＳＢ３に記憶しておいた波高値を遅延メモリＤＭ１〜ＤＭ３に読み込む。これにより、遅延メモリＤＭ１、遅延メモリＤＭ２及び遅延メモリＤＭ３には、それぞれ波高値Ｄ１、波高値Ｄ０及び初期波高値Ｄｉが記憶される。
【００９８】
セグメントデータ要求回路７５１は、第３周期と同様に、セグメントデータ番号を、カウンタ更新情報ＵＰＤとして、出力領域カウンタ更新回路７４９に供給する。音高制御回路７３０から入力したセグメントデータ番号は「０」であるので、カウンタ更新情報ＵＰＤの値は「０」である。セグメントデータ要求回路７５１は、インデックス番号をインクリメントする。音高制御回路７３０から供給されたインデックス番号は、「１」であるから、上記のインクリメント処理によって、インデックス番号が「２」になるが、この値は、フォーマットデータＢＰＳと同じ値であるから、セグメントデータ要求回路７５１は、インデックス番号を「０」に設定し、セグメントデータ番号を１回インクリメントする。これにより、セグメントデータ番号が「１」になる。なお、フレームデータ番号は、「０」のままである。したがって、キャッシュ回路７４０の出力領域カウンタ更新回路７４９に供給される要求データ情報ＲＥＱの値は「１」である。カウンタ更新情報ＵＰＤ（＝０）と要求データ情報ＲＥＱ（＝１）の第１ビット値が同じであるから、出力領域カウンタ更新回路７４９は、第１出力領域カウンタ７４４ａを更新しない。すなわち、第１出力領域カウンタ７４４ａのカウント値は「０」のままである。したがって、セグメントデータ出力回路７４２は、第１出力領域カウンタ７４４ａのカウント値に対応する領域ＣＡ０に記憶された２つのセグメントデータのうち、要求データ情報ＲＥＱの第０ビットの値に対応する上位アドレス側（すなわち、領域ＣＡ０１）のセグメントデータをデータ取り出し回路７５３に供給する。このときインデックス番号が「０」であるから、データ取り出し回路７５３は、前記供給されたセグメントデータのＬＳＢ側の圧縮データＺ２を取り出してシフト演算回路７５４へ供給する。また、データ取り出し回路７５３は前記供給されたセグメントデータからパラメータＰ１を取り出して図示しないバッファメモリに記憶する。そして、第３周期と同様に、シフト演算回路７５４、乗算器７５５及び加算器７５６は、波高値Ｄ２を算出する。
【００９９】
波高値出力回路７５７は、遅延メモリＤＭ１、遅延メモリＤＭ２及び遅延メモリＤＭ３に記憶していた波高値Ｄ１、波高値Ｄ０及び初期波高値Ｄｉをそれぞれ遅延メモリＤＭ２、遅延メモリＤＭ３及び遅延メモリＤＭ４に記憶するとともに、波高値Ｄ２を遅延メモリＤＭ１に記憶する。そして、波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ４に記憶している波高値を補間回路７６０に供給する。そして、波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ３に記憶している波高値を波高値バッファＳＢ１〜ＳＢ３に記憶する。
【０１００】
補間回路７６０は、音高制御回路７３０から補間係数算出データＦＲＡＣを入力する。この補間係数算出データＦＲＡＣの値が「０」であるから、補間回路７６０は、波高値Ｄ０を初期波高値Ｗ０としてフィルタ回路７７０に供給する。フィルタ回路７７０は、供給された波高値Ｄ０をフィルタ処理し、音量制御回路７８０に出力する。音量制御回路７８０は、変調信号発生回路７２０から供給されるエンベロープ信号及び低周波信号に応じて音量を変更して、チャンネル累算回路７９０に出力する。
【０１０１】
音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、第５周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。音高制御回路７３０は、第４周期以降の各再生周期においてピッチ倍率を累算し、ピッチ倍率の累算結果から次の再生周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。ここで、第３周期におけるピッチ倍率の累算値を「０」とする。この例においてはピッチ倍率が「１．０」であるから、第４周期におけるピッチ倍率の累算値は「１．０」であり、整数部の増加分は「１」である。すなわち、第５周期におけるデコード数ＩＮＣＯの値は「１」である。また、補間係数算出データＦＲＡＣの値は「０」である。この例においては、ピッチ倍率が「１．０」であるから、第６周期以降の各再生周期において算出されるデコード数ＩＮＣＯも「１」であり、補間係数算出データＦＲＡＣも「０」である。なお、図１３においては、音高制御回路７３０がピッチ倍率の累算値を算出した再生周期の次の周期に、その算出結果を記載している。すなわち、その累算値に対応する波高値が補間回路７６０から出力される再生周期にピッチ倍率の累算値を記載している。
【０１０２】
また、第４周期においては１つの圧縮データをデコードしたので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号を１回インクリメントする。これにより、インデックス番号が「２」になるが、この値はフォーマットデータＢＰＳの値と同じであるから、音高制御回路７３０は、インデックス番号を「０」に設定し、セグメントデータ番号を１回インクリメントする。これにより、セグメントデータ番号が「１」になる。なお、フレームデータ番号は、「０」のままである。音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第５周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１０３】
つぎに、第５周期の動作について説明する。セグメントデータ入力回路７４１は、相対アドレスカウンタの値と先頭アドレスの値を用いて、波形メモリＷＭから入力するセグメントデータの絶対アドレスを算出する。第５周期の開始時において、第１入力領域カウンタ７４３ａのカウント値が「２」であり、第１出力領域カウンタ７４４ａのカウント値が「０」である。両カウンタのカウント値が異なるため、セグメントデータ入力回路７４１は、第１入力領域カウンタ７４３ａのカウント値に対応する領域ＣＡ２に、前記算出した絶対アドレスを先頭とする２つのセグメントデータを読み込む。そして、第１入力領域カウンタ７４３ａをカウントアップする。第１入力領域カウンタ７４３ａは３進カウンタ回路であるため、カウント値は「０」になる。また、相対アドレスカウンタを２回カウントアップする。これにより、相対アドレスカウンタのカウント値が「６」になる。
【０１０４】
セグメントデータ要求回路７５１は、音高制御回路７３０から、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力する。このデコード数ＩＮＣＯの値が「１」であるから、この第５周期においては、デコード回路７５０は、１つの圧縮データをデコードする。まず、波高値出力回路７５７は、波高値バッファＳＢ１〜ＳＢ３に記憶しておいた波高値を遅延メモリＤＭ１〜ＤＭ３に読み込む。これにより、遅延メモリＤＭ１、遅延メモリＤＭ２及び遅延メモリＤＭ３には、それぞれ波高値Ｄ２、波高値Ｄ１及び波高値Ｄ０が記憶される。セグメントデータ要求回路７５１は、上記の第４周期と同様に、音高制御回路７３０から供給された処理済みデータ情報ＯＬＤＣＮＴを用いて、カウンタ更新情報ＵＰＤ及び要求データ情報ＲＥＱを出力領域カウンタ更新回路７４９に供給するとともに、要求データ情報ＲＥＱをセグメントデータ出力回路７４２に供給する。カウンタ更新情報ＵＰＤは、「１」であり、要求データ情報ＲＥＱは「１」である。したがって、第１出力領域カウンタ７４４ａのカウント値は、「０」のままである。また、要求データ情報ＲＥＱの算出において、インデックス番号は「１」になる。セグメントデータ出力回路７４２は、要求データ情報ＲＥＱの第０ビットに対応したセグメントデータをデータ取り出し回路７５３に供給する。
【０１０５】
このときインデックス番号が「１」であるから、データ取り出し回路７５３は、前記供給されたセグメントデータのＭＳＢ側の圧縮データＺ３を取り出してシフト演算回路７５４へ供給する。そして、第４周期と同様に、シフト演算回路７５４、乗算器７５５及び加算器７５６は、協働して波高値Ｄ３を算出する。そして、波高値出力回路７５７は、遅延メモリＤＭ１、遅延メモリＤＭ２及び遅延メモリＤＭ３に記憶していた波高値Ｄ２、波高値Ｄ１及び波高値Ｄ０をそれぞれ遅延メモリＤＭ２、遅延メモリＤＭ３及び遅延メモリＤＭ４に記憶するとともに、波高値Ｄ３を遅延メモリＤＭ１に記憶する。そして、波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ４に記憶している波高値を補間回路７６０に供給する。そして、波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ３に記憶している波高値を波高値バッファＳＢ１〜ＳＢ３に記憶する。
【０１０６】
補間回路７６０は、第４周期と同様に、波高値Ｄ１を波高値Ｗ１としてフィルタ回路７７０に供給する。フィルタ回路７７０及び音量制御回路７８０の動作は、第４周期と同様である。
【０１０７】
また、音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、第６周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。デコード数ＩＮＣＯは「１」であり、補間係数算出データＦＲＡＣは「０」である。また、第５周期においては、１つの圧縮データをデコードしたので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号を１回インクリメントする。これにより、インデックス番号が「１」になる。セグメントデータ番号は「１」のままであり、フレーム番号も「０」のままである。そして、音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第６周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１０８】
つぎに、第６周期の動作について説明する。セグメントデータ入力回路７４１は、第２周期と同様に、この第６周期においても、セグメントデータを読み込まない。したがって、第１入力領域カウンタ７４３ａのカウント値は、「０」のままである。
【０１０９】
セグメントデータ要求回路７５１は、音高制御回路７３０から、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力する。このデコード数ＩＮＣＯの値が「１」であるから、この第６周期においても、デコード回路７５０は、１つの圧縮データをデコードする。まず、波高値出力回路７５７は、波高値バッファＳＢ１〜ＳＢ３に記憶しておいた波高値を遅延メモリＤＭ１〜ＤＭ３に読み込む。これにより、遅延メモリＤＭ１、遅延メモリＤＭ２及び遅延メモリＤＭ３には、それぞれ波高値Ｄ３、波高値Ｄ２及び初期波高値Ｄ１が記憶される。
【０１１０】
セグメントデータ要求回路７５１は、上記の第５周期と同様に、音高制御回路７３０から供給された処理済みデータ情報ＯＬＤＣＮＴを用いて、カウンタ更新情報ＵＰＤ及び要求データ情報ＲＥＱを出力領域カウンタ更新回路７４９に供給するとともに、要求データ情報ＲＥＱをセグメントデータ出力回路７４２に供給する。カウンタ更新情報ＵＰＤは、「１」であり、要求データ情報ＲＥＱは「２」である。したがって、出力領域カウンタ更新回路７４９は、第１出力領域カウンタ７４４ａを１回カウントアップする。これにより、カウント値が「１」になる。そして、セグメントデータ出力回路７４２は、第１出力領域カウンタ７４４ａのカウント値及び要求データ情報ＲＥＱの第０ビットに対応する領域ＣＡ１０のセグメントデータを供給する。また、要求データ情報ＲＥＱの算出において、インデックス番号は「０」となっている。そこで、データ取り出し回路７５３は、前記供給されたセグメントデータのＬＳＢ側の圧縮データＺ４を取り出す。また、データ取り出し回路７５３は、前記供給されたセグメントデータからパラメータＰ２を取り出してバッファメモリに書き込む。そして、第５周期と同様に、シフト演算回路７５４、乗算器７５５及び加算器７５６は、波高値Ｄ４をデコードする。
【０１１１】
波高値出力回路７５７は、遅延メモリＤＭ１、遅延メモリＤＭ２及び遅延メモリＤＭ３に記憶していた波高値Ｄ３、波高値Ｄ２及び波高値Ｄ１をそれぞれ遅延メモリＤＭ２、遅延メモリＤＭ３及び遅延メモリＤＭ４に記憶するとともに、波高値Ｄ４を遅延メモリＤＭ１に記憶する。そして、波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ４に記憶している波高値を補間回路７６０に供給する。そして、波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ３に記憶している波高値を波高値バッファＳＢ１〜ＳＢ３に記憶する。
【０１１２】
補間回路７６０は、第５周期と同様に、波高値Ｄ２を波高値Ｗ２としてフィルタ回路７７０に供給する。フィルタ回路７７０及び音量制御回路７８０の動作は、第４周期と同様である。
【０１１３】
また、音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、第７周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。デコード数ＩＮＣＯは「１」であり、補間係数算出データＦＲＡＣは「０」である。また、第６周期においても、１つの圧縮データをデコードしたので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号を１回インクリメントする。これにより、インデックス番号が「０」になり、セグメントデータ番号が「２」になる。なお、フレーム番号は「０」のままである。そして、音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第７周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１１４】
第６周期に続く第７周期及び第８周期における動作も、上記の第５周期及び第６周期と同様である。すなわち、第７周期においては、領域ＣＡ０にセグメントデータを読み込むとともに、圧縮データＺ５を用いて波高値Ｄ５を算出する。そして、第８周期においては、偶数番目の再生周期なのでセグメントデータの読み込みはしない。また、第８周期においては、圧縮データＺ６を用いて波高値Ｄ６を算出する。つぎの第９周期の開始時においては、第１入力領域カウンタ７４３ａと第１出力領域カウンタ７４４ａのカウント値がいずれも「１」となる。そのため、第９周期においては、セグメントデータ入力回路７４１はセグメントデータを読み込まない。なお、デコード回路７５０は、第５周期乃至第８周期と同様に、圧縮データＺ７を用いて波高値Ｄ７を算出する。そして、第１０周期において、圧縮データＺ８を用いて波高値Ｄ８を算出し、第１出力領域カウンタ７４４ａのカウント値が進む。第１１周期の開始時には、第１入力領域カウンタ７４３ａと第１出力領域カウンタ７４４ａのカウント値は異なるため、セグメントデータ入力回路７４１はセグメントデータを読み込む。
【０１１５】
なお、上記の第１周期から第６周期の説明においては、チャンネル設定回路７１０によってパラメータメモリ７５２に書き込まれた線形予測係数Ｃ及び逆正規化係数Ｒを用いている。しかし、チャンネル設定回路７１０よってパラメータメモリ７５２に書き込まれた線形予測係数Ｃ及び逆正規化係数Ｒを用いるのは、フレームデータＦＤ０をデコードするときだけである。フレームデータＦＤ１以降のデコードにおいては、１つ前のフレームデータのデコードにおいて、データ取り出し回路７５３によって取り出してパラメータメモリ７５２に記憶しておいた線形予測係数Ｃ及び逆正規化係数Ｒを用いる。上記の例では、第９周期において、フレームデータＦＤ０のデコードが終了し、第１０周期においてフレームデータＦＤ１のデコードを開始する。データ取り出し回路７５３は、第９周期の終了時に、図示しないバッファメモリに記憶しておいたパラメータＰ０〜Ｐ２を用いて、フレームデータＦＤ１のデコードに用いる線形予測係数Ｃを算出して、パラメータメモリ７５２に書き込む。また、データ取り出し回路７５３は、バッファメモリに記憶しておいたパラメータＰ３を、フレームデータＦＤ１のデコードに用いる逆正規化係数Ｒとして、パラメータメモリ７５２に書き込む。
【０１１６】
つぎに、動作モードが第１モードであって、図１４に示す波形データを元ピッチの１．７倍のピッチで発音する発音チャンネルＣＨａ（ただし、「ａ」は偶数）の動作について説明する。第１周期から第３周期までの動作は、上記のピッチ倍率が「１．０」である場合と同じである。また、第４周期において波高値Ｄ０をデコードする動作もピッチ倍率が「１．０」である場合と同じである。なお、図１４においても、図１３と同様に、キャッシュメモリＣＭａに読み込んだ圧縮データの番号のみを示し、各再生周期において波高値をデコードするために用いる圧縮データの番号を丸で囲んで示している。
【０１１７】
第４周期における音高制御回路７３０の動作のうち、第５周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣの算出について説明する。このピッチ倍率が「１．７」である例においても、ピッチ倍率が「１．０」である場合と同様に、音高制御回路７３０は、第４周期以降の各再生周期においてピッチ倍率を累算し、ピッチ倍率の累算結果からデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。音高制御回路７３０は、第４周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、第５周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。したがって、第４周期におけるピッチ倍率の累算値は「１．７」であり、整数部の増加分は「１」である。すなわち、第５周期におけるデコード数ＩＮＣＯの値は「１」である。また、補間係数算出データＦＲＡＣの値は「０．７」である。なお、図１４においても、図１３と同様に、音高制御回路７３０がピッチ倍率の累算値を算出した再生周期の次の周期に、その算出結果を記載している。
【０１１８】
また、第４周期においては１つの圧縮データをデコードしたので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号をインクリメントする。これにより、インデックス番号が「０」になり、セグメントデータ番号が「１」になる。なお、フレームデータ番号は、「０」のままである。音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第５周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１１９】
つぎに、第５周期の動作について説明する。セグメントデータ入力回路７４１の動作は、ピッチ倍率が「１．０」の場合と同様である。
【０１２０】
デコード回路７５０は、上記のピッチ倍率が「１．０」である場合と同様に、圧縮データＺ３を用いて、波高値Ｄ３を算出する。波高値出力回路７５７は、波高値Ｄ３〜Ｄ０を補間回路７６０に供給する。補間回路７６０は、音高制御回路７３０から補間係数算出データＦＲＡＣを入力する。上記のように、この補間係数算出データＦＲＡＣの値は「０．７」である。補間回路７６０は、波高値Ｄ３〜波高値Ｄ０及び補間係数算出データＦＲＡＣを用いて補間演算し、ピッチ累算値（＝１．７）に対応する波高値Ｗ１を算出する。そして、波高値Ｗ１をフィルタ回路７７０へ供給する。フィルタ回路７７０以降の動作は、ピッチ倍率が「１．０」である場合と同様である。
【０１２１】
また、音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、第６周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。ピッチ倍率の累算値は「３．４」であるので、デコード数ＩＮＣＯは「２」であり、補間係数算出データＦＲＡＣは「０．４」である。また、第５周期においては１つの波高値をデコードしたので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号を１回インクリメントする。これにより、インデックス番号が「１」になる。セグメントデータ番号は「１」であり、フレーム番号は「０」である。音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第６周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１２２】
つぎに、第６周期の動作について説明する。セグメントデータ入力回路７４１は、ピッチ倍率が「１．０」の場合と同様に、セグメントデータを読み込まない。セグメントデータ要求回路７５１は、音高制御回路７３０からデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力する。このデコード数ＩＮＣＯの値は「２」であるから、この第６周期においては、デコード回路７５０は、２つの圧縮データをデコードする。すなわち、波高値Ｄ４及び波高値Ｄ５を算出する。この波高値Ｄ４及び波高値Ｄ５の算出についてもピッチ倍率が「１．０」の場合と同様である。すなわち、セグメントデータ要求回路７５１は、音高制御回路７３０から供給された処理済みデータ情報ＯＬＤＣＮＴを用いて、カウンタ更新情報ＵＰＤ及び要求データ情報ＲＥＱを出力領域カウンタ更新回路７４９に供給するとともに、要求データ情報ＲＥＱをセグメントデータ出力回路７４２に供給する。そして、デコード回路７５０は、セグメントデータ出力回路７４２から供給されたセグメントデータから、インデックス番号に対応する圧縮データを取り出して、前記取り出した圧縮データを用いて波高値を算出する。１つ目の波高値（すなわち波高値Ｄ４）の算出において、第１出力領域カウンタ７４４ｂのカウント値が「１」になり、２つ目の波高値（すなわち波高値Ｄ５）の算出においては、第１出力領域カウンタ７４４ｂのカウント値は更新されず、「１」のままである。そして、波高値Ｄ５〜波高値Ｄ２を補間回路７６０に供給する。補間回路７６０は、音高制御回路７３０から補間係数算出データＦＲＡＣを入力する。上記のように、この補間係数算出データＦＲＡＣの値は「０．４」である。補間回路７６０は、波高値Ｄ５〜Ｄ２及び補間係数算出データＦＲＡＣを用いて補間演算し、ピッチ倍率の累算値（＝３．４）に対応する波高値Ｗ２を算出する。そして、波高値Ｗ２をフィルタ回路７７０へ供給する。フィルタ回路７７０及びその後段の回路の動作は、上記のピッチ倍率が「１．０」である例と同様である。
【０１２３】
また、音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、第７周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。第６周期においては２つの圧縮データをデコードしたため、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号を２回インクリメントする。これにより、インデックス番号は「１」、セグメント番号は「２」になる。フレーム番号は「０」のままである。そして、音高制御回路７３０は、音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第７周期において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１２４】
第６周期以降の動作も、上記の第５周期又は第６周期と同様である。すなわち、第７周期以降の各周期のピッチ倍率の累算値は、「５．１」、「６．８」、「８．５」、「１０．２」、「１１．９」・・・であり、デコード数ＩＮＣＯは、「２」、「１」、「２」、「２」、「１」・・・である。そして、各周期において、キャッシュメモリＣＭａに空きがあるときには、波形メモリＷＭからセグメントデータを読み込み、第１入力領域カウンタ７４３ａをカウントアップする。また、算出されたデコード数ＩＮＣＯに応じて、１つ又は２つの圧縮データをデコードし、デコードする圧縮データが記憶されている領域（ＣＡ０〜ＣＡ１）が変わるごとに第１出力領域カウンタ７４４ｂをカウントアップする。例えば、第７周期においては、領域ＣＡ０にセグメントデータを読み込むとともに、圧縮データＺ６及び圧縮データＺ７を用いて波高値Ｄ６及び波高値Ｄ７をそれぞれ算出する。これにより、第１入力領域カウンタ７４３ａのカウント値が「１」になるが、第１出力領域カウンタ７４４ｂのカウント値は「１」のままである。また、例えば、第８周期においては、偶数番目の再生周期なのでセグメントデータの読み込みはしない。したがって、第１入力領域カウンタ７４３ａのカウント値は「１」のままである。また、第８周期においては、１つの圧縮データＺ８を用いて波高値Ｄ８を算出する。これにより、第１出力領域カウンタ７４４ｂのカウント値は、「２」になる。
【０１２５】
上記のピッチ倍率が「１．０」の場合は、第９周期の開始時において、第１入力領域カウンタ７４３ａと第１出力領域カウンタ７４４ａのカウント値が同じ値となっているため、第９周期においては、セグメントデータ入力回路７４１はセグメントデータをキャッシュメモリＣＭａに読み込まない。しかし、ピッチ倍率が「１．７」の場合の第６周期及び第７周期のデコード数は、ピッチ倍率が「１．０」の場合の第６周期及び第７周期のデコード数よりも多い。したがって、ピッチ倍率が「１．７」の場合、ピッチ倍率が「１．０」の場合に比べて第１出力領域カウンタ７４４ａのカウント値が速く進むので、第９周期の開始時において第１入力領域カウンタ７４３ａと第１出力領域カウンタ７４４ａのカウント値が異なっている。したがって、セグメントデータ入力回路７４１は、第９周期においても、セグメントデータをキャッシュメモリＣＭａに読み込む。第１０周期以降の動作も上記の第５周期〜第９周期の動作と同様である。なお、ピッチ倍率が「１．７」の場合、第７周期において、フレームデータＦＤ０のデコードが終了し、第８周期においてフレームデータＦＤ１のデコードを開始する。したがって、第８周期以降のフレームデータＦＤ１のデコードにおいては、フレームデータＦＤ０のデコードにおいて、パラメータメモリ７５２に記憶した線形予測係数Ｃ及び逆正規化係数Ｒを用いる。
【０１２６】
つぎに、動作モードが第２モードであって、図４に示す波形データを元ピッチの３．７倍のピッチで発音する発音チャンネルＣＨａ及び発音チャンネルＣＨｂの動作について図１５を用いて説明する。ただし、「ａ」は偶数であり、「ｂ」は「ａ」に「１」を加算した値である。この場合、発音チャンネルＣＨａのキャッシュメモリＣＭａ及び発音チャンネルＣＨｂのキャッシュメモリＣＭｂは、キャッシュメモリＣＭａｂとして一体的に用いられ、キャッシュメモリＣＭａｂは、それぞれ２ワードの記憶領域を有する領域ＣＡ０〜ＣＡ５に区分される。また、発音チャンネルＣＨｂの処理においては、発音チャンネルＣＨａのパラメータを用いる。すなわち、発音チャンネルＣＨｂの処理において、発音チャンネルＣＨａ用として記憶されている、相対アドレスカウンタのカウント値、入力領域カウンタメモリ７４５のカウント値、出力領域カウンタメモリ７４６のカウント値、処理済みデータ情報ＯＬＤＣＮＴ、フォーマットデータＢＰＳ、線形予測係数Ｃ、逆正規化係数Ｒ及び波高値バッファＳＢ１〜ＳＢ３に書き込まれた波高値を用いる。ただし、デコード数ＩＮＣＯについては、発音チャンネルＣＨａ及び発音チャンネルＣＨｂごとに算出する。
【０１２７】
まず、第１周期における発音チャンネルＣＨａの動作について説明する。入力領域カウンタ更新回路７４８は、第２入力領域カウンタ７４３ｂのカウント値を「０」に初期化する。また、出力領域カウンタ更新回路７４９は、第２出力領域カウンタ７４４ｂのカウント値を「５」に初期化する。また、音高制御回路７３０は、フレームデータ番号を「ｎ」、セグメントデータ番号を「３」、インデックス番号を「１」にそれぞれ初期化する。音高制御回路７３０は、第１周期の開始時に処理済みデータ情報ＯＬＤＣＮＴを初期化する。すなわち、フレームデータ番号を「ｎ」、セグメントデータ番号を「３」、インデックスデータ番号を「１」に設定する。セグメントデータ入力回路７４１は、第１モードにおける第１入力領域カウンタ７４３ａ及び第１出力領域カウンタ７４４ａに代えて第２入力領域カウンタ７４３ｂ及び第２出力領域カウンタ７４４ｂを用いるが、他の動作は、ピッチ倍率が「１．０」の場合の第１周期の動作と同様である。すなわち、セグメントデータ入力回路７４１は、波形メモリＷＭから先頭の２つのセグメントデータを領域ＣＡ０に読み込む。これにより、第２入力領域カウンタ７４３ｂのカウント値は「１」になる。また、デコード回路７５０及びその後段の回路は動作しない。また、第１周期においては圧縮データをデコードしていないので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを更新しない。なお、図１５においても、図１３と同様に、キャッシュメモリＣＭａｂに読み込んだ圧縮データの番号のみを示し、各再生周期においてデコードする圧縮データの番号を丸で囲んで示している。
【０１２８】
つぎに、第１周期における発音チャンネルＣＨｂの動作について説明する。発音チャンネルＣＨｂは、奇数番号の発音チャンネルであるので、第１周期においては、セグメントデータ入力回路７４１は、キャッシュメモリＣＭａｂに空きがあってもセグメントデータを読み込まない。セグメントデータ要求回路７５１は、第１周期における発音チャンネルＣＨｂの処理の開始時に、チャンネル設定回路７１０から、第１周期のデコード数ＩＮＣＯを入力するが、このデコード数ＩＮＣＯの値は「０」であるので、デコード回路７５０及びその後段に接続された回路は動作しない。また、音高制御回路７３０は、第２周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣをチャンネル設定回路７１０から入力する。このデコード数ＩＮＣＯの値は、「０」であり、補間係数算出データＦＲＡＣの値は、「０」である。また、上記のように、第１周期においては圧縮データをデコードしていないので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを更新しない。音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第２周期の発音チャンネルＣＨｂの処理において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１２９】
つぎに、第２周期における発音チャンネルＣＨａの動作について説明する。この第２周期の発音チャンネルＣＨａの動作も第１モードと同様である。すなわち、音高制御回路７３０が第３周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを、チャンネル設定回路７１０から入力して記憶するだけで、他の回路は動作しない。なお、このデコード数ＩＮＣＯの値は「２」であり、補間係数算出データＦＲＡＣの値は「０」である。
【０１３０】
つぎに、第２周期における発音チャンネルＣＨｂの動作について説明する。セグメントデータ入力回路７４１は、相対アドレスカウンタの値と先頭アドレスの値を用いて、入力するセグメントデータの絶対アドレスを算出する。第２入力領域カウンタ７４３ｂのカウント値が「１」であり、第２出力領域カウンタ７４４ｂの値が「５」であるので、第２比較器７４７ｂは、キャッシュメモリＣＭａｂに空きがあることを表す信号をセグメントデータ入力回路７４１に供給する。したがって、セグメントデータ入力回路７４１は、第２入力領域カウンタ７４３ｂのカウント値に対応する領域ＣＡ１に、前記算出したアドレスを先頭とする２つのセグメントデータを入力する。そして入力領域カウンタ更新回路７４８は、第２入力領域カウンタ７４３ｂを１回カウントアップする。これにより第２入力領域カウンタのカウント値が「２」になる。また、セグメントデータ入力回路７４１は、相対アドレスカウンタを２回カウントアップする。これにより、相対アドレスカウンタのカウント値が、「４」になる。
【０１３１】
セグメントデータ要求回路７５１は、第２周期における発音チャンネルＣＨｂの処理の開始時に、音高制御回路７３０から第２周期のデコード数ＩＮＣＯを入力するが、このデコード数ＩＮＣＯの値は「０」であるので、デコード回路７５０及びその後段に接続された回路は動作しない。また、音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、チャンネル設定回路７１０から、第３周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを入力する。このデコード数ＩＮＣＯの値は「２」であるが、第２モードにおいては、チャンネル設定回路７１０から入力したデコード数ＩＮＣＯは発音チャンネルＣＨａ及び発音チャンネルＣＨｂにてデコードする波高値の合計を表している。上記のように、第３周期の発音チャンネルＣＨａのデコード数ＩＮＣＯの値が「２」であるので、発音チャンネルＣＨｂのデコード数ＩＮＣＯは「０」である。また、補間係数算出データの値は、「０」である。また、上記のように、第２周期においては圧縮データをデコードしていないので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを更新しない。音高制御回路７３０は、上記のデコード数ＩＮＣＯ、処理済みデータ情報ＯＬＤＣＮＴ及び補間係数算出データＦＲＡＣを記憶していて、第３周期における発音チャンネルＣＨｂの処理において、デコード回路７５０及び補間回路７６０に供給する。
【０１３２】
つぎに、第３周期における発音チャンネルＣＨａの動作について説明する。セグメントデータ入力回路７４１は、第１周期と同様に、領域ＣＡ２に２つのセグメントデータを入力する。これにより、第２入力領域カウンタ７４３ｂのカウント値が「３」になり、相対アドレスカウンタのカウント値が「６」になる。
【０１３３】
デコード回路７５０は、上記のピッチ倍率が「１．０」の場合の第３周期と同様に、２つの波高値Ｄ０及び波高値Ｄ１を算出する。これにより第２出力領域カウンタ７４４ｂのカウント値は「０」になる。波高値Ｄ１、波高値Ｄ０及び初期波高値Ｄｉはそれぞれ波高値バッファＳＢ１、波高値バッファＳＢ２及び波高値バッファＳＢ３に記憶される。また、第２モードの発音チャンネルＣＨａにおいては、波高値は補間回路７６０に供給されないので、補間回路７６０、フィルタ回路７７０及び音量制御回路７８０は動作しない。
【０１３４】
音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、チャンネル設定回路７１０から、第４周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを入力する。このデコード数ＩＮＣＯの値は、「１」である。また、第３周期においては２つの圧縮データをデコードしたので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号を２回インクリメントする。これにより、インデックス番号が「１」になる。セグメントデータ番号及びフレームデータ番号は「０」のままである。音高制御回路７３０は、音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第４周期の発音チャンネルＣＨａの処理において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１３５】
つぎに、第３周期における発音チャンネルＣＨｂの動作について説明する。発音チャンネルＣＨｂは、奇数番号の発音チャンネルであるので、セグメントデータ入力回路７４１は、セグメントデータを読み込まない。また、波高値出力回路７５７は、波高値バッファＳＢ１〜ＳＢ３に記憶されている波高値を遅延メモリＤＭ１〜ＤＭ３に読み込む。セグメントデータ要求回路７５１は、音高制御回路７３０からデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力するが、デコード数ＩＮＣＯが「０」であるので、デコード回路７５０は圧縮データをデコードしない。第２出力領域カウンタ７４４ｂのカウント値も更新されず、「０」のままである。また、第３周期までに算出した波高値は、２つであるので、波高値出力回路７５７は、波高値を補間回路７６０へ供給しない。したがって、補間回路７６０、フィルタ回路７７０及び音量制御回路７８０は、動作しない。
【０１３６】
また、音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、チャンネル設定回路７１０から、第４周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを入力する。このデコード数ＩＮＣＯの値は「１」であるが、このデコード数ＩＮＣＯは、第４周期における発音チャンネルＣＨａ及び発音チャンネルＣＨｂのデコード数ＩＮＣＯの合計である。上記のように、第４周期の発音チャンネルＣＨａの処理におけるデコード数ＩＮＣＯが「１」であるから、発音チャンネルＣＨｂのデコード数ＩＮＣＯは「０」である。また、補間係数算出データＦＲＡＣの値は、「０」である。また、上記のように、第３周期の発音チャンネルＣＨｂにおいては、圧縮データをデコードしていないので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを更新しない。音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第４周期の発音チャンネルＣＨｂの処理において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１３７】
つぎに第４周期における発音チャンネルＣＨａの動作について説明する。発音チャンネルＣＨａは、偶数番号の発音チャンネルであるので、この第４周期において、セグメントデータ入力回路７４１は、セグメントデータを読み込まない。デコード回路７５０の動作は、上記のピッチ倍率が「１．０」の場合の第４周期の動作と同様である。すなわち、デコード回路７５０は波高値Ｄ２を算出する。第２出力領域カウンタ７４４ｂのカウント値は「０」のままである。また、この場合も、波高値出力回路７５７は、波高値を補間回路７６０へ供給しない。したがって、補間回路７６０及びその後段の回路は動作しない。波高値出力回路７５７は、波高値Ｄ２〜波高値Ｄ０を波高値バッファＳＢ１〜波高値バッファＳＢ３に記憶する。
【０１３８】
音高制御回路７３０は、上記のピッチ倍率が「１．０」及び「１．７」の例と同様に、第４周期以降の各再生周期においてピッチ倍率を累算し、ピッチ倍率の累算結果からデコード数ＩＮＣＯを算出する。音高制御回路７３０は、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給すると、第５周期のデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。この例においてはピッチ倍率が「３．７」であるから、第４周期におけるピッチ倍率の累算値は「３．７」であり、整数部の増加分は「３」である。すなわち、第５周期においては３つの波高値をデコードするが、発音チャンネルＣＨａの処理において２つの波高値をデコードし、発音チャンネルＣＨｂの処理において残りの１つの波高値をデコードする。したがって、第５周期における発音チャンネルＣＨａのデコード数ＩＮＣＯは「２」である。また、補間係数算出データＦＲＡＣの値は「０．７」である。なお、図１５においても、図１３及び図１４と同様に、音高制御回路７３０がピッチ倍率の累算値を算出した再生周期の次の周期に、その算出結果を記載している。
【０１３９】
また、第４周期においては１つの圧縮データをデコードしたので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号を１回インクリメントする。これにより、インデックス番号が「０」になり、セグメントデータ番号が「１」になる。フレームデータ番号は「０」のままである。音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第５周期の発音チャンネルＣＨａの処理において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１４０】
つぎに、第４周期における発音チャンネルＣＨｂの動作について説明する。セグメントデータ入力回路７４１は、第２周期と同様に、領域ＣＡ３に、２つのセグメントデータを入力する。これにより、第２入力領域カウンタ７４３ｂのカウント値が「４」になり、相対アドレスカウンタのカウント値が「８」になる。また、波高値出力回路７５７は、波高値バッファＳＢ１〜ＳＢ３に記憶されている波高値を、遅延メモリＤＭ１〜遅延メモリＤＭ３に読み込む。セグメントデータ要求回路７５１は、音高制御回路７３０からデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力するが、デコード数ＩＮＣＯが「０」であるので、デコード回路７５０は波高値をデコードしない。第２出力領域カウンタ７４４ｂのカウント値も更新されず、「０」のままである。波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ４に記憶している波高値（すなわち、波高値Ｄ２〜波高値Ｄ０及び初期波高値Ｄｉ）を補間回路７６０に供給する。そして、波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ３に記憶している波高値（すなわち、波高値Ｄ２〜波高値Ｄ０）を波高値バッファＳＢ１〜ＳＢ３に記憶する。
【０１４１】
補間回路７６０は、音高制御回路７３０から補間係数算出データＦＲＡＣを入力する。この補間係数算出データＦＲＡＣの値が「０」であるから、補間回路７６０は、波高値Ｄ０を初期波高値Ｗ０としてフィルタ回路７７０に供給する。フィルタ回路７７０及びその後段の回路の動作は第１モードと同様である。
【０１４２】
また、音高制御回路７３０は、第５周期における発音チャンネルＣＨｂのデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。第４周期における発音チャンネルＣＨａの動作において説明したように、第５周期における発音チャンネルＣＨｂのデコード数ＩＮＣＯの値は「１」である。また、補間係数算出データＦＲＡＣの値は「０．７」である。また、上記のように、第４周期における発音チャンネルＣＨｂにおいては、圧縮データをデコードしていないので、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを更新しない。
【０１４３】
つぎに、第５周期における発音チャンネルＣＨａの動作について説明する。セグメントデータ入力回路７４１は、第１周期と同様に、領域ＣＡ４に２つのセグメントデータを読み込む。これにより、第２入力領域カウンタ７４３ｂのカウント値が「５」になり、相対アドレスカウンタのカウント値が「１０」になる。
【０１４４】
波高値出力回路７５７は、波高値バッファＳＢ１〜ＳＢ３に記憶されている波高値を遅延メモリＤＭ１〜ＤＭ３に読み込む。セグメントデータ要求回路７５１は、音高制御回路７３０から、第５周期のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力する。このデコード数ＩＮＣＯの値が「２」であるから、デコード回路７５０は、２つの圧縮データをデコードする。すなわち、デコード回路７５０は、第３周期と同様に、２つの波高値Ｄ３及び波高値Ｄ４を算出する。これにより、第２出力領域カウンタ７４４ｂのカウント値が「１」になる。また、この場合も、波高値出力回路７５７は、波高値を補間回路７６０へ供給しない。したがって、補間回路７６０及びその後段の回路は動作しない。波高値出力回路７５７は、波高値Ｄ４〜波高値Ｄ２を波高値バッファＳＢ１〜波高値バッファＳＢ３に記憶する。
【０１４５】
また、音高制御回路７３０は、第４周期と同様にピッチ倍率の累算値を算出して、第６周期におけるデコード数ＩＮＣＯ及び補間係数算出データＦＲＡＣを算出する。ピッチ倍率の累算値は「７．４」である。したがって、ピッチ倍率の累算値の整数部の増加分は「４」であるから、第６周期においては発音チャンネルＣＨａおよび発音チャンネルＣＨｂを用いて、４つの圧縮データをデコードする。この場合、発音チャンネルＣＨａを用いて２つの圧縮データをデコードし、発音チャンネルＣＨｂを用いて残りの２つの圧縮データをデコードする。すなわち、第６周期の発音チャンネルＣＨａのデコード数ＩＮＣＯは「２」である。また、第５周期においては２つの圧縮データをデコードしたため、音高制御回路７３０は、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号に「２」を加算する。これにより、インデックス番号が「０」になり、セグメント番号は「２」になる。なお、フレーム番号は「０」である。そして、音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第６周期の発音チャンネルＣＨａの処理において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１４６】
つぎに、第５周期における発音チャンネルＣＨｂの動作について説明する。発音チャンネルＣＨｂは、奇数番号の発音チャンネルであるので、この第５周期において、入力回路は、セグメントデータを読み込まない。波高値出力回路７５７は、波高値バッファＳＢ１〜ＳＢ３に記憶されている波高値を遅延メモリＤＭ１〜ＤＭ３に読み込む。セグメントデータ要求回路７５１は、音高制御回路７３０から、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴを入力する。このデコード数ＩＮＣＯの値が「１」であるから、デコード回路７５０は、１つの圧縮データをデコードする。すなわち、デコード回路７５０は、１つの波高値Ｄ５を算出する。第２出力領域カウンタ７４４ｂのカウント値は「１」のままである。波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ４に記憶している波高値（すなわち、波高値Ｄ５〜波高値Ｄ２）を補間回路７６０に供給する。そして、波高値出力回路７５７は、遅延メモリＤＭ１〜ＤＭ３に記憶している波高値（すなわち、波高値Ｄ５〜波高値Ｄ３）を波高値バッファＳＢ１〜ＳＢ３に記憶する。
【０１４７】
補間回路７６０は、音高制御回路７３０から補間係数算出データＦＲＡＣを入力する。上記のように、この補間係数算出データＦＲＡＣの値は「０．７」である。補間回路７６０は、波高値Ｄ５〜波高値Ｄ２及び補間係数算出データＦＲＡＣを用いて補間演算し、ピッチ累算値（＝３．７）に対応する波高値Ｗ１を算出する。そして、波高値Ｗ１をフィルタ回路７７０へ供給する。フィルタ回路７７０以降の動作は、ピッチ倍率が「１．０」である場合と同様である。フィルタ回路７７０及びその後段の回路の動作は第１モードと同様である。
【０１４８】
また、音高制御回路７３０は、第６周期における発音チャンネルＣＨｂのデコード数ＩＮＣＯを算出する。第５周期における発音チャンネルＣＨａの動作において説明したように、発音チャンネルＣＨｂのデコード数ＩＮＣＯの値は「２」である。また、ピッチ倍率の累算値が「７．４」であるから、補間係数算出データＦＲＡＣの値は「０．４」である。また、上記のように第５周期においては、１つの圧縮データをデコードしたので、処理済みデータ情報ＯＬＤＣＮＴを構成するインデックス番号を１つインクリメントする。これにより、インデックス番号が「１」になる。なお、セグメント番号は「２」であり、フレーム番号は「０」である。そして、音高制御回路７３０は、上記のデコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴ並びに補間係数算出データＦＲＡＣを記憶していて、第６周期の発音チャンネルＣＨｂの処理において、デコード数ＩＮＣＯ及び処理済みデータ情報ＯＬＤＣＮＴをデコード回路７５０に供給し、補間係数算出データＦＲＡＣを補間回路７６０に供給する。
【０１４９】
第６周期以降の動作も上記の第５周期と同様である。すなわち、第６周期以降の各周期のピッチ倍率の累算値は、「７．４」、「１１．１」、「１４．８」、「１８．５」、「２２．２」、「２５．９」・・・であり、発音チャンネルＣＨａのデコード数ＩＮＣＯは、各周期において「２」であるが、発音チャンネルＣＨｂのデコード数ＩＮＣＯは、「２」、「２」、「１」、「２」、「２」、「１」・・・である。第５周期においては、発音チャンネルＣＨｂは、１つの圧縮データをデコードした。しかし、第６周期、第７周期、第１０周期、第１１周期などのように、発音チャンネルＣＨｂも２つの圧縮データをデコードする再生周期もある。また、この例においては、第２入力領域カウンタ７４３ｂと第２出力領域カウンタ７４４ｂのカウント値が同じ値になって、入力回路がセグメントデータを読み込まないという再生周期はない。なお、第１モードと同様に、先頭のフレームデータＦＤ０のデコードにおいては、実時間制御レジスタ７１２に書き込まれた線形予測係数Ｃを用いるが、フレームデータＦＤ１以降のデコードにおいては、１つ前のフレームデータのデコードにおいて取得した線形予測係数を用いる。
【０１５０】
上記のように構成した楽音信号発生装置においては、ピッチ倍率が「２．０」以上になる可能性のある波形データを選択した場合に、２つの発音チャンネルを用いて、波高値を算出するようにした。本実施形態においては、圧縮データを先頭から順番にデコードする必要があるが、上記のように、２つの発音チャンネルを用いることにより、各再生周期ごとに最大４つの圧縮データをデコードできる。したがって、ピッチ倍率を最大で「４．０」に設定することができる。この場合、楽音をサンプリングするときに２オクターブ毎にサンプリングしておけばよいので、波形メモリの容量を小さくすることができる。一方、ピッチ倍率を「２．０」以上にする必要のない波形データを選択した場合、１つの発音チャンネルを用いて波高値を算出する。したがって、同時に発生させる楽音信号の数を大きく減少させることがない。また、波形メモリＷＭとして、ページアクセスが可能なメモリを採用した。再生周期を発音チャンネルの総数である２５６分割した１つの期間を各発音チャンネルのセグメントデータを読み出すキャッシュ処理期間として割り当てた場合には、この処理期間は短すぎて、１つもセグメントデータを読み出すことができない。そこで、サンプリング周期を１２８分割した１つの期間をキャッシュ処理期間として割り当てるようにして、各発音チャンネルは、サンプリング周期の２周期に１回の割合でセグメントデータを読み込むようにした。このキャッシュ処理期間であれば、ページリードにより、２つのセグメントデータを読み込むことができる。また、１つのセグメントデータは２つの圧縮データを含むようにしたので、１つの発音チャンネルが再生周期の２周期分の期間において波高値を算出するために必要とする圧縮データを予め読み込んでおくことができる。
【０１５１】
さらに、本発明の実施にあたっては、上記実施形態に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。
【０１５２】
上記実施形態の第２モードにおいては、発音チャンネルＣＨａ及び発音チャンネルＣＨｂを用いることにより、ピッチ倍率を最大で「４．０」に設定できるようにした。しかし、さらに多くの発音チャンネルを用いれば、ピッチ倍率の最大値をさらに大きくすることができる。例えば、３つの発音チャンネルを用いれば、ピッチ倍率の最大値を「６．０」にすることができる。
【０１５３】
また、上記実施形態においては、過去にデコードした波高値のうちの最新の１つの波高値ＷＤ１を用いて、予測値を算出するようにした。しかし、波高値ＷＤ１よりも前にデコードした波高値ＷＤ２、波高値ＷＤ３、波高値ＷＤ４などを用いて予測値を算出するようにしてもよい。この場合、それぞれの波高値に乗算する線形予測係数をフレームデータ中に記憶するようにしておき、データ取り出し回路７５３によって取り出すようにすればよい。
【０１５４】
また、上記実施形態においては、セグメントデータの下位１２ビットを２等分しているが、セグメントデータの下位１２ビットを何等分してもよい。すなわち、３等分、４等分又は６等分してもよい。ただし、すべてのセグメントデータについて同じように分割する。分割数を大きくするに従って、１つのセグメントデータに、より多くの圧縮データを記憶できるが、１つの圧縮データの最大値が小さくなる。例えば、セグメントデータの下位１２ビットを３等分した場合、各圧縮データのデータ長は、４ビットである。そこで、選択したフレームにおける最大の残差データを２進数で表記したときの値が「１」である最上位のビットを第ｘビット（ｘ＝４，５・・・１６）とすると、第（ｘ−３）ビットから第ｘビットの４ビットを圧縮データとする。セグメントデータを４等分した場合は、残差データの第（ｘ−２）ビットから第ｘビットの３ビットを圧縮データとし、セグメントデータを６等分した場合は、第ｘ−１ビットから第ｘビットの２ビットを圧縮データとする。また、上記実施形態においては、１つのフレームに８周期分の波高値に対応する圧縮データが含まれるようにした。１つのフレームデータを構成するセグメントデータの数を上記の実施形態と同様に４つとすれば、分割数を大きくするに従って、１つのフレームに、より多くの周期分の波高値に対応する圧縮データが含まれる。ただし、１つのフレームデータを構成するセグメントデータの数は４つに限られないので、セグメントデータの分割数に応じて、１つのフレームデータを構成するセグメントデータの数を増減して、１つのフレームに含まれる圧縮データの数を調整できる。
【０１５５】
また、上記実施形態においては、全てのセグメントデータに２つずつ圧縮データが含まれるようにした。しかし、フレームごとにセグメントデータに含まれる圧縮データの数を変更してもよい。この場合、フォーマットデータＢＰＳをフレームごとに更新するようにすればよい。具体的には、ボイスデータとして、各フレームごとのフォーマットデータＢＰＳを記憶しておき、フレームが切り替わるごとに、チャンネル設定回路７１０から音高制御回路７３０及びデコード回路７５０にフォーマットデータＢＰＳを供給するようにすればよい。また、この場合、線形予測係数Ｃ及び逆正規化係数Ｒと同様に、セグメントデータにフォーマットデータＢＰＳも含むようにおいて、データ取り出し回路７５３によって、セグメントデータからフォーマットデータＢＰＳを取り出してパラメータメモリ７５２に記憶するとともに、音高制御回路７３０に供給するようにしてもよい。上記のように構成すれば、波高値の変化が大きいために残差データの値が大きいフレームにおいては、圧縮データのデータ長を大きくしておき、波高値の変化が小さく残差データの値が小さいフレームにおいては、圧縮データのデータ長を小さくすることができる。このように、効率的に波形データを圧縮できるので、波形メモリＷＭの記憶容量をより小さくすることができる。
【０１５６】
また、上記実施形態においては、線形予測法を用いて波高値を圧縮しておき、１つ前に算出した波高値を用いて次の波高値を算出するようにした。しかし、過去に算出した波高値のうちの１つ又は複数の波高値を用いて次の波高値を算出する方式であれば、どのような方式であっても本発明を適用できる。
【０１５７】
また、上記実施形態においては、説明を簡単にするために、最終フレームのデコードが終了すると、発音を終了するようにした。しかし、最終フレームのデコードが終了した後、先頭又は途中のフレームに戻って、再びそのフレームから順にデコードするようにしてもよい。すなわち、ループ再生可能に構成してもよい。この場合、ループの先頭フレームを最初にデコードしたときに、そのフレームをデコードするために用いた線形予測係数Ｃ及び逆正規化係数Ｒを記憶しておき、波形データの先頭フレームから最終フレームまでのデコードが終了してループ再生を開始するときに、前記記憶しておいた線形予測係数Ｃ及び逆正規化係数Ｒをパラメータメモリ７５２に書き込むようにすればよい。このとき、デコード回路７５０は、ループの先頭フレームの１つ前のフレームのデコードにおいてデコードした最終の４つの波高値を記憶しておけばよい。そして、ループ再生を開始するときに、前記記憶しておいた最終の４つの波高値を遅延メモリＤＭ１〜ＤＭ４に書き込むようにすればよい。このように構成すれば、波形の変化が少ない区間を繰り返し再生することができるので、波形メモリＷＭの容量を小さくできる。
【符号の説明】
【０１５８】
７１０…チャンネル設定回路、７３０…音高制御回路、７４０…キャッシュ回路、７４１…セグメントデータ入力回路、７４２…セグメントデータ出力回路、７５０…デコード回路、７５４…シフト演算回路、７５５…乗算器、７５６…加算器、７６０…補間回路、９００…コンピュータ部、ＷＭ…波形メモリ
【図１】
0005789993.tif 000002
【図２】
0005789993.tif 000003
【図３】
0005789993.tif 000004
【図４】
0005789993.tif 000005
【図５】
0005789993.tif 000006
【図６】
0005789993.tif 000007
【図７】
0005789993.tif 000008
【図８】
0005789993.tif 000009
【図９】
0005789993.tif 000010
【図１０】
0005789993.tif 000011
【図１１】
0005789993.tif 000012
【図１２】
0005789993.tif 000013
【図１３】
0005789993.tif 000014
【図１４】
0005789993.tif 000015
【図１５】
0005789993.tif 000016