JP3832382B2 - 楽音生成装置及びプログラム - Google Patents
楽音生成装置及びプログラム Download PDFInfo
- Publication number
- JP3832382B2 JP3832382B2 JP2002133980A JP2002133980A JP3832382B2 JP 3832382 B2 JP3832382 B2 JP 3832382B2 JP 2002133980 A JP2002133980 A JP 2002133980A JP 2002133980 A JP2002133980 A JP 2002133980A JP 3832382 B2 JP3832382 B2 JP 3832382B2
- Authority
- JP
- Japan
- Prior art keywords
- waveform
- sample
- data
- address
- read
- 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
Links
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
Description
【発明の属する技術分野】
この発明は、CPUのような汎用の演算処理手段によって楽音生成を行う楽音生成装置及びプログラムに関する。特に、楽音生成処理時における演算処理手段にかかる処理負荷を低減することにより、楽音の生成を効率的に行うことのできるようにした楽音生成装置及びプログラムに関するものである。
【0002】
【従来の技術】
最近では、CPUのような汎用の演算処理手段の演算能力の向上に伴って、汎用コンピュータや専用の楽音発生装置などに搭載されるCPUに所定の楽音生成処理を実行させることによって楽音生成を行うことのできる楽音生成装置(つまりソフト音源)が知られている。すなわち、CPUに楽音生成処理のためのアプリケーションプログラムを実行させて、該アプリケーションプログラムに基づき楽音を生成する。こうした楽音生成装置においては、所定の1サンプリング周期(つまり、デジタル・アナログ変換器の変換タイミング)毎に各チャンネルの楽音波形サンプルデータを発音チャンネル分演算生成することによって楽音を生成する。したがって、CPUは各発音チャンネルの処理を行う場合、まず、前回の当該発音チャンネルの演算に用いた各種レジスタ値(例えば、各種制御パラメータなど)をメモリからCPUのレジスタに読み出す等の準備処理が行われる。また、当該発音チャンネルの楽音生成処理後には次回の処理のため、前記レジスタ値をメモリに書き込む必要がある。すなわち、各発音チャンネルの楽音波形サンプルデータを1サンプルずつ生成するようにしていたために、楽音を生成する楽音生成処理以外の準備処理に多くのCPUの演算時間が費やされてしまい(つまり、CPUのオーバヘッドが大きくなる)、それに伴って演算効率が悪くなって応答や楽音生成処理が遅くなることが生じていた。
【0003】
そこで、こうしたソフト音源での楽音生成処理を高速に行うために、CPUのオーバヘッドを小さくすることのできる楽音生成方法が本出願人により既に出願済みである(特開平9−044160号参照)。この楽音生成方法を適用した従来の楽音生成装置で実行する楽音生成処理概要について、図13を用いて簡単に説明する。図13は、従来の楽音生成装置の楽音生成処理概要を説明するための概念図である。ただし、この図13では、所定の音色が割り当てられた発音チャンネルCh1(例えばピアノ音色である1ボイス)〜発音チャンネルCh8(例えばドラム音色である1ボイス)毎に64サンプル分の楽音波形サンプルデータを生成し(これをフレーム処理と呼ぶ)、該生成した各発音チャンネル毎の64サンプル分の楽音波形サンプルデータに基づき全発音チャンネル分の楽音生成処理を実行する楽音生成装置を示している。
【0004】
まず、各フレーム処理1〜フレーム処理3において、発音を割り当てられている各発音チャンネル毎(ここでは、Ch1〜Ch8までの8チャンネル分)に、所定のサンプリング周期に従って波形メモリから読み出した1乃至複数の原波形データ(サンプル波形とも呼ぶ)に基づき複数の楽音波形サンプルデータを生成する(▲1▼楽音波形サンプルの生成)。すなわち、所定のサンプリング周期(例えば、デジタル・アナログ変換器の変換タイミングなど)に対応する周波数ナンバをサンプリング周期毎に累算することによって算出される累算Fナンバ(整数部と小数部とを含むアドレスであって、読み出しアドレスとも呼ぶ)の整数部に応じて、所定の波形メモリに記憶されている原波形データを読み出す。そして、波形メモリから前記読み出しアドレスの整数部に応じて読み出した原波形データを前記読み出しアドレスの小数部に応じて補間し、該補間処理で得られた波形データに対してフィルタ制御や振幅制御などの各種制御を施すことによって1サンプル分の楽音波形サンプルデータを生成する。これを各発音チャンネル毎に複数サンプル分繰り返し、各発音チャンネルにおいて複数の楽音波形サンプルデータ、例えば64サンプル分の楽音波形サンプルデータをまとめて生成する。次に、生成した複数の楽音波形サンプルデータの1つ1つについて、Ch1〜Ch8までの全ての発音チャンネル分累算する(▲2▼Ch1〜Ch8の累算)。すなわち、生成された各発音チャンネル毎の複数楽音波形サンプルデータを全発音チャンネルにわたって累算し、該累算した結果の複数の累算サンプルデータを出力バッファ(ただし、図13では出力バッファA及び出力バッファBのダブルバッファ構成のものを示した)に書き込む。つまり、波形合成を行う。そして、出力バッファに書き込んだ累算サンプルデータに基づき楽音波形の生成を行う(▲3▼出力バッファからの読み出し)。すなわち、出力バッファに記憶された複数の累算サンプルデータを、上記サンプリング周期毎に1サンプルずつ順次に読み出すことによって、各フレーム処理において全発音チャンネル分を合成した楽音波形を複数サンプル生成する。
【0005】
上述したように、従来の楽音生成装置では各発音チャンネルの楽音波形サンプルデータを演算する際に複数サンプル分をまとめて生成する(▲1▼楽音波形サンプルの生成参照)。こうした場合には、複数の楽音波形サンプルデータの演算について1回だけ各発音チャンネルに対する準備処理を行えばよい。すなわち、各チャンネル毎に適用すべき各種制御パラメータ(例えばフィルタ制御や振幅エンベロープ制御)の切替などの準備処理を楽音波形サンプルデータを1サンプル生成する度に行わずにすむ。したがって、準備処理の回数を減らすことができることから、それに伴いCPUのオーバヘッドを小さくすることができるようになっている。
【0006】
また、上述したようなCPUに楽音生成処理のためのアプリケーションプログラムを実行させて楽音を生成するソフト音源を適用した楽音生成装置において、プログラムカウンタを1つずつインクリメントして、その進行に従って楽音生成処理のための各命令が実行されていくようにすると、プログラムが高速に実行されて効率的に楽音生成処理を行うことができる。他方、プログラム内に分岐命令がある場合には、プログラムカウンタをその分岐先のアドレスに一旦ジャンプさせ、その分岐処理が終わるとプログラムカウンタを分岐前の元の値に戻さなくてはならない。こうしたプログラムカウンタを前後に飛ばす処理を行うと、その分だけプログラムの実行は遅くなる。さらに、CPUがパイプライン処理によりプログラムにおける各命令を処理しているような場合には、こうした非効率の度合いがより大きくなることが知られている。
【0007】
【発明が解決しようとする課題】
ところで、上述したような従来の楽音生成装置では各発音チャンネルの楽音波形サンプルデータを複数サンプル分まとめて生成する際に、波形メモリから原波形データを読み出すための読み出しアドレスが波形メモリにおける当該原波形データの終端側アドレス(これをエンドポイントと呼ぶ)を超えているか否かの判定(これを終端チェック処理と呼ぶ)を1回1回の原波形データの読み出し毎に(つまり、1サンプル分の楽音波形サンプルデータ生成毎に)行っている。すなわち、波形メモリから原波形データを読み出す際において、読み出しアドレスが読み出すべき原波形データのアドレス範囲を超えている場合には、原波形データをループ読み出しするために波形メモリにおける原波形データの最初の波形メモリアドレス(これをループポイントと呼ぶ)から読み出しを行わなければならない。そのために、1回1回の原波形データの読み出し毎に該読み出しアドレスが波形メモリにおける当該原波形データの終端側アドレスを超えているか否かの判定を行っている。しかし、こうした終端チェック処理はプログラムにおける分岐命令で行われ、そうした分岐命令が1回1回の原波形データの読み出し毎に実行されているためにプログラムの実行が遅くなる、つまりCPUのオーバヘッドが大きく演算効率が悪くなってしまうことから、応答や楽音生成処理が遅く不都合である、という問題点があった。
【0008】
本発明は上述の点に鑑みてなされたもので、発音チャンネル毎に複数の楽音波形サンプルデータを生成する際に、読み出しアドレスが該波形メモリにおける当該原波形データの終端側アドレスを超えているか否かを判定する終端チェック処理の分岐判断を1回1回の原波形データの読み出し毎に行うことのない、CPUのオーバヘッドが小さく、楽音生成処理を効率よく実行することができるようにした楽音生成装置及びプログラムを提供することを目的とする。
【0009】
【課題を解決するための手段】
本発明に係る楽音生成装置は、波形の複数サンプル値をアドレスに対応付けて所定のアドレス範囲内に記憶する記憶手段と、生成すべき楽音に応じて前記記憶手段から読み出すべき所定の複数サンプル分の読み出しアドレスを、予め算出し記憶する波形メモリ読出手段と、前記波形メモリ読出手段に記憶された前記複数サンプル分の読み出しアドレスに応じて前記記憶手段から前記サンプル値を読み出し、該読み出したサンプル値に基づき楽音波形サンプルデータを生成する制御手段と、前記生成した楽音波形サンプルデータを所定のサンプリング周期で出力する出力手段とを具備し、前記制御手段は、前記波形メモリ読出手段に記憶された前記読み出しアドレスが前記記憶手段における前記所定のアドレス範囲の終端アドレスを超えた場合に、超えた分の読み出しアドレスを前記所定のアドレス範囲の先端アドレスからのアドレスに変換し、該変換したアドレスに応じて前記記憶手段から前記サンプル値を読み出すことを特徴とするものである。
【0010】
この発明によると、波形の複数サンプル値をアドレスに対応付けて所定のアドレス範囲内に記憶する記憶手段から、生成すべき楽音に応じて読み出すべき所定の複数サンプル分の読み出しアドレスを、予め算出し記憶しておき、前記記憶された複数サンプル分の読み出しアドレスに応じて前記記憶手段から前記サンプル値を読み出し、該読み出したサンプル値に基づき楽音波形サンプルデータを生成し、前記生成した楽音波形サンプルデータを所定のサンプリング周期で出力する。前記制御手段は、前記波形メモリ読出手段に記憶された前記読み出しアドレスが前記記憶手段における前記所定のアドレス範囲の終端アドレスを超えた場合に、超えた分の読み出しアドレスを前記所定のアドレス範囲の先端アドレスからのアドレスに変換し、該変換したアドレスに応じて前記記憶手段から前記サンプル値を読み出すことから、楽音生成処理時における演算処理にかかる処理負荷を低減することができ、楽音の生成を効率的に行うことができるようになる。すなわち、楽音波形サンプルデータを生成する際に、記憶手段に記憶された原波形(波形の複数サンプル値)の読み出しのために参照する読み出しアドレスが当該原波形の終端アドレスを超えているか否かの分岐制御(分岐命令)による終端チェック処理を、1回1回の原波形の読み出し毎に行うことがないので、CPUのオーバヘッドをより小さくすることができ、楽音生成処理を効率よく実行することができるようになる。
【0011】
本発明は、装置の発明として構成し、実施することができるのみならず、方法の発明として構成し実施することができる。また、本発明は、コンピュータまたはDSP等のプロセッサのプログラムの形態で実施することができるし、そのようなプログラムを記憶した記憶媒体の形態で実施することもできる。
【0012】
【発明の実施の形態】
以下、添付図面を参照してこの発明の実施の形態を詳細に説明する。
【0013】
図1は、この発明に係る楽音生成装置の全体構成の一実施例を示すハード構成ブロック図である。ここに示された楽音生成装置のハードウエア構成例はコンピュータを用いて構成されており、そこにおいて、各発音チャンネル毎に所定サンプル数の楽音波形サンプルデータを生成するための「楽音波形サンプル生成処理」(後述する図7及び図8参照)等の各種制御処理は、コンピュータが各種制御処理を実現する所定の制御プログラムを含むソフトウエアを実行することにより実施される。勿論、これらの各種制御処理はコンピュータソフトウエアの形態に限らず、DSPによって処理されるマイクロプログラムの形態でも実施可能であり、また、この種のプログラムの形態に限らず、ディスクリート回路又は集積回路若しくは大規模集積回路等を含んで構成された専用ハードウエア装置の形態で実施してもよい。
なお、本発明に係る楽音生成装置は、パーソナルコンピュータは言うに及ばず、電子楽器やカラオケ装置又は電子ゲーム装置、あるいは携帯電話やPDA(Personal Data(Digital) Assistants)などのマルチメディア機器等、任意の製品応用形態をとっているものであってもよい。
【0014】
本実施例に示す楽音生成装置は、マイクロプロセッサユニット(CPU)1、タイマ2、リードオンリメモリ(ROM)3、ランダムアクセスメモリ(RAM)4からなるマイクロコンピュータによって制御されるようになっている。CPU1は、この楽音生成装置全体の動作を制御するものである。このCPU1に対して、データ及びアドレスバス1Dを介してROM3、RAM4、MIDIインタフェース(I/F)5、操作子6、ディスプレイ7、外部記憶装置8、DMA(Direct Memory Access)コントローラ9がそれぞれ接続されている。更に、CPU1には、タイマ割込み処理(インタラプト処理)における割込み時間や各種時間を計時するタイマ2が接続されている。例えば、タイマ2はクロックパルスを発生し、発生したクロックパルスをCPU1に対して処理タイミング命令として与えたり、あるいはCPU1に対してインタラプト命令として与える。CPU1は、これらの命令に従って「楽音波形サンプル生成処理」等の各種処理を実行する。
【0015】
ROM3は、CPU1により実行あるいは参照されるソフト音源を実現するためのアプリケーションプログラムなどの各種制御プログラム、プリセットされた音色データや原波形データ(この実施例では、一例として圧縮されたDPCM波形とする)等の各種データを格納するものである。RAM4は、CPU1が所定のプログラムを実行する際に発生する各種データなどを一時的に記憶するワーキングエリア、あるいは現在実行中の制御プログラムやそれに関連するデータを記憶するメモリ等として使用される。RAM4の所定のアドレス領域がそれぞれの機能に割り当てられ、レジスタやフラグ、テーブル、メモリなどとして利用される。この実施例では、例えば音色データエリア、入力バッファエリア、チャンネルレジスタエリア、出力バッファエリア、サンプル情報バッファエリア等のそれぞれの記憶エリアに所定のデータが記憶される。こうした記憶エリアの詳細な説明については後述することから、ここでの説明を省略する。また、これらの記憶エリア以外に、RAM4の所定幅のメモリ領域を予めループバッファ(すなわち、所定メモリ範囲のバッファエリアを超えてデータが書き込まれようとした場合に、バッファエリアを超えて書き込もうとしたデータを自動的に該バッファエリアの先頭から書き込むバッファ)として使用するようにセットしておく。この実施例に示す楽音生成装置では、複数楽音波形サンプルデータ生成の際に必要な原波形データ(DPCM波形)をROM3あるいはRAM4などに構成された波形メモリから読み出し、該読み出した原波形データ(DPCM波形)をPCM化したPCMサンプル波形をループバッファに順次に記憶する。そして、このループバッファに記憶されたPCMサンプル波形に基づき波形補間を行って複数の楽音波形サンプルデータを生成するようにしている(詳しくは後述する)。
【0016】
MIDIインタフェース(I/F)5は、当該楽音生成装置に接続された外部のMIDI機器(図示せず)からMIDI規格の楽音データ(つまりMIDIデータ)を当該楽音生成装置へ入力したり、あるいは当該楽音生成装置からMIDIデータを外部のMIDI機器へ出力するためのインタフェースである。外部のMIDI機器としてはユーザの操作に応じてMIDIデータを発生するMIDIキーボードや一連のMIDIデータを順次に送信するシーケンサ、あるいはMIDIデータに基づいて楽音を発生する外部音源モジュールや電子楽器など、各種MIDI機器であればどのようなものであってもよい。こうしたMIDIインタフェース5は専用のMIDIインタフェースを用いるものに限らず、RS-232C、USB(ユニバーサル・シリアル・バス)、IEEE1394(アイトリプルイー1394)等の汎用のインタフェースを用いてMIDIインタフェース5を構成するようにしてよい。そうした場合、MIDIデータ以外のデータをも同時に送受信するようにしてもよい。MIDIインタフェース5として上記したような汎用のインタフェースを用いる場合には、外部のMIDI機器はMIDIデータ以外のデータも送受信できるようにしてよい。勿論、楽音生成装置と外部のMIDI機器との間で送受信するデータに関するデータフォーマットはMIDI形式のデータに限らず、他の形式であってもよく、その場合はMIDIインタフェース5と外部のMIDI機器はそれにあった構成とする。
【0017】
操作子6は、操作子の操作状態を検出し、その操作状態に応じたスイッチ情報をデータ及びアドレスバス1Dを介してCPU1に出力する。操作状態を検出する対象の操作子としては、例えば音高、音色、効果等を選択・設定・制御するために用いる数値データ入力用のテンキーや文字データ入力用のキーボード、あるいはディスプレイ7に表示される所定のポインティングデバイスを操作するために用いるマウスなどの各種操作子がある。ディスプレイ7は例えば液晶表示パネル(LCD)やCRT等から構成され、ROM3あるいはRAM4などに記憶されている音色データや原波形データなどを所定の表示態様で表示するのは勿論のこと、それ以外にもCPU1の制御状態などを表示することができる。外部記憶装置8は、ソフト音源を実現するためのアプリケーションプログラムなどの各種制御プログラム、プリセットされた音色データや原波形データ等の各種データなどを記憶するものである。例えば、前記ROM3に制御プログラムが記憶されていない場合、この外部記憶装置8(例えばハードディスク)に制御プログラムを記憶させておき、それをRAM4に読み込むことにより、ROM3に制御プログラムを記憶している場合と同様の動作をCPU1にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。なお、外部記憶装置8はハードディスク(HD)に限られず、フレキシブルディスク(FD)、コンパクトディスク(CD‐ROM・CD‐RW)、光磁気ディスク(MO)、あるいはDVD(Digital Versatile Disk)等の着脱自在な様々な形態の外部記憶媒体を利用する記憶装置であればどのようなものであってもよい。半導体メモリなどであってもよい。
【0018】
DMAコントローラ9は、複数の楽音波形サンプルデータを生成する際に必要とされる原波形データを、ROM3あるいはRAM4などに構成される波形メモリから1乃至複数分まとめてDMA方式(ダイレクトメモリアクセス方式)で読み出し、CPU1内部にある内部RAM(内部メモリ)1aに供給するためのものである。すなわち、DMAコントローラ9は楽音波形サンプルデータ生成時において、デジタル・アナログ変換器(DAC)9Aのサンプリング周波数(例えば48kHz)に合わせたタイミングで、かつ、所定の複数サンプル数(一例として64サンプル)分を1単位として該1単位分の楽音波形サンプルデータを生成するのに必要な原波形データをROM3あるいはRAM4から読み出す。こうしたDMAコントローラ9による原波形データの読み出しについては、後述する(後述の図11参照)。デジタル・アナログ変換器(DAC)9Aは、所定のサンプリング周期毎に出力バッファから読み出した累算サンプルデータを、アナログ信号に変換するものである。このデジタル・アナログ変換器(DAC)9Aでアナログ変換された累算サンプルデータはアンプやスピーカなどを含むサウンドシステム9Bに送られて、該サウンドシステム9Bから音響的に発音されるようになっている。
【0019】
なお、上述したような楽音生成装置は操作子6やディスプレイ7などを1つの装置本体に内蔵したものに限らず、それぞれが別々に構成され、MIDIインタフェースや各種ネットワーク等の通信手段を用いて各装置を接続するように構成されたものであってもよいことは言うまでもない。
【0020】
上述したように、図1に示した楽音生成装置におけるRAM4は各種データを記憶するための記憶エリアを有している。そこで、その内の音色データを記憶する音色データエリアを図2に、入力バッファを記憶する入力バッファエリアを図4に、チャンネルレジスタを記憶するャンネルレジスタエリアを図5に、出力バッファを記憶する出力バッファエリアを図6にそれぞれ示す。ただし、説明の便宜上、サンプル情報バッファエリアについては後述する(後述の図9参照)。
【0021】
図2は、RAM4上の音色データエリアの一実施例を示す概念図である。この図2に示す音色データエリアにおいて、PD1、PD2、・・・、PD16は16種類分の音色データであり、それぞれの音色データは各音域に対応する原波形データを指定するデータ(つまり各音域波形指定)、ビブラート等をかける時に使用するLFO(Low Frequency Oscillator)制御用のオリジナルデータ、振幅を制御するエンベロープの発生(AEG)制御用のオリジナルデータ、その他のオリジナルデータからなっている。ソフト音源が使用する発音用のデータは、発音指示時のタッチデータや音高データ等に応じてこれらのオリジナルデータに加工を施すことにより生成される。また、WD1、WD2、・・・、WDnはROM3や外部記憶装置8から読み出してRAM4の当該エリアに書き込んだ複数のサンプル波形からなるオリジナル波形データであり、入力される音高データに応じて、PD1、PD2、・・・、PD16の音色データにおける各音域波形指定データによりいずれかのオリジナル波形データが指定される。すなわち、WD1、WD2、・・・、WDnは、各々が波形メモリを構成する1音色毎の原波形データである。
【0022】
ここで、ROM3やRAM4(あるいは外部記憶装置8など)に構成される波形メモリに記憶されるオリジナル波形データ(原波形データ)について、図3を用いて説明する。図3は、オリジナル波形データのデータ構成を説明するための概念図である。ただし、この図3に示す実施例では所定の1音色分の連続するオリジナルのアナログ波形を8000サンプルに分け、各サンプル毎に差分値を記憶するDPCM波形のような波形サンプルデータ方式のものを示した。
【0023】
この図3(a)及び図3(b)に示した各図から理解できるように、波形メモリに記憶されるオリジナル波形データは所定のサンプリング周波数に伴うサンプリング周期毎に各時点における波形メモリ値(ここでは、1つ前の波形の振幅値と当該波形の振幅値との差分値)を記憶するものであり、各波形メモリ値に対しては各々のサンプル波形を記憶した波形メモリ位置、つまり波形メモリにおける所定の記憶領域のアドレス番号(波形メモリアドレス)が付される。ただし、この実施例では処理の都合上、波形メモリアドレス「‐1」の波形メモリ値を特別なものとして「0」固定としている。すなわち、波形メモリアドレス「‐1」である1番目のサンプル波形は振幅「0」の特別な波形である。また、オリジナル波形データをDPCM波形として構成した場合、各サンプル波形の波形メモリ値には1つ前のサンプル波形との差分値が設定されている。オリジナルのアナログ波形が図3(b)に示す曲線のような波形である場合、1番目のサンプル波形(振幅「0」)と2番目のサンプル波形との差分が「Δ0」、2番目のサンプル波形と3番目のサンプル波形との差分が「Δ1」、3番目のサンプル波形と4番目のサンプル波形との差分が「Δ2」、4番目のサンプル波形と5番目のサンプル波形との差分が「Δ3」であることから、図3(a)に示すような波形メモリ値を各波形メモリアドレス毎にそれぞれ持っている原波形データが記憶されることになる。
【0024】
このような波形メモリを利用して楽音波形サンプルデータを生成する場合には、該記憶した波形メモリ値を所定のサンプリング周期で周波数ナンバを累算することにより算出される累算Fナンバ(読み出しアドレス)の整数部に対応する波形メモリアドレスの波形メモリ値を取り出し、それらを順次に加算してサンプル波形の振幅とする。すなわち、各サンプル波形の波形メモリ値には1つ前のサンプル波形との差分値が設定されていることから、当該サンプル波形を求める場合には1つ前の波形に対して差分値を加算する。例えば、波形メモリアドレス「‐1」である1番目のサンプル波形は振幅「0」の波形である。次に、波形メモリアドレス「0」である2番目のサンプル波形の波形メモリ値は「Δ0」であることから、2番目のサンプル波形は振幅「0」の波形に対して、アドレス「0」で示される先の記憶領域に記憶された波形メモリ値「Δ0」を加算した振幅「0+Δ0」の波形である。これを続けていくと、例えば波形メモリアドレス「3」である5番目のサンプル波形は、4番目のサンプル波形の振幅(0+Δ0+Δ1+Δ2)に波形メモリ値「Δ3」を加算した振幅「0+Δ0+Δ1+Δ2+Δ3」の波形となる。なお、上述したように、この実施例では波形メモリアドレス「‐1」に波形メモリ値「0」を定義している。一般的に波形メモリアドレスは「0」以上の整数値で表わすようにすることが多いが、この実施例では波形メモリアドレスの開始位置を「‐1」から始まるものとして、オリジナル波形全体を波形メモリアドレス上で便宜的にシフトすることによって、後述する「楽音波形サンプル生成処理」(図7及び図8参照)を単純化することができるようにしている。このようなプログラムの単純化によって、「楽音波形サンプル生成処理」を少しでも速く実行することができるようになり、効率的に楽音を生成することができるようにもしている。
【0025】
RAM4の記憶エリアの説明に戻って、図4はRAM4上の入力バッファエリアの一実施例を示す概念図である。この図4に示す入力バッファエリアにはMIDIインターフェース5を介して入力されるノートオン、ノートオフなどの各種イベントに対応するMIDIイベントデータID1、ID2、ID3、・・・が読み出されることにより、そのイベント処理が楽音生成装置内において実行される。このMIDIイベントデータID1、ID2、ID3、・・・はMIDIイベントのデータ内容(例えばデータ1内容)と、そのデータの発生時刻(例えばデータ1発生時刻)とにより構成される。この発生時刻はMIDIイベントデータ受信時にタイマ2の現在時刻を取り込むことにより知ることができる。
【0026】
図5は、RAM4上のチャンネルレジスタエリアの一実施例を示す概念図である。この図5に示すチャンネルレジスタエリアは、それぞれ互いに独立した複数の楽音の生成を制御するためのデータを記憶するチャンネル(Ch)レジスタとして使用され、この例では1Ch、2Ch、・・・、8Chの8チャンネル分のエリアが用意されている。各チャンネルのエリアはノートナンバ、波形指定データ、LFO制御データ、振幅エンベロープ(AEG)制御データ、ノートオンデータ、その他のデータ、及びCPU1がプログラム実行時に使用するワークエリアからなっている。この波形指定データ、LFO制御データ、AEG制御データは前記した各オリジナルデータに加工が施された発音用のデータである。
【0027】
図6は、RAM4上の出力バッファエリアの一実施例を示す概念図である。この図6に示すエリアは複数の出力バッファ用のエリアであり、この実施例では出力バッファAと出力バッファBとが順次交代して発音波形生成用の出力バッファとして使用されている。この出力バッファは、所定の演算処理(図示せず)により生成された各発音チャンネルの累算サンプルデータSD1、SD2、SD3、・・・が生成される毎にチャンネル累算され格納される。出力バッファのいずれかが発音波形生成用の出力バッファとして指定され、波形生成演算に使用される(図13の▲2▼Ch1〜Ch8の累算及び▲3▼出力バッファからの読み出し参照)。この出力バッファは2つ以上用意される。最も簡単な構成としては出力バッファを2個とし、片方に格納されているデータをDMA9に渡して再生している間に、もう片方に演算した次の累算サンプルデータを格納するダブルバッファ構成とすることができる。なお、出力バッファのサイズは、100ワード、500ワード、1Kワード、5Kワード等任意に設定することができるが、サイズを大きくすると発音に遅れを生じ、サイズを小さくすると時間的マージンが減少し、一時的な演算量の増加時に応答が悪くなることになる。そこで、リアルタイム性が要求されない、例えばシーケンサ演奏等の場合は、演奏タイミングを前にずらすことにより発音遅れを吸収できるため、出力バッファのサイズを大きくすることができる。一方、リアルタイムの演奏が必要とされる、例えば鍵盤演奏等の場合は、発音遅れを防止するため、バッファサイズは100〜200ワードとするとよい。以上は、再生のサンプリング周波数が40kHz〜50kHzの場合であり、サンプリング周波数を低く設定する場合は、発音遅れを防止するためにもっと小さいサイズにする必要がある。
【0028】
図1に示す本発明に係る楽音生成装置では、図13に示した従来の楽音生成処理で実行している処理手順と同様の処理手順に従って楽音を生成する。すなわち、所定のサンプリング周期に従って波形メモリから読み出した1乃至複数の原波形データに基づいて各発音チャンネル毎に複数の楽音波形サンプルデータを生成し(図13の▲1▼楽音波形サンプルの生成参照)、該生成した複数楽音波形サンプルデータの1つ1つについて全ての発音チャンネル分を累算した結果の複数の累算サンプルデータを出力バッファに書き込み(図13の▲2▼Ch1〜Ch8の累算参照)、該出力バッファに書き込んだ累算サンプルデータに基づいて楽音波形の生成を行う(図13の▲3▼出力バッファからの読み出し参照)。ただし、既に説明したように、上記の各発音チャンネル毎に複数の楽音波形サンプルデータを生成する際に(▲1▼楽音波形サンプルの生成)、読み出しアドレスが波形メモリにおける当該原波形データの終端側アドレスを超えているか否かを判定する終端チェック処理を1回1回の原波形データの読み出し毎に行うとCPUのオーバヘッドが大きくなり都合が悪い。そこで、図1に示す楽音生成装置では▲1▼楽音波形サンプルの生成時において、複数の楽音波形サンプルデータをまとめて生成するために必要な原波形データを、所定のサンプリング周期に応じて算出される読み出しアドレスに従って波形メモリから読み出す際に1回1回の読み出し毎に終端チェック処理を行うことがないように、所定のループバッファを用いて楽音波形サンプルデータを生成する。こうすることにより、CPUのオーバヘッドをより小さくすることができるようにしている。
【0029】
そこで、上述したループバッファを用いて楽音波形サンプルデータを生成する処理、つまり1回1回の読み出し毎に終端チェック処理を行うことなしに波形メモリから原波形データを読み出すことができ、効率的に各発音チャンネル毎に複数の楽音波形サンプルデータを生成することのできる「楽音波形サンプル生成処理」について、図7及び図8を用いて説明する。図7は「楽音波形サンプル生成処理」における前半部分の処理の一実施例を示すフローチャートであり、図8は「楽音波形サンプル生成処理」における後半部分の処理の一実施例を示すフローチャートである。すなわち、図7に示した前半処理に引き続き、図8に示した後半処理が実行される。以下、図7及び図8に示した各々のフローチャートに従って、当該「楽音波形サンプル生成処理」の動作について説明する。ただし、ここでは各フレーム処理において、各発音チャンネル毎に64サンプル分の楽音波形サンプルデータを生成する場合を例にして説明する。
【0030】
まず、図7に示したフローチャートに従って、「楽音波形サンプル生成処理」における前半部分の処理動作について説明する。
ステップS1では、ループカウンタを「0」にセットする。このループカウンタは、各発音チャンネル毎に生成する楽音波形サンプルデータの数だけカウントされる変数である。すなわち、楽音波形サンプルデータを生成するタイミングである所定のサンプリング周期毎に「1」ずつ加算されるようにしてカウントされる。この実施例においては各フレーム処理において、各発音チャンネル毎に64サンプル分の楽音波形サンプルデータを生成するようにしたことから、該ループカウンタはサンプリング周期に従って「0」〜「63」までの64サンプル分の値を取り得る。ステップS2では、累算Fナンバの算出を行う。累算Fナンバは、所定のサンプリング周期に従う周波数ナンバ(Fナンバ)をループカウンタのカウント進行に応じて、つまりサンプリング周期毎に順次に加算することによって算出する。例えば、Fナンバが「2.4」である場合、累算Fナンバはループカウンタの進行に応じて「0.0」「2.4」「4.8」「7.2」・・・のように順次算出される。この累算Fナンバの整数部は波形メモリアドレスに対応するものであることから、この累算Fナンバの整数部に対応する波形メモリアドレスを持つ原波形データを波形メモリから読み出すことができるようになっている。こうして算出される累算Fナンバに基づき補間係数を求め、求めた補間係数を上記ループカウンタと共にサンプル情報バッファ(後述する図9参照)に保存する(ステップS3)。補間係数は累算Fナンバの小数部であって、後述する波形補間処理(図8のステップS24参照)実行時に用いられる。例えば、累算Fナンバが「2.4」である場合には補間係数は「0.4」となるし、累算Fナンバが「4.8」である場合には補間係数は「0.8」となる。
【0031】
ステップS4では、波形メモリアドレス増分値を算出してサンプル情報バッファに保存する。すなわち、上記ステップS2において算出した累算Fナンバに対応する楽音波形サンプルデータを生成するためには、該累算Fナンバに近い前後の波形メモリアドレスの原波形データを波形メモリから読み出して波形補間を行うことが必要である。そこで、こうした楽音波形サンプルデータを生成するための累算Fナンバに対応する波形メモリアドレスを増分値でサンプル情報バッファに保存する。例えば、累算Fナンバが「4.8」と算出されており、その1つ前の累算Fナンバが「2.4」であった場合には、該波形メモリアドレス増分値を「2」(つまり、[累算Fナンバ「4.8」の整数部である「4」]−[1つ前の累算Fナンバ「2.4」の整数部である「2」])に決定する。そして、後述するように、該波形メモリアドレス増分値「2」に従ってループバッファに記憶された原波形データをデコードしたPCMサンプル波形を読み出すためのアドレスを求め、これに基づいて波形補間に必要なPCMサンプル波形をループバッファから読み出し、読み出したPCMサンプル波形に基づき波形補間を行うことにより各累算Fナンバに対応する楽音波形サンプルデータを生成する(後述する図8のステップS22〜ステップS24参照)。
【0032】
ステップS5では、ループカウンタに「1」を加算する。ステップS6では、ループカウンタが63より大きい値であるか否かを判定する。ループカウンタが63より大きい値でない場合、つまりループカウンタが63以下である場合には(ステップS6のNO)、ステップS2の処理に戻って上記ステップS2〜ステップS6までの処理を繰り返し実行する。他方、ループカウンタが63より大きい値である場合、つまりループカウンタが64となった場合には(ステップS6のYES)、ステップS7の処理へ行く。このように上記したステップS2〜ステップS6までの処理を繰り返し実行することで、64サンプル分の楽音波形サンプルデータを生成するために必要なサンプル情報バッファをRAM4上に順次に生成していくようになっている。すなわち、波形補間係数と波形取得サンプル位置(波形メモリアドレス増分値)とを64サンプル分取得する。
【0033】
ここで、上記ステップS2〜ステップS6までの処理を繰り返すことによって、RAM4上に生成されるサンプル情報バッファエリアについて、図9を用いて説明する。図9は、RAM4上のサンプル情報バッファエリアの一実施例を示す概念図である。
【0034】
この図9から理解できるように、各発音チャンネル毎に生成されるサンプル情報バッファ(エリア)は、ループカウンタ「0」から「63」までの64サンプルそれぞれの各サンプル位置に応じて、上記ステップS3で算出した補間係数(つまり、累算Fナンバの小数部)と上記ステップS4で決定した波形メモリアドレス増分値とを記憶する。ここでは、ループカウンタが1増える毎に、累算Fナンバが「2.4」ずつ増加している場合に記憶される各データ内容を例に示した。
ループカウンタの増加に伴い、累算Fナンバは「0.0」「2.4」「4.8」「7.2」…「151.2」となり、累算Fナンバの小数部が補間係数であることから、この場合における補間係数は「0.0」「0.4」「0.8」「0.2」…「0.2」となる。波形取得サンプル位置(波形メモリアドレス増分値)は1つ前の累算Fナンバの整数部と該累算Fナンバの整数部との増加分であることから、この場合における波形メモリアドレス増分値は「0」「2(2-0)」「2(4-2)」「3(7−4)」…「3(151−148)」となる。
【0035】
なお、上述した「楽音波形サンプル生成処理」においては算出した累算Fナンバをサンプル情報バッファに記憶することなく、累算Fナンバの小数部のみを補間係数として(ステップS3参照)、累算Fナンバの整数部の増分値を波形メモリアドレス増分値として(ステップS4参照)記憶するようにしたが、こうした補間係数や波形メモリアドレス増分値を記憶する代わりに、累算Fナンバのみをそのまま記憶するようにしてもよい。ただし、そうした場合には、該累算Fナンバから小数部や整数部のみを取りだし、小数部を補間係数として補間処理を行ったり、整数部から波形メモリアドレス増分値を算出する必要があることは言うまでもない。勿論、補間係数や波形メモリアドレス増分値と共に累算Fナンバを記憶しておくようにしてもよい。
【0036】
図7に示すフローチャートの説明に戻って、ステップS7では各チャンネル毎において64サンプル分の楽音波形サンプルデータを取り出す処理(つまり1回のフレーム処理)で処理する範囲の終端側アドレス(これをフレーム処理のエンドポイントと呼び、pEと略示する)を取得する。例えば、上述した図9に示すようなサンプル情報が生成される場合においては、今回のフレーム処理範囲は累算Fナンバ「0.0」〜「151.2」の範囲であり、該フレーム処理のエンドポイントとしては累算Fナンバの整数部「151」が取得されることになる。ステップS8では、当該フレーム処理が最初のフレーム処理であるか否かを判定する。すなわち、今回の各チャンネル毎において64サンプル分の楽音波形サンプルデータを取り出す処理(フレーム処理)が、第1回目の64サンプル分を取り出す処理であるか否かを判定する。当該処理が最初のフレーム処理であると判定された場合には(ステップS8のYES)、当該フレーム処理で処理する範囲のうちの始端側アドレス(これをスタートポイントと呼び、pSと略示する)として1音色の波形メモリの始端側アドレス(これを1音色の波形ROMのスタートポイントと呼び、rSと略示する)を設定し(ステップS9)、ステップS15の処理へジャンプする。
【0037】
一方、当該フレーム処理が最初のフレーム処理であると判定されなかった場合、つまり2回目以降のフレーム処理であると判定された場合には(ステップS8のNO)、1つ前のフレーム処理の終端側アドレス(これを前フレーム処理のエンドポイントと呼び、pE´と略示する)と今回のフレーム処理のエンドポイント(pE)とが同じ位置であるか否かを判定する(ステップS10)。前フレーム処理のエンドポイント(pE´)と今回のフレーム処理のエンドポイント(pE)とが同じ位置であると判定された場合には(ステップS10のYES)、現在の波形読み出しアドレス(つまり累算Fナンバ)を次の64ポイント生成のために保存し(ステップS11)、後述の図8に示すフローチャートに示すステップS24の処理へジャンプする。1つ前のフレーム処理のエンドポイント(pE´)と今回のフレーム処理の範囲のエンドポイント(pE)とが同じ位置であると判定されなかった場合には(ステップS10のNO)、フレーム処理のスタートポイント(pS)として前のフレーム処理のエンドポイント(pE´)に「1」を加算したものを設定する(ステップS12)。
【0038】
ステップS13では、上記ステップS12において設定されたフレーム処理のスタートポイント(pS)が1音色の波形ROMのスタートポイント(rS)よりも大きい値であるか否かを判定する。フレーム処理のスタートポイント(pS)が1音色の波形ROMのスタートポイント(rS)よりも大きい値であると判定された場合には(ステップS13のYES)、新たなフレーム処理の範囲のスタートポイント(pS)としてフレーム処理のスタートポイント(pS)から1音色の波形ROMのアドレス幅(これをwLEと略示する)を減算したものを再設定すると共に、新たなフレーム処理の範囲のエンドポイント(pE)として現在のフレーム処理のエンドポイント(pE)から1音色の波形ROMのアドレス幅(wLE)を減算したものを再設定する(ステップS14)。前記1音色の波形ROMのアドレス幅(wLE)は、1音色の波形ROMの終端側アドレス(これを1音色の波形ROMのエンドポイントと呼び、rEと略示する)から1音色の波形ROMにおいてループ読み出しを行うアドレス(これをループポイントと呼び、rLと略示する)を減算することにより求められるアドレス幅である。ステップS15では、フレーム処理の中のループポイントからエンドポイント間の処理回数(これをLTと略示する)を「−1」に初期化する。このステップS15の処理までが前半部分の処理であり、該処理を終了すると図8に示す後半部分の処理が引き続いて実行される。
【0039】
図8に示すフローチャートにおいて、ステップS16ではフレーム処理のエンドポイント(pE)が1音色の波形ROMのエンドポイント(rE)よりも大きいか否かを判定する。フレーム処理のエンドポイント(pE)が1音色の波形ROMのエンドポイント(rE)よりも大きいと判定された場合には(ステップS16のYES)、新たなフレーム処理のエンドポイント(pE)として現在のフレーム処理のエンドポイント(pE)から1音色の波形ROMのループアドレス幅(wLE)を減算したものを再設定すると共に、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)に「1」を加算する(ステップS17)。そして、所定のフラグに「1」をセットして(ステップS18)、上記ステップS16の処理に戻る。他方、フレーム処理のエンドポイント(pE)が1音色の波形ROMのエンドポイント(rE)よりも大きいと判定されなかった場合には(ステップS16のNO)、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)が「0」より小さいか否かを判定する(ステップS19)。フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)が「0」より小さいと判定された場合には(ステップS19のYES)、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)に対して「0」をセットする(ステップS20)。ステップS21では、波形メモリアドレスを次の64サンプル生成のために保存する。上記ステップS7〜ステップS20までの処理によって、当該フレーム処理のスタートポイント(pS)とエンドポイント(pE)の再設定が行われる。すなわち、後述するステップS22で実行する条件分岐を含まない複数回のROM波形PCM化のループによるバッチ処理において、ループバッファを用いて楽音波形サンプルデータを生成することに伴う処理を実行する。
【0040】
ステップS22では、条件分岐を含まない複数回のROM波形PCM化のループによるバッチ処理を行う。すなわち、このステップS22の処理は、波形メモリから1サンプルずつ原波形データ(DPCM波形)を読み出して、該原波形データをPCM化したPCMサンプル波形をループバッファに書き込む処理である。これについては後述の図10を用いて説明することから、ここでの説明を省略する。ステップS23では、波形補間に使用するPCMサンプル波形を取得する。すなわち、サンプル情報バッファに記憶した波形メモリアドレス増分値に従って波形メモリアドレスを再計算し、該再計算した波形メモリアドレスに基づきループバッファから波形補間に必要な分のPCMサンプル波形を読み出す。この必要な分のPCMサンプル波形の取りだしの際に、上記ステップS7〜ステップS20までの処理によって再設定した当該フレーム処理のスタートポイント(pS)とエンドポイント(pE)を用いる。ステップS24では、読み出したPCMサンプル波形に基づき波形補間を実行する。これにより、64サンプル分の楽音波形サンプルデータを生成する。例えば、波形メモリアドレスが「7」と再計算された場合は、波形補間で使用するPCMサンプルを取り出すべき波形メモリアドレスを「6」と「7」に決定する。そして、波形メモリアドレス「6」と「7」に対応するPCMサンプル波形をループバッファから読み出し、これに基づいて楽音波形サンプルデータを生成する。ステップS25では、次のフレーム処理に具えて所定のフラグをリセットしておく。
【0041】
上述したように、波形メモリに記憶されている原波形データがDPCM波形であるような場合、波形メモリ値には1つ前のサンプル波形との差分値が設定される(図3参照)。そこで、PCMサンプル波形をループバッファに書き込む際には(ステップS22参照)、2以上のPCMサンプル波形をループバッファに書き込む場合がある。すなわち、原波形データがDPCMである場合には、波形メモリに記憶されている波形メモリ値として1つ前のPCMサンプル波形との差分値が設定されていることから、所定位置の当該PCMサンプル波形は1つ前のPCMサンプル波形に差分値を加算して分かる。したがって、1つ前のPCMサンプル波形が分からないと当該位置のPCMサンプル波形も分からない。そこで、こうしたことを避けるために、PCMサンプル波形をループバッファに書き込む際には、1つのループカウンタに対して2以上のPCMサンプル波形をループバッファに書き込むことがある。例えば、図9に示したサンプル情報バッファにおいて、ループカウンタ「3」に対応するPCMサンプル波形をループバッファに書き込む際には、「5」「6」「7」の3つのPCMサンプル波形が書き込まれる。これは、ループカウンタ「3」時における累算Fナンバ「7.2」に対応するPCMサンプル波形を波形補間で生成するには、波形サンプル位置「6」と波形サンプル位置「7」の2つのPCMサンプル波形があればよいのだが、波形サンプル位置「6」のPCMサンプル波形は波形サンプル位置「5」のPCMサンプル波形がないと生成することができない。該ループカウンタ「3」より1つ前のループカウンタ「2」までにおいては、波形サンプル位置「‐1」〜「4」までのPCMサンプル波形を生成するように読み出しサンプルに記憶されている。そこで、ループカウンタ「3」に対応するPCMサンプル波形として、波形サンプル位置「5」を加えた「5」「6」「7」の3つの波形メモリアドレスに対応するPCMサンプル波形が生成されることになる。
【0042】
ここで、上記ステップS22に示した条件分岐を含まない複数回のROM波形PCM化のループによるバッチ処理について、具体例を用いて説明する。この複数回のROM波形PCM化のループによるバッチ処理は、波形メモリ(波形ROM)から1サンプルずつ原波形データ(DPCM波形)を読み出して、該原波形データをPCM化した波形、つまりDPCM波形をデコードした結果のPCMサンプル波形をループバッファに順次に書き込む処理である。該処理では、波形メモリから1サンプルずつ原波形データを読み出す際に、当該フレーム処理の範囲が1音色の波形ROMにおける原波形データの範囲を超えて読み出しを行うものであるか否かによって、波形メモリからの原波形データの読み出し方が異なるようにしている。つまり、1回のフレーム処理において複数の楽音波形サンプルデータを生成するために必要とする原波形データの範囲と1音色の波形ROMにおける原波形データの範囲によって、波形メモリからの原波形データの読み出し方を異ならせる。そこで、こうした条件分岐を含まない複数回のROM波形PCM化のループによるバッチ処理において、フレーム処理の範囲と1音色の波形ROMにおける原波形データの範囲との比較に応じて、どのように波形メモリからの原波形データの読み出し方を異ならせているかについて、図10を用いて説明する。図10は、条件分岐を含まない複数回のROM波形PCM化のループによるバッチ処理について説明するための概念図である。この図10に示す各図では上から順に、1音色の波形ROMにおける原波形データの範囲、1回のフレーム処理において複数の楽音波形サンプルデータを生成するために必要とする原波形データの範囲、波形ROMからの原波形データの読み出し方をそれぞれ示した。
なお、ここでは説明を簡単にするために、1音色の波形ROMのスタートポイント(rS)と1音色の波形ROMのループポイント(rL)とを同じ波形メモリアドレスに設定したものについて説明する。
【0043】
まず、図10(a)は、1回のフレーム処理の範囲のエンドポイント(pE)が1音色の波形ROM範囲のエンドポイント(rE)を超えない場合に行われる波形メモリからの原波形データの読み出し方について説明するための概念図である。1回のフレーム処理の範囲のエンドポイント(pE)が1音色の波形ROM範囲のエンドポイント(rE)を超えない場合、上述した「楽音波形サンプル生成処理」(図7及び図8参照)において所定のフラグが「0」にセットされる。すなわち、この図10(a)に示す波形メモリからの原波形データの読み出し方は、前記所定のフラグが「0」である場合に行われる。この場合には、図10(a)から理解できるように、1回のフレーム処理の範囲のスタートポイント(pS)から1回のフレーム処理の範囲のエンドポイント(pE)までの該フレーム処理の範囲に従い、1音色の波形ROMの範囲を超えることなく原波形データが1サンプルずつ読み出される。そして、読み出された各々の原波形データはデコードされ、PCMサンプル波形としてループバッファに書き込まれる。このように、1回のフレーム処理の範囲のエンドポイント(pE)が1音色の波形ROM範囲のエンドポイント(rE)を超えない場合には、1音色の波形ROMから1サンプルずつ原波形データを読み出す際に、1サンプル毎に1音色の波形ROM範囲のエンドポイント(rE)を超えたか否かの終端チェック処理を行わなくてよい。
【0044】
図10(b)は、1回のフレーム処理の範囲のスタートポイント(pS)が1音色の波形ROMのエンドポイント(rE)以降の場合(つまり、前回のフレーム処理の範囲のエンドポイント(pE)と1音色の波形ROMのエンドポイント(rE)とが等しい場合)に行われる波形メモリからの原波形データの読み出し方について説明するための概念図である。1回のフレーム処理の範囲のスタートポイント(pS)が1音色の波形ROMのエンドポイント(rE)以降の場合、上述した「楽音波形サンプル生成処理」(図7及び図8参照)において所定のフラグが「0」にセットされる。すなわち、この図10(b)に示す波形メモリからの原波形データの読み出し方は上記図10(a)に示した読み出し方と同様に、前記所定のフラグが「0」である場合に行われる。ただし、この場合には、上述した図10(a)に示した場合と異なり、フレーム処理の範囲のスタートポイント(pS)とエンドポイント(pE)とが再設定されている(上述した図7のステップS14参照)。この場合には、図10(b)から理解できるように、再設定された1回のフレーム処理の範囲のスタートポイント(pS)から1回のフレーム処理の範囲のエンドポイント(pE)までの該フレーム処理の範囲に従い、1音色の波形ROMの範囲を超えることなく原波形データが1サンプルずつ読み出される。そして、読み出された各々の原波形データはデコードされ、PCMサンプル波形としてループバッファに書き込まれる。このように、1回のフレーム処理の範囲のスタートポイント(pS)が1音色の波形ROMのエンドポイント(rE)以降の場合においても、1音色の波形ROMから1サンプルずつ原波形データを読み出す際に、1サンプル毎に1音色の波形ROM範囲のエンドポイント(rE)を超えたか否かの終端チェック処理を行わなくてよい。
【0045】
図10(c)は、1回のフレーム処理の範囲のエンドポイント(pE)が1音色の波形ROM範囲のエンドポイント(rE)を1回だけ超えた場合に行われる波形メモリからの原波形データの読み出し方について説明するための概念図である。1回のフレーム処理の範囲のエンドポイント(pE)が1音色の波形ROM範囲のエンドポイント(rE)を1回だけ超えた場合、上述した「楽音波形サンプル生成処理」において所定のフラグが「1」にセットされる。また、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)に「0」がセットされる。すなわち、この図10(c)に示す波形メモリからの原波形データの読み出し方は、前記所定のフラグが「1」であり、かつ、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)が「0」である場合に行われる。この場合には、フレーム処理の範囲のエンドポイント(pE)が再設定されている(上述した図8のステップS17及びステップS18参照)。
【0046】
この場合には、図10(c)から理解できるように、まず1回のフレーム処理の範囲のスタートポイント(pS)から1音色の波形ROM範囲のエンドポイント(rE)まで、1音色の波形ROMの範囲から原波形データが1サンプルずつ読み出される。そして、原波形データを複数サンプル分(rE―pS+1)読み出したとカウントすると、1音色の波形ROM範囲のスタートポイント(rS)まで戻って、更にそこから再設定した1回のフレーム処理の範囲のエンドポイント(pE)まで原波形データを1サンプルずつ読み出す。そして、読み出された各々の原波形データはデコードされ、PCMサンプル波形としてループバッファに書き込まれる。このように、1回のフレーム処理の範囲のエンドポイント(pE)が1音色の波形ROM範囲のエンドポイント(rE)を1回だけ超えた場合には、1音色の波形ROMから1サンプルずつ原波形データを読み出す際に読み出した原波形データの数をカウントし、該カウントによって自動的に1音色の波形ROM範囲のスタートポイント(rS)まで戻って原波形データの読み出しを続けることから、1サンプル毎に1音色の波形ROM範囲のエンドポイント(rE)を超えたか否かの終端チェック処理を行わなくてよい。
【0047】
図10(d)は、上記した図10(c)と同様に、1回のフレーム処理の範囲のエンドポイント(pE)が1音色の波形ROM範囲のエンドポイント(rE)を超えた場合であるが、超えた回数が2回以上である場合に行われる波形メモリからの原波形データの読み出し方について説明するための概念図である。1回のフレーム処理の範囲のエンドポイント(pE)が1音色の波形ROM範囲のエンドポイント(rE)を2回以上超えた場合には、上述した「楽音波形サンプル生成処理」において所定のフラグが「1」にセットされ、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)に「超えた回数(例えば2回超えたならば2)」がセットされる。すなわち、この図10(d)に示す波形メモリからの原波形データの読み出し方は、前記所定のフラグが「1」であり、かつ、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)が「1」以上である場合に行われる。この場合にも、フレーム処理の範囲のエンドポイント(pE)が再設定されている(上述した図8のステップS17及びステップS18参照)。
【0048】
この場合には、図10(d)から理解できるように、まず1回のフレーム処理の範囲のスタートポイント(pS)から1音色の波形ROM範囲のエンドポイント(rE)まで、1音色の波形ROMの範囲から原波形データが1サンプルずつ読み出される。そして、原波形データを複数サンプル分(rE―pS+1)読み出したとカウントすると、1音色の波形ROM範囲のスタートポイント(rS)まで戻って、そこから1音色の波形ROM範囲のエンドポイント(rE)まで原波形データを1サンプルずつ読み出す(1回目のループ読み出し)。1音色の波形ROM範囲全体分の原波形データを読み出すと、また1音色の波形ROM範囲のスタートポイント(rS)まで戻って、更にそこから再設定した1回のフレーム処理の範囲のエンドポイント(pE)まで原波形データを1サンプルずつ読み出す。そして、読み出された各々の原波形データはデコードされ、PCMサンプル波形としてループバッファに書き込まれる。上記1音色の波形ROM範囲全体分の原波形データの読み出しは、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)に応じた回数だけ行われる。例えば、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)が「1」である場合には1音色の波形ROM範囲全体分の原波形データの読み出しを1回だけ行うし、フレーム処理の中のループポイントからエンドポイント間の処理回数(LT)が「2」である場合には1音色の波形ROM範囲全体分の原波形データの読み出しを2回行う(つまり2回ループする)。このように、1回のフレーム処理の範囲のエンドポイント(pE)が1音色の波形ROM範囲のエンドポイント(rE)を複数回超えた場合には、1音色の波形ROMから1サンプルずつ原波形データを読み出す際に読み出した原波形データの数をカウントし、該カウントによって1音色の波形ROM範囲のスタートポイント(rS)まで戻り、1音色の波形ROM範囲全体分の原波形データの読み出しを自動的に複数回続ける。したがって、この場合にも1サンプル毎に1音色の波形ROM範囲のエンドポイント(rE)を超えたか否かの終端チェック処理を行わなくてよい。
【0049】
上述したように、図1に示す楽音生成装置においては、生成したサンプル情報バッファに基づき波形メモリから原波形データを読み出して補間処理を行うことで、各フレーム毎に複数の楽音波形サンプルデータを生成する。こうした楽音波形サンプルデータを生成する際において、CPU1は波形メモリから該当する原波形データを読み出して内部メモリ1aに記憶し、該内部メモリ1aに記憶した原波形データを用いて楽音波形サンプルデータの生成を行う。しかし、CPU1による内部メモリ1aからの原波形データ読み出しによる楽音波形サンプルデータ生成処理の処理時間に比べて、波形メモリから内部メモリ1aへの原波形データの転送時間が遅いと、CPU1では原波形データの転送が終わるまで楽音波形サンプルデータ生成処理の実行を中断することから、その分だけ処理時間が長くなる。また、原波形データをサンプル情報バッファ内容に従って1つ1つ転送していたので、こうしたことによっても転送時間がかかり、その分だけ処理時間が長くなる。そこで、図1に示す楽音生成装置では、DMAコントローラ9を用いて、ダイレクトメモリアクセス方式によって、複数楽音波形サンプルデータ生成分に必要な原波形データを波形メモリから一括して内部メモリ1aに書き込む。すなわち、前もって複数楽音波形サンプルデータを生成する分の原波形データを波形メモリから読み出しておいて、内部メモリ1aに記憶しておく。
【0050】
そこで、こうしたDMAコントローラ9を用いた波形メモリから内部メモリ1aへの原波形データの転送処理について、図11を用いて説明する。図11は、DMAコントローラ9を用いた原波形データの転送処理の一実施例を示すフローチャートである。
【0051】
ステップS31では、転送回数カウンタが0より大きいか否かを判定する。上記転送回数カウンタは、上述した図7及び図8のステップS7からステップS18までが実行されることにより設定される変数である。例えば、1回のフレーム処理時におけるフレーム処理の範囲が上述した図10の各図に示したような範囲である場合の転送回数をそれぞれ示すと、図10(a)の場合は「1」、図10(b)の場合は「1」、図10(c)の場合は「2」、図10(d)の場合は「3」とそれぞれ設定されることになる。こうして設定される転送回数カウンタが0以下である場合には(ステップS31のNO)、当該原波形データの転送処理を終了する。他方、転送回数カウンタが0より大きい場合には(ステップS31のYES)、転送回数カウンタから1を減算する(ステップS32)。そして、転送始端と転送長とを求め、DMA方式により該転送始端と転送長とで決まる範囲の原波形データを波形メモリから読み出して内部メモリ1aに転送する(ステップS33)。転送始端は転送開始位置であり、転送長は転送する範囲である。上記ステップS33におけるデータ転送が終了すると(ステップS34)、ステップS31の処理に戻って上記ステップS31〜ステップS34までの処理を繰り返し実行する。これにより、PCMサンプル波形の基となる全ての原波形データ(つまり、1回のフレーム処理時におけるフレーム処理の範囲で用いる全ての原波形データの全て)を予め波形メモリから内部メモリ1aへと転送しておくことができることから、ループバッファにPCMサンプル波形を書き込む際に基となる原波形データを内部メモリ1aから読み出すことができ、処理を速く実行することができるようになる。
【0052】
ここで、上記原波形データの転送処理を実行することによる楽音波形サンプルデータ生成時間の短縮について、図12を用いて簡単に説明する。図12は、上記原波形データの転送処理の実行に伴う楽音波形サンプルデータ生成時間の短縮について説明するための概念図である。図12の上段に従来の原波形データ読み出し処理を用いた場合における楽音波形サンプルデータ生成時間を示し、図12の下段に上記原波形データの転送処理を用いた場合における楽音波形サンプルデータ生成時間を示した。
【0053】
従来の原波形データの読み出し処理、つまりサンプル情報バッファに基づく原波形データの読み出しを波形メモリから1つずつ実行する処理では、楽音波形サンプル生成処理と原波形データの読み出し処理とを同時並行的に実行することができない。そのために、図12上段に示した図から理解できるように、波形メモリから内部メモリ1aに原波形データを転送するメモリ転送に相当する外部メモリアクセス時間と複数の楽音波形サンプルデータを生成するのに係る純処理時間とが時間的に交互に連続するようにしか処理を実行することができない。他方、上述の図11に示したような原波形データの転送処理、つまりDMAコントローラ9により複数楽音波形サンプルデータ生成分に必要な原波形データを波形メモリから一括して内部メモリ1aに書き込むようにすると、CPU1とDMAコントローラ9とがそれぞれ内部メモリ1aからの原波形データ読み出しによる楽音波形サンプルデータの生成と、波形メモリから内部波形メモリ1aへの原波形データの書き込み(転送)とをそれぞれ実行することができるようになる。
【0054】
そのため、図12下段に示した図から理解できるように、波形メモリから内部メモリ1aに原波形データを転送するメモリ転送に相当する外部メモリアクセス時間と複数の楽音波形サンプルデータを生成するのに係る純処理時間とを同時刻に重ねることができる。例えば、CPU1においてフレーム処理1の複数楽音波形サンプルデータ生成を内部メモリ1aに記憶された原波形データに基づき実行している最中に、DMAコントローラ19ではフレーム処理1に続くフレーム処理2の複数楽音波形サンプルデータを生成するために必要とされる原波形データを波形メモリから内部波形メモリ1aへ転送する。こうすると、CPU1によるDMAコントローラ9を用いた原波形データの転送のためのメモリ転送の準備に係る時間を考慮したとしても、従来と比較して楽音波形サンプルデータ生成のための時間が短くなる。この図12に示す例においては、Δt分だけ実行時間の短縮化が計れていることになる。
【0055】
なお、上述した実施例において、波形メモリに記憶する原波形データとしてDPCM波形を用いた例を示したがこれに限らない。例えば、原波形データとしてADPCM波形を用いてもよいし、PCMサンプル波形そのものを用いるようにしてもよい。また、MP3(MPEG layer3)波形やAAC(Advanced Audio Coding)波形やWMA(Windows(登録商標) Media Audio)波形など、あらゆる符号化波形を用いるようにしてもよい。PCMサンプル波形そのものを用いる場合には、補間処理の際に必要な前後の原波形データ以外の他の原波形データを読み出す必要がないことは言うまでもない。
【0056】
【発明の効果】
この発明によれば、発音チャンネル毎に複数の楽音波形サンプルを生成する際に、読み出しアドレスが該波形メモリにおける当該原波形の終端側アドレスを超えているか否かを判定する終端チェック処理の分岐判断を1回1回の原波形の読み出し毎に行うことのないようにしたことから、CPUのオーバヘッドをより小さくすることができ、楽音生成処理を効率よく実行することができるようになる、という効果を得る。
【図面の簡単な説明】
【図1】 この発明に係る楽音生成装置の全体構成の一実施例を示すハード構成ブロック図である。
【図2】 RAM上の音色データエリアの一実施例を示す概念図である。
【図3】 オリジナル波形データのデータ構成を説明するための概念図である。
【図4】 RAM上の入力バッファエリアの一実施例を示す概念図である。
【図5】 RAM上のチャンネルレジスタの一実施例を示す概念図である。
【図6】 RAM上の出力バッファエリアの一実施例を示す概念図である。
【図7】 楽音波形サンプル生成処理における前半部分の処理の一実施例を示すフローチャートである。
【図8】 楽音波形サンプル生成処理における後半部分の処理の一実施例を示すフローチャートである。
【図9】 RAM上のサンプル情報バッファエリアの一実施例を示す概念図である。
【図10】 条件分岐を含まない複数回のDPCM波形の読み出しについて場合を分けて説明するための概念図である。
【図11】 DMAコントローラを用いた原波形データの転送処理の一実施例を示すフローチャートである。
【図12】 上記原波形データの転送処理の実行に伴う楽音波形サンプルデータ生成時間の短縮について説明するための概念図である。
【図13】 従来の楽音生成装置の楽音生成処理概要を説明するための概念図である。
【符号の説明】
1…CPU、1a…内部RAM(内部メモリ)、2…タイマ、3…ROM、4…RAM、5…MIDIインタフェース、6…操作子、7…ディスプレイ、8…外部記憶装置、9…DMAコントローラ、9A…デジタル・アナログ変換器(DAC)、9B…サウンドシステム、1D…通信バス
Claims (6)
- 波形の複数サンプル値をアドレスに対応付けて所定のアドレス範囲内に記憶する記憶手段と、
生成すべき楽音に応じて前記記憶手段から読み出すべき所定の複数サンプル分の読み出しアドレスを、予め算出し記憶する波形メモリ読出手段と、
前記波形メモリ読出手段に記憶された前記複数サンプル分の読み出しアドレスに応じて前記記憶手段から前記サンプル値を読み出し、該読み出したサンプル値に基づき楽音波形サンプルデータを生成する制御手段と、
前記生成した楽音波形サンプルデータを所定のサンプリング周期で出力する出力手段と
を具備し、
前記制御手段は、前記波形メモリ読出手段に記憶された前記読み出しアドレスが前記記憶手段における前記所定のアドレス範囲の終端アドレスを超えた場合に、超えた分の読み出しアドレスを前記所定のアドレス範囲の先端アドレスからのアドレスに変換し、該変換したアドレスに応じて前記記憶手段から前記サンプル値を読み出すことを特徴とする楽音生成装置。 - 前記波形メモリ読出手段は、整数部と小数部とからなる読み出しアドレスを算出して記憶しておくことを特徴とする請求項1に記載の楽音生成装置。
- 前記制御手段は、整数部及びそれに隣接する整数部に対応するサンプル値を読み出し、該読み出したサンプル値を小数部にて補間することにより、該当読み出しアドレスに対応するサンプル値を生成することを特徴とする請求項2に記載の楽音生成装置。
- 前記記憶手段は圧縮された波形を記憶するものであり、
前記制御手段は、前記記憶手段から圧縮波形サンプル値を読み出し、該読み出された圧縮波形サンプル値を圧縮前波形サンプル値に戻して、該圧縮前波形サンプル値に基づき楽音波形サンプルデータを生成することを特徴とする請求項1に記載の楽音生成装置。 - 前記制御手段は、複数チャンネル分のサンプル値を各チャンネル毎に読み出し、該読み出した全チャンネル分の複数サンプル値を加算したものに基づき全チャンネル分の楽音波形サンプルデータを生成することを特徴とする請求項1に記載の楽音生成装置。
- コンピュータに、
波形の複数サンプル値をアドレスに対応付けて所定のアドレス範囲内に記憶する記憶手段から、生成すべき楽音に応じて読み出すべき所定の複数サンプル分の読み出しアドレスを、予め算出し記憶する手順と、
前記記憶された前記複数サンプル分の読み出しアドレスに応じて前記記憶手段から前記サンプル値を読み出し、該読み出したサンプル値に基づき楽音波形サンプルデータを生成する手順と、
前記生成した楽音波形サンプルデータを所定のサンプリング周期で出力する手順と、
前記記憶された前記読み出しアドレスが前記記憶手段における前記所定のアドレス範囲の終端アドレスを超えた場合に、超えた分の読み出しアドレスを前記所定のアドレス範囲の先端アドレスからのアドレスに変換し、該変換したアドレスに応じて前記記憶手段から前記サンプル値を読み出す手順と
を実行させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002133980A JP3832382B2 (ja) | 2002-05-09 | 2002-05-09 | 楽音生成装置及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002133980A JP3832382B2 (ja) | 2002-05-09 | 2002-05-09 | 楽音生成装置及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003330468A JP2003330468A (ja) | 2003-11-19 |
JP3832382B2 true JP3832382B2 (ja) | 2006-10-11 |
Family
ID=29696775
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002133980A Expired - Fee Related JP3832382B2 (ja) | 2002-05-09 | 2002-05-09 | 楽音生成装置及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3832382B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100689495B1 (ko) * | 2004-12-14 | 2007-03-02 | 엘지전자 주식회사 | Midi 재생 장치 및 방법 |
-
2002
- 2002-05-09 JP JP2002133980A patent/JP3832382B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003330468A (ja) | 2003-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100319481B1 (ko) | 악음발생방법,파형데이터압축방법,이러한방법을실행하기위한제어명령어를포함하는기계판독가능한기록매체및사운드장치 | |
US6326537B1 (en) | Method and apparatus for generating musical tone waveforms by user input of sample waveform frequency | |
JP5789993B2 (ja) | 楽音信号発生装置 | |
JP3008922B2 (ja) | 楽音発生装置および楽音発生方法 | |
JP3832383B2 (ja) | 楽音生成装置及びプログラム | |
JP3832382B2 (ja) | 楽音生成装置及びプログラム | |
JPS5925235B2 (ja) | 電子楽器 | |
JPH07121181A (ja) | 音声情報処理装置 | |
JPH08160961A (ja) | 音源装置 | |
JP3658826B2 (ja) | 楽音生成方法 | |
JP2797142B2 (ja) | 電子楽器用処理装置 | |
JPH11288285A (ja) | 楽音発生方法及び装置 | |
JP2576614B2 (ja) | 処理装置 | |
JP3016470B2 (ja) | 音源装置 | |
JP3137043B2 (ja) | 波形メモリ音源装置および楽音発生装置 | |
JP3723973B2 (ja) | 音源装置 | |
JP3804522B2 (ja) | 波形圧縮方法及び波形生成方法 | |
JP3610759B2 (ja) | ディジタル信号処理装置 | |
JP3095018B2 (ja) | 楽音発生装置 | |
JP3104873B2 (ja) | 音源装置 | |
JP3148803B2 (ja) | 音源装置 | |
JPH10124060A (ja) | 楽音発生方法、楽音発生装置および楽音発生用プログラムを記録した記録媒体 | |
JP3275678B2 (ja) | 楽音発生方法および装置 | |
JP3693045B2 (ja) | 楽音発生装置 | |
JP2910632B2 (ja) | 波形メモリ音源装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040521 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060322 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060404 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060605 |
|
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: 20060627 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060710 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
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: 20090728 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100728 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100728 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110728 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110728 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120728 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130728 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |