JP2004246145A - Musical sound generating device and program for processing musical sound generation - Google Patents

Musical sound generating device and program for processing musical sound generation Download PDF

Info

Publication number
JP2004246145A
JP2004246145A JP2003036679A JP2003036679A JP2004246145A JP 2004246145 A JP2004246145 A JP 2004246145A JP 2003036679 A JP2003036679 A JP 2003036679A JP 2003036679 A JP2003036679 A JP 2003036679A JP 2004246145 A JP2004246145 A JP 2004246145A
Authority
JP
Japan
Prior art keywords
task
tasks
waveform
address
tone
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.)
Granted
Application number
JP2003036679A
Other languages
Japanese (ja)
Other versions
JP4096751B2 (en
Inventor
Takeshi Terao
健 寺尾
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.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
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 Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP2003036679A priority Critical patent/JP4096751B2/en
Publication of JP2004246145A publication Critical patent/JP2004246145A/en
Application granted granted Critical
Publication of JP4096751B2 publication Critical patent/JP4096751B2/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

<P>PROBLEM TO BE SOLVED: To provide a musical sound generating device which generates sound of high quality while avoiding generation of noise and outputting old musical sound waveform data even when reducing the capacity of a storage means of a ring buffer or the like to be arranged in the pre-stage of a digital-analog converter. <P>SOLUTION: When repeatedly executing a waveform generation task (0) and a task (1) through a task (N) for processing of generating musical sound waveform data in each task unit, a CPU 1 executes the waveform generation task (0) with priority to the other task (1) through task (N) in a ring buffer of a RAM 4 when an address difference from a read address AR to a write address AW is within a predetermined range. <P>COPYRIGHT: (C)2004,JPO&NCIPI

Description

【0001】
【発明の属する技術分野】
本発明は、楽音発生装置及び楽音発生処理のプログラムに関する。
【0002】
【従来の技術】
従来の楽音発生装置の中には、ハードウェアによって楽音を生成するハードウェア音源の代わりに、コンピュータのオペレーションシステム(OS)上で動作するソフトウェアによって楽音を生成するソフトウェア音源を用いたものがある。ソフトウェア音源は、楽音発生処理を実行するアプリケーションプログラム(以下、「楽音発生処理のプログラム」という)をコンピュータのハードディスク等にインストールして、CPU等の演算処理装置がその楽音発生処理のプログラムを実行することにより、鍵盤演奏による押鍵情報、シーケンス情報、又はMIDI情報等からなる楽音イベントのデータが入力された場合に、その楽音イベントに応じて簡単に楽音を発生できるので、ハードウェア音源よりも安価に楽音発生装置を実現できるという利点がある。
【0003】
従来の具体的な楽音発生装置における楽音発生方法は、(1)アプリケーションプログラムから演奏情報が出力されたときに発生する第1の割込(ソフトウェア割込)に応じて起動され、その演奏情報に対応した発音制御情報を生成する第1のステップ、(2)バッファに記憶されている波形サンプル数の減少を検出したときに発生される第2の割込(ハードウェア割込)により起動され、(第1のステップによって生成された)発音制御情報に基づいて複数の波形サンプルを一括して生成し、その生成された波形サンプルをバッファに記憶する第2のステップ、及び、(3)バッファに記憶された波形サンプルを各サンプリング周期毎に1サンプルずつ読み出してデジタルアナログ変換器に順次出力する第3のステップを含む構成になっている。また、第1のステップ及び第2のステップは、所定のオペレーティングシステムにおける仮想デバイスドライバであり、さらに、第2の割込は、デジタルアナログ変換器に送出された波形サンプル数が所定数に達したことを検出したときに発生される構成になっている。
【0004】
すなわち、楽音情報処理や波形生成処理等からなる上記第1〜第3のステップを含むような楽音発生処理のプログラムをコンピュータのCPUが実行する構成になっている。ところが、楽音発生処理のプログラムを実行するためにCPUの動作を占有することはできない。したがって、CPUが楽音発生処理のプログラムを実行するために割り当てられた期間内に、まとめて楽音情報処理や波形生成処理を行うために、一定レートのデータストリームが必要なデジタルアナログ変換器の前段に、リングバッファやダブルバッファ等からなる記憶手段であるFIFO(先入れ先出し)バッファが配置されている(例えば、特許文献1参照)。
【0005】
【特許文献1】
特許第2904088号公報(段落番号「0011」「0012」、図4〜図7)
【0006】
【発明が解決しようとする課題】
しかしながら、上記従来の楽音発生装置、及びその装置において実行される楽音発生処理のプログラムによる楽音発生方法においては、FIFOバッファの容量が大きいと、コストアップの要因になるばかりでなく、楽音イベントのデータがコンピュータに入力されてから、その楽音イベントに対する楽音波形が生成されて出力されるまでに時間がかかり過ぎて、入力される楽音イベントに対する楽音の出力応答が遅くなることになる。このため、鍵盤演奏等のように、リアルタイムで楽音イベントが入力される場合には、演奏よりも遅れて楽音が発生されるので、演奏者ばかりでなく演奏を聴いている人にも違和感を与えてしまう。
【0007】
一方、出力応答を速くするためにFIFOバッファの容量を小さくした場合には、CPUによる楽音波形生成の演算負荷が大きくなったときに、FIFOバッファへの書込処理が遅くなり、FIFOバッファが空(新しい楽音波形のデータが書き込まれない状態)になって、読み出すべき楽音波形データがなくなる状態、すなわちバッファ・アンダー・フローの状態が発生してしまう。この場合には、ノイズを発生したり、以前に読み出した古い楽音波形データを出力することになるので、発生する楽音の音質が著しく劣化してしまう。
【0008】
例えば、上記特許文献1においては、段落番号「0056」、「0057」及び図7の(b)に記載されているように、MIDI演奏入力に対応する波形生成演算が所定時間である1フレーム内に終了しない場合がある。例えば、マルチメディアソフト等のリアルタイム性を要求される処理を並行して実行している場合には、そのためにCPUパワーが割かれてソフトウェア音源を実行するための時間が割り当てられないことがある。この場合には、演算の終了しなかったフレーム時間については、波形生成をキャンセルしてDMA処理(再生処理)を中断することになる。
【0009】
また、この再生中断は、段落番号「0058」及び図8の(a)、並びに、「0059」及び図8の(b)に記載された第1及び第2の変形例においても解消されていない。第1の変形例においては、1フレームの再生が終了するタイミングよりもTj時間だけハードウェア割込を早くしているが、波形生成演算が1フレーム内に終了しない場合には、波形生成をキャンセルして再生処理を中断することは避けられない。また、第2の変形例においては、ソフトウェア割込の優先順位をハードウェア割込よりも高い優先順位にしているが、その分だけ波形生成演算が遅れてしまうので、この場合も波形生成をキャンセルして再生処理を中断することは避けられない。したがって、従来の楽音発生装置においては、このような再生中断に起因するノイズの発生や以前に読み出した古い楽音波形データを出力することを回避することは困難であった。
【0010】
本発明の課題は、デジタルアナログ変換器の前段に配置する記憶手段であるバッファの容量を小さくした場合でも、ノイズの発生や古い楽音波形データを出力することを回避して、高い音質の楽音を発生するような楽音発生装置及び楽音発生処理のプログラムを提供することである。
【0011】
【課題を解決するための手段】
請求項1に記載の楽音発生装置は、楽音波形データを生成する処理を行なう波形生成タスク(実施形態においては、図2のタスク(0)に相当する)および他のタスク(実施形態においては、図2のタスク(1)ないしタスク(N)に相当する)からなる所定数のタスクを各タスク単位で繰り返し実行する際に予め規定された制限時間(実施形態においては、図3ないし図5における所定値に相当する)内に実行可能な数のタスクを実行するタスク実行手段(実施形態においては、CPU1によって実行される図3ないし図5のタスク処理ルーチンに相当する)と、波形生成タスクによって生成された楽音波形データを書込アドレスで指定される記憶手段(実施形態においては、図11のリングバッファに相当する)のエリアに書き込む波形書込手段(実施形態においては、CPU1によって実行される図8の生成処理に相当する)と、読出アドレスで指定される記憶手段のエリアから楽音波形データを読み出す波形読出手段(実施形態においては、CPU1によって実行される図9の出力処理に相当する)と、読出アドレスから書込アドレスまでのアドレス差が所定範囲(実施形態においては、M2からM3までの範囲に相当する)より小さい場合には制限時間内において波形生成タスクを他のタスクよりも優先的に実行する指令(実施形態においては、図10のステップF8に相当する)をタスク実行手段に与える指令発生手段(実施形態においては、CPU1によって実行される図10のバッファチェック処理に相当する)とを備えた構成になっている。
【0012】
この場合において、請求項2に記載したように、指令発生手段は、アドレス差が所定範囲より大きい場合には他のタスクを波形生成タスクよりも優先的に実行する指令(実施形態においては、図10のステップF7に相当する)をタスク実行手段に与えるような構成にしてもよい。
【0013】
また、請求項3に記載したように、指令発生手段は、アドレス差が所定範囲内である場合には波形生成タスクと他のタスクとを優劣なく平等に実行する指令(実施形態においては、図10のステップF6に相当する)をタスク実行手段に与えるような構成にしてもよい。
【0014】
また、請求項4に記載したように、指令発生手段は、優先的に実行するタスクの優先度を高く設定する指令(実施形態においては、図10のステップF6、F7、およびF8に相当する)をタスク実行手段に与えるような構成にしてもよい。
【0015】
また、請求項5に記載したように、指令発生手段は、優先的に実行するタスク以外のタスクの優先度を低く設定する指令(実施形態の変形例に相当する)をタスク実行手段に与えるような構成にしてもよい。
【0016】
請求項6に記載の楽音発生処理のプログラムは、楽音波形データを生成する処理を行なう波形生成タスク(実施形態においては、図2のタスク(0)に相当する)および他のタスク(実施形態においては、図2のタスク(1)ないしタスク(N)に相当する)からなる所定数のタスクを各タスク単位で繰り返し実行する際に予め規定された制限時間(実施形態においては、図3ないし図5における所定値に相当する)内に実行可能な数のタスクを実行するコンピュータ(実施形態においては、図1のCPU1に相当する)を用いて楽音を発生する楽音発生装置のプログラム(外部記憶媒体又は通信網からハードディスクなどのメモリににインストールされて、実行されるプログラムに相当する)であって、
波形生成タスクによって生成された楽音波形データを書込アドレスで指定される記憶手段(実施形態においては、図1のRAM4のリングバッファに相当する)のエリアに書き込む第1のステップと、読出アドレスで指定される記憶手段のエリアから楽音波形データを読み出す第2のステップと、読出アドレスから書込アドレスまでのアドレス差が所定範囲(実施形態においては、M2からM3までの範囲に相当する)より小さい場合には制限時間内において波形生成タスクを他のタスクよりも優先的に実行するようにコンピュータに指令する第3のステップとを実行する構成になっている。
【0017】
【発明の実施の形態】
以下、本発明による楽音発生装置の実施形態について、図を参照して説明する。
図1は、ソフトウェア音源の機能を具備した楽音発生装置の構成を示すブロック図である。この図において、CPU1は、システムバス2を介してROM3、RAM4、操作部5、表示部6、CODEC7に接続され、これら各部との間においてデータやコマンドを授受してこの装置全体を制御する。CPU1はまた、外部の鍵盤装置やシーケンサ等から入力される楽音イベントのデータ(以下、「イベントデータ」という)であるMIDIデータを処理する。
【0018】
ROM3は、楽音発生処理のプログラムや初期データ等を記憶している。RAM4は、半導体メモリやハードディスク等の記憶手段で構成れたCPU1のワークエリアであり、楽音発生処理のプログラムその他のアプリケーションソフトを起動するためのオペレーションシステム(OS)のソフトウェアを記憶している。また、RAM4には、楽音発生処理のプログラムの実行に必要な各種のレジスタ、フラグ、ポインタのエリア、及び、楽音波形データを一時的にストアするFIFOバッファとしてのリングバッファのエリア、及び、ソフトウェア音源で楽音波形データを生成するための波形テーブルが設けられている。
【0019】
操作部5は、キーボードやマウス等のポインティングデバイスで構成され、操作に応じてデータやコマンドをCPU1に入力する。表示部6は、楽音発生処理に関連する各種の情報やこの装置の状態を示すその他の情報を表示する。CODEC7は、デジタルアナログ変換器、DMAC(ダイレクト・メモリ・アクセス・コントローラ)、サンプリングパルス発生器等(図示せず)で構成され、デジタルの楽音波形データをアナログの楽音信号に変換して、外部のサウンドシステムに出力する。
【0020】
図2は、楽音発生処理のプログラムを実行するのために、RAM4に設定されるタスク群および各タスクに対する優先度を設定するプライオリティ(PRIORITY)データ群を示す図である。この図に示すように、タスク群には、楽音波形データを生成する波形生成タスク(0)、および、その他のタスクであるタスク(1)ないしタスク(N)からなる複数のタスクで構成されている。また、プライオリティデータ群は、各タスク(0)ないしタスク(N)にたいする優先度であるプライオリティ(0)ないしプライオリティ(N)で構成されている。プライオリティデータ群に設定される優先度には、高い優先度を表す「High」、各タスクに優先度がない通常の状態を表す「Normal」、低い優先度を表す「Low」がある。
【0021】
その他のタスクとしては、例えば、操作部5のキーボードからの演奏データや外部からのMIDIデータを入力するデータ入力処理、表示部6に対して文字や図形情報をドット(画素)に分解して1画面のビットマップデータを生成する画像データ生成処理、発生する楽音に対してリバーブなどのエフェクトを付加するエフェクト処理などがある。
【0022】
なお、CPU1がタスク(0)ないしタスク(N)を各タスク単位で連続して実行する際には制限時間があり、CPU1を構成するデバイスの処理速度に応じて、制限時間の所定値が規定されている。タスク処理ルーチンの開始からカウントアップされる時間が所定値に達したときは、次のタスクを実行することはできず、改めてタスク処理ルーチンを開始することになる。
【0023】
次に、この楽音発生装置の動作について、図3〜図10に示すCPU1のフローチャートおよび図11に示すリングバッファにおける書込アドレスと読出アドレスとの関係を示す図に基づいて詳細に説明する。
図3ないし図5は、タスク処理ルーチンのメインフローチャートである。所定のイニシャライズ処理(ステップA1)においては、レジスタやフラグをクリアするとともに、プライオリティ(0)ないしプライオリティ(N)を「Normal」に設定する。次に、レジスタTIMERに「0」をストアしてクリアする(ステップA2)。TIMERのカウント値は、一定時間ごとのタイマインタラプトに応じてカウントアップ(インクリメント)される。
【0024】
次に、タスク群およびプライオリティデータ群を指定するポインタnを「0」にセットして(ステップA3)、nの値をインクリメントしながら、各タスクの優先度を判定する。すなわち、タスク(n)のプライオリティ(n)が「High」であるか否かを判別し(ステップA4)、「High」である場合には、タスク(n)処理を実行する(ステップA5)。そして、TIMERのカウント値が所定値に達したか否かを判別する(ステップA6)。所定値に達していない場合には、nの値をインクリメントして(ステップA7)、次のタスクを指定する。このとき、インクリメントしたnの値が最大タスク数を超えたか否かを判別する(ステップA8)。最大タスク数を超えていない場合には、ステップA4からの処理を繰り返す。
【0025】
ステップA6において、TIMARのカウント値が所定値に達したときは、ステップA2に移行して、TIMARのカウント値を「0」にリセットして、ステップA3以後の処理を繰り返す。すなわち、プライオリティが「High」のタスクをすべて処理する前に、TIMERのカウント値が所定値に達したときは、あらためてタスク処理ルーチンの最初から処理を繰り返す。
【0026】
ステップA8において、nの値が最大タスク数を超えたとき、すなわち、プライオリティが「High」のタスクをすべて処理した後は、図4のフローにおいて、ポインタnを「0」にセットして(ステップA9)、nの値をインクリメントしながら、各タスクの優先度を判定する。すなわち、タスク(n)のプライオリティ(n)が「Normal」であるか否かを判別し(ステップA10)、「Normal」である場合には、タスク(n)処理を実行する(ステップA11)。そして、TIMERのカウント値が所定値に達したか否かを判別する(ステップA12)。所定値に達していない場合には、nの値をインクリメントして(ステップA13)、次のタスクを指定する。このとき、インクリメントしたnの値が最大タスク数を超えたか否かを判別する(ステップA14)。最大タスク数を超えていない場合には、ステップA10からの処理を繰り返す。
【0027】
ステップA12において、TIMARのカウント値が所定値に達したときは、図3のステップA2に移行して、TIMARのカウント値を「0」にリセットして、ステップA3以後の処理を繰り返す。すなわち、プライオリティが「Normal」のタスクをすべて処理する前に、TIMERのカウント値が所定値に達したときは、あらためてタスク処理ルーチンの最初から処理を繰り返す。
【0028】
ステップA14において、nの値が最大タスク数を超えたとき、すなわち、プライオリティが「Normal」のタスクをすべて処理した後は、図5のフローにおいて、ポインタnを「0」にセットして(ステップA15)、nの値をインクリメントしながら、各タスクの優先度を判定する。すなわち、タスク(n)のプライオリティ(n)が「Low」であるか否かを判別し(ステップA16)、「Low」である場合には、タスク(n)処理を実行する(ステップA17)。そして、TIMERのカウント値が所定値に達したか否かを判別する(ステップA18)。所定値に達していない場合には、nの値をインクリメントして(ステップA19)、次のタスクを指定する。このとき、インクリメントしたnの値が最大タスク数を超えたか否かを判別する(ステップA20)。最大タスク数を超えていない場合には、ステップA16からの処理を繰り返す。
【0029】
ステップA18において、TIMARのカウント値が所定値に達したときは、図3のステップA2に移行して、TIMARのカウント値を「0」にリセットして、ステップA3以後の処理を繰り返す。すなわち、プライオリティが「Low」のタスクをすべて処理する前に、TIMERのカウント値が所定値に達したときは、あらためてタスク処理ルーチンの最初から処理を繰り返す。
また、ステップA20において、nの値が最大タスク数を超えたとき、すなわち、プライオリティが「Low」のタスクをすべて処理した後は、図3のステップA2に移行して、TIMARのカウント値を「0」にリセットして、ステップA3以後の処理を繰り返す。
【0030】
図6は、図3におけるステップA5、図4におけるステップA11、又は、図5におけるステップA17のタスク処理(n)のうち、タスク処理(0)すなわち楽音波形を生成する波形生成タスク処理のフローチャートである。
このフローでは、MIDIデータを入力する入力処理(ステップB1)、そのMIDIデータに応じて楽音波形データを生成する生成処理(ステップB2)、生成した楽音波形データをCODEC7に出力する出力処理(ステップB3)、RAM4のリングバッファをチェックするバッファチェック処理(ステップB4)を実行する。
【0031】
図7は、図6におけるステップB1の入力処理のフローである。
まず、MIDI入力があるか否かを判別し(ステップC1)、MIDI入力がなければこのフローを終了するが、MIDI入力があったときは、そのイベントデータの内容を判別する(ステップC2)。イベントデータがノートオンである場合には、発音チャンネルにアサインが可能であるかを示すフラグEnableが「1(アサイン可能)」であるか否かを判別する(ステップC3)。Enableが「0(アサイン不可)」である場合には、入力されたイベントデータを無視する。すなわち、発音チャンネルにノートオンの新たなイベントデータをアサインする処理を停止する。そして、メインフローに戻る。一方、Enableが「1」である場合には、発音チャンネルを指定するポインタCHに「0」をセットして(ステップC4)、CHの値をインクリメントしながら、イベントデータがアサイン可能な発音チャンネルを捜す。
【0032】
すなわち、CHで指定する発音フラグONF(CH)が「0(消音)」であるか否かを判別し(ステップC5)、このフラグが「1(発音)」である場合には、イベントデータをアサインできないので、次の発音チャンネルを指定するためにCHの値をインクリメントする(ステップC6)。そしてインクリメントしたCHの値が発音チャンネルの最大数より大きくなったか否かを判別する(ステップC7)。CHの値が最大数より大きい場合には、すべての発音チャンネルが発音中で空きチャンネルがないので、このフローを終了する。CHの値が最大数以下である場合には、ステップC5に移行して消音中の発音チャンネルを捜す。ステップC5において、発音フラグONF(CH)が「0」である場合には、そのフラグを「1」にセットして(ステップC8)、イベントデータのノートすなわち音高をレジスタNOTE(CH)にストアする(ステップC9)。そして、図6のフローに戻る。
【0033】
ステップC2において、イベントデータがノートオフである場合には、発音チャンネルを指定するポインタCHに「0」をセットして(ステップC10)、CHの値をインクリメントしながら、そのイベントデータについて発音中の発音チャンネルを捜す。
すなわち、CHで指定する発音フラグONF(CH)が「1(発音中)」であるか否かを判別する(ステップC11)。このフラグが「1」である場合には、ノートオフのイベントデータのノートがレジスタNOTE(CH)のノートと一致するか否かを判別する(ステップC12)。ONF(CH)が「0」である場合、又は、ノートオフのイベントデータのノートがNOTE(CH)のノートと異なる場合には、CHの値をインクリメントする(ステップC13)。そしてインクリメントしたCHの値が発音チャンネルの最大数より大きくなったか否かを判別する(ステップC14)。
【0034】
CHの値が最大数以下である場合には、ステップC14からステップC11に移行して対応する発音チャンネルを捜す。その発音チャンネルが見つかった場合、すなわち、ステップC12においてノートオフのイベントデータのノートがNOTE(CH)のノートと一致した場合には、その発音チャンネルのフラグONF(CH)を「0(消音)」にリセットして(ステップC15)、図6のフローに戻る。
ステップC2において、イベントデータがノートオン及びノートオフ以外のデータ、例えばプログラムチェンジのデータである場合には、その楽音イベントに対応するその他の処理を行う(ステップC16)。そして、図6のフローに戻る。
【0035】
図8は、図6におけるステップB2の生成処理のフローである。このフローでは、ノートオンのイベントデータのノート(音高)、音色及びベロシティ等に基づいて、所定のサンプリング周期毎にRAM4の波形テーブルからノートに対応する読出レートでデータを読み出して、音色及びベロシティ等に応じてアンプ処理及びフィルタ処理等を行って楽音波形データを生成する。
【0036】
まず、波形生成に用いる5個のレジスタW、WL、WR、WHL、WHRをクリアするために、それぞれに「0」をストアする(ステップD1)。Wは、生成した楽音波形データをストアするレジスタである。WL及びWRは、各発音チャンネルごとにパンデータ(左右分離比率データ)によって左チャンネル及び右チャンネルに分離した楽音波形データをストアするレジスタである。WHL及びWHRは、左チャンネル及び右チャンネルの各々において複数の発音チャンネルの楽音波形データを合成してストアするレジスタである。
【0037】
次に、発音チャンネルを指定するポインタCHに「0」をセットして(ステップD2)、CHの値をインクリメントしながら楽音波形データを生成する。すなわち、CHで指定した発音フラグONF(CH)が「1」であるか否かを判別する(ステップD3)。このフラグが「1」である場合には、その発音チャンネルにアサインされたイベントデータに基づいて波形生成を行う(ステップD4)。そして、生成した楽音波形データをレジスタWにストアする(ステップD5)。次に、Wの楽音波形データに左チャンネルのパンデータPANL(CH)の値を乗算してレジスタWLにストアする(ステップD6)。同様に、Wの楽音波形データに右チャンネルのパンデータPANR(CH)の値を乗算してレジスタWRにストアする(ステップD7)。
【0038】
次に、レジスタWHLにレジスタWLの楽音波形データを累算し(ステップD8)、レジスタWHRにレジスタWRの楽音波形データを累算する(ステップD9)。すなわち、各発音チャンネルの楽音波形データを合成するための累算を行う。この後、CHの値をインクリメントする(ステップD10)。このとき、インクリメントしたCHの値が発音チャンネルの最大数より大きいか否かを判別し(ステップD11)、CHの値が最大数以下である場合には、ステップD3に移行してONF(CH)の値を判別する。そして、CHの値が最大数に達するまで、ステップD3からステップD11までの処理を繰り返す。
【0039】
ステップD11においてCHの値が最大数より大きくなった場合、すなわち、ノートオンのイベントデータをアサインしたすべての発音チャンネルについて楽音波形データを生成し、レジスタWHL及びWHRに楽音波形データにおける累算が終了した場合には、レジスタWHLの楽音波形データにレジスタMaster Volumeの音量データを乗算し(ステップD12)、レジスタWHLの楽音波形データにMaster Volumeの音量データを乗算する(ステップD13)。そして、図6のフローに戻る。
【0040】
図9は、図6におけるステップB3の出力処理のフローである。このフローでは、生成して累算した楽音波形データをRAM4のリングバッファにストアし、サンプリング周期毎の出力タイミングに応じて、ストアした楽音波形データを出力する。リングバッファは、図11に示すように、最小値のアドレスから最大値のアドレスまでのエリアで構成され、このリングバッファ内において、循環的に図の矢印の方向に順次進行する書込アドレスAW及び読出アドレスARによって対応するエリアが指定される。すなわち、最大値のアドレスの次には最小値のアドレスに戻って、リング状にアドレスが進行する。
【0041】
図9のフローにおいて、まず、書込アドレスAWで指定されるリングバッファのエリアBUFFER(AW)に、レジスタWHL及びWHRの合成された楽音波形データをストアする(ステップE1)。そして、書込アドレスAWをインクリメントして(ステップE2)、次の書込エリアを指定する。このときAWが最大値よりも大きくなったか否かを判別し(ステップE3)、最大値より大きくなった場合はAWを最小値にする(ステップE4)。
【0042】
次に、サンプリング周期毎の出力タイミングになったか否かを判別する(ステップE5)。出力タイミングでない場合にはこのフローを終了するが、出力タイミングになったときは、読出アドレスARで指定されるリングバッファのエリアBUFFER(AR)より、楽音波形データを読み出してCODEC7に出力する(ステップE6)。そして、読出アドレスARをインクリメントして(ステップE7)、次の読出エリアを指定する。このときARが最大値よりも大きくなったか否かを判別し(ステップE8)、最大値より大きくなった場合はARを最小値にする(ステップE9)。そして、図6のフローに戻る。
【0043】
図10は、図6におけるステップB4のバッファチェック処理のフローである。このフローにおいては、まず、書込アドレスAWのアドレス位置が読出アドレスARのアドレス位置よりも大きいか否かを判別する(ステップF1)。書込アドレスAWが読出アドレスARよりも大きい場合には、書込アドレスAWから読出アドレスARを減算したアドレス差をレジスタM1にストアする(ステップF2)。
一方、読出アドレスARが書込アドレスAWよりも大きい場合には、書込アドレスAWと最大値のアドレスから読出アドレスARを減算した値とを加算した値をレジスタM1にストアする(ステップF3)。すなわち、リングバッファの書込アドレスAWが最大値のアドレスを過ぎて最小値のアドレスに戻った後には、書込アドレスAWのほうが読出アドレスARより先行していても、アドレス値は読出アドレスARのほうが大きいので、ステップF3のように、書込アドレスAWと最大値のアドレスから読出アドレスARを減算した値とを加算した値をレジスタM1にストアする。
ステップF2又はステップF3のいずれにおいても、先に進行する書込アドレスAWのアドレス位置に対して、後から進行する読出アドレスARのアドレス位置がどれだけ近いかを表すアドレス差がレジスタM1にストアされることになる。
【0044】
次に、レジスタM1にストアした値(以下、「M1」という)と第1の所定数のサンプリング周期値M2とを比較する(ステップF4)。例えば、M2は5サンプリング周期である。M1がM2よりも大きい場合には、新たなノートオンのイベントデータが入力された場合でも、読出アドレスARが書込アドレスAWに追いつくまでの間に、そのイベントデータの波形生成処理を完了することができる。この場合には、波形生成タスクを他のタスクよりも優先的に実行する必要はない。
【0045】
この場合には、さらに、M1と第2の所定数のサンプリング周期値M3とを比較する(ステップF5)。例えば、M3は10サンプリング周期である。M1がM3以下である場合には、他のタスクを波形生成タスクより優先的に実行する余裕はない。したがって、この場合には、波形生成タスクと他のタスクとを優劣なく平等に処理するために、プライオリティ(0)を「Normal」にセットする(ステップF6)。
これに対して、M1がM3よりも大きい場合には、新たなノートオンのイベントデータが入力された場合でも、読出アドレスARが書込アドレスAWに追いつくまでの間に、十分過ぎるな余裕で新たなイベントデータの波形生成タスクを完了することができる。この場合には、他のタスク(1)ないし(N)を波形生成タスクよりも優先的に処理しても差し支えない。したがって、プライオリティ(0)を「Low」にセットする(ステップF7)。
【0046】
ステップF4において、M1がM2以下である場合には、新たなノートオンのイベントデータが入力された場合には、読出アドレスARが書込アドレスAWに追いつくまでの間に、そのイベントデータの波形生成処理を完了できないおそれがある。この場合には、波形生成タスクを他のタスクよりも優先的に実行する必要がある。したがって、プライオリティ(0)を「High」にセットする(ステップF8)。
【0047】
この場合において、所定値の制限時間内に他のタスクであるタスク(1)ないしタスク(N)のすべてが実行できないことがある。すなわち、キーボードからの演奏データや外部からのMIDIデータのイベントデータを入力するデータ入力処理、表示すべき1画面のビットマップデータを生成する画像データ生成処理、リバーブなどのエフェクトを付加するエフェクト処理などのタスクが実行できないことがある。しかしながら、これらのタスクが犠牲になったとしても、ノイズの発生や古い楽音波形データを出力するという不具合を回避するほうが、楽音発生装置の機能としては重要である。
【0048】
例えば、イベントデータを入力できなかったり、表示された画像に多少のちらつきがあったり、リバーブが軽くなるような状態が一時的にあった場合でも、聴く人に特別に違和感を与えることは少ないが、ノイズが発生したり、同じ楽音が重なった場合には、その不具合が目立つので、聴く人に大きな違和感を与えてしまう。
【0049】
以上のように、上記実施形態の楽音発生装置によれば、CPU1は、楽音波形データを生成する処理を行なう波形生成タスク(0)およびタスク(1)ないしタスク(N)を各タスク単位で繰り返し実行する際に、予め規定された制限時間である所定値内に実行可能な数のタスクを実行する。また、波形生成タスクによって生成した楽音波形データを書込アドレスAWで指定されるRAM4のリングバッファのエリアに書き込み、読出アドレスARで指定されるリングバッファのエリアから楽音波形データを読み出す。この場合において、読出アドレスARから書込アドレスAWまでのアドレス差M1がM2より小さい場合には、所定値内において波形生成タスク(0)を他のタスク(1)ないしタスク(N)よりも優先的に実行するので、デジタルアナログ変換器であるCODEC7の前段に配置するRAM4のリングバッファの容量を小さくした場合でも、ノイズの発生や古い楽音波形データを出力することを回避して、高い音質の楽音を発生できる。
【0050】
この場合において、アドレス差M1がM3より大きい場合には、他のタスク(1)ないしタスク(N)を波形生成タスク(0)よりも優先的に実行するので、データ入力処理、画像データ生成処理、エフェクト処理などを円滑に行なうことにより、より高い音質の楽音を発生できる。
【0051】
また、アドレス差M1がM2からM3までの範囲内である場合には、波形生成タスク(0)と他のタスク(1)ないしタスク(N)とを優劣なく平等に実行するので、CPU1のデバイスの処理速度に適応した本来のプログラムの設計通りの高い音質の楽音を発生できる。
【0052】
なお、上記実施形態においては、優先的に実行する波形生成タスク(0)の優先度を他のタスク(1)ないし(N)よりも高く設定するように構成にしたが、実施形態の変形例として、優先的に実行する波形生成タスク(0)以外のタスク(1)ないし(N)の優先度を低く設定するように構成してもよい。
【0053】
なおまた、上記実施形態においては、楽音発生処理のプログラムをROM3に記憶する構成にしたが、例えば、フレキシブルディスク(FD)又はCD−ROMなどの外部記憶媒体に記憶されている楽音発生処理のプログラム、又は、インターネット等の通信網を介して接続されたサーバに記憶されている楽音発生処理のプログラムを、汎用のコンピュータシステムにおける書き換え可能なハードディスクやフラッシュメモリで構成されたメモリにインストールして、その楽音発生処理のプログラムをコンピュータによって実行するような構成にしてもよい。この場合には、プログラムの発明を実現できる。
【0054】
すなわち、その楽音発生処理のプログラムは、楽音波形データを生成する処理を行なう波形生成タスクおよび他のタスクからなる所定数のタスクを各タスク単位で繰り返し実行する際に、あらかじめ規定された制限時間内に実行可能な数のタスクを実行するコンピュータを用いて楽音を発生する楽音発生装置のプログラムであって、
波形生成タスクによって生成された楽音波形データを書込アドレスで指定される記憶手段のエリアに書き込む第1のステップと、読出アドレスで指定される記憶手段のエリアから楽音波形データを読み出す第2のステップと、読出アドレスから書込アドレスまでのアドレス差が所定範囲より小さい場合には制限時間内において波形生成タスクを他のタスクよりも優先的に実行するようにコンピュータに指令する第3のステップとを実行する。
したがって、デジタルアナログ変換器の前段に配置するリングバッファなどの記憶手段の容量を小さくした場合でも、ノイズの発生や古い楽音波形データを出力することを回避して、高い音質の楽音を発生できる。
【0055】
なおまた、上記実施形態においては、ソフトウェアによって楽音を発生させるソフトウェア音源の楽音発生装置を例に採って本発明を説明したが、本発明の適用範囲はソフトウェア音源に限定されるものではない。DSP(デジタル・シグナル・プロセッサ)等のようにハードウェア音源を用いた楽音発生装置においても、本発明を適用することは可能である。例えば、波形メモリに記憶されているPCM波形データを読み出すタスクを優先的に実行することにより、ノイズの発生や古い楽音波形データを出力することを回避して、高い音質の楽音を発生できる。
【0056】
【発明の効果】
本発明によれば、複数のタスクのうち楽音波形を生成する波形生成タスクを優先して実行するので、デジタルアナログ変換器の前段に配置する記憶手段であるバッファの容量を小さくした場合でも、ノイズの発生や古い楽音波形データを出力することを回避して、高い音質の楽音を発生できるという効果が得られる。
【図面の簡単な説明】
【図1】本発明の実施形態における楽音発生装置の構成を示すブロック図。
【図2】図1のRAMに設定されるタスク群および各タスクに対する優先度を設定するプライオリティデータ群を示す図。
【図3】図1のCPUによって実行されるタスク処理ルーチンのメインフローチャート。
【図4】図3に続くタスク処理ルーチンのメインフローチャート。
【図5】図4に続くタスク処理ルーチンのメインフローチャート。
【図6】図3ないし図5における波形生成のタスク処理のフローチャート。
【図7】図6のタスク処理における入力処理のフローチャート。
【図8】図6のタスク処理における生成処理のフローチャート。
【図9】図6のタスク処理における出力処理のフローチャート。
【図10】図6のタスク処理におけるバッファチェック処理のフローチャート。
【図11】図1のRAMのリングバッファにおける書込アドレスおよび読出アドレスの位置関係を示す図。
【符号の説明】
1 CPU
3 ROM
4 RAM
5 操作部
6 表示部
7 CODEC
[0001]
TECHNICAL FIELD OF THE INVENTION
The present invention relates to a musical sound generating device and a musical sound generating program.
[0002]
[Prior art]
Some conventional tone generators use a software tone generator that generates a tone by software running on a computer operation system (OS) instead of a hardware tone generator that generates a tone by hardware. The software sound source installs an application program (hereinafter, referred to as a "tone generation processing program") for executing a tone generation processing on a hard disk or the like of a computer, and an arithmetic processing unit such as a CPU executes the tone generation processing program. Thus, when data of a musical tone event including key press information, sequence information, MIDI information, or the like by a keyboard performance is input, a musical tone can be easily generated in accordance with the musical tone event. This has the advantage that a tone generator can be realized.
[0003]
A conventional specific tone generating method in a tone generating apparatus is as follows: (1) The tone generating method is started in response to a first interrupt (software interrupt) generated when performance information is output from an application program. A first step of generating corresponding tone control information, (2) activated by a second interrupt (hardware interrupt) generated when a decrease in the number of waveform samples stored in the buffer is detected, A second step of collectively generating a plurality of waveform samples based on the tone generation control information (generated in the first step) and storing the generated waveform samples in a buffer; and (3) storing the waveform samples in a buffer. The configuration includes a third step of reading out the stored waveform samples one by one for each sampling period and sequentially outputting the samples to the digital-to-analog converter. That. The first step and the second step are virtual device drivers in a predetermined operating system, and the second interrupt is that the number of waveform samples transmitted to the digital-to-analog converter has reached a predetermined number. It is configured to be generated when it is detected.
[0004]
That is, the computer of the computer is configured to execute a program for tone generation processing including the above-described first to third steps including tone information processing and waveform generation processing. However, the operation of the CPU cannot be occupied to execute the program for the tone generation processing. Therefore, in order to collectively perform tone information processing and waveform generation processing within the period allocated for the CPU to execute the tone generation processing program, a data stream at a constant rate is required before the digital-analog converter. In addition, a FIFO (first-in first-out) buffer, which is a storage unit including a ring buffer, a double buffer, and the like, is arranged (for example, see Patent Document 1).
[0005]
[Patent Document 1]
Japanese Patent No. 2904088 (paragraph numbers "0011" and "0012", FIGS. 4 to 7)
[0006]
[Problems to be solved by the invention]
However, in the above-described conventional tone generating apparatus and the tone generating method based on the tone generating process program executed in the apparatus, the large capacity of the FIFO buffer not only causes an increase in cost but also increases the data of the tone event data. Since it takes too much time from the input of the musical tone to the computer to the generation and output of the musical tone waveform corresponding to the musical tone event, the output response of the musical tone to the input musical tone event is delayed. For this reason, when a musical event is input in real time, such as a keyboard performance, the musical tone is generated later than the musical performance, giving a sense of discomfort not only to the performer but also to the person listening to the performance. Would.
[0007]
On the other hand, when the capacity of the FIFO buffer is reduced in order to increase the output response, when the calculation load of the musical tone waveform generation by the CPU increases, the writing process to the FIFO buffer becomes slow, and the FIFO buffer becomes empty. (A state in which new tone waveform data is not written), and there is no tone waveform data to be read, that is, a buffer underflow condition occurs. In this case, since noise is generated or old musical tone waveform data read out before is output, the tone quality of the generated musical tone is significantly deteriorated.
[0008]
For example, in Patent Document 1 described above, as described in paragraphs “0056” and “0057” and FIG. 7B, the waveform generation calculation corresponding to the MIDI performance input is performed within one frame in a predetermined time. May not end. For example, when processing that requires real-time processing such as multimedia software is being executed in parallel, the CPU power may be allocated for that, and time for executing the software sound source may not be allocated. In this case, the waveform generation is canceled and the DMA processing (reproduction processing) is interrupted for the frame time for which the calculation has not been completed.
[0009]
Also, this reproduction interruption has not been resolved in the first and second modifications described in paragraph number “0058” and FIG. 8A, and “0059” and FIG. 8B. . In the first modified example, the hardware interrupt is advanced by the time Tj from the timing at which the reproduction of one frame ends, but if the waveform generation operation does not end within one frame, the waveform generation is canceled. It is inevitable to interrupt the reproduction process. Further, in the second modification, the priority of the software interrupt is set higher than that of the hardware interrupt. However, the waveform generation operation is delayed by that much, so the waveform generation is also canceled in this case. It is inevitable to interrupt the reproduction process. Therefore, it has been difficult for the conventional tone generator to avoid generation of noise due to such interruption of reproduction and output of old tone waveform data previously read.
[0010]
An object of the present invention is to avoid generating noise and outputting old musical tone waveform data even when the capacity of a buffer, which is storage means disposed in a preceding stage of a digital-to-analog converter, is reduced, thereby producing high-quality musical sounds. It is an object of the present invention to provide a musical tone generating device and a musical tone generating process program which generate the musical tone.
[0011]
[Means for Solving the Problems]
The musical sound generating apparatus according to claim 1 performs a waveform generation task (corresponding to task (0) in FIG. 2 in the embodiment) for performing a process of generating musical sound waveform data and another task (in the embodiment, When a predetermined number of tasks consisting of tasks (1) to (N) in FIG. 2 are repeatedly executed in each task unit, a predetermined time limit (in the embodiment, FIG. 3 to FIG. 5). A task execution means (corresponding to the task processing routine of FIGS. 3 to 5 executed by the CPU 1 in the embodiment) for executing a number of tasks that can be executed within a predetermined number of tasks; A waveform for writing the generated musical tone waveform data to an area of a storage means (corresponding to the ring buffer in FIG. 11 in the embodiment) designated by a write address 8 (in the embodiment, it corresponds to the generation processing of FIG. 8 executed by the CPU 1), and a waveform reading means (in the embodiment, the CPU 1) which reads out the tone waveform data from the area of the storage means designated by the read address. 9) and when the address difference from the read address to the write address is smaller than a predetermined range (corresponding to the range from M2 to M3 in the embodiment). Command generation means (in the embodiment, the CPU 1 controls the execution of the waveform generation task by giving a command to execute the waveform generation task with higher priority than the other tasks in the embodiment). (Corresponding to the buffer check process of FIG. 10 to be executed).
[0012]
In this case, as described in claim 2, when the address difference is larger than the predetermined range, the command generation means executes a command to execute another task with higher priority than the waveform generation task. (Corresponding to step F7 in FIG. 10) to the task execution means.
[0013]
Further, as described in claim 3, the command generation means executes a command to execute the waveform generation task and the other tasks equally and equally when the address difference is within a predetermined range. (Corresponding to step F6 in FIG. 10) to the task executing means.
[0014]
In addition, as described in claim 4, the command generation means sets the priority of the task to be executed with higher priority (corresponding to steps F6, F7 and F8 in FIG. 10 in the embodiment). May be provided to the task execution means.
[0015]
Further, as described in claim 5, the command generation means gives the task execution means a command (corresponding to a modification of the embodiment) for setting the priority of tasks other than the task to be executed preferentially low. Configuration may be adopted.
[0016]
A program for generating a musical tone according to a sixth aspect of the present invention includes a waveform generation task (in the embodiment, corresponding to task (0) in FIG. 2) and a other task (in the embodiment, a task for generating musical tone waveform data). Is a predetermined time limit (in the embodiment, FIG. 3 through FIG. 3) when a predetermined number of tasks consisting of tasks (1) through (N) in FIG. 5 (corresponding to the predetermined value in FIG. 5). A program (external storage medium) of a tone generating device for generating a tone using a computer (corresponding to the CPU 1 in FIG. Or a program installed in a memory such as a hard disk from a communication network and executed))
A first step of writing musical tone waveform data generated by the waveform generation task into an area of storage means (corresponding to a ring buffer of the RAM 4 in FIG. 1 in the embodiment) designated by a write address; A second step of reading out the tone waveform data from the designated storage means area, and an address difference from the read address to the write address is smaller than a predetermined range (corresponding to a range from M2 to M3 in the embodiment). In this case, the third step of instructing the computer to execute the waveform generation task with priority over other tasks within the time limit is performed.
[0017]
BEST MODE FOR CARRYING OUT THE INVENTION
Hereinafter, an embodiment of a tone generator according to the present invention will be described with reference to the drawings.
FIG. 1 is a block diagram showing a configuration of a tone generator having a function of a software sound source. In FIG. 1, a CPU 1 is connected to a ROM 3, a RAM 4, an operation unit 5, a display unit 6, and a CODEC 7 via a system bus 2, and exchanges data and commands with these units to control the entire apparatus. The CPU 1 also processes MIDI data that is data of a musical sound event (hereinafter, referred to as “event data”) input from an external keyboard device, a sequencer, or the like.
[0018]
The ROM 3 stores a program for tone generation processing, initial data, and the like. The RAM 4 is a work area of the CPU 1 constituted by storage means such as a semiconductor memory and a hard disk, and stores software of an operation system (OS) for starting a program for tone generation processing and other application software. The RAM 4 also includes various registers, flags, and pointer areas necessary for executing a musical tone generation program, a ring buffer area as a FIFO buffer for temporarily storing musical tone waveform data, and a software tone generator. A waveform table for generating musical tone waveform data is provided.
[0019]
The operation unit 5 is configured by a pointing device such as a keyboard and a mouse, and inputs data and commands to the CPU 1 according to operations. The display unit 6 displays various information related to the tone generation processing and other information indicating the state of the apparatus. The CODEC 7 includes a digital-analog converter, a DMAC (direct memory access controller), a sampling pulse generator, and the like (not shown). The CODEC 7 converts digital musical sound waveform data into analog musical sound signals, and Output to the sound system.
[0020]
FIG. 2 is a diagram showing a task group set in the RAM 4 and a priority (PRIORITY) data group for setting a priority for each task in order to execute a program for tone generation processing. As shown in this figure, the task group includes a plurality of tasks including a waveform generation task (0) for generating musical tone waveform data and other tasks (1) to (N). I have. Further, the priority data group is composed of priority (0) to priority (N), which are priorities for each task (0) to task (N). The priorities set in the priority data group include “High” indicating a high priority, “Normal” indicating a normal state where each task has no priority, and “Low” indicating a low priority.
[0021]
Other tasks include, for example, a data input process for inputting performance data from the keyboard of the operation unit 5 and MIDI data from the outside, and decomposing character or graphic information into dots (pixels) on the display unit 6 to obtain one dot. There are image data generation processing for generating bitmap data of a screen, and effect processing for adding an effect such as reverb to generated musical sounds.
[0022]
Note that there is a time limit when the CPU 1 continuously executes the tasks (0) to (N) on a task-by-task basis, and a predetermined value of the time limit is defined according to the processing speed of the device constituting the CPU 1. Have been. When the time counted up from the start of the task processing routine reaches a predetermined value, the next task cannot be executed, and the task processing routine is started again.
[0023]
Next, the operation of the tone generator will be described in detail with reference to flowcharts of the CPU 1 shown in FIGS. 3 to 10 and a diagram showing a relationship between a write address and a read address in the ring buffer shown in FIG.
3 to 5 are main flowcharts of the task processing routine. In the predetermined initialization process (step A1), the registers and flags are cleared, and the priority (0) to the priority (N) are set to “Normal”. Next, "0" is stored in the register TIMER and cleared (step A2). The count value of TIMER is counted up (incremented) in response to a timer interrupt at regular intervals.
[0024]
Next, a pointer n specifying the task group and the priority data group is set to “0” (step A3), and the priority of each task is determined while incrementing the value of n. That is, it is determined whether or not the priority (n) of the task (n) is “High” (step A4). If the priority (n) is “High”, the task (n) process is executed (step A5). Then, it is determined whether or not the count value of TIMER has reached a predetermined value (step A6). If it has not reached the predetermined value, the value of n is incremented (step A7) and the next task is specified. At this time, it is determined whether or not the incremented value of n has exceeded the maximum number of tasks (step A8). If the number does not exceed the maximum task number, the processing from step A4 is repeated.
[0025]
In step A6, when the count value of TIMAR reaches the predetermined value, the process proceeds to step A2, resets the count value of TIMAR to “0”, and repeats the processing from step A3. That is, if the TIMER count value reaches a predetermined value before processing all tasks of the priority "High", the process is repeated from the beginning of the task processing routine.
[0026]
In step A8, when the value of n exceeds the maximum number of tasks, that is, after all the tasks with the priority of “High” are processed, the pointer n is set to “0” in the flow of FIG. A9) The priority of each task is determined while incrementing the value of n. That is, it is determined whether or not the priority (n) of the task (n) is "Normal" (step A10). If the priority (n) is "Normal", the task (n) processing is executed (step A11). Then, it is determined whether or not the count value of TIMER has reached a predetermined value (step A12). If it has not reached the predetermined value, the value of n is incremented (step A13) and the next task is designated. At this time, it is determined whether or not the incremented value of n exceeds the maximum task number (step A14). If the number does not exceed the maximum task number, the processing from step A10 is repeated.
[0027]
In step A12, when the count value of TIMAR reaches the predetermined value, the process proceeds to step A2 in FIG. 3, resets the count value of TIMAR to “0”, and repeats the processing after step A3. That is, if the count value of TIMER reaches a predetermined value before processing all tasks of the priority "Normal", the process is repeated from the beginning of the task processing routine.
[0028]
In step A14, when the value of n exceeds the maximum number of tasks, that is, after all tasks with the priority "Normal" are processed, the pointer n is set to "0" in the flow of FIG. A15) The priority of each task is determined while incrementing the value of n. That is, it is determined whether or not the priority (n) of the task (n) is “Low” (step A16), and if it is “Low”, the task (n) processing is executed (step A17). Then, it is determined whether or not the count value of TIMER has reached a predetermined value (step A18). If it has not reached the predetermined value, the value of n is incremented (step A19) and the next task is designated. At this time, it is determined whether or not the incremented value of n exceeds the maximum number of tasks (step A20). If the number does not exceed the maximum task number, the processing from step A16 is repeated.
[0029]
In step A18, when the count value of TIMAR reaches the predetermined value, the process proceeds to step A2 in FIG. 3, resets the count value of TIMAR to "0", and repeats the processing after step A3. That is, if the count value of TIMER reaches a predetermined value before processing all tasks of the priority “Low”, the process is repeated from the beginning of the task processing routine.
Further, in step A20, when the value of n exceeds the maximum number of tasks, that is, after processing all the tasks with the priority “Low”, the process proceeds to step A2 in FIG. Reset to "0" and repeat the processing from step A3.
[0030]
FIG. 6 is a flowchart of the task processing (0) of the task processing (n) of step A5 in FIG. 3, step A11 in FIG. 4, or step A17 in FIG. is there.
In this flow, an input process for inputting MIDI data (step B1), a generation process for generating musical tone waveform data according to the MIDI data (step B2), and an output process for outputting the generated musical tone waveform data to the CODEC 7 (step B3) ), A buffer check process (step B4) for checking the ring buffer of the RAM 4 is executed.
[0031]
FIG. 7 is a flowchart of the input processing in step B1 in FIG.
First, it is determined whether or not there is a MIDI input (step C1). If there is no MIDI input, this flow is terminated. If there is a MIDI input, the contents of the event data are determined (step C2). If the event data is note-on, it is determined whether or not a flag Enable indicating whether assignment to a sounding channel is possible is "1 (assignable)" (step C3). If Enable is “0 (unassignable)”, the input event data is ignored. That is, the process of assigning new note-on event data to the sounding channel is stopped. Then, the process returns to the main flow. On the other hand, if Enable is "1", "0" is set to a pointer CH for designating a sound channel (step C4), and while the value of CH is incremented, a sound channel to which event data can be assigned is set. Search.
[0032]
That is, it is determined whether or not the sound generation flag ONF (CH) designated by CH is "0 (silence)" (step C5). If the flag is "1 (sound)", the event data is deleted. Since assignment is not possible, the value of CH is incremented to specify the next sounding channel (step C6). Then, it is determined whether or not the incremented CH value has become larger than the maximum number of sounding channels (step C7). If the value of CH is larger than the maximum number, all the sound channels are sounding and there are no empty channels, so this flow is terminated. If the value of CH is equal to or less than the maximum number, the process goes to step C5 to search for a sounding channel whose sound is being muted. If the sound generation flag ONF (CH) is "0" in step C5, the flag is set to "1" (step C8), and the note of the event data, that is, the pitch is stored in the register NOTE (CH). (Step C9). Then, the process returns to the flow of FIG.
[0033]
If the event data is note-off in step C2, "0" is set to a pointer CH designating the sound channel (step C10), and while the value of CH is being incremented, the sound data of the event data being sounded is set. Search for pronunciation channels.
That is, it is determined whether or not the sound generation flag ONF (CH) designated by CH is "1 (producing sound)" (step C11). If this flag is "1", it is determined whether or not the note of the note-off event data matches the note of the register NOTE (CH) (step C12). If ONF (CH) is “0”, or if the note of the note-off event data is different from the note of NOTE (CH), the value of CH is incremented (step C13). Then, it is determined whether or not the incremented CH value has become larger than the maximum number of sounding channels (step C14).
[0034]
If the value of CH is equal to or less than the maximum number, the process shifts from step C14 to step C11 to search for a corresponding sounding channel. If the sounding channel is found, that is, if the note of the note-off event data matches the note of NOTE (CH) in step C12, the flag ONF (CH) of the sounding channel is set to "0 (silence)". (Step C15), and returns to the flow of FIG.
If the event data is data other than note-on and note-off in step C2, for example, program change data, other processing corresponding to the tone event is performed (step C16). Then, the process returns to the flow of FIG.
[0035]
FIG. 8 is a flow of the generation processing in step B2 in FIG. In this flow, based on the note (pitch), timbre, velocity, and the like of the note-on event data, data is read from the waveform table of the RAM 4 at a read rate corresponding to the note at predetermined sampling intervals, and the timbre and velocity are read. The tone waveform data is generated by performing an amplifier process, a filter process, and the like according to the above.
[0036]
First, “0” is stored in each of the five registers W, WL, WR, WHL, and WHR used for generating a waveform (step D1). W is a register for storing the generated tone waveform data. WL and WR are registers for storing tone waveform data separated into left and right channels by pan data (left / right separation ratio data) for each sounding channel. WHL and WHR are registers for synthesizing and storing musical tone waveform data of a plurality of tone generation channels in each of the left channel and the right channel.
[0037]
Next, "0" is set to a pointer CH for designating a tone generation channel (step D2), and tone waveform data is generated while incrementing the value of CH. That is, it is determined whether or not the sound generation flag ONF (CH) designated by CH is "1" (step D3). If the flag is "1", a waveform is generated based on the event data assigned to the sound channel (step D4). Then, the generated tone waveform data is stored in the register W (step D5). Next, the tone waveform data of W is multiplied by the value of the left channel pan data PANL (CH) and stored in the register WL (step D6). Similarly, the tone waveform data of W is multiplied by the value of pan data PANR (CH) of the right channel and stored in the register WR (step D7).
[0038]
Next, the tone waveform data of the register WL is accumulated in the register WHL (step D8), and the tone waveform data of the register WR is accumulated in the register WHR (step D9). That is, accumulation for synthesizing tone waveform data of each sounding channel is performed. Thereafter, the value of CH is incremented (step D10). At this time, it is determined whether or not the incremented CH value is greater than the maximum number of sounding channels (step D11). If the CH value is equal to or less than the maximum number, the process proceeds to step D3 to ONF (CH). Is determined. Then, the processing from step D3 to step D11 is repeated until the value of CH reaches the maximum number.
[0039]
If the value of CH is greater than the maximum number in step D11, that is, the tone waveform data is generated for all the sounding channels to which the note-on event data is assigned, and the accumulation of the tone waveform data is completed in the registers WHL and WHR. In this case, the tone waveform data of the register WHL is multiplied by the volume data of the register Master Volume (step D12), and the tone waveform data of the register WHL is multiplied by the volume data of the Master Volume (step D13). Then, the process returns to the flow of FIG.
[0040]
FIG. 9 is a flowchart of the output process in step B3 in FIG. In this flow, the generated and accumulated musical tone waveform data is stored in the ring buffer of the RAM 4, and the stored musical tone waveform data is output according to the output timing for each sampling period. As shown in FIG. 11, the ring buffer is composed of an area from the address of the minimum value to the address of the maximum value. In this ring buffer, the write addresses AW and The corresponding area is designated by read address AR. That is, after the address of the maximum value, the address returns to the address of the minimum value, and the address advances in a ring shape.
[0041]
In the flow of FIG. 9, first, the synthesized musical tone waveform data of the registers WHL and WHR is stored in an area BUFFER (AW) of a ring buffer designated by a write address AW (step E1). Then, the write address AW is incremented (step E2), and the next write area is designated. At this time, it is determined whether or not the AW has become larger than the maximum value (step E3). If the AW has become larger than the maximum value, the AW is set to the minimum value (step E4).
[0042]
Next, it is determined whether or not the output timing has come for each sampling cycle (step E5). If it is not the output timing, this flow is terminated. However, when the output timing comes, the musical tone waveform data is read from the area BUFFER (AR) of the ring buffer specified by the read address AR and output to the CODEC 7 (step). E6). Then, the read address AR is incremented (step E7), and the next read area is specified. At this time, it is determined whether or not the AR has become larger than the maximum value (step E8). If the AR has become larger than the maximum value, the AR is set to the minimum value (step E9). Then, the process returns to the flow of FIG.
[0043]
FIG. 10 is a flowchart of the buffer check process in step B4 in FIG. In this flow, first, it is determined whether or not the address position of the write address AW is larger than the address position of the read address AR (step F1). If the write address AW is larger than the read address AR, an address difference obtained by subtracting the read address AR from the write address AW is stored in the register M1 (step F2).
On the other hand, if the read address AR is larger than the write address AW, a value obtained by adding the write address AW and the value obtained by subtracting the read address AR from the maximum address is stored in the register M1 (step F3). That is, after the write address AW of the ring buffer returns to the address of the minimum value after passing the address of the maximum value, even if the write address AW precedes the read address AR, the address value becomes equal to the read address AR. Therefore, the value obtained by adding the write address AW and the value obtained by subtracting the read address AR from the address of the maximum value is stored in the register M1, as in step F3.
In either step F2 or step F3, an address difference indicating how close the address position of the read address AR that advances afterward to the address position of the write address AW that advances ahead is stored in the register M1. Will be.
[0044]
Next, the value stored in the register M1 (hereinafter, referred to as “M1”) is compared with a first predetermined number of sampling period values M2 (step F4). For example, M2 is 5 sampling periods. When M1 is larger than M2, even when new note-on event data is input, the waveform generation processing of the event data is completed before the read address AR catches up with the write address AW. Can be. In this case, it is not necessary to execute the waveform generation task with priority over other tasks.
[0045]
In this case, M1 is further compared with a second predetermined number of sampling period values M3 (step F5). For example, M3 is 10 sampling periods. If M1 is equal to or less than M3, there is no room to execute other tasks with priority over the waveform generation task. Therefore, in this case, the priority (0) is set to "Normal" in order to process the waveform generation task and the other tasks equally and equally (step F6).
On the other hand, when M1 is larger than M3, even if new note-on event data is input, the read address AR must be newly enough with a sufficient margin before catching up with the write address AW. It is possible to complete the task of generating a waveform of event data. In this case, other tasks (1) to (N) may be processed with priority over the waveform generation task. Therefore, the priority (0) is set to "Low" (step F7).
[0046]
In step F4, when M1 is equal to or less than M2, when new note-on event data is input, a waveform generation of the event data is performed until the read address AR catches up with the write address AW. Processing may not be completed. In this case, it is necessary to execute the waveform generation task with priority over other tasks. Therefore, the priority (0) is set to "High" (step F8).
[0047]
In this case, all the other tasks (1) to (N) may not be able to be executed within the predetermined time limit. That is, data input processing for inputting performance data from the keyboard and event data of MIDI data from the outside, image data generation processing for generating bitmap data of one screen to be displayed, effect processing for adding effects such as reverb, and the like. Tasks may not be able to be performed. However, even if these tasks are sacrificed, it is more important as a function of the tone generator to avoid the problem of generating noise and outputting old tone waveform data.
[0048]
For example, even if the event data cannot be input, the displayed image has a slight flicker, or the reverb is temporarily lightened, it is rare that the listener will feel particularly uncomfortable. However, if noise occurs or the same musical tone overlaps, the defect is conspicuous, giving the listener a great sense of discomfort.
[0049]
As described above, according to the tone generator of the embodiment, the CPU 1 repeats the waveform generation task (0) and the tasks (1) to (N) for performing the process of generating the musical tone waveform data for each task. At the time of execution, the number of tasks that can be executed within a predetermined value that is a predetermined time limit is executed. Further, the tone waveform data generated by the waveform generation task is written in the ring buffer area of the RAM 4 specified by the write address AW, and the tone waveform data is read from the ring buffer area specified by the read address AR. In this case, if the address difference M1 from the read address AR to the write address AW is smaller than M2, the waveform generation task (0) has priority over other tasks (1) to (N) within a predetermined value. Therefore, even if the capacity of the ring buffer of the RAM 4 arranged in front of the CODEC 7 which is a digital-to-analog converter is reduced, it is possible to avoid generation of noise and output of old musical sound waveform data to achieve high sound quality. Can generate musical tones.
[0050]
In this case, if the address difference M1 is larger than M3, the other tasks (1) to (N) are executed with higher priority than the waveform generation task (0). By performing effect processing and the like smoothly, it is possible to generate a musical sound with higher sound quality.
[0051]
If the address difference M1 is within the range from M2 to M3, the waveform generation task (0) and the other tasks (1) to (N) are executed equally and equally, so that the device of the CPU 1 A high-quality musical tone as designed by the original program adapted to the processing speed of the program can be generated.
[0052]
In the above embodiment, the priority of the waveform generation task (0) to be executed with higher priority is set higher than the other tasks (1) to (N). The priority of tasks (1) to (N) other than the waveform generation task (0) to be preferentially executed may be set low.
[0053]
In the above-described embodiment, the program for the tone generation processing is stored in the ROM 3. However, for example, the program for the tone generation processing stored in an external storage medium such as a flexible disk (FD) or a CD-ROM is used. Or, by installing a musical tone generation processing program stored in a server connected via a communication network such as the Internet in a memory configured of a rewritable hard disk or flash memory in a general-purpose computer system, It is also possible to adopt a configuration in which a program for the musical sound generation processing is executed by a computer. In this case, the invention of the program can be realized.
[0054]
That is, the program for the tone generation process executes a predetermined number of tasks consisting of a waveform generation task for performing a process of generating tone waveform data and other tasks in each task unit within a predetermined time limit. A program for generating a tone using a computer that executes a number of tasks that can be executed,
A first step of writing the tone waveform data generated by the waveform generation task into an area of the storage means specified by the write address, and a second step of reading the tone waveform data from the area of the storage means specified by the read address And a third step of instructing the computer to execute the waveform generation task with priority over other tasks within the time limit when the address difference from the read address to the write address is smaller than a predetermined range. Execute.
Therefore, even when the capacity of a storage means such as a ring buffer disposed in the preceding stage of the digital-to-analog converter is reduced, it is possible to generate a high-quality tone without generating noise or outputting old tone waveform data.
[0055]
Further, in the above-described embodiment, the present invention has been described by taking, as an example, a tone generator of a software tone generator that generates a tone by software, but the scope of the present invention is not limited to the software tone generator. The present invention can be applied to a tone generator using a hardware tone generator such as a DSP (Digital Signal Processor). For example, by giving priority to the task of reading the PCM waveform data stored in the waveform memory, it is possible to generate a high-quality tone without generating noise or outputting old tone waveform data.
[0056]
【The invention's effect】
According to the present invention, a waveform generation task for generating a musical tone waveform among a plurality of tasks is preferentially executed. Thus, it is possible to avoid the generation of the old tone waveform data and to generate a high-quality tone.
[Brief description of the drawings]
FIG. 1 is a block diagram showing a configuration of a musical sound generating device according to an embodiment of the present invention.
FIG. 2 is a view showing a task group set in a RAM of FIG. 1 and a priority data group for setting a priority for each task;
FIG. 3 is a main flowchart of a task processing routine executed by the CPU of FIG. 1;
FIG. 4 is a main flowchart of a task processing routine following FIG. 3;
FIG. 5 is a main flowchart of a task processing routine following FIG. 4;
FIG. 6 is a flowchart of a waveform generation task process in FIGS. 3 to 5;
FIG. 7 is a flowchart of input processing in the task processing of FIG. 6;
FIG. 8 is a flowchart of generation processing in the task processing of FIG. 6;
FIG. 9 is a flowchart of an output process in the task process of FIG. 6;
FIG. 10 is a flowchart of a buffer check process in the task process of FIG. 6;
FIG. 11 is a diagram showing a positional relationship between a write address and a read address in a ring buffer of the RAM of FIG. 1;
[Explanation of symbols]
1 CPU
3 ROM
4 RAM
5 Operation section
6 Display
7 CODEC

