(57)【特許請求の範囲】
【請求項１】
第１パートの演奏情報および第２パートの演奏情報を入力する入力過程と、
サンプリング周期ごとに出力バッファの読出しポインタを更新する一方、当該出力バッファに書き込まれた楽音信号のうち前記読出しポインタが示すサンプルを前記出力バッファから読み出して出力する出力過程と、
前記読出しポインタと第１書込みポインタとの差分に応じた範囲の第１楽音信号を前記第１パートの演奏情報に基づいて生成する一方、この生成した第１楽音信号を前記出力バッファのうち前記第１の書込みポインタが示す領域に新規に書き込むとともに当該第１の書込みポインタを更新する第１生成過程と、
前記読出しポインタと第２書込みポインタとの差分に応じた範囲の第２楽音信号を前記第２パートの演奏情報に基づいて生成する一方、この生成した第２楽音信号と前記出力バッファのうち前記第２の書込みポインタが示す領域に既に書き込まれている楽音信号とを加算して得られる楽音信号を当該第２の書込ポインタが示す領域に書き込むとともに当該第２の書込みポインタを更新する第２生成過程と
を有し、前記入力過程において前記第１パートの演奏情報が入力されてから当該演奏情報に対応した前記第１楽音信号のサンプルが前記出力過程において出力されるまでの遅延時間が、前記入力過程において前記第２パートの演奏情報が入力されてから当該演奏情報に対応した前記第２楽音信号のサンプルが前記出力過程において出力されるまでの遅延時間よりも長い
ことを特徴とする楽音生成方法。
【請求項２】
第１パートの演奏情報および第２パートの演奏情報を入力する入力過程と、
第１遅延時間と、当該第１遅延時間とは異なる第２遅延時間とを設定する設定過程と、
前記第１パートの演奏情報が入力されてから前記第１遅延時間が経過したときに出力すべき第１楽音信号を前記第１パートの演奏情報に基づいて生成する第１生成過程と、
前記第２パートの演奏情報が入力されてから前記第２遅延時間が経過したときに出力すべき第２楽音信号を前記第２パートの演奏情報に基づいて生成する第２生成過程と、
前記第１楽音信号と前記第２楽音信号とを各々の出力タイミングが共通するもの同士で加算する加算過程と、
この加算により生成された楽音信号を出力する出力過程と
を有することを特徴とする楽音生成方法。
【請求項３】
複数パートの演奏情報を入力する入力過程と、
前記複数パートのうちの何れかをマニュアル演奏パートとして指定する指定過程と、
前記複数パートのうちマニュアル演奏パートとして指定されたパートに第２遅延時間を設定するとともに、前記マニュアル演奏パート以外の各パートに前記第２遅延時間よりも長い第１遅延時間を設定する設定過程と、
前記マニュアル演奏パート以外の各パートの演奏情報が入力されてから前記第１遅延時間が経過したときに出力すべき第１楽音信号を当該各パートの演奏情報に基づいて生成する第１生成過程と、
前記マニュアル演奏パートの演奏情報が入力されてから前記第２遅延時間が経過したときに出力すべき第２楽音信号を当該マニュアル演奏パートの演奏情報に基づいて生成する第２生成過程と、
前記第１楽音信号と前記第２楽音信号とを各々の出力タイミングが共通するもの同士で加算する加算過程と、
この加算により生成された楽音信号を出力する出力過程と
を有することを特徴とする楽音生成方法。
【請求項４】
第１パートの演奏情報および第２パートの演奏情報を入力する入力手段と、
サンプリング周期ごとに出力バッファの読出しポインタを更新する一方、当該出力バッファに書き込まれた楽音信号のうち前記読出しポインタが示すサンプルを前記出力バッファから読み出して出力する出力手段と、
前記読出しポインタと第１書込みポインタとの差分に応じた範囲の第１楽音信号を前記第１パートの演奏情報に基づいて生成する一方、この生成した第１楽音信号を前記出力バッファのうち前記第１の書込みポインタが示す領域に新規に書き込むとともに当該第１の書込みポインタを更新する第１生成手段と、
前記読出しポインタと第２書込みポインタとの差分に応じた範囲の第２楽音信号を前記第２パートの演奏情報に基づいて生成する一方、この生成した第２楽音信号と前記出力バッファのうち前記第２の書込みポインタが示す領域に既に書き込まれている楽音信号とを加算して得られる楽音信号を当該第２の書込ポインタが示す領域に書き込むとともに当該第２の書込みポインタを更新する第２生成手段と
を具備し、前記入力手段により前記第１パートの演奏情報が入力されてから当該演奏情報に対応した前記第１楽音信号のサンプルが前記出力手段によって出力されるまでの第１遅延時間が、前記入力手段により前記第２パートの演奏情報が入力されてから当該演奏情報に対応した前記第２楽音信号のサンプルが前記出力手段によって出力されるまでの第２遅延時間よりも長い
ことを特徴とする楽音生成装置。
【請求項５】
第１パートの演奏情報および第２パートの演奏情報を入力する入力手段と、
第１遅延時間と、当該第１遅延時間とは異なる第２遅延時間とを設定する設定手段と、
前記第１パートの演奏情報が入力されてから前記第１遅延時間が経過したときに出力すべき第１楽音信号を前記第１パートの演奏情報に基づいて生成する第１生成手段と、
前記第２パートの演奏情報が入力されてから前記第２遅延時間が経過したときに出力すべき第２楽音信号を前記第２パートの演奏情報に基づいて生成する第２生成手段と、
前記第１楽音信号と前記第２楽音信号とを各々の出力タイミングが共通するもの同士で加算する加算手段と、
この加算により生成された楽音信号を出力する出力手段と
を具備することを特徴とする楽音生成装置。
【請求項６】
複数パートの演奏情報を入力する入力手段と、
前記複数パートのうちの何れかをマニュアル演奏パートとして指定する指定手段と、
前記複数パートのうちマニュアル演奏パートとして指定されたパートに第２遅延時間を設定するとともに、前記マニュアル演奏パート以外の各パートに前記第２遅延時間よりも長い第１遅延時間を設定する設定手段と、
前記マニュアル演奏パート以外の各パートの演奏情報が入力されてから前記第１遅延時間が経過したときに出力すべき第１楽音信号を当該各パートの演奏情報に基づいて生成する第１生成手段と、
前記マニュアル演奏パートの演奏情報が入力されてから前記第２遅延時間が経過したときに出力すべき第２楽音信号を当該マニュアル演奏パートの演奏情報に基づいて生成する第２生成手段と、
前記第１楽音信号と前記第２楽音信号とを各々の出力タイミングが共通するもの同士で加算する加算手段と、
この加算により生成された楽音信号を出力する出力手段と
を具備することを特徴とする楽音生成装置。
【請求項７】
複数パートの演奏情報に基づいて前記各パートの楽音信号を出力する楽音生成装置において、
前記各パートの演奏情報が提供されてから前記各パートの楽音信号を出力する迄の遅延時間を、前記パートに応じて相違させる手段
を具備することを特徴とする楽音生成装置。
【請求項８】
演奏情報に基づいて楽音信号を出力する楽音生成装置において、
前記演奏情報が提供されてから前記楽音信号を出力する迄の遅延時間を、前記演奏情報が自動演奏に係る演奏情報であるかマニュアル演奏に係る演奏情報であるかに応じて設定する手段
を具備することを特徴とする楽音生成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、いわゆるソフトウェア音源に用いて好適な楽音生成方法および楽音生成装置に関する。
【０００２】
【従来の技術】
近年、汎用パーソナルコンピュータ等を用いて楽音波形を合成する、いわゆるソフトウエア音源が実用化されている。ソフトウエア音源においても、ハードウエアの音源装置と同様に複数パートの楽音波形を生成することによってアンサンブルを行うことが可能である。一方、汎用パーソナルコンピュータは楽音波形の生成以外にも各種の処理を行う必要があるため、完全にリアルタイムに楽音波形を生成することは困難である。また、ＣＰＵの処理能力を有効に活用するためには、ある程度まとまった範囲の楽音波形を一度に生成する方が有利な場合も多い。
【０００３】
そこで、ソフトウエア音源においては、演奏情報に基づいて将来発音されるべき波形データを先に生成してバッファに記憶し、その後はサンプリング周期毎にこのバッファを読出して波形データを再生することが一般的である。そして、未だ再生されていない部分の波形データが所定量未満になると、残りの演奏情報に基づいて、続きの波形データが生成されバッファに書込まれる。従って、演奏情報がソフトウエア音源に供給されてから実際に発音が行われるまで、ある程度の遅延時間を要することになる。この遅延時間をレーテンシーという。
【０００４】
ソフトウエア音源に供給される演奏情報としては、予めファイル等に記憶された演奏情報と、外部の演奏操作子等からリアルタイムに入力される演奏情報とが考えられる。前者の場合においては、予め充分な長さのレーテンシーを設定しておいて差し支えない。しかし、後者の場合においてレーテンシーが長すぎると、ユーザによる演奏操作子の操作と実際の発音との間のタイムラグが目立ち、演奏に支障を来すことになる。一方、レーテンシーをあまり短くすると、波形生成処理が間に合わず発音が途切れるような不具合が頻発する。このように、演奏操作子等からリアルタイムに演奏情報を入力する場合には、再生に支障を来さない範囲でなるべくレーテンシーを短くする必要がある。
【０００５】
【発明が解決しようとする課題】
ところで、ソフトウエア音源に対して、予めファイル等に記憶された演奏情報と外部の演奏操作子等からリアルタイムに入力される演奏情報との双方を提供する場合、すなわち自動演奏とマニュアル演奏とのアンサンブルを行う場合がある。かかる場合、従来のソフトウエア音源においてはレーテンシーが一律に設定されていたため、このレーテンシーを充分に短くすることが困難であった。
【０００６】
これは、自動演奏およびマニュアル演奏の波形生成処理がある短い時間に集中してＣＰＵの処理能力を超えた場合、上述したように音が途切れる等の不具合が発生するからである。この発明は上述した事情に鑑みてなされたものであり、演奏情報の態様に応じて適切な遅延時間を設定できる楽音生成方法および楽音生成装置を提供することを目的としている。
【０００７】
【課題を解決するための手段】
上記課題を解決するため請求項１記載の構成にあっては、第１パートの演奏情報および第２パートの演奏情報を入力する入力過程と、サンプリング周期ごとに出力バッファの読出しポインタを更新する一方、当該出力バッファに書き込まれた楽音信号のうち前記読出しポインタが示すサンプルを前記出力バッファから読み出して出力する出力過程と、前記読出しポインタと第１書込みポインタとの差分に応じた範囲の第１楽音信号を前記第１パートの演奏情報に基づいて生成する一方、この生成した第１楽音信号を前記出力バッファのうち前記第１の書込みポインタが示す領域に新規に書き込むとともに当該第１の書込みポインタを更新する第１生成過程と、前記読出しポインタと第２書込みポインタとの差分に応じた範囲の第２楽音信号を前記第２パートの演奏情報に基づいて生成する一方、この生成した第２楽音信号と前記出力バッファのうち前記第２の書込みポインタが示す領域に既に書き込まれている楽音信号とを加算して得られる楽音信号を当該第２の書込ポインタが示す領域に書き込むとともに当該第２の書込みポインタを更新する第２生成過程とを有し、前記入力過程において前記第１パートの演奏情報が入力されてから当該演奏情報に対応した前記第１楽音信号のサンプルが前記出力過程において出力されるまでの遅延時間が、前記入力過程において前記第２パートの演奏情報が入力されてから当該演奏情報に対応した前記第２楽音信号のサンプルが前記出力過程において出力されるまでの遅延時間よりも長いことを特徴とする。
また、請求項２記載の構成にあっては、第１パートの演奏情報および第２パートの演奏情報を入力する入力過程と、第１遅延時間と、当該第１遅延時間とは異なる第２遅延時間とを設定する設定過程と、前記第１パートの演奏情報が入力されてから前記第１遅延時間が経過したときに出力すべき第１楽音信号を前記第１パートの演奏情報に基づいて生成する第１生成過程と、前記第２パートの演奏情報が入力されてから前記第２遅延時間が経過したときに出力すべき第２楽音信号を前記第２パートの演奏情報に基づいて生成する第２生成過程と、前記第１楽音信号と前記第２楽音信号とを各々の出力タイミングが共通するもの同士で加算する加算過程と、この加算により生成された楽音信号を出力する出力過程とを有することを特徴とする。
また、請求項３記載の構成にあっては、複数パートの演奏情報を入力する入力過程と、前記複数パートのうちの何れかをマニュアル演奏パートとして指定する指定過程と、前記複数パートのうちマニュアル演奏パートとして指定されたパートに第２遅延時間を設定するとともに、前記マニュアル演奏パート以外の各パートに前記第２遅延時間よりも長い第１遅延時間を設定する設定過程と、前記マニュアル演奏パート以外の各パートの演奏情報が入力されてから前記第１遅延時間が経過したときに出力すべき第１楽音信号を当該各パートの演奏情報に基づいて生成する第１生成過程と、前記マニュアル演奏パートの演奏情報が入力されてから前記第２遅延時間が経過したときに出力すべき第２楽音信号を当該マニュアル演奏パートの演奏情報に基づいて生成する第２生成過程と、前記第１楽音信号と前記第２楽音信号とを各々の出力タイミングが共通するもの同士で加算する加算過程と、この加算により生成された楽音信号を出力する出力過程とを有することを特徴とする。
請求項４記載の構成にあっては、第１パートの演奏情報および第２パートの演奏情報を入力する入力手段と、サンプリング周期ごとに出力バッファの読出しポインタを更新する一方、当該出力バッファに書き込まれた楽音信号のうち前記読出しポインタが示すサンプルを前記出力バッファから読み出して出力する出力手段と、前記読出しポインタと第１書込みポインタとの差分に応じた範囲の第１楽音信号を前記第１パートの演奏情報に基づいて生成する一方、この生成した第１楽音信号を前記出力バッファのうち前記第１の書込みポインタが示す領域に新規に書き込むとともに当該第１の書込みポインタを更新する第１生成手段と、前記読出しポインタと第２書込みポインタとの差分に応じた範囲の第２楽音信号を前記第２パートの演奏情報に基づいて生成する一方、この生成した第２楽音信号と前記出力バッファのうち前記第２の書込みポインタが示す領域に既に書き込まれている楽音信号とを加算して得られる楽音信号を当該第２の書込ポインタが示す領域に書き込むとともに当該第２の書込みポインタを更新する第２生成手段とを具備し、前記入力手段により前記第１パートの演奏情報が入力されてから当該演奏情報に対応した前記第１楽音信号のサンプルが前記出力手段によって出力されるまでの第１遅延時間が、前記入力手段により前記第２パートの演奏情報が入力されてから当該演奏情報に対応した前記第２楽音信号のサンプルが前記出力手段によって出力されるまでの第２遅延時間よりも長いことを特徴とする。
また、請求項５記載の構成にあっては、第１パートの演奏情報および第２パートの演奏情報を入力する入力手段と、第１遅延時間と、当該第１遅延時間とは異なる第２遅延時間とを設定する設定手段と、前記第１パートの演奏情報が入力されてから前記第１遅延時間が経過したときに出力すべき第１楽音信号を前記第１パートの演奏情報に基づいて生成する第１生成手段と、前記第２パートの演奏情報が入力されてから前記第２遅延時間が経過したときに出力すべき第２楽音信号を前記第２パートの演奏情報に基づいて生成する第２生成手段と、前記第１楽音信号と前記第２楽音信号とを各々の出力タイミングが共通するもの同士で加算する加算手段と、この加算により生成された楽音信号を出力する出力手段とを具備することを特徴とする。
また、請求項６記載の構成にあっては、複数パートの演奏情報を入力する入力手段と、前記複数パートのうちの何れかをマニュアル演奏パートとして指定する指定手段と、前記複数パートのうちマニュアル演奏パートとして指定されたパートに第２遅延時間を設定するとともに、前記マニュアル演奏パート以外の各パートに前記第２遅延時間よりも長い第１遅延時間を設定する設定手段と、前記マニュアル演奏パート以外の各パートの演奏情報が入力されてから前記第１遅延時間が経過したときに出力すべき第１楽音信号を当該各パートの演奏情報に基づいて生成する第１生成手段と、前記マニュアル演奏パートの演奏情報が入力されてから前記第２遅延時間が経過したときに出力すべき第２楽音信号を当該マニュアル演奏パートの演奏情報に基づいて生成する第２生成手段と、前記第１楽音信号と前記第２楽音信号とを各々の出力タイミングが共通するもの同士で加算する加算手段と、この加算により生成された楽音信号を出力する出力手段とを具備することを特徴とする。
請求項７記載の構成にあっては、複数パートの演奏情報に基づいて前記各パートの楽音信号を出力する楽音生成装置において、前記各パートの演奏情報が提供されてから前記各パートの楽音信号を出力する迄の遅延時間を、前記パートに応じて相違させる手段を具備することを特徴とする。
また、請求項８記載の構成にあっては、演奏情報に基づいて楽音信号を出力する楽音生成装置において、前記演奏情報が提供されてから前記楽音信号を出力する迄の遅延時間を、前記演奏情報が自動演奏に係る演奏情報であるかマニュアル演奏に係る演奏情報であるかに応じて設定する手段を具備することを特徴とする。
【０００８】
【発明の実施の形態】
１．実施形態の構成
本発明の一実施形態の楽音合成システムのハードウエア構成を図１を参照し説明する。なお、本実施形態は、汎用パーソナルコンピュータ上で実現されているものである。図において２１はＣＰＵであり、後述する制御プログラムに従って、ＣＰＵバス２０を介して各部を制御する。２２はＲＯＭであり、イニシャルプログラムローダ等が格納されている。２３はＲＡＭであり、後述する各種のプログラムやデータがロードされ、ＣＰＵ２１によってアクセスされる。２４はタイマであり、所定時間毎にＣＰＵ２１に対する割込みを発生させる。
【０００９】
２５はＭＩＤＩインターフェースであり、外部のＭＩＤＩ機器（図示せず）との間でＭＩＤＩ信号のやりとりを行う。２６はハードディスクであり、オペレーティングシステム、各種ドライバ、各種アプリケーションプログラム、演奏情報等が記憶されている。２７はリムーバブルディスクであり、ＣＤ−ＲＯＭ、ＭＯドライブ等が設けられ、ハードディスク２６と同様の情報が記憶される。
【００１０】
２８は表示器であり、ＣＲＴあるいは液晶ディスプレイ等によって構成され、ユーザに対して種々の情報を表示する。２９はキーボード＆マウスであり、ユーザの操作によってＣＰＵ２１に対して各種の情報を入力する。３０は波形インターフェースであり、アナログ信号波形の入出力を行う。
【００１１】
ここで、波形インターフェース３０およびＲＡＭ２３の詳細を図２を参照し説明する。図において３１はＡＤコンバータであり、入力されたアナログ信号をデジタル信号に変換する。３３はサンプリングクロック発生器であり、所定のサンプリング周波数のクロック信号を発生する。３２は第１ＤＭＡコントローラであり、このクロック信号に同期してＡＤコンバータ３１の出力信号をサンプリングし、ＲＡＭ２３内の指定箇所に該サンプリング結果をダイレクトメモリアクセスにより転送する。
【００１２】
３４は第２ＤＭＡコントローラであり、サンプリングクロック発生器３３から出力されるサンプリングクロック信号に同期して、ＲＡＭ２３に記憶されたデジタル波形データをダイレクトメモリアクセスによって読出す。３５はＤＡコンバータであり、読出されたデジタル波形データをアナログ信号に変換し出力する。
【００１３】
また、ＲＡＭ２３において、３６は波形テーブル領域であり、各種の波形データの雛形を格納する。３７は入力バッファ領域であり、ＣＰＵ２１によってＭＩＤＩイベントが一時的に書込まれる。また、３８は出力バッファ領域であり、第２ＤＭＡコントローラ３４によって読み出される波形データが格納される。出力バッファ領域３８はリングバッファになっており、その読出しアドレスは循環的にインクリメントされる読出しポインタによって決定される。なお、図示はしないが、ＲＡＭ２３には、第１ＤＭＡコントローラ３２によって波形データを書込むための録音バッファ領域も設けられている。
【００１４】
２．実施形態の動作
２．１．ＭＩＤＩイベントを発生させる処理
本実施形態の楽音合成システムにおいては、ＭＩＤＩインターフェース２５を介してＭＩＤＩ信号が供給されると、その度にＭＩＤＩイベントが発生する。また、ハードディスク２６あるいはリムーバブルディスク２７等に予め記憶された演奏情報に基づいて、時間の経過とともにＭＩＤＩ＿Ｏｕｔメッセージが発生される。本明細書では、何れも統一してＭＩＤＩイベントとして取扱い、該ＭＩＤＩイベントに基づいて後述する各種の処理が行われる。なお、後者の処理については、例えば本出願人による特願平１０−１３３７６１号に詳述されている。
【００１５】
２．２．パート毎の発音遅れ時間の設定
ＭＩＤＩイベントに対する処理が行われる前に、各パート毎に発音遅れ時間（レーテンシー）が予め設定される。その設定例を図４に示す。図において「パート音色」の欄は、パート番号と、対応する音色名とを示す。また、「音源Ｍ」の欄は、該パートに使用されるソフトウエア音源モジュールを示す。
【００１６】
ここではＴＧ１はＰＣＭ音源、ＴＧ２は物理モデル音源、ＴＧ３はＦＭ音源である。次に、「発音遅れ時間」の欄には、遅れ時間に応じて分類したパートのグループ（Ａ，Ｂ，Ｃ）と、各グループにおける遅れ時間（１０ｍｓｅｃ，４５０ｍｓｅｃ，８００ｍｓｅｃ）を示す。何れのパートを何れのグループに割り当てるかについては、ユーザが任意に設定できる。但し、一般的にはマニュアル演奏に係るパートを、最も発音遅れ時間の短いグループＡに割り当てることが好適である。
【００１７】
上記例にあっては、パート３の「サックス」のみがグループＡに分類されている。これは、パート３のＭＩＤＩイベントはＭＩＤＩインターフェース２５を介してリアルタイムに発生することとし、他のパートについてはハードディスク２６あるいはリムーバブルディスク２７等に予め記憶された演奏情報に基づいてＭＩＤＩイベントが発生することを想定しているものである。
【００１８】
図４における全てのパートは、ハードディスク２６等に予め記憶された演奏情報に基づいて自動演奏を行うことが可能になっている。但し、何れか一または複数のパートは自動演奏をオフにしておき、ＭＩＤＩインターフェース２５を介してユーザがマニュアル演奏を行えるようにすることができる。自動演奏のオン／オフ状態の設定を図４の最右欄に示す。上述したように、パート３の「サックス」はマニュアル演奏されることを想定しているため、該パートについてのみ自動演奏がオフに設定されている。この図４に示す設定状態は、ＲＡＭ２３内の所定の領域に格納される。
【００１９】
２．３．ＭＩＤＩイベント処理
上記ＭＩＤＩイベントが発生すると、図５に示すＭＩＤＩイベント処理ルーチンが起動される。図において処理がステップＳＰ１０に進むと、発生したＭＩＤＩイベントがＲＡＭ２３内の所定領域に取り込まれる。次に、処理がステップＳＰ１１に進むと、該ＭＩＤＩイベントはグループＡ，Ｂ，Ｃの何れに属するかが判定される。
【００２０】
ここで、グループＡに属するものと判定されると、処理はステップＳＰ１２に進み、該ＭＩＤＩイベントが発生タイミングを示すタイミング情報とともに入力バッファ領域３７内の所定領域（入力バッファ（Ａ））に書込まれる。同様に、グループＢまたはＣに属するものと判定された場合は、処理はそれぞれステップＳＰ１２またはＳＰ１３に進み、対応する入力バッファ（Ｂ）または（Ｃ）に該ＭＩＤＩイベントがタイミング情報とともに書込まれる。
【００２１】
ここで、入力バッファ（Ａ），（Ｂ）および（Ｃ）のメモリマップを図６に示す。入力バッファ（Ａ），（Ｂ）および（Ｃ）は、それぞれ独立したリングバッファとして使用される。図において書込みポインタＷＰ（Ａ），ＷＰ（Ｂ）およびＷＰ（Ｃ）は、各々入力バッファ（Ａ），（Ｂ）および（Ｃ）内における書込みアドレスを指標しており、ＭＩＤＩイベントが書込まれる毎に対応するバッファ内で循環的にインクリメントされる。
【００２２】
２．４．生成トリガイベント処理
本実施形態においては、所定の波形生成周期毎に生成トリガイベント（割込み）が発生し、図７に示す生成トリガイベント処理ルーチンが起動される。図において処理がステップＳＰ２０に進むと、グループＡにおける波形データの生成範囲が決定される。この生成範囲は、次の生成トリガイベントが発生するまで波形データを充分に提供できるように決定される。
【００２３】
次に、処理がステップＳＰ２１に進むと、この生成範囲におけるＭＩＤＩイベントが入力バッファ（Ａ）から取り込まれる。次に処理がステップＳＰ２２に進むと、該ＭＩＤＩイベントおよびタイミング情報に基づいて、この範囲における波形データが生成され、出力バッファ領域３８に書込まれる。
【００２４】
ここで、出力バッファ領域３８のメモリマップを図３に示す。図において書込みポインタＧＷＰ（Ａ），ＧＷＰ（Ｂ）およびＧＷＰ（Ｃ）は、各々グループＡ，Ｂ，Ｃの楽音波形生成処理で生成された波形データの書込みアドレスを指標し、書込みポインタＧＷＰ（Ｅ）はこれらグループＡ，Ｂ，Ｃの波形データにエフェクト処理を施した波形データの書込みアドレスを指標する。
【００２５】
図において、領域１０１にはグループＣで生成された波形データが、領域１０２にはグループＢ，Ｃで生成された波形データの混合波形データが、また、領域１０３にはグループＡ，Ｂ，Ｃで生成された波形データの混合波形データがそれぞれ記憶されている。また、領域１０３に記憶された波形データのうち書込みポインタＧＷＰ（Ｅ）と読出しポインタＲＰに挟まれた領域の波形データはエフェクト処理済みの波形データである。
【００２６】
なお、書込みポインタＧＷＰ（Ａ），ＧＷＰ（Ｂ）およびＧＷＰ（Ｃ）は本来は各パート毎に設けられるものであるが、図３においては説明の簡素化のために、グループＡ，Ｂ，Ｃの各々について１パートづつ（合計３パート）割り当てられていることとしている。ＧＲＰ（Ａ），ＧＲＰ（Ｂ）およびＧＲＰ（Ｃ）は各目標ポインタであり、読出しポインタＲＰとの差はグループＡ，Ｂ，Ｃにおける発音遅れ時間に応じて決定される。また、目標ポインタＧＲＰ（Ａ），ＧＲＰ（Ｂ）およびＧＲＰ（Ｃ）と、対応する書込みポインタＧＷＰ（Ａ），ＧＷＰ（Ｂ）およびＧＷＰ（Ｃ）との差は、各グループの楽音波形生成処理の遅れ具合を表す。
【００２７】
書込みポインタＧＷＰ（Ａ），ＧＷＰ（Ｂ）およびＧＷＰ（Ｃ）のうち最も進んだ書込みポインタに関しては、そのポインタが示す位置に生成された波形データがそのまま書込まれ、それ以外の書込みポインタに関しては、生成された波形データを、これから書込もうとする位置に記憶されている波形データに足しこむ形で書込むようになっている。
【００２８】
そして、目標ポインタＧＲＰ（Ａ），ＧＲＰ（Ｂ）およびＧＲＰ（Ｃ）と、読出しポインタＲＰとは、サンプリング周期毎に１アドレス（波形データの１サンプルに相当する量）づつ進行する。その処理については後述するが、図３においてはその進行方向を矢印で示しておく。
【００２９】
これら書込み、読出しおよび目標ポインタは出力バッファ領域３８全体の中で循環的にインクリメントされる。すなわち、各ポインタは、出力バッファ領域３８の最終アドレスに達した後は出力バッファ領域３８の先頭アドレスに戻ることになる。従って、先のステップＳＰ２２において生成された波形データは、図上で書込みポインタＧＷＰ（Ａ）の先の領域（図３の書込みポインタＧＷＰ（Ａ）から下方向の領域）に書込まれる。
【００３０】
すなわち、生成された波形データは、ＧＷＰ（Ａ）の先の領域に新たに書込まれるか、既に書込まれた内容に足し込まれる。そして、波形データが書込まれた最終位置に書込みポインタＧＷＰ（Ａ）が移動される（書込みポインタＧＷＰ（Ａ）が下方向に移動する）。
【００３１】
図７に戻り、処理がステップＳＰ２３に進むと、先にグループＡについて決定された波形データの生成範囲と同一の範囲について、グループＢおよびＣの波形データが既に生成されているか否かが判定される。ここで「ＮＯ」と判定されると、処理はステップＳＰ２４に進み、タイミング情報に基づいて該範囲におけるグループＢおよびＣのＭＩＤＩイベントが取り込まれる。
【００３２】
次に処理がステップＳＰ２５に進むと、取り込まれたＭＩＤＩイベントに基づいて、グループＢおよびＣに係る波形データが各々生成され、上記書込みポインタＧＷＰ（Ｂ）およびＧＷＰ（Ｃ）の先の領域に各々書込まれる（または足し込まれる）とともに、書込まれた最終位置に書込みポインタＧＷＰ（Ｂ）およびＧＷＰ（Ｃ）が変更される。なお、該生成範囲におけるグループＢおよびＣの波形データが既に生成されている場合は、上記ステップＳＰ２４，ＳＰ２５はスキップされる。
【００３３】
図３に見られるように、通常は書込みポインタＧＷＰ（Ｂ）およびＧＷＰ（Ｃ）は書込みポインタＧＷＰ（Ａ）よりも相当に進んでいるため、ステップＳＰ２３の判定は殆どの場合「ＹＥＳ」になる。ソフトウエア音源以外の処理で負荷が大きくなった等の理由でグループＢおよび／またはＣの楽音波形生成処理が遅れて書込みポインタＧＷＰ（Ｂ），ＧＷＰ（Ｃ）の位置が書込みポインタＧＷＰ（Ａ）の位置と等しくなった場合にのみ、ステップＳＰ２３で「ＮＯ」と判定されることになる。
【００３４】
次に、処理がステップＳＰ２６に進むと、グループＡ，Ｂ，Ｃで生成された波形データの混合波形データに対してエフェクト処理が施される。具体的には、図３に示す書込みポインタＧＷＰ（Ａ）とＧＷＰ（Ｅ）に挟まれた領域の波形データが読み出される。
【００３５】
そして、読み出された各グループの波形データに対してエフェクト処理が施され、その結果得られた波形データが同領域に再び書込まれる。次に、処理がステップＳＰ２７に進むと、書込みポインタＧＷＰ（Ｅ）の位置が書込みポインタＧＷＰ（Ａ）と同一の位置に変更される。
【００３６】
次に、処理がステップＳＰ２８に進むと、生成トリガイベント処理ルーチン（図７）に対して割当てられた時間に余裕があるか否かが判定される。時間余裕がある場合は処理はステップＳＰ２９に進み、グループＢおよびＣに係る波形データが該時間余裕に応じて生成される。具体的にはステップＳＰ２９においては、図９におけるサブルーチンが呼び出される。
【００３７】
図９において処理がステップＳＰ５０に進むと、グループＢおよびＣにおける生成範囲が上記時間余裕に応じて決定される。ここでは、グループＢまたはＣの波形生成処理の遅れを解消するように、それぞれ、時間余裕が許す範囲内で生成範囲が決定される。すなわち、当該グループの遅れが大きい場合には、より大きな生成範囲が指定される。
【００３８】
次に処理がステップＳＰ５１に進むと、タイミング情報に基づいてグループＢの生成範囲におけるＭＩＤＩイベントが入力バッファ領域３７の入力バッファ（Ｂ）から取り込まれる。次に、処理がステップＳＰ５２に進むと、取り込まれたＭＩＤＩイベントに基づいて、該生成範囲におけるグループＢの波形データが生成される。生成された波形データは出力バッファ領域３８の書込みポインタＧＷＰ（Ｂ）の先の領域に書込まれ（新規に書込まれ、または足し込まれ）、書込んだ最終位置に書込みポインタＧＷＰ（Ｂ）が更新される。
【００３９】
次に処理がステップＳＰ５３に進むと、タイミング情報に基づいてグループＣの生成範囲におけるＭＩＤＩイベントが入力バッファ領域３７の入力バッファ（Ｃ）から取り込まれる。次に、処理がステップＳＰ５４に進むと、取り込まれたＭＩＤＩイベントに基づいて、該生成範囲におけるグループＣの波形データが生成される。生成された波形データは出力バッファ領域３８の書込みポインタＧＷＰ（Ｃ）の先の領域に書込まれ（新規に書込まれ、または足し込まれ）、書込んだ最終位置に書込みポインタＧＷＰ（Ｂ）が更新される。
【００４０】
２．５．ＤＭＡ処理
サンプリングクロック発生器３３がサンプリング周期でクロックを発生すると、このクロック毎にＤＭＡ割込みが発生し、図８に示すＤＭＡ処理ルーチンが呼び出される。図において処理がステップＳＰ４０に進むと、読出しポインタＲＰが「１」だけインクリメントされる。但し、読出しポインタＲＰが既に出力バッファ領域３８の終端アドレスに達していた場合は、読出しポインタＲＰは出力バッファ領域３８の先頭アドレスに設定される。
【００４１】
すなわち、出力バッファ領域３８の先頭アドレスを「０」としたとき、読出しポインタＲＰは、「現在のＲＰに「１」を加えた結果を出力バッファ領域３８の大きさ（ＳＩＺＥ）で除算した余り」に設定される。次に処理がステップＳＰ４１に進むと、更新後の読出しポインタＲＰによって指標されたワードが出力バッファ領域３８から読み出され、第２ＤＭＡコントローラ３４を介してＤＡコンバータ３５に供給され、図示せぬサウンドシステムを介して発音される。
【００４２】
３．実施形態の効果
上記生成トリガイベント処理においては生成トリガイベント処理に対する時間余裕がある場合はステップＳＰ２９において比較的長い範囲のグループＢおよびＣの波形データが生成される。従って、グループＡに係る波形データが生成される際には、殆どの場合において同一範囲のグループＢおよびＣの波形データは生成済みであり、ステップＳＰ２３においては「ＹＥＳ」と判定される。
【００４３】
換言すれば、グループＢおよびＣに係る波形データは時間余裕があれば事前に生成されるから、グループＡの波形データの作成のために多量の処理が必要となる生成範囲が一時的に存在したとしても、同範囲におけるグループＢまたはＣの波形データは事前に作成されている可能性が高くなり、楽音が途切れるような不具合を未然に防止することができる。
【００４４】
４．変形例
本発明は上述した実施形態に限定されるものではなく、例えば以下のように種々の変形が可能である。
（１）上記実施形態においては、楽音合成システムのプログラムは全てパーソナルコンピュータにインストールされていることを前提として説明したが、これらのプログラムをＣＤ−ＲＯＭ、フロッピーディスク等の記録媒体に格納して頒布してもよいし、或いは、無線やネットワーク等を介して各コンピュータに配信してもよい。
【００４５】
（２）上記実施形態においては、最も発音遅れ時間の短いグループ（グループＡ）に割り当てるパートをユーザが決定した。しかし、図４に示すように、自動演奏を行うことが可能な複数のパートのうち何れかのパートがオフにされる場合は、当該パートについてマニュアル演奏が行われる可能性が高い。そこで、自動演奏をオフにしたパートを自動的にグループＡに割り当てるようにしてもよい。
【００４６】
【発明の効果】
以上説明したようにこの発明によれば、演奏情報が提供されてから楽音信号を出力する迄の遅延時間を、演奏情報のパートに応じて、あるいは、自動演奏であるかマニュアル演奏であるかに応じて設定するから、演奏情報の態様に応じて適切な遅延時間を設定できる。
【図面の簡単な説明】
【図１】本発明の一実施形態の楽音合成システムのブロック図である。
【図２】ＲＡＭ２３および波形インターフェース３０の詳細ブロック図である。
【図３】出力バッファ領域３８のメモリマップである。
【図４】各パートの遅延時間等の設定状態を示す図である。
【図５】ＭＩＤＩイベント処理ルーチンのフローチャートである。
【図６】入力バッファ領域３７のメモリマップである。
【図７】生成トリガイベント処理ルーチンのフローチャートである。
【図８】ＤＭＡ処理ルーチンのフローチャートである。
【図９】生成トリガイベント処理ルーチンのサブルーチンのフローチャートである。
【符号の説明】
２０……ＣＰＵバス、２１……ＣＰＵ、２２……ＲＯＭ、２３……ＲＡＭ、２４……タイマ、２５……ＭＩＤＩインターフェース、２６……ハードディスク、２７……リムーバブルディスク、２８……表示器、２９……キーボード＆マウス、３０……波形インターフェース、３１……ＡＤコンバータ、３２……第１ＤＭＡコントローラ、３３……サンプリングクロック発生器、３４……第２ＤＭＡコントローラ、３５……ＤＡコンバータ、３６……波形テーブル領域、３７……入力バッファ領域、３８……出力バッファ領域。
【図１】
0003551818.tif 000002
【図２】
0003551818.tif 000003
【図３】
0003551818.tif 000004
【図４】
0003551818.tif 000005
【図５】
0003551818.tif 000006
【図６】
0003551818.tif 000007
【図７】
0003551818.tif 000008
【図８】
0003551818.tif 000009
【図９】
0003551818.tif 000010