(57)【要約】【課題】  波形メモリ内に発音チャンネル毎に２系統のチャンネル対応領域を設け、ハードディスクから該チャンネル対応領域に波形データを交互に転送するとともに、これら領域を音高に応じた速度で読み出すメモリ音源においては、一方の領域の読出しが完了したタイミングでハードディスクを読み出すための割込みが発生する（図２(b)の白丸印）。ここで、時刻ｔpのように多数のチャンネルに対してほぼ同時に割込みが発生すると、読出し周期の短い（音高が高い）チャンネルにおいては、ハードディスクの読出しが間に合わなくなることがあるのでこれを改善する。【解決手段】  ハードディスクからの波形データの転送が可能になったチャンネル番号を要素とするリストを作成し、転送時限の短い順にリストをソートし、当該リスト順に波形データを転送するようにした。【選択図】  図２
2006184628.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも一の波形データを記憶する第１の記録媒体と、前記第１の記録媒体よりもアクセス速度が速い第２の記録媒体と、複数の波形データを、これら各波形データの一部を成す部分データ毎に読み出し、前記第２の記録媒体に転送する転送手段と、各発音チャンネルの再生レートに応じた速度で前記第２の記録媒体を読み出し、前記各発音チャンネルの楽音信号を生成する楽音信号生成手段とを有する楽音信号生成システムに適用されるアクセス制御装置であって、
前記第２の記録媒体に次の部分データを読み込むことが可能な発音チャンネルのうち、該第２の記録媒体に記憶されている部分データによる再生が最も早いタイミングで終了する発音チャンネルを検出する検出手段と、
前記検出手段よって検出された発音チャンネルを、前記転送手段における前記部分データの転送を行うべき発音チャンネルとして指定する発音チャンネル指定手段と
を有することを特徴とするアクセス制御装置。
【請求項２】
前記楽音信号生成システムは、前記各発音チャンネルの再生レートを記憶するレート記憶手段を有するものであり、前記第１の記録媒体は、所定サイズのブロック単位で波形データを記憶する記録媒体であり、前記第２の記録媒体は、前記各発音チャンネル毎に複数の記憶領域を有し、これら記憶領域に対して、前記部分データが交互に書き込まれるものであることを特徴とする請求項１記載のアクセス制御装置。
【請求項３】
前記検出手段は、前記第２の記録媒体に記憶されている部分データによる再生が終了するタイミングの早い順に発音チャンネルのリストを作成し、該リスト中の最も順位の高い発音チャンネルを検出するものである
ことを特徴とする請求項１記載のアクセス制御装置。
【請求項４】
少なくとも一の波形データを記憶する第１の記録媒体と、前記第１の記録媒体よりもアクセス速度が速い第２の記録媒体と、複数の波形データを、これら各波形データの一部を成す部分データ毎に読み出し、前記第２の記録媒体に転送する転送手段と、各発音チャンネルの再生レートに応じた速度で前記第２の記録媒体を読み出し、前記各発音チャンネルの楽音信号を生成する楽音信号生成手段とを有する楽音信号生成システムにおいて実行される楽音信号生成方法であって、
前記第２の記録媒体に次の部分データを読み込むことが可能な発音チャンネルのうち、該第２の記録媒体に記憶されている部分データによる再生が最も早いタイミングで終了する発音チャンネルを検出する検出過程と、
前記検出過程において検出された発音チャンネルを、前記転送手段における前記部分データの転送を行うべき発音チャンネルとして指定する発音チャンネル指定過程と
を処理装置に実行させることを特徴とする楽音信号生成方法。
【請求項５】
前記楽音信号生成システムは、前記各発音チャンネルの再生レートを記憶するレート記憶手段を有するものであり、前記第１の記録媒体は、所定サイズのブロック単位で波形データを記憶する記録媒体であり、前記第２の記録媒体は、前記各発音チャンネル毎に複数の記憶領域を有し、これら記憶領域に対して、前記部分データが交互に書き込まれるものであり、
前記検出過程は、
前記第２の記録媒体に記憶されている部分データによる再生が終了するタイミングの早い順に、発音チャンネルのリストを作成し、前記リスト中の最も順位の高い発音チャンネルを検出する過程である
ことを特徴とする請求項４記載の楽音信号生成方法。
【請求項６】
請求項４または５記載の楽音信号生成方法を実行することを特徴とする楽音信号生成装置。
【請求項７】
請求項４または５記載の楽音信号生成方法を処理装置に実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パーソナルコンピュータによる楽音信号の生成に用いて好適なアクセス制御装置、楽音信号生成方法、楽音信号生成装置およびプログラムに関する。
【背景技術】
【０００２】
近年、パーソナルコンピュータを用いてメモリ音源を構成し、演奏情報に基づいて楽音信号を生成するシステムが知られている。かかるシステムにおいては、ハードディスクに格納された波形データが一部の部分データ（例えば１クラスタ）毎に波形メモリに読み込まれ、読み込まれた部分に対してエンベロープが付与され、効果処理が施されることによって楽音信号が生成される。但し、ハードディスクにおいては、ＣＰＵから読出し指示を受信した後に実際にデータが読み出されるまでのタイムラグが大きいため、実際に当該部分データが必要になる時刻よりも前に、ＣＰＵはハードディスクに対する読出し指示を出力しておく必要がある。
【０００３】
特許文献１においては、発音チャンネル毎に「前半」および「後半」の２系統のメモリ領域を波形メモリに設け、これら領域を交互に読み出すことによって波形データを連続的に再生する技術が開示されている。この技術においては、「前半」および「後半」の領域には連続するアドレス空間が付与され、音源回路によって「前半」および「後半」の領域が交互に読み出される。従って、読出しアドレスは鋸歯状波状に変化することになる。音源回路によって「前半」の領域の読出しが終了すると、ＣＰＵに対して割込が発生し、該ＣＰＵの制御の下、当該「前半」の領域に対してハードディスクから新たな部分データが読み込まれる。これと並行して「後半」の領域は音源回路によって読み出され、該「後半」の領域内の部分データに基づいて楽音信号が合成される。
【０００４】
同様に、音源回路によって「後半」の領域の読出しが終了すると、ＣＰＵに対して割込が発生し、該ＣＰＵの制御の下、当該「後半」の領域に対してハードディスクから新たな部分データが読み込まれる。これと並行して「前半」の領域は音源回路によって読み出され、楽音信号が合成される。このように、一方の領域に対する部分データの転送と、他方の領域を用いたデータの再生とが繰り返し実行されることになる。ここで、各領域の読出し速度は、対応する発音チャンネルの音高（ｆナンバ）に基づいて決定される。これにより、一種類の波形データを様々な音高に対して適用することができるようになる。
【０００５】
【特許文献１】特開平６−５１７７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ここで、複数チャンネルの読出しアドレスの進行状況を図２(b)を流用して説明する。各発音チャンネル毎のバッファの読み出し速度は、該発音チャンネルの音高（ｆナンバ）に基づいて決定されるため、図示のように読出しアドレスが成す鋸歯状波の周期は発音チャンネル毎に異なる。そして、何れの発音チャンネルにおいても、鋸歯状波の半周期毎、すなわち白丸印で示すタイミングに割込が発生し、「前半」または「後半」のメモリ領域の更新が開始される。このように、各チャンネル毎に鋸歯状波の周期が相違すると、あるタイミング（図示の例では時刻ｔp）付近に多数の発音チャンネルの割込がほぼ同時に発生する場合がある。このように、割込が集中して発生すると、ハードディスクから部分データを読み出すタイミングが遅れ、特に読出しアドレスの周期が短いチャンネルに対して部分データの補充が間に合わなくなるという問題があった。
この発明は上述した事情に鑑みてなされたものであり、各発音チャンネルの部分データが必要になるタイミングに応じた最適なスケジュールで各部分データを転送することができるアクセス制御装置、楽音信号生成方法、楽音信号生成装置およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００７】
上記課題を解決するため本発明にあっては、下記構成を具備することを特徴とする。なお、括弧内は例示である。
請求項１記載のアクセス制御装置にあっては、少なくとも一の波形データを記憶する第１の記録媒体（３６）と、前記第１の記録媒体（３６）よりもアクセス速度が速い第２の記録媒体（２２）と、複数の波形データを、これら各波形データの一部を成す部分データ毎に読み出し、前記第２の記録媒体（２２）に転送する転送手段（２６，３２）と、各発音チャンネルの再生レートに応じた速度で前記第２の記録媒体（２２）を読み出し、前記各発音チャンネルの楽音信号を生成する楽音信号生成手段（２０）とを有する楽音信号生成システムに適用されるアクセス制御装置であって、前記第２の記録媒体（２２）に次の部分データを読み込むことが可能な発音チャンネルのうち、該第２の記録媒体（２２）に記憶されている部分データによる再生が最も早いタイミングで終了する発音チャンネルを検出する検出手段（２４，ＳＰ６０〜ＳＰ７０，ＳＰ４６）と、前記検出手段よって検出された発音チャンネルを、前記転送手段（２６，３２）における前記部分データの転送を行うべき発音チャンネルとして指定する発音チャンネル指定手段（２４，ＳＰ４８）とを有することを特徴とする。
さらに、請求項２記載の構成にあっては、請求項１記載のアクセス制御装置において、前記楽音信号生成システムは、前記各発音チャンネルの再生レートを記憶するレート記憶手段（１２）を有するものであり、前記第１の記録媒体（３６）は、所定サイズのブロック（クラスタ）単位で波形データを記憶する記録媒体であり、前記第２の記録媒体（２２）は、前記各発音チャンネル毎に複数の記憶領域（ＢｉＦ，ＢｉＲ）を有し、これら記憶領域に対して、前記部分データが交互に書き込まれるものであることを特徴とする。
さらに、請求項３記載の構成にあっては、請求項１記載のアクセス制御装置において、前記検出手段は、前記第２の記録媒体（２２）に記憶されている部分データによる再生が終了するタイミングの早い順に発音チャンネルのリストを作成し、該リスト中の最も順位の高い発音チャンネルを検出するものであることを特徴とする。
また、請求項４記載の楽音信号生成方法にあっては、少なくとも一の波形データを記憶する第１の記録媒体（３６）と、前記第１の記録媒体（３６）よりもアクセス速度が速い第２の記録媒体（２２）と、複数の波形データを、これら各波形データの一部を成す部分データ毎に読み出し、前記第２の記録媒体（２２）に転送する転送手段（２６，３２）と、各発音チャンネルの再生レートに応じた速度で前記第２の記録媒体（２２）を読み出し、前記各発音チャンネルの楽音信号を生成する楽音信号生成手段（２０）とを有する楽音信号生成システムにおいて実行される楽音信号生成方法であって、前記第２の記録媒体（２２）に次の部分データを読み込むことが可能な発音チャンネルのうち、該第２の記録媒体（２２）に記憶されている部分データによる再生が最も早いタイミングで終了する発音チャンネルを検出する検出過程（ＳＰ６０〜ＳＰ７０，ＳＰ４６）と、前記検出過程において検出された発音チャンネルを、前記転送手段（２６，３２）における前記部分データの転送を行うべき発音チャンネルとして指定する発音チャンネル指定過程（ＳＰ４８）とを処理装置（６）に実行させることを特徴とする。
さらに、請求項５記載の構成にあっては、請求項４記載の楽音信号生成方法において、前記楽音信号生成システムは、前記各発音チャンネルの再生レートを記憶するレート記憶手段（１２）を有するものであり、前記第１の記録媒体（３６）は、所定サイズのブロック（クラスタ）単位で波形データを記憶する記録媒体であり、前記第２の記録媒体（２２）は、前記各発音チャンネル毎に複数の記憶領域（ＢｉＦ，ＢｉＲ）を有し、これら記憶領域に対して、前記部分データが交互に書き込まれるものであり、前記検出過程は、前記第２の記録媒体（２２）に記憶されている部分データによる再生が終了するタイミングの早い順に、発音チャンネルのリストを作成し（ＳＰ６８）、前記リスト中の最も順位の高い発音チャンネルを検出する過程であることを特徴とする。
また、請求項６記載の楽音信号生成装置にあっては、請求項４または５記載の楽音信号生成方法を実行することを特徴とする。
また、請求項７記載のプログラムにあっては、請求項４または５記載の楽音信号生成方法を処理装置に実行させることを特徴とする。
【発明の効果】
【０００８】
このように、本発明によれば、第２の記録媒体に次の部分データを読み込むことが可能な発音チャンネルのうち、該第２の記録媒体に記憶されている部分データによる再生が最も早いタイミングで終了する発音チャンネルを検出し、この検出された発音チャンネルを、転送手段における部分データの転送を行うべき発音チャンネルとして指定するから、各発音チャンネルの部分データが必要になるタイミングに応じた最適なスケジュールで各部分データを転送することができる。
【発明を実施するための最良の形態】
【０００９】
1．第１実施例
1．1．第１実施例のハードウエア構成
次に、本発明の第１実施例の楽音信号生成システムの構成を図１を参照し説明する。
なお、本実施例の楽音信号生成システムは、汎用パーソナルコンピュータと、該パーソナルコンピュータに実装されるサウンドボードと、該パーソナルコンピュータのオペレーティングシステム（ＯＳ）上で動作するアプリケーションプログラムとによって構成されている。図において、２は表示器であり、ユーザに対して各種情報を表示する。４は操作子であり、キーボード、マウス等から構成されている。６はＣＰＵであり、後述するプログラムに基づいて、バス１６を介して他の構成要素を制御する。１０はフラッシュメモリであり、イニシャルプログラムローダ等が記憶されている。１２はＲＡＭであり、ＣＰＵ１０のワークメモリとして用いられる。１４は通信インタフェースであり、他の機器との間でＭＩＤＩ信号等のやりとりを行う。
【００１０】
８はＤＭＡ制御回路であり、ＣＰＵ６を経由することなくＲＡＭ１２にデータを入出力するための各種制御を実行する。３６はハードディスクであり、パーソナルコンピュータのオペレーティングシステム、楽音信号生成システムのアプリケーションプログラムおよび波形データ等を記憶する。また、３８はＣＤ−ＲＷドライブであり、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等のディスクに対してデータを入出力する。３４はＩＤＥ・Ｉ／Ｏ部であり、これらハードディスク３６およびＣＤ−ＲＷドライブ３８に対する入出力処理を実行する。なお、ハードディスク３６は、ＩＤＥ・Ｉ／Ｏ部３４の制御の下、「クラスタ」（例えば１６ビット×３２ｋワード）を単位として各種データが読み書きされる。
【００１１】
４０はサウンドカードであり、その内部には最大発音チャンネル数ｍ（ｍは例えば６４）の楽音信号を合成する音源回路２０が設けられている。２２は波形メモリ（半導体メモリ）であり、ここにはハードディスク３６に記憶されている各波形データの、各々先頭数クラスタ相当程度の部分データが記憶される。サウンドカード４０にＣＰＵ６からノートオン信号が供給されると、サウンドカード４０においては直ちに楽音信号の合成を開始する必要があるが、その波形データを得るためにハードディスク３６にアクセスすると、実際に波形データが読み出されるまでにタイムラグが生じる。そこで、各波形データの先頭部分のみを波形メモリ２２に予め読み込んでおくことにより、このタイムラグを解消したものである。
【００１２】
２８，３０はハードディスク３６から波形メモリ２２への波形データ転送用のバッファメモリ（半導体メモリ）であり、各々「１クラスタ」相当の容量を有し、相互に独立したバス２７，２９に各々接続されている。２６，３２は転送処理部であり、転送処理部２６は、ハードディスク３６からバッファメモリ２８，３０に既に読み込まれている「１クラスタ」分の波形データを、音源回路２０が波形メモリ２２にアクセスしていない期間に波形メモリ２２に転送する。また、転送処理部３２は、ＣＰＵ６の指示に応じて、「１クラスタ」分の波形データをハードディスク３６から読み出して、バッファメモリ２８，３０のうちの転送処理部２６による転送が終了している側のバッファメモリに転送する。
【００１３】
上述した音源回路２０は、複数の発音チャンネルを備えており、核発音チャンネル毎に読出しアドレスを生成して波形メモリ２２から波形データを読み出し、読み出された波形データに対してエンベロープ付与を行い、各発音チャンネル毎の楽音信号を合成する。さらに、音源回路２０は、合成された複数の楽音信号を混合し、混合された楽音信号に対してリバーブ等の効果を付与する。１８はアンプ、スピーカ等から構成されたサウンドシステムであり、この効果付与された楽音信号を発音する。なお、図１内の各構成要素のうち、破線で示された転送管理部２４は本実施例には含まれていない。
【００１４】
1．2．第１実施例の動作
1．2．1．初期化処理
パーソナルコンピュータのＯＳ上において楽音信号生成システムのアプリケーションプログラムが起動されると、ハードディスク３６内の所定のディレクトリに記憶されている波形データがサーチされ、これらの波形データの数ｎに応じて図２(a)に示す波形データ対応領域Ａ１〜Ａｎが波形メモリ２２に確保される。そして、これら波形データの先頭部分の部分データが該波形データ対応領域Ａ１〜Ａｎに各々格納される。この波形データ対応領域Ａ１〜Ａｎは、各々数クラスタ相当分確保すると好適であるが、必ずしも「１クラスタ」の整数倍である必要はなく、「１クラスタ」以上の領域が各々確保できていればよい。さらに、ハードディスク３６のクラスタ長が検出され、波形メモリ２２には、最大発音チャンネル数ｍの各発音チャンネルに対して、「１クラスタ」相当長の２つのチャンネル対応領域Ｂ１Ｆ，Ｂ１Ｒ，Ｂ２Ｆ，Ｂ２Ｒ，……，ＢｍＦ，ＢｍＲが確保される。任意発音チャンネルｉのチャンネル対応領域ＢｉＦ，ＢｉＲは、波形メモリ２２のアドレス空間内に連続して配置される。
【００１５】
次に、パーソナルコンピュータのＲＡＭ１２には、図６に示す管理データ５０の領域が確保される。図６において管理データ５０は、ヘッダデータ５２と、第１〜第ｍ発音チャンネルに各々対応するチャンネルデータ５４−１〜５４−ｍとから構成される。そして、管理データ５０内においては、双方向リンクドリストの形式によって「要求リスト」というリストが形成される。この要求リストとは、ハードディスク３６からチャンネル対応領域に対して部分データの転送を行うべき順に、チャンネルデータ５４−１〜５４−ｍを配列して成るものである。
【００１６】
管理データ５０においては、該要求リストの要素数（転送要求数）ＥＮと、要求リストの先頭チャンネル番号ＳＣと、要求リストの末尾チャンネル番号ＭＣとが記憶される。また、各発音チャンネルｉに係るチャンネルデータ５４−ｉには、要求リスト内の次のチャンネル番号を示す次ｃｈ番号ＮＣ(i)と、要求リスト内の前のチャンネル番号を示す前ｃｈ番号ＰＣ(i)とが記憶される。すなわち、当該要求リストは、ＳＣの示す先頭チャンネル番号の要素に、順次次ｃｈ番号ＮＣ(i)の示す発音チャンネルの要素を連結した、全ＥＮ個の要素で構成される。なお、後述する各種処理においては、新たな要素を要求リストに追加し、何れかの要素を要求リストから削除し、または要素の順位を変更する等の操作が実行される。これらの操作は、何れも上記要素数ＥＮ、先頭チャンネル番号ＳＣ、末尾チャンネル番号ＭＣ、各発音チャンネルｉの次ｃｈ番号ＮＣ(i)および前ｃｈ番号ＰＣ(i)を書き換えることによって実行されるものであり、各チャンネルデータ５４−１〜５４−ｍの実体のアドレスが変更されるわけではない。
【００１７】
また、チャンネルデータ５４−ｉには、発音チャンネルｉに関する以下の情報も記憶される。
・チェンジフラグＣＦ(i)：このフラグは、要求リスト内においてチャンネルデータ５４−ｉの順位を見直す必要があるときに“１”に設定され、順位を見直す必要が無いときに“０”に設定される。
・転送イネーブルフラグＴＥ(i)：このフラグは、チャンネル対応領域ＢｉＦまたはＢｉＲに対してハードディスク３６から部分データを転送することを許容する場合には“１”に設定され、許容しない場合には“０”に設定される。
・転送時限ＴＬ(i)：このデータは、チャンネル対応領域ＢｉＦまたはＢｉＲに対するハードディスク３６からの部分データの転送が完了すべき限界となる時刻を示す。図２(c)において、各部分データの音源回路２０による読出し期間をＴｓ１，Ｔｓ２，Ｔｓ３，……とすると、Ｔｓ２，Ｔｓ３，……が開始される直前の時刻ｔ2, ｔ3，……が転送時限ＴＬ(i)になる。なお、波形データの先頭部分（アタック部）は予め波形メモリ２２に記憶されるため、対応する転送時限ＴＬ(i)は規定されない。
【００１８】
・次波形ブロック番号ＮＷ(i)：各波形データを構成する部分データには昇順の番号であるブロック番号が付与されている。すなわち、波形データ対応領域Ａｉに読み込まれる先頭部分のブロック番号は「１」であり、その後の部分データには「１クラスタ」相当量毎に「２」，「３」，……のブロック番号が付与される。次波形ブロック番号ＮＷ(i)は、次にハードディスク３６からチャンネル対応領域ＢｉＦまたはＢｉＲに転送されるべき部分データのブロック番号を示す。
・再生レートＤＲ(i)：このデータは、波形メモリ２２、バッファメモリ２８，３０を読み出す場合のアドレス間隔を示すものであり、発音チャンネルｉの音高（ｆナンバ）に対応して決定される。
・割込時刻ＩＴ(i)：このデータは、発音チャンネルｉに対して最後にブロック再生完了割込が発生した時刻を示す。なお、ブロック再生完了割込は、波形データ対応領域Ａｐ、チャンネル対応領域ＢｉＦまたはＢｉＲに記憶された部分データの再生が完了したタイミングで発生する。
【００１９】
1．2．2．ノートオンイベントの発生。
パーソナルコンピュータ内部のシーケンサプログラム、あるいは通信インタフェース１４から入力されたＭＩＤＩ信号においてノートオンイベントが発生すると、ＣＰＵ６において図３に示すノートオンイベント処理ルーチンが起動される。
図において処理がステップＳＰ２に進むと、音源回路２０内の第１〜第６４発音チャンネルのうち空きチャンネルが検索され、検索された発音チャンネルが当該ノートオンイベントに割り当てられる。ここで割り当てられた発音チャンネルの番号を「ｉ」とする。次に、処理がステップＳＰ４に進むと、このノートオンイベントに対する音色、ベロシティ、音高に基づいて、一の波形データが決定される。次に、処理がステップＳＰ６に進むと、音源回路２０の発音チャンネルｉに対して、音色、ベロシティ、音高に基づく各種パラメータが設定される。ここで、波形メモリ２２における波形データ対応領域Ａｐ（１≦ｐ≦ｎ）は、決定された波形データに基づいて一意に決定され、チャンネル対応領域ＢｉＦ，ＢｉＲは、チャンネル番号ｉに基づいて一意に決定される。
【００２０】
次に、処理がステップＳＰ８に進むと、発音チャンネルｉの発音を開始するように、サウンドカード４０に対して発音指令が送信される。これにより、音源回路２０にあっては、波形データ対応領域Ａｐの読み出しが開始される。次に、処理がステップＳＰ１０に進むと、発音チャンネルｉに係る次波形ブロック番号ＮＷ(i)が「２」に設定され、転送イネーブルフラグＴＥ(i)が“１”に設定される。すなわち、発音チャンネルｉについては、現在はブロック番号「１」の波形データ対応領域Ａｐのみがハードディスク３６から読み出されている状態であるから、次波形ブロック番号ＮＷ(i)には次に読み出されるべきブロックの番号である「２」が設定されるのである。
【００２１】
また、この次波形ブロック番号ＮＷ(i)に係る部分データが読み込まれるべき領域であるチャンネル対応領域ＢｉＦは、当該部分データを直ちに読み込んでも差し支えない状態であるから、転送イネーブルフラグＴＥ(i)は“１”に設定されるのである。さらに、ステップＳＰ１０においては、チェンジフラグＣＦ(i)が“１”に設定され、転送時限ＴＬ(i)は、波形データ対応領域Ａｉ内の部分データの再生が完了する予定時刻に設定される。また、発音チャンネルｉの音高（ｆナンバ）に対応して再生レートＤＲ(i)が設定され、割込時刻ＩＴ(i)は「０」（「０」は未だブロック再生完了割込が発生していないことを示す）に設定される。
【００２２】
次に、処理がステップＳＰ１２に進むと、チャンネルデータ５４−ｉが要求リストの末尾に追加される。これは、発音チャンネルｉのブロック番号「２」の部分データの転送を要求するためである。具体的には、現状において要求リストの末尾の発音チャンネルを「ｊ」とすると、発音チャンネルｊの次ｃｈ番号ＮＣ(j)は「i」に設定され、発音チャンネルｉの前ｃｈ番号ＰＣ(i)は「j」に設定される。そして、発音チャンネルｉの次ｃｈ番号ＮＣ(i)は、リストの末尾であることを示す「０」に設定される。次に、処理がステップＳＰ１４に進むと、ハードディスク３６からバッファメモリ２８または３０に対して何らかの部分データが転送中であるか否かが判定される。ここで「ＹＥＳ」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「ＮＯ」と判定されると、処理はステップＳＰ１６に進み、後述する転送制御サブルーチン（図４(c)）が呼び出される。その詳細については後述するが、要求リストの中から一の転送要求が選択され、該転送要求に基づいて部分データの転送処理が実行される。
【００２３】
1．2．3．割込み処理の概要
次に、図８(a)〜(d)を参照し、本実施例における各種割込処理の概要を説明する。
これらの図においては、第１および第３発音チャンネルにおいて波形データが楽音信号が合成されていることとしている。従って、音源回路２０においては、第１発音チャンネルの再生レートＤＲ(１)に応じた周期でチャンネル対応領域Ｂ１Ｆ，Ｂ１Ｒが交互に読み出されるとともに、第３発音チャンネルの再生レートＤＲ(３)に応じた周期でチャンネル対応領域Ｂ３Ｆ，Ｂ３Ｒも交互に読み出されることになる。また、これらの図において波形メモリ２２内のハッチングを施した領域は、未だ音源回路２０による読み出されていない部分データが記憶されている領域であるとする。
【００２４】
図８(a)は、第３発音チャンネルについて、チャンネル対応領域Ｂ３Ｆの読み出しが終了し、読み出しアドレスがチャンネル対応領域Ｂ３Ｒに移った直後の状態を示す。チャンネル対応領域Ｂ３Ｆの読み出しが終了すると、音源回路２０によって、チャンネル対応領域Ｂ３Ｆの読み出しは終了した旨をＣＰＵ６に通知するためのブロック再生完了割込が発生される。これにより、ＣＰＵ６により、第３発音チャンネルが要求リストの末尾に追加される。ここで、要求リストが空リストであったとすると、第３発音チャンネルは要求リストの先頭の発音チャンネルになる。
【００２５】
次に、図８(b)においては、このブロック再生完了割込に応じて、ＣＰＵ６から転送処理部３２に対して、第３発音チャンネルに対する次の部分データを読み込むように指令される。これにより、転送処理部３２によって部分データの読み出しが開始される。読み出された部分データは、バッファメモリ２８，３０のうち一方（図示の例ではバッファメモリ３０）に順次転送されてゆく。ここで、ＣＰＵ６から転送処理部２６に対して、該部分データのバッファメモリ３０への転送が完全に終了したときに該部分データをさらに転送すべきチャンネル対応領域（ここではＢ３Ｆ）が、この時点で指示される。
【００２６】
次に、図８(c)において、該部分データのハードディスク３６からバッファメモリ３０への転送が完了すると、転送処理部３２から転送処理部２６に対してその旨が通知されるとともに、ＣＰＵ６に対して転送終了割込が発生する。転送処理部２６にあっては、上記通知に応答して、バッファメモリ３０から、先に通知されたチャンネル対応領域（Ｂ３Ｆ）への部分データの転送が自動的に開始される。すなわち、転送処理部２６においては、音源回路２０が波形メモリ２２を読み出していないタイミングが検出され、そのタイミングにおいて部分データが転送される。従って、音源回路２０が波形メモリ２２にアクセスしている状態では、この転送処理が待機されることになる。また、ＣＰＵ６においては、転送終了割込に応答して、他のチャンネルの部分データの転送の可否等が判定され、可能である場合には、該部分データの転送のための処理が実行される。以上の処理のうち、転送処理部２６において実行されるデータ転送はＣＰＵ６が関与することなく、転送処理部２６によって独自に実行されるため、ＣＰＵ６においては特に緊急を要する処理は無い。これは、先の図８(b)の段階において、ＣＰＵ６から転送処理部２６に対して、部分データを転送すべきチャンネル対応領域が予め指定されているからである。このように、本実施例によれば、部分データを転送すべきチャンネル対応領域を転送処理部２６に対して予め指定しておくことにより、ＣＰＵ６に対して緊急を要する処理が発生する頻度を減少させることができる。
【００２７】
ところで、図８(c)においては、第１発音チャンネルにおいて、チャンネル対応領域Ｂ１Ｒの読み出しが完了したものと仮定している。これにより、音源回路２０によって、チャンネル対応領域Ｂ１Ｒの読み出しは終了した旨をＣＰＵ６に通知するためのブロック再生完了割込が発生される。従って、ＣＰＵ６により、第１発音チャンネルが要求リストの末尾に追加される。ここで、要求リストが空リストであったとすると、第１発音チャンネルは要求リストの先頭の発音チャンネルになる。
【００２８】
次に、図８(d)においては、このブロック再生完了割込に応じて、ＣＰＵ６から転送処理部３２に対して、第３発音チャンネルに対する次の部分データを読み込むように指令される。これにより、転送処理部３２によって部分データの読み出しが開始される。読み出された部分データは、バッファメモリ２８，３０のうち、前回の転送処理に供されていなかったもの（図示の例ではバッファメモリ２８）に順次転送されてゆく。上述したように、バッファメモリ２８，３０から波形メモリ２２への部分データの転送は、音源回路２０が波形メモリ２２を読み出していないタイミングにおいて実行されるから、図示の例のように、この時点ではバッファメモリ３０には未だ波形メモリ２２に転送されていない部分データが残っている可能性がある。しかし、本実施例においてはバッファメモリ２８，３０が交互に使用されるため、バッファメモリ３０に残存している波形データを残したまま転送処理部３２による転送処理を続行することができる。
【００２９】
上述したように、転送処理部２６によって実行されるバッファメモリ２８，３０からチャンネル対応領域ＢｉＦ，ＢｉＲへの転送処理は、音源回路２０が波形メモリ２２を読み出していないタイミングが発生するまで実行されない。しかし、このようなタイミングは頻繁に発生するものである。しかも、かかる転送処理は半導体メモリから半導体メモリへの転送であるため、実際に処理が開始されると、処理は直ちに完了する。一方、転送処理部３２によるハードディスク３６からバッファメモリ２８，３０への転送処理は、ヘッドの移動やディスクの回転等、機械的な動作を伴うものであるため、転送処理部２６による転送処理と比較すると非常に遅いものになる。換言すれば、転送処理部３２がバッファメモリ２８，３０のうち一方に対して転送処理を開始すると、その転送処理が完了するまでに他方のバッファメモリは必ず空き状態になる。従って、例えばハードディスク３６がデータ転送可能な状態になっているにもかかわらず、転送処理部２６，３２側の準備が整わないためにデータ転送を待機させるような事態はまず生じないことが解る。結局、本実施例においては、ハードディスク３６から波形メモリ２２への部分データの最大転送速度は、ほぼハードディスク３６の性能によって決定されることになり、ハードディスク３６の性能を充分に発揮させることができる。また、かかる特徴は、ＣＰＵ６側から見れば、「転送終了割込が発生すると（一方のバッファメモリへの転送が完了すると）、他方のバッファメモリへの転送を直ちに開始してもよい」ということになる。これにより、ＣＰＵ６においては、他方のバッファメモリが空いているか否か等を確認する必要がなく、「他方のバッファメモリが空いていない」という理由によって処理が待たされることもない。これにより、ＣＰＵ６に対する負担を一層軽減することができる。
【００３０】
1．2．4．サウンドカード４０の動作
ここでサウンドカード４０内の動作を図２(a)，(b)を参照し説明しておく。上述したように、発音チャンネルｉに係るノートオンイベントが発生すると、該発音チャンネルに係る波形データ対応領域Ａｐ内の部分データの読出しが開始される。読出し処理は所定のサンプリング周期毎に実行され、該サンプリング周期毎に読出しアドレスに再生レートＤＲ(i)が加算されてゆく。ここで、再生レートＤＲ(i)は小数点以下の位まで定義することができるため、再生レートＤＲ(i)の累積結果である読出しアドレスの計算値も一般的には小数点以下の位を有することになる。かかる場合には、当該計算結果の前後のアドレスのサンプル値が読み出され、小数値に基づいて補間演算が行われる。これにより、読出しアドレスの計算値が小数値を有する場合であっても、折り返しノイズの少ないサンプリング値を求めることができる。
【００３１】
ここで、波形データ対応領域Ａｐの読出しが完了すると、その後は発音チャンネルｉに対応するチャンネル対応領域ＢｉＦ，ＢｉＲ内の部分データが交互に読み出される。そして、音源回路２０にあっては、読み出された部分データに対してエンベロープが付与されるとともに必要に応じて効果処理が実行され、その結果得られた楽音信号がサウンドシステム１８を介して放音されることになる。また、音源回路２０においては、波形データ対応領域Ａｐ、チャンネル対応領域ＢｉＦ，ＢｉＲのうち何れかの読出しが完了すると、ＣＰＵ６に対するブロック再生完了割込が発生する。また、何れかの発音チャンネルについてハードディスク３６からバッファメモリ２８，３０への部分データの転送が完了すると、転送終了割込が発生する。
【００３２】
1．2．5．転送制御サブルーチン（図４(c)）の処理
図４(c)に示す転送制御サブルーチンが呼び出されると、処理はステップＳＰ４０に進み、要求リスト中に次の転送要求（要素）が存在するか否かが判定される。ここで「ＮＯ」と判定されると、本ルーチンの処理は直ちに終了する。一方、ステップＳＰ４０において「ＹＥＳ」と判定されると、処理はステップＳＰ４２に進み、要求リストの次の転送要求が参照される。すなわち、本ルーチンが呼び出されステップＳＰ４０が最初に実行されると、要求リストの先頭の要素が存在するか否かが判定され、それ以降にステップＳＰ４０が実行されると、順次、次の要素が存在するか否かが判定されることになる。次に、処理がステップＳＰ４４に進むと、「存在する」と判定された転送要求に係る発音チャンネル番号が変数ｊに代入される。
【００３３】
次に、処理がステップＳＰ４６に進むと、該発音チャンネルｊに係る転送イネーブルフラグＴＥ(j)が「１」であるか否かが判定される。ここで「ＮＯ」と判定されると、処理はステップＳＰ４０に戻り、要求リスト内において発音チャンネルｊの次の転送要求について、上記ステップＳＰ４０〜ＳＰ４４の処理が実行される。これは、ある発音チャンネルが要求リストの先頭に位置していたとしても、当該発音チャンネルに係る転送イネーブルフラグが「１」でなければ当該チャンネルについて転送を開始することができないため、次に優先順位の高い発音チャンネルの転送を実行するためである。
【００３４】
このように、転送を行うことが可能である発音チャンネルのうち、要求リスト内で最も優先順位の高い発音チャンネルｊが検出されると、処理はステップＳＰ４８に進む。ここでは、ＣＰＵ６から転送処理部３２に対して、発音チャンネルｊと、次波形ブロック番号ＮＷ(j)とを伴う転送処理が指令される。これにより、転送処理部３２の制御の下、ハードディスク３６内に記憶され発音チャンネルｊに割り当てられている波形データにおいて、次波形ブロック番号ＮＷ(j)で特定される１クラスタの部分データが読み出され、バッファメモリ２８または３０への転送が開始される。さらに、該ステップＳＰ４８にあっては、ＣＰＵ６から転送処理部２６に対して、転送された部分データをさらに転送すべきチャンネル対応領域（ＢｊＦまたはＢｊＲ）が指令される。そして、ＣＰＵ６においては、要求リストの中から、当該発音チャンネルｊに係る転送要求が削除される。
【００３５】
次に、処理がステップＳＰ５０に進むと、発音チャンネルｊに係る次波形ブロック番号ＮＷ(j)が「１」だけインクリメントされ、転送イネーブルフラグＴＥ(j)が“０”に設定される。ここで、転送イネーブルフラグＴＥ(j)を“０”に設定する理由について説明しておく。上述したように、音源回路２０においては波形データ対応領域Ａｐの読出しが終了すると、発音チャンネルｊのチャンネル対応領域ＢｊＦ，ＢｊＲが交互に読み出される。その状態において上記ステップＳＰ４８が実行されると、バッファメモリ２８または３０に部分データが転送され、しかる後にチャンネル対応領域ＢｊＦまたはＢｊＲのうち「現在読出し中ではない領域」に対して該部分データが転送されることになる。
【００３６】
そして、ステップＳＰ５０において次波形ブロック番号ＮＷ(j)が「１」だけインクリメントされると、当該次波形ブロック番号ＮＷ(j)に係る転送先の領域は、チャンネル対応領域ＢｊＦまたはＢｊＲのうち「現在読出し中の領域」になる。従って、かかる転送処理を直ちに実行することはできず、「現在読出し中の領域」の読出しが完了するまで転送処理が実行されないように制限しておく必要がある。このため、ステップＳＰ５０においては転送イネーブルフラグＴＥ(j)が“０”に設定されるのである。
【００３７】
次に処理がステップＳＰ５２に進むと、先にステップＳＰ４８において転送開始された部分データ（ブロック番号＝ＮＷ(j)−１）が当該波形データの最後の部分データであるか否かが判定される。ここで「ＹＥＳ」と判定されると処理はステップＳＰ５４に進み、音源回路２０に対して発音チャンネルｊの消音処理が指令される。すなわち、音源回路２０において当該指令が受信されると、発音チャンネルｊの楽音信号が徐々にフェードアウトされ、しかる後に発音チャンネルｊが解放される。一方、ステップＳＰ５０において「ＮＯ」と判定されると処理はステップＳＰ５６に進む。ここでは、次波形ブロック番号ＮＷ(j)の転送要求が要求リストの末尾に追加される。上述したように、要求リストの内容はその先頭から読み出されるから、最悪の場合でも転送要求は先着順に処理されることになる。さらに、後述するバックグラウンド処理ルーチン（図５）が実行されると、要求リストは転送時限ＴＬ(j)順にソートされるから、要求リストはより望ましい状態になるが、仮に該バックグラウンド処理ルーチンが実行されなかったとしても、破綻が生じにくいように要求リストが構成されることが解る。
【００３８】
さらに、ステップＳＰ５６においては、チェンジフラグＣＦ(j)が“１”に設定されるとともに、転送時限ＴＬ(j)が更新される。まず、次波形ブロック番号ＮＷ(j)の転送要求は要求リストの末尾に追加されたが、この転送要求は要求リストに含まれる転送要求のうち必ずしも優先順位が最も低いわけではない。従って、後述するバックグラウンド処理において優先順位の見直しを行うため、チェンジフラグＣＦ(j)を“１”に設定しておく必要がある。また、転送時限ＴＬ(j)は、既にチャンネル対応領域ＢｊＦ，ＢｊＲに転送されている（またはステップＳＰ４８において転送開始されている）全ての部分データの再生が完了する予定時刻に設定される。以上により、本サブルーチンの処理が終了する。
【００３９】
1．2．6．ブロック再生完了イベント処理（図４(a)）
何れかの発音チャンネルｉにおいてブロック再生完了割込が発生すると、図４(a)に示すブロック再生完了イベント処理が実行される。図において処理がステップＳＰ２０に進むと、割込が発生したチャンネル番号が変数ｉに代入される。次に、処理がステップＳＰ２２に進むと、転送イネーブルフラグＴＥ(i)が「１」に設定される。これは、次波形ブロック番号ＮＷ(i)の転送先の領域は、チャンネル対応領域ＢｉＦ，ＢｉＲのうち、この時点で再生が完了した側の領域であり、当該領域の再生が完了したために新たな部分データをいつでも転送可能になったからである。また、ステップＳＰ２２においては、割込時刻ＩＴ(i)に現在時刻が代入される。
【００４０】
また、割込時刻ＩＴ(i)が更新されると、この発音チャンネルｉの割込時刻ＩＴ(i)と再生レートＤＲ(i)とに基づいて転送時限ＴＬ(i)が再計算され更新される。転送時限ＴＬ(i)の更新前の値は、発音チャンネルｉの音高が変わらない限り割込時刻ＩＴ(i)と同一になる筈であるため、更新前の転送時限ＴＬ(i)に基づいて新たな転送時限ＴＬ(i)を計算することも考えられる。しかし、実際にはピッチベンド等の操作によって音高が若干変更されると、更新前の転送時限ＴＬ(i)は割込時刻ＩＴ(i)には一致しなくなる。このため、最新の割込時刻ＩＴ(i)と再生レートＤＲ(i)とに基づいて転送時限ＴＬ(i)を再計算することが望ましいのである。次に、処理がステップＳＰ２４に進むと、ハードディスク３６からバッファメモリ２８または３０に対して何らかの部分データが転送中であるか否かが判定される。ここで「ＹＥＳ」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「ＮＯ」と判定されると、処理はステップＳＰ２６に進み、上述した「転送制御サブルーチン（図４(c)）」が呼び出される。
【００４１】
1．2．7．転送終了イベント処理（図４(b)）
サウンドカード４０においてバッファメモリ２８，３０内の何れかの領域に対する転送が終了すると、転送終了割込が発生し、図４(b)に示す転送終了イベント処理ルーチンが起動される。本ルーチンにおいては、単に転送制御サブルーチン（図４(c)）が呼び出される。すなわち、部分データの転送が可能である限りは、転送が終了する毎に該転送制御サブルーチンが繰り返し呼び出され、転送処理が継続的に実行され続けることになる。
【００４２】
1．2．8．バックグラウンド処理（図５）
ＣＰＵ６は複数のタスクを同時に処理することができ、ＣＰＵ６の使用率は常にモニタされている。そして、使用率が所定値より低くなると、図５に示すバックグラウンド処理ルーチンが起動される。図において処理がステップＳＰ６０に進むと、要求リストに属する発音チャンネルのうちチェンジフラグＣＦ(i)が“１”であるチャンネルがサーチされる。次に、処理がステップＳＰ６２に進むと、かかるチャンネルは発見されたか否かが判定される。ここで「ＮＯ」と判定されると、本ルーチンの処理は直ちに終了する。
【００４３】
一方、ステップＳＰ６２において「ＹＥＳ」と判定されると処理はステップＳＰ６４に進み、発見されたチャンネル番号が変数ｉに代入される。次に、処理がステップＳＰ６８に進むと、要求リストの先頭より、転送時限ＴＬ(i)の転送要求を移動すべき位置が検出される。すなわち、発音チャンネルｉ以外の発音チャンネルｊの転送時限ＴＬ(j)を要求リストの先頭から順次検索してゆき、転送時限ＴＬ(i)よりも遅い転送時限ＴＬ(j)が発見されたならば、要求リスト中で発音チャンネルｊの一つ前の位置に発音チャンネルｉの転送要求が移動される。
【００４４】
次に処理がステップＳＰ７０に進むと、チェンジフラグＣＦ(i)が“０”に設定される。次に、処理がステップＳＰ７２に進むと、該バックグラウンド処理以外の処理が実行されているか否かが判定される。ここで「ＮＯ」と判定されると、ステップＳＰ６０〜ＳＰ７０の処理が繰り返される。一方、ステップＳＰ７２において「ＹＥＳ」と判定されると、当該他の処理を優先させるために本ルーチンは直ちに終了する。
【００４５】
このように、本ルーチンによれば、各発音チャンネルの転送要求が転送時限ＴＬの早い順にソートされるから、上記転送制御サブルーチン（図４(c)）においては、転送時限ＴＬの早い順に転送が可能であるか否か（転送イネーブルフラグＴＥが“１”であるか否か）が判定される。従って、該ルーチンにおいては、転送イネーブルフラグＴＥが“１”である発音チャンネルのうち転送時限ＴＬが最も早い発音チャンネルが選択されるため、部分データの転送が間に合わなくなるような事態を未然に防止することができる。
【００４６】
2．第２実施例
2．1．第２実施例のハードウエア構成
次に、本発明の第２実施例について説明する。第２実施例のハードウエア構成は第１実施例のものと同様であるが、サウンドカード４０には破線で示す転送管理部２４が追加される。この転送管理部２４は、ハードディスク３６から部分データの転送を行うべき発音チャンネルの順序を管理するものである。
【００４７】
2．2．第２実施例の動作
2．2．1．初期化処理
パーソナルコンピュータにおいて楽音信号生成システムのアプリケーションプログラムが起動されると、上記第１実施例の場合と同様に、ハードディスク３６内の所定のディレクトリに記憶されている波形データがサーチされ、波形データ対応領域Ａ１〜Ａｎが波形メモリ２２に確保され、これら波形データの先頭部分の部分データが該波形データ対応領域Ａ１〜Ａｎに各々格納される。また、バッファメモリ２８，３０には、各発音チャンネルに対して、「１クラスタ」相当長のチャンネル対応領域Ｂ１Ｆ，Ｂ２Ｆ，……，ＢｍＦおよびＢ１Ｒ，Ｂ２Ｒ，……，ＢｍＲが各々確保される。
【００４８】
次に、パーソナルコンピュータのＲＡＭ１２には、管理データ領域が確保されるが、本実施例における管理データは第１実施例のものとは異なり、「要求リスト」に関連するデータは含まれていない。すなわち、管理データ内にはヘッダデータ５２に対応するものは含まれず、各チャンネルデータ５４−１〜５４−ｍには先頭チャンネル番号ＳＣ、末尾チャンネル番号ＭＣは含まれない。本実施例においては、これらに対応する情報は転送管理部２４によって管理されるためである。
【００４９】
2．2．2．ノートオンイベントの発生。
通信インタフェース１４から入力されたＭＩＤＩ信号等においてノートオンイベントが発生すると、ＣＰＵ６において図７(a)に示すノートオンイベント処理ルーチンが起動される。
同ルーチンのステップＳＰ８２〜ＳＰ８８においては、第１実施例のＳＰ２〜ＳＰ８と同様の処理が実行される。すなわち、該ノートオンイベントに対して発音チャンネルｉが割り当てられ、波形データが決定されるとともに音源回路２０の発音チャンネルｉに対して各種パラメータが設定され、サウンドカード４０に対して発音指令が送信される。
【００５０】
次に、処理がステップＳＰ９０に進むと、ＲＡＭ１２内のチャンネルデータ５４−ｉにおける次波形ブロック番号ＮＷ(i)が「２」に設定される。次に、処理がステップＳＰ９４に進むと、ハードディスク３６からバッファメモリ２８または３０に対して何らかの部分データが転送中であるか否かが判定される。ここで「ＹＥＳ」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「ＮＯ」と判定されると、処理はステップＳＰ９６に進み、後述する転送制御サブルーチン（図７(d)）が呼び出される。
【００５１】
2．2．3．サウンドカード４０の動作
サウンドカード４０において転送管理部２４以外の部分の動作は第１実施例と同様である。さらに、本実施例にあっては、転送管理部２４において以下の処理が実行される。
まず、転送管理部２４においては、発音中の全発音チャンネルの中から、以下の全ての条件を満たすものを列挙したリストである「チャンネル番号リスト」が生成される。
（１）当該発音チャンネルｉに係るチャンネル対応領域ＢｉＦ，ＢｉＲのうち何れかに対して部分データの転送が可能であること、
（２）ＣＰＵ６から発音チャンネルｉについて消音指令を受けていないこと。
【００５２】
また、該リストの末尾には、実際には存在しないチャンネル番号である数値（例えば「０」）が追加される。そして、転送管理部２４においては、該チャンネル番号リストに属する全ての発音チャンネルｉについて、波形メモリ２２に既に書き込まれている部分データに基づいて波形データを再生可能な転送時限ＴＬ(i)が算出され、この転送時限ＴＬ(i)の早い順にチャンネル番号をソートしたリストである「チャンネル番号リスト」が生成される。但し、転送管理部２４自体は次波形ブロック番号ＮＷ(i)が存在するか否かは関知しないため、チャンネル番号リストには、実際には次波形ブロックが存在しない発音チャンネルも含まれる場合がある。
【００５３】
また、転送管理部２４において生成されたチャンネル番号リストは、ＣＰＵ６から自由に読み出すことができる。転送管理部２４においては、各発音チャンネルｊのチャンネル対応領域ＢｊＦ，ＢｊＲが逐次監視され、部分データの転送の可否に応じて発音チャンネルｊがチャンネル番号リストに追加され、あるいは発音チャンネルｊがチャンネル番号リストから削除される。また、これと同時に、上述したように転送時限ＴＬ(i)に応じて該リストが逐次ソートされる。従って、例えばＣＰＵ６がチャンネル番号リストの先頭を読み出すと、チャンネル対応領域ＢｉＦ，ＢｉＲの何れかに空きがあり、かつソート後の順位が最も高い発音チャンネルｉが読み出されることになる。
【００５４】
2．2．4．転送制御サブルーチン
図７(d)に示す転送制御サブルーチンが呼び出されると、処理はステップＳＰ１２０に進み、転送管理部２４内のチャンネル番号リストの先頭の要素であるチャンネル番号がＣＰＵ６によって読み出され、その結果が変数ｉに代入される。上述したように、転送処理を行うべきチャンネル番号が存在しない場合には、所定の数値（例えば「０」）が読み出されることになる。次に、処理がステップＳＰ１２２に進むと、転送処理を行うべきチャンネル番号が存在するか否か（「０」以外の値であるか否か）が判定される。
【００５５】
ここで「ＮＯ」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「ＹＥＳ」と判定されると、処理はステップＳＰ１２４に進み、次波形ブロック番号ＮＷ(i)に対応する部分データが存在するか否かが判定される。例えば、対応する波形データの全ブロックの転送が完了した場合等においては、ここで「ＮＯ」と判定され、処理はステップＳＰ１２５に進み、ＣＰＵ６から音源回路２０に対して発音チャンネルｉの消音指令が供給される。これにより、発音チャンネルｉの楽音信号が徐々にフェードアウトされ、しかる後に発音チャンネルｉが解放される。また、この消音指令が転送管理部２４によって検出されると、チャンネル番号リストから発音チャンネルｉに係る要素が削除される。そして、処理がステップＳＰ１２０に戻ると、転送管理部２４から次のチャンネル番号が読み出され、ステップＳＰ１２２，ＳＰ１２４の判定が繰り返される。
【００５６】
そして、ステップＳＰ１２４において「ＹＥＳ」と判定されると、処理はステップＳＰ１２６に進む。ここでは、ＣＰＵ６から転送処理部３２に対して、発音チャンネルｊと、次波形ブロック番号ＮＷ(j)とを伴う転送処理が指令される。これにより、転送処理部３２の制御の下、ハードディスク３６内に記憶され発音チャンネルｊに割り当てられている波形データにおいて、次波形ブロック番号ＮＷ(j)で特定される１クラスタの部分データが読み出され、バッファメモリ２８または３０への転送が開始される。さらに、該ステップＳＰ１２６にあっては、ＣＰＵ６から転送処理部２６に対して、転送された部分データをさらに転送すべきチャンネル対応領域（ＢｊＦまたはＢｊＲ）が指令される。次に、処理がステップＳＰ１２８に進むと、次波形ブロック番号ＮＷ(i)が「１」だけインクリメントされ、本ルーチンの処理が終了する。
【００５７】
2．2．5．ブロック再生完了イベント処理（図７(b)）
何れかの発音チャンネルにおいてブロック再生完了割込が発生すると、図７(b)に示すブロック再生完了イベント処理ルーチンが実行される。図において処理がステップＳＰ１００に進むと、ハードディスク３６からバッファメモリ２８または３０に対して何らかの部分データが転送中であるか否かが判定される。ここで「ＹＥＳ」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「ＮＯ」と判定されると、処理はステップＳＰ１０２に進み、上述した転送制御サブルーチン（図７(d)）が呼び出される。
【００５８】
2．2．6．転送終了イベント処理（図７(c)）
サウンドカード４０においてバッファメモリ２８，３０内の何れかの領域に対する転送が終了すると、転送終了割込が発生し、図７(c)に示す転送終了イベント処理ルーチンが起動される。本ルーチンにおいては、単に転送制御サブルーチン（図７(d)）が呼び出される。すなわち、部分データの転送が可能である限りは、該転送制御サブルーチンにおいて、転送処理が継続的に実行され続けることになる。
【００５９】
以上のように、本実施例によれば、次波形ブロック番号ＮＷの管理等を除き、第１実施例の要求リストに相当するチャンネル番号リストの管理の大部分がハードウエアである転送管理部２４に委ねられる。これにより、本実施例は第１実施例と比較して、ＣＰＵ６の処理負荷を軽減することができる。
【００６０】
3．変形例
本発明は上述した実施例に限定されるものではなく、例えば以下のように種々の変形が可能である。
(1)上記各実施例においては、パーソナルコンピュータ上で動作するアプリケーションプログラムによって各種処理を実行したが、このアプリケーションプログラムのみをＣＤ−ＲＯＭ、フレキシブルディスク等の記録媒体に格納して頒布し、あるいは伝送路を通じて頒布することもできる。
【００６１】
(2)上記各実施例においては、バッファメモリ２８，３０および波形メモリ２２をサウンドカード４０内に実装したが、これらのメモリ領域をＲＡＭ１２内に確保することにより、これらメモリの実装を省略してもよい。
【００６２】
(3)上記各実施例において「再生レートＤＲ(i)」は発音チャンネルｉの音高（ｆナンバ）に対応して決定されたが、本発明の「再生レート」は音高（ｆナンバ）に対して一意に決定されるものである必要はない。例えば、ハードディスク３６に記憶される波形データは、データを圧縮した波形データであることも考えられ、その場合、非圧縮の波形データと比較すると、同一のｆナンバに対してバッファメモリ２８，３０内の部分データが消費される速度は遅くなる。また、波形データの分解能も「８ビット」、「１６ビット」、「２４ビット」等、波形データ毎に異なっても差し支えないから、波形データの分解能が高くなるほどバッファメモリ２８，３０内の部分データが消費される速度は速くなる。
【００６３】
(4)また、上記各実施例においては、次に転送すべき１ブロックの部分データの転送時限ＴＬに基づいて要求リストを作成したが、それ以降に転送すべき複数のｎブロックの転送時限ＴＬを算出し、これらを全て含めるように要求リストを作成するようにしてもよい。
【００６４】
(5)また、上記実施例においては、要求リスト中には発音中の全発音チャンネルが含まれていたが、チャンネル対応領域ＢｉＦ，ＢｉＲのうち一方が書き込み可能になっている発音チャンネルｉのみを要求リストに含めるようにしてもよい。
(6)また、要求リストの他の構成方法として、ハードディスク３６に後続の未読の部分データが存在する発音チャンネルのみによって要求リストを構成してもよい。
【００６５】
(7)また、全体のサイズが小さい波形データについては、全体をアタック部として波形メモリ２２内に置き、ハードディスク３６からの転送を行うことなく波形データを再生できるようにしてもよい。
かかる場合には、図３のステップＳＰ１０および図７(a)のステップＳＰ９０を実行する前に、全体をアタック部として波形メモリ２２内に記憶した波形データであるか否かを判定し、この判定結果が否定的であれば上記実施例のステップＳＰ１０およびＳＰ９０をそれぞれ実行し、判定結果が肯定的であれば、これらに代えて以下のステップＳＰ１０’、ステップＳＰ９０’を各々実行するとよい。
・ステップＳＰ１０’：次波形ブロック番号ＮＷ(i)を「なし」の状態（例えば「０」）に設定し、転送イネーブルフラグＴＥ(i)を“０”に設定する。
・ステップＳＰ９０’：次波形ブロック番号ＮＷ(i)を「なし」の状態（例えば「０」）に設定する。
【００６６】
(8)上記実施例においては最大発音チャンネル数ｍに対応する全発音チャンネルに対してチャンネル対応領域Ｂ１Ｆ，Ｂ１Ｒ，Ｂ２Ｆ，Ｂ２Ｒ，……，ＢｍＦ，ＢｍＲを確保した。しかし、上記変形例のように「全体をアタック部として波形メモリ２２内に記憶した波形データ」については、かかるチャンネル対応領域は不要である。従って、音源回路２０の一部の発音チャンネルをかかる波形データに対する専用発音チャンネルとし、該専用発音チャンネル数に対応する数だけチャンネル対応領域の数を削減してもよい。
【００６７】
(9)上記実施例においてはアプリケーションプログラムの起動時において、各波形データの先頭部分の部分データを波形データ対応領域Ａ１〜Ａｎに読み込んだが、該波形データを読み込むタイミングはこれに限られるものではない。例えば、ＯＳの起動時にこれら波形データを読み込むようにしてもよい。また、波形メモリ２２の一部をフラッシュメモリまたはバッテリーバックアップ型のＲＡＭ等の不揮発性メモリによって構成すると、一旦先頭部分の部分データが読み込まれたならばＯＳやアプリケーションプログラムの起動毎に読み込む必要がなくなる。さらに、波形メモリ２２の一部をＲＯＭによって構成し、ここに先頭部分の部分データを記憶しておけば、その読み込み自体を不要にすることができる。
【００６８】
(10)また、上記実施例においてバックグラウンド処理ルーチン（図５）は、ＣＰＵ６の使用率が所定値より低くなったことを条件として実行されたが、同ルーチンを実行するタイミングはこれに限られるものではなく、要は他の処理と比較して優先度を低くして実行するようにするとよい。例えば、ＣＰＵ６がマルチタスクに対応する場合には、同ルーチンをバックグラウンド処理プロセス内で常時実行可能にしておき、他のプロセスと比較してそのプロセスの優先度を低く設定しておいてもよい。また、ＣＰＵ６が実質的な処理を行っていないアイドル期間の長さを監視し、このアイドル期間が所定時間以上になるとバックグラウンド処理ルーチンを起動するようにしてもよい。但し、バックグラウンド処理ルーチンにおいてステップＳＰ６４〜ＳＰ７０が実行されている途中に他の処理によって管理データ５０が更新されると、バックグラウンド処理ルーチンが誤動作するため、ステップＳＰ６４〜ＳＰ７０を実行する期間内では他のプロセスに対して管理データ５０をロックしておくとよい。
【００６９】
(11)また、上記実施例のステップＳＰ６８にあっては、要求リストの末尾より、転送時限ＴＬ(i)の転送要求を挿入すべき位置を検出するようにしてもよい。但し、この場合には、チェンジフラグＣＦ(j)が“１”である発音チャンネルは無視する必要がある。すなわち、発音チャンネルｉ以外の発音チャンネルｊの転送時限ＴＬ(j)を要求リストの末尾から順次検索してゆき、「転送時限ＴＬ(i)よりも早い転送時限ＴＬ(j)を有し、チェンジフラグＣＦ(j)が“０”である発音チャンネルｊ」が発見されたならば、該発音チャンネルｊの一つ後の位置に発音チャンネルｉの転送要求を挿入するとよい。
【００７０】
(12)また、上記実施例においては、ハードディスク３６が波形データを記憶する単位である「１ブロック」のデータ量は「１クラスタ」と同一であったが、両者は必ずしも同一でなくてもよい。すなわち、「１ブロック」が「複数クラスタ」から構成されるようにしてもよい。
【００７１】
(13)また、上記実施例においては、第１の記録媒体としてハードディスク３６を適用した例を説明したが、第１の記録媒体として、ＭＯ、ＣＤ、ＤＶＤなどを適用してもよい。
(14)また、上記実施例においては、波形メモリ２２に各発音チャンネルｉ毎に２つのチャンネル対応領域ＢｉＦ，ＢｉＲを設けたが、発音チャンネルｉ毎に「３」以上のチャンネル対応領域を設けても良い。
【００７２】
(15)また、各発音チャンネルのチャンネル対応領域は、「１クラスタ」相当量づつ分かれている必要はない。すなわち、１つの発音チャンネルに対して「２クラスタ」以上のサイズ（「１クラスタ」の整数倍に限られない）を有する１つの領域をチャンネル対応領域にしてもよい。かかる場合は、各発音チャンネル毎に、どのアドレスまで書き込みが終了したかを示す書込みポインタと、どのアドレスまで読み出しが終了したかを示す読出しポインタとをＲＡＭ１２内に確保し、両ポインタの差が１クラスタ以上になったときにブロック再生完了割込を発生させるようにするとよい。
【００７３】
(16)また、この例において、１つの発音チャンネルのチャンネル対応領域の総和が「２クラスタ」相当量を超える場合には、両ポインタの差が２クラスタを超えるタイミング毎にブロック再生完了割込を発生させてもよい。例えば、チャンネル対応領域が「３クラスタ」相当量である場合は、両ポインタの差が２クラスタになる毎にブロック再生完了割込を発生させ、ハードディスク３６からバッファメモリ２８，３０を介しての波形メモリ２２への部分データの転送を２回行い、１回のブロック再生完了割込において「２クラスタ」相当量の部分データを補充するようにしてもよい。
【図面の簡単な説明】
【００７４】
【図１】本発明の第１，第２実施例の楽音信号生成システムのブロック図である。
【図２】第１実施例の動作説明図である。
【図３】第１実施例のノートオンイベント処理ルーチンのフローチャートである。
【図４】第１実施例の各種処理ルーチンのフローチャートである。
【図５】第１実施例のバックグラウンド処理ルーチンのフローチャートである。
【図６】第１実施例のデータ構造図である。
【図７】第２実施例の各種処理ルーチンのフローチャートである。
【図８】第１および第２実施例の動作説明図である。
【符号の説明】
【００７５】
２：表示器、４：操作子、６：ＣＰＵ、８：ＤＭＡ制御回路、１０：フラッシュメモリ、１２：ＲＡＭ、１４：通信インタフェース、１８：サウンドシステム、２０：音源回路（楽音信号生成手段）、２２：波形メモリ（第２の記録媒体）、２４：転送管理部、２６，３２：転送処理部、２７，２９：バス（第１および第２のバス）、２８，３０：バッファメモリ（第３の記録媒体）、３４：ＩＤＥ・Ｉ／Ｏ部、３６：ハードディスク（第１の記録媒体）、３８：ＣＤ−ＲＷドライブ、４０：サウンドカード、５０：管理データ、５２：ヘッダデータ、５４−１〜５４−ｍ：チャンネルデータ。
【図１】
2006184628.tif 000003
【図２】
2006184628.tif 000004
【図３】
2006184628.tif 000005
【図４】
2006184628.tif 000006
【図５】
2006184628.tif 000007
【図６】
2006184628.tif 000008
【図７】
2006184628.tif 000009
【図８】
2006184628.tif 000010