Claims (6)

楽音波形データを生成する処理を行なう波形生成タスクおよび他のタスクからなる所定数のタスクを各タスク単位で繰り返し実行する際に予め規定された制限時間内に実行可能な数のタスクを実行するタスク実行手段と、
前記波形生成タスクによって生成された楽音波形データを書込アドレスで指定される記憶手段のエリアに書き込む波形書込手段と、
読出アドレスで指定される前記記憶手段のエリアから楽音波形データを読み出す波形読出手段と、
前記読出アドレスから前記書込アドレスまでのアドレス差が所定範囲より小さい場合には前記制限時間内において前記波形生成タスクを前記他のタスクよりも優先的に実行する指令を前記タスク実行手段に与える指令発生手段と、
を備えた楽音発生装置。
A task that executes a number of tasks that can be executed within a predetermined time limit when a predetermined number of tasks including a waveform generation task for performing processing for generating musical tone waveform data and other tasks are repeatedly executed in each task unit. Means of execution;
Waveform writing means for writing musical tone waveform data generated by the waveform generation task to an area of storage means designated by a write address;
Waveform reading means for reading tone waveform data from an area of the storage means designated by a read address;
When the address difference from the read address to the write address is smaller than a predetermined range, a command for giving the task execution means a command to execute the waveform generation task prior to the other tasks within the time limit. Generating means;
A musical sound generator equipped with:
前記指令発生手段は、前記アドレス差が前記所定範囲より大きい場合には前記他のタスクを前記波形生成タスクよりも優先的に実行する指令を前記タスク実行手段に与えることを特徴とする請求項1記載の楽音発生装置。2. The apparatus according to claim 1, wherein the command generation unit provides the task execution unit with a command to execute the other task with higher priority than the waveform generation task when the address difference is larger than the predetermined range. A musical sound generator as described. 前記指令発生手段は、前記アドレス差が前記所定範囲内である場合には前記波形生成タスクと前記他のタスクとを優劣なく平等に実行する指令を前記タスク実行手段に与えることを特徴とする請求項1記載の楽音発生装置。The command generation means, when the address difference is within the predetermined range, gives a command to execute the waveform generation task and the other task equally and equally to the task execution means. Item 2. The musical sound generator according to Item 1. 前記指令発生手段は、優先的に実行するタスクの優先度を高く設定する指令を前記タスク実行手段に与えることを特徴とする請求項1ないし3のいずれか1項記載の楽音発生装置。4. The musical sound generating apparatus according to claim 1, wherein said command generating means gives a command to set the priority of a task to be executed with higher priority to said task executing means. 前記指令発生手段は、優先的に実行するタスク以外のタスクの優先度を低く設定する指令を前記タスク実行手段に与えることを特徴とする請求項1ないし3のいずれか1項記載の楽音発生装置。4. The musical sound generating apparatus according to claim 1, wherein said command generating means gives a command to set a low priority of tasks other than a task to be executed with priority to said task executing means. . 楽音波形データを生成する処理を行なう波形生成タスクおよび他のタスクからなる所定数のタスクを各タスク単位で繰り返し実行する際に予め規定された制限時間内に実行可能な数のタスクを実行するコンピュータを用いて楽音を発生する楽音発生装置のプログラムであって、
前記波形生成タスクによって生成された楽音波形データを書込アドレスで指定される記憶手段のエリアに書き込む第1のステップと、
読出アドレスで指定される前記記憶手段のエリアから楽音波形データを読み出す第2のステップと、
前記読出アドレスから前記書込アドレスまでのアドレス差が所定範囲より小さい場合には前記制限時間内において前記波形生成タスクを前記他のタスクよりも優先的に実行するように前記コンピュータに指令する第3のステップと、
を実行することを特徴とする楽音発生処理のプログラム。
A computer that executes a number of tasks that can be executed within a predetermined time limit when a predetermined number of tasks including a waveform generation task for performing a process of generating musical tone waveform data and other tasks are repeatedly executed in each task unit. A musical tone generating device program for generating musical tones using
A first step of writing musical tone waveform data generated by the waveform generation task into an area of a storage unit specified by a write address;
A second step of reading musical tone waveform data from an area of the storage means designated by a read address;
If the address difference from the read address to the write address is smaller than a predetermined range, the third command is issued to the computer to execute the waveform generation task with priority over the other tasks within the time limit. Steps and
A program for generating a musical tone.
JP2003036679A 2003-02-14 2003-02-14 Musical sound generator and musical sound generation processing program Expired - Fee Related JP4096751B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003036679A JP4096751B2 (en) 2003-02-14 2003-02-14 Musical sound generator and musical sound generation processing program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003036679A JP4096751B2 (en) 2003-02-14 2003-02-14 Musical sound generator and musical sound generation processing program

