(57)【要約】【課題】フレーム単位に波形データを圧縮し記憶する方式の音源において、ループスタートフレームおよびループエンドフレームを各フレーム毎に１ビットのフラグで管理し、短いループ区間にも対応可能にする。【解決手段】図９の各横軸には各フレーム毎の「Ｌフラグ」の値を付している。Ｌフラグが“０”から“１”に変化すると、変化したフレームの次のフレームがループスタートフレームに設定される。また、Ｌフラグが“１”から“０”に変化すると、変化した当該フレームがループエンドフレームに設定される。これにより、図９（ｂ）のように、ループサイズが１フレームであっても対応可能である。【選択図】  図９
2004294778.tif 000002
【特許請求の範囲】
【請求項１】
一フレーム単位で波形データを記憶する波形メモリであって、前記一フレームは各々にアドレスが付与された複数のサブフレームから構成され、一の前記サブフレームは一または複数の圧縮サンプルから成るｎビットの圧縮サンプル部とｍビットの副情報とから構成され、前記一フレームに渡る副情報には、少なくとも前記圧縮サンプルを伸長するための伸長情報と前記波形データのループ区間を示すループフラグとを含む、波形メモリと、
サンプルアドレスを変化させつつ前記サブフレーム単位で前記波形データを読み出すことにより、前記圧縮サンプルと、前記副情報とを逐次読み出す読出し手段と、
新たに読み出された圧縮サンプルと、過去に読み出された伸長情報とに基づいて前記発音チャンネル毎に前記波形データのサンプリング値を逐次再生する再生手段と、
前記副情報中の前記ループフラグが読み出される毎に、該ループフラグの値が直前に読み出された他のフレームのループフラグの値から変化したか否かを監視し、該ループフラグが第１の論理値から第２の論理値に変化すると、変化が生じたフレームの次のフレームをループスタートフレームに設定する一方、前記ループフラグが前記第２の論理値から前記第１の論理値に変化すると、その変化が生じたフレームをループエンドフレームとして特定し、該ループエンドフレームの全サブフレームの読み出し後、前記ループスタートフレームの読み出しが開始されるように前記サンプルアドレスを設定するループ制御手段と
を有することを特徴とする楽音合成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、波形データをフレーム圧縮して記憶し、当該波形データを演奏情報に基づいて再生する音源装置に用いて好適な楽音合成装置に関する。
【０００２】
【従来の技術】
波形メモリ音源装置における波形データの記憶容量を削減するために、波形データを所定のフレーム単位に区切って符号化することにより圧縮する技術が知られている。波形データの符号化方法には種々の方法があるが、「線形予測方式」は圧縮効率が高く、再生時における処理負荷も少ないために多用されている。なお、線形予測方式とは、ある注目サンプルより過去の数個のサンプリング値と所定の生成多項式とに基づいて、当該注目サンプルの予測値を求め、その予測値と実際値との差（残差値）をデータとして記録してゆく方式である。
【０００３】
波形データを再生するにあたっては、波形データの最初部分すなわちアタック区間を１回だけ再生し、その後は残りの部分すなわちループ区間を繰り返し再生することが一般的である。このため、一連のフレーム中、ループ区間の最初のフレームであるループスタートフレームおよびループ区間の最終フレームであるループエンドフレームを特定しておく必要がある。
【０００４】
特許文献１においては、レジスタにループスタートフレームおよびループエンドフレームの各フレーム番号を記憶させ、これによってフレームの読出し制御を行う技術が開示されている。また、特許文献２においては、各フレームに２ビットのフラグ（ループスタートフラグおよびループエンドフラグ）を追加し、これらのフラグによってループ区間を識別する技術が開示されている。すなわち、ループスタートフラグが“１”であれば当該フレームがループスタートフレームであり、ループエンドフラグが“１”であれば当該フレームがループエンドフレームである。
【０００５】
【特許文献１】特公平０７−０７６８７３号公報
【特許文献２】特許第２６７４１６１号公報
【０００６】
【発明が解決しようとする課題】
しかし、特許文献１記載の技術においては、「フレーム番号」によってループスタートフレームおよびループエンドフレームを管理しているため、例えばフレームの増減が発生した場合等において管理が煩雑になる。また、特許文献２記載の技術においては、各フレームに２ビットのフラグを設ける必要がある。これでは、フレーム数が増大するとフラグの情報量も膨大になり、波形メモリの所要記憶容量が増大するという問題があった。
この発明は上述した事情に鑑みてなされたものであり、データの管理が容易であり、かつ、波形メモリの所要記憶容量を削減できる楽音合成装置を提供することを目的としている。
【０００７】
【課題を解決するための手段】
上記課題を解決するため本発明にあっては、下記構成を具備することを特徴とする。なお、括弧内は例示である。
請求項１記載の楽音合成装置にあっては、一フレーム単位で波形データを記憶する波形メモリであって、前記一フレームは各々にアドレスが付与された複数のサブフレームから構成され、一の前記サブフレームは一または複数の圧縮サンプルから成るｎビットの圧縮サンプル部とｍビットの副情報とから構成され、前記一フレームに渡る副情報には、少なくとも前記圧縮サンプルを伸長するための伸長情報と前記波形データのループ区間を示すループフラグ（Ｌフラグ）とを含む、波形メモリ（２）と、サンプルアドレスを変化させつつ前記サブフレーム単位で前記波形データを読み出すことにより、前記圧縮サンプルと、前記副情報とを逐次読み出す読出し手段（１０２）と、新たに読み出された圧縮サンプルと、過去に読み出された伸長情報とに基づいて前記発音チャンネル毎に前記波形データのサンプリング値を逐次再生する再生手段（１１０，１１２）と、前記副情報中の前記ループフラグ（Ｌフラグ）が読み出される毎に、該ループフラグの値が直前に読み出された他のフレームのループフラグの値から変化したか否かを監視し、該ループフラグが第１の論理値（“０”）から第２の論理値（“１”）に変化すると、変化が生じたフレームの次のフレームをループスタートフレームに設定する一方、前記ループフラグが前記第２の論理値（“１”）から前記第１の論理値（“０”）に変化すると、その変化が生じたフレームをループエンドフレームとして特定し、該ループエンドフレームの全サブフレームの読み出し後、前記ループスタートフレームの読み出しが開始されるように前記サンプルアドレスを設定するループ制御手段（１０６）とを有することを特徴とする。
【０００８】
【発明の実施の形態】
１．実施形態におけるデータ構造
１．１．波形データの全体構造
次に本発明の一実施形態について説明するが、最初に本実施形態において採用されている波形データを波形メモリに記憶するためのデータ構造を、図２〜図３を参照し説明する。まず、図２において２００は波形データファイルであり、その内部には各種の楽音波形が格納される波形データ領域２０４，２０６，……が設けられている。２０２は管理領域であり、これら波形データ領域２０４，２０６，……のデータサイズ、波形の名称等の管理情報が格納される。また、一の波形データ領域は、複数のフレーム２１１〜２１ｎと、ヘッダ部２１０とから構成されている。
【０００９】
１．２．フレーム構造
本実施形態においては、線形予測形式により圧縮された波形データが上記各フレームに記憶されている。すなわち、過去の数サンプルにおけるサンプリング値に対して所定の生成多項式を施すことによって注目サンプルの予測値が予め求められ、実際のサンプリング値からこの予測値を減算した減算結果が「残差符号」として各フレームに記憶されている。その詳細を図３を参照し説明する。
【００１０】
図３（ａ）は「１」フレーム内におけるデータ構造を示す。図において「１」フレームは「１６０」ビットから成り、「１６」ビット毎に「１０」個のサブフレームに分割されている。これらサブフレームは、波形メモリの各アドレスに記憶されるデータであって、フレーム内のアドレスＳＦＡＤに対応させて「００」〜「０９」のサブフレーム番号が付与されている。一のサブフレームの先頭「４」ビットは副情報であり、残り「１２」ビットは残差符号が格納されている。「１」フレーム中の副情報中において、第００サブフレームにおいては残差符号のビット数ｂｎ（「１」，「２」，「３」，「４」，「６」または「１２」）が記憶される。なお、「１」フレーム中ではこのビット数ｂｎは共通である。次に、第０１〜第０５サブフレームの副情報においては、上記生成多項式において用いられる予測係数が記憶される。
【００１１】
また、第０６，第０７サブフレームの副情報には、量子化幅すなわちサンプリング結果の最下位ビットに対応するレベル幅が記憶される。また、第０８，第０９サブフレームの副情報において各々先頭「１」ビットには、ＬフラグおよびＥフラグが各々記憶される。なお、これらフラグの意味については後述する。そして、これら第０８，第０９サブフレームの副情報の他のビットには、その他の情報が記憶される。ここで、各フレームに含まれる副情報は、「当該フレームの次に読み出されるフレーム内の残差符号に対する副情報」である。
【００１２】
例えば、図３（ａ）の例においては一の残差符号のビット数ｂｎは「４」ビットであるから、このフレームの前に読み出されるフレームにおいて、第００サブフレームの副情報には「４」が記憶されることになる。これは、本実施形態においては「１」フレーム内の各サブフレームが必要な数だけ順次読み出され、楽音信号が再生されるため、最初の（第００サブフレーム）の残差符号が読み出される前に上記各副情報を確定させておく必要があることに鑑みてである。このため、最初の第１フレームに対する副情報はヘッダ部２１０に記憶されている。但し、繰り返しループ再生される区間（ループ区間）の最後のフレームであるループエンドフレームにおいては、該区間の最初のフレームであるループスタートフレームに対する副情報が記憶される。
【００１３】
次に、復号化される各サブフレームのストリームを図３（ｂ）に示す。図において第Ｋフレームを構成する第Ｋ＿００〜第Ｋ＿０９サブフレームが順次読み出されることによって、これらサブフレームに含まれる残差符号がデコードされ、楽音波形が逐次再生される。各フレームにおいて残差符号のビット数ｂｎは各々異なるが、これは「楽音波形の変化の大きさ」および求められる精度に応じて、符号化時に最適なビット幅が選択された結果である。換言すれば、本実施形態においては、求められる精度に応じて残差符号のビット数ｂｎは種々変化するが、「１」フレームのデータ長はビット数ｂｎに拘らず常に一定（１６０ビット）である。
【００１４】
２．実施形態のハードウエア構成
２．１．全体構成
次に、本実施形態による電子楽器のハードウエア構成を図１を参照し説明する。なお、本実施形態の電子楽器は、汎用パーソナルコンピュータと、該パーソナルコンピュータ上で動作するアプリケーションプログラムとによって構成されている。
図において、１００は音源部であり、パーソナルコンピュータに挿入されるカードとして構成されている。２はＲＡＭであり、パーソナルコンピュータにおいて使用される各種データおよびプログラムが記憶されている。特に、ＲＡＭ２には、音源部１００において使用される波形データが記憶されている。波形データのデータ構造は先に図２，図３において説明した通りである。このように、パーソナルコンピュータが元々装備しているＲＡＭの一部を波形メモリとして使用することにより、音源部１００自体が装備すべきメモリ容量を削減することが可能になる。
【００１５】
４はフラッシュメモリであり、パーソナルコンピュータのイニシャルプログラムローダ等が格納される。６はＣＰＵであり、後述するプログラムに基づいて、バスライン１４を介して各部を制御する。８は操作子であり、パーソナルコンピュータとして元々装備すべきキーボード、マウス等の操作子の他、演奏用のキーボード等も含まれる。１０は表示器であり、ユーザに対して各種情報を表示する。１２は通信Ｉ／Ｏ部であり、ローカルエリアネットワークを介して他の機器との間で波形データ等のやりとりを行う。１６はサウンドシステムであり、音源部１００から供給された楽音信号を放音する。
【００１６】
音源部１００の内部において１２０は制御レジスタであり、音源部１００を制御するために、ＣＰＵ６によって種々のパラメータが書き込まれる。１０２はフレーム読出し部であり、合成フレームアドレスＧＦＡＤに応じて、ＲＡＭ２の波形メモリ領域から必要とする残差符号を含むサブフレームを「１」サブフレーム単位で読み出す。１０４はアドレス発生部であり、制御レジスタ１２０に書き込まれたｆナンバ（記録時の楽音信号のピッチと出力すべき楽音信号のピッチとの比）と、当該フレームのサンプリング周期とに応じて、合成フレームアドレスＧＦＡＤと、サンプルアドレスＳＣＮＴとを出力する。ここで、合成フレームアドレスＧＦＡＤとは、読み出すべきフレームを示すフレームアドレスＦＡＤと、当該フレーム内において読み出すべきサブフレームを示すサブフレームアドレスＳＦＡＤとを合成して成る信号である。また、サンプルアドレスＳＣＮＴは、整数部ＳＣＮＴｉと小数部ＳＣＮＴｆから成る。整数部ＳＣＮＴｉは「１」フレーム内における残差符号の番号を示し、小数部ＳＣＮＴｆはその前後の波形サンプル値に対する補間係数を示す。ここで、サブフレームアドレスＳＦＡＤは、サンプルアドレスＳＣＮＴの整数部が各サブフレームに記憶された残差符号の数だけ増加する毎に、「１」増加する。
【００１７】
１０６は副情報デコード部であり、フレーム読出し部１０２が読み出したサブフレームのうち副情報部分が入力され、これを各フレームの期間にわたり蓄積することにより、その次のフレームに対する副情報をデコードし、次のフレーム期間、該フレームの残差符号の復号化等のために音源部１００の各ブロックに供給する。１０８は残差情報キャッシュ部であり、フレーム読出し部１０２が読み出したサブフレームのうちの残差符号部分が入力され、そこに含まれる最新の数サンプルの残差符号を記憶するとともに、サンプルアドレス整数部ＳＣＮＴｉの進行量に相当する数の残差符号を逐次出力する。残差情報キャッシュ部１０８から出力すべき残差符号が足りなくなるタイミングで、アドレス発生部１０４から次のサブフレームを示す合成フレームアドレスＧＦＡＤがフレーム読出し部１０２に供給され、対応するサブフレームが読み出されることにより、該サブフレームに含まれる残差符号が残差情報キャッシュ部１０８に記憶される。１１０はデコーダ部であり、残差情報キャッシュ部１０８から残差符号が出力される毎に、副情報デコード部１０６からの副情報に含まれる予測係数や量子化幅を用いて該残差符号をデコードすることによって波形データのサンプル値を求め、求めたサンプル値をデコーダ部１１０の内部に設けられているキャッシュメモリに逐次格納してゆく。
【００１８】
１１２は補間部であり、デコーダ部１１０において得られた最新の「２」サンプル値に対して、サンプルアドレス小数部ＳＣＮＴｆに基づく補間演算を施す。１１４は音量ＥＧ部であり、この補間されたサンプル値に対して、所定の音量エンベロープを付与する。ここで、上記構成要素１０２〜１１４は、複数発音チャンネルの楽音信号を合成するためにサンプリング周期毎に時分割で駆動される。すなわち、サンプリング周期を発音チャンネル数で分割した時分割のスロット毎に全く異なる発音チャンネルの処理が行われる。また、後述する各レジスタ、バッファ等も発音チャンネル毎に設けられている。１１６はミキサ部であり、各サンプリング周期毎に、音量ＥＧ部１１４から出力された複数発音チャンネルの楽音信号をミキシングし、ステレオの楽音信号として出力する。１１８はＤＡコンバータであり、このステレオの楽音信号をアナログ信号に変換する。このアナログ信号の楽音信号は、サウンドシステム１６を介して発音されることになる。
【００１９】
２．２．アドレス発生部１０４の構成
次に、アドレス発生部１０４の構成を図４を参照し説明する。図において１４４は１／３サンプル累算器であり、１サンプリング周期毎に、ｆナンバの「１／３」の値を逐次累算する。１５０は乗算器であり、この累算結果ＡＣに「３」を乗算する。すなわち、この乗算結果はｆナンバをサンプリング周期毎に累積した値に等しいものであり、該乗算結果はサンプルアドレスＳＣＮＴとして出力される。
【００２０】
１４８は変換器であり、累算器１４４の累算結果ＡＣと、残差符号のビット数ｂｎとに基づいて、サブフレームアドレスＳＦＡＤ＝ＡＣ・ｂｎ／４を出力する。ここで、変換器１４８において用いられる「ビット数ｂｎ」は、通常は副情報デコード部１０６から逐次供給されるビット数ｂｎである。ここで、例えば、ビット数ｂｎが最大値「１２」であったと仮定すると、サブフレームアドレスＳＦＡＤは累算結果ＡＣの３倍すなわちサンプルアドレスＳＣＮＴに等しくなる。従って、サンプルアドレスＳＣＮＴが「１」増加する毎に「１」サブフレームが読み出されることになる。また、ビット数ｂｎが「４」であったと仮定すると、サブフレームアドレスＳＦＡＤは累算結果ＡＣすなわち、サンプルアドレスＳＣＮＴの「１／３」に等しくなる。従って、サンプルアドレスＳＣＮＴが「３」増加する毎に「１」サブフレームが読み出されることになる。
【００２１】
以上の動作は、ビット数ｂｎが「１２」または「４」以外の値であった場合も同様である。このように、サブフレームアドレスＳＦＡＤは、サンプルアドレスＳＣＮＴが各サブフレームに含まれる残差符号のサンプル数だけ増加する毎に、「１」づつ増加する。各ビット数ｂｎに対する「１」フレームあたりのサンプル数と、サブフレームアドレスＳＦＡＤとの関係を以下に列挙しておく。
2004294778.tif 000003
【００２２】
このように、本実施形態においては、累算器１４４の累算単位をサンプルアドレスＳＣＮＴの「１／３」にしたため、サンプルアドレスＳＣＮＴに対応するサブフレームアドレスＳＦＡＤを算出するための演算は、「１／４」または「１／２」を除数とする除算と、乗算の組み合わせにより実現できる。ここで、「１／４」または「１／２」を除数とする除算はシフト演算によって実行可能であり、乗算は加算器とシフタとによって実現できるため、変換器１４８はシフタおよび加算器等によって実現することができ、除算器等は不要である。これにより、変換器１４８の構成をきわめて簡易にすることができる。
【００２３】
さて、変換器１４８においては、サブフレームアドレスＳＦＡＤが「９」（第０９サブフレームに対応する）に達した後に桁上りすると、フレーム終了パルスＦＥＮＤが累算器１４４に供給される。累算器１４４においては、フレーム終了パルスＦＥＮＤが供給されると、累算結果から「今回のフレームにおける残差符号数／３」に相当する値が減算され、累算が続行される。次に、１４２はフレームカウンタであり、制御レジスタ１２０内に記憶された開始フレームアドレスを初期値として、上記フレーム終了パルスＦＥＮＤが供給される毎にカウント結果を「１」フレーム分のアドレス数（この場合は「１０」）づづインクリメントする。このカウント結果がフレームアドレスＦＡＤとして出力される。１４６は合成部であり、上記フレームアドレスＦＡＤとサブフレームアドレスＳＦＡＤとを合成し、その結果を合成フレームアドレスＧＦＡＤとして出力する。
【００２４】
１４１はループ制御回路であり、制御レジスタ１２０からループスタートフレームアドレスＬＳを受信するとともに、副情報デコード部１０６からループエンドフレーム指示信号ＬＥを受信し、フレームカウンタ１４２のループ制御を行う。すなわち、副情報デコード部１０６から当該フレームがループエンドフレームであることを示す該指示信号ＬＥが供給されると、ループ制御回路１４１においては、次にフレーム終了パルスＦＥＮＤが供給された時にフレームアドレスＦＡＤが強制的にループスタートフレームアドレスＬＳに設定されることになる。
【００２５】
２．３．デコーダ部１１０の構成
次に、デコーダ部１１０の詳細構成を図５を参照し説明する。
図において１６０は逆量子化部であり、残差符号と量子化幅とに基づいて、予測値と実際値の残差である残差値を出力する。１６２は線形予測部であり、過去の「２」サンプリング周期におけるサンプリング値Ｄ１，Ｄ２と予測係数とに対して所定の生成多項式を適用することにより、最新のサンプリング周期におけるサンプリング値の予測値を算出する。１６４は加算器であり、この予測値と残差値とを加算することにより、最新のサンプリング周期におけるサンプリング値を算出する。なお、ここでのサンプリング周期は、音源部１００の各ブロックが動作の基準としているサンプリング周期ではなく、波形メモリに記憶されている波形データの各サンプルの記録順としてのサンプリング周期である。
【００２６】
１６８はループスタートサンプリング値バッファであり、ループスタートフレームアドレスＬＳの直前フレームにおける最後の「２」サンプリング値を記憶する。１６６は波形データキャッシュメモリであり、算出されたサンプリング値を複数周期に渡って記憶するとともに、過去の「２」サンプリング周期におけるサンプリング値Ｄ１，Ｄ２を上記線形予測部１６２に供給する。
【００２７】
但し、現在のサンプリング周期がループスタートフレームの最初のサンプリング周期である場合は、ループスタートサンプリング値バッファ１６８に記憶された「２」サンプリング値がＤ１，Ｄ２として線形予測部１６２に供給される。また、現在のサンプリング周期がループスタートフレームの第２番目のサンプリング周期である場合は、ループスタートフレームの最初のサンプリング値がＤ１として、値バッファ１６８に記憶された最後の「１」サンプリング値がＤ２として線形予測部１６２に供給される。これは、アタック区間からループ区間に移行した時と、ループ区間の繰り返し再生を行っている時とにおいて、ループ区間の再生結果を一致させるためである。
【００２８】
以上の本実施形態では、楽音のピッチに応じた速さで増加するサンプルアドレスＳＣＮＴに応じて、残差情報キャッシュ部１０８から順次残差符号を取り出してデコードしている。そして、残差情報キャッシュ部１０８内にサンプルアドレスＳＣＮＴに対応する残差符号が無ければ、その残差符号を含むサブフレームのアドレスＧＦＡＤがアドレス発生部１０４からフレーム読出し部１０２に供給され、該アドレスＧＦＡＤにより読み出されたサブフレームの残差符号が残差情報キャッシュ部１０８に補充される。読み出されたサブフレームに含まれる副情報は、同時に副情報デコード部１０６にも供給され、フレーム毎に副情報が再生される。
【００２９】
残差符号を復号するためには各フレームの副情報が必要であるが、本実施形態では残差符号のために読み出されたサブフレームから副情報が再生されるので、別途ＲＡＭ２をアクセスして副情報を読み出す必要が無い。そのため、伸長に必要な副情報を供給する回路の構成をきわめて簡単にすることができる。また、本実施形態では、ＣＰＵ６等の他のデバイスと共有されたバスライン１４を使用して波形メモリをアクセスしているが、各発音チャンネル毎の波形メモリへのアクセス頻度が略一定であり、あまり変動しないので、他のデバイスの動作に与える悪影響が少ない。
【００３０】
３．実施形態の動作
３．１．ノートオンイベント処理
次に、本実施形態の動作について説明する。本実施形態においては、パーソナルコンピュータ内のシーケンサプログラム等によってＭＩＤＩイベントを発生させることが可能であり、通信Ｉ／Ｏ部１２を介して外部からＭＩＤＩ信号を入力することも可能である。これらによってノートオンイベントが発生すると、図７に示すノートオンイベント処理ルーチンが起動される。図において処理がステップＳＰ１に進むと、当該ノートオンイベントにおけるパート番号、ノート番号およびベロシティが各々変数ＰＴ、ＮＮおよびＶＬに代入される。また、音量エンベロープ評価値ＭＥなる変数には、所定の最大値ＭＥｍａｘが代入される。
【００３１】
次に、処理がステップＳＰ２に進むと、制御レジスタ１２０内において現在のところ発音のために割り当てられていない空きチャンネルが検索される。この空きチャンネルには、ノートオフされた後に音量が減衰して音量レベルが「０」となって解放された発音チャンネルが含まれる。次に、処理がステップＳＰ３に進むと、空きチャンネルが存在するか否かが判定される。存在すれば「ＹＥＳ」と判定され処理はステップＳＰ４に進む。ここでは、当該空きチャンネルのチャンネル番号が変数ＡＳに格納される。
【００３２】
次に、処理がステップＳＰ５に進むと、上記パート番号ＰＴ、ノート番号ＮＮ、ベロシティＶＬに応じた楽音制御パラメータおよび音量エンベロープ評価値ＭＥが制御レジスタ１２０内のチャンネル番号ＡＳに対応する領域に書き込まれる。次に、処理がステップＳＰ６に進むと、チャンネル番号ＡＳに対して発音開始コマンドが書き込まれる。これにより、当該チャンネル番号ＡＳに係る楽音合成処理が開始される。なお、詳細は後述するが、チャンネル番号ＡＳに対応する領域に書き込まれた評価値ＭＥ（ＡＳ）は、副情報デコード部１０６によって、時間の経過とともに徐々に低下するように更新される。
【００３３】
ところで、ノートオンイベントが発生した時に空きチャンネルが無ければ、上記ステップＳＰ３において「ＮＯ」と判定され、処理はステップＳＰ７に進む。ここでは、音源部１００の全発音チャンネルないし所定のルールで絞り込まれた一部の発音チャンネルについて、制御レジスタ１２０の各発音チャンネルＣＨに対応する領域から音量エンベロープ評価値ＭＥ（ＣＨ）（詳細は後述する）と音量エンベロープＥＧ（ＣＨ）とが読み出される。そして、両者は同発音チャンネルＣＨの音量レベルＬＶＬ（ＣＨ）として合成され、それらが相互に比較されて該音量レベルＬＶＬ（ＣＨ）の最も低いチャンネルがトランケートチャンネルに設定される。そして、このトランケートチャンネルの番号がチャンネル番号ＡＳに代入される。次に処理がステップＳＰ８に進むと、該トランケートチャンネル番号ＡＳの音量レベルが急速に減衰される。そして、該チャンネル番号ＡＳの音量レベルが「０」になるとステップＳＰ５，ＳＰ６が実行され、上述ように当該チャンネル番号ＡＳにおいて、新たなノートオンイベントに基づく楽音合成処理が開始される。
【００３４】
３．２．フレーム読出し処理
ある発音チャンネルＣＨにおいて楽音合成処理が開始されると、サンプルアドレスＳＣＮＴの進行に応じて、前記開始フレームアドレスの示すフレームから、各フレームを構成するサブフレームが順次読み出される。そして、１つのフレームの全サブフレームの読み出しが終了すると、次のフレームのサブフレームの読み出しへと移行するが、このとき、副情報デコード部１０６では、読み終わったフレームの副情報が次のフレームの副情報として音源部１００の各ブロックに供給される。一方、各フレームの第０８，第０９サブフレームが読み出されたときには、副情報デコード部１０６にて、図８に示すフレーム読出しルーチンが起動される。この処理は、副情報デコード部１０６の動作を制御するマイクロプログラム、ないし、副情報デコード部１０６内の対応するロジック回路として実装される。図８において処理がステップＳＰ２０に進むと、指定されたフレームがＲＡＭ２からフレーム読出し部１０２に転送される。
【００３５】
次に、処理がステップＳＰ２２に進むと、この読み終わったフレーム内のＥフラグが“１”であるか否かが判定される。ここで「ＹＥＳ」と判定されると、制御レジスタ１２０内の当該発音チャンネルＣＨに係る音量エンベロープ評価値ＭＥ（以下、発音チャンネルＣＨを添字としてＭＥ（ＣＨ）という）が「１」だけデクリメントされる。なお、Ｅフラグが“０”であればステップＳＰ２４はスキップされるため、評価値ＭＥ（ＣＨ）には変化が生じない。このように、音量エンベロープ評価値ＭＥ（ＣＨ）はフレーム読出しルーチンが起動される毎に減少されるか維持されるかの何れかになり、増加されることは無い。この音量エンベロープ評価値ＭＥ（ＣＨ）を構成するレジスタは、デクリメント機能の付いた簡単なダウンカウンタで構成できる。
【００３６】
ここで、Ｅフラグの意味について、図６を参照し説明しておく。まず、同図において特性Ａは、波形データが元々有している（音量ＥＧ部１１４においてエンベロープが付与される前に有している）音量エンベロープ特性の一例である。ここで、「音量エンベロープ特性Ａが将来取り得る最大値」は一点鎖線によって示す特性Ａ’のようになる。音量エンベロープ評価値ＭＥ（ＣＨ）は、この特性Ａ’の時間軸方向を「フレーム」単位に粗くし、レベルを所定の量子化幅単位に粗くしたものに略等しい。
【００３７】
但し、評価値ＭＥ（ＣＨ）の初期値は最大値ＭＥｍａｘに設定されるため、発音開始から実際に評価値ＭＥ（ＣＨ）が特性Ａ’に対応する値になるまでには一般的には数フレームの期間を要する。なお、評価値ＭＥ（ＣＨ）上に付されている数字“１”または“０”は、Ｅフラグの値である。上述したように、本実施形態においては、トランケートチャンネルは音量エンベロープ特性Ａによって決定されるわけではなく、音量エンベロープ評価値ＭＥによって決定される。すなわち、「音量エンベロープ特性Ａが将来取り得る最大値」が最も低い発音チャンネルがトランケートチャンネルとして選択されるのである。これにより、音量エンベロープが一時的に低くなっているものの、将来高くなることが確実である発音チャンネルについては、トランケートチャンネルとして選択されることが未然に防止されている。なお、各波形データのヘッダ部２１０に該波形データの評価値の初期値を記憶しておき、最大値ＭＥｍａｘに代えて、これを評価値ＭＥ（ＣＨ）の初期値として用いるようにしてもよい。その場合は、発音直後から評価値ＭＥ（ＣＨ）は特性Ａ’に対応する値になる。
【００３８】
図８に戻り、処理がステップＳＰ２６に進むと、当該発音チャンネルＣＨに係る直前Ｌ値ＰｒｅＬ（ＣＨ）なる変数が“０”であるか否かが判定される。なお、この直前Ｌ値ＰｒｅＬ（ＣＨ）は、当該発音チャンネルＣＨにおいて前回に読み出されたフレームのＬフラグを保持するための変数であるが、ノートオンイベントが発音チャンネルＣＨに割り当てられた際には、当該発音チャンネルで読み出す波形データのヘッダ部２１０に記憶された当該波形データのＬフラグの初期値に基づいて“１”または“０”に初期化されている。
【００３９】
ここで、ステップＳＰ２６以後の処理内容を図９（ａ）〜（ｄ）に示す具体例に基づいて説明する。これらの図において横軸はフレーム、縦軸は音量エンベロープ評価値ＭＥである。横軸に沿って配列された数値“１”または“０”は各フレーム内のＬフラグの値であるが、最左端の数値は初期設定された直前Ｌ値ＰｒｅＬ（ＣＨ）の値である。まず、アタック区間とループ区間とが共にある程度の長さを有する一般的な波形として、図９（ａ）に示す波形を例として説明する。図９（ａ）の例においては、直前Ｌ値ＰｒｅＬ（ＣＨ）の初期値は“０”である。このため、第１フレームが読み出され、フレーム読出しルーチン（図８）が最初に呼び出された時、ステップＳＰ２６においては「ＹＥＳ」と判定され、処理はステップＳＰ３６に進む。ここでは、読み出されたＬフラグが“１”であるか否かが判定される。ここで「ＮＯ」と判定されると、処理はステップＳＰ４２に進み、Ｌフラグの値が直前Ｌ値ＰｒｅＬ（ＣＨ）に代入される。
【００４０】
以下、フレームが読み出される度に同様の処理が繰り返される。そして、図９（ａ）の例においては、第１〜第２２フレームに含まれるＬフラグが“０”であったのに対して、第２３フレームにおいてＬフラグが“１”に変更されている。従って、第２３フレームの読出しに伴ってフレーム読出しルーチン（図８）が実行され、ステップＳＰ２６を介して処理がステップＳＰ３６に進むと、ここでは「ＹＥＳ」と判定され処理はステップＳＰ３９に進む。なお、ステップＳＰ３６における「ＹＥＳ」の判定は、次のフレームがループスタートフレームであることを示している。ステップＳＰ３９では、ループスタート設定が既に実行済みであるか否かが判定される。ここでは、未だループスタートの設定が実行されていないために「ＮＯ」と判定され、、処理はステップＳＰ４０に進む。
【００４１】
ステップＳＰ４０においては、ループスタート設定処理が実行される。すなわち、第２３フレームにおいてＬフラグが“０”から“１”に切り替わったならば、次の第２４フレームのフレームアドレスがループスタートフレームアドレスＬＳとして制御レジスタ１２０に書き込まれる。また、ループスタートサンプリング値バッファ１６８は、現在のフレーム（第２３フレーム）の最後の２サンプリング値を保持するように制御される。すなわち、バッファ１６８には、ループスタートサンプルの直前２サンプルのサンプリング値が記憶されることになる。なお、ループスタートフレームの伸長に必要な情報のうち、ビット数ｂｎと予測係数と量子化幅とに関しては、ループエンドフレームに記憶させる副情報とすることができるので、ここで保存する必要は無い。
【００４２】
そして、処理がステップＳＰ４２に進むと、直前Ｌ値ＰｒｅＬ（ＣＨ）にＬフラグ（“１”）が代入される。以後、フレームが読み出されフレーム読出しルーチン（図８）が起動されると、直前Ｌ値ＰｒｅＬ（ＣＨ）が“１”であるためにステップＳＰ２６においては「ＮＯ」と判定され、処理はステップＳＰ２８に進む。ここでは、ループスタート設定処理が完了しているか否かが判定される。今回の例においては、先にステップＳＰ４０が実行された際にループスタート設定処理が実行されたため、「ＹＥＳ」と判定され処理はステップＳＰ３２に進む。
【００４３】
ステップＳＰ３２においては、読み出されたＬフラグが“１”であるか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ４２に進み、当該Ｌフラグ（“１”）が直前Ｌ値ＰｒｅＬ（ＣＨ）に代入され、本ルーチンの処理が終了する。以後、Ｌフラグが“１”であるフレームが継続される限り（図９（ａ）の例にあっては、第３１フレームが読み出されるまで）、同様の処理が繰り返される。
【００４４】
次に、第３１フレームが読み出されフレーム読出しルーチン（図８）が実行されたとする。当該フレームに含まれるＬフラグは“０”であるから、処理がステップＳＰ２６，ＳＰ２８を介してステップＳＰ３２に進むと、ここで「ＮＯ」と判定され、処理はステップＳＰ３３に進む。なお、ステップＳＰ３２における「ＮＯ」の判定は、当該フレームがループエンドフレームであることを示している。ステップＳＰ３３においては、アドレス発生部１０４のループ制御回路１４１に対し、読み出し中のフレームがループエンドフレームであることを示すループエンドフレーム指示信号ＬＥを出力する。フレーム読出しルーチン（図８）が実行されるのは各フレームの第０９サブフレームが読み出されたタイミングであるため、ステップＳＰ３３が実行された場合には、その直後にサブフレームアドレスＳＦＡＤが「９」から桁上がりしてフレーム終了パルスＦＥＮＤが発生し、フレームカウンタ１４２にループスタートフレームアドレスＬＳが強制設定される。なお、ループスタートフレームへリターンしたとき、そのループスタートフレームでは、直前に読み出されていたループエンドフレームに記憶されていた副情報に含まれるビット数ｂｎ、予測係数、量子化幅が副情報デコード部１０６から供給され、当該フレームの残差符号の伸長に使用される。
【００４５】
以後、ループスタートフレーム（第２４フレーム）ないしループエンドフレーム（第３１フレーム）間のフレームが音源部１００より繰り返し指定されると、その度にフレーム読出しルーチン（図８）が呼び出される。この場合、ステップＳＰ３６において次のフレームがループスタートフレームであると判定されても、ループスタート設定処理は完了しているので、ステップＳＰ２８，ＳＰ３９においては必ず「ＹＥＳ」と判定され、ループスタート設定処理は実行されない。一方、ステップＳＰ３２にて当該フレームがループエンドフレームであると判定されると、ステップＳＰ３３のループエンド指示により、ループエンドフレーム指示信号ＬＥがループ制御回路１４１に出力され、フレームアドレスＦＡＤがループスタートフレームに戻される。
【００４６】
次に、他の例として、ループ区間がきわめて短い（１フレーム長である）波形データの処理例を図９（ｂ）を参照し説明する。このような短いループ区間は、例えば電気ピアノ等の音色で発生しやすい。同図の例においては、直前Ｌ値ＰｒｅＬ（ＣＨ）の初期値は“０”に設定され、第１〜第８フレームにおけるＬフラグも“０”に設定される。このため、第１〜第８フレームにおいては、ステップＳＰ２６，ステップＳＰ３６，ステップＳＰ４２が繰り返し実行され、この期間内における直前Ｌ値ＰｒｅＬ（ＣＨ）は常に“０”に保たれる。
【００４７】
次に、第１０フレームが読み出されると、ここに含まれるＬフラグは“１”であるから、フレーム読出しルーチン（図８）においてはステップＳＰ３６，ＳＰ３９を介して処理がステップＳＰ４０に進み、次の第１１フレームのフレームアドレスがループスタートフレームアドレスＬＳに設定され、かつ、現在のフレームの最後の２サンプリング値が保持される。次に、ステップＳＰ４２において直前Ｌ値ＰｒｅＬ（ＣＨ）は“１”に設定される。次に、第１１フレームが読み出されると、直前Ｌ値ＰｒｅＬ（ＣＨ）は“１”であって該フレームに含まれるＬフラグは“０”であるから、図８においてステップＳＰ２６，ＳＰ２８，ＳＰ３２を順次介して処理はステップＳＰ３３に進み、当該Ｌフラグが含まれる第１１フレームにおいてループエンドフレーム指示信号ＬＥが供給される。すなわち、この例においては、ループスタートフレームアドレスＬＳの示すフレームがループエンドフレームでもあるため、ループ区間は「１」フレーム長のみであり、きわめて短いループ区間が実現できることが解る。
【００４８】
次に、他の例として、波形データにアタック区間が無く、ループ区間がきわめて短い（１フレーム長である）波形データの処理例を図９（ｃ）を参照し説明する。このような波形データは、例えばシンセリード等の音色で発生しやすい。同図（ｃ）の例においては、直前Ｌ値ＰｒｅＬ（ＣＨ）の初期値は“１”に設定され、第１フレームにおけるＬフラグは“０”に設定される。第１フレームの読出し時にフレーム読出しルーチン（図８）が呼び出されると、ステップＳＰ２６において「ＮＯ」と判定され、処理はステップＳＰ２８に進む。ここで、ループスタート設定処理は完了していないために「ＮＯ」と判定され、処理はステップＳＰ３０に進む。
【００４９】
ステップＳＰ３０においては、ループスタート設定処理が実行される。但し、このステップＳＰ３０においては、第１フレームからループ区間が開始されるように処理が実行される点で上記ステップＳＰ４０の処理とは異なる。すなわち、ループスタートフレームアドレスＬＳには第１フレームのフレームアドレスが強制的に設定され、ヘッダ部２１０に記憶されている第１フレームのビット数ｂｎがループスタートビット数レジスタ１４９に設定されるとともに、ヘッダ部２１０に記憶されている２つのサンプリング値の初期値が、ループスタートサンプリング値バッファ１６８に設定される。
【００５０】
次に、処理がステップＳＰ３２に進むと、Ｌフラグが“０”であるために「ＮＯ」と判定され、処理はステップＳＰ３３に進む。ステップＳＰ３３においては、ループエンド指示処理が実行される。すなわち、当該Ｌフラグを含む第１フレームにおいてはループエンドフレーム指示信号ＬＥがループ制御回路１４１に供給される。すなわち、この例においては、先頭の第１フレームがループスタートフレームでありかつループエンドフレームでもある。
【００５１】
次に、他の例として、波形データにアタック区間が無く、ループ区間が比較的長い波形データの処理例を図９（ｄ）を参照し説明する。このような波形データは、例えばドラム等の音色で発生しやすい。同図の例においては、直前Ｌ値ＰｒｅＬ（ＣＨ）の初期値は“１”に設定され、第１フレームにおけるＬフラグは“０”に設定される。第１フレームの読出し時にフレーム読出しルーチン（図８）が呼び出されると、ステップＳＰ２６において「ＮＯ」と判定され、処理はステップＳＰ２８に進む。ここで、ループスタート設定処理は完了していないために「ＮＯ」と判定され、処理はステップＳＰ３０に進む。
【００５２】
ステップＳＰ３０においては、上述したように第１フレームをループスタートフレームアドレスＬＳとするループスタート設定処理が実行される。そして、Ｌフラグが“１”であるため、ステップＳＰ３２においては「ＹＥＳ」と判定され、ステップＳＰ４２において直前Ｌ値ＰｒｅＬ（ＣＨ）に“１”が代入される。以後、第２〜第１６フレームにおいては、ステップＳＰ２６，ＳＰ２８，ＳＰ３２，ＳＰ４２が繰り返し実行され、この期間内における直前Ｌ値ＰｒｅＬ（ＣＨ）は常に“１”に保たれる。次に、第１７フレームにおいてはＬフラグが“０”になるため、ステップＳＰ３２を介して処理はステップＳＰ３３に進み、第１７フレームにおいてループエンドフレーム指示信号ＬＥが供給される。
【００５３】
上述したように、各具体例においてはループスタートフレームにて何れもループスタート設定処理が１回だけ実行されるとともに、ループエンドフレームにて次の読み出しをループスタートフレームに戻すための処理が毎回実行されている。しかし、ループスタート／ループエンドフレーム間のフレームを実際に繰り返し読み出すか否か（ループ制御回路１４１をアクティブにするか否か）は、音色毎にユーザが自由に設定できる。「繰り返し読み出さない」ように設定されると、各波形データは先頭の第１フレームからループエンドフレームまで順次各１回だけ再生されることになる。
【００５４】
４．変形例
本発明は上述した実施形態に限定されるものではなく、例えば以下のように種々の変形が可能である。
（１）上記実施形態においては図２および図３に示した波形データのフォーマットを用いたが、波形データのフォーマットは必要に応じて種々変更してもよい。例えば、各種データの配置を上記実施形態のものとは異なる配置にすることができる。「１」サブフレームの大きさは「１６」ビットに限られるものではなく、「１２」ビット、「３０」ビット等の幅にしてもよい。また、各サブフレームも副情報「４」ビットと残差符号「１２」ビットとで構成するものに限られず、副情報「６」ビットと残差符号「２４」ビット、あるいは副情報「８」ビットと残差符号「１６」ビット等により構成してもよい。同様に「１」フレームの大きさは「１０」ワード＝「１６０」ビットに限られるものではなく、「６」ワード、「１４」ワード等の大きさにしてもよい。また、残差符号のビット数は「１」，「２」，「３」，「４」，「６」または「１２」以外の値、例えば「８」または「１６」等であってもよい。
【００５５】
（２）上記実施形態においては、２次の線形予測を適用したが、それ以上の高次線形予測を適用してもよく、あるいは複数段の線形予測を適用してもよい。
【００５６】
（３）上記実施形態においては、各フレームに記憶されている副情報は全て次のフレームで使用する副情報であったが、一部の情報（例えばビット数ｂｎ）を当該フレームのための副情報にしてもよい。
【００５７】
（４）上記実施形態においては、フレーム読出しルーチン（図８）はＬフラグおよびＥフラグが読み出されたタイミングで実行されたが、これに代えて、前のフレームから次のフレームへの移行時に実行されるようにしてもよい。
【００５８】
（５）上記各実施形態においては、パーソナルコンピュータ上で動作するアプリケーションプログラムによって電子楽器を実現したが、このアプリケーションプログラムのみをＣＤ−ＲＯＭ、フレキシブルディスク等の記録媒体に格納して頒布し、あるいは伝送路を通じて頒布することもできる。
【００５９】
【発明の効果】
以上説明したように本発明によれば、以上説明したように、本発明によれば、再生手段がサンプルアドレスに従って各サブフレームを読み出してゆくことにより、同時に副情報も取り出すことができる。さらに、一連のフレーム中、ループフラグが第１の論理値から第２の論理値に変化すると、変化が生じたフレームの次のフレームをループスタートフレームに設定するとともに、ループフラグが第２の論理値から第１の論理値に変化すると、その変化が生じたフレームをループエンドフレームに設定するから、各フレーム毎に１ビットの情報によってループ区間を特定することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態の電子楽器のハードウエアブロック図である。
【図２】一実施形態における波形データファイル２００の構造を示す図である。
【図３】各フレーム２１１〜２１ｎのデータ構造を示す図である。
【図４】アドレス発生部１０４のブロック図である。
【図５】残差情報キャッシュ部１０８のブロック図である。
【図６】Ｅフラグに対する一実施形態の動作説明図である。
【図７】一実施形態におけるノートオンイベント処理ルーチンのフローチャートである。
【図８】一実施形態におけるフレーム読出しルーチンのフローチャートである。
【図９】Ｌフラグに対する一実施形態の動作説明図である。
【符号の説明】
２：ＲＡＭ、４：フラッシュメモリ、６：ＣＰＵ、８：操作子、１０：表示器、１２：通信Ｉ／Ｏ部、１４：バスライン、１６：サウンドシステム、１００：音源部、１０２：フレーム読出し部、１０４：アドレス発生部、１０６：副情報デコード部、１０８：残差情報キャッシュ部、１１０：デコーダ部、１１２：補間部、１１４：音量ＥＧ部、１１６：ミキサ部、１１８：ＤＡコンバータ、１２０：制御レジスタ、１４１：ループ制御回路、１４２：フレームカウンタ、１４４：１／３サンプル累算器、１４６：合成部、１４８：変換器、１５０：乗算器、１６０：逆量子化部、１６２：線形予測部、１６４：加算器、１６６：波形データキャッシュメモリ、１６８：ループスタートサンプリング値バッファ、２００：波形データファイル、２０２：管理領域、２１０：ヘッダ部、２１１〜２１ｎ：フレーム、２０４，２０６，……：波形データ領域。
【図１】
2004294778.tif 000004
【図２】
2004294778.tif 000005
【図３】
2004294778.tif 000006
【図４】
2004294778.tif 000007
【図５】
2004294778.tif 000008
【図６】
2004294778.tif 000009
【図７】
2004294778.tif 000010
【図８】
2004294778.tif 000011
【図９】
2004294778.tif 000012