(57)【要約】      （修正有）【課題】並行して複数音の楽音波形生成を行う際、各サンプリング周期内の無用のタイムスロットを極力減らし、効率的な楽音波形生成が行えるようにするとともに、楽音波形生成が破綻するケースが増加することも抑えられる音信号発生装置を提供する。【解決手段】複数チャンネルの楽音を並行して生成する音信号発生装置で各チャンネル毎にキャッシュメモリ４０１を備えて波形データをキャッシュメモリ４０１に先読みするものにおいて、キャッシュに先読みされている波形データの量に基づいて、および／または、アドレス情報の進行の速度に基づいて、複数チャンネルのうち優先的にキャッシュメモリ４０１への波形データの先読みを行うべき所定数のチャンネルを決定し、優先的に先読みを行うべきと決定されたチャンネルについて、波形メモリから波形データを先読みしてキャッシュメモリ４０１に充填する。【選択図】図４
2015158547.tif 000002
【特許請求の範囲】
【請求項１】
所定サンプリング周期で複数チャンネル時分割で動作することにより、該複数チャンネルの楽音を並行して生成する音信号発生装置であって、
複数の波形データを記憶した波形メモリと、
前記複数チャンネルのそれぞれについて、前記波形メモリから読み出す波形データのアドレス情報を生成するアドレス制御手段と、
前記複数チャンネルのそれぞれに対応するキャッシュメモリであって、前記波形メモリから先読みした波形データを格納するものと、
時分割動作で、前記複数チャンネルのそれぞれについて、前記アドレス制御手段で生成されたアドレス情報で指定される波形データを、前記キャッシュメモリから読出し、楽音生成する楽音生成手段と、
前記キャッシュに先読みされている波形データの量に基づいて、前記複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定する手段と、
優先的に先読みを行うべきと決定されたチャンネルについて、前記波形メモリから波形データを先読みして前記キャッシュメモリに充填する手段と
を備えたことを特徴とする音信号発生装置。
【請求項２】
所定サンプリング周期で複数チャンネル時分割で動作することにより、該複数チャンネルの楽音を並行して生成する音信号発生装置であって、
複数の波形データを記憶した波形メモリと、
前記複数チャンネルのそれぞれについて、前記波形メモリから読み出す波形データのアドレス情報を生成するアドレス制御手段と、
前記複数チャンネルのそれぞれに対応するキャッシュメモリであって、前記波形メモリから先読みした波形データを格納するものと、
時分割動作で、前記複数チャンネルのそれぞれについて、前記アドレス制御手段で生成されたアドレス情報で指定される波形データを、前記キャッシュメモリから読出し、楽音生成する楽音生成手段と、
前記アドレス情報の進行の速度に基づいて、前記複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定する手段と、
優先的に先読みを行うべきと決定されたチャンネルについて、前記波形メモリから波形データを先読みして前記キャッシュメモリに充填する手段と
を備えたことを特徴とする音信号発生装置。
【請求項３】
所定サンプリング周期で複数チャンネル時分割で動作することにより、該複数チャンネルの楽音を並行して生成する音信号発生装置であって、
複数の波形データを記憶した波形メモリと、
前記複数チャンネルのそれぞれについて、前記波形メモリから読み出す波形データのアドレス情報を生成するアドレス制御手段と、
前記複数チャンネルのそれぞれに対応するキャッシュメモリであって、前記波形メモリから先読みした波形データを格納するものと、
時分割動作で、前記複数チャンネルのそれぞれについて、前記アドレス制御手段で生成されたアドレス情報で指定される波形データを、前記キャッシュメモリから読出し、楽音生成する楽音生成手段と、
前記キャッシュに先読みされている波形データの量および前記アドレス情報の進行の速度に基づいて、前記複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定する手段と、
優先的に先読みを行うべきと決定されたチャンネルについて、前記波形メモリから波形データを先読みして前記キャッシュメモリに充填する手段と
を備えたことを特徴とする音信号発生装置。
【請求項４】
請求項１から３の何れか１つに記載の音信号発生装置において、
前記複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定する手段は、前記キャッシュに先読みされている波形データの量および／または前記アドレス情報の進行の速度に基づいて前記複数チャンネルに優先順位を付け、その優先順位が最上位から所定数のチャンネルを、優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルと決定することを特徴とする音信号発生装置。
【請求項５】
請求項１から４の何れか１つに記載の音信号発生装置において、
前記波形メモリに記憶された波形データは、連続的に波形サンプルデータを読み出しおよび復号していく必要のある圧縮形式で記憶されているとともに、
前記キャッシュメモリから波形データを読み出して楽音生成する際、読み出した波形データが圧縮形式である場合は線形な波形サンプルデータに復号して楽音生成に使用することを特徴とする音信号発生装置。
【請求項６】
請求項１から５の何れか１つに記載の音信号発生装置において、
前記キャッシュメモリに先読みされている波形データの量が所定量以下になったことをエラーとして検出し、他の発音中のチャンネルに影響を及ぼさないように、該エラーが検出されたチャンネルについてエラー対策として所定のエラー時処理を行うエラー処理手段をさらに備えたことを特徴とする音信号発生装置。
【請求項７】
請求項１から６の何れか１つに記載の音信号発生装置において、
前記波形メモリへのメモリアクセス使用率を計測する手段と、
計測したメモリアクセス使用率を通知する手段と
をさらに備えたことを特徴とする音信号発生装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、波形メモリから波形データを読み出して楽音信号を発生する音信号発生装置に関する。
【背景技術】
【０００２】
従来より、波形メモリ読み出し方式の音信号発生装置が知られている。該方式の音信号発生装置では、予め波形メモリに、所定の音高（ピッチ）の楽音を所定のサンプリング周期でサンプリングして得た一連の波高値を波形データとして格納しておく。楽音発生時には、サンプリング周期毎に、発生させたい楽音の音高に応じて決定されたピッチ情報（Ｆナンバ）を累算し、その累算値をアドレスとして波形メモリから波高値を読み出し、デジタル楽音波形データとして出力する。詳しく言うと、Ｆナンバは整数部と小数部とを有し、その累算値の整数部をアドレスとして波形メモリから波高値（補間処理に用いる連続する所定個数の波形サンプル）を読み出し、小数部は補間処理に利用する。Ｆナンバの値は、元の波形データのピッチからシフトしなくてよい場合は「１」とされ、ピッチアップしたいときは「１」より大きな値とされ、ピッチダウンしたいときは「１」より小さな値とされる。
【０００３】
また、このような音信号発生装置では、時分割動作で複数ｃｈ分の楽音を同時に並行して発生することができる。この場合、例えば１サンプリング周期を均等に分割した各ｃｈのタイムスロットにおいてそれぞれのｃｈの楽音生成動作を行う。波形メモリのアクセスも同様に時分割動作であり、各ｃｈ毎に、そのｃｈに対応するタイムスロットで一定の決められた回数のアクセスを行うようになっていた。基本的に、ｃｈ毎に、あるサンプリング周期内で必要となる波高値はそのサンプリング周期内で読み出しており、全ての発音ｃｈが発音中でも破綻しないように、全ｃｈのタイムスロットが１サンプリング周期内に収まるように設計（例えば発音ｃｈ数を適正な数にまで抑えることなど）されていた。すなわち、全発音ｃｈで、ある程度のピッチアップが為されたとしても、全ての発音が行えるように余裕を持った設計が為されていた。
【０００４】
下記特許文献１には、圧縮形式の波形データを用いた楽音信号発生装置が開示されている。該文献に記載の方式では、１つの圧縮された波高値をデコードして線形（非圧縮）の波高値を得るには、１つ前の線形の波高値が必要である。従って、圧縮された波高値は抜けが無いように順番に読み出してデコードしていく必要があり、ピッチアップしたときには大量のサンプル数の処理をしなければならない。そこで、該文献の方式では、所定値以上の倍率でピッチアップが指定された楽音については、各サンプリング周期で２つの発音ｃｈのリソースを用いて、通常より多くの波高値の読み出しとデコードが行えるようにしている。これにより、全ｃｈに対して、ある程度のピッチアップが指定されたとしても破綻しないように補償された設計がなされていた。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−１５０３２８号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したように従来の音信号発生装置では、複数の楽音が、それぞれある程度ピッチアップされても破綻しないような設計がなされていた。しかし、現実的には、発音する全ｃｈが一斉に限界以上にピッチアップするというケースはほとんどあり得ない。そのため、各サンプリング周期において、波形メモリのアクセスに使用されない無用の空きタイムスロットが散見される場合があるという問題があった。
【０００７】
本発明は、並行して複数音の楽音波形生成を行う際、各サンプリング周期内の無用のタイムスロットを極力減らし、効率的な楽音波形生成が行えるようにするとともに、楽音波形生成が破綻するケースが増加することも抑えられる音信号発生装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、請求項１の発明に係る発明は、所定サンプリング周期で複数チャンネル時分割で動作することにより、該複数チャンネルの楽音を並行して生成する音信号発生装置であって、複数の波形データを記憶した波形メモリと、前記複数チャンネルのそれぞれについて、前記波形メモリから読み出す波形データのアドレス情報を生成するアドレス制御手段と、前記複数チャンネルのそれぞれに対応するキャッシュメモリであって、前記波形メモリから先読みした波形データを格納するものと、時分割動作で、前記複数チャンネルのそれぞれについて、前記アドレス制御手段で生成されたアドレス情報で指定される波形データを、前記キャッシュメモリから読出し、楽音生成する楽音生成手段と、前記キャッシュに先読みされている波形データの量に基づいて、前記複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定する手段と、優先的に先読みを行うべきと決定されたチャンネルについて、前記波形メモリから波形データを先読みして前記キャッシュメモリに充填する手段とを備えたことを特徴とする。
【０００９】
請求項２に係る発明は、所定サンプリング周期で複数チャンネル時分割で動作することにより、該複数チャンネルの楽音を並行して生成する音信号発生装置であって、複数の波形データを記憶した波形メモリと、前記複数チャンネルのそれぞれについて、前記波形メモリから読み出す波形データのアドレス情報を生成するアドレス制御手段と、前記複数チャンネルのそれぞれに対応するキャッシュメモリであって、前記波形メモリから先読みした波形データを格納するものと、時分割動作で、前記複数チャンネルのそれぞれについて、前記アドレス制御手段で生成されたアドレス情報で指定される波形データを、前記キャッシュメモリから読出し、楽音生成する楽音生成手段と、前記アドレス情報の進行の速度に基づいて、前記複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定する手段と、優先的に先読みを行うべきと決定されたチャンネルについて、前記波形メモリから波形データを先読みして前記キャッシュメモリに充填する手段とを備えたことを特徴とする。
【００１０】
請求項３に係る発明は、所定サンプリング周期で複数チャンネル時分割で動作することにより、該複数チャンネルの楽音を並行して生成する音信号発生装置であって、複数の波形データを記憶した波形メモリと、前記複数チャンネルのそれぞれについて、前記波形メモリから読み出す波形データのアドレス情報を生成するアドレス制御手段と、前記複数チャンネルのそれぞれに対応するキャッシュメモリであって、前記波形メモリから先読みした波形データを格納するものと、時分割動作で、前記複数チャンネルのそれぞれについて、前記アドレス制御手段で生成されたアドレス情報で指定される波形データを、前記キャッシュメモリから読出し、楽音生成する楽音生成手段と、前記キャッシュに先読みされている波形データの量および前記アドレス情報の進行の速度に基づいて、前記複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定する手段と、優先的に先読みを行うべきと決定されたチャンネルについて、前記波形メモリから波形データを先読みして前記キャッシュメモリに充填する手段とを備えたことを特徴とする。
【００１１】
請求項４に係る発明は、請求項１から３の何れか１つに記載の音信号発生装置において、前記複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定する手段は、前記キャッシュに先読みされている波形データの量および／または前記アドレス情報の進行の速度に基づいて前記複数チャンネルに優先順位を付け、その優先順位が最上位から所定数のチャンネルを、優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルと決定することを特徴とする。
【００１２】
請求項５に係る発明は、請求項１から４の何れか１つに記載の音信号発生装置において、前記波形メモリに記憶された波形データは、連続的に波形サンプルデータを読み出しおよび復号していく必要のある圧縮形式で記憶されているとともに、前記キャッシュメモリから波形データを読み出して楽音生成する際、読み出した波形データが圧縮形式である場合は線形な波形サンプルデータに復号して楽音生成に使用することを特徴とする。
【００１３】
請求項６に係る発明は、請求項１から５の何れか１つに記載の音信号発生装置において、前記キャッシュメモリに先読みされている波形データの量が所定量以下になったことをエラーとして検出し、他の発音中のチャンネルに影響を及ぼさないように、該エラーが検出されたチャンネルについてエラー対策として所定のエラー時処理を行うエラー処理手段をさらに備えたことを特徴とする。
【００１４】
請求項７に係る発明は、請求項１から６の何れか１つに記載の音信号発生装置において、前記波形メモリへのメモリアクセス使用率を計測する手段と、計測したメモリアクセス使用率を通知する手段とをさらに備えたことを特徴とする。
【発明の効果】
【００１５】
本発明によれば、複数チャンネルの楽音を並行して生成する音信号発生装置で各チャンネル毎にキャッシュメモリを備えて、波形データをキャッシュメモリに先読みするものにおいて、キャッシュに先読みされている波形データの量に基づいて複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定し、優先的に先読みを行うべきと決定されたチャンネルについて、前記波形メモリから波形データを先読みして前記キャッシュメモリに充填する。あるいは、アドレス情報の進行の速度に基づいて複数チャンネルのうち優先的にキャッシュメモリへの波形データの先読みを行うべき所定数のチャンネルを決定し、優先的に先読みを行うべきと決定されたチャンネルについて、前記波形メモリから波形データを先読みして前記キャッシュメモリに充填する。従って、従来のように全発音ｃｈに対して予め波形データアクセス用のタイムスロットを割り当てるのではなく、動的にその都度優先的に先読みすべき所定数のチャンネルを決定してキャッシュへの充填を行うことで、ベストエフォート型の波形メモリアクセスが実現できる。これにより、並行して複数音の楽音波形生成を行う際、各サンプリング周期内の無用のタイムスロットを極力減らし効率的な楽音波形生成が行える。また、全発音ｃｈについて同時に限界以上にピッチアップすることは頻繁にあるケースでもないので、楽音波形生成が破綻するケースが増加することもそれほどは無い。
【００１６】
本発明は、波形メモリから波形データを連続的に読出す必要がある場合に適用して好適である。波形データを連続的に読出す必要があれば、先読みしてキャッシュしておけば必ずそのデータを使うはずだからである。従って、圧縮形式で格納されている波形データや、非圧縮の波形データでも波形メモリのデバイスが連続的な読み出しが高速に行えるメモリデバイスである場合に、本発明を好適に適用できる。
【００１７】
さらに、キャッシュメモリに先読みされている波形データの量が所定量以下になったことをエラーとして検出し、他の発音中のチャンネルに影響を及ぼさないように、該エラーが検出されたチャンネルについてエラー対策として所定のエラー時処理を行うようにすることで、メモリアクセスが破綻したチャンネルが出現しても、適正なエラー処理が行える。波形メモリへのメモリアクセス使用率を計測し、そのメモリアクセス使用率を通知するようにすることで、メモリアクセスが破綻する前に何らかの対処を行うようにできる。
【図面の簡単な説明】
【００１８】
【図１】この発明の実施形態である音信号発生装置を適用した電子楽器のハードウェア・ブロック図
【図２】波形メモリに格納されている波形データのデータ構造図
【図３】アドレス制御回路のハードウェア・ブロック図
【図４】キャッシュ制御回路のハードウェア・ブロック図
【図５】音源の動作のタイムチャート
【図６】ソート用フリップフロップ（ＦＦ）回路の構成、およびソート例を示す図
【図７】優先順位付け処理の手順を示すフローチャート
【図８】優先度の計算処理、ピッチと整数値との対応テーブル、およびキャッシュ充填処理を示す図
【図９】エラー検出処理、および波形バス使用率計測通知処理のフローチャート
【発明を実施するための形態】
【００１９】
以下、図面を用いて本発明の実施の形態を説明する。
【００２０】
図１は、本発明の一実施形態である音信号発生装置を適用した電子楽器の全体のハードウェア・ブロック構成を示す。この電子楽器は、音源１００、波形メモリ１３１、サウンドシステム１３２、中央処理装置（ＣＰＵ）１４１、リードオンリメモリ（ＲＯＭ）１４２、ランダムアクセスメモリ（ＲＡＭ）１４３、記憶装置１４４、表示器１４５、演奏操作子および設定操作子１４６、外部インターフェース（Ｉ／Ｆ）１４７、およびバスライン１４８を備える。音源１００および各部１４１〜１４７は、バスライン１４８により相互に接続されている。
【００２１】
ＣＰＵ１４１は、この電子楽器全体の動作を制御する。ＲＯＭ１４２は、ＣＰＵ１４１が実行するプログラムや各種の定数データなどを格納する。ＲＡＭ１４３は、ワークレジスタなどに用いる。記憶装置１４４には、電源投入時に波形メモリ１３１にロードする波形データなどの各種のデータが格納されている。表示部１４５は、電子楽器のパネル上に設けられた各種の情報を表示するためのディスプレイである。演奏操作子および設定操作子１４６は、ユーザが演奏操作するための例えば複数の鍵を備えた鍵盤など、および、パネル上に設けられた各種の指示を与えるためのスイッチなどの操作子である。ＣＰＵ１４１は、ユーザによる設定操作子の操作を検出し、その操作に応じて各種パラメータの設定等を行う。特に、変更すべきパラメータが音源１００における楽音生成動作にかかわるものである場合は、ＣＰＵ１４１から音源１００に、その操作に応じたパラメータ変更の指示を出し、音源１００内の指定されたパラメータを設定変更する。また、ＣＰＵ１４１は、ユーザによる演奏操作子の演奏操作を検出し、その操作に応じて音源１００に発音開始指示を出す。外部Ｉ／Ｆ１４７は、ＰＣその他の外部機器を接続するためのインターフェースである。音源１００は、ＣＰＵ１４１からの発音開始指示に応じて、楽音波形を生成し、サウンドシステム１３２に出力する。サウンドシステム１３２は、入力した楽音波形（デジタル音響信号）をアナログ音響信号に変換して放音する。
【００２２】
音源１００は、１つの（あるいは複数の）ＬＳＩ（大規模集積回路）で構成されており、音程生成回路１０１、変調信号生成回路１０２、アドレス制御回路１０３、キャッシュ制御回路１０４、メモリ読み出し回路１０５、復号回路１０６、補間回路１０７、フィルタ回路１０８、イコライザ（ＥＱ）１０９、音量制御回路１１０、チャンネル（ｃｈ）累算回路１１１、効果回路１１２、および、制御レジスタ１１３を備える。波形メモリ１３１には、所定のレートでサンプリングされた一連の波高値（波形サンプル）を含む波形データが格納されている。波形データは、音色別や音域別に複数格納されている。それらの波形データは、楽音の発音に先立って記憶装置１４４から読み出して波形メモリ１３１に格納しておく。
【００２３】
制御レジスタ１１３は、発音ｃｈ毎に設けられている。ある発音ｃｈで楽音生成を行いたいとき、ＣＰＵ１４１は、その発音ｃｈの制御レジスタ１１３に所定の指定情報をセットして発音開始指示を出す。セットする指定情報は、例えば、波形メモリ１３１から読み出す波形データを指定する波形指定情報、発音する楽音の音高に応じたピッチ情報（Ｆナンバ）、楽音に与える変調を規定するパラメータ情報、波形データの圧縮方式（非圧縮の指定も含む）、フィルタ回路１０８やＥＱ１０９へのパラメータ情報、音量制御回路１１０で付与するエンベロープを規定するパラメータ情報、および、効果回路１１２で付与する効果（エフェクト）を規定するパラメータ情報などがある。
【００２４】
上述の制御レジスタ１１３を介した発音開始指示を受けると、音源１００は、その制御レジスタ１１３の設定に基づいて、指定された発音ｃｈにおける楽音波形の発生の動作を開始する。音源１００は、時分割動作で、複数ｃｈの楽音生成処理を行う。すなわち、いわゆる１ＤＡＣ周期（１サンプリング周期）の期間中に予め設計上決められている発音ｃｈ数分のタイムスロットを割り当てておき、各ｃｈの楽音生成処理は、対応するタイムスロットの時間期間を利用して時分割で実行する。例外として、キャッシュ制御回路１０４内の所定の回路、ｃｈ累算回路１１１、および効果回路１１２は、各発音ｃｈ対応のタイムスロットとは別のタイミングで動作しているが、これらについては後に詳しく説明する。
【００２５】
ＣＰＵ１４１が、ある発音ｃｈの制御レジスタ１１３に上述した指定情報をセットして発音開始指示を出したとする。以下では、音源１００における当該発音ｃｈのタイムスロットでの楽音生成動作の概要を説明する（該タイムスロット以外のタイミングで行う動作については、その都度その旨を説明する）。
【００２６】
まず、音程生成回路１０１が、各発音ｃｈ毎のタイムスロットで、制御レジスタ１１３で指定されたＦナンバを変調信号生成回路１０２からの変調信号で変調し、変調後のＦナンバをアドレス制御回路１０３に出力する。変調信号生成回路１０２は、音源１００内の各部で利用する複数の変調信号を生成して出力する機能を有する。変調信号生成回路１０２は、音程生成回路１０１に対しては、発生する楽音の音高に対する変調信号を生成して出力する。例えば、変調信号生成回路１０２は、制御レジスタ１１３で指定されたパラメータに応じて、ＬＦＯ（低周波発振器）による変調信号を出力したり、ピッチベンドなどの演奏操作子の操作情報に応じた変調信号を出力するものである。アドレス制御回路１０３は、音程生成回路１０１から入力した変調後のＦナンバを１ＤＡＣ周期毎に累算し、その累算値から作成したアドレス情報をキャッシュ制御回路１０４に出力する。
【００２７】
キャッシュ制御回路１０４は、各発音ｃｈ毎のキャッシュメモリを備える。キャッシュ制御回路１０４は、各発音ｃｈのタイムスロットで、アドレス制御回路１０３からアドレス情報を入力し、該アドレス情報に応じてキャッシュメモリから所定ワード数の波形ワードデータを読み出し、アドレス制御回路１０３に出力する。また、キャッシュ制御回路１０４は、次のＤＡＣ周期においてどのｃｈのキャッシュ充填処理を優先して行うかを規定する優先順位付けの処理と、前のＤＡＣ周期で得られている優先順位で上位にある所定数のｃｈについて波形メモリ１３１から波形データを読み出してキャッシュメモリに充填する処理とを、各発音ｃｈ対応のタイムスロットとは異なるタイミングで実行する。キャッシュ制御回路１０４のこれらの処理については、後に詳しく説明する。
【００２８】
アドレス制御回路１０３は、各発音ｃｈ毎のタイムスロットで、キャッシュ制御回路１０４から出力された所定ワード数の波形ワードデータを入力し、復号回路１０６で復号（デコード）して、補間に必要な複数の波高値を求め、補間回路１０７に渡す。補間回路１０７、フィルタ回路１０８、ＥＱ１０９、および音量制御回路１１０は、それぞれ、各発音ｃｈ毎のタイムスロットで、対応する発音ｃｈの楽音信号処理を実行する。補間回路１０７は、アドレス制御回路１０３から出力された複数の波高値を用いて補間処理を行なう。フィルタ回路１０８は、補間回路１０７で補間された楽音信号に音色変化を与えるためのフィルタリング処理を行う。ＥＱ１０９は、フィルタ回路１０８からの楽音信号に対して周波数特性の調整処理を行う。音量制御回路１１０は、ＥＱ１０９からの楽音信号にエンベロープを付与する。
【００２９】
チャンネル累算器１０６は、音量制御回路１１０からの各発音ｃｈの楽音信号をｃｈ累算し、各ｃｈの楽音をミキシングした楽音信号を生成する。効果回路１１２は、ｃｈ累算した結果に各種のエフェクト（効果）を付与する。効果付与された楽音信号は、サウンドシステム１３２でアナログ信号に変換され、スピーカなどにより放音される。
【００３０】
図２は、図１の波形メモリ１３１に格納されている波形データのデータ構造を示す。波形メモリ１３１には複数の波形データが格納される。１つの波形データＡのデータ構造を説明する。波形データＡは圧縮形式で格納されている。波形データの圧縮方式はどのようなものでもよいが、基本的には、ある時点の波高値をそれ以前の波高値を用いて圧縮する方式である。従って、波形データの読み飛ばしはできず、波形データを先頭から順に抜けなく読み出して復号を繰り返していく必要がある。すなわち、それまでに復号したデータを用いて最新に読み出した圧縮された波高値の復号を行っていく必要がある。例えば、圧縮時には先行の波高値と後続の波高値との差分を記録し、復号時には復号済みの先行の波高値にその差分を加えていくような圧縮方式が適用できる。
【００３１】
図２の２０１，２０２は、線形予測法を用いて圧縮した波形データを示す。線形予測法では、圧縮データは、サンプリングした波高値と線形予測法によって算出される予測値との差である残差データで表現される。波形データＡは複数のフレームデータからなり、１つのフレームデータは１６ワード（１ワードは１６ビットデータであり、ここでは「波形ワードデータ」と呼ぶ）からなる。２０２はフレームデータの構造を示す。Ｐ０，Ｐ１，…は、それぞれ４ビットからなるパラメータデータである。１フレーム内のパラメータデータＰ０〜Ｐ１５は、次のフレームの復号に用いる線形予測係数などのパラメータデータである。Ｒ０，Ｒ１，Ｒ２，…は、それぞれ１つの波高値の残差データ（６ビットの圧縮波形サンプル）である。Ｒ０，Ｒ１，Ｒ２，…は、波形サンプルの時間的な順に並べられている。なお、実際は、この残差データをビットシフトするなどの加工を施すが、ここでは説明を省略する。
【００３２】
任意のフレームの波形ワードデータ中の残差データＲ０をデコードする場合、１つ前のデコード済みの波高値と１つ前のフレームのパラメータデータＰ０〜Ｐ１５と当該残差データＲ０を用いてデコードし、線形の波高値を求める。以下、Ｒ１，Ｒ２，…も同様にしてデコードしていく。なお、先頭フレームＦｒａｍｅ＃０については、前フレームが無いので、残差データのみから順にデコードできるようにしておくか、あるいは別途パラメータデータを用意しておくものとする。
【００３３】
なお、図２の２０２では１波形ワードデータ中に２個の残差データ（圧縮波形サンプル）を含める形式としたが、１波形ワードデータ中の圧縮波形サンプル数は圧縮方式等に応じて適宜決めればよい。ただし、１波形ワードデータ中の圧縮波形サンプル数は２のべき乗とするのが好適である。波形ワードデータを特定するアドレス（波形データの先頭からのワード単位での相対アドレス）の下位に上記べき乗の指数のビット数のインデックスを付け加えたアドレス情報で、波形データ中の任意の圧縮波形サンプルを特定できるからである。このアドレス情報は、線形な波形サンプルが並べられているものと仮定した仮想的な波形データ中で各波形サンプルを特定するアドレスにもなっている。
【００３４】
例えば、図２の２０２では１波形ワードデータ中に２個（２の１乗）の圧縮波形サンプルを含むが、この圧縮形式の波形データＡの中でアドレスＡＤで特定される波形ワードデータ中のＬＳＢ側の圧縮波形サンプルを、上記アドレスＡＤの下位に１ビットの“０”を付加したアドレス情報で特定し、ＭＳＢ側の圧縮波形サンプルを、上記アドレスＡＤの下位に１ビットの“１”を付加したアドレス情報で特定することができる。このアドレスＡＤの下位に１ビット付加したアドレス情報は、図２の波形データＡの全圧縮波形サンプルをデコードして順に並べた仮想的な非圧縮波形データの中で非圧縮波形サンプルを特定するアドレスにもなっている。
【００３５】
図２の２０３に示すように、波形データとして圧縮されていない線形の波形データを使用してもよい。その場合、ランダムアクセス可能となるが、メモリデバイスとしては、アドレス空間上で連続した読み出しがランダムアクセスよりも高速である特徴を持つメモリデバイスを利用するのが好適である。詳しくは後述するが、本発明は、波形メモリから波形データをアドレス空間上で連続的に読み出すケースに適用して好適なものだからである。このような連続的な読み出しが高速なメモリデバイスとしては、例えばバースト転送可能なＮＡＮＤフラッシュやＳＤＲＡＭなどがある。
【００３６】
本実施形態の音源１００は、複数音を同時に発音するために各発音ｃｈで波形データを並行して先読みする場合に、各発音ｃｈに優先順位を付け、その優先順位が上位の所定数の発音ｃｈについて優先的に波形メモリから波形データを先読みしてキャッシュに充填しておく特徴を有する。優先順位は、各発音ｃｈで既にキャッシュに先読みされている波形データの量と楽音信号生成に使用する波形データの消費速度に応じて付ける。これにより、キャッシュに先読みされている波形データの量がより少ないｃｈの優先順位がより高く、ピッチアップ量が大きくて波形データの消費速度がより速いｃｈの優先順位がより高くなるように順位を付けることができる。言わばベストエフォートで波形メモリアクセスが為されるので、１つの発音ｃｈにおいては従来よりピッチアップ量を大きくできるし、全発音ｃｈにおいても（全発音ｃｈで一斉に所定量以上にピッチアップするケースはそれほど無いので）何れかのｃｈで楽音生成が破綻するケースが増加することもほとんど無い。以下では、このような本実施形態の音源１００の特徴を実現するための構成について詳しく説明する。
【００３７】
図３は、アドレス制御回路１０３のハードウェア・ブロック図である。アドレス制御回路１０３は、累算レジスタ３０１、アドレスレジスタ３０２、更新指示信号生成回路３０３、切り出し回路３０４、およびＺ値レジスタ３０５を備える。図３では、累算レジスタ３０１、アドレスレジスタ３０２、およびＺ値レジスタ３０５をそれぞれ１つ（１組）ずつ図示したが、これらのレジスタはそれぞれ全発音ｃｈ分が設けられている。アドレス制御回路１０３内の各部は、１ＤＡＣサイクル毎に、各発音ｃｈに対応するタイムスロットでその発音ｃｈに係る処理を行う。以下では１つの発音ｃｈに注目し、その発音ｃｈのタイムスロットでの処理について説明する。
【００３８】
前段の音程生成回路１０１は、１ＤＡＣサイクル毎に、各発音ｃｈに対応するタイムスロットでその発音ｃｈのＦナンバ（ピッチ情報）を出力する。Ｆナンバは、１９ビットデータであり、上位３ビットが整数部、下位１６ビットが小数部である。累算レジスタ３０１は、上位２８ビットが整数部３１１、下位１６ビットが小数部３１２である。累算レジスタ３０１は、処理対象の発音ｃｈにおける発音開始指示の際に０に初期化され、それ以後は発音停止されるまで、１ＤＡＣサイクル毎に音程生成回路１０１からのＦナンバを累算する。累算は、累算レジスタ３０１の現在値に音程生成回路１０１からのＦナンバを加算し、その結果を累算レジスタ３０１の新たな値にするということである。累算結果のうち、整数部３１１（２８ビット）は、アドレスレジスタ３０２に書き込まれる。小数部３１２（１６ビット）は、補間回路１０７に出力される。
【００３９】
アドレスレジスタ３０２は、処理対象の発音ｃｈにおける波形データの読み出しアドレス情報とインデックスを保持する２８ビットのレジスタである。アドレスレジスタ３０２中、上位２３ビットの領域３２１は波形データのフレームを特定するフレームアドレスＦｒａｍｅ、中位４ビットの領域３２２はフレーム内のワード位置を特定するワードアドレスＡｄｄｒｅｓｓ、下位１ビットの領域３２３はワード内で切り出すべき部分を特定するインデックスＩｎｄｅｘを示す。累算レジスタ３０１の累算結果の整数部３１１は、非圧縮の波形サンプルが並んだ仮想的な波形データ中を進行するアドレスと言える。図２で説明したように、（本実施形態では１波形ワードデータ中に２個の残差データを含む形式を採っているので、）この整数部３１１は、最下位ビットを除く部分が圧縮波形データ中の波形ワードデータを特定するアドレス情報で、最下位ビットがその波形ワードデータ中のＬＳＢ側かＭＳＢ側のどちらの圧縮波形サンプルかを特定するインデックスとなっている。従って、整数部３１１の２８ビットをそのままアドレスレジスタ３０２の２８ビットに書き込むだけで、Ｆｒａｍｅ＋Ａｄｄｒｅｓｓ部分が波形データ中の波形ワードデータの読み出しアドレス情報ＡＤとなり、Ｉｎｄｅｘ部分がその波形ワードデータ中の２つの残差データ中の１つを特定するインデックスとなる。
【００４０】
この読み出しアドレス情報ＡＤは、キャッシュ制御回路１０４に出力される。キャッシュ制御回路１０４は、入力したアドレス情報ＡＤに対応する位置から３ワードの波形ワードデータを読み出してアドレス制御回路１０３に返す。３ワードとしたのは以下の理由による。まず、本実施形態の音源１００では、ピッチアップは最大で４倍までとしている。ピッチアップが４倍の場合、１ＤＡＣサイクル毎に、前回読み出した波形サンプルから４つ進んだ波形サンプルを読み出していくことになる。上述したように各波形サンプルの波高値は圧縮されており、連続して読み出し・デコードしていく必要があるので、最低でも１ＤＡＣ周期中に４波形サンプルの読み出し・デコードが必要である。一方、図２の２０２で説明したように、波形データの１ワードは２つの残差データ（２圧縮波形サンプル）を含むので、連続する４波形サンプルを得るには３ワードを読み出せば必要十分である。例えば、図２の２０２で、４つの残差データＲ１，Ｒ２，Ｒ３，Ｒ４を得るためには３ワードの読み出しが必要である。
【００４１】
切り出し回路３０４は、キャッシュ制御回路１０４から出力された３ワードの波形ワードデータを受け取り、Ｉｎｄｅｘ３２３に応じた位置から４波形サンプル分の圧縮データ（残差データ）を取得し、それらの圧縮データを復号回路１０６に渡して復号する。なお、必要な波形サンプルに対応する残差データ以外の残差データであっても、デコードのために必要なデータは復号回路１０６に渡すものとする。また、読み出した波形ワードデータ中のパラメータデータＰ０〜Ｐ１５は、別途復号回路１０６に渡され、次のフレームの復号処理に使用できるように保持しておくものとする。
【００４２】
復号回路１０６で復号された波形サンプル（線形の波高値）は、Ｚ値レジスタ３０５に格納される。Ｚ値レジスタ３０５は、８つの非圧縮（線形）な波形サンプルを保持するリングバッファである。復号回路１０６は復号した非圧縮な波形サンプルを、Ｚ値レジスタ３０５のその時点で一番古い波形サンプルが保持されている領域以降に上書きする。これによりＺ値レジスタ３０５には、常に最新に読み出した８サンプル分の線形な波高値が記憶されていることになる。補間回路１０７は、Ｚ値レジスタ３１５から補間に利用する所定数の波高値を入力し、さらに小数部３１２を入力し、補間処理を行って、処理対象ｃｈにおける楽音の波高値を求める。なお、復号回路１０６は、復号処理を行う際に、Ｚ値レジスタ３１５内の必要な線形の波高値を参照する。
【００４３】
更新指示信号生成回路３０３は、アドレスレジスタ３０２のアドレス情報ＡＤが８ワード分進む毎に更新指示信号を出力する。キャッシュ制御回路１０４は、この更新指示信号を契機として、キャッシュメモリ中の現在読み出しに使っているブロックを更新する処理を行うが、その処理については後に詳しく説明する。
【００４４】
点線３０６は、読み出す対象の波形データが非圧縮形式（図２の２０３）の場合のデータの流れを示す。この場合、切り出し回路３０４で切り出されたデータは非圧縮の波高値であるから、そのままＺ値レジスタ３０５に書き込まれる。
【００４５】
図４は、キャッシュ制御回路１０４のハードウェア・ブロック図である。キャッシュ制御回路１０４は、キャッシュメモリ４０１、キャッシュ充填制御回路４０２、キャッシュ読出制御回路４０３、先読みカウンタ４０４、現在カウンタ４０５、優先順位付け回路４０６、ソート用フリップフロップ回路４０７、優先順位発音ｃｈリストメモリ４０８、相対アドレスメモリ４０９、メモリ使用率計測通知回路４１０、および、エラー処理回路４１１を備える。
【００４６】
図では１つの発音ｃｈのキャッシュメモリ４０１のみ図示したが、キャッシュメモリは各発音ｃｈ毎に用意されている。１つの発音ｃｈのキャッシュメモリ４０１は３２ワードの記憶領域からなり、波形メモリ１３１から読み出してキャッシュメモリ４０１に格納するのは、１回あたり８ワードずつ行われる。この８ワードを１単位のブロックとして、キャッシュメモリ４０１は４つのブロック（０〜３の整数をブロックアドレスとして、ブロック０〜３と呼ぶ）からなる。また、先読みカウンタ４０４と現在カウンタ４０５も、それぞれ各発音ｃｈ毎に備えられている。キャッシュメモリ４０１は、ブロック単位でリングバッファとなっている。先読みカウンタ４０４と現在カウンタ４０５は、キャッシュメモリ４０１のブロックを指すカウンタであるので、何れもブロックアドレスの０，１，２，３の値を取り得る。また、キャッシュメモリ４０１をリングバッファとして使用するため、これらのカウンタ値の更新は、現カウンタ値に１を加え、その値が４に至ったときは０に戻す処理で実行される。
【００４７】
先読みカウンタ４０４は、最後に波形メモリ１３１から先読みした８ワードの波形ワードデータを格納したブロックのブロックアドレスを示す。先読みカウンタ４０４は、キャッシュメモリ４０１に１ブロック分の波形ワードデータを充填するときに更新され、更新後の先読みカウンタ４０４で指されるキャッシュメモリ４０１のブロックに波形メモリ１３１から読み出した波形ワードデータ（８ワード分）が充填される。現在カウンタ４０５は、現在、アドレス制御回路１０３により波形ワードデータを読み出し中のキャッシュメモリ４０１のブロックのブロックアドレスを示す。現在カウンタ４０５は、アドレス制御回路１０３から更新指示信号が出力されたときに更新される。先行して波形ワードデータが充填されたブロックを「先頭」とし、アドレス制御回路１０３による波形ワードデータの読み出しが行われているブロックを「末尾」とすると、先読みカウンタ４０４が先頭のブロックを指し示し、現在カウンタ４０５が末尾のブロックを指し示している。そして、先頭のブロックから末尾のブロックまで（ブロック番号を減らす方向にブロックを戻る。先頭のブロックと末尾のブロックが同じ場合もある。）に、波形ワードデータが先読みされていることになる。
【００４８】
正常に動作している場合は、先読みカウンタ４０４が先行して更新され、現在カウンタ４０５がそれを後追いしていく。ただし、先読みカウンタ４０４が１周して現在カウンタ４０５に追いつくことは無いように管理しているものとする。すなわち、キャッシュメモリ４０１に充填しようとしたとき、もし先読みカウンタ４０４を更新すると、先読みカウンタ４０４の値と現在カウンタ４０５の値が同じになってしまうときは、先読みカウンタ４０４が１周して現在カウンタ４０５に追いつくことなるから（このときはキャッシュメモリ４０１の４つのブロックの全てに波形ワードデータが先読みされ充填されていることになる）、そのような充填は禁止され先読みカウンタ４０４の更新も行われないように管理しているということである。
【００４９】
言い換えると、先読みカウンタ４０４の値と現在カウンタ４０５の値が同じであるときは、その時点で先読みカウンタ４０４が指すブロックが最新に波形ワードデータを充填したブロックであり、現在カウンタ４０５が指すその同じブロックからアドレス制御回路１０３が波形ワードデータを読み出し中である、ということを意味する。このとき他の３つのブロックは波形ワードデータが充填されていない空きブロックになっている。
【００５０】
キャッシュ制御回路１０４は、各ＤＡＣ周期において、次の３つの処理を並行して実行する。３つの処理とは、（１）波形メモリ１３１から波形データを読み出してキャッシュ制御回路１０４内のキャッシュメモリ４０１に充填する処理（「キャッシュ充填処理」と呼ぶ）、（２）次のＤＡＣ周期においてどのｃｈについて優先してキャッシュ充填処理を行うかを規定するｃｈの優先順位を付ける処理（「優先順位付け処理」と呼ぶ）、（３）キャッシュメモリ４０１内の波形データを読み出してアドレス制御回路１０３に渡す処理（「キャッシュ読み出し処理」と呼ぶ）である。
【００５１】
優先順位付け処理は、各発音ｃｈ毎のキャッシュメモリ４０１に保持されている波形データ量と各発音ｃｈにおける波形データの消費速度を評価して優先順位を付ける処理であり、キャッシュメモリ４０１に保持されている波形データ量がより少ないｃｈの優先順位がより高く、波形データの消費速度がより速いｃｈの優先順位がより高くなるように順位付けをする。キャッシュ充填処理は、全発音ｃｈについて行うのではなく、１つ前のＤＡＣ周期で優先順位付け処理が付けた優先順位が高い方から所定数の発音ｃｈについて行う。従って、キャッシュメモリ４０１に保持されている波形データ量が少ないｃｈや波形データの消費速度が速いｃｈについて優先的にキャッシュメモリ４０１への充填が行われ、比較的ボトルネックになりやすい波形メモリ読み出し処理の回数を抑え、無駄な波形メモリ読み出し処理を行うことを防止できる。優先順位付け処理とキャッシュ充填処理は、各発音ｃｈに対応するタイムスロットとは別の、独立してＤＡＣ周期内に設けられた時間期間で実行される。キャッシュ読み出し処理は、各発音ｃｈ毎に対応するタイムスロットで実行される。１つの発音ｃｈのキャッシュ読み出し処理では、当該発音ｃｈに対応するキャッシュメモリ４０１から、与えられたアドレス情報ＡＤに基づく所定数（本例では３ワード）の波形ワードデータを読み出してアドレス制御回路１０３に渡す。
【００５２】
図５は、音源１００の動作のタイムチャートを示す。縦線５０１と５０２の間が１ＤＡＣサイクルの時間期間（１／４４１００秒）を示す。音源１００内の各部は、さらにこの１ＤＡＣサイクルを４３５２等分したシステムクロックに基づいて動作する。
【００５３】
５１２は上述の優先順位付け回路４０６による優先順位付け処理のタイムチャートである。１ＤＡＣサイクル中の中程のシステムクロックで４０９６クロック分の期間５２２を利用して、次のＤＡＣサイクルのキャッシュ充填処理で優先的にキャッシュ充填する発音ｃｈの優先順位付けを行う。当該優先順位付け処理の期間５２２の前側のシステムクロックで９６クロック分の期間と後側のシステムクロックで１６０クロック分の期間では、優先順位付け処理の前処理および後処理を行う。
【００５４】
５１１は上述のキャッシュ充填制御回路４０２によるキャッシュ充填処理のタイムチャートである。１ＤＡＣサイクルの先頭からシステムクロックで５０クロック分の期間で前処理を行い、次に優先順位が第１位の発音ｃｈのメモリ充填処理５２１−１、第２位の発音ｃｈのメモリ充填処理５２１−２、…を順に実行する。本実施形態では、優先順位が第５２位の発音ｃｈのメモリ充填処理５２１−５２まで実行するものとし、第５３位以降の順位の発音ｃｈについてはメモリ充填処理を行わない。１つの発音ｃｈのメモリ充填処理にはシステムクロックで８２クロック分の期間を利用する。第５２位の発音ｃｈのメモリ充填処理の後、システムクロックで３６クロック分の期間で後処理を行う。
【００５５】
５１３，５１４，…は、音源１００内の各部において発音ｃｈ毎のタイムスロットで実行される楽音生成処理のタイムチャートを示す。この音源１００では、同時発音数が２５６ｃｈであることを想定している。従って、１ＤＡＣサイクル内で発音ｃｈ＃０〜＃２５５について、それぞれが１サンプルずつ楽音生成できるように、各発音ｃｈに楽音生成用タイムスロットが割り当てられている。このような音源１００内の各部でのタイムスロットによる処理は、１ＤＡＣサイクルで２５６個の発音ｃｈを一巡する。
【００５６】
音源１００内の各部はパイプライン処理で楽音生成処理を行っている。例えば、５１３は、変調信号生成回路１０２がＦナンバを変調する変調信号を生成出力する処理のタイムチャートであり、システムクロックで１６クロックのタイムスロット毎に順々に処理する発音ｃｈを切り替えて、各発音ｃｈの変調信号を生成出力する。５１４は、その変調信号を受けて音程生成回路１０１がＦナンバを生成出力する処理のタイムチャートであり、同様に各発音ｃｈのタイムスロットでそれぞれのｃｈのＦナンバの生成出力処理を行っている。パイプライン処理を行っているため、５１４の各タイムスロットは５１３の各タイムスロットから少し遅れている。以降のアドレス制御回路１０３、補間回路１０７、フィルタ回路１０８、ＥＱ１０９、および音量制御回路１１０においても、同様に各発音ｃｈのタイムスロットでそれぞれの処理を行う。
【００５７】
次に、図４の優先順位付け回路４０６が図５の期間５２２で実行する優先順位付け処理について詳しく説明する。
【００５８】
図６（ａ）は、ソート用フリップフロップ（ＦＦ）回路４０７の詳細な構成を示す。ソート用ＦＦ回路４０７は、それぞれが発音ｃｈの番号を格納する２５６個のレジスタ６０１−１〜６０１−２５６、および、それぞれが発音ｃｈに対応した優先度を格納する２５６個のレジスタ６０２−１〜６０２−２５６からなる。レジスタ６０１−ｎとレジスタ６０２−ｎ（ｎは１〜２５６の整数）は対になっており、この対のレジスタに順位が第ｎ位の発音ｃｈ番号とその発音ｃｈの優先度を格納する。なお、順位が特定されているときには、その順位の対のレジスタをレジスタ６０１やレジスタ６０２と呼ぶものとする。
【００５９】
ここでは発音ｃｈの数を２５６としたので、ソート用ＦＦ回路４０７も２５６対のレジスタ群を用意してある。発音ｃｈ番号は０〜２５５の値を取り得るし、優先度も０〜２５５の値を取り得る（後述するが、値が小さい方が優先順位が高いことを示すものとする）ので、各レジスタはビット０からビット７までの８ビットのＦＦ回路で構成されている。また、レジスタの各桁のビットは次の順位の同じ桁のビットに接続され、各桁が２５６ビットの長いシフトレジスタとなっている。そのため、任意の順位より低い順位の発音ｃｈ番号とその優先度の値を一斉にシフトすることができる。すなわち、例えば第ｎ位から第２５５位のそれぞれの発音ｃｈ番号とその優先度を一斉に第ｎ−１位から第２５６位のそれぞれの発音ｃｈ番号とその優先度に設定できるということである。その際、最下位の２５６位のレジスタはオーバーフローし、それまで２５５位だった値に取って代わられる。
【００６０】
図７は、優先順位付け回路４０６が１ＤＡＣサイクル中の期間５２２で実行する優先順位付け処理の手順を示す。なお、ここで説明する手順はハードウェア・ロジックにより実現されている（後述する図８〜図９も同様である）。ステップ７０１で、図６のソート用ＦＦ回路４０７のレジスタ群６０１−１〜６０１−２５６，６０２−１〜６０２−２５６を全てＦＦｈ（１６進数は後ろにｈを付けて表現するものとする）に初期化する。ステップ７０２〜７１８は発音ｃｈ番号でループさせるループ処理であり、発音ｃｈ番号が若いｃｈ＃０から順に処理対象とする。
【００６１】
ループ処理では、まずステップ７０３で処理対象の発音ｃｈの優先度を求める。この処理については図９を参照して後に詳述するが、処理対象の発音ｃｈのｃｈ番号と求めた優先度は、不図示のワークレジスタに格納されているものとする。次にステップ７０４で、比較対象順位を１２８に設定する。ここで「比較対象順位」は、比較対象順位の値を格納するために割り当てられた所定のワークレジスタを示すとともに、該レジスタに格納されている比較対象順位の値をも示すものとする。ステップ７０５で、処理対象の発音ｃｈの優先度と比較対象順位の発音ｃｈの優先度（当該順位のレジスタ６０２の値）とを比較し、処理対象の発音ｃｈの優先度の方が小さいときは、ステップ７０７で比較対象順位から６４を引き、そうでないときは、ステップ７０６で比較対象順位に６４を足す。要するに、処理対象の発音ｃｈの優先度を第１２８位の優先度と比較して、処理対象の方が小さければ、処理対象の発音ｃｈの優先順位は第１２８位より上位であることになるから次の比較対象順位を６４段階上げ、そうでなければ、処理対象の発音ｃｈの優先順位は第１２８位より下位であることになるから次の比較対象順位を６４段階下げる、ということである。
【００６２】
次のステップ７０８ではステップ７０５と同様の比較を行い、処理対象の発音ｃｈの優先度の方が小さいときは、ステップ７１０で比較対象順位から３２を引き、そうでないときは、ステップ７０９で比較対象順位に３２を足す。要するに、処理対象の発音ｃｈの優先度を比較対象順位の優先度と比較して、処理対象の方が小さければ処理対象の発音ｃｈの優先順位は比較対象順位より上位であることになるから次の比較対象順位を３２段階上げ、そうでなければ処理対象の発音ｃｈの優先順位は比較対象順位より下位であることになるから次の比較対象順位を３２段階下げる、ということである。以下、同様にして、比較対象順位を、１６段階、８段階、４段階、２段階、１段階と上下に調整していく。ステップ７１１〜７１３が比較対象順位を１段階調整する処理である。
【００６３】
次に、ステップ７１４でステップ７０５と同様の比較を行う。この比較で処理対象の発音ｃｈの優先度の方が小さいときは、処理対象の発音ｃｈと優先度をこの時点の比較対象順位の位置に挿入すべきということであるから、そのままステップ７１６に進む。一方、処理対象の発音ｃｈの優先度が大きいか同じであるときは、処理対象の発音ｃｈと優先度をこの時点の比較対象順位の次の位置に挿入すべきということであるから、ステップ７１５で比較対象順位に１を足して、ステップ７１６に進む。
【００６４】
ステップ７１６では、比較対象順位以降のレジスタ６０１，６０２の値を一斉に下位の順位にシフトする。これは比較対象順位以降の発音ｃｈと優先度の順位を全て１段階下げるということである。次に、ステップ７１７で、比較対象順位のレジスタ６０１，６０２に、処理対象の発音ｃｈと優先度の値を格納する。
【００６５】
ステップ７１８では、処理対象の発音ｃｈが最終のｃｈ＃２５５まで上記のループ処理を終えたか判定し、終わっていなければ次のｃｈ番号の発音ｃｈを処理対象としてループ処理を続け、ｃｈ＃２５５まで終わっていたらループ処理を抜ける。最後にステップ７１９で、ソート用ＦＦ回路４０７のレジスタ群６０１−１〜６０１−２５６の優先順の発音ｃｈ番号の並びを優先順発音ｃｈリストメモリ４０８にコピーして、優先順位付け処理を終える。以上の処理で優先順発音ｃｈリストメモリ４０８に記憶された発音ｃｈの優先順位が次のＤＡＣサイクルのキャッシュ充填処理で利用される。
【００６６】
図６（ｂ）は、上述したＦＦ回路４０７上でのソート処理の具体例を示す。まずステップ７０１の初期化直後では、６１１に示すように、ＦＦ回路４０７の全レジスタ群６０１，６０２の値は全てＦＦｈとなっている。
【００６７】
次に発音ｃｈ＃０（発音ｃｈ＃０の優先度は２０であるとする）を処理対象としてステップ７０１〜７１８のループ処理が実行されたとする。このループ処理では、処理対象ｃｈ＃０の優先度が２０であって、ＦＦ回路４０７のどの順位の優先度より小さい（すなわち優先されて優先順位は高くなるべきということ）ので、第１位に挿入されることになる。このとき、この挿入以前の第１位から第２５５位のレジスタ群６０１，６０２の値は順位が１段階下がるようにシフトされる。結果として、レジスタ群６０１，６０２は６１２に示す状態になる。
【００６８】
さらに発音ｃｈ＃１（発音ｃｈ＃１の優先度は１０であるとする）を処理対象としてステップ７０１〜７１８のループ処理が実行されたとする。このループ処理では、処理対象の発音ｃｈ＃１の優先度が第１位のｃｈ＃０の優先度より小さい（優先される）から、第１位から第２５５位のｃｈ番号と優先度が１段階下にシフトされ、第１位の位置に発音ｃｈ＃１と優先度１０が挿入される。６１３は発音ｃｈ＃１が挿入された状態を示す。なお、もしも発音ｃｈ＃１の優先度が３０であれば、第１位の発音ｃｈ＃０と優先度２０はそのままで、第２位から第２５５位のｃｈ番号と優先度が１段階下にシフトされ、第２位の位置に発音ｃｈ＃１と優先度１０が挿入される。
【００６９】
図７のステップ７０３の優先度を算出する処理について詳しく説明する。図８（ａ）は、優先順位付け回路４０６が実行する優先度算出処理の手順を示す。図８（ｂ）は、優先度算出処理で使用するテーブルを示す。
【００７０】
上述したように、優先度は値が小さいほど優先されることを意味する。波形メモリアクセスはキャッシュが破綻しそうなものほど優先させたい。すなわち、キャッシュされている残りの波形サンプル数が少ないｃｈほど優先度を高くし（優先度の値を下げる）、さらに波形データの消費速度がより速い、すなわちピッチが大きいｃｈほど優先度を高くしたい。そこで、本実施形態では、優先度を「圧縮率×キャッシュ残りワード数÷ピッチ」に比例させて算出する。圧縮率は、１波形ワードデータ中に含む圧縮波形サンプルの数に応じた値を取り、その圧縮波形サンプルの数が多いほど圧縮率の値が大きく、その圧縮波形サンプルの数が少ないほど圧縮率の値が小さくなる。上記の式では、式の分子側に圧縮率とキャッシュ残りワード数があるので、圧縮率やキャッシュ残りワード数の値が大きいほど優先度の値が大きくなり（優先度が低くなる）、圧縮率やキャッシュ残りワード数の値が小さいほど優先度の値が小さくなる（優先度が高くなる）。また、式の分母側にピッチがあるので、ピッチの値が大きいほど優先度の値が小さくなり（優先度が高くなる）、ピッチの値が小さいほど優先度の値が大きくなる（優先度が低くなる）。結果として、キャッシュに先読みされている波形サンプル量が少ないほど優先度が高くなり、ピッチアップ量が大きくてはけ-データの消費速度が速いほど優先度が高くなる。なお、上述したように、優先度の値は０〜２５５の範囲をとることが前提であるので、計算で求めた値をこの範囲に正規化する。ここでの正規化とは値を０〜２５５の範囲内に収めるという程度の意味である。
【００７１】
また、音源１００の処理能力が十分に高ければ、優先度の値を上記式をそのまま用いて算出してもよい。しかし、除算回路は規模が大きくなるので設けたくない。そこで、図８（ｂ）のテーブルを予め音源１００内の不図示の記憶手段に保持しておき、優先度の計算時に利用する。このテーブルは、ピッチの値ＰｉｔｃｈとそのＰｉｔｃｈの逆数を６４倍した整数部の値とを対応させて保持する。
【００７２】
図８（ａ）において、まずステップ８０１で、指定された処理対象の発音ｃｈのピッチ情報で図８（ｂ）のテーブルを引き、ピッチ情報に対応する値を得る。ステップ８０２で、処理対象の発音ｃｈのキャッシュメモリ４０１内の残りワード数を取得する。残りワード数は、まず当該発音ｃｈの先読みカウンタ４０４の値と現在カウンタ４０５の値との差から大まかにブロック単位で先読みしてあるワード数を求める。具体的には、先読みカウンタ４０４の値から現在カウンタ４０５の値を引いた値（その値が負数なら４を足す）が先読みしてあるブロック数であるから、そのブロック数に８をかけてワード数を求めることができる。また、現在カウンタ４０５が指すブロックは、現在、波形ワードデータを読み出し中のブロックであり、アドレス制御回路１０３から供給されるアドレス情報ＡＤの下位３ビットでそのブロック内のどのワードをいま読み出しているかが分かるので、当該ブロック内の残りワード数を求めることができる。
【００７３】
次にステップ８０３で、ステップ８０１で求めた値にステップ８０２で求めた残りワード数を掛ける。ステップ８０４では、ステップ８０３の結果を、圧縮率に応じてシフトダウンする。これは、圧縮無しの場合は４ビットシフトダウンし、圧縮している場合は１波形ワードデータ中の圧縮サンプル数ＳＮに応じたビット数だけシフトダウンする処理である。ここでは１波形ワードデータ中に２つの圧縮サンプルが含まれるように圧縮しているので、３ビットシフトダウンする。なお、シフトダウンするのは優先度の値を０〜２５５の範囲に正規化したいからである。ここでのシフトダウンは、ＳＮ／１６を乗算することに相当するものである。次にステップ８０５では、ステップ８０４で求めた値に２５５でリミットをかける（値が２５５を超えていたら２５５にする）。得られた値を、ステップ８０６で処理対象の発音ｃｈの優先度とする。
【００７４】
次に、図４のキャッシュ充填制御回路４０２が実行するキャッシュ充填処理について詳しく説明する。あるＤＡＣサイクルにおけるキャッシュへの充填は、１回前のＤＡＣサイクルで実行された優先順位付け処理の結果に基づいて行われる。なお、図５のタイムチャートではキャッシュ充填処理を行う期間５２１−１〜５２１−５２と優先順位付け処理を行う期間５２２とが重なっているが、キャッシュ充填制御回路４０２はキャッシュ充填処理の前処理で優先順発音ｃｈリスト４０８の全体を読み込んでしまうので、キャッシュ充填制御回路４０２が優先順発音ｃｈリスト４０８を参照している途中で優先順位付け回路４０６が優先順発音ｃｈリスト４０８を書き替えてしまうことは無い。
【００７５】
図８（ｃ）は、図４のキャッシュ充填制御回路４０２が１ＤＡＣサイクル中の期間５２１−１〜５２１−５２で実行するキャッシュ充填処理の手順を示す。ステップ８１１〜８１７は、優先順発音ｃｈリストの優先順位第１位から第５２位の各発音ｃｈでループさせるループ処理である。各ループ処理を実行する期間が、図５の５２１−１〜５２１−５２となる。このループ処理では、まずステップ８１２で、処理対象の発音ｃｈの先読みカウンタ４０４の値と現在カウンタ４０５の値とから次にキャッシュ充填に使う空きブロックを求める。ステップ８１３で、そのような空きブロックが有るか判定する。空きブロックが無いときは、この処理対象の発音ｃｈでは既に十分にキャッシュ充填が済んでいるということであるから、次の順位のループ処理に進む。
【００７６】
ステップ８１３で空きブロックが有るときは、ステップ８１４で、相対アドレスメモリ４０９から処理対象の発音ｃｈの次の波形メモリ読出しアドレスを取得する。相対アドレスメモリ４０９は、２５６個の全発音ｃｈのそれぞれに対応する波形メモリ読出しアドレスを保持する記憶領域である。ある発音ｃｈで楽音生成が開始されるとき、初期化処理で相対アドレスメモリ４０９中のその発音ｃｈに対応する相対アドレスを０に初期化する。その後は、キャッシュ充填制御回路４０２が、１ブロック分の波形データを波形メモリ１３１から読み出してキャッシュに書き込む毎にその相対アドレスを１ブロック分進める。なお、１ブロック＝８ワード単位で波形メモリアクセスを行うので、相対アドレスはワード単位のアドレスの下位３ビットを保持する必要がない。従って、相対アドレスメモリ４０９に保持する相対アドレスは、波形メモリ上の相対アドレスの下位３ビットをシフトダウンした形式としている。
【００７７】
ステップ８１５では、先読みカウンタ４０４を更新し、先読みカウンタ４０４がステップ８１２で求めた空きブロックを指すようにする。ステップ８１６では、ステップ８１４で求めた波形メモリ読出しアドレスをメモリ読出し回路１０５に渡して読出し要求を発行する。メモリ読出し回路１０５は、ある発音ｃｈで楽音生成が開始されるとき、初期化処理で読出し対象の波形データの先頭を指し示す絶対アドレスを入力し保持している。メモリ読出し回路１０５は、その絶対アドレスとキャッシュ充填制御回路４０２から渡された波形メモリ読出しアドレス（相対アドレス）に基づいて、今回読み出す１ブロック分の波形データの絶対アドレスを求め、その絶対アドレスで波形メモリ１３１から波形データを読み出す。キャッシュ充填制御回路４０２は、メモリ読出し回路１０５から波形データを受け取り、先読みカウンタ４０４が現在指している空きブロックに書き込む。その後、次の順位のループ処理に進む。
【００７８】
以上のようにして第５２位までのキャッシュ充填を行い、キャッシュ充填処理を終える。
【００７９】
次に、図４のキャッシュ読出し制御回路４０３が実行するキャッシュ読み出し処理について説明する。キャッシュ読出し処理は、図５の５１３，５１４に示すような各発音ｃｈのタイムスロットで行われる。当然だが、発音が指示されていない発音ｃｈではキャッシュ読出しは行わない。ＤＡＣサイクルの所定のタイムスロットで、アドレス制御回路１０３はアドレス情報ＡＤを出力する。キャッシュ読出し制御回路４０３は、処理対象ｃｈのキャッシュメモリ４０１の現在カウンタ４０５が指し示すブロック中のアドレス情報ＡＤに対応する位置から３ワードの波形ワードデータを読み出してアドレス制御回路１０３に返す。この際、アドレス情報ＡＤのうち用いられるのは下位３ビットのみである。現在カウンタ４０５が指し示すブロック（８ワード）中での位置をアドレス情報ＡＤの下位３ビットで特定している。
【００８０】
なお、現在カウンタ４０５の更新は、キャッシュ読出し制御回路４０３がアドレス情報ＡＤに対応する位置から３ワードの波形ワードデータを読み出す際に、ブロックをまたがったとき現在カウンタ４０５を更新してもよいが、本実施形態ではアドレス制御回路１０３からの更新指示信号が入力したとき現在カウンタ４０５を更新するようにしている。図３で説明したが、アドレス制御回路１０３は、アドレス情報ＡＤが８ワード分進む毎に更新指示信号を出力するので、そのタイミングで現在カウンタ４０５を更新する。
【００８１】
次に、図４のキャッシュ制御回路１０４内のエラー処理回路４１１について説明する。本実施形態の音源１００ではベストエフォート型で波形メモリをアクセスするので、（通常は滅多に起こらないことではあるが）多数の発音ｃｈが大きくピッチアップすると、メモリアクセスが破綻する可能性がある。しかし、メモリアクセスが破綻しても、音源１００が不適切なノイズを発生したり全く機能しなくなったりせずに、適切なエラー処理をして音源として機能し続けることができる。
【００８２】
図９（ａ）は、エラー処理回路４１１が行うエラー検出処理の手順を示す。波形メモリアクセスの破綻は発音ｃｈ毎に判断する。従って、図９（ａ）の処理は発音ｃｈ毎に実行する。例えば、各発音ｃｈのタイムスロットの期間で実行すればよい。
【００８３】
ある発音ｃｈにおける破綻は、キャッシュメモリに先読みされているサンプルデータに余裕がなくなったときに起こる。従って、エラーの検出はキャッシュ制御回路１０４のキャッシュメモリ４０１内の残り波形データ量を参照して判断できる。すなわち、まずステップ９０１で、現在カウンタ４０５の値と先読みカウンタ４０４の値とを比較する。一致していなければ、少なくとも１ブロック分の先読み波形データがキャッシュ内に残っていると言うことであるから、エラー無しとする（ステップ９０４）。一致していた場合は、波形データがキャッシュされている最後の１ブロックから波形データを読み出しているということであるから、ステップ９０２でアドレス情報ＡＤの下位３ビットの値が３以上かを判定する。アドレス情報ＡＤの下位３ビットが３以上のときは、キャッシュメモリ４０１の当該ブロック中でこれから読み出す残りのワード数が５ワード未満になったということであるから、その発音ｃｈのメモリアクセスがエラーであると判定する（ステップ９０３）。
【００８４】
なお、ここでは残りが５ワード未満のときにエラーとしたが、エラーとする残りワード数は適宜決定すればよい。また、圧縮の有無やピッチ情報に基づくキャッシュの消費速度などの他の種々の情報を用いて、より正確なエラー検出を行うようにしてもよい。
【００８５】
エラー発生と判断した場合は、例えば以下のようなエラー処理を行う。
【００８６】
（１）補間回路１０７の出力をＤＣレベルで停止する。すなわち、キャッシュ制御回路１０４内のエラー処理回路４１１で検出されたエラーは、補間回路１０７に通知され、エラーの起きた発音ｃｈの出力をその時点のＤＣ（直流）値で保持して出力する。これにより、出力値が不連続になってノイズが発生したりしないようにする。
【００８７】
（２）音量制御回路１１０の出力をダンプ（減衰）する。すなわち、キャッシュ制御回路１０４内のエラー処理回路４１１で検出されたエラーは、音量制御回路１１０に通知され、音量制御回路１１０は補間回路１０７からのＤＣ（直流）出力を所定レートでダンプする。
【００８８】
（３）どの発音ｃｈでエラーが起こっているかをＣＰＵ１４１に知らせる。制御レジスタ１１３には、全発音ｃｈのエラー状態を表すビットマップを設ける。キャッシュ制御回路１０４内のエラー処理回路４１１は、そのビットマップのうちの、エラーになった発音ｃｈに対応するビットを操作する。ＣＰＵ１４１はそこを参照することでどの発音ｃｈでエラーが起きているかを知ることができる。
【００８９】
（４）上記のような各種のエラー処理をする際、ステレオでＬ／Ｒのペアになっている２つの発音ｃｈはどちらか片方にエラーが起こっても、両方の発音ｃｈについて同じようにエラー処理を行うようにする。
【００９０】
次に、図４のキャッシュ制御回路１０４内のメモリ使用率計測通知回路４１０について説明する。上述したように本実施形態の音源１００は、メモリアクセスが破綻した場合のエラー処理を備えている。しかし、より高度な対策をとるには、メモリ使用率が高くなってメモリアクセスの破綻の可能性が大きくなったことをＣＰＵ１４１に知らせ、ＣＰＵ１４１が各種の処理をしたほうがよい。そこで、本実施形態では、音源１００からＣＰＵ１４１にメモリ使用率を知らせるようにしている。ＣＰＵ１４１は、メモリアクセスの使用率を知って、メモリアクセスの破綻が起こらないように高度な処理をすることができる。例えば、ＣＰＵ１４１は、メモリ使用率を表示器でユーザに通知することにより、ユーザに発音数を加減してもらうように促すことができる。あるいは、ＣＰＵ１４１で厳しくトランケート処理をすることにより同時発音数を制限し、発音指示が多数あっても同時発音する発音ｃｈ数を減らすことができる。ＣＰＵ１４１によるトランケート処理は目立たない発音を優先的に終了させるといった高度な条件判断が可能である。
【００９１】
図９（ｂ）は、メモリ使用率計測通知回路４１０が実行する波形バス使用率計測通知処理の手順を示す。なお、波形バスとは、波形メモリ１３１と音源１００との間でデータ授受を行うバスラインのことである。
【００９２】
予め音源１００の制御レジスタ１１３に、以下のレジスタを設けておく。１つは波形バス使用率検出時間指定レジスタである。これは、ＣＰＵ１４１が音源１００に波形バス使用率検出時間を指定するためのレジスタである。ＣＰＵ１４１は、このレジスタに書き込みをする。書き込む値としては、１〜２５５の値が設定できる。２つめは波形バス使用率通知レジスタである。これは、音源１００がＣＰＵ１４１に波形バス使用率を通知するためのレジスタである。ＣＰＵ１４１は、このレジスタを参照して、波形バスの使用率を知り、使用率が高くなったときには各種の対処の処理を行う。
【００９３】
波形バス使用率計測通知処理では、まずステップ９１１で、最大回数レジスタをゼロクリアする。最大回数レジスタは不図示のワークレジスタである。ステップ９１２〜９１５は、波形バス使用率検出時間指定レジスタで指定された回数だけＤＡＣサイクル毎に繰り返されるループ処理を示す。そのループ処理の中では、ステップ９１３で、ＤＡＣサイクル内で実行される波形メモリ１３１へのアクセス回数を数える。ステップ９１４で、波形メモリアクセス回数の結果と最大回数レジスタの値とを比較し、大きい方を最大回数レジスタに格納する。ステップ９１２〜９１５のループ処理により、波形メモリアクセス回数の最大値が求められるので、ステップ９１６で、最大回数レジスタの値を、波形バス使用率通知レジスタに書き込む。以上のような通知処理を適当な間隔で繰り返し実行する。
【００９４】
上記実施形態の音源１００によれば、複数音を同時に発音するために各発音ｃｈで波形データを並行して先読みする場合に、各発音ｃｈで既にキャッシュに先読みされている波形データの量と楽音信号生成に使用する波形データの消費速度に応じて各発音ｃｈに優先順位を付け、その優先順位が上位の所定数の発音ｃｈについて優先的に波形メモリから波形データを先読みしてキャッシュに充填しておくので、ベストエフォート型で波形メモリアクセスが為され、１つの発音ｃｈにおいては従来よりピッチアップ量を大きくすることができる。また、全発音ｃｈで一斉に所定量以上にピッチアップするケースはそれほど無いので、何れかのｃｈで楽音生成が破綻するケースが増加することもほとんど無い。
【００９５】
なお、上記実施形態では、キャッシュに先読みされている波形データの量がより少ないｃｈの優先順位がより高く、かつ、ピッチアップ量が大きくて波形データの消費速度がより速いｃｈの優先順位がより高くなるように順位を付けたが、前者のみ、あるいは後者のみの順位付けを採用してもよい。すなわち、順位付けに際して、ピッチアップ量は考慮せずに、キャッシュに先読みされている波形データの量に応じて発音ｃｈの順位付けを行う構成としてもよい。また、順位付けに際して、キャッシュに先読みされている波形データの量は考慮せずに、ピッチアップ量に応じて発音ｃｈの順位付けを行う構成としてもよい。
【符号の説明】
【００９６】
１００…音源、１３１…波形メモリ、１３２…サウンドシステム、１４１…中央処理装置（ＣＰＵ）、１４２…リードオンリメモリ（ＲＯＭ）、１４３…ランダムアクセスメモリ（ＲＡＭ）、１４４…記憶装置、１４５…表示器、１４６…演奏操作子および設定操作子、１４７…外部インターフェース（Ｉ／Ｆ）、１４８…バスライン。
【図１】
2015158547.tif 000003
【図２】
2015158547.tif 000004
【図３】
2015158547.tif 000005
【図４】
2015158547.tif 000006
【図５】
2015158547.tif 000007
【図６】
2015158547.tif 000008
【図７】
2015158547.tif 000009
【図８】
2015158547.tif 000010
【図９】
2015158547.tif 000011