JP3852634B2 - 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体 - Google Patents
楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体 Download PDFInfo
- Publication number
- JP3852634B2 JP3852634B2 JP22303597A JP22303597A JP3852634B2 JP 3852634 B2 JP3852634 B2 JP 3852634B2 JP 22303597 A JP22303597 A JP 22303597A JP 22303597 A JP22303597 A JP 22303597A JP 3852634 B2 JP3852634 B2 JP 3852634B2
- Authority
- JP
- Japan
- Prior art keywords
- waveform
- samples
- generation
- waveform generation
- buffer
- 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
- Memory System Of A Hierarchy Structure (AREA)
- Electrophonic Musical Instruments (AREA)
Description
【発明の属する技術分野】
この発明は、演算処理装置上で所定の楽音生成ソフトウェアを実行することにより楽音を生成する楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体に関する。
【0002】
【従来の技術】
従来より、CPUなどの汎用の演算処理装置上で所定の楽音生成ソフトウェアを実行することにより楽音を生成する楽音発生装置が知られている。これは、いわゆるソフトウェア音源あるいはソフト音源と呼ばれる方式のものである。ソフト音源においても、やはりソフトウェア(ソフトエフェクタ)を用いて、生成した楽音に残響効果(リバーブ)などの効果(エフェクト)付与処理を施して出力するものがある。近年では、ソフト音源においても高機能化が求められ、多種多様な効果付与を施したいという要求がある。
【0003】
ソフト音源においては、ソフトウェアで楽音を生成する際に複数サンプルをまとめて生成するため、波形生成用バッファ領域が設けられる。図3(b)は、そのような波形生成用バッファ領域の例を示す。図3(b)において、1,2,…,128は128組の波形サンプル(時間的な順序で並んでいる時系列データである)格納領域である。1組の波形サンプル格納領域は、DryL,DryR,Revからなる。DryLはステレオ左側のリバーブをつけない波形サンプルの格納領域、DryRはステレオ右側のリバーブをつけない波形サンプルの格納領域、Revはリバーブへの入力とするための波形サンプルの格納領域である。要するに、(DryL,DryR,Rev)を1単位としてインターリーブ形式で波形サンプルを持つようにしていた。これは、波形計算部分で、各チャンネルの出力データを書き出す際にこのような順番に並んでいると都合が良かったためである。
【0004】
ソフト音源では、例えば、所定の時間間隔であるフレームごとに、楽音生成すべき全チャンネルの1フレーム分の波形サンプル(128サンプル)を生成し図3(b)の波形生成用バッファに累算して発音する波形データを算出する。始めに第1チャンネルの128サンプルを生成し重み付け(各サンプルのDryL,DryR,Revの各値にそれぞれ所定の係数を乗算すること)して図3(b)の波形生成用バッファに格納し、次に第2チャンネルの128サンプルを生成し重み付けして図3(b)の波形生成用バッファに累算し、次に第3チャンネルの128サンプルを生成し重み付けして図3(b)の波形生成用バッファに累算し、…という具合である。これにより、発音すべきチャンネルの波形サンプルの累算結果が128サンプル分得られる。生成した波形データは、例えばDMAC(ダイレクトメモリアクセスコントローラ)に指示してサウンドI/O(楽音波形データの入出力を実行するコーデック(CODEC)と呼ばれるLSI)に渡し、サウンドI/Oがディジタルアナログ(D/A)変換してサウンドシステムにより放音する。
【0005】
【発明が解決しようとする課題】
ところで、ソフト音源でも多様な効果付与を実現したいという要求はあるが、通常、複数の効果付与処理を行なう場合の計算順序(いわばソフトエフェクタの結線関係)は動的に変更できるものではないという不具合がある。
【0006】
また、ソフト音源に用いる演算処理装置には内部または外部にキャッシュメモリを備えたものも用いられるが、図3(b)のような波形生成用バッファのデータ構造だと、波形生成処理時、特にソフトエフェクタによる計算処理時にキャッシュミスが起こりやすいという不具合がある。例えば、図3(b)の例では、リバーブ付与の計算を行なうソフトエフェクタはインターリーブ形式で飛び飛びに格納されている128サンプル分のRevを取り出して計算処理することになり、キャッシュミスが起こりやすい。付与する効果がリバーブだけの場合はそれ程のオーバヘッドは生じないが、付与する効果が増えると、特にキャッシュミスが起こりやすくなる。例えば、3種類(リバーブ、コーラス、バリエーション)の効果付与で出力が7系統の場合、図3(b)のデータ構造を拡張して(DryL,DryR,Rev,ChorusL,ChorusR,VariationL,VariationR)を1単位として128サンプル分並べた波形生成用バッファを用いることにすると、エフェクタは、
▲1▼VariationL,VariationRを128サンプル分まとめてバリエーションの計算処理を実行
▲2▼ChorusL,ChorusRを128サンプル分まとめてコーラスの計算処理を実行
▲3▼Revを128サンプル分まとめてリバーブの計算処理を実行
という順序で計算するため、波形生成用バッファ領域上の飛び飛びのデータ領域を頻繁に行ったり来たりしてアクセスしなければならず、頻繁にキャッシュミスが起こり大変効率が悪い。
【0007】
この発明は、ソフト音源において、波形生成処理時、特に効果付与の計算処理時にキャッシュミスが起こりにくく効率良く計算処理できるようにした楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体を提供することを目的とする。
【0008】
【課題を解決するための手段】
この目的を達成するため、請求項1に係る楽音発生装置は、各種のソフトウェアを実行可能な演算処理装置と、前記演算処理装置の内部または外部に設けられ、前記演算処理装置が波形生成を行なう際にワーキング領域を高速にアクセスするためのキャッシュメモリと、前記演算処理装置が実行する波形生成ソフトウェアを格納した記憶装置と、前記演算処理装置で前記波形生成ソフトウェアを実行することにより所定時間長さの時間フレームで再生すべき複数の波形サンプルを一括して生成する際に、ワーキング領域として使用する波形生成用バッファであって、波形生成処理が終了したときは最終的に生成された波形サンプルが設定される波形生成用バッファとを備えるとともに、前記波形生成ソフトウェアによって前記演算処理装置で実行される処理には、所定量の波形サンプル(nサンプル)を生成する波形生成処理を含み、該処理を所定回数(m回)繰り返すことで、前記波形生成用バッファに1フレーム分のn×m個の波形サンプルを生成するものであり、前記波形生成用バッファは、(1)1回の前記波形生成処理によって生成されるnサンプルを格納するメモリ上の連続的な区間をm個並べて構成し、(2)前記nサンプルを格納する各区間の長さを前記キャッシュメモリのラインサイズまたはその所定整数倍のサイズとし、(3)前記m個の区間の間の境界位置は、それらの境界位置が前記キャッシュメモリにキャッシングされる際の境界位置になるようにバウンダリ調整されていることを特徴とする。波形生成処理は、エフェクト付与処理も含む。後述する発明の実施の形態では、各チャンネルのnサンプル分の波形生成処理を発音チャンネル数分行ない、それをm回繰り返すことで1フレーム分の波形サンプルを生成する例と、nサンプル分のエフェクトの処理を複数エフェクトについて行ない、それをm回繰り返すことで1フレーム分のエフェクト処理を行なう例を示してある。
【0011】
請求項2に係る発明は、処理装置が波形生成を行なう際にデータに高速にアクセスするためのキャッシュメモリを備えた処理装置で実行され、複数チャンネル分の楽音を発生可能な楽音発生方法であって、演奏情報を供給するステップと、所定時間間隔でタイミング信号を発生するステップと、前記タイミング信号の発生ごとに、前記演奏情報に応じた複数チャンネル分の波形データを、連続する複数サンプル分、波形生成用バッファ上に生成する生成ステップと、生成された波形データを、サンプリング周期ごとに1サンプルずつディジタルアナログ変換器に供給し、アナログ波形に変換するステップとを備えるとともに、前記生成ステップでは、1回の処理でn個のサンプルの生成を複数チャンネル分実行して累算する処理を行い、それをm回繰り返すことで前記連続する複数サンプル分の波形データを前記波形生成用バッファに生成し、前記波形生成用バッファは、(1)前記生成ステップの1回の処理によって生成される複数チャンネル分のサンプルを累算した結果であるnサンプルを格納するメモリ上の連続的な区間をm個並べて構成し、(2)前記nサンプルを格納する各区間の長さを前記キャッシュメモリのラインサイズまたはその所定整数倍のサイズとし、(3)前記m個の区間の間の境界位置は、それらの境界位置が前記キャッシュメモリにキャッシングされる際の境界位置になるようにバウンダリ調整されてメモリ上にその領域を確保されているものであることを特徴とする。
【0014】
請求項3に係る発明は、処理装置が波形生成を行なう際にデータに高速にアクセスするためのキャッシュメモリを備えた処理装置で実行され、複数チャンネル分の楽音を発生する楽音発生方法に係るプログラムを記憶した、処理装置が読み取り可能な記憶媒体であって、前記楽音発生方法に係るプログラムは、前記処理装置に、演奏情報を供給するステップと、所定時間間隔でタイミング信号を発生するステップと、前記タイミング信号の発生ごとに、前記演奏情報に応じた複数チャンネル分の波形データを、連続する複数サンプル分、波形生成用バッファ上に生成する生成ステップと、生成された波形データを、サンプリング周期ごとに1サンプルずつディジタルアナログ変換器に供給し、アナログ波形に変換するステップとを実行させるとともに、前記生成ステップでは、1回の処理でn個のサンプルの生成を複数チャンネル分実行して累算する処理を行い、それをm回繰り返すことで前記連続する複数サンプル分の波形データを前記波形生成用バッファに生成し、メモリ上に領域を確保する前記波形生成用バッファは、(1)前記生成ステップの1回の処理によって生成される複数チャンネル分のサンプルを累算した結果であるnサンプルを格納するメモリ上の連続的な区間をm個並べて構成し、(2)前記nサンプルを格納する各区間の長さを前記キャッシュメモリのラインサイズまたはその所定整数倍のサイズとし、(3)前記m個の区間の間の境界位置は、それらの境界位置が前記キャッシュメモリにキャッシングされる際の境界位置になるようにバウンダリ調整されているようなプログラムを記憶した、処理装置が読み取り可能な記憶媒体である。
【0017】
【発明の実施の形態】
以下、図面を用いてこの発明の実施の形態を説明する。
【0018】
図1は、この発明に係る楽音発生装置を適用した電子楽器のブロック構成図を示す。この電子楽器は、中央処理装置(CPU)101、リードオンリメモリ(ROM)102、ランダムアクセスメモリ(RAM)103、ドライブ装置104、タイマ106、ネットワーク入出力(I/O)インタフェース107、キーボード108、ディスプレイ109、ハードディスク110、サンプリングクロック(Fs)発生器111、サウンドI/O112、DMA(ダイレクトメモリアクセス)コントローラ114、サウンドシステム115、およびバスライン116を備えている。
【0019】
CPU101は、この電子楽器全体の動作を制御する。CPU101は、内部にキャッシュメモリ117を備えたものである。キャッシュメモリ117のキャッシュライン(キャッシュブロック)サイズは32バイトである。すなわち、CPU101がROM102やRAM103などから適当なアドレスのデータを読み出した際には、そのアドレスを含む連続した32バイトがキャッシュメモリ117の所定のキャッシュラインにコピーされる。その後、この32バイトの何れかのデータに対する読み出しが発生したときには、ROM102やRAM103から読み出す代わりに、当該キャッシュラインのデータを供給する。キャッシュメモリ117のアクセスは非常に高速に行なわれるので、データがキャッシュメモリ117上にある間は、非常に高速に処理できる。なお、キャッシュメモリには、ライトスルー方式とライトバック方式とがあるが、ここで用いたキャッシュメモリ117はライトスルー方式とする。
【0020】
ROM102は、CPU101が実行する制御プログラム(ソフトエフェクタを含むソフト音源のプログラムなど)や各種の定数データなどを格納する。またROM102上には、CPU101がソフト音源のプログラムを実行して楽音生成するときに使用する波形データ(所定のレートでサンプリングされた波形サンプルデータ)が用意されている。なお、制御プログラムや各種定数データなど、および波形データは、ROM102でなく、RAM103上に用意したものを使用することもできる。この場合、制御プログラムなどのデータは、CD−ROMなどの外部記憶媒体やネットワークI/O107から供給され、RAM103上に展開されたり、ハードディスク110に保存される。RAM103には、各種のレジスタ、波形生成用バッファ、再生バッファなどのワーク領域が設けられる。ドライブ装置104は、FD(フロッピーディスク)やフラッシュカードなどの外部記憶媒体105との間で各種データを入出力するためのものである。ハードディスク110は、各種データの記録用に用いる記憶装置である。
【0021】
タイマ106は、CPU101に対して所定間隔でタイマ割り込みを発生させるためのタイマクロック信号を発生する。ネットワークI/Oインタフェース107は、外部の公衆回線やLAN(ローカルエリアネットワーク)を介して各種データを授受するためのインタフェースである。キーボード108は、各種の情報を入力するために用いるタイピングキーボードである。ディスプレイ109は、各種の情報を表示するディスプレイである。ユーザは、キーボード108およびディスプレイ109を用いてこの電子楽器に対する各種の設定操作および指示操作を行なうことができる。
【0022】
Fs発生器111は、サウンドI/O112に与える周波数Fsのサンプリングクロックを発生する。サウンドI/O112は、コーデック(CODEC)と呼ばれるLSIからなる。サウンドI/O112は、アナログディジタル(A/D)変換機能およびディジタルアナログ(D/A)変換機能を備えており、A/D入力端子には外部入力113からのアナログ楽音信号が入力し、D/A出力端子にはサウンドシステム115が接続される。サウンドI/O112は、内部に2つのFIFO(First In First Out)方式のスタック領域を備えている。一つはA/D入力端子経由で入力されたディジタル波形データを保持する入力FIFOであり、もう一つはD/A出力端子経由で出力するディジタル波形データを保持する出力FIFOである。
【0023】
外部入力113からサウンドI/O112のA/D入力端子に入力したアナログ楽音信号は、周波数Fsのサンプリングクロックに応じてA/D変換され、(必要に応じてADPCM方式などで圧縮してもよい)入力FIFOへ書き込まれる。入力FIFOに波形データが入っていると、サウンドI/O112は、DMAコントローラ114に対してその入力波形データを処理する要求を出す。DMAコントローラ114は、その処理要求に応じて、入力FIFOのデータをRAM103上の所定の領域(あらかじめ確保されている録音バッファ領域)に転送する。このDMAコントローラ114によるデータの転送は、DMAコントローラ114がサンプリングクロックFsごとにCPU101に割り込み(ハードウェア割り込み)をかけバスライン116を確保して行なう。CPU101は、DMAコントローラ114によるバスライン116の確保を意識することはない。
【0024】
一方、サウンドI/O112内の出力FIFOに波形データが存在する場合、その出力FIFO内の波形データは、サンプリングクロックFsごとにD/A変換され、D/A出力端子経由でサウンドシステム115に送出され放音される。出力FIFOの波形データが出力されると、出力FIFOに空きができるので、サウンドI/O112は、DMAコントローラ114に波形データ取得の要求を出す。CPU101は、あらかじめ出力したい波形データを生成してRAM103上の再生バッファ(後述するPB0,PB1)に置いておき、DMAコントローラ114にはその波形の再生要求を出しておく。DMAコントローラ114は、サンプリングクロックFsごとにCPU101に割り込みをかけてバスライン116を確保し、RAM103上の再生バッファの波形データをサウンドI/O112の出力FIFOに転送する。このDMAコントローラ114による波形データの転送は、CPU101が意識することはない。出力FIFOに書き込まれた波形データは、上述したようにサンプリングクロックFsごとにサウンドシステム115へと送られて放音される。
【0025】
ソフト音源はCPU101がROM102の楽音生成ソフトウェアを実行することにより実現されるが、該ソフト音源を利用する側から見ると、楽音生成ソフトウェアをドライバとして登録しておき、該ドライバを起動した後、所定のソフト音源に係るAPI(Application Program Interface)に各種演奏入力を表わすMIDI(Musical Instruments digital Interface)イベントメッセージを出力して楽音生成に関する各種の処理をソフト音源に行なせる、という手順になる。CPU101は汎用の演算処理装置であり、該APIに対して演奏入力を与える処理、すなわちMIDIイベントを該APIに出力する処理など、ソフト音源とは別の処理も行なっている。CPU101が該APIに対して演奏入力を与える処理とは、例えば、不図示の演奏操作子(鍵盤など)の操作に応じてリアルタイムで発生する演奏入力を該APIに出力したり、ネットワークI/O107を介してリアルタイムで入力したMIDIイベントに応じた演奏入力を該APIに出力したり、RAM103上にMIDIイベントのシーケンスを用意しておき(外部記憶媒体105やハードディスク110上にあるデータを用いてもよいし、ネットワークI/O107を介して入力したデータを用いてもよい)これを順次演奏入力として該APIに出力したり、といった処理である。
【0026】
図2を参照して、ソフト音源の楽音生成原理を説明する。図2において、S1〜S4の各区間は、所定のサンプル数(2×128サンプル)分の再生を行なう単位となる時間フレームを示す。「演奏入力」のライン上に記載してある下向き矢印は、その時刻で演奏入力があったことを示す。演奏入力とは、上述のソフト音源に係るAPIに、ノートオン、ノートオフ、アフタタッチ、プログラムチェンジなどの各種のMIDIイベントが入力されることである。図2の例では、フレームS1で3つ、S2で2つ、S3で1つの演奏入力がそれぞれあったということである。ソフト音源は、複数チャンネル分の複数楽音を同時生成可能であり、RAM103上に用意される複数チャンネル分のソフト音源レジスタで各楽音を制御するようになっている。ソフト音源は、演奏入力としてノートオンイベントを入力したときは、ソフト音源レジスタに関して発音割り当てを行ない、割り当てたチャンネルに対応するソフト音源レジスタに該チャンネルの発音を制御する各種のデータとノートオンを書き込む。演奏入力としてノートオフイベントを入力したときは、該当するチャンネルに対応するソフト音源レジスタにノートオフを書き込む。ノートオンやノートオフ以外の演奏入力(例えばアフタタッチの変更など)についても同様に、該当するチャンネルに対応するソフト音源レジスタに演奏入力に応じたデータを書き込む。ある時間フレームでソフト音源レジスタに書込まれたデータは、データの種類にかかわりなく、必ず次の時間フレームから波形生成演算に使用される。
【0027】
図2の「CPUによる波形生成」の矩形201〜204は、CPU101により効果付与も含めた波形生成演算を実行する区間を示す。この波形生成演算では、ソフト音源レジスタに設定された複数チャンネル分のデータに基づいて複数チャンネル分の楽音波形生成を行なう。演奏入力に応じてソフト音源レジスタが書き換えられ、一方、演奏入力のない期間は、ソフト音源レジスタは過去に書込まれたデータを保持している。したがって、各波形生成の区間201〜204では、直前あるいはさらに前のフレームで検出した演奏入力に応じた波形生成演算を実行することになる。フレームが切り替わるタイミングでフレーム割り込みが発生するので、各フレームでの波形生成演算(後述の図7(a))はこのフレーム割り込みを契機として実行される。
【0028】
例えば、フレームS1で検出された3つの演奏入力に対しては、次のフレームS2の先頭のフレーム割り込みを契機として区間202で波形生成演算を行なう。CPU101は、この波形生成演算により、RAM103上の波形生成用バッファに波形データ(複数チャンネル分を累算したものであって、かつ効果も付与したもの)を生成する。生成した波形データはRAM103上の再生バッファ領域に書き込む。この再生バッファ領域としては、連続したアドレスに用意された同じ大きさの2つのバッファ領域PB0とPB1(2つをまとめてダブルバッファと呼ぶ)を用いる。再生バッファ領域への書き込みは、後述する図7(a)のステップ707で行なう。また、フレームごとにバッファPB0とPB1とを交互に用いるようにする。例えば、フレームS1の区間201で生成した波形データはRAM103上の再生バッファ領域PB0に書き込み、フレームS2の区間202で生成した波形データは再生バッファ領域PB1に書き込み、フレームS3の区間203で生成した波形データは再生バッファ領域PB0に書き込み、フレームS4の区間204で生成した波形データは再生バッファ領域PB1に書き込み、…というように、交互にPB0とPB1に波形データを書き込む。
【0029】
再生バッファPB0およびPB1に書き込んだ波形データの読み出し再生は、図2の「読み出し再生」に示すように、フレーム割り込みを契機として、波形生成したフレームの次のフレームの区間で行なう。すなわち、フレームS1で生成しPB0に書き込んだ波形データは次のフレームS2で、フレームS2で生成しPB1に書き込んだ波形データは次のフレームS3で、フレームS3で生成しPB0に書き込んだ波形データは次のフレームS4で、…というように、PB0とPB1の波形データを交互に読み出し再生していく。読み出し再生は、DMAコントローラ114が、サンプリングクロックFsごとにCPU101に割り込みをかけて、RAM103上の再生バッファ(PB0またはPB1の指定された方)の波形データをサウンドI/O112の出力FIFOに転送することにより行なう。フレーム割り込みは、再生バッファPB0およびPB1をループ読み出しする際のリターン発生時(すなわちPB1の再生終了時)と、ループ読み出しの中間点通過時(すなわちPB0の再生終了時)に発生する。フレーム割り込みは、サウンドI/O112が発生するハードウェア割り込みであり、1フレーム再生完了の時点を示す。すなわち、サウンドI/O112は、転送サンプル数(DMAC114によりPB0,PB1からサウンドI/Oの出力FIFOに転送したサンプル数)をカウントし、再生バッファのサイズ(PB0,PB1を合せたサイズ)の半分の数のサンプルの転送ごとにフレーム割り込みを発生する。
【0030】
図3(a)は、CPU101が波形生成を行なうときに使用する波形生成用バッファの構成例を示す。波形生成用バッファは、mixA,mixB,mixC,mixDの4つからなる。mixAは、ドライ(dry)用、すなわち効果を付けない波形データを設定するバッファである。mixBは、リバーブ(rev)用、すなわちリバーブ処理への入力となる波形データを設定するバッファである。mixCは、コーラス(cho)用、すなわちコーラス処理への入力となる波形データを設定するバッファである。mixDは、バリエーション(var)用、すなわちバリエーション処理への入力となる波形データを設定するバッファである。mixA,mixB,mixC,mixDのそれぞれは、ステレオ左側(L側)波形サンプルの記憶領域とステレオ右側(R側)波形サンプルの記憶領域とを1組として、128組のサンプル(サンプル数では、2×128=256サンプル)の記憶領域からなる。L側波形サンプルおよびR側波形サンプルは、それぞれ、16ビット(2バイト)サンプルである。mixA,mixB,mixC,mixDのそれぞれは、先頭から順に32バイト単位(すなわち16サンプル分)でキャッシングされるようにバウンダリ調整されている。
【0031】
図4は、ソフト音源による楽音生成からチャンネル累算までのアルゴリズムの例を示す。波形メモリ401は、所定のレートでサンプリングされた波形サンプルデータを格納したメモリである。ここでは、ROM102上に波形データが用意されているものとする。ただし、RAM103上に用意した波形データを用いてもよい。RAM103上の波形データは、ROM102、外部記憶媒体105、またはハードディスク110から読み出したデータ、あるいはネットワークI/O107を介して入力したデータや、サウンドI/O112により外部入力113をサンプリングして得た波形データなどを用いてもよい。
【0032】
ソフト音源は、まず必要なチャンネル数分(最大チャンネル数はCPUの能力に応じて決めておく。ここでは最大32チャンネルとする。)の楽音生成処理402を実行する。どのチャンネルからでも演算できるので、後着優先で演算処理したり、音量レベルが小さくなったチャンネルは優先度を落としたりしてもよい。1チャンネル分の楽音生成は、波形読み出し&補間処理411により波形メモリの波形データを読み出して補間し、フィルタ412でフィルタリングし、フィルタ412の出力を8系列に分けてそれぞれ乗算器413−1から413−8により所定の係数を乗算する処理などからなる。8系列の出力は、乗算器413−1でドライL(ステレオ左)用係数を乗算して得るドライL出力、乗算器413−2でドライR(ステレオ右)用係数を乗算して得るドライR出力、乗算器413−3でリバーブL用係数を乗算して得るリバーブL出力、乗算器413−4でリバーブR用係数を乗算して得るリバーブR出力、乗算器413−5でコーラスL用係数を乗算して得るコーラスL出力、乗算器413−6でコーラスR用係数を乗算して得るコーラスR出力、乗算器413−7でバリエーションL用係数を乗算して得るバリエーションL出力、および乗算器413−8でバリエーションR用係数を乗算して得るバリエーションR出力である。各発音チャンネルごとに得られるこれら8系列の出力は、ミキサ403−1から403−8により系列ごとにミキシング(チャンネル累算)される。そして、インターリーブ処理404−1から404−4によりLとRでインターリーブして、405−1から405−4に示す図3(a)の波形生成用バッファmixA,mixB,mixC,mixDに設定する。
【0033】
ユーザは、キーボード108、ディスプレイ109を使用してエフェクトエディットコマンドを入力することにより、図6(a)のメインフローのステップ607においてエフェクトエディット処理プログラム(図示せず)を実行し、ソフトエフェクタのアルゴリズムやパラメータなどをエディット可能である。図5は、ユーザのエディットにより設定されたソフトエフェクタのアルゴリズムの一例であり、図4の処理により波形生成用バッファmixA,mixB,mixC,mixD上に生成された波形データに複数の効果を施すようになっている。
【0034】
ソフトエフェクトのアルゴリズムエディットでは、例えば、ソフトエフェクタの処理のブロック数(図5では3ブロック)、各ブロックの処理内容(図5では、リバーブとコーラスとバリエーション)、複数ブロック間の結線情報(図5では、5つのadd処理による3つのブロック間の結線)などがユーザにより指定され、エフェクトエディット処理プログラムでは、指定された複数ブロックのエフェクトと複数のadd処理の処理順序を、指定された結線が可能となるように自動決定し、図5のアルゴリズムを有するエフェクト処理プログラムを作成する。図5のアルゴリズムは、以下の▲1▼〜▲6▼の手順の処理を表わしている。
【0035】
▲1▼501−4の波形生成用バッファmixDの波形データを読み出し、バリエーション処理507を施して、結果をmixDに上書きする。
【0036】
▲2▼add(mixD−>mixA) …図5の508
add(mixD−>mixB) …図5の502
add(mixD−>mixC) …図5の504
を実行する。addは、−>の前側に記載してあるバッファの各サンプルに所定の係数を乗算して重み付けし、−>の後側に記載してあるバッファの各サンプルに足し込む処理である。add処理は、共通ルーチンを使用し、重み付けの係数は、どの処理結果に重み付けしてどこに足し込むかに応じてあらかじめ指定してあるものとする。これらのadd処理508,502,504により、バリエーション処理507を施した結果をそれぞれ重み付けして、ドライ用バッファmixA、リバーブ用バッファmixB、およびコーラス用バッファmixCの波形データに加算する処理が実行されたことになる。
【0037】
▲3▼波形生成用バッファmixCの波形データ(コーラス処理への入力用に用意した波形データに、add処理504でバリエーション処理507を施した波形データを重み付けして足し込んだデータ)を読み出し、コーラス処理506を施して、結果をmixCに上書きする。
【0038】
▲4▼add(mixC−>mixA) …図5の509
add(mixC−>mixB) …図5の503
を実行する。これらのadd処理509,503により、コーラス処理506を施した結果をそれぞれ重み付けして、ドライ用バッファmixA、およびリバーブ用バッファmixBの波形データに加算する処理が実行されたことになる。
【0039】
▲5▼波形生成用バッファmixB(リバーブ処理への入力用に用意した波形データに、add処理502でバリエーション処理507を施した波形データを重み付けして足し込み、さらにadd処理503でコーラス処理506を施した波形データを重み付けして足し込んだデータ)の波形データを読み出し、リバーブ処理505を施して、結果をmixBに上書きする。
【0040】
▲6▼add(mixB−>mixA) …図5の510
を実行する。このadd処理510により、リバーブ処理505を施した結果を重み付けしてドライ用バッファmixAの波形データに加算する処理が実行されたことになる。結果として、mixAには、ドライ用の波形データにバリエーション、コーラス、およびリバーブを反映させた波形データが設定されたことになる。
【0041】
上述のリバーブ処理505、コーラス処理506、およびバリエーション処理507は、それぞれ、mixB,mixC,mixDの波形データに効果付与処理を施して上書きする処理であり、add処理502〜504,508〜510は共通ルーチンである。したがって、これらの処理順序を適宜変更するだけで、複数の効果付与の順序(ソフトエフェクタの結線関係)を任意に変更可能である。共通ルーチンaddが使用できるのは、図3(a)に示すように、波形生成用バッファをエフェクトごとに独立とし、同じ構造にしたからである。この発明の実施の形態では、ユーザのキーボード108などを用いた指定により、ソフトエフェクタのアルゴリズムを任意に指定できるようになっている。
【0042】
さらにこの発明の実施の形態では、図4および図5のようなアルゴリズムで波形生成を実行する際、キャッシュラインのサイズを単位として処理を行なうことにより、キャッシュのヒット率を飛躍的に高め楽音生成演算を高速化する。キャッシングによる処理の高速化については、図7(a)および図7(b)で詳細に説明する。
【0043】
次に、図6(a)(b)および図7(a)(b)のフローチャートを参照して、上述の電子楽器のCPU101の処理手順を説明する。
【0044】
図6(a)は、CPU101の制御プログラムのうちソフト音源に係るメインルーチンの処理手順を示す。このメインルーチンは、ソフト音源のドライバとしてOS(Operating System)に登録されているものである。ソフト音源を使用した楽音生成を行なう際には、まずこのドライバ、すなわち図6(a)の処理を起動し、ソフト音源に係るAPIを有効にしておく。図6(a)において、ステップ601で各種の初期設定を行なう。この初期設定で、再生バッファPB0,PB1を0クリアするとともに、サウンドI/O112とDMAC114に指示して図1および図2で説明した再生バッファPB0とPB1とを交互に読み出し再生する処理を開始しておく。次にステップ602で何らかの起動要因があるか否かチェックし、ステップ603で起動要因があればステップ604に進む。起動要因がなければ再び602に戻る。ステップ602〜604の起動要因の受け付けが、ソフト音源に係るAPIに対する指示受け付けに相当する。
【0045】
ステップ604では発生している起動要因の種類を判別しそれぞれの処理に分岐する。起動要因がMIDIイベントの入力であったときは、ステップ605のMIDI処理を行ない、その後再びステップ602に戻る。このMIDIイベントの入力とステップ605のMIDI処理が、図2の演奏入力の受け付けに相当する。ステップ604で起動要因がフレーム割り込み(1フレーム再生完了)であるときは、ステップ606の波形生成処理を行ない、その後再びステップ602に戻る。フレーム割り込みは、サウンドI/O112が1フレーム再生完了するごとに発生するハードウェア割り込みである。ステップ606の波形生成処理が、図2の201〜204に示した波形生成演算を行なう処理である。この波形生成処理では、一度に、1フレーム分の波形データ(再生バッファPB0,PB1を合せた大きさの半分に相当する数の波形サンプル)を生成し、再生バッファPB0またはPB1に交互に書き込む。ステップ604で起動要因がその他の要求であるときは、ステップ607で当該起動要因に応じた処理を行ない、その後再びステップ602に戻る。特に、サウンドI/O112による外部入力113のサンプリングの指示、図5のようなソフトエフェクタのアルゴリズムの設定変更の指示、図4の乗算器413−1〜413−8の係数(各系列の信号送出レベルを規定する重み付け係数)の設定指示、ソフトエフェクタで用いるadd処理の重み付け係数の設定指示などの要求がなされたときには、ステップ607のその他処理で対応する処理を行なう。ステップ604で起動要因がソフト音源の終了要求であったときは、ステップ608で終了処理を行なった後、処理を終了する。
【0046】
図6(b)は、図6(a)のステップ605のMIDI処理のうちノートオンイベントを入力したときに実行されるノートオンイベント処理の手順を示す。まずステップ611で、入力したノートオンイベントのMIDIチャンネル、ノートナンバ、およびベロシティを、それぞれレジスタMC,NN,VEに設定する。次に、ステップ612で、発音チャンネル(第0〜第31チャンネル)の割り当てを行なう。ステップ613で、割り当てた発音チャンネルのソフト音源レジスタに、発音に必要な情報(ノートナンバNNやベロシティVEなど)を設定する。さらにステップ614で、割り当てた発音チャンネルのソフト音源レジスタにノートオンを書き込んで発音開始指示を出し、処理を終了する。
【0047】
図示しないが、ノートオフや他の演奏入力などのMIDIイベント処理も同様である。すなわち、ノートオフなら該当する発音チャンネルに対応するソフト音源レジスタにノートオフを設定し、他の演奏入力なら該当する発音チャンネルに対応するソフト音源レジスタに当該演奏入力に対応するデータを書き込む。
【0048】
図7(a)は、図6(a)のステップ606の波形生成処理の手順を示す。この波形生成処理により、図4および図5のようなアルゴリズムで楽音生成が実行される。まずステップ701で、演算準備を行なう。これは、ソフト音源レジスタを参照して波形生成演算を行なうべきチャンネルを認識する処理、今回の波形生成演算で生成した1フレーム分の波形は再生バッファPB0とPB1のどちらに設定すべきかを認識する処理、波形生成用バッファmixA,mixB,mixC,mixDの全領域の0クリアなどの演算準備である。次に、ステップ702で、演算を行なう必要のある全チャンネルに関して16サンプル(ステレオLおよびRの各サンプルを単位として数えると2×16=32サンプル)分の波形発生演算を実行する。これは、図4のアルゴリズムの処理を16サンプル分実行して、波形生成用バッファmixA,mixB,mixC,mixDのそれぞれに2×16サンプル波形生成する処理である。
【0049】
ステップ703では、1フレーム分の波形サンプルが生成できたか否か、すなわち図3(a)の波形生成用バッファmixA,mixB,mixC,mixD上にそれぞれ2×128サンプルが生成されたか否かを判別する。1フレーム完了していなければ、ステップ702に戻って、次の2×16サンプルを生成する。ステップ702を繰り返すことにより、図3(a)の波形生成用バッファmixA,mixB,mixC,mixDのそれぞれに関して、先頭から2×16サンプルずつ波形サンプルを作り込んで行く。
【0050】
ステップ703で図3(a)の波形生成用バッファmixA,mixB,mixC,mixDに1フレーム分の波形が生成できたら、ステップ704に進む。ステップ704,705,706では、バリエーション、コーラス、およびリバーブなどの効果付与処理を行なう。これは、図5で説明したように、バリエーション処理、コーラス処理、およびリバーブ処理、並びにadd処理をユーザが指定したアルゴリズム(ソフトエフェクタのアルゴリズムの設定変更の指示はステップ607のその他処理で行なわれる)の通りの順序で実行する処理である。図示しないがステップ704,705,706のソフトエフェクタの処理も、ステップ702,703と同様、2×16サンプルごとに実行する。すなわち、図3(a)の波形生成用バッファmixA,mixB,mixC,mixDの先頭から2×16サンプル分について図5のアルゴリズムの処理を実行し、次の2×16サンプルについて図5の処理を実行し、…というように処理を進め、最終的に波形生成用バッファmixA上に効果付与された2×128サンプルを得る。図5で説明したバリエーション処理、コーラス処理、およびリバーブ処理、並びにadd処理は、2×16サンプル分を対象とする処理とする。
【0051】
なお、図7(a)には、図5で説明したadd処理が現れていないが、これは、ステップ704〜706のエフェクトブロック処理に含まれているものとする。つまり、ステップ704のバリエーション処理には前記▲1▼と▲2▼の手順の処理が、ステップ705のコーラス処理には前記▲3▼と▲4▼の手順の処理が、ステップ706のリバーブ処理には前記▲5▼と▲6▼の手順の処理が、それぞれ含まれる。
【0052】
なお、ステップ704,705,706の各エフェクト処理は、2×16サンプルずつでなく、1フレーム分を一気にまとめて実行してもよい。すなわち、図5で説明したバリエーション処理、コーラス処理、およびリバーブ処理、並びにadd処理のそれぞれは、1フレーム分を一気に行なう処理としてもよい。この場合でも、1フレームの処理中ではキャッシュは16サンプルごとに有効に働いている。このようにすれば、各バッファ間にわたる処理ではヒット率が落ちる場合があると考えられるが、各エフェクト処理中で使用するレジスタやバッファに関してはヒット率が上がる。発音チャンネルの処理に比べて、エフェクトの処理は結果が得られるまでの時間が長いので1フレーム分を一気に処理していく方が効率が良い。また、1フレーム分一気にといっても、その中で局所的に16サンプル単位で処理を行なえば効率的である。要するに、キャッシュミスを起こりにくくするためには、連続したデータを短期間に連続して処理するようにすればよい。
【0053】
ソフトエフェクタ処理の後、ステップ707で、生成した1フレーム分の波形(すなわちmixA上の2×128サンプル)を再生予約する。これは、mixAの波形サンプルを再生バッファPB0またはPB1の一方(現在、再生に用いられていない方)にコピーする処理である。既に、ステップ601で再生バッファPB0とPB1とを交互に読み出し再生する処理が開始しているので、再生に用いられていない方に生成した波形をコピーするだけで次のフレームで当該波形の発音が実行される。
【0054】
なお、この例では、波形生成用バッファmixAと再生バッファPB0,PB1とを別々に設けたが、mixAを2面用意し、一方をPB0、他方をPB1として兼用することもできる。この場合は、波形生成処理を直接再生バッファ上で行なうことになるので、ステップ707の生成波形をコピーする処理は不要になり、処理速度がより向上する。
【0055】
図7(b)は、図7(a)のステップ702の16サンプル(ステレオLおよびRのそれぞれのサンプルを単位で数えれば2×16=32サンプル)分の波形発生処理の手順を示す。まずステップ711で、第1番目のチャンネルについて演算準備を行なう。図7(a)のステップ701の演算準備により、波形演算処理が必要なチャンネルおよびチャンネル間の優先度は求められているので、優先度が最も高いチャンネルを第1番目のチャンネルとする。次に、ステップ712〜718で当該チャンネルについて16サンプル分の波形生成を行なう。
【0056】
まずステップ712で、後の処理で用いるエンベロープ値を求める。エンベロープ値は、例えばADSR(アタック、ディケイ、サスティン、リリース)タイプのエンベロープ波形を出力するような演算型のエンベロープ生成処理によって発生すればよい。ステップ712で発生したエンベロープ値は、現在生成処理中の16サンプルに対して共通に用いられる。ここで生成したエンベロープ値は、生成した1つの値を16サンプルに共通に使用する。すなわち、波形の16サンプルごとに1つのエンベロープ値が生成されるようになっている。次にステップ713でアドレス生成、波形読み出し、および補間処理(図4の411)を16サンプル分行ない、ステップ714でそれらのサンプルに対してフィルタ処理(図4の412)を行なう。各サンプルは、この段階では未だステレオLR別に分けておらずモノラルである。
【0057】
次にステップ715で、mixAの2×16サンプルを算出する。これは、図4において、フィルタ処理412から出力された16サンプル(モノラル)に対して以下の処理を行なうものである。まず、dryL用重み付け係数(dryLの送出レベルを規定する係数)とステップ712で求めたエンベロープ値とを加算する。この係数とエンベロープ値は、ともにdB(デシベル)スケール上の値であるので、加算がリニアスケール上の乗算に相当する。その後、乗算器413−1で、上記係数とエンベロープ値の加算結果を、フィルタ処理412から出力された各波形サンプル値に対して指数変換乗算する。これによりdry用のL側波形サンプルが16サンプル得られたことになる。dry用のR側波形サンプルも、上記係数をdryR用係数にして同様に求める。以上のようにして求めたドライ用のLRの2×16=32サンプルの波形をmixAに累算する。
【0058】
ステップ715と同様にして、ステップ716ではリバーブ用のLRの2×16=32サンプルの波形をmixBに累算し、ステップ717ではコーラス用のLRの2×16=32サンプルの波形をmixCに累算し、ステップ718ではバリエーション用のLRの2×16=32サンプルの波形をmixDに累算する。もちろん重み付け係数は、ドライ用、リバーブ用、コーラス用、およびバリエーション用で異なるものを用いる。
【0059】
次に、ステップ719で、演算すべき残りのチャンネルがあるか否か判別する。あれば、ステップ720で次チャンネルの演算準備(優先度の高いチャンネルから先に演算するものとする)を行なった後、ステップ712に戻る。これを繰り返して、演算すべき全チャンネルについて、ステレオLおよびRのそれぞれで16サンプル分の波形生成を行なって波形生成用バッファmixA,mixB,mixC,mixDに累算する。ステップ719で演算すべき残りのチャンネルがなければ、リターンする。
【0060】
上述の図7(a)および図7(b)の波形生成演算では、2×16サンプルを単位として効果付与を含む波形生成(図4および図5の処理)を実行している。16サンプルは32バイトであり、また図3(a)の波形生成用バッファmixA,mixB,mixC,mixDのそれぞれは先頭から順に32バイト単位でキャッシングされるようにバウンダリ調整されている。したがって、例えばmixAの第1サンプル目をアクセスしたときには、キャッシュメモリ117に該第1サンプル目を含む16サンプルがキャッシングされ、この16サンプルについての処理中は、キャッシュメモリ117上で波形生成処理が実行されるので、非常に高速に波形生成できる。2×16サンプルであるから64バイト単位であるが、隣り合う16サンプルずつは別のキャッシュラインにキャッシングされるから、ここでは2つのキャッシュラインが使用される。
【0061】
特に、この例では複数種類の効果付与のアルゴリズムをユーザが任意に指定できるので、複数種類の効果付与処理がいろいろな順序で行なわれることになるが、付与する効果の種類ごとに独立に波形生成用バッファを設けているので、1つの効果付与処理を実行する際には対応するバッファ上で処理を行なうことになる。そのバッファは当該効果付与に使用する波形サンプルのみからなる(すなわち当該効果処理に不要な波形サンプルが間に挟まっているようなものでない)ので、キャッシュのヒット効率を飛躍的に高めることができキャッシングの効果が高い。
【0062】
次に、図7(c)のフローチャートを参照して、再生時のDMAコントローラ114の処理を説明する。再生時は、サウンドI/O112からサンプリング周期ごとにサンプル要求割り込み(ハードウェア割り込み)が発行される。これに応じて、DMAコントローラ114は、図7(c)の処理を行なう。まずステップ731で、再生バッファPB0,PB1の1サンプルをサウンドI/O112の出力FIFOに送る。出力FIFOに書き込まれた波形データは、図1で説明したようにサンプリング周期ごとにD/A変換されてサウンドシステム115へと送られ放音される。なお、ステップ731で「DMAB」とあるのは再生バッファPB0,PB1のことである。再生バッファPB0,PB1は、DMAのバッファと見ることもできるのでDMABと記載した。次に、ステップ732でポインタpをインクリメントして処理を終了する。pは再生バッファPB0,PB1から1サンプルを読み出すときのポインタである。以上のようにして、ポインタpを進めながら、サンプリング周期ごとに再生バッファPB0,PB1から1サンプルをサウンドI/O112に渡す。
【0063】
なお、ポインタpは1ずつインクリメントしていくことによりPB0の先頭のサンプルからPB1の最後のサンプルまでを順次読み出すためのポインタであるが、PB1の最後のサンプルを読出した後はPB0の先頭のサンプルを指すようにポインタ値を更新する必要がある。この処理は、DMAコントローラ114が自動的に行なうように設定されている。
【0064】
なお、上記発明の実施の形態では、図7(a)のステップ702,703および図7(b)から分かるように、演算が必要な全チャンネルにわたって16サンプル分の波形生成処理を行なうループ処理を内側のループで実行し、その16サンプル分の波形生成処理を1フレーム完了まで外側のループで実行して、1フレーム分の波形を生成しているが、これらのループ処理を入れ替えてもよい。すなわち、内側のループで1つのチャンネルに関する16サンプル分の波形生成を繰り返して1フレーム分波形生成し、これを外側のループで各チャンネルに関して実行し、最終的な1フレーム分の波形を生成するようにしてもよい。上記発明の実施の形態の方式だと全チャンネルにわたる16サンプルずつ作成していくのでキャッシュのヒット率が高いが、CPUの処理能力が低いと、1フレーム時間内で1フレーム分の波形生成が完了しない可能性がある。これに対して、上記のループ処理を入れ替える方式であれば、優先度の高いチャンネルは始めに1フレーム分作成されるので、もし1フレーム時間内で全チャンネルの波形生成が完了しない場合でも優先度の高いチャンネルについては発音されることになる。なお、これらの方式を混在させて、所定チャンネル数については前者の方式で、残りのチャンネルについては後者の方式で、というようにしてもよい。
【0065】
上記発明の実施の形態では、キャッシュメモリをライトスルー方式にしたが、ライトバック方式としてもよい。ライトバック方式にした方が、キャッシュメモリ上で波形サンプルの更新が可能になるので、より高速な波形生成処理が実現される。
【0066】
なお、ユーザが複数エフェクト間の結線状態だけでなく、複数エフェクトの数や内容を指定できるようにしてもよい。また、キャッシングの単位となるサンプル数は各CPUごとに異なるので、波形生成の処理単位もそれに応じて変更してよい。
【0067】
また、波形生成用バッファの数は、上記発明の実施の形態ではmixA〜mixDの4つであったが、これは、その後段のエフェクトのブロック数が3であることに対応しており、エフェクトのブロック数に応じて変更される。各エフェクトの入力用のバッファとdry用のバッファが必要なので、バッファの数はエフェクトのブロック数+1となる。
【0068】
なお、上述した楽音生成方法を実現するための各種関係情報や動作プログラムなどをハードディスクなどの記憶装置に格納し、CPUがこれらをRAMに読み出してから使用するように構成し、さらにCD−ROM(コンパクトディスク−リード・オンリ・メモリ)やフロッピーディスク、光磁気ディスクなどの可搬型の記憶媒体に記憶されたデータをハードディスクなどの記憶装置に転送できるように構成すれば、関係情報や動作プログラムなどの追加(インストールなど)や更新(バージョンアップなど)の際に便利である。もちろん、可搬型の記憶媒体から直接RAMへデータを転送するようにしてもよい。
【0069】
さらに、可搬型の記憶媒体経由ではなく、通信インターフェース(ネットワークI/O)経由で、ハードディスクなどの記憶装置上の関係情報や動作プログラムなどを通信ネットワーク側からダウンロードするようにしてもよい。上記通信インターフェースは、LAN(ローカルエリアネットワーク)やインターネット、電話回線などの通信ネットワークに接続されており、当該通信ネットワークを介してサーバコンピュータと接続される。クライアントとなる本装置は、自装置が有する記憶装置(ハードディスクなど)に関係情報や動作プログラムなどが記憶されていない場合、上記通信インターフェースおよび通信ネットワークを介してサーバコンピュータへ、関係情報や動作プログラムなどを要求するコマンドを送信する。このコマンドを受け取ると、サーバコンピュータは、要求された関係情報や動作プログラムなどを、通信ネットワークを介して本装置へと配信する。そして、配信された関係情報や動作プログラムなどを本装置が通信インターフェースを介して受信し、記憶装置に蓄積することにより、ダウンロードが完了する。
【0070】
また、本装置を、関係情報や動作プログラムなどをインストールした市販のパーソナルコンピュータなどによって実現しても良い。もちろん、この場合にも、関係情報や動作プログラムなどのデータの配布方法としては、ROMなどの不揮発性メモリにあらかじめ格納しておく方法、可搬型の記憶媒体に格納して配布する方法、および通信インターフェース経由で配布する方法などが適用可能である。
【0071】
【発明の効果】
以上説明したように、請求項1に係る発明によれば、ソフト音源において波形生成用バッファ上で行なう波形生成処理の単位をキャッシュメモリのラインサイズまたはその所定整数倍のサイズとしているため、キャッシュミスが起こりにくく高速な波形生成処理が実現される。請求項2に係る発明によれば、複数チャンネル分の波形データを生成する際のキャッシュのヒット率が上がるので、波形生成の処理時間が短縮される。請求項3に係る発明によれば、複数チャンネル分の波形データを生成する際のキャッシュのヒット率が上がり波形生成の処理時間が短縮されるような楽音発生方法が記憶媒体で提供されるという効果がある。
【図面の簡単な説明】
【図1】この発明に係る楽音発生装置を適用した電子楽器のブロック構成図
【図2】ソフト音源の楽音生成原理を説明するための図
【図3】本発明に係る波形生成用バッファの構成例および従来の波形生成用バッファの構成例を示す図
【図4】ソフト音源による楽音生成からチャンネル累算までのアルゴリズムの例を示す図
【図5】波形データに複数の効果付与を施すソフトエフェクタのアルゴリズムの例を示す図
【図6】メインルーチンおよびノートオンイベントルーチンのフローチャート図
【図7】波形生成処理ルーチンおよび16サンプル分の波形発生処理ルーチンのフローチャート図
【符号の説明】
101…中央処理装置(CPU)、102…リードオンリメモリ(ROM)、103…ランダムアクセスメモリ(RAM)、104…ドライブ装置、106…タイマ、107…ネットワーク入出力(I/O)インタフェース、108…キーボード、109…ディスプレイ、110…ハードディスク、111…サンプリングクロック(Fs)発生器、112…サウンドI/O、114…DMA(ダイレクトメモリアクセス)コントローラ、115…サウンドシステム、116…バスライン、117…キャッシュメモリ、mixA,mixB,mixC,mixD…波形生成用バッファ。
Claims (3)
- 各種のソフトウェアを実行可能な演算処理装置と、
前記演算処理装置の内部または外部に設けられ、前記演算処理装置が波形生成を行なう際にワーキング領域を高速にアクセスするためのキャッシュメモリと、
前記演算処理装置が実行する波形生成ソフトウェアを格納した記憶装置と、
前記演算処理装置で前記波形生成ソフトウェアを実行することにより所定時間長さの時間フレームで再生すべき複数の波形サンプルを一括して生成する際に、ワーキング領域として使用する波形生成用バッファであって、波形生成処理が終了したときは最終的に生成された波形サンプルが設定される波形生成用バッファと
を備えるとともに、
前記波形生成ソフトウェアによって前記演算処理装置で実行される処理には、所定量の波形サンプル(nサンプル)を生成する波形生成処理を含み、該処理を所定回数(m回)繰り返すことで、前記波形生成用バッファに1フレーム分のn×m個の波形サンプルを生成するものであり、
前記波形生成用バッファは、
(1)1回の前記波形生成処理によって生成されるnサンプルを格納するメモリ上の連続的な区間をm個並べて構成し、
(2)前記nサンプルを格納する各区間の長さを前記キャッシュメモリのラインサイズまたはその所定整数倍のサイズとし、
(3)前記m個の区間の間の境界位置は、それらの境界位置が前記キャッシュメモリにキャッシングされる際の境界位置になるようにバウンダリ調整されている
ことを特徴とする楽音発生装置。 - 処理装置が波形生成を行なう際にデータに高速にアクセスするためのキャッシュメモリを備えた処理装置で実行され、複数チャンネル分の楽音を発生可能な楽音発生方法であって、
演奏情報を供給するステップと、
所定時間間隔でタイミング信号を発生するステップと、
前記タイミング信号の発生ごとに、前記演奏情報に応じた複数チャンネル分の波形データを、連続する複数サンプル分、波形生成用バッファ上に生成する生成ステップと、
生成された波形データを、サンプリング周期ごとに1サンプルずつディジタルアナログ変換器に供給し、アナログ波形に変換するステップと
を備えるとともに、
前記生成ステップでは、1回の処理でn個のサンプルの生成を複数チャンネル分実行して累算する処理を行い、それをm回繰り返すことで前記連続する複数サンプル分の波形データを前記波形生成用バッファに生成し、
前記波形生成用バッファは、
(1)前記生成ステップの1回の処理によって生成される複数チャンネル分のサンプルを累算した結果であるnサンプルを格納するメモリ上の連続的な区間をm個並べて構成し、
(2)前記nサンプルを格納する各区間の長さを前記キャッシュメモリのラインサイズまたはその所定整数倍のサイズとし、
(3)前記m個の区間の間の境界位置は、それらの境界位置が前記キャッシュメモリにキャッシングされる際の境界位置になるようにバウンダリ調整されて
メモリ上にその領域を確保されているものである
ことを特徴とする楽音発生方法。 - 処理装置が波形生成を行なう際にデータに高速にアクセスするためのキャッシュメモリを備えた処理装置で実行され、複数チャンネル分の楽音を発生する楽音発生方法に係るプログラムを記憶した、処理装置が読み取り可能な記憶媒体であって、
前記楽音発生方法に係るプログラムは、前記処理装置に、
演奏情報を供給するステップと、
所定時間間隔でタイミング信号を発生するステップと、
前記タイミング信号の発生ごとに、前記演奏情報に応じた複数チャンネル分の波形データを、連続する複数サンプル分、波形生成用バッファ上に生成する生成ステップと、
生成された波形データを、サンプリング周期ごとに1サンプルずつディジタルアナログ変換器に供給し、アナログ波形に変換するステップと
を実行させるとともに、
前記生成ステップでは、1回の処理でn個のサンプルの生成を複数チャンネル分実行して累算する処理を行い、それをm回繰り返すことで前記連続する複数サンプル分の波形データを前記波形生成用バッファに生成し、
メモリ上に領域を確保する前記波形生成用バッファは、
(1)前記生成ステップの1回の処理によって生成される複数チャンネル分のサンプルを累算した結果であるnサンプルを格納するメモリ上の連続的な区間をm個並べて構成し、
(2)前記nサンプルを格納する各区間の長さを前記キャッシュメモリのラインサイズまたはその所定整数倍のサイズとし、
(3)前記m個の区間の間の境界位置は、それらの境界位置が前記キャッシュメモリにキャッシングされる際の境界位置になるようにバウンダリ調整されている
ようなプログラムを記憶した、処理装置が読み取り可能な記憶媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP22303597A JP3852634B2 (ja) | 1996-08-09 | 1997-08-05 | 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP8-227807 | 1996-08-09 | ||
JP22780796 | 1996-08-09 | ||
JP22303597A JP3852634B2 (ja) | 1996-08-09 | 1997-08-05 | 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006148637A Division JP4036233B2 (ja) | 1996-08-09 | 2006-05-29 | 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10111688A JPH10111688A (ja) | 1998-04-28 |
JP3852634B2 true JP3852634B2 (ja) | 2006-12-06 |
Family
ID=26525230
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP22303597A Expired - Fee Related JP3852634B2 (ja) | 1996-08-09 | 1997-08-05 | 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3852634B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5434445B2 (ja) * | 2009-10-01 | 2014-03-05 | ヤマハ株式会社 | 楽音信号制御装置及びプログラム |
JP6008394B2 (ja) * | 2012-08-15 | 2016-10-19 | 株式会社コルグ | 楽音発生装置 |
-
1997
- 1997-08-05 JP JP22303597A patent/JP3852634B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH10111688A (ja) | 1998-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1026662B1 (en) | Software sound source | |
US6180863B1 (en) | Music apparatus integrating tone generators through sampling frequency conversion | |
US6441290B2 (en) | Apparatus and method for reproducing or recording, via buffer memory, sample data supplied from storage device | |
EP1580729B1 (en) | Sound waveform synthesizer | |
EP1018724B1 (en) | Computerized music apparatus processing waveform to create sound effect | |
JP4036233B2 (ja) | 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体 | |
JP3163984B2 (ja) | 楽音発生装置 | |
US5714704A (en) | Musical tone-generating method and apparatus and waveform-storing method and apparatus | |
US5809342A (en) | Computer system and method for generating delay-based audio effects in a wavetable music synthesizer which stores wavetable data in system memory | |
JP3852634B2 (ja) | 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体 | |
JP2002524805A (ja) | 仮想キャッシュを備える音響生成集積回路 | |
JPH07121181A (ja) | 音声情報処理装置 | |
JP3285137B2 (ja) | 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体 | |
JP3246405B2 (ja) | 楽音発生方法、楽音発生装置および楽音発生用プログラムを記録した記録媒体 | |
JP3339372B2 (ja) | 楽音発生装置および楽音発生方法を実現するためのプログラムを格納した記憶媒体 | |
JP3275678B2 (ja) | 楽音発生方法および装置 | |
JP3460524B2 (ja) | 曲データ加工方法、加工後曲データ再生方法および記憶媒体 | |
JP2709965B2 (ja) | Bgm再生に用いる音楽伝送再生システム | |
JP3723973B2 (ja) | 音源装置 | |
JP3148803B2 (ja) | 音源装置 | |
JP2000122668A (ja) | デジタル音声データ処理装置およびコンピュータシステム | |
JP2956552B2 (ja) | 楽音発生方法および装置 | |
JP3695404B2 (ja) | 波形処理デバイス |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040402 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20051209 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051216 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060214 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060420 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060529 |
|
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: 20060817 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060830 |
|
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: 20100915 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100915 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110915 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120915 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130915 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |