JP3139490B2 - 楽音生成装置及び方法 - Google Patents

楽音生成装置及び方法

Info

Publication number
JP3139490B2
JP3139490B2 JP11125137A JP12513799A JP3139490B2 JP 3139490 B2 JP3139490 B2 JP 3139490B2 JP 11125137 A JP11125137 A JP 11125137A JP 12513799 A JP12513799 A JP 12513799A JP 3139490 B2 JP3139490 B2 JP 3139490B2
Authority
JP
Japan
Prior art keywords
tone
processing
musical
data
generation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP11125137A
Other languages
English (en)
Other versions
JPH11338469A (ja
Inventor
元一 田邑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yamaha Corp
Original Assignee
Yamaha Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yamaha Corp filed Critical Yamaha Corp
Priority to JP11125137A priority Critical patent/JP3139490B2/ja
Publication of JPH11338469A publication Critical patent/JPH11338469A/ja
Application granted granted Critical
Publication of JP3139490B2 publication Critical patent/JP3139490B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Electrophonic Musical Instruments (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、楽音データを生
成する技術分野に属し、特に、CPUのような汎用の演
算処理手段に楽音生成処理を実行させるのに適した装置
及び方法に関する。
【0002】
【従来の技術】今日の電子楽器では、楽音生成処理(楽
音生成処理によって生成した楽音データにエフェクトを
付加する処理を含む場合もある)を、マイクロプロセッ
サに実行させることが広く行なわれている。そうしたマ
イクロプロセッサとしては、楽音生成方式(例えば波形
メモリ方式やFM合成方式等)に応じた回路構成の専用
のハードウェア(例えば音源LSIやDSP(ディジタ
ルシグナルプロセッサ)等)を設計することが長らく一
般的であった。
【0003】しかし近年、CPUの演算能力の向上に伴
って、汎用コンピュータや専用の楽音発生装置に搭載し
たCPUに楽音生成処理を実行させるようにしたものが
登場している。ここでは、そうした楽音生成装置や楽音
生成方法のことをCPU音源またはソフト音源と呼び、
これに対し、専用のハードウェアを使用する従来からの
楽音生成装置や楽音生成方法をハード音源と呼ぶことに
する。
【0004】
【発明が解決しようとする課題】ソフト音源では、CP
Uは、楽音生成処理だけでなく他の様々な処理を並行し
て実行しなければならない。したがって、汎用コンピュ
ータを使用してソフト音源を実現しようとする場合に
は、他の処理に影響されることなく楽音生成処理の実行
が確保されるようにするために、マルチタスク機能を有
するOS(オペレーティングシステム)(例えば、マイ
クロソフト社製のWindows95(商標)等)上で
楽音生成処理を実行させることが望ましい。
【0005】しかし、完全なマルチタスク機能を有しな
いOS(例えば、マイクロソフト社製のWindows
3.1(商標)等)も広く普及しており、そうしたOS
上でも楽音生成処理を実行させたいというニーズが存在
している。しかるに、そうしたOS上では、他の処理の
影響によって楽音生成処理の実行が遅れ、その結果、発
音に支障が生じることがある。この発明は上述の点に鑑
みてなされたもので、完全なマルチタスク機能を有しな
いOS上で楽音生成処理を実行させる場合でも、発音に
支障が生じないようにしたソフト音源方式の楽音生成装
置及び楽音生成方法を提供しようとするものである。
【0006】
【課題を解決するための手段】この発明の第1の観点に
従う楽音生成装置は、演奏情報を供給する供給手段と、
前記演奏情報に基づく楽音生成処理を、不定期で起動さ
せるための起動手段と、前記起動手段によって起動され
た楽音生成処理を実行する楽音生成手段と、前記起動手
段による1回の起動で前記楽音生成手段が生成すべき楽
音データのサンプル数を可変指示する指示手段とを具
え、各起動毎に可変指示されたサンプル数の楽音データ
を前記楽音生成手段で生成するようにしたものである。
【0007】また、この発明の第1の観点に従う楽音生
成方法は、供給された演奏情報に基づき汎用の演算処理
装置で楽音生成処理を実行させる楽音生成方法であっ
て、供給された演奏情報に基づく楽音生成処理を、不定
期で起動させる第1のステップと、前記第1のステップ
による1回の起動に対応して前記楽音生成処理によって
生成すべき楽音データのサンプル数を可変指示する第2
のステップと、前記第1のステップで起動された楽音生
成処理を実行し、前記第2のステップで指示されたサン
プル数の楽音データを生成する第3のステップとを具え
たものである。
【0008】ソフト音源には、所定時間毎に所定サンプ
ル数分の楽音データを生成し、該所定サンプル数分の楽
音データをひとまとめとして再生するようにしているも
のがある。こうしたソフト音源では、一般に、各所定時
間毎に、該所定数サンプル分の楽音データを全て生成す
る楽音生成処理を一度だけのタイミングで起動してい
る。しかし、完全なマルチタスク機能を有しないOS上
では、他の処理の影響によってそのタイミングで楽音生
成処理が起動しなかったり遅れて起動したりすることに
より、該所定時間内に楽音データの生成が完了せず、発
音に支障が生じることがある。
【0009】これに対し、上記第1の観点に従う楽音生
成装置又は楽音生成方法では、この種のソフト音源にお
いて、演奏情報に基づく楽音生成処理を不定期で起動さ
せる一方で、1回の起動で生成すべき楽音データのサン
プル数を可変指示し、各起動毎に可変指示されたサンプ
ル数の楽音データを生成するようにしている。従って、
完全なマルチタスク機能を有しないOS上で他の処理の
影響によって楽音生成処理の起動が不定期になることを
許す一方で、こうした不定期な各起動毎に、当該起動に
対応して生成すべき楽音データのサンプル数を可変指示
することで、その都度の状況に応じた必要な(可変)サ
ンプル数分の楽音データの生成を可能とし、CPUに負
担をかけないようにすることができると共に、発音に支
障が生じる事態もできるだけ起こらないようにすること
ができる。
【0010】この発明の第2の観点に従う楽音生成装置
は、演奏情報を供給する供給手段と、前記演奏情報に基
づく楽音生成処理を、不定期で起動させるための起動手
段と、前記起動手段によって起動された楽音生成処理を
実行する楽音生成手段と、前記起動手段による1回の起
動で前記楽音生成手段が生成すべき楽音データのサンプ
ル数を可変指示し、該指示したサンプル数の楽音データ
が前記楽音生成手段で生成されるようにする指示手段
と、前記楽音生成手段で生成した前記楽音データをバッ
ファするバッファ手段と、前記バッファ手段にバッファ
された楽音データを順次再生出力する再生手段と、前記
再生手段による楽音データの再生出力の進行に間に合う
ように前記楽音生成手段で該楽音データを生成すること
ができなくなった場合、該楽音生成手段において実行中
の楽音生成処理を一旦リセットし、それより後の楽音デ
ータを生成するよう該楽音生成手段における楽音生成処
理を再開させる制御手段とを具えたものである。
【0011】また、この発明の第2の観点に従う楽音生
成方法は、供給された演奏情報に基づき汎用の演算処理
装置で楽音生成処理を実行させる楽音生成方法であっ
て、供給された演奏情報に基づく楽音生成処理を、不定
期で起動させる第1のステップと、前記第1のステップ
による1回の起動に対応して前記楽音生成処理によって
生成すべき楽音データのサンプル数を可変指示する第2
のステップと、前記第1のステップで起動された楽音生
成処理を実行することで前記第2のステップで指示され
たサンプル数の楽音データを生成し、生成した楽音デー
タを出力バッファにバッファさせる第3のステップと、
前記出力バッファにバッファされた楽音データを順次再
生出力する第4のステップと、前記第4のステップによ
る楽音データの再生出力の進行に間に合うように前記第
3のステップで該楽音データを生成することができなく
なった場合、該第3のステップにおいて実行中の楽音生
成処理を一旦リセットし、それより後の楽音データを生
成するよう該第3のステップにおける楽音生成処理を再
開させる第5のステップとを具えたものである。
【0012】上記第2の観点に従う楽音生成装置又は楽
音生成方法では、上記第1の観点に従う装置又は方法と
同様に、CPUに負担をかけないようにすることができ
ると共に、発音に支障が生じる事態もできるだけ起こら
ないようにすることができるという効果を奏すると共
に、不定期な起動のために起動の遅れによって楽音デー
タの生成が再生出力に間に合わなくなった場合に適切に
対処することができる。
【0013】すなわち、不定期な起動であっても、バッ
ファ手段内にバッファされた楽音データの順次再生出力
がすべて終る前に、楽音生成手段によって新たな複数の
サンプルの楽音データが生成されてバッファ手段にバッ
ファされれば、途切れることなく再生出力が進行し、問
題は起こらない。しかし、起動の遅れにより前記再生手
段による楽音データの再生出力の進行に間に合うように
前記楽音生成手段で該楽音データを生成することができ
なくなった場合、音が途切れるのみならず、再生音が遅
延し、途切れと遅延の累積とが相俟って、演奏音に重大
な乱れが生じてしまう。
【0014】そこで、上記第2の観点によれば、そのよ
うな場合に、現在実行中の楽音生成処理を一旦リセット
し、それより後の楽音データを生成するよう楽音生成処
理を再開させることで、一時的に楽音が乱れた場合で
も、すぐに安定した楽音生成動作に復帰するので、ノイ
ズを最小限に抑え、演奏音に重大な乱れが生じないよう
にすることができる。
【0015】この発明の第3の観点に従う楽音生成装置
は、演奏情報を供給する供給手段と、前記演奏情報に基
づく楽音生成処理を、不定期で起動させるための起動手
段と、前記起動手段によって起動された楽音生成処理を
実行する楽音生成手段と、前記起動手段が前記楽音生成
処理を起動した場合、該起動の時刻に対応したサンプル
数を目標値として、該楽音生成処理で生成する楽音デー
タのサンプル数が該目標値に追従するように制御する制
御手段とを具えたものである。
【0016】また、この発明の第3の観点に従う楽音生
成方法は、供給された演奏情報に基づき汎用の演算処理
装置で楽音生成処理を実行させる楽音生成方法であっ
て、供給された演奏情報に基づく楽音生成処理を、不定
期で起動させる第1のステップと、前記第1のステップ
で楽音生成処理が起動した場合、該起動の時刻に対応し
たサンプル数を目標値として、該楽音生成処理で生成す
る楽音データのサンプル数が該目標値に追従するように
制御する第2のステップと、前記第1のステップで起動
された楽音生成処理を、前記第2のステップでの制御に
従って実行する第3のステップとを具えたものである。
【0017】上記第3の観点に従う楽音生成装置又は楽
音生成方法によれば、上記第1の観点に従う装置又は方
法と同様に、CPUに負担をかけないようにすることが
できると共に、発音に支障が生じる事態もできるだけ起
こらないようにすることができるという効果を奏すると
共に、そのことをできるだけ最適に実現することができ
る。すなわち、楽音生成処理が不定期で起動されたと
き、その起動時刻に対応したサンプル数を目標値とし
て、該楽音生成処理で生成する楽音データのサンプル数
が該目標値に追従するように制御されるので、できるだ
け最適な制御が行える。この目標値は、音切れを生じさ
せないための楽音生成処理の起動時間の遅れの許容範囲
内に所定サンプル数の楽音データの生成が行われるよう
に、適宜の値に設定されていればよい。
【0018】尚、この楽音データの生成の制御の具体的
方法としては、楽音生成処理が遅れた場合、次の起動時
の生成サンプル数に遅れた分の楽音データを全て加える
ことによって遅れを回復することや、その後の各起動時
の生成サンプル数をそれぞれ一定数増やすことによって
遅れを回復することや、その後の各起動時の生成サンプ
ル数を、それぞれ遅れた分の楽音データに比例した数だ
け増やすことによって遅れを回復することなどが挙げら
れる。
【0019】この発明の別の観点に従う楽音生成装置
は、演奏情報を供給する供給手段と、前記演奏情報に基
づく楽音生成処理を、断続的に起動させるための起動手
段と、前記起動手段による1回の起動に応じて複数サン
プルの楽音データをまとめて生成する楽音生成手段と、
前記楽音生成手段で生成した前記楽音データをバッファ
するバッファ手段と、前記バッファ手段にバッファされ
た楽音データを順次再生出力する再生手段と、前記再生
手段による楽音データの再生出力の進行に間に合うよう
に前記楽音生成手段で該楽音データを生成することがで
きなくなった場合、該楽音生成手段において実行中の楽
音生成処理を一旦リセットし、それより後の楽音データ
を生成するよう該楽音生成手段における楽音生成処理を
再開させる制御手段とを具えたものである。
【0020】また、この発明の別の観点に従う楽音生成
方法は、供給された演奏情報に基づき汎用の演算処理装
置で楽音生成処理を実行させる楽音生成方法であって、
供給された演奏情報に基づく楽音生成処理を、断続的に
起動させる第1のステップと、前記第1のステップによ
る起動に応じて楽音生成処理を実行することで1回の起
動につき複数サンプルの楽音データをまとめて生成し、
生成した楽音データを出力バッファにバッファさせる第
2のステップと、前記出力バッファにバッファされた楽
音データを順次再生出力する第3のステップと、前記第
3のステップによる楽音データの再生出力の進行に間に
合うように前記第2のステップで該楽音データを生成す
ることができなくなった場合、該第2のステップにおい
て実行中の楽音生成処理を一旦リセットし、それより後
の楽音データを生成するよう該第2のステップにおける
楽音生成処理を再開させる第4のステップとを具えたも
のである。
【0021】上記別の観点に従う楽音生成装置又は楽音
生成方法においては、上記第2の観点に従う楽音生成装
置又は楽音生成方法と同様の効果を期待することができ
る。なお、前記制御手段又は第4のステップによってリ
セットがなされたとき、前記再生出力に基づく楽音信号
の音量を一時的に減少させるよう制御すると、ノイズを
消音することができる。
【0022】この発明の更に別の観点に従う楽音生成装
置は、演奏情報を供給する供給手段と、前記演奏情報に
基づく楽音生成処理を、不定期で起動させるための起動
手段と、前記起動手段によって起動された楽音生成処理
を実行する楽音生成手段と、前記起動手段が前記楽音生
成処理を起動したとき、該起動の時刻に対応する目標サ
ンプル数と生成済みのサンプル数との相関性に応じて、
当該起動に対応して該楽音生成処理で生成すべき楽音デ
ータのサンプル数を決定する決定手段とを具え、当該起
動に対応して決定されたサンプル数の楽音データを前記
楽音生成手段で生成するようにしたものである。
【0023】また、この発明の更に別の観点に従う楽音
生成方法は、供給された演奏情報に基づき汎用の演算処
理装置で楽音生成処理を実行させる楽音生成方法であっ
て、供給された演奏情報に基づく楽音生成処理を、不定
期で起動させる第1のステップと、前記第1のステップ
による楽音生成処理の起動に応じて、該起動の時刻に対
応する目標サンプル数と生成済みのサンプル数との相関
性に応じて、当該起動に対応して該楽音生成処理で生成
すべき楽音データのサンプル数を決定する第2のステッ
プと、前記第1のステップで起動された楽音生成処理を
実行し、前記第2のステップで決定されたサンプル数の
楽音データを生成する第3のステップとを具えたもので
ある。
【0024】上記更に別の観点に従う楽音生成装置又は
楽音生成方法においては、上記第3の観点に従う楽音生
成装置又は楽音生成方法と同様の効果を期待することが
できる。
【0025】
【発明の実施の形態】以下、添付図面を参照してこの発
明の実施の形態を詳細に説明する。図1は、この発明を
採用したソフト音源方式のコンピュータミュージックシ
ステムの全体構成ブロック図である。このコンピュータ
ミュージックシステムでは、パーソナルコンピュータの
CPU3に楽音生成処理を実行させる。CPU3には、
MIDIのインターフェース1,タイマ2,ROM(リ
ードオンリーメモリ)4,RAM(ランダムアクセスメ
モリ)5,マウス7,キーボード8,ディスプレイ9,
ハードディスク装置10,及びDMA(ダイレクトメモ
リアクセス)コントローラ11が、データ及びアドレス
バス6を介して接続されている。
【0026】DMAコントローラ11は、楽音生成処理
の実行によって生成されてRAM5内の出力バッファに
書き込まれた楽音データを、DAC(ディジタル/アナ
ログ変換器)12からの再生サンプリングクロックに同
期して1サンプルずつダイレクトメモリアクセス方式で
出力バッファから読み出してDAC12に送る処理(再
生処理)を実行するためのものである。DAC12でア
ナログ変換された楽音データは、サウンドシステム13
に送られて、該システム13から音響的に発音される。
【0027】ハードディスク装置10内のハードディス
クには、OS(ここでは、マイクロソフト社製のWin
dows3.1(商標)とする)やユーティリティソフ
トといったソフトウェアの他に、ソフト音源を実現する
ためのソフトウェアと、複数種類の音色についての1ま
たは複数周期分の波形データとが記録されている。図2
は、ソフト音源を実現するためのソフトウェアの構造の
一例を示す図である。このソフトウェアは、プログラミ
ングの複雑さの低減化を目的として、独立にプログラミ
ングできる最小単位(モジュール)の複合体として階層
的に構成されている。最上位の階層の「シーケンサプロ
グラム」は、MIDIメッセージを作成するためのモジ
ュールである。具体的には、「シーケンサプログラム」
はアプリケーションソフト(例えば、シーケンサソフト
やゲームソフトやカラオケソフト等)の形態をとってい
る。SGMMIDIoutAPIは、モジュール間で情
報の授受を行なうためにソフト音源で用意されているイ
ンターフェース(API(アプリケーションプログラミ
ングインターフェース))の一種である。
【0028】下位の階層の「SGM−AP」は、「シー
ケンサプログラム」からSGMMIDIoutAPI経
由で供給されるMIDIメッセージに基づいて楽音デー
タを生成するためのプログラムである。図3に示すよう
に、「SGM−AP」は、「MIDI出力ドライバ部」
と「音源部(エンジン部)」との2つのモジュールで構
成されている。「MIDI出力ドライバ部」は、「音源
部」を駆動するためのモジュールであり、MIDIメッ
セージに応じて、ボイスデータを「音源部」制御用の制
御パラメータに変換する。この制御パラメータは、モジ
ュール間のインターフェースであるSGMengine
API経由で「音源部」に送られる。また、「MIDI
出力ドライバ部」が初期化されるとき、波形データがフ
ァイルからロードされてengineAPI経由で「音
源部」に送られる。「音源部」は、この制御パラメータ
に従い、波形データを用いて楽音データを生成する。
【0029】図2に戻り、WAVEoutAPIは、W
indows3.1(商標)で用意されているAPIの
一種である。「出力デバイス」は、WAVEoutAP
I経由で「SGM−AP」から供給される楽音データを
DAC12に送るためのモジュールである。前述のよう
に、このコンピュータミュージックシステムでは、DM
Aコントローラ11がダイレクトメモリアクセス方式で
楽音データをDAC12に送るようになっている。した
がって、「出力デバイス」は、CPU3の制御のもと
で、DMAコントローラ11による割込み処理として実
行される。
【0030】次に、図2に示したようなソフトウェアに
よる処理の一例の概要を、図4を参照して説明する。
「シーケンサプログラム」が起動すると、MIDIメッ
セージが供給されはじめる。MIDIメッセージが供給
されると、「MIDI出力ドライバ部」が起動され、各
MIDIメッセージに応じてボイスデータを制御パラメ
ータに変換し、その制御パラメータ等を、当該MIDI
メッセージに基づく発音を割り当てた発音チャンネル用
の音源レジスタに格納する。
【0031】「音源部」は、所定の時間長の区間(フレ
ームと呼ぶ)毎に起動されて、それぞれその直前のフレ
ーム内に供給されたMIDIメッセージに基づく楽音生
成処理を、各制御パラメータに従って実行する(例え
ば、図4に示すように、時刻T1からT2までのフレー
ム内に供給されたMIDIメッセージに基づく楽音生成
処理を、時刻T2からT3までのフレームで実行す
る)。楽音生成処理の一例として、波形メモリ方式の楽
音生成処理では、まず、発音を割り当てられている各発
音チャンネル毎に、当該発音チャンネル用の音源レジス
タに格納された制御パラメータに従うピッチでRAM5
から波形データを読み出し、その波形データに、音色制
御(フィルタ演算)と、音量制御(音量エンベロープデ
ータの乗算)と、ピッチ,音色または音量等の変調制御
とを制御パラメータに従って施すことにより、当該発音
チャンネルについての所定数サンプル分の楽音データを
生成する。そして、各発音チャンネルについての楽音デ
ータを累算し、累算した楽音データを(あるいは、累算
した楽音データにエフェクトを付加し、その楽音データ
を)、RAM5内の出力バッファに書き込む。そして、
その出力バッファの再生を「出力デバイス」に予約す
る。
【0032】「出力デバイス」は、各フレーム毎に、そ
れぞれその直前のフレームで「音源部」によって再生予
約された出力バッファから1サンプルずつ楽音データを
読み出してDAC12に送る(例えば、図4に示すよう
に、時刻T2からT3までのフレームで生成された楽音
データを書き込まれて再生予約された出力バッファか
ら、時刻T3からT4までのフレームで楽音データを読
み出す)。
【0033】こうしたソフトウェアのうち、「シーケン
サプログラム」の起動と、MIDIメッセージの供給に
基づく「MIDI出力ドライバ部」の起動とは、リアル
タイムに行なわれる。また、「出力デバイス」は、DM
Aコントローラ11による割込み処理として強制的に起
動されるので、時間的な遅れが生じることはない。これ
に対し、「音源部」の起動は、CPU3自身の内部割込
みによって行なわれるので、完全なマルチタスク機能を
有しないOS上でこのソフトウェアを走らせた場合に
は、他の処理の影響によって「音源部」の起動が遅れる
ことにより、発音に支障が生じることがある。そこで、
このコンピュータミュージックシステムでは、次のよう
な幾つかの対策を講じることにより、発音に支障が生じ
る事態を防止している。
【0034】〔対策1〕「音源部」を起動させる内部割
込み信号を、各フレーム内にそれぞれ複数回の機会発生
し、各起動毎に、それぞれ上記所定数サンプル分(1出
力バッファ分)の楽音データのうちの一部の楽音データ
を生成することにより、通算として当該フレーム内に1
出力バッファ分の楽音データが生成されるように調整を
行なう。そして、いずれかの機会で、内部割込み信号が
発生しなかったために「音源部」が起動せず、その結果
楽音データが生成されなかった場合には、その未生成の
楽音データを、当該フレーム内のその後の内部割込み信
号が発生した機会で併せて生成することにより、当該フ
レーム内での1出力バッファ分の楽音データの生成が確
保されるように調整を行なう。
【0035】このように、「音源部」を起動させる内部
割込み信号を発生する機会を各フレーム毎に複数回設
け、この複数回の機会のうち何回か内部割込み信号が発
生しなくても、内部割込み信号が発生した機会だけで、
当該フレーム内に1出力バッファ分の楽音データの生成
を完了するようにしたので、発音に支障が生じる事態が
防止される。
【0036】図5及び図6は、それぞれこの〔対策1〕
の一例を示す図である。これらの例では、100ミリ秒
の長さのフレーム内に、「音源部」を起動する内部割込
み信号を10ミリ秒毎のタイミングで(したがって、1
フレーム内に合計10回)発生し、各起動毎に、それぞ
れ1出力バッファ分の楽音データの10分の1の量の楽
音データを生成するようにしている。
【0037】そして、図5の例では、内部割込み信号が
発生しなかったタイミングでの未生成の楽音データを、
その直後に内部割込み信号が発生した機会で全て生成す
るようにしている。すなわち、内部割込み信号が発生し
なかった2回目の機会(図の10ミリ秒目)で未生成と
なった楽音データを、その直後に内部割込み信号が発生
した3回目の機会(図の20ミリ秒目)での処理で、当
該機会での楽音データと併せて全て生成し(図では2,
3として示している)、内部割込み信号が発生しなかっ
た6,7回目の機会(図の50,60ミリ秒目)で未生
成となった楽音データを、その直後に内部割込み信号が
発生した8回目の機会(図の70ミリ秒目)での処理
で、当該機会での楽音データと併せて全て生成している
(図では6〜8として示している)。
【0038】これに対し、図6の例では、内部割込み信
号が発生しなかった機会での未生成の楽音データを、そ
の後に内部割込み信号が発生した複数の機会で分散して
生成するようにしている。すなわち、内部割込み信号が
発生しなかった2,3回目の機会(図の10,20ミリ
秒目)で未生成となった楽音データを、その後に内部割
込み信号が発生した4,5回目の機会(図の30,40
ミリ秒目)での処理で、それらの機会での楽音データと
併せてそれぞれ分散して生成している(図ではそれぞれ
2,3と4,5として示している)。但し、最後の10
回目の機会(図の90ミリ秒目)では、当該フレーム内
での1出力バッファ分の楽音データの生成を確保するた
めに、内部割込み信号が発生しなかった7,8,9回目
の機会(図の60,70,80ミリ秒目)で未生成とな
った楽音データを全て生成している。
【0039】図6では、未生成の楽音データを、1回の
起動の機会で生成する量の楽音データに分散してその後
に内部割込み信号が発生した機会で生成しているが、こ
れに限らず、未生成の楽音データを、適宜の量の楽音デ
ータ(例えば、1回の起動の機会で生成する量の楽音デ
ータや、1回の起動の機会で生成する量の1.5倍の楽
音データや、1回の起動の機会で生成する量の半分の楽
音データ)に分散してその後の機会で生成するようにし
てもよい。また、更に別の例として、内部割込み信号が
発生しなかった機会での未生成の楽音データを、当該フ
レーム内の最後の機会(図5及び図6では10回目の機
会)までに徐々に生成するようにしてもよい。
【0040】尚、内部割込み信号が発生しなかった機会
が多くなると、その後の内部割込み信号が発生した機会
で、楽音生成処理を割り当てられている全ての発音チャ
ンネルについて楽音データを生成しきれなくなる場合が
ある。そこで、この〔対策1〕において、そのような機
会では、楽音データを生成する発音チャンネル数を減少
させることにより、楽音データの生成を確保するように
することが望ましい。楽音データを生成する発音チャン
ネル数を減少させなければならない頻度は、図5の例の
場合が最も高く、図6の例の場合や、未生成の楽音デー
タを当該フレーム内の最後の機会までに徐々に生成する
場合には、図5の例の場合よりも低くなる(但し、未生
成の楽音データの生成を早期に行なうという観点から
は、図5の例が最も望ましい)。
【0041】〔対策2〕各発音チャンネル用の音源レジ
スタとして、発音チャンネルが未使用である際に割り当
てた楽音生成処理を制御するパラメータを格納するため
の第1の音源レジスタ(表の音源レジスタ)と、当該発
音チャンネル使用中となった際に割り当てた新たな楽音
生成処理を制御するパラメータを格納するための第2の
音源レジスタ(裏の音源レジスタ)とを設ける。そし
て、当該発音チャンネルで用いるべき音源レジスタとし
て、新たな楽音生成処理を開始すべきタイミングまで
は、表の音源レジスタを選択し、該タイミング以降は、
表の音源レジスタに替えて裏の音源レジスタを選択す
る。
【0042】これにより、現在使用中の発音チャンネル
に新たな楽音生成処理を割り当てた場合でも、表の音源
レジスタを用いて当該発音チャンネルでの現在の楽音生
成処理の実行を確保しつつ、当該発音チャンネルでの新
たな楽音生成処理を直ちに裏の音源レジスタに用意する
ことができる。したがって、楽音生成処理の用意の遅れ
を原因とする楽音データの生成の遅れを防止することが
できる。
【0043】〔対策3〕RAM5内に複数の出力バッフ
ァの領域を設けておき、「音源部」の起動に先行して、
そのうちの一部の出力バッファの再生を「出力デバイ
ス」に予約しておく。これにより、他の処理の影響によ
り、各フレームで起動すべき「音源部」が当該フレーム
内に起動しなくても、先行して再生予約した出力バッフ
ァの再生処理が全て完了するまでに「音源部」が起動し
て出力バッファの再生が予約されれば、楽音の再生に音
切れが生じなくなる。したがって、音切れを生じさせな
いための楽音生成処理の起動時間の遅れの許容範囲が拡
がる。
【0044】図7は、この〔対策3〕の一例を示す図で
ある。この例では、「音源部」の起動に先行して、4つ
の出力バッファの再生を「出力デバイス」に予約してい
る。そして、フレームF1の開始時には、それより前の
フレームで1出力バッファ分の再生処理が完了したこと
によって予約数が3になっているが、フレームF1の途
中に、1出力バッファ分の楽音データの生成が完了して
その出力バッファが再生予約されたために、予約数が4
に増えている。そして、フレームF1の終了時に、次の
1出力バッファ分の再生処理が完了したことによって予
約数が3に減るが、フレームF2の途中に、次の1出力
バッファ分の楽音データの生成が完了してその出力バッ
ファが再生予約されたために、予約数が4に増えてい
る。
【0045】そしてその後、「音源部」の起動の遅れに
より楽音データが生成されないために、フレームF4の
終了時には予約数が1に減っている。そして、フレーム
F5で、再生予約済の最後の出力バッファ(フレームF
2の途中に再生予約した出力バッファ)が読み出されて
いる(図では、この再生予約と読み出しとの関係を明ら
かにするために、フレームF2の途中に再生予約の発生
を太い矢印で示し、フレームF5を斜線で網かけしてい
る)が、フレームF5の途中に、1出力バッファ分の楽
音データの生成が完了してその出力バッファが再生予約
されたために、予約数が2に増えている。そしてその後
も、再生処理の完了と再生予約の発生とに応じて予約数
が増減している。
【0046】このように、各フレームで起動すべき「音
源部」が当該フレーム内に起動しなくても、先行して再
生予約した4つの出力バッファの再生処理が全て完了す
るまでに「音源部」が起動して出力バッファの再生が予
約されれば、楽音の再生に遅れが生じなくなる。尚、予
約数が4であるときにフレームの途中で次の1出力バッ
ファ分の楽音データの生成が完了した場合には、当該フ
レームでの再生処理の完了を待って出力バッファの再生
予約を行なうことにより、予約数が4を越えないように
するものとする。
【0047】この〔対策3〕を実施するためにRAM5
内に設けておくべき出力バッファの数は、「音源部」の
起動に先行して再生予約する出力バッファの数と、「音
源部」で生成を完了した楽音データを書き込むための1
つの出力バッファと、「音源部」で生成した楽音データ
の量が1出力バッファ分を越えた場合のための予備の出
力バッファとの合計(図7の例では、6つ)になる。尤
も、「音源部」において、生成した楽音データの量が1
出力バッファ分を越える場合には生成をストップするよ
うにすれば、予備の出力バッファは不要になる(したが
って、図7の例では、5つで足りるようになる)。
【0048】〔対策4〕所定時間内に「出力デバイス」
に出力バッファが再生予約されていない場合、そのタイ
ミングで生成完了しているはずの楽音データの生成を打
ち切り、そのタイミングで生成開始する楽音データから
生成動作を新たに開始する。これにより、再生予約が間
に合わず、一時的に楽音が乱れた場合でも、すぐに安定
した楽音生成動作に復帰し、ノイズを最小限に抑えるこ
とができる。
【0049】例えば、前述の〔対策3〕の図7の例で
は、先行して「出力デバイス」に再生予約した出力バッ
ファの再生処理が全て完了するまでに、「音源部」で生
成を完了した楽音データを書き込んだ出力バッファが再
生予約されている。しかし、他の処理の影響により「音
源部」の起動が大幅に遅れた場合には、先行して再生予
約した出力バッファの再生処理が全て完了した区間内に
おいても、「音源部」で生成を完了した楽音データを書
き込んだ出力バッファがまだ再生予約されていないこと
(予約数が0になること)も起こりうる。そのような場
合でも、〔対策3〕及び〔対策4〕を併せて実施すれ
ば、予約数が0になった場合、そのタイミングで生成完
了しているはずの楽音データの生成が打ち切られ、「出
力デバイス」に出力バッファの再生の先行予約を再び行
なった後、そのタイミングで生成開始する楽音データか
ら生成動作が新たに開始する。
【0050】次に、以上のような対策の実施を含んだこ
のコンピュータミュージックシステムの動作例を、図8
以下を参照して説明することにする。図8は、CPU3
の実行するメインルーチンを示すフローチャートであ
る。最初に、「初期設定」(ステップS1)を実行す
る。「初期設定」では、図9に示すように、最初に、各
発音チャンネル用の音源レジスタ(〔対策2〕として説
明したように、表の音源レジスタと裏の音源レジスタと
が設けられている)内のデータと、RAM5のワークエ
リア(このワークエリア内には、〔対策3〕として説明
したように、複数の出力バッファの領域が含まれてい
る)内のデータとを全てクリアする(ステップS2
1)。続いて、ハードディスク装置10内のハードディ
スクに記録されている波形データをRAM5にロードす
る(ステップS22)。続いて、「出力デバイス」を初
期設定し(ステップS23)、〔対策3〕として説明し
たように、「音源部」の起動に先行して、データをクリ
アされた幾つか(ここでは、図7の例と同じく4つとす
る)の出力バッファの再生を「出力デバイス」に予約す
る(ステップS24)。続いて、DAC12から再生サ
ンプリングクロックを発生させてDMAコントローラ1
1に与えることにより「出力デバイス」を起動するとと
もに、「音源部」を起動する内部割込み信号を発生する
ためのソフトタイマ(例えば、ハード的に構成したタイ
マをCPU3が参照することによって内部割込み信号を
発生するようにしたもの)をスタートさせる(ステップ
S25)。
【0051】ソフトタイマは、この内部割込み信号を、
前記〔対策1〕として説明したように各フレーム毎にそ
れぞれ複数の機会で発生可能である(ここでは、図5の
例と同じく、100ミリ秒の長さのフレーム内に、10
ミリ秒毎に合計10回の機会において発生することが可
能であるものとする)。なお、前述の通り、ソフトタイ
マによる内部割込み信号は、各起動機会で(つまり10
ミリ秒毎に)必ず発生できるとは限らず、起動機会が到
来しても、CPU3がOSの処理や他のソフトウェアの
処理に占有されているときは、ソフト音源に対する内部
割込み信号をかけることができない。そのための起動命
令発生手段の構成としては、例えば、タイマ2で1回の
起動機会に対応する所定時間(例えば10ミリ秒)を計
時する毎にフラグを立てるようにし、CPU3がソフト
音源の処理を実行してもよい状態のとき、このフラグの
有無をチェックするようにし、未処理のフラグが立って
いれば内部割込み信号を発生するようにすると共にその
フラグを消去するようにする。従って、1回の起動機会
に対応する所定時間(例えば10ミリ秒)の間に、CP
U3がソフト音源の処理をする余裕がある場合は、1回
の内部割込み信号が発生される。しかし、1回の起動機
会に対応する所定時間(例えば10ミリ秒)の間に、C
PU3がソフト音源の処理をする余裕がない場合は、フ
ラグチェックに行かないので、内部割込み信号が発生さ
れることなく、所定時間が経過してしまい、次のフラグ
が立ってしまう。つまり、前のフラグに対応して内部割
込み信号が発生されることがない。こうして、内部割込
み信号は、図5,図6に例示されるように、各起動機会
毎に必ず発生できるとは限らないものとなる。また、上
記から理解できるように、内部割込み信号がいくつかの
各起動機会で連続して発生される場合でも、その発生時
間間隔は正確な上記所定時間(例えば10ミリ秒)とは
ならず、10ミリ秒の前後で適宜の変動がある。すなわ
ち、内部割込み信号の微視的な発生タイミングはCPU
3の処理状態(いつタイマフラグを見に行くか)に依存
しているからである。
【0052】図8に戻り、初期設定を終えると、ディス
プレイ9に、処理の進行に応じた情報を表示したり、マ
ウス7を用いて各種の制御データを入力したりするため
のパネル(図示せず)を表示する(ステップS2)。
尚、「音源部」の起動に先行して「初期設定」(図9)
で出力バッファを「出力デバイス」に再生予約している
ので、「出力デバイス」では、この先行予約しした4つ
の出力バッファについての再生処理が完了してから、
「音源部」でその後に再生予約した出力バッファについ
ての再生処理を実行する。したがって、MIDIメッセ
ージが供給されてから楽音が再生されるまでの時間が、
この先行予約した出力バッファの数に等しい数のフレー
ム分(図7の例では4フレーム分)だけ長くなる(遅れ
る)ことになる。そこで、ディスプレイ9のパネルにM
IDIメッセージの供給に基づく表示を行なう際には、
表示のタイミングをこのフレーム分だけ後にずらすよう
にすることが望ましい。
【0053】ステップS2に続くステップS3では、下
記の各起動要因の発生をチェックする。 起動要因:「シーケンサプログラム」(図2参照)か
らMIDIメッセージが供給されたこと 起動要因:ソフトタイマにより、「音源部」を起動す
る内部割込み信号が発生したこと 起動要因:「出力デバイス」からの処理要求が検出さ
れたこと 起動要因:その他の要求(パネルの入力イベントや、
キーボード8のコマンド入力イベント(メインルーチン
終了コマンドを除く)が検出されたこと 起動要因:キーボード8のメインルーチン終了コマン
ドの入力イベントが検出されたこと
【0054】続いて、上記起動要因のいずれかが発生し
たか否かを判断する(ステップS4)。ノーであれば、
ステップS3に戻り、いずれかの起動要因が発生するま
でステップS3及びS4の処理を繰り返す。そしていず
れかの起動要因が発生すると、ステップS4でイエスと
なってステップS5に進む。ステップS5では、どの起
動要因が発生したのかを判定する。起動要因が発生し
ていれば、MIDI処理を実行し(ステップS6)、所
定の受信表示(例えば、どのMIDIチャンネルについ
てのMIDIメッセージが供給されたかの表示等)を、
パネル上に行なう(ステップS7)。そしてステップS
3に戻り、ステップS3以下の処理を繰り返す。
【0055】ステップS6で実行するMIDI処理に
は、例えば、ノートオンに基づくノートオンイベント処
理や、ノートオフに基づくノートオフイベント処理等が
含まれる。図10は、ノートオンイベント処理の一例を
示すフローチャートである。最初に、ノートナンバ,ベ
ロシティ,ノートオンを入力したMIDIチャンネルを
受信するパートのパート番号,MIDIメッセージの入
力時刻を示す時間軸上でノートオンイベントが発生した
時刻を示すデータを、それぞれ所定のレジスタNN,V
EL,p,TMに格納する(ステップS31)。続い
て、当該ノートオンに基づく発音の割当て処理を行な
い、割り当てた発音チャンネルのチャンネル番号をレジ
スタiに格納する(ステップS32)。続いて、レジス
タp内のパート番号に対応して選択されている音色のボ
イスデータをRAM5から読み出し、そのボイスデータ
を、レジスタNN,VEL内のノートナンバ,ベロシテ
ィに応じて「音源部」制御用の制御パラメータ(ピッチ
を指定する周波数ナンバFNを含む)に変換する(図2
参照)(ステップS33)。
【0056】続いて、この制御パラメータを、ノートオ
ン及びレジスタTM内の発生時刻のデータとともに、レ
ジスタi内のチャンネル番号の発音チャンネル用の音源
レジスタに格納することにより、当該発生時刻に応じた
タイミングでのノートオンの予約を行なう(ステップS
34)。レジスタTM内の発生時刻のデータを音源レジ
スタに格納するのは、次のような理由による。ノートオ
ンイベントの発生時刻と、当該ノートオンイベントに基
づく楽音が再生される時刻とには、前述のように約4フ
レーム分の時間差がある(楽音の再生がそれだけ遅れ
る)。楽音生成処理(後述する「音源処理1」)は、そ
の時間差の範囲内の任意のタイミングで、対応する楽音
データを生成すればよい(つまり、その範囲内での処理
の遅れが許容されている)。したがって、ノートオンイ
ベントの発生時刻と異なる任意のタイミングで実行され
る楽音生成処理では、ノートオンイベントの発生時刻が
わかっていないと、対応する楽音データが生成できない
からである。
【0057】尚、ステップS34において、当該発音チ
ャンネルが使用中であれば、〔対策2〕として説明した
ように、当該発音チャンネル用の表の音源レジスタと裏
の音源レジスタとのうち、裏の音源レジスタに制御パラ
メータ等を格納する。これにより、表の音源レジスタを
用いて当該発音チャンネルでの現在の楽音生成処理の実
行を確保しつつ、当該発音チャンネルでの新たな楽音生
成処理を直ちに裏の音源レジスタに用意することができ
る。またこのように裏の音源レジスタに格納を行なった
場合には、表の音源レジスタ内の予約領域にも、レジス
タTM内の発生時刻に応じたタイミングでのダンプ(音
量エンベロープを急激に減少させる処理)の予約を行な
う。ステップS34に続くステップS35では、ノート
オンの発生時刻が遅い発音チャンネルの順に楽音生成演
算が行なわれるように、発音の割当て処理を行なった各
発音チャンネルの間での演算順序を決定する。(すなわ
ち、後着のノートオンに対応した発音チャンネルが、楽
音の生成において優先的に処理されるようになる)。そ
してリターンする。
【0058】図11は、ノートオフイベント処理の一例
を示すフローチャートである。最初に、ノートナンバ,
ノートオフを入力したMIDIチャンネルを受信するパ
ートに対応して選択されている音色,MIDIメッセー
ジの入力時刻を示す時間軸上でノートオフイベントが発
生した時刻を示すデータを、それぞれ所定のレジスタN
N,t,TMに格納する(ステップS41)。続いて、
レジスタt内の音色での発音を割り当てた発音チャンネ
ルを捜し、その発音チャンネルのチャンネル番号をレジ
スタiに格納する(ステップS42)。続いて、レジス
タi内のチャンネル番号の発音チャンネル用の表の音源
レジスタと裏の音源レジスタのうち、レジスタt内の音
色に対応するほうの音源レジスタ内の予約領域に、レジ
スタTM内の発生時刻に応じたタイミングでのノートオ
フの予約を行なう(ステップS43)。そしてリターン
する。
【0059】図8のステップS5に戻り、起動要因が
発生していれば、「音源処理1」を実行し(ステップS
8)、所定の状態表示(例えば、CPU3の演算能力
や、生成した楽音の音量レベル等の表示)を、パネル上
に行なう(ステップS9)。そしてステップS3に戻
り、ステップS3以下の処理を繰り返す。
【0060】「音源処理1」は、「音源部」の一部を成
すものである。この「音源処理1」では、図12に示す
ように、最初に、MIDIメッセージの入力時刻を示す
時間軸上での現在の時刻GTから、その時間軸上でのM
IDIメッセージの入力時刻のうち当該MIDIメッセ
ージに基づく楽音生成処理が終了しているものの最終の
入力時刻STを減じた時間を、生成量SR(今回の起動
で生成すべき楽音データの目標サンプル数を時間の長さ
で表現したもの)として設定する(ステップS51)。
【0061】すなわち、ステップS51では、〔対策
1〕における図5の例のように、いずれかの機会で内部
割込み信号が発生しなかったために「音源部」が起動し
なかった場合に、その機会での未生成の楽音データを、
その直後に内部割込み信号が発生した機会で全て生成す
るようにしている。これにより、1フレーム内に何回か
内部割込み信号が発生しなくても、内部割込み信号が発
生した機会だけで、当該フレーム内に1出力バッファ分
の楽音データの生成が完了するので、発音に支障が生じ
る事態が防止される。この生成量SRを図5を参照して
具体的に示せば、1回目の機会では10ミリ秒になる
が、2回目の機会で内部割込み信号が発生していないの
で、3回目の機会では20ミリ秒になる。尚、図5の例
のようにするかわりに、内部割込み信号が発生しなかっ
た機会での未生成の楽音データを、図6の例のようにそ
の後に内部割込み信号が発生した複数の機会で分散して
生成するようにしたり、あるいは当該フレーム内の最後
の機会までに徐々に生成するようにしてもよいことは、
〔対策1〕において述べたとおりである。
【0062】続いて、「初期設定」(図9)で再生予約
した出力バッファ以外の残りの出力バッファのうちの1
つの出力バッファ上に、時刻STを先頭とした生成量S
R分の楽音生成領域を設定する(ステップS52)。続
いて、楽音データを生成する発音チャンネル数を決定す
る(ステップS53)。この発音チャンネル数の決定
は、次のようにして行なう。まず、1つの発音チャンネ
ルで生成量SR分の楽音データを生成するのに要する演
算時間と、今回の演算可能時間EJ(次に内部割込み信
号が発生する予定の時刻である演算終了時刻SJから、
今回内部割込み信号が実際に発生した時刻である演算開
始時刻KJを減じた時間)とに基づき、時間EJ内に幾
つの発音チャンネルで生成量SR分の楽音データの生成
が可能かを算出する。そして、算出した生成可能な発音
チャンネル数が、ノートオンイベント処理(図10)で
発音割当てを行なった発音チャンネル数以上であれば、
当該発音割当てを行なった発音チャンネル数を、そのま
ま楽音データを生成する発音チャンネル数として決定す
る。他方、算出した生成可能な発音チャンネル数が、発
音割当てを行なった発音チャンネル数未満であれば、当
該生成可能な発音チャンネル数を、楽音データを生成す
る発音チャンネル数として決定する(すなわち、〔対策
1〕として説明したように、楽音データを生成する発音
チャンネル数を減少させることにより、1フレーム内に
1出力バッファ分の楽音データの生成を確保する)。
【0063】ステップS53に続くステップS54で
は、演算順序(ノートオンイベント処理のステップS3
5で決定したもの)が1位である発音チャンネルのチャ
ンネル番号をレジスタiに格納し、スタートポインタs
pで時刻STを指す。続いて、レジスタi内のチャンネ
ル番号の発音チャンネル用の表の音源レジスタの予約領
域を参照して、スタートポインタsp以降から時刻GT
までの間で、最初の予約(ピッチベンドの予約,ノート
オフの予約,ダンプの予約等)を検出する(ステップS
55)。続いて、予約が検出されたか否かを判断する
(ステップS56)。
【0064】イエスであれば、当該発音チャンネルにつ
いて、当該予約の時刻までの楽音生成処理を実行し、ス
タートポインタspを当該予約の時刻にまで進める(ス
テップS57)。この楽音生成処理では、前述のよう
に、音源レジスタに格納された制御パラメータに従うピ
ッチでRAM5から波形データを読み出し、その波形デ
ータに、音色制御(フィルタ演算)と、音量制御(音量
エンベロープデータの乗算)と、ピッチ,音色または音
量等の変調制御と、エフェクトの付加とを制御パラメー
タに従って施すことによって楽音データを生成する。
【0065】ステップS57に続くステップS58で
は、当該予約の内容を当該音源レジスタに格納すること
により、その予約内容を実行する。ここで、ノートオフ
の予約が検出された場合には、当該発音チャンネルの表
の音源レジスタにノートオフを書き込み、音量エンベロ
ープのリリーススラートを開始する。また、ダンプの予
約が検出された場合には、ダンプの実行の完了後(すな
わち、音量エンベロープのレベルが一定以下の低い値に
なった後)、〔対策2〕として示したように、当該発音
チャンネルで用いるべき音源レジスタとして、表の音源
レジスタに替えて裏の音源レジスタを選択する(尤も、
先に表の音源レジスタから裏の音源レジスタへの入替え
を行なった後で、表の音源レジスタについてダンプを実
行してもよい)。尚、図10のステップS34で説明し
たように、裏の音源レジスタに制御パラメータ,ノート
オン及びレジスタTM内のノートオンの発生時刻のデー
タを格納する場合には、表の音源レジスタの予約領域
に、レジスタTM内の発生時刻に応じたタイミングでの
ダンプの予約がされる。したがって、楽音生成処理にお
いて、このレジスタTM内の発生時刻に応じたタイミン
グが来ると、ダンプが実行された後、表の音源レジスタ
に替えて裏の音源レジスタを用いた楽音生成処理が開始
されることになる。
【0066】ステップS58を終了すると、ステップS
55に戻り、ステップS55以下の処理を繰り返す。
【0067】他方、ステップS56でノーと判断されれ
ば(あるいは、最初はイエスと判断されたがその後ステ
ップS57及びS58を経由することによりノーと判断
されるようになれば)、当該発音チャンネルについて、
スタートポインタspから時刻GTまでの楽音生成処理
を全て実行する(ステップS59)。これにより、当該
発音チャンネルについて、生成量SR分の楽音生成領域
に亘る楽音データの生成が完了する。
【0068】続いて、ステップS53で決定した数の発
音チャンネルについて楽音生成処理を全て完了したか否
かを判断する(ステップS60)。ノーであれば、演算
順序が次順位である発音チャンネルのチャンネル番号を
レジスタiに格納し、スタートポインタspを時刻ST
に設定する(ステップS61)。そしてステップS55
に戻り、ステップS55以下の処理を繰り返す。他方、
ステップS60でイエスと判断されれば(あるいは、最
初はノーと判断されたが、その後ステップS55以下を
繰り返すことによりイエスと判断されるようになれば)
楽音生成処理を終了してステップS62に進む。これに
より、生成可能な発音チャンネル数が、発音の割当て処
理を行なった発音チャンネル数未満である場合には、演
算順序の遅い発音チャンネルについての楽音生成処理が
省略されるという形で、同時発音チャンネル数が減少す
ることになる。
【0069】ステップS62では、累算された各発音チ
ャンネルについて楽音データ(あるいは、累算された楽
音データにエフェクトを付加したもの)を、出力バッフ
ァ上の楽音生成領域(ステップS52で設定したもの)
に書き込む。続いて、時刻STに生成量SRの長さを加
えた時刻を、新たな時刻STとして設定する(ステップ
S63)。この新たな時刻STは、次に「音源処理1」
を実行する際の演算スタート位置になる。続いて、1出
力バッファ分の楽音データが完成したか否かを判断する
(ステップS64)。ノーであればリターンする。他方
イエスになると、その出力バッファを、後述の「音源処
理2」によって当該出力バッファに連結されている他の
出力バッファから切り離して、「出力デバイス」に再生
予約する(ステップS65)。そしてリターンする。
【0070】図8のステップS5に戻り、起動要因が
発生していれば、「音源処理2」を実行し(ステップS
10)、所定の状態表示をパネル上に行なう(ステップ
S11)。そしてステップS3に戻り、ステップS3以
下の処理を繰り返す。
【0071】「音源処理2」も、「音源部」の一部を成
すものである。この「音源処理2」は、「出力デバイ
ス」(すなわちDMAコントローラ11による外部割込
み処理)の実行によって発生する要求に基づいて実行さ
れる。図13は、DMAコントローラ11による外部割
込み処理の一例を示すフローチャートである。この外部
割込み処理は、DAC12に楽音データを1サンプル分
ずつ送るタイミング(DAC12の再生サンプリング周
期)で、DMAコントローラ11が実行するものであ
り、この処理によって、出力バッファに記憶された1フ
レーム分の楽音データが、再生サンプリング周期毎に1
サンプル分ずつ読み出されてDAC12に供給される。
最初に、「初期処理」(図9)または「音源処理1」
(図12)によって「出力デバイス」に再生予約された
出力バッファのうちの現在読出し中の出力バッファ(ポ
インタPBで指した出力バッファ)内の現在読出し中の
1サンプル分の楽音データ(ポインタppで指した楽音
データ)を、DAC12に送る(ステップS71)。続
いて、ポインタppを1サンプル分進め(ステップS7
2)、当該出力バッファ内の全ての楽音データをDAC
12に送り終えたか(すなわち当該出力バッファについ
ての再生処理を完了したか)否かを判断する(ステップ
S73)。ノーであればリターンする。
【0072】他方、ステップS73でイエスと判断され
れば、次の出力バッファの再生予約があるか否かを判断
する(ステップS74)。他の処理の影響により「音源
部」の起動が遅れているために、「音源部」で生成を完
了した楽音データを書き込んだ出力バッファが再生予約
されていなくても、既に再生予約している出力バッファ
(「初期設定」(図9)で先行して再生予約した出力バ
ッファや、音源処理1で既に再生予約している出力バッ
ファ)の再生処理が全て完了するまでは、ステップS7
4でイエスと判断されてステップS75に進み、その出
力バッファにポインタPBを進める。これにより、〔対
策3〕として説明したように、楽音生成処理の遅れによ
る音切れを防ぐための楽音生成処理の起動時間の許容範
囲が拡がることになる。ステップS75に続くステップ
S76では、再生処理を完了した出力バッファを、「音
源処理2」のルーチンに返却する要求を発生する。そし
てリターンする。
【0073】他方、「音源部」の起動が大幅に遅れてい
るために、既に再生予約している出力バッファの再生処
理を全て完了した区間内においても、「音源部」で生成
を完了した楽音データを書き込んだ出力バッファがまだ
再生予約されていない場合には、ステップS74でノー
と判断されてステップS77に進む。ステップS77で
は、ノイズ音の発生を防止するためにDAC12の出力
をミュートする。続いてステップS78では、「音源処
理2」に対してリセット要求(楽音生成処理のリセット
を要求するもの)を発生する。そしてリターンする。
【0074】図14は、「出力デバイス」からの返却要
求(図13のステップS76)に基づく「音源処理2」
の一例を示すフローチャートである。最初に、「出力デ
バイス」から返却された出力バッファを受け取る(ステ
ップS81)。続いて、その出力バッファをクリアし
て、「音源部」が既に保有している出力バッファの後に
その出力バッファを連結する(ステップS82)。尚、
この連結とは、出力バッファ同士を仮想的に順番につな
げて大きな1つのバッファとして扱うことである。した
がって、RAM5内で物理的に相互に隣接した領域にそ
れらの出力バッファを存在させることは必要ではない。
ステップS82に続くステップS83では、「音源部」
と「出力デバイス」との間での時刻のずれの有無を確認
して「音源部」の動作を補正するために、「出力デバイ
ス」からの返却要求のタイミングを示すデータを作成す
る。そしてリターンする。
【0075】図15は、「出力デバイス」からのリセッ
ト要求(図13のステップS78)に基づく「音源処理
2」の一例を示すフローチャートである。最初に、各発
音チャンネル用の音源レジスタ内のデータと、RAM5
の出力バッファ内のデータとを全てクリアする(ステッ
プS91)。続いて、「初期設定」(図9)のステップ
S23乃至S25と同じく、「出力デバイス」を初期設
定し(ステップS92)、データをクリアされた4つの
出力バッファの再生を再び「出力デバイス」に予約し
(ステップS93)、「出力デバイス」を起動するとと
もに、ソフトタイマをスタートさせる(ステップS9
4)。そしてリターンする。
【0076】このように、リセット要求に基づく「音源
処理2」では、「出力デバイス」に出力バッファが再生
予約されていない場合には、〔対策4〕として説明した
ように、それまでに「音源部」で実行していた楽音生成
処理を打ち切り、クリアされた出力バッファの再生の先
行予約を「出力デバイス」に再び行なった後、それ以降
に供給されるMIDIメッセージに基づいて「音源部」
を起動することにより、楽音生成処理を新たに開始して
いる。これにより、再生予約が間に合わず、一時的に楽
音が乱れた場合でも、すぐに安定した楽音生成動作に復
帰するので、ノイズを最小限に抑えることができる。
【0077】図8のステップS5に戻り、起動要因が
発生していれば、その要求に応じた処理(例えば、ディ
スプレイ9上のパネルの入力イベント処理や、キーボー
ド8からのコマンド入力イベント処理等)を実行し(ス
テップS12)、それに応じた表示をパネル上に行なう
(ステップS13)。そしてステップS3に戻り、ステ
ップS3以下の処理を繰り返す。他方、起動要因が発
生していれば、メインルーチンを終了させるための所定
の処理を実行し(ステップS14)、ディスプレイ9か
らパネルを消去する(ステップS15)。そしてリター
ンする。
【0078】尚、ステップS5において、起動要因乃
至のうちの2以上の起動要因が発生していると判断さ
れた場合には、起動要因,,,,の順に、ス
テップS5以下の処理を実行するものとする。また、ス
テップS3乃至ステップS5は、擬似マルチタスク処理
におけるタスク管理を仮想的に示したものであり、実際
には、いずれかの起動要因の発生に基づいて処理を実行
している途中で、それよりも優先順位の高い起動要因が
発生したことにより、割込みで別の処理を実行すること
(例えば、起動要因の発生に基づいて「音源処理1」
を実行している途中で、起動要因が発生したことによ
り、割込みで「MIDI処理」を実行すること等)があ
る。
【0079】次に、以上の実施の形態に対する変更例に
ついて説明する。以上の実施の形態では、ソフトタイマ
による内部割込み信号が発生する毎に、図12の「音源
処理1」のステップS51に示したように、楽音生成処
理を終了している最終の時刻STを現在の時刻GTから
減じた時間を生成量SRとして設定する(すなわち、内
部割込み信号が発生しなかったことによって未生成とな
っている楽音データを、その直後に内部割込み信号が発
生した機会で全て生成する)という方式を採っている。
こうした方式は、未生成の楽音データの生成を最も早期
に行なうことができるという点では優れている。しかし
この方式では、内部割込み信号が何回も連続して発生し
なかったような場合には、その直後に内部割込み信号が
発生した機会での楽音データの生成量SRが大きくなっ
てしまう。このように生成量SRが大きくなると、「音
源処理1」を一度実行するためにCPU3が費やさなけ
ればならない時間が長くなり、したがってCPU3が
「音源処理1」の実行のために長時間連続して独占され
るようになるので、その実行中に「音源処理1」よりも
優先順位の低い「音源処理2」等の処理の起動要因が発
生しても、CPU3がそれらの処理をなかなか実行でき
なくなってしまうことがある。またこのように生成量S
Rが大きくなると、演算可能時間EJが残り少ない場合
には、楽音データを生成可能な発音チャンネル数が極端
に減少してしまうことがある。そこで以下では、変更例
として、未生成の楽音データを徐々に生成していく方式
を具体的に説明することにする。
【0080】〔変更例1〕この変更例では、ソフトタイ
マによる内部割込み信号が発生する毎に、「音源処理
1」を実行するかわりに、内部割込み信号が発生したこ
と(したがって楽音波形を生成すべきこと)を合図する
情報(波形生成キュー(cue)と呼ぶことにする)
を、その直前に内部割込み信号が発生してからの経過時
間に応じた数だけ生成してRAM5内の所定のバッファ
(キューバッファと呼ぶことにする)に書き込む処理
(キュー処理と呼ぶことにする)を実行するようにして
いる。そして、キューバッファに波形生成キューが書き
込まれていると、楽音生成処理に要する時間があまり長
くならないような一定範囲内で楽音データの生成量を決
定し、その量だけ楽音データを生成し、キューバッファ
内の波形生成キューをその生成量に応じた数だけクリア
する処理(「音源処理1’」と呼ぶことにする)を実行
するようにしている。キューバッファに波形生成キュー
が書き込まれている毎にこうした処理が実行されること
により、未生成の楽音データが徐々に生成されていくこ
とになる。この方式によれば、1フレーム内で内部割込
み信号が連続して複数回発生しなかったような場合、キ
ューバッファ内の波形生成キューの数は増加するが、一
度の「音源処理1’」における楽音データの生成量は上
記一定範囲内に抑えられるので、CPU3が「音源処理
1’」のために長時間連続して独占されることはない。
したがって、優先順位の低い処理の実行が確保されやす
くなり、且つ楽音データを生成する発音チャンネル数の
極端な減少が防止される。
【0081】次に、この変更例を、図16乃至図20を
参照して具体的に説明する。図16は、この変更例にお
いてCPU3が実行するメインルーチンを示すフローチ
ャートである。最初のステップS101の「初期設定」
では、図8のステップS1の「初期設定」(図9参照)
と同じ処理に加えて、RAM5の上記キューバッファ内
のデータをクリアする。続くステップS102では、図
8のステップS2と同じ処理を行なう。
【0082】続くステップS103では、下記の各起動
要因の発生をチェックする。 起動要因:「シーケンサプログラム」(図2参照)か
らMIDIメッセージが供給されたこと 起動要因:ソフトタイマにより、「音源部」を起動す
る内部割込み信号が発生したこと 起動要因:キューバッファに波形生成キューが書き込
まれていること 起動要因:「出力デバイス」からの処理要求が検出さ
れたこと 起動要因:その他の要求(パネルの入力イベントや、
キーボード8のコマンド入力イベント(メインルーチン
終了コマンドを除く)が検出されたこと 起動要因:キーボード8のメインルーチン終了コマン
ドの入力イベントが検出されたこと 上記起動要因のうち、起動要因以外は、図8のステッ
プS3でチェックする起動要因と同じである。
【0083】続くステップS104は、図8のステップ
S4と同じく、上記起動要因のいずれかが発生したか否
かを判断する。そしていずれかの起動要因が発生する
と、ステップS105に進み、どの起動要因が発生した
のかを判定する(起動要因が複数発生していた場合の優
先順位は、が最も高く、以下,,,,の順
に低くなる)。ステップS105で起動要因が発生し
たと判定した場合のその後の処理(ステップS106の
「MIDI処理」及び及びS107の処理)は、図8の
ステップS5で起動要因が発生したと判定した場合の
図8のステップS6及びS7の処理と同じである。
【0084】他方、起動要因(ソフトタイマによる内
部割込み信号)が発生したと判定した場合には、ステッ
プS108の「キュー処理」に進む。(尚、この変更例
においても、図8の例におけると同様、CPU3が実行
しなければならない他の処理の影響によって、内部割込
み信号の発生が遅れたり、内部割込み信号が発生しなか
ったりすることがあることはもちろんである。したがっ
て、内部割込み信号が発生してから次に今回内部割込み
信号が発生するまでの経過時間は、10ミリ秒であると
は限らず、10ミリ秒を越えることがある。)
【0085】「キュー処理」では、図17に示すよう
に、その直前に内部割込み信号が発生してから今回内部
割込み信号が発生するまでの経過時間が10ミリ秒の何
倍以上であるかに応じて、その倍数分の波形生成キュー
を生成し(すなわち、経過時間が10ミリ秒以上20ミ
リ秒未満であれば1つ、経過時間が20ミリ秒以上30
ミリ秒未満であれば2つ、…というように波形生成キュ
ーを生成し)、生成した波形生成キューをキューバッフ
ァに書き込む(ステップS120)。そしてリターンす
る。「キュー処理」を終えると、パネル上への所定の状
態表示(ステップS109)を行ない、そしてステップ
S103に戻る。
【0086】この「キュー処理」によってキューバッフ
ァに波形生成キューが書き込まれると、起動要因が発
生したことになる。ステップS105でこの起動要因
が発生したと判定した場合には、ステップS110の
「音源処理1’」に進む。図18は「音源処理1’」の
一例を示すフローチャートである。最初のステップS1
21では、生成量SRを、10ミリ秒(1出力バッファ
分の楽音データの10分の1に対応した時間)に設定す
る。続くステップS122では、図12のステップS5
2と同じく、「初期設定」で再生予約した出力バッファ
以外の残りの出力バッファのうちの1つの出力バッファ
上に、時刻ST(MIDIメッセージの入力時刻のう
ち、当該MIDIメッセージに基づく楽音生成処理が終
了しているものの最終の時刻)を先頭とした生成量SR
分の楽音生成領域を設定する。
【0087】続くステップS123では、生成量SRの
楽音データを生成する発音チャンネル数を、キューバッ
ファ内の波形生成キューの数に応じて決定する。より詳
細には、キューバッファ内の波形生成キューの数が一定
未満である場合(すなわち内部割込み信号が連続して発
生しなかった回数が上記一定数未満である場合)には、
ノートオンイベント処理(図10)で発音割当てを行な
った発音チャンネル数を、そのまま楽音データを生成す
る発音チャンネル数として決定する。他方、キューバッ
ファ内の波形生成キューの数が上記一定数以上である場
合(すなわち内部割込み信号が連続して発生しなかった
回数が上記一定数以上である場合)には、楽音データを
生成する発音チャンネル数を、ノートオンイベント処理
で発音割当てを行なった発音チャンネル数よりも少なく
決定する。このように発音チャンネル数を減少させる理
由は、内部割込み信号が何度も連続して発生していない
場合には未生成の楽音データがかなり多くなっているの
で、発音チャンネル数の減少によって一度の「音源処理
1’」に要する時間を短縮させることにより、未生成の
楽音データの生成を早めることにある。尚、このステッ
プS123では、図12のステップS53と異なり、演
算可能時間EJとの関係で発音チャンネル数を一義的に
減少させる必要はない(そもそもこの変更例では、内部
割込み信号の発生によってではなくキューバッファに波
形生成キューが書き込まれることによって「音源処理
1’」が起動するので、演算可能時間EJの概念自体が
存在しない)ので、発音チャンネル数が極端に減少する
事態は生じない。続くステップS124乃至S135で
は、図12のステップS54乃至S65と同じ処理を行
なう。続くステップS136では、キューバッファ内の
波形生成キューを1つだけクリアする。そしてリターン
する。
【0088】このように、図18の例では、一度の「音
源処理1’」における生成量SRは、常に10ミリ秒
(1出力バッファ分の楽音データの10分の1に対応し
た時間)に固定されている。したがって、CPU3が
「音源処理1’」のために長時間連続して独占されるこ
とがなくなるので、「音源処理1’」よりも優先順位の
低い処理の実行が確保されやすくなり、且つ「音源処理
1’」における発音チャンネル数の極端な減少が防止さ
れる。
【0089】次に、図19は「音源処理1’」の別の一
例を示すフローチャートである。最初のステップS14
1では、キューバッファ内の波形生成キューの数に応じ
て、生成量SRと、楽音データを生成する発音チャンネ
ル数とを決定する処理を行なう。発音チャンネル数の決
定は、図18のステップS123と同様にして行なう。
生成量SRの決定についてより詳細に述べると、キュー
バッファ内の波形生成キューの数が一定未満である場合
(すなわち内部割込み信号が連続して発生しなかった回
数が上記一定数未満である場合)には、生成量SRを1
0ミリ秒に決定する。他方、キューバッファ内の波形生
成キューの数が上記一定数以上である場合(したがって
内部割込み信号が連続して発生しなかった回数が上記一
定数以上である場合)には、生成量SRを20ミリ秒
(1出力バッファ分の楽音データの10分の2に対応し
た時間)に決定する。(具体例としては、内部割込み信
号が20回以上連続して発生しなかったためにキューバ
ッファ内の波形生成キューの数が20以上になった場合
には、図7に示した予約数が当初の4から2にまで減少
してしまっているので、その場合に生成量SRを20ミ
リ秒に決定するようにしてもよい。)尚、キューバッフ
ァ内の波形生成キューの数が上記一定数をある程度以上
回った場合には、一度の「音源処理1’」に要する時間
があまり長くならないような一定範囲内で、生成量SR
を更に大きな量に決定するようにしてもよい。
【0090】続くステップS142では、図12のステ
ップS52と同じく、「初期設定」で再生予約した出力
バッファ以外の残りの出力バッファのうちの1つの出力
バッファ上に、時刻ST(MIDIメッセージの入力時
刻を示す時間軸上で、MIDIメッセージに基づく楽音
生成処理が終了している最終の時刻)を先頭とした生成
量SR分の楽音生成領域を設定する。続くステップS1
43乃至S154では、図12のステップS54乃至S
65と同じ処理を行なう。続くステップS155では、
ステップS141で決定した生成量SRが10ミリ秒の
何倍であるかに応じて、その倍数分だけ(生成量SRが
10ミリ秒であれば1つだけ、生成量SRが20ミリ秒
であれば2つだけ)キューバッファ内の波形生成キュー
をクリアする。そしてリターンする。
【0091】このように、図19の例では、内部割込み
信号が何度も連続して発生していない場合には、一度の
「音源処理1’」における生成量SRが、一度の「音源
処理1’」に要する時間があまり長くならないような一
定範囲内で、10ミリ秒よりも長く決定される。これに
より、図18の例に示したような効果を奏するのみなら
ず、未生成の楽音データがかなり多くなっている場合に
未生成の楽音データの生成を早めることもできるように
なる。
【0092】上述のような「音源処理1’」を終える
と、図16のステップS111でパネル上への所定の状
態表示を行ない、そしてステップS103に戻る。ステ
ップS105で起動要因が発生したと判定した場合の
その後の処理(ステップS112の「音源処理2」及び
ステップS113の処理)は、「出力デバイス」からの
リセット要求(図13のステップS78)に基づく「音
源処理2」を除いて、図8のステップS5で起動要因
が発生したと判定した場合の図8のステップS10の
「音源処理2」及びステップS11の処理と同じであ
る。
【0093】図20は、「出力デバイス」からのリセッ
ト要求に基づく「音源処理2」の一例を示すフローチャ
ートである。ステップS161では、音源レジスタ及び
出力バッファに加え、この変更例において設けられてい
るキューバッファ内のデータも全てクリアする。続くス
テップS162乃至ステップS164では、図15のス
テップS92乃至S94と同じ処理を行なう。そしてリ
ターンする。
【0094】図16に戻り、ステップS105で起動要
因,起動要因が発生したと判定した場合のその後の
処理(ステップS114及びS115,ステップS11
6及びS117)は、それぞれ図8のステップS5で起
動要因,起動要因が発生したと判定した場合の図8
のステップS12及びS13,ステップS14及びS1
5の処理と同じである。
【0095】〔変更例2〕この変更例では、ソフトタイ
マによる内部割込み信号が発生する毎に、それまでに未
生成となっている楽音データの量の関数として、楽音生
成処理に要する時間があまり長くならないような一定範
囲内で楽音データの生成量を決定し、その量だけ楽音デ
ータを生成する処理(「音源処理1’’」と呼ぶことに
する)を実行するようにしている。内部割込み信号が発
生する毎にこうした処理が実行されることにより、未生
成の楽音データが徐々に生成されていくことになる。す
なわち、この方式は、内部割込み信号の発生を起動要因
として楽音生成処理を実行する点では、図8のメインル
ーチンと同じであるが、未生成の楽音データを一度に全
て生成せずに徐々に生成していく点では、図12の「音
源処理1」とは異なっており、〔変更例1〕における
「音源処理1’」と同じである。したがって、CPU3
が「音源処理1’’」のために長時間連続して独占され
ることはないので、〔変更例1〕におけると同じ効果を
奏する。しかも、〔変更例1〕では、「音源処理1’」
の起動要因(キューバッファに波形生成キューが書き込
まれていること)の優先順位を、「キュー処理」の起動
要因(内部割込み信号の発生)よりも低くせざるを得な
いのに対し、この方式で、内部割込み信号の発生自体が
「音源処理1’’」の起動要因になっているので、楽音
生成処理が一層優先的に実行されやすくなるという利点
がある。
【0096】次に、この変更例を、図21乃至図25を
参照して具体的に説明する。この変更例においてCPU
3が実行するメインルーチンは、「音源処理1」のかわ
りに「音源処理1’’」を実行する点を除き、図8と全
く同様である。図21は「音源処理1’’」の一例を示
すフローチャートである。最初のステップS201で
は、MIDIメッセージの入力時刻を示す時間軸上での
現在の時刻GTから、その時間軸上でのMIDIメッセ
ージの入力時刻のうち当該MIDIメッセージに基づく
楽音生成処理が終了しているものの最終の入力時刻ST
を減じた時間を、遅れ量OR(未生成の楽音データの量
を時間の長さで表わしたもの)として設定する。続くス
テップS202では、生成量SRを、遅れ量ORの関数
として決定する。
【0097】図22は、この関数の特性の一例を示す図
である。この例では、遅れ量ORが一定未満である場合
には、生成量SRは10ミリ秒(1出力バッファ分の楽
音データの10分の1に対応した時間)であるが、遅れ
量ORが一定以上になると、遅れ量ORが増加するにつ
れて、生成量SRが連続的に増加していく。そして、生
成量SRが、楽音生成処理に要する時間があまり長くな
らないような範囲内の一定の上限値SRmaxに達する
と、遅れ量ORがそれ以上増加しても、生成量SRは上
限値SRmaxを維持する。上限値SRmaxは、例え
ば20ミリ秒であってもよく、あるいはそれ以外の値で
あってもよい。
【0098】図23は、この関数の特性の別の一例を示
す図である。この例では、遅れ量ORが一定未満である
場合には、生成量SRは10ミリ秒であるが、遅れ量O
Rが一定以上になると、遅れ量ORが増加するにつれ
て、生成量SRが不連続に増加していく。そして、生成
量SRが、楽音生成処理に要する時間があまり長くなら
ないような範囲内の一定の上限値SRmaxに達する
と、遅れ量ORがそれ以上増加しても、生成量SRは上
限値SRmaxを維持する。
【0099】尚、このようにして決定される生成量SR
は、10ミリ秒を単位としてその整数倍の値のみをとる
のではなく、該単位に対する端数を持った値をとりう
る。したがって、一度の「音源処理1’’」で生成され
る楽音データの量は、図5や図6に示したように1出力
バッファ分の楽音データの10分の1の量の整数倍にな
るとは限らず、該単位に対する端数を持った量になるこ
とがありうる。図24は、この変更例において生成され
る楽音データの量の一例を内部割込み信号の発生との関
係で示す図である。同図では、或るフレームにおいて内
部割込み信号が発生した1回目の機会(図の0ミリ秒
目)に、当該フレームにおける1出力バッファ分の楽音
データの10分の1の量の楽音データを生成している。
そして、内部割込み信号が発生しなかった2,3回目の
機会(図の10,20ミリ秒目)の後、内部割込み信号
が発生した4回目の機会(図の30ミリ秒目)に、未生
成の楽音データのうち、1出力バッファ分の楽音データ
の10分の1.6の量の楽音データを生成している(し
たがってこの機会までに通算として当該フレームにおけ
る1出力バッファ分の楽音データの10分の2.6の量
の楽音データを生成したことになり、図ではこのことを
2.6と示している)。
【0100】続いて、内部割込み信号が発生した5回目
の機会(図の40ミリ秒目)に、1出力バッファ分の楽
音データの10分の1.5の量の楽音データを生成し
(したがってこの機会までに通算として1出力バッファ
分の楽音データの10分の4.1の量の楽音データを生
成したことになり、図ではこのことを4.1と示してい
る)、内部割込み信号が発生した6回目の機会(図の5
0ミリ秒目)に、1出力バッファ分の楽音データの10
分の1.4の量の楽音データを生成している(したがっ
てこの機会までに通算として1出力バッファ分の楽音デ
ータの10分の5.5の量の楽音データを生成したこと
になり、図ではこのことを5.5と示している)。そし
て、内部割込み信号が発生しなかった7,8回目の機会
(図の60,70ミリ秒目)の後、内部割込み信号が発
生した9回目の機会(図の80ミリ秒目)に、1出力バ
ッファ分の楽音データの10分の1.7の量の楽音デー
タを生成している(したがってこの機会までに通算とし
て1出力バッファ分の楽音データの10分の7.2の量
の楽音データを生成したことになり、図ではこのことを
7.2と示している)。続いて、内部割込み信号が発生
した10回目の機会(図の90ミリ秒目)に、1出力バ
ッファ分の楽音データの10分の1.6の量の楽音デー
タを生成している(したがって1フレーム内に通算とし
て当該フレームにおける1出力バッファ分の楽音データ
の10分の8.8の量の楽音データを生成したことにな
り、図ではこのことを8.8と示している)。
【0101】そして次のフレームにおいて、内部割込み
信号が発生した1回目の機会(図の100ミリ秒目)
に、直前のフレームにおける残りの未生成の楽音データ
である1出力バッファ分の楽音データの10分の1.2
の量の楽音データと、今回のフレームにおける1出力バ
ッファ分の楽音データの10分の0.3の量の楽音デー
タとを生成している(図ではこのことを10.3と示し
ている)。続いて、内部割込み信号が発生した2回目の
機会(図の110ミリ秒目)に、今回のフレームにおけ
る1出力バッファ分の楽音データの10分の1.4の量
の楽音データを生成し(したがってこの機会までに通算
として今回のフレームにおける1出力バッファ分の楽音
データの10分の1.7の量の楽音データを生成したこ
とになり、図ではこのことを1.7と示している)、以
下同様にして、内部割込み信号が発生した機会毎に、上
限値SRmaxの範囲内の楽音データを生成していく。
【0102】ステップS202に続くステップS203
では、「初期設定」で再生予約した出力バッファ以外の
残りの出力バッファのうちの1つの出力バッファ上に、
時刻STを先頭とした生成量SR分の楽音生成領域を設
定する。続くステップS204では、生成量SRの楽音
データを生成する発音チャンネル数を決定する。この発
音チャンネル数は、一例として、遅れ量ORの関数とし
て決定するようにしてよい。図25は、この関数の特性
の一例を示す図である。この例では、遅れ量ORが一定
未満である場合には、ノートオンイベント処理(図1
0)で発音割当てを行なった発音チャンネル数CHma
xが、そのまま楽音データを生成する発音チャンネル数
となるが、遅れ量ORが一定以上になると、遅れ量OR
が増加するにつれて、楽音データを生成する発音チャン
ネル数がCHmaxよりも減少していく。このように、
遅れ量ORが一定以上である場合には、発音チャンネル
数が減少することにより、楽音生成処理に要する時間が
短縮されるようになる。また別の例として、この発音チ
ャンネル数を、図12のステップS53におけると同様
にして決定するようにしてもよい。
【0103】ステップS204に続くステップS205
乃至S214では、図12のステップS53乃至S63
と同じ処理を行なう。続くステップS215では、今回
ノートオフのあった発音チャンネルについての音量エン
ベロープの大きさを、徐々にゼロに向けて下げる。続く
ステップS216乃至S217では、図12のステップ
S64乃至S65と同じ処理を行なう。そしてリターン
する。
【0104】以上に示したように、このコンピュータミ
ュージックシステムでは、完全なマルチタスク機能を有
しないOS上で処理を実行させた場合でも、他の処理の
影響による「音源部」の起動の遅れを原因として発音に
支障が生じる事態が防止されている。
【0105】尚、以上の実施の形態では、〔対策1〕に
おいて、通算として1フレーム内に所定サンプル数の楽
音データを生成するようにしている。しかし、ここで
「通算として」というのは、必ずしも1つのフレーム内
で該所定サンプル数の楽音データの生成が完了すること
を要求するものではない。特に、これらの実施の形態で
は、図7に示すように、楽音データを書き込んだ出力バ
ッファを複数再生予約できるようになっているので、1
つのフレーム内で楽音データの生成演算が完了しなくて
も、その後のフレームでその分を補う演算を行なうこと
が可能である。図6を例にとってこのことを説明すれ
ば、図6では、内部割込み信号の発生しなかった機会で
の未生成の楽音データを、1つのフレーム内の最後の機
会までに間に合うように生成するようにしているが、該
最後の機会までに生成できなくても、その次のフレーム
にその生成を持ち越すようにしてよい(例えば、未生成
の4回分の楽音データを図6のように10回目の機会
(100ミリ秒目)で全て生成するかわりに、10回目
の機会で7,8回目の2回分の楽音データだけを生成
し、それ以降のフレームで内部割込み信号が発生した機
会で、残りの9,10回目の2回分の楽音データを生成
するようにしてよい)。尚、〔変更例1〕及び〔変更例
2〕においては、図24に例示しているように、或るフ
レームにおける未生成の楽音データの生成を、その次の
フレームに持ち越すことがありうる。
【0106】また、以上の実施の形態では、ノートオン
イベント処理やノートオフイベント処理といったMID
I処理において、「音源部」制御用の制御パラメータ,
ノートオン及びイベントの発生時刻を示すデータを、各
発音チャンネル毎に設けた音源レジスタに格納してい
る。しかし、このようにこれら制御パラメータ等を各発
音チャンネル毎に別の音源レジスタに格納するかわり
に、1つの記憶エリアに、制御パラメータ等を発音チャ
ンネルのチャンネル番号を示すデータと組にして順次書
き込むようにしてもよい。その場合には、MIDIメッ
セージの供給に基づいて、一旦シーケンスデータを作成
し、このシーケンスデータに基づいて楽音データの生成
を行なうことになる。
【0107】また、以上の実施の形態では、「音源処理
2」において、「出力デバイス」から返却された出力バ
ッファを、「音源部」が既に保有している出力バッファ
の後に連結しており、したがって「音源処理1」におい
ては、このように連結された出力バッファに、1出力バ
ッファ分ずつ楽音データを生成している。しかし、この
ように出力バッファを連結するかわりに、個々の出力バ
ッファを単位として楽音データを生成するようにしても
よい。
【0108】また、以上の実施の形態では、「音源部」
の起動に先行して、4つの出力バッファの再生を「出力
デバイス」に予約している。しかし、「音源部」の起動
に先行して「出力デバイス」に再生予約する出力バッフ
ァの数は、もちろん4以外であってよい。また、また、
RAM5内に設ける出力バッファの数も、「音源部」の
起動に先行して「出力デバイス」に再生予約する出力バ
ッファの数よりも1以上多い適宜の数であってよい。
【0109】また、以上の実施の形態では、〔対策
1〕,〔対策2〕,〔対策3〕及び〔対策4〕を全て実
施している。しかし、これらの対策は、それぞれ相互に
独立して実施しても、「音源部」の起動の遅れを原因と
して発音に支障が生じる事態を防止できるものである。
したがって、これらの対策のうちのいずれか1つのみを
実施したり、2つまたは3つを適宜組み合わせて実施し
たりしてもよい。
【0110】また、以上の実施の形態では、波形メモリ
方式の楽音生成処理をCPUに実行させるソフト音源に
この発明を適用しているが、他の適宜の楽音生成方式
(例えばFM合成方式等)をCPUに実行させるソフト
音源にこの発明を適用してもよい。また、以上の実施の
形態では、パーソナルコンピュータのCPUに楽音生成
処理を実行させるソフト音源にこの発明を適用している
が、専用の楽音発生装置に搭載されたCPUに楽音生成
処理を実行させるソフト音源にこの発明を適用してもよ
い。
【0111】
【発明の効果】以上のように、この発明の第1の観点に
従う楽音生成装置及び楽音生成方法によれば、不定期な
各起動毎に、当該起動に対応して生成すべき楽音データ
のサンプル数を可変指示することで、その都度の状況に
応じた必要な(可変)サンプル数分の楽音データの生成
を可能とし、CPUに負担をかけないようにすることが
できると共に、発音に支障が生じる事態もできるだけ起
こらないようにすることができる。
【0112】また、この発明の第2の観点に従う楽音生
成装置及び楽音生成方法によれば、起動の遅れにより楽
音データの再生出力の進行に間に合うように楽音データ
を生成することができなくなった場合、現在実行中の楽
音生成処理を一旦リセットし、それより後の楽音データ
を生成するよう楽音生成処理を再開させるようにしたの
で、一時的に楽音が乱れた場合でも、すぐに安定した楽
音生成動作に復帰するので、ノイズを最小限に抑え、演
奏音に重大な乱れが生じないようにすることができる。
【0113】更に、この発明の第3の観点に従う楽音生
成装置及び楽音生成方法によれば、CPUに負担をかけ
ないようにすることができると共に、発音に支障が生じ
る事態もできるだけ起こらないようにすることができる
という効果を奏すると共に、そのことをできるだけ最適
に実現することができる。すなわち、音切れを生じさせ
ないための楽音生成処理の起動時間の遅れの許容範囲内
で、楽音生成処理が起動した機会だけで楽音データの生
成が完了するよう最適制御することができる。このよう
に、これらの発明は、それぞれ、楽音生成処理の起動の
遅れを原因として発音に支障が生じる事態を防止するこ
とができるという優れた効果を奏する。
【図面の簡単な説明】
【図1】この発明を採用したコンピュータミュージック
システムの全体構成ブロック図
【図2】ソフト音源を実現するためのソフトウェアの構
造の一例を示す図
【図3】図2の「SGM−AP」の構成の一例を示す図
【図4】図2のソフトウェアによる処理の一例を示す図
【図5】この発明に係る〔対策1〕の実施の一例を示す
【図6】この発明に係る〔対策1〕の実施の別の一例を
示す図
【図7】この発明に係る〔対策3〕の実施の一例を示す
【図8】CPUの実行するメインルーチンの一例を示す
フローチャート
【図9】CPUの実行する初期設定の一例を示すフロー
チャート
【図10】CPUの実行するノートオンイベント処理の
一例を示すフローチャート
【図11】CPUの実行するノートオフイベント処理の
一例を示すフローチャート
【図12】CPUの実行する音源処理1の一例を示すフ
ローチャート
【図13】DMAコントローラの実行する割込み処理の
一例を示すフローチャート
【図14】DMAコントローラからの返却要求に基づい
てCPUの実行する音源処理2の一例を示すフローチャ
ート
【図15】DMAコントローラからのリセット要求に基
づいてCPUの実行する音源処理2の一例を示すフロー
チャート
【図16】CPUの実行するメインルーチンの一例を示
すフローチャート
【図17】CPUの実行するキュー処理の一例を示すフ
ローチャート
【図18】CPUの実行する音源処理1’の一例を示す
フローチャート
【図19】CPUの実行する音源処理1’の別の一例を
示すフローチャート
【図20】DMAコントローラからのリセット要求に基
づいてCPUの実行する音源処理2の別の一例を示すフ
ローチャート
【図21】CPUの実行する音源処理1’’の一例を示
すフローチャート
【図22】生成量SRを遅れ量ORの関数として決定す
る際の関数の特性の一例を示す図
【図23】生成量SRを遅れ量ORの関数として決定す
る際の関数の特性の別の一例を示す図
【図24】内部割込み信号の発生と楽音データの生成量
との関係の一例を示す図
【図25】発音チャンネル数を遅れ量ORの関数として
決定する際の関数の特性の一例を示す図
【符号の説明】
1 MIDI 2 タイマ 3 CPU 4 ROM 5 RAM 6 データ及びアドレスバス 7 マウス 8 キーボード 9 ディスプレイ 10 ハードディスク装置 11 DMAコントローラ 12 DAC 13 サウンドシステム

Claims (12)

    (57)【特許請求の範囲】
  1. 【請求項1】 演奏情報を供給する供給手段と、 前記演奏情報に基づく楽音生成処理を起動させるための
    ものであって、他の処理の影響により該楽音生成処理を
    不定期で起動させ起動手段と、 前記起動手段によって起動された楽音生成処理を実行す
    る楽音生成手段と、 前記起動手段による1回の起動で前記楽音生成手段が生
    成すべき楽音データのサンプル数を、それまで未生成の
    楽音データの量に応じて可変指示する指示手段とを具
    え、各起動毎に可変指示されたサンプル数の楽音データ
    を前記楽音生成手段で生成するようにした楽音生成装
    置。
  2. 【請求項2】 供給された演奏情報に基づき汎用の演算
    処理装置で楽音生成処理を実行させる楽音生成方法であ
    って、 供給された演奏情報に基づく楽音生成処理を起動させる
    ためのものであって、他の処理の影響により該楽音生成
    処理を不定期で起動させる第1のステップと、 前記第1のステップによる1回の起動に対応して前記楽
    音生成処理によって生成すべき楽音データのサンプル数
    、それまで未生成の楽音データの量に応じて可変指示
    する第2のステップと、 前記第1のステップで起動された楽音生成処理を実行
    し、前記第2のステップで指示されたサンプル数の楽音
    データを生成する第3のステップとを具えた楽音生成方
    法。
  3. 【請求項3】 演奏情報を供給する供給手段と、 前記演奏情報に基づく楽音生成処理を起動させるための
    ものであって、他の処理の影響により該楽音生成処理を
    不定期で起動させ起動手段と、 前記起動手段によって起動された楽音生成処理を実行す
    る楽音生成手段と、 前記起動手段による1回の起動で前記楽音生成手段が生
    成すべき楽音データのサンプル数を、それまで未生成の
    楽音データの量に応じて可変指示し、該指示したサンプ
    ル数の楽音データが前記楽音生成手段で生成されるよう
    にする指示手段と、 前記楽音生成手段で生成した前記楽音データをバッファ
    し、所定量の楽音デー タがバッファされたとき再生予約
    がなされるバッファ手段と、 前記バッファ手段にバッファされた再生予約済みの楽音
    データを順次再生出力する再生手段と、 前記再生手段による楽音データの再生出力が完了したと
    きに前記楽音生成手段で生成した楽音データの前記バッ
    ファ手段への再生予約がまだなされていない場合、該楽
    音生成手段において実行中の楽音生成処理を一旦リセッ
    トし、それより後の楽音データを生成するよう該楽音生
    成手段における楽音生成処理を再開させる制御手段とを
    具えた楽音生成装置。
  4. 【請求項4】 供給された演奏情報に基づき汎用の演算
    処理装置で楽音生成処理を実行させる楽音生成方法であ
    って、 供給された演奏情報に基づく楽音生成処理を起動させる
    ためのものであって、他の処理の影響により該楽音生成
    処理を不定期で起動させる第1のステップと、 前記第1のステップによる1回の起動に対応して前記楽
    音生成処理によって生成すべき楽音データのサンプル数
    、それまで未生成の楽音データの量に応じて可変指示
    する第2のステップと、 前記第1のステップで起動された楽音生成処理を実行す
    ることで前記第2のステップで指示されたサンプル数の
    楽音データを生成し、生成した楽音データを出力バッフ
    ァにバッファさせて再生予約する第3のステップと、 前記出力バッファにバッファされた再生予約済みの楽音
    データを順次再生出力する第4のステップと、 前記第4のステップによる楽音データの再生出力が完了
    したときに前記第3のステップによる前記出力バッファ
    にバッファした楽音データの再生予約がまだなされてい
    ない場合、該第3のステップにおいて実行中の楽音生成
    処理を一旦リセットし、それより後の楽音データを生成
    するよう該第3のステップにおける楽音生成処理を再開
    させる第5のステップとを具えた楽音生成方法。
  5. 【請求項5】 演奏情報を供給する供給手段と、 前記演奏情報に基づく楽音生成処理を起動させるための
    ものであって、他の処 理の影響により該楽音生成処理を
    不定期で起動させ起動手段と、 前記起動手段によって起動された楽音生成処理を実行す
    る楽音生成手段と、 前記起動手段が前記楽音生成処理を起動した場合、該起
    動の時刻に対応したサンプル数を目標値として、該楽音
    生成処理で生成する楽音データのサンプル数が該目標値
    に追従するように制御する制御手段とを具えた楽音生成
    装置。
  6. 【請求項6】 供給された演奏情報に基づき汎用の演算
    処理装置で楽音生成処理を実行させる楽音生成方法であ
    って、 供給された演奏情報に基づく楽音生成処理を起動させる
    ためのものであって、他の処理の影響により該楽音生成
    処理を不定期で起動させる第1のステップと、 前記第1のステップで楽音生成処理を起動した場合、該
    起動の時刻に対応したサンプル数を目標値として、該楽
    音生成処理で生成する楽音データのサンプル数が該目標
    値に追従するように制御する第2のステップと、 前記第1のステップで起動された楽音生成処理を、前記
    第2のステップでの制御に従って実行する第3のステッ
    プとを具えた楽音生成方法。
  7. 【請求項7】 演奏情報を供給する供給手段と、 前記演奏情報に基づく楽音生成処理断続的に起動させ
    るためのものであって、他の処理の影響により該楽音生
    成処理を不定期で断続的に起動させる起動手段と、 前記起動手段による1回の起動に応じて複数サンプルの
    楽音データを生成する楽音生成手段と、 前記楽音生成手段で生成した前記楽音データをバッファ
    し、所定量の楽音データがバッファされたとき再生予約
    がなされるバッファ手段と、 前記バッファ手段にバッファされた再生予約済みの楽音
    データを順次再生出力する再生手段と、 前記再生手段による楽音データの再生出力が完了したと
    きに前記楽音生成手段で生成した楽音データの前記バッ
    ファ手段への再生予約がまだなされていない場合、該楽
    音生成手段において実行中の楽音生成処理を一旦リセッ
    トし、それより後の楽音データを生成するよう該楽音生
    成手段における楽音生成処理を再開させる制御手段とを
    具えた楽音生成装置。
  8. 【請求項8】 供給された演奏情報に基づき汎用の演算
    処理装置で楽音生成処理を実行させる楽音生成方法であ
    って、 供給された演奏情報に基づく楽音生成処理断続的に起
    動させるためのものであって、他の処理の影響により該
    楽音生成処理を不定期で断続的に起動させる第1のステ
    ップと、 前記第1のステップによる起動に応じて楽音生成処理を
    実行することで1回の起動につき複数サンプルの楽音デ
    ータを生成し、生成した楽音データを出力バッファにバ
    ッファさせて再生予約する第2のステップと、 前記出力バッファにバッファされた再生予約済みの楽音
    データを順次再生出力する第3のステップと、 前記第3のステップによる楽音データの再生出力が完了
    したときに前記第2のステップによる前記出力バッファ
    にバッファした楽音データの再生予約がまだなされてい
    ない場合、該第2のステップにおいて実行中の楽音生成
    処理を一旦リセットし、それより後の楽音データを生成
    するよう該第2のステップにおける楽音生成処理を再開
    させる第4のステップとを具えた楽音生成方法。
  9. 【請求項9】 前記制御手段によってリセットがなされ
    たとき、前記再生手段の再生出力に基づく楽音信号の音
    量を一時的に減少させる消音制御手段を更に具えた請求
    項7に記載の楽音生成装置。
  10. 【請求項10】 前記第4のステップによってリセット
    がなされたとき、前記再生出力に基づく楽音信号の音量
    を一時的に減少させることを制御する第5のステップを
    更に具えた請求項8に記載の楽音生成方法。
  11. 【請求項11】 演奏情報を供給する供給手段と、 前記演奏情報に基づく楽音生成処理を起動させるための
    ものであって、他の処理の影響により該楽音生成処理を
    不定期で起動させ起動手段と、 前記起動手段によって起動された楽音生成処理を実行す
    る楽音生成手段と、 前記起動手段が前記楽音生成処理を起動したとき、現在
    の時刻と生成の完了している最終サンプルの時刻との差
    に応じて、当該起動に対応して該楽音生成処理で生成
    すべき楽音データのサンプル数を決定する決定手段とを
    具え、当該起動に対応して決定されたサンプル数の楽音
    データを前記楽音生成手段で生成するようにした楽音生
    成装置。
  12. 【請求項12】 供給された演奏情報に基づき汎用の演
    算処理装置で楽音生成処理を実行させる楽音生成方法で
    あって、 供給された演奏情報に基づく楽音生成処理を起動させる
    ためのものであって、他の処理の影響により該楽音生成
    処理を不定期で起動させる第1のステップと、 前記第1のステップによる楽音生成処理の起動に応じ
    て、現在の時刻と生成の完了している最終サンプルの時
    刻との差分に応じて、当該起動に対応して該楽音生成処
    理で生成すべき楽音データのサンプル数を決定する第2
    のステップと、 前記第1のステップで起動された楽音生成処理を実行
    し、前記第2のステップで決定されたサンプル数の楽音
    データを生成する第3のステップとを具えた楽音生成方
    法。
JP11125137A 1995-11-22 1999-04-30 楽音生成装置及び方法 Expired - Fee Related JP3139490B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11125137A JP3139490B2 (ja) 1995-11-22 1999-04-30 楽音生成装置及び方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP7-328428 1995-11-22
JP32842895 1995-11-22
JP11125137A JP3139490B2 (ja) 1995-11-22 1999-04-30 楽音生成装置及び方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP8024747A Division JP2962217B2 (ja) 1995-11-22 1996-01-17 楽音生成装置及び方法

Publications (2)

Publication Number Publication Date
JPH11338469A JPH11338469A (ja) 1999-12-10
JP3139490B2 true JP3139490B2 (ja) 2001-02-26

Family

ID=26461655

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11125137A Expired - Fee Related JP3139490B2 (ja) 1995-11-22 1999-04-30 楽音生成装置及び方法

Country Status (1)

Country Link
JP (1) JP3139490B2 (ja)

Also Published As

Publication number Publication date
JPH11338469A (ja) 1999-12-10

Similar Documents

Publication Publication Date Title
US5895877A (en) Tone generating method and device
JPH0997064A (ja) 自動演奏データ処理装置
JP2962217B2 (ja) 楽音生成装置及び方法
JPH09179556A (ja) 楽音生成方法および装置
JP2970526B2 (ja) コンピュータソフトウェアを用いた音源システム
WO2001065536A1 (fr) Generateur de sons musicaux
JPH09325778A (ja) 楽音発生方法
JP3139490B2 (ja) 楽音生成装置及び方法
JP3221314B2 (ja) 楽音合成装置及び方法
JP3572847B2 (ja) コンピュータソフトウェアを用いた音源システム及び方法
US11042380B2 (en) Apparatus, method and computer program for processing instruction
JP3003559B2 (ja) 楽音生成方法
JP3632744B2 (ja) 音生成方法
JP2936872B2 (ja) 楽音制御装置
JPH11126069A (ja) 楽音生成方法
JP4063286B2 (ja) 音源装置
JP3036417B2 (ja) 信号処理装置
JP3740717B2 (ja) 音源装置及び楽音生成方法
JP4477159B2 (ja) カラオケ装置
TW316966B (ja)
JPH10207465A (ja) 楽音発生方法および楽音発生装置
JP3627590B2 (ja) 音生成方法
US6826435B1 (en) Tone data processing device and method
TW312776B (ja)
JP2000293173A (ja) 楽音発生装置及び楽音発生処理プログラムを記録した記録媒体

Legal Events

Date Code Title Description
S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313532

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081215

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081215

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091215

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101215

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101215

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111215

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111215

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121215

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131215

Year of fee payment: 13

LAPS Cancellation because of no payment of annual fees