Publications (2)

Publication Number Publication Date
JP2004246145A true JP2004246145A (en) 2004-09-02
JP4096751B2 JP4096751B2 (en) 2008-06-04

Family

ID=33021700

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003036679A Expired - Fee Related JP4096751B2 (en) 2003-02-14 2003-02-14 Musical sound generator and musical sound generation processing program

Country Status (1)

Country Link
JP (1) JP4096751B2 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10242655B1 (en) 2017-09-27 2019-03-26 Casio Computer Co., Ltd. Electronic musical instrument, method of generating musical sounds, and storage medium
US10474387B2 (en) 2017-07-28 2019-11-12 Casio Computer Co., Ltd. Musical sound generation device, musical sound generation method, storage medium, and electronic musical instrument

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474387B2 (en) 2017-07-28 2019-11-12 Casio Computer Co., Ltd. Musical sound generation device, musical sound generation method, storage medium, and electronic musical instrument
US10242655B1 (en) 2017-09-27 2019-03-26 Casio Computer Co., Ltd. Electronic musical instrument, method of generating musical sounds, and storage medium
CN109559717A (en) * 2017-09-27 2019-04-02 卡西欧计算机株式会社 Electronic musical instrument, by electronic musical instrument execute method and storage medium
EP3462445A1 (en) * 2017-09-27 2019-04-03 Casio Computer Co., Ltd. Electronic musical instrument, method of generating musical sounds, and storage medium
CN109559717B (en) * 2017-09-27 2022-12-30 卡西欧计算机株式会社 Electronic musical instrument, method executed by electronic musical instrument, and storage medium

