(57)【特許請求の範囲】
【請求項１】
演奏情報に基づいて波形データを生成する波形データ生成方法において、
演奏情報に基づいて一定または可変区間分の波形データを生成する波形データ生成過程と、
第１指令または第２指令を受信する過程と、
前記第１指令を受信すると、演奏情報をリアルタイムに有効化する過程と、
前記第１指令を受信すると、所定のタイミングに達したことを生成開始条件として、前記波形データ生成過程に対し、リアルタイムに有効化された演奏情報に基づく各区間の波形データのリアルタイム生成を指示する過程と、
前記第１指令を受信すると、前記指示に応じてリアルタイム生成された各区間の波形データを再生する過程と、
前記第２指令を受信すると、前記波形データ生成過程の処理が完了していることを生成開始条件として各区間の波形データのノンリアルタイム生成を指示する過程と、
前記第２指令を受信すると、ノンリアルタイム生成の指示された各区間に対応する演奏情報をノンリアルタイムに有効化する過程と、
前記第２指令を受信すると、前記波形データ生成過程において、ノンリアルタイムに有効化された演奏情報に基づいてノンリアルタイムに生成された波形データをメモリに記憶する過程と
を有することを特徴とする波形データ生成方法。
【請求項２】
演奏情報に基づいて一定または可変区間毎に波形データを生成する波形データ生成方法において、
演奏情報に基づいてそれぞれ異なる複数の生成方式により波形データを生成する複数の波形データ生成過程と、
第１指令または第２指令を受信する過程と、
受信した指令が前記第１指令であるか前記第２指令であるかに応じて前記複数の波形データ生成過程の一つを選択する過程と、
前記第１指令を受信すると、所定のタイミングに達したことを生成開始条件として、選択された過程に対して、前記各区間における波形データの生成を指示する過程と、
前記第２指令を受信すると、前の区間における波形データの生成が完了したことを生成開始条件として、前記選択された波形データ生成過程に対して、前記各区間における波形データの生成を指示する過程と
を有することを特徴とする波形データ生成方法。
【請求項３】
演奏情報に基づいて波形データを生成して記憶する波形データ記憶方法において、
前記演奏情報に基づいてリアルタイムに波形データを生成しつつ、生成された波形データを再生する過程と、
前記再生を途中で停止し、演奏情報における停止位置を指定する過程と、
前記停止位置以降の部分の演奏情報に対応する波形データをノンリアルタイムに生成する過程と、
ノンリアルタイムに生成された波形データをメモリに記憶する過程と
を有することを特徴とする波形データ記憶方法。
【請求項４】
演奏情報に基づいて波形データを生成して記憶する波形データ記憶方法において、
前記演奏情報に基づいて波形データをノンリアルタイム生成しつつ、生成された波形データをメモリに記憶する過程と、
前記演奏情報に対応した波形データ上における、前記ノンリアルタイム生成が実行されている位置を示す位置情報を表示する過程と、
前記ノンリアルタイム生成の途中で停止指示を受信する過程と、
前記停止指示を受信すると、前記ノンリアルタイム生成および前記波形データの記憶を中止する過程と
を有することを特徴とする波形データ記憶方法。
【請求項５】
請求項１〜４の何れかの方法を実行することを特徴とする波形データ生成装置。
【請求項６】
請求項１〜４の何れかの方法を実行するプログラムを記録したことを特徴とする記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パーソナルコンピュータ等のソフトウエアによる楽音合成に用いて好適な波形データ生成方法、波形データ記憶方法、波形データ生成装置および記録媒体に関する。
【０００２】
【従来の技術】
汎用パーソナルコンピュータを用いて楽音波形を発生させるシステムが本出願人により提案されている（特開平１０−１２４０６０号公報）。このシステムにおいては、ＭＩＤＩデータに基づいて１フレーム（例えば１０ｍｓｅｃ）毎の波形データがパーソナルコンピュータのＣＰＵによって逐次生成される。そして、生成されたデータはＤＭＡコントローラによって１フレームづつ読出され、ＤＡコンバータを介してアナログ信号に変換され発音される。
【０００３】
【発明が解決しようとする課題】
しかし、波形データを生成するためのアルゴリズムが複雑である場合や、ＣＰＵの処理能力が低い場合には、波形データの演算が１フレーム内で完了しないため、楽音波形を生成することが不可能であった。この発明は上述した事情に鑑みてなされたものであり、処理能力に応じて最適な状態で楽音波形を生成できる波形データ生成方法、波形データ記憶方法、波形データ生成装置および記録媒体を提供することを目的としている。
【０００４】
【課題を解決するための手段】
上記課題を解決するため請求項１記載の構成にあっては、演奏情報に基づいて波形データを生成する波形データ生成方法において、演奏情報に基づいて一定または可変区間分の波形データを生成する波形データ生成過程と、第１指令または第２指令を受信する過程と、前記第１指令を受信すると、演奏情報をリアルタイムに有効化する過程と、前記第１指令を受信すると、所定のタイミングに達したことを生成開始条件として、前記波形データ生成過程に対し、リアルタイムに有効化された演奏情報に基づく各区間の波形データのリアルタイム生成を指示する過程と、前記第１指令を受信すると、前記指示に応じてリアルタイム生成された各区間の波形データを再生する過程と、前記第２指令を受信すると、前記波形データ生成過程の処理が完了していることを生成開始条件として各区間の波形データのノンリアルタイム生成を指示する過程と、前記第２指令を受信すると、ノンリアルタイム生成の指示された各区間に対応する演奏情報をノンリアルタイムに有効化する過程と、前記第２指令を受信すると、前記波形データ生成過程において、ノンリアルタイムに有効化された演奏情報に基づいてノンリアルタイムに生成された波形データをメモリに記憶する過程とを有することを特徴とする。
また、請求項２記載の構成にあっては、演奏情報に基づいて一定または可変区間毎に波形データを生成する波形データ生成方法において、演奏情報に基づいてそれぞれ異なる複数の生成方式により波形データを生成する複数の波形データ生成過程と、第１指令または第２指令を受信する過程と、受信した指令が前記第１指令であるか前記第２指令であるかに応じて前記複数の波形データ生成過程の一つを選択する過程と、前記第１指令を受信すると、所定のタイミングに達したことを生成開始条件として、選択された過程に対して、前記各区間における波形データの生成を指示する過程と、前記第２指令を受信すると、前の区間における波形データの生成が完了したことを生成開始条件として、前記選択された波形データ生成過程に対して、前記各区間における波形データの生成を指示する過程とを有することを特徴とする。
また、請求項３記載の構成にあっては、演奏情報に基づいて波形データを生成して記憶する波形データ記憶方法において、前記演奏情報に基づいてリアルタイムに波形データを生成しつつ、生成された波形データを再生する過程と、前記再生を途中で停止し、演奏情報における停止位置を指定する過程と、前記停止位置以降の部分の演奏情報に対応する波形データをノンリアルタイムに生成する過程と、ノンリアルタイムに生成された波形データをメモリに記憶する過程とを有することを特徴とする。
また、請求項４記載の構成にあっては、演奏情報に基づいて波形データを生成して記憶する波形データ記憶方法において、前記演奏情報に基づいて波形データをノンリアルタイム生成しつつ、生成された波形データをメモリに記憶する過程と、前記演奏情報に対応した波形データ上における、前記ノンリアルタイム生成が実行されている位置を示す位置情報を表示する過程と、前記ノンリアルタイム生成の途中で停止指示を受信する過程と、前記停止指示を受信すると、前記ノンリアルタイム生成および前記波形データの記憶を中止する過程とを有することを特徴とする。
また、請求項５記載の構成にあっては、請求項１〜４の何れかの方法を実行することを特徴とする。
また、請求項６記載の構成にあっては、請求項１〜４の何れかの方法を実行するプログラムを記録したことを特徴とする。
【０００５】
【発明の実施の形態】
１．実施形態のハードウエア構成
本発明の一実施形態の楽音合成システムのハードウエア構成を図１を参照し説明する。図において２１はＣＰＵであり、後述する制御プログラムに従って、ＣＰＵバス２０を介して各部を制御する。２２はＲＯＭであり、イニシャルプログラムローダ等が格納されている。２３はＲＡＭであり、後述する各種のプログラムやデータがロードされ、ＣＰＵ２１によってアクセスされる。２４はタイマであり、所定時間毎にＣＰＵ２１に対する割込みを発生させる。
【０００６】
２５はＭＩＤＩインターフェースであり、外部のＭＩＤＩ機器（図示せず）との間でＭＩＤＩ信号のやりとりを行う。２６はハードディスクであり、オペレーティングシステム、各種ドライバ、各種アプリケーションプログラム、演奏情報等が記憶されている。２７はリムーバブルディスクであり、ＣＤ−ＲＯＭ、ＭＯドライブ等が設けられ、ハードディスク２６と同様の情報が記憶される。
【０００７】
２８は表示器であり、ＣＲＴあるいは液晶ディスプレイ等によって構成され、ユーザに対して種々の情報を表示する。２９はキーボード＆マウスであり、ユーザの操作によってＣＰＵ２１に対して各種の情報を入力する。３０は波形インターフェースであり、アナログ信号波形の入出力を行う。
【０００８】
ここで、波形インターフェース３０およびＲＡＭ２３の詳細を図４を参照し説明する。図において３１はＡＤコンバータであり、入力されたアナログ信号をデジタル信号に変換する。３３はサンプリングクロック発生器であり、所定のサンプリング周波数のクロック信号を発生する。３２は第１ＤＭＡコントローラであり、このクロック信号に同期してＡＤコンバータ３１の出力信号をサンプリングし、ＲＡＭ２３内の指定箇所に該サンプリング結果をダイレクトメモリアクセスにより転送する。
【０００９】
３４は第２ＤＭＡコントローラであり、サンプリングクロック発生器３３から出力されるクロック信号に同期して、ＲＡＭ２３に記憶されたデジタル波形データをダイレクトメモリアクセスによって読出す。３５はＤＡコンバータであり、読出されたデジタル波形データをアナログ信号に変換し出力する。
【００１０】
また、ＲＡＭ２３において、３６は波形テーブル領域であり、各種の波形データの雛形を格納する。３７は入力バッファ領域であり、第１ＤＭＡコントローラ３２によってここに波形データが書き込まれる。また、３８は出力バッファ領域であり、第２ＤＭＡコントローラ３４によって読み出される波形データが格納される。出力バッファ領域３８はリングバッファになっており、その読出しアドレスは循環的にインクリメントされる読出しポインタによって決定される。
【００１１】
２．実施形態の動作
２．１．メインルーチン
次に、本実施形態の楽音合成システムの動作を説明する。楽音合成システムは、汎用パーソナルコンピュータのアプリケーションプログラムの一種であり、オペレーティングシステムの管理の下、動作する。オペレーティングシステムのシェルプログラムにおいて所定の操作が行われると、図３に示す本システムのメインルーチンが起動される。図において処理がステップＳＰ１０１に進むと、所定の初期設定が行われる。次に、処理がステップＳＰ１０２に進むと、図４に示すメインウィンドウ５０が表示器２８に表示される。
【００１２】
図において５１はインジケータ部であり、再生する曲名等が表示される。５２はテンポインジケータであり、波形データを再生する際のテンポを表示する。５３は上記テンポの設定を行うテンポ設定ボタンである。５４は波形データを再生する際のキーの高さを示すキーインジケータであり、５５はそのキーの設定を行うキー設定ボタンである。５６は波形データの再生音量を示す音量インジケータであり、５７はその音量の設定を行う音量設定ボタンである。
【００１３】
５８は選曲ボタンであり、再生すべきＭＩＤＩデータ（演奏情報）を格納したファイルまたはディレクトリを指定する。６０は再生操作ボタン群であり、波形データの再生の開始、終了、ポーズ、早送り、巻き戻し、オートリバース、スキップ等の動作を指定する。特に、再生の開始および終了は、再生開始ボタン６２およびストップボタン６１をマウスでクリックすることにより為される。７１は波形データ記録ボタンであり、波形ファイルの確定後にマウスでクリックすることにより、波形データの記録を開始させる。次に、７２はヘルプボタンであり、マウスでクリックすると所定のヘルプファイルの内容を表示する。７３は終了ボタンであり、本実施形態の楽音合成システムの終了を指示する。
【００１４】
図３に戻り、処理がステップＳＰ１０３に進むと、オペレーティングシステムから何等かのメッセージが届いているか否かが判定される。ここで「ＮＯ」と判定されると、メッセージが検出されるまで同ステップが繰返される。そして、メッセージが検出されると、処理はステップＳＰ１０４に進み、そのメッセージの内容に応じた処理が行われる。以後、ステップＳＰ１０３、１０４の処理が繰返されることになる。
【００１５】
２．２．オペレーティングシステムにおけるタイマ処理
本実施形態の楽音合成システム等のアプリケーションプログラムは、オペレーティングシステムに対してタイマメッセージの設定を行うことができる。タイマメッセージの設定が行われると、所定周期毎にオペレーティングシステムからアプリケーションプログラムにタイマメッセージが送信される。本実施形態にあっては、「テンポクロック周期」および「フレーム周期」の２つの周期毎に、オペレーティングシステムから楽音合成システムにタイマメッセージが送信される。
【００１６】
ここで、「テンポクロック」とはＭＩＤＩイベントを発生させるタイミングの単位であり、四分音符の「１／１６」の周期である。従って、テンポクロックの周期は、テンポ設定ボタン５３等によってテンポが設定される毎に変更される。また、本実施形態においては、波形データは短い時間毎に小分けされて合成される。「フレーム」とはこの波形データを合成する時間の単位となる周期であり、例えば「１０ｍｓｅｃ」に設定される。ここで、オペレーティングシステムにおいてはタイマメッセージ処理の優先度は低く設定されているため、タイマメッセージは時々遅れたり抜け落ちることもあり得る。
【００１７】
２．３．選曲ボタン５８のイベント処理
選曲ボタン５８がマウスでクリックされると、オペレーティングシステムから楽音合成システムに対して、その旨のメッセージが送信される。かかるメッセージがステップＳＰ１０３で検出されると、曲ファイル（ＭＩＤＩファイル）名の指定を促す子ウィンドウが表示器２８に表示される（図示せず）。ここでユーザが曲ファイル名を指定して子ウィンドウを閉じると、この曲ファイル名が記憶され、子ウィンドウが閉じられた後、処理はメインルーチンに戻る。
【００１８】
２．４．再生開始ボタン６２のイベント処理
曲ファイル名が指定された後、再生開始ボタン６２がマウスでクリックされると、その旨がオペレーティングシステムから楽音合成システムに通知され、楽音合成システムにあっては図６に示す再生開始ルーチンが起動される。図において処理がステップＳＰ１に進むと、指定された曲ファイルの現在位置（初期状態においては先頭、一時停止中はその一時停止の操作がなされた位置、あるいは、操作者の位置指定操作により指定された位置）からの再生が準備される。また、オペレーティングシステムに対しては、フレーム周期毎のタイマメッセージの送信が要求される。次に、処理がステップＳＰ２に進むと、後述するソフト音源の動作の開始が指示される。次に、処理がステップＳＰ３に進むと、フラグＲＵＮが“１”に設定され、処理はメインルーチンに戻る。
【００１９】
２．５．テンポクロックイベント処理
メインルーチンにおいてオペレーティングシステムからテンポクロックメッセージが供給されると、ステップＳＰ１０４において図８に示すテンポクロックイベント処理ルーチンが起動される。図において処理がステップＳＰ１１に進むと、フラグＲＵＮが“１”であるか否かが判定される。ここで「ＮＯ」と判定されると、本ルーチンの処理は直ちに終わる。一方、フラグＲＵＮが“１”である場合、すなわち上述した再生開始ボタン６２のイベント処理が行われた場合には「ＹＥＳ」と判定され、処理はステップＳＰ１２に進む。
【００２０】
ステップＳＰ１２においては、所定のテンポカウンタ（変数）が「１」だけインクリメントされる。ここで、テンポカウンタは初期設定時に「０」にイニシャライズされている。従って、テンポカウンタは、フラグＲＵＮが“１”になった後のテンポクロック数をカウントする変数になる。次に処理がステップＳＰ１３に進むと、先にステップＳＰ１において準備された曲ファイルが参照され、何れかのイベントを再生する時刻に達したか否かが上記テンポカウンタに基づいて判定される。
【００２１】
ここで「ＹＥＳ」と判定されると、処理はステップＳＰ１４に進み、該時刻のＭＩＤＩイベントが発生される。例えば、なんらかのノートオンイベントを発生させる場合には、該イベント用の発音チャンネルが割り当てられる。すなわち、該ノートオンイベント用の各種発音パラメータ等を格納するエリアがＲＡＭ２３内に確保され、音源の種類に応じて発音パラメータがセットされる。また、該イベントがノートオフイベントであれば、必要に応じて消音処理が行われた後、対応する発音チャンネルが解放される。
【００２２】
２．６．フレーム周期イベント処理
メインルーチンにおいてオペレーティングシステムからフレーム周期メッセージが供給されると、ステップＳＰ１０４において図１０に示すフレーム周期イベント処理ルーチンが起動される。図において処理がステップＳＰ４１に進むと、今回生成すべきフレーム数に応じて、生成すべきサンプル数が決定される。なお、生成すべきフレーム数は一般的には「１」であるが、フレーム周期メッセージが抜けた場合には、抜けた数だけフレーム数は加算される。
【００２３】
次に処理がステップＳＰ４２に進むと、当該フレーム数分の波形データを書き込むべきバッファ領域が準備される。次に処理がステップＳＰ４３に進むと、図１１に示す音源処理ルーチンが起動される。詳細は後述するが、この音源処理ルーチンによって、先に確保されたバッファ領域に上記フレーム分の波形データが書き込まれる。次に処理がステップＳＰ４４に進むと、生成された波形データを波形インターフェース３０に渡すために、該波形データが出力バッファ領域３８に転送される。以上の処理が終了すると、処理はメインルーチンに戻る。なお、出力バッファ領域３８に転送された波形データは、先述した動作により、第２ＤＭＡコントローラ３４によりサンプリング周期毎に１サンプルづつ読み出され、ＤＡコンバータ３５でアナログ信号に変換されて出力される。
【００２４】
上述したように、出力バッファ領域３８はリングバッファになっており、その読出しアドレスは循環的にインクリメントされる読出しポインタによって決定される。今回新たに生成された波形データを格納するアドレスは、読出しポインタと同様に循環的にインクリメントされる書込みポインタによって決定される。書込みポインタは、読出しポインタに対して数フレーム分だけ先行している。これにより、書込みポインタと読出しポインタとは、その間隔をほぼ一定に保ちつつ出力バッファ領域３８内を巡回する２つのアドレスを示すことになる。
【００２５】
フレーム周期メッセージが１回または数回連続して抜けると、その回数に相当するだけ書込みポインタと読出しポインタとの距離は一時的に縮まるが、次回にステップＳＰ４１が呼び出された際に抜けた回数をリカバーするように生成フレーム数およびサンプル数が決定される。すなわち、読出しポインタと書込みポインタとの間隔は、フレーム周期メッセージの抜けに対応するための時間的なマージンになる。
【００２６】
２．７．音源処理
本実施形態においては、波形データの生成はＣＰＵ２１上で動くソフトウエアモジュールによって行われる。波形データを生成するソフトウエアモジュールは、音源モジュールと効果モジュールとに大別される。音源モジュールはＦＭ音源、ＰＣＭ音源、物理モデル音源等をソフトウエアで実現し波形データを生成するモジュールであり、効果モジュールは既に得られた波形データに対してリバーブ、コーラス等の効果を施すモジュールである。
【００２７】
ＲＡＭ２３においては、各音源モジュールおよび効果モジュール間で波形データを受け渡すためのバッファが設けられる。ここで、各モジュールおよびバッファ間の波形データの流れを図１４および図１５に示す。図１４においてパート１の波形データは、５系統のセンドレベルが乗算され、各乗算結果が各バッファＷＢ１，２，５〜７に書き込まれる。また、パート２の波形データに対しては、インサーションエフェクトＩＥＦ１が施された後、４系統のセンドレベルが乗算され、各乗算結果が各バッファＷＢ１〜４に足し込まれる。すなわち、元々のバッファＷＢ１〜４の内容に新たな乗算結果が加算される。このようにしてパート１〜１６に対応する波形データは、必要に応じてインサーションエフェクトが施された後、種々のセンドレベルでバッファＷＢ１〜７に書き込まれる。
【００２８】
次に、図１５において、バッファＷＢ３，４の内容に対して、何れかの効果モジュールによって効果ＥＦ１が施され、その結果に４系統のセンドレベルが乗算された後、各乗算結果が各バッファＷＢ１，２，５，６の内容に足し込まれる。次に、バッファＷＢ５，６の内容に対して、効果ＥＦ２が施され、その結果に４系統のセンドレベルが乗算された後、各乗算結果が各バッファＷＢ１，２，７の内容に足し込まれる。そして、バッファＷＢ７の内容に対して効果ＥＦ３が施され、その結果に２系統のセンドレベルが乗算された後、各乗算結果が各バッファＷＢ１，２の内容に足し込まれる。
【００２９】
このバッファＷＢ１，２の内容は、最終的な音源処理結果として呼出元のルーチンに渡される。すなわち、上記フレーム周期イベント処理ルーチン（図１０）においては、バッファＷＢ１，２の内容は書込みポインタに従って出力バッファ領域３８に転送されることになる。このように、本実施形態においては、複数の音源モジュールおよび効果モジュールの入出力バッファとセンドレベルとを定めておくことにより、様々な態様で楽音波形を生成することができる。
【００３０】
入出力バッファとセンドレベルとが予め決定されていれば、音源モジュールおよび効果モジュールを順次実行してゆくことによって所望のミキシング結果が得られる。そのフローチャートを図１１に示しておく。図においてステップＳＰ５１〜ＳＰ６９においては音源モジュールおよびインサーションエフェクトモジュールが順次実行され、バッファＷＢ１〜７に波形データが格納される。次に、ステップＳＰ７０〜ＳＰ７９においては、効果モジュールが順次実行され、バッファＷＢ１，２に最終的な波形データが格納されるのである。なお、このように楽音波形を生成する方法に関しては、特開平１０−１２４０６０号公報および特願平１０−１３３７６１号に詳述されている。
図１１の音源処理においては、ｎ個の音源モジュールとｍ個の効果モジュールが順次実行されるようになっているが、この音源処理で実行するモジュールの数や内容はユーザの操作子操作や制御コード等に応じて任意に変更することができる。音源モジュールとしては、物理モデル音源、ＰＣＭ音源、ＦＭ音源、音声合成音源等の種類が選択可能であり、さらに、同じ音源種類の中でもアルゴリズムやサンプリング周波数の異なる音源モジュールが選択可能である。一方、効果モジュールとしては、リバーブ、コーラス、ディストーション、コンプレッサ等が選択可能である。
【００３１】
２．８．ストップボタン６１のイベント処理
ストップボタン６１がマウスでクリックされると、その旨がオペレーティングシステムから楽音合成システムに通知され、楽音合成システムにあっては図７に示す再生停止ルーチンが起動される。図において処理がステップＳＰ６に進むと、フラグＲＵＮが“０”に設定される。これにより、以後、テンポクロック処理ルーチンが呼び出された場合においても実質的な処理は行われなくなる。
【００３２】
次に、処理がステップＳＰ７に進むと、ソフト音源の動作停止が指示される。すなわち、各発音チャンネルに対してノートオフイベントが発生した場合と同様に、必要に応じて消音処理が行われた後、対応する発音チャンネルが解放される。次に、処理がステップＳＰ８に進むと、曲ファイルの再生停止処理が行われ、処理はメインルーチンに戻る。
【００３３】
２．９．波形データ記録ボタン７１のイベント処理
波形データ記録ボタン７１がマウスでクリックされると、その旨がオペレーティングシステムから楽音合成システムに通知され、楽音合成システムにあっては図９に示す波形データ保存ルーチンが起動される。図において処理がステップＳＰ２１に進むと、曲ファイルの現在位置からの再生が準備される。
【００３４】
ここで、「現在位置」とは、選択された曲ファイルが未だ再生されていない場合には曲ファイルの先頭であり、曲ファイルが再生中である場合は再生中の位置である。換言すれば、本実施形態においては、曲ファイルが指定された後に直ちに波形データの記録を行うこともでき、リアルタイムに曲ファイルを再生している途中で所望の位置から波形データの記録を開始させることもできる。なお、波形記録中は発音処理は行われないため、オペレーティングシステムに対して、「テンポクロック周期」および「フレーム周期」のタイマメッセージを停止するように要求される。
【００３５】
次に、処理がステップＳＰ２２に進むと、波形ファイル名の入力を促すウィンドウが表示器２８に表示される。ユーザによってこの波形ファイル名が指定されると、当該ファイルがオープンされる。なお、該当するファイル名が存在しない場合には、新規ファイルが作成されオープンされる。
【００３６】
また、波形ファイル名を指定する際のオプションとして、波形ファイルを圧縮するか否かを指定するラジオボタンも表示される。このラジオボタンをマウスでクリックすると、波形データは圧縮されつつファイルに記録されることになる。次に処理がステップＳＰ２３に進むと、図５に示す波形データ保存ウィンドウ８０が表示器２８に表示される。図５において８１は曲名表示欄であり、先にインジケータ部５１に示されていた曲名が表示される。
【００３７】
８２はファイル名表示欄であり、先に指定された波形ファイル名が表示される。８３は進行状況グラフ表示欄であり、曲ファイルの再生開始位置に対応する時刻（０’００．０００）と、曲ファイルの最終位置に対応する時刻（２’５７．９３０）と、波形データの生成状況の進行を示す時刻（１’３６．６００）とが数値表示される。また、前記再生開始位置から前記最終位置までの時間を１００％とした前記生成状況の進行具合を、百分率のグラフとして表示している。８４は記録状況表示部であり、現在までに波形ファイルに記憶し終えた波形データの時間長と、それに対応する波形ファイルのサイズとが表示される。
【００３８】
８５はディスク限界表示部であり、波形ファイルが属するドライブ（例えばハードディスク２６あるいはリムーバブルディスク２７）における空き容量と、この空き容量に対応して記録可能な波形データの時間とが表示される。８６はトータルサイズ表示欄であり、曲ファイルの前記再生開始位置から前記最終位置までを全て再生し生成された波形データを記録した場合の波形データのサイズを表示している。８７はストップボタンであり、波形データ記録を途中で終了し、その時点までに生成し終えた波形データを記憶する波形ファイルを残すよう指令するために設けられている。８８はアボートボタンであり、波形データ記録を中止してその結果を破棄するために設けられている。
【００３９】
図９に戻り、処理がステップＳＰ２４に進むと、波形データを一時記憶する転送バッファ領域が確保される。次に、処理がステップＳＰ２５に進むと、音源処理ルーチン（図１１）で生成すべき波形データのサンプル数が決定される。なお、ステップＳＰ４１において説明したようにリアルタイムで発音処理を行うモードにおいてはフレーム周期メッセージの抜けに応じてサンプル数が決定されたが、波形データを記録するモードにおいては時間的な制約が無いため、ＣＰＵの都合に応じて最も効率の高くなるサンプル数を選択するとよい。
【００４０】
次に、処理がステップＳＰ２６に進むと、今回生成される波形データの範囲に対応するＭＩＤＩイベントが曲ファイルから検索され、イベントが存在する場合は対応するＭＩＤＩイベントが発生される。すなわち、上記ステップＳＰ１４と同様に、なんらかのノートオンイベントを発生させる場合には、該イベント用の発音チャンネルが割り当てられ、ノートオフイベントを発生させる場合には、必要に応じて消音処理が行われ、対応する発音チャンネルの楽音は減衰を開始する。そして、何回かの音源処理の後、楽音が充分に減衰すると、その発音チャンネルが解放される。
【００４１】
次に、処理がステップＳＰ２７に進むと、音源処理ルーチン（図１１）が呼び出される。これにより、先にステップＳＰ２５において決定されたサンプル数の波形データがバッファＷＢ１，２上で得られることになる。次に処理がステップＳＰ２８に進むと、曲ファイルの内容が終了したか否か、または、ストップボタン８７（ないしアボートボタン８８）がマウスでクリックされたか否かが判定される。両者の何れの条件も否定的であった場合には「ＮＯ」と判定され、処理はステップＳＰ３２に進む。
【００４２】
ここでは、ＲＡＭ２３に蓄積されている波形データ量が第１所定量に達したか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ３３に進む。ここでは、図１６に示すサブルーチン（詳細は後述する）が呼び出され、該波形データに対して圧縮処理が施され、得られた圧縮データがＲＡＭ２３に蓄積される。次に処理がステップＳＰ３４に進むと、この圧縮処理が施された波形データ量に応じて、進行状況グラフ表示欄８３、記録状況表示部８４およびディスク限界表示部８５の表示内容が更新される。
【００４３】
次に、処理がステップＳＰ３５に進むと、ＲＡＭ２３に蓄積されている圧縮データ量が第２所定量に達したか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ３６に進み、該圧縮データが波形ファイルに転送される。なお、転送バッファ領域における波形データ量が上記第１所定量に達していない場合はステップＳＰ３２〜３６はスキップされる。次に、処理はステップＳＰ２５に戻り、次に生成すべきサンプル数が決定される。以後、ステップＳＰ２５以降の動作が繰返される。
【００４４】
同様に、圧縮データ量が第２所定量に達していない場合は、ステップＳＰ３５において「ＮＯ」と判定され、圧縮データが波形ファイルに転送されていない状態でステップＳＰ２５以降の動作が繰返されることになる。そして、曲ファイルの内容が終了した場合、あるいは、ストップボタン８７（ないしアボートボタン８８）がマウスでクリックされた場合はステップＳＰ２８において「ＹＥＳ」と判定され処理はステップＳＰ２９に進む。
【００４５】
ここでは、転送バッファ領域に残っている波形データに対して圧縮処理が行われ、圧縮データが生成される。次に処理がステップＳＰ３０に進むと、未だ波形ファイルに転送されていない圧縮データが波形ファイルに転送される。そして、処理がステップＳＰ３１に進むと、この波形ファイルがクローズされ、処理はメインルーチンに戻る。以後、この生成された波形ファイルを解凍し再生することにより、ユーザは生成された楽音波形を聞くことができる。一方、アボートボタン８８が操作された場合には、上記ステップＳＰ２９で残っている波形データを破棄し、上記ステップＳＰ３１で波形ファイルを破棄する。
【００４６】
２．１０．圧縮処理の詳細
ここで、上記ステップＳＰ３３において呼び出される圧縮処理サブルーチンの処理内容を図１６を参照し説明する。図において処理がステップＳＰ８１に進むと、サブバンドフィルタ処理が実行される。すなわち、波形データに対してサブバンドを分析するフィルタ処理が施され、各サブバンドの周波数サンプルが求められる。
【００４７】
次に、処理がステップＳＰ８２に進むと、該波形データの高速フーリエ変換処理により、波形データの周波数分析が行われる。次に、処理がステップＳＰ８３に進むと、該周波数分析結果に基づいて、マスキング効果の音響心理モデルが計算され、各サブバンドで許容されるノイズレベルが求められる。そして、各サブバンドの出力の信号レベルと、上記許容されるノイズレベルとに基づいて、各サブバンドに割り当てられるビット数が決定される。
【００４８】
次に、処理がステップＳＰ８４に進むと、割り当てられたビット数に基づいて、各サブバンドの周波数サンプルのビットが削除され、これによって波形データが圧縮される。得られた圧縮データは、ＲＡＭ２３内の所定領域に保存される。なお、過去に得られた圧縮データが存在する場合にはこれに続けて保存される。
【００４９】
３．実施形態の効果
（１）本実施形態においては、フレーム周期イベント処理ルーチン（図１０）によって波形データを生成する場合、フレーム周期メッセージが発生したことを条件として波形データが合成される。すなわち、フレーム周期メッセージが発生すると、必ずステップＳＰ４３が実行され、前回のフレームにおける波形データの生成処理が完了しているか否かについては関知されない。一方、波形データ保存ルーチンによって波形データを生成する場合は、必ず前回の波形データの生成が完了したことが条件になる。換言すれば、音源処理（ステップＳＰ２７）が２回目以降に実行される場合は、必ず前回の音源処理が完了した後である。
【００５０】
このように、本実施形態においては、波形データの用途（リアルタイムに再生するか、あるいは波形ファイルを作成するか）に応じて、波形データ生成の開始条件を適切に定めることができる。これにより、リアルタイムに再生する場合は正確なタイミングで波形データを生成することができ、波形ファイルを作成する場合には必要なモジュールを全て動作させることができるから、高い精度の楽音波形を得ることができる。
【００５１】
リアルタイム再生時の動作をまとめたものを図１２（ａ）に示す。図示のように、曲データの再生および波形データの生成処理は、タイマ２４の出力に基づいてオペレーティングシステムが発生する「テンポクロック周期」および「フレーム周期」のタイマメッセージによって決定される。一方、波形データを波形ファイルに保存する際の動作をまとめたものを同図（ｂ）に示す。図示のように、曲データの再生および波形データの生成処理のタイミングは、前のフレームにおける波形データ生成処理に要した長さに応じて任意に設定される。
【００５２】
（２）さらに、本実施形態においては、波形データ生成の開始条件を、リアルタイム再生の途中で変更することが可能である。従って、再生開始ボタン６２をマウスでクリックして楽曲の最初から再生を開始し、所望の部分に達したところで波形データ記録ボタン７１をクリックすることにより、ユーザは楽曲の所望の部分についてのみ波形データを得ることができる。
【００５３】
（３）さらに、本実施形態においては、波形データを保存する際に圧縮処理を実行するため、ハードディスク２６あるいはリムーバブルディスク２７等、記録媒体の所要容量を削減することが可能である。例えば、連続したある時間長を有する波形データを一旦記録した後で当該波形データを圧縮処理する場合、当該記録媒体には少なくともその波形データ全体を記録できるだけの容量が必要になる。これに対し、本実施形態では、生成する波形データを圧縮しながら記憶媒体に記録しているため、波形データを一旦記録した後に当該波形データを圧縮処理する場合と比較して同じ記憶容量でより長時間の波形データを一度に記録できる。
【００５４】
４．変形例
本発明は上述した実施形態に限定されるものではなく、例えば以下のように種々の変形が可能である。
【００５５】
（１）上記実施形態においては、リアルタイム再生を行う場合であっても波形ファイルの作成を行う場合であっても同一の音源モジュールおよび効果モジュールを使用することができる。しかし、リアルタイム再生を行う場合はフレーム周期内に波形データの計算を完了させなければ種々の不具合が生じるため、能力の低いＣＰＵでリアルタイム再生を行おうとする場合には、処理負担の軽い代用モジュールを選択するようにすればよい。
【００５６】
この代用モジュールには、予め正規のモジュールと同一のプログラムナンバおよびバンクナンバを割り当てておき、リアルタイム再生を行うか否かに応じて自動的に切り替えるようにしておくとよい。例えば、ＣＰＵが自分の演算能力を検出し、各モジュールの負荷と比較して、正規モジュールと代用モジュールの何れをリアルタイム生成用のモジュールとして使用するかを自動決定することができる。または、各々の正規のモジュールに対してリアルタイム生成時に何れの代用モジュールを使用するかをユーザが指定できるようにしても好適である。
ここで、再生する曲ファイルの中で指定されている音源モジュールないし効果モジュールを正規モジュールと呼び、該正規モジュールの代わりに使用可能な音源モジュールないし効果モジュールを代用モジュールと呼ぶことにする。なお、正規モジュールは、ユーザが曲ファイルをエディットすることにより変更可能である。
【００５７】
後者の場合、ユーザの所定の操作によって図１３に示すようなパート設定ウィンドウ９０を表示器２８に表示するようにしてもよい。図において９１はパート番号表示欄であり、「１」〜「１６」のパート番号が上から下に向かって表示される。９２は音色名表示欄であり、各パートに割り当てられた音色名が表示される。９３は正規モジュール名表示欄であり、該パートに割り当てられた正規の（波形ファイルの生成に使用される）音源モジュール名が表示される。
【００５８】
また、９４は代用モジュール名表示欄であり、リアルタイム演奏時に正規モジュールに代えて使用される音源モジュール名が表示される。なお、代用モジュール名が「−」になっている欄は、正規モジュールがそのまま使用されることを示す。従って、図示の例にあっては、パート１の「サックス２」の音色に対して、波形ファイルの生成時には「金管モデル２」（物理モデル音源）が使用され、リアルタイム演奏時には「ＰＣＭ音源１」が使用されることになる。
【００５９】
その他、パート設定ウィンドウ９０には、各種のレベルを設定する欄が設けられている。これらの欄は各音源モジュールからバッファＷＢ１〜７に対するセンドレベルの設定のために用いられるものであり、詳細については特願平１０−１３３７６１号に詳述されている。ユーザは所望の欄にカーソルを合わせることによってその内容を変更することが可能であり、これにより、全ての正規モジュールに対して任意の代用モジュールを割り当てることができる。
上記例においては、「金管モデル２」（物理モデル音源）の代用モジュールとして「ＰＣＭ音源１」を割り当てたが、その他にも種々の割り当てが可能である。例えば、６オペレータのＦＭ音源代用モジュールとして４オペレータあるいは２オペレータのＦＭ音源を割り当ててもよく、サンプリング周波数４８ｋＨｚで音色フィルタ付きのＦＭ音源の代用モジュールとしてサンプリング周波数２４ｋＨｚで音色フィルタ無のＦＭ音源を割り当てることもできる。
なお、各音源モジュール毎に、他のどの音源モジュールで代用可能であるかを示す代用情報データを記憶し、該代用情報に基づいて代用モジュールを自動決定ないし手動指定するようにしてもよい。さらに、この代用情報データをユーザがエディットできるようにしてもよい。
【００６０】
（２）上記実施形態においては、楽音合成システムのプログラムは全てパーソナルコンピュータにインストールされていることを前提として説明したが、これらのプログラムをＣＤ−ＲＯＭ、フロッピーディスク等の記録媒体に格納して頒布してもよい。
【００６１】
（３）上記実施形態においては、波形データに圧縮処理を施して波形ファイルに転送したが、圧縮処理を施すことなく波形データを転送するようにしてもよい。具体的には、図９のステップＳＰ３２〜３６とステップＳＰ２９〜３１を以下のように変更する。
ステップＳＰ３２では、ＲＡＭ２３に蓄積されている波形データ量を、圧縮の単位である「第１の所定量」と比較する代りに転送の単位である「第２の所定量」と比較し、第２所定量に達している場合はステップＳＰ３３に処理を移行する。
ステップＳＰ３３では、何も処理行わずに処理をステップＳＰ３４に移行する。
ステップＳＰ３４では、圧縮処理の施されていない波形データのデータ量に応じて、進行状況グラフ表示欄８３、記録状況表示部８４およびディスク限界表示部の表示内容を更新する。
次にステップＳＰ３５では、判断処理を行わず、無条件にステップＳＰ３６に処理を移行する。
ステップＳＰ３６では、ＲＡＭ２３上の圧縮されていない波形データが記憶媒体上の波形ファイルに転送される。
以上のステップＳＰ３２〜３６の処理により、ステップＳＰ２７で生成された波形データのデータ量が所定量に達する毎に、（圧縮されずに）そのまま波形ファイルに転送される。
ステップＳＰ２９では、何も処理行わずに処理をステップＳＰ３０に移行する。
ステップＳＰ３０では、（圧縮されていない）残りの波形データをそのまま波形ファイルに転送する。
ステップＳＰ３１では、波形ファイルをクローズする。
以上のステップＳＰ２９〜３１の処理により、ストップボタン８７がマウスでクリックされたのに応じて、そのとき転送バッファに残っている波形データが、（圧縮されずに）そのまま波形ファイルに転送された後、当該波形ファイルがクローズされることとなる。
【００６２】
【発明の効果】
以上説明したようにこの発明によれば、各区間の波形データの生成開始条件を該波形データの用途等に応じて変更できるから、処理能力に応じて最適な状態で楽音波形を生成できる。
【図面の簡単な説明】
【図１】本発明の一実施形態の楽音合成システムのブロック図である。
【図２】波形インターフェース３０およびＲＡＭ２３の詳細構成を示すブロック図である。
【図３】上記実施形態のメインルーチンのフローチャートである。
【図４】表示器２８におけるメインウィンドウ５０の表示例を示す図である。
【図５】表示器２８における波形データ保存ウィンドウ８０の表示例を示す図である。
【図６】上記実施形態のサブルーチンのフローチャートである。
【図７】上記実施形態のサブルーチンのフローチャートである。
【図８】上記実施形態のサブルーチンのフローチャートである。
【図９】上記実施形態のサブルーチンのフローチャートである。
【図１０】上記実施形態のサブルーチンのフローチャートである。
【図１１】上記実施形態のサブルーチンのフローチャートである。
【図１２】上記実施形態の動作概要を示す図である。
【図１３】上記実施形態の変形例におけるパート設定ウィンドウ９０の表示例を示す図である。
【図１４】音源モジュールの動作説明図である。
【図１５】効果モジュールの動作説明図である。
【図１６】圧縮処理サブルーチンのフローチャートである。
【符号の説明】
２０……ＣＰＵバス、２１……ＣＰＵ、２２……ＲＯＭ、２３……ＲＡＭ、２４……タイマ、２５……ＭＩＤＩインターフェース、２６……ハードディスク、２７……リムーバブルディスク、２８……表示器、２９……キーボード＆マウス、３０……波形インターフェース、３１……ＡＤコンバータ、３２……第１ＤＭＡコントローラ、３３……サンプリングクロック発生器、３４……第２ＤＭＡコントローラ、３５……ＤＡコンバータ、３６……波形テーブル領域、３７……入力バッファ領域、３８……出力バッファ領域、５０……メインウィンドウ、５１……インジケータ部、５２……テンポインジケータ、５３……テンポ設定ボタン、５４……キーインジケータ、５５……キー設定ボタン、５６……音量インジケータ、５７……音量設定ボタン、５８……選曲ボタン、６０……再生操作ボタン群、６１……ストップボタン、６２……再生開始ボタン、７１……波形データ記録ボタン、７２……ヘルプボタン、７３……終了ボタン、８０……波形データ保存ウィンドウ、８１……曲名表示欄、８２……ファイル名表示欄、８３……進行状況グラフ表示欄、８４……記録状況表示部、８５……ディスク限界表示部、８７……ストップボタン、８８……アボートボタン、９０……パート設定ウィンドウ、９１……パート番号表示欄、９２……音色名表示欄、９３……正規モジュール名表示欄、９４……代用モジュール名表示欄。
【図１】
0003546801.tif 000002
【図２】
0003546801.tif 000003
【図３】
0003546801.tif 000004
【図４】
0003546801.tif 000005
【図５】
0003546801.tif 000006
【図６】
0003546801.tif 000007
【図７】
0003546801.tif 000008
【図８】
0003546801.tif 000009
【図９】
0003546801.tif 000010
【図１０】
0003546801.tif 000011
【図１１】
0003546801.tif 000012
【図１２】
0003546801.tif 000013
【図１３】
0003546801.tif 000014
【図１４】
0003546801.tif 000015
【図１５】
0003546801.tif 000016
【図１６】
0003546801.tif 000017