Also Published As

Publication number Publication date
JP4096751B2 (en) 2008-06-04

Similar Documents

Publication Publication Date Title
EP0743631B1 (en) Tone generating method and device
JP5134078B2 (en) Musical instrument digital interface hardware instructions
JPH09179556A (en) Method and device for musical tone generation
JP3293474B2 (en) Tone generation method
WO2001065536A1 (en) Musical sound generator
TW300298B (en)
JP3744440B2 (en) Mixing device, musical tone generator, and large-scale integrated circuit for mixing
JP4096751B2 (en) Musical sound generator and musical sound generation processing program
JP2004093732A (en) Musical sound generator and program for musical sound generation processing
JP3152198B2 (en) Music sound generation method and music sound generation device
JPH07121181A (en) Sound information processor
JP3637577B2 (en) Music generation method
JP3572847B2 (en) Sound source system and method using computer software
JP3799711B2 (en) Musical sound generation method and musical sound generator
JP3285137B2 (en) Musical sound generating apparatus and musical sound generating method, and storage medium storing program according to the method
JP5029898B2 (en) Tone generator and tone generator processing program
JP3723973B2 (en) Sound generator
JP5510813B2 (en) Music generator
JP3137043B2 (en) Waveform memory tone generator and tone generator
JP3654257B2 (en) Music generator
JP2576613B2 (en) Processing equipment
JP3516470B2 (en) Signal processing device
JP3148803B2 (en) Sound source device
JP2001318672A (en) Musical sound generator
JP2000276149A (en) Method and device for generating music sound and recording medium

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051228

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20060208

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20060405

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070926

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071009

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071126

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080219

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080303

R150 Certificate of patent or registration of utility model

Ref document number: 4096751

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20110321

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20110321

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20120321

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20130321

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20130321

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20140321

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees