JP3275678B2 - 楽音発生方法および装置 - Google Patents

楽音発生方法および装置

Info

Publication number
JP3275678B2
JP3275678B2 JP33254095A JP33254095A JP3275678B2 JP 3275678 B2 JP3275678 B2 JP 3275678B2 JP 33254095 A JP33254095 A JP 33254095A JP 33254095 A JP33254095 A JP 33254095A JP 3275678 B2 JP3275678 B2 JP 3275678B2
Authority
JP
Japan
Prior art keywords
waveform
data
waveform data
processing
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.)
Expired - Fee Related
Application number
JP33254095A
Other languages
English (en)
Other versions
JPH09152869A (ja
Inventor
元一 田邑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yamaha Corp
Original Assignee
Yamaha Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yamaha Corp filed Critical Yamaha Corp
Priority to JP33254095A priority Critical patent/JP3275678B2/ja
Publication of JPH09152869A publication Critical patent/JPH09152869A/ja
Application granted granted Critical
Publication of JP3275678B2 publication Critical patent/JP3275678B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)
  • Electrophonic Musical Instruments (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、演算処理装置を備
える汎用処理装置により楽音を生成できるようにした楽
音発生方法および装置に関する。
【0002】
【従来の技術】従来の楽音発生装置は、通常、MIDI
(Musical Instrument Digital Interface)、鍵盤ある
いはシーケンサなどからの演奏情報を入力する演奏入力
部、楽音波形を発生する音源部、入力された演奏情報に
応じて前記音源部を制御する中央処理装置(CPU)な
どから構成されていた。ここで、CPUは、入力された
演奏情報に応じて、チャンネルアサイン、パラメータ変
換などの音源ドライバ処理を実行し、音源部の割り当て
たチャンネルに変換したパラメータと発音開始指示(ノ
ートオン)を供給する。また、音源部は供給されたパラ
メータに基づいて楽音波形を生成するものであり、この
音源部としては電子回路などのハードウエアが採用され
ていた。このため、楽音発生装置は楽音を発生するため
の専用機器となってしまい、楽音を発生するときには専
用の楽音発生装置を準備することが必要であった。
【0003】そこで、これを解決するために、最近で
は、前記ハードウエア音源の動作をコンピュータプログ
ラムによる音源処理(ソフトウエア音源)に置き換え、
CPUにより演奏処理と音源処理とを実行させるように
した楽音発生方法が提案されている。ここで、演奏処理
とは、前述した音源ドライバ処理に相当する処理であっ
て、入力されたMIDIなどの演奏情報に基づき、生成
される楽音を制御するための制御情報を作成する処理の
ことである。また、音源処理とは、前記演奏処理におい
て作成された制御情報に基づき楽音の波形データを生成
する処理のことである。この楽音発生方法によれば、専
用の楽音発生装置を用いることなく、CPUとソフトウ
エアのほかにはDA変換用のチップを備えるだけで、楽
音を発生させることが可能となる。
【0004】楽音を発生させるためには、サンプリング
周期、すなわち、DAC(Digtal Analog Converter )
における変換タイミング毎に波形サンプルをDACに供
給することが必要である。そこで、CPUは、通常時は
押鍵検出等の演奏処理を実行し、該演奏処理に対して各
サンプリング周期毎に音源処理を割り込み実行して、複
数チャンネルの楽音の1サンプル分の波形データを演算
生成した後、再び演奏処理に復帰するという動作を行う
ことが提案されている。
【0005】
【発明が解決しようとする課題】このようなソフトウエ
ア音源によれば、専用の楽音発生装置を用いることなく
楽音を発生させることが可能となるが、CPUは、各サ
ンプリング周期毎に各発音チャンネルの波形生成演算処
理を行うときに、まず、前回の当該発音チャンネルの演
算に用いた各種のデータをメモリからレジスタに復帰さ
せること、および、当該波形生成演算終了後に次回の処
理のために前記レジスタの内容をメモリに退避すること
が必要であり、本来の波形生成演算以外の処理に多くの
処理時間を必要としていた。
【0006】そこで、このような問題を解決するため
に、所定期間ごとに該所定期間に対応する複数サンプル
の波形データをまとめて生成演算することにより、演算
効率を向上させることが考えられる。このようなソフト
ウエア音源によれば、複数の楽音波形サンプルの演算に
ついて1回だけ各発音チャンネルの準備処理を行なうだ
けで良いようになり、準備処理に要するCPUのオーバ
ヘッドを小さくすることが可能となり、ひいては、生成
された楽音の質を向上することができるとともに同時発
音チャンネル数を増加することができるようになる。
【0007】前述したようにソフトウエア音源は前記演
奏処理を実行する音源MIDIドライバ部と前記音源処
理を実行する音源部とから構成されている。ずなわち、
音源MIDIドライバ部は、MIDIシーケンサソフ
ト、ゲームソフトあるいはカラオケソフトなどのアプリ
ケーションプログラムからMIDIイベントなどの演奏
情報を受け取り、受け取ったMIDIイベントをそれに
対応する音源(発音チャンネル)に渡すべき楽音制御パ
ラメータに変換する処理を行なう。
【0008】また、音源部は複数チャンネル(例えば最
大32チャンネル)の波形テーブル合成とリバーブなど
のエフェクト処理とを行ない、処理結果であるオーディ
オ波形データをDACに出力する。図8にこの音源部に
おいて実行される処理の全体構造を示す。この図におい
て、101は複数チャンネルの波形テーブル合成をおこ
なう波形合成処理部、102は生成された左チャンネル
用の波形データを格納する左チャンネル用出力バッファ
OBL、103は生成された右チャンネル用の波形デー
タを格納する右チャンネル用出力バッファOBR、10
4はエフェクト処理を行なうために生成された波形デー
タを格納するエフェクト用出力バッファOBE、105
は生成された波形データに対して、例えばリバーブ処理
などのエフェクト処理を行なうエフェクト処理部、10
6は生成された波形データをDACに出力するための左
チャンネル用オーディオ出力バッファOL、107は生
成された波形データをDACに出力するための右チャン
ネル用オーディオ出力バッファORである。なお、出力
バッファOBL102、OBR103、OBE104、
オーディオ出力バッファOL106およびOR107の
各バッファは、それぞれ複数サンプル分の波形データを
格納する容量を有しており、具体的には、RAM上にお
ける領域として実現されている。
【0009】波形合成処理部101は、音源MIDIド
ライバから出力される音源制御パラメータに応じて波形
メモリから読み出した波形データに対する補間演算およ
びゲイン調整演算を行ない、このようにして生成したオ
ーディオデータを、対応する左チャンネル用出力バッフ
ァOBL102、右チャンネル用出力バッファOBR1
03およびエフェクト用出力バッファOBE104の3
つの出力バッファに格納する。エフェクト処理部105
はエフェクト用出力バッファOBE104に格納されて
いる波形データに対して、例えばリバーブ処理などのエ
フェクト処理を行ない、得られたデータを前記左チャン
ネル用出力バッファOBL102および右チャンネル用
出力バッファOBR103の対応するデータに加算す
る。左チャンネル用出力バッファOBL102および右
チャンネル用出力バッファOBR103に格納された各
波形データは、左チャンネル用オーディオ出力バッファ
OL106および右チャンネル用オーディオ出力バッフ
ァOR107に書き込まれ、各サンプリング周期毎に順
次図示しないDACに出力されて楽音が発生されること
となる。
【0010】ところで、近年、このようなソフトウエア
音源処理が実行されるパーソナルコンピュータなどの汎
用コンピュータや電子楽器に搭載されているCPUとし
て、処理速度を向上するために、キャッシュメモリを備
えているものが多く用いられるようになってきている。
しかしながら、キャッシュメモリを搭載していても、キ
ャッシュ・ミス率が高い場合には必ずしも処理が高速に
なるわけではない。より効率よく波形生成演算を行なう
ことができれば、発音チャンネル数を増加させることが
可能となり、また、並行して実行される楽音発生以外の
アプリケーションソフトウエアも高速に実行することが
できるようになる。
【0011】そこで、本発明は、キャッシュメモリを備
えたCPUにおいて特に効率よく波形生成演算を実行す
ることができる楽音発生方法および楽音発生装置を提供
することを目的としている。
【0012】
【課題を解決するための手段】上記目的を達成するため
に、本発明の楽音発生方法は、(1)演奏情報を入力す
る入力ステップ、(2)入力された演奏情報に基づいて
1サンプル分ずつ複数系列の波形データを繰り返し演算
することにより、複数系列の波形データを複数サンプル
分まとめて生成する波形生成ステップ、(3)前記波形
生成ステップにおいて演算生成された複数系列の波形デ
ータ1サンプル分ずつインターリーブして出力バッファ
に格納するステップ、および、(4)前記出力バッファ
に格納された複数サンプル分の複数系列の波形データを
サンプリング周期毎に1サンプルずつ出力する出力ステ
ップを含む、キャッシュメモリを備えた演算処理装置に
おいて実行される楽音発生方法である。
【0013】また、本発明の楽音発生装置は、音源処理
プログラムと演奏処理プログラムを記憶したメモリと、
複数サンプル分の複数系列の波形データを1サンプル分
ずつインターリーブして格納するバッファメモリ手段
と、キャッシュメモリを備え、前記音源処理プログラム
と前記演奏処理プログラムとを実行する演算手段であっ
て、前記音源処理プログラムにより複数系列の波形デー
タを1サンプル分ずつ繰り返し演算することにより、複
数サンプル分の複数系列の波形データをまとめて演算生
成して前記バッファメモリ手段に格納する演算手段と、
前記バッファメモリ手段に格納された波形データに基づ
き楽音を出力する楽音出力手段とを有する楽音発生装置
である。
【0014】このような本発明によれば、出力バッファ
に右チャンネル、左チャンネルおよびエフェクト用など
の複数の系列のデータを1サンプル分ずつインターリー
ブして格納しているので、キャッシュメモリを搭載した
システムにおいて、キャッシュミスの生じる可能性を低
くすることができ、波形生成演算を高速に実行すること
ができるようになる。
【0015】
【発明の実施の形態】本発明の楽音発生方法を実行する
ことのできる楽音発生装置の構成を図1に示す。この図
において、1はアプリケーションプログラムや楽音波形
サンプルの生成等の各種演算処理を行うマイクロプロセ
ッサ(CPU)、2は前記CPU1に搭載されているキ
ャッシュメモリ、3はプリセット音色データ等が記憶さ
れているリードオンリメモリ(ROM)、4はCPU1
のワークメモリエリアや音色データエリア、入力バッフ
ァエリア、チャンネルレジスタエリア、出力バッファエ
リア等の記憶エリアを有するランダムアクセスメモリ
(RAM)、5は時刻を指示すると共に、タイマ割り込
み処理のタイミングをCPU1に指示するタイマ、6は
MIDIイベントが入力されると共に、生成されたMI
DIイベントを出力するMIDIインターフェース、7
は英字、かな、数字、記号などのキーと備えるいわゆる
パソコン用のキーボードである。
【0016】8はユーザが楽音発生装置と対話するため
のディスプレイ(モニタ)、9は楽音を生成するプログ
ラム等のアプリケーションプログラムがインストールさ
れていると共に、楽音波形サンプルを生成するために使
用する楽音波形データ等が記憶されているハードディス
ク(HDD)、10は、RAM4の一部のCPUにより
指定されたエリア(オーディオ出力バッファ)に記憶さ
れている楽音波形サンプルデータを、一定のサンプリン
グ周期(例えば、48kHz)毎にCPU1を介するこ
となく直接にデジタル・アナログ変換器(DAC)11
に供給するための、例えばDMA(DMA;Direct Mem
ory Access)回路などからなる再生部、11は楽音波形
サンプルデータを受け取りアナログ信号に変換するデジ
タル・アナログ変換器(DAC)、12はDAC11か
ら出力されたアナログ信号に変換された楽音信号を放音
するサウンドシステム、13はバスである。以上の構成
はパソコン、ワークステーション等と同等であり、それ
らの上で本発明の楽音発生方法を実施することができ
る。
【0017】上記CPU1に搭載されているキャッシュ
メモリ2の一構成例について、図2を参照して説明す
る。同図(a)はメモリアドレスを示し、(b)はキャ
ッシュメモリの構成を示す。同図(b)に示すようにこ
のキャッシュメモリは、32バイト・ライン、128セ
ットを有する8ウエイ・セット・アソシアティブ構成と
されており、同図(a)に示すように、メモリアドレス
は19ビットのタグアドレスフィールド、7ビットのエ
ントリ(セット)を選択するためのインデックスフィー
ルド(Eアドレスフィールド)および5ビットのライン
(ブロック)内オフセットを指定するためのLアドレス
フィールドからなる31ビット構成とされている。
【0018】このようなキャッシュメモリの検索時に
は、まず、メモリアドレス中の7ビットのEアドレスを
用いて、128個あるエントリのうち要求されるデータ
が格納されているエントリを直接アクセスする。各エン
トリーにはウェイ0〜ウェイ7の8つのラインがあり、
各ラインがそれぞれタグアドレスを保有している。次
に、これら8つのタグアドレスをメモリアドレスの19
ビットのタグアドレスフィールド部分と比較する。ここ
でいずれかのタグアドレスとの一致が検出されれば、ヒ
ットしたことになり、当該ラインが選択され、メモリア
ドレスの5ビットのLアドレスによって、要求したデー
タのライン内での番地が決定され、対応するデータがキ
ャッシュメモリから読み出される。
【0019】前記タグアドレスとの一致が検出されない
ときは、キャッシュ・ミスとなり、メインメモリ(図1
におけるRAM4)にアクセスして、当該メモリ番地を
含むラインをキャッシュメモリに読み込む。以上はキャ
ッシュアクセスが読み込みの場合であるが、書き込みの
場合はライトスルー方式あるいはライトバック方式によ
り書き込みアクセスが処理される。一般に、平均メモリ
・アクセス時間は、ヒット時間+ミス率×ミス・ペナル
ティで表され、ヒット時間は例えば1〜2クロック・サ
イクル程度であり、一方、ミス・ペナルティは、ブロッ
ク・サイズにもよるが、例えば10〜12クロック・サ
イクル程度となるため、キャッシュ・ミス率が大きい場
合にはキャッシュメモリを設けたことによる実行時間の
低減効果が減少することとなる。そこで、キャッシュ・
ミス率を小さくすることが処理の高速化のために重要で
ある。
【0020】上述したような楽音発生装置において動作
する本発明のソフトウエア音源は、主として音源MID
Iドライバ部および音源部(トーンジェネレータタス
ク)からなっている。音源MIDIドライバは、MID
Iシーケンサソフト、ゲームソフトあるいはカラオケソ
フトなどのアプリケーションソフトから、MIDI信号
の入力イベントがあったときに起動される。起動される
と、音源MIDIドライバは、入力されたMIDI信号
に応じて、ノートオン、ノートオフ、プログラムチェン
ジ、コントロールチェンジ、システムエクスクルーシブ
などの処理を行う。ノートオンイベントの場合は、新規
な発音を音源であるトーンジェネレータタスクの発音チ
ャンネルに割り当て、該割り当てたチャンネルに設定す
るための楽音制御パラメータとノートオンを用意する。
用意される楽音制御パラメータは、MIDIチャンネル
ごとに選択されている音色の音色パラメータをノートオ
ンイベントに付随するノートナンバ、演奏タッチに応じ
て加工処理したパラメータである。なお、この用意され
た楽音制御パラメータはトーンジェネレータタスクの起
動時にトーンジェネレータタスクの音源レジスタに転送
される。
【0021】トーンジェネレータタスクは、最大32c
hの波形テーブル合成機能と、モノラル入力ステレオ出
力のリバーブ機能を有しており、後述するオーディオ出
力デバイスからの波形データ要求に応じて、所定時間
(1フレーム時間)ごとに起動される。このトーンジェ
ネレータタスクは、自ら生成する波形テーブル合成デー
タに対してリバーブなどのエフェクト処理を行い、処理
結果であるオーディオ波形をオーディオ出力バッファに
出力する。
【0022】前記オーディオ出力デバイスは、1フレー
ムの時間長に相当する複数サンプルの波形データを記憶
したオーディオ出力バッファに対するアクセス権を受け
取り、該受け取ったオーディオ出力バッファに記憶され
た波形データをサンプリング周期毎に1サンプルずつ読
み出してDAC11に出力する機能のことであり、これ
はCPU1、DAC11および再生部(DMA)10の
共同作業として実行される。そして、複数の出力バッフ
ァを連続してオーディオ出力デバイスに受け渡すことが
可能であり、その場合オーディオ出力デバイスは出力バ
ッファに記憶された波形データを受け取った順番に順次
再生する。また、1つのオーディオ出力バッファの再生
が終了する毎に、output readyのメッセージを発生する
機能を備えている。
【0023】図3に本発明の楽音発生方法における音源
部(トーンジェネレータタスク)において実行される処
理の全体構造を示す。この図において、20は最大32
チャンネルの波形テーブル合成処理、40はエフェクト
処理を表している。また、29は波形データを記憶して
いる波形データメモリ(波形テーブル)、21は補間演
算部、22は整数形式のデータを浮動小数点形式のデー
タに変換するデータ変換部、23、24および25は乗
算部、26、27、28、47は加算部、30は3系列
の波形データが格納される出力バッファOB3である。
また、41、42、43、45および46はバッファ、
44はリバーブ処理、51は浮動小数点形式のデータを
整数形式のデータに変換するデータ変換部、52および
53はそれぞれ左チャンネル用および右チャンネル用の
オーディオ出力バッファである。
【0024】なお、図3において、太い矢印は浮動小数
点形式で表されたデータであることを示し、細い矢印は
整数データであることを表している。また、このシステ
ムにおいて使用しているCPUにおいては、浮動小数点
乗算の方が整数乗算よりも高速に実行されるので、信号
処理は極力浮動小数点形式で行うようになされている。
ただし、波形データメモリ29上の波形データはほとん
ど8ビットの整数データであるために、補間演算部21
においては、整数で乗算を実行し、その後にデータ変換
部22において浮動小数点形式に変換して実行時間を短
縮している。
【0025】また、本ソフトウエア音源およびオーディ
オ出力デバイスにおいては、波形データはフレーム単位
で処理されるようになされている。フレームとは、ある
まとまった処理を行う単位であり、本ソフトウエア音源
およびオーディオ出力デバイスにおいては、例えば数m
s程度の再生時間に相当するサンプル数分の出力バッフ
ァを確保し、これを1フレームの単位としている。この
出力バッファのサイズは波形計算周波数(サンプル周波
数)によって変化するものであり、図3における出力バ
ッファ(OB3)30、オーディオ出力バッファOL5
2およびOR53は、例えば、128サンプル分の波形
データを格納する容量を有している。
【0026】なお、実際には、オーディオ出力バッファ
OL52およびOR53用の領域はそれぞれ複数個確保
され、順次交代してオーディオ出力バッファとして使用
されるようになされている。そして、一方に格納されて
いる波形データが前記オーディオ出力ドライバにより読
み出されている間に、他方の出力バッファに対して演算
生成された次のフレーム時間において読み出される波形
データが格納されるようになされている。
【0027】図4を用いて、前記出力バッファ(OB
3)30に各波形サンプルデータが格納されている様子
を説明する。この図において、SDLj(j=1〜12
8)は第jサンプルの左チャンネル(DryL)用の波形デ
ータ、SDRjは第jサンプルの右チャンネル(DryR)
用の波形データ、そして、SDEjは第jサンプルのリ
バーブ(Rev )用の波形データであることを示してい
る。前述した従来のソフトウエア音源においては、左チ
ャンネル用出力バッファOBL、右チャンネル用出力バ
ッファOBRおよびエフェクト用出力バッファOBE
は、図4の(a)に示すように、それぞれ別個に設けら
れていたが、本発明の出力バッファ(OB3)30にお
いては、同図(b)に示すように、各サンプル毎にSD
L、SDR、SDEの3系列の出力が順に配列されてお
り、複数の出力系列についてインターリーブされたバッ
ファとなっている。したがって、先に述べた例でいえ
ば、出力バッファOB3は、SDL、SDRおよびSD
Eの3系列のそれぞれについて128サンプル分、すな
わち、全部で384サンプルの波形データを格納するこ
とができる容量を有している。
【0028】本発明においては、後述するように、各発
音チャンネル毎に1サンプルずつ複数系列の波形データ
を生成する処理を繰り返すことにより、複数系列の複数
サンプル分の波形データをまとめて生成演算しており、
波形データを1サンプル分ずつ複数の出力系列について
インターリーブして配列することにより、データがキャ
ッシュメモリに格納されている確率を高くすることがで
き、キャッシュ・ミス率を低くできる。したがって、演
算速度を高くすることが可能となるのである。
【0029】さて、波形テーブル合成処理20は、基本
的に波形補間とゲイン調整とからなっている。波形デー
タメモリ29から読み出した波形データは補間演算部2
1により音源MIDIドライバから供給されるピッチ情
報を用いて補間され、データ変換部22により浮動小数
点形式に変換される。この出力は3つの出力系列、すな
わち、生成された波形データをそのまま出力する(ドラ
イ)左チャンネル信号Lおよび右チャンネル信号R、そ
して、リバーブ処理への入力となる信号L+Rに分けら
れて、それぞれ、乗算部23、24および25において
音源MIDIドライバから供給されるVolume情報(各発
音チャンネルの音量エンベロープ信号にそれぞれ上記3
系列の各出力毎のレベルを乗じたデータ)が乗算され
る。この最大32の各発音チャンネルから出力される3
系列の波形データは、それぞれ、加算部26、27およ
び28において互いに加算される。
【0030】加算器26、27および28からの3系列
の波形データ出力は、それぞれ、出力バッファ(OB
3)30のSDLj、SDRjおよびSDEjに格納さ
れる。出力バッファ(OB3)30のSDEjに格納さ
れたL+Rデータはバッファ43を介してリバーブ処理
44に入力されてリバーブ演算が行われ、生成されたリ
バーブ出力データ(反響音データ)は、それぞれ、バッ
ファ45および46を介してLとR独立に、ゲイン調整
された後加算部47に入力される。加算部47では、出
力バッファ(OB3)30の対応するSDLjから読み
出されたバッファ41の出力データと前記バッファ45
の出力データ、および、出力バッファ30の対応するS
DRjから読み出されたバッファ42の出力データと前
記バッファ46の出力データとがそれぞれ加算され、該
加算結果データは、該出力バッファ(OB3)30のS
DLjおよびSDRjにそれぞれ書き戻される。
【0031】これにより、該出力バッファOB3のSD
LjおよびSDRjには、当該サンプリング周期におい
て出力すべき波形サンプルデータが格納され、これらの
データはデータ変換部51において整数形式に変換され
た後、左右の出力チャンネルに対応するオーディオ出力
バッファOL52およびOR53に格納される。これら
オーディオ出力バッファOL52およびOR53に格納
された波形サンプルデータは、オーディオ出力デバイス
の制御のもとにオーディオ出力データとしてDAC11
に出力されることとなる。
【0032】上述した本発明のソフトウエア音源におけ
る処理のタイミングを図5を用いて説明する。この図に
おいて、横軸は時間軸であり、時間軸の上方に記載され
ている[A]は音源MIDIドライバの処理を示し、時
間軸の下に記載されている[B]はトーンジェネレータ
タスク(音源部)における処理を示している。また、最
下部の1行はオーディオ出力デバイス(図1における再
生部10)によりDAC11に出力されるオーディオ出
力ストリームを表している。
【0033】このシステム全体は、3種類の優先順位を
もつ処理単位に大きく分けられる。最も優先順位の高い
処理は、タイマ割り込みによるMIDI信号の発生によ
って起動される音源MIDIドライバの処理であり、M
IDI信号から楽音制御パラメータへの変換が当該割り
込み処理中において実行される。ただし、タイマ割り込
みではなくアプリケーションから直接MIDI出力した
場合には、最も低い優先順位とされる。次の優先順位
は、トーンジェネレータタスク(音源部)であり、この
トーンジェネレータタスクは、オーディオ出力バッファ
からのready メッセージ(オーディオ出力デバイスが次
のデータを要求するときに出すoutput readyメッセー
ジ)、音源MIDIドライバが新しい楽音制御パラメー
タを送るときに出すTG params receivedメッセージおよ
び音源MIDIドライバが波形をロードするときに出す
wave load request メッセージによって起動される。M
IDIシーケンサなどのその他のアプリケーションは、
最も優先順位の低い処理とされている。
【0034】図5のトーンジェネレータタスクにおける
処理[B]において、1フレーム分に相当するデータの
処理は、(1)楽音制御パラメータを処理する、(2)
32ch分の波形を演算生成する、(3)必要に応じて強
制ダンプを行う、(4)音源ステータスを送る、(5)
リバーブ計算を行う、(6)データをオーディオ出力す
る、となる。これらのうちで、最もCPU負荷が大き
く、かつ、変動の激しいものは(2)の32ch波形生成
処理であり、1フレームの間に計算が完了しない可能性
がある。したがって、処理の順番としては、不確定なも
のを一番最後にもっていくことが合理的であるため、処
理は上記(1)から始めるのではなく、上記(5)から
始めるようになされている。
【0035】上記(4)〜(6)は、一連の処理とされ
ており、オーディオ出力デバイス(再生部10)からの
output readyメッセージにより起動される。このメッセ
ージが受信され、トーンジェネレータタスクが起動され
ると、まず、処理(4)において音源MIDIドライバ
に対し、トーンジェネレータタスクの動作状況である音
源ステータス(TG status )を送出し、音源MIDIド
ライバのコールバック関数が呼ばれる。音源MIDIド
ライバはこのコールバック関数中でTG status読み、ト
ーンジェネレータタスクに対して用意されている発音チ
ャンネルの楽音制御パラメータおよびノートオン信号な
どからなるTG params をトーンジェネレータタスクの音
源レジスタに設定する。
【0036】続いて、トーンジェネレータタスクは
(5)のリバーブ演算の実行を開始し、出力バッファ
(OB3)30のSDEjに格納されている波形データ
を入力としてリバーブ演算処理を実行するとともに、そ
の出力をそれぞれ対応する出力バッファ(OB3)30
のSDLjおよびSDRjに足し込む。そして、(6)
のオーディオデータ出力処理を開始し、バッファ(OB
3)30のSDLjおよびSDRjに格納されている1
フレーム分の波形データをオーディオ出力バッファ52
および53に格納して当該一連の処理を終了する。
【0037】次に行われる一連の処理は(1)〜(3)
である。これらはTG params の受信メッセージにより起
動される。実際には、前述したように、処理(5)より
も前にTG params は受信されているために、前記処理
(6)のあとに続けてこの一連の処理が実行される。こ
こでは、まず、処理(1)において、音源MIDIドラ
イバにより音源レジスタに設定されている楽音制御パラ
メータ、ノートオン信号などのTG params が解釈され、
波形生成演算用のデータに変換される。
【0038】続いて処理(2)において、前記処理
(1)において準備されたパラメータやデータなどに基
づいて、最大32ch分の波形生成処理が実行される。こ
の波形生成処理は、前述したように、波形データメモリ
29のアドレスを楽音ピッチに応じた速さで進めながら
波形データを読み出し、読み出されたサンプル間の補間
を行い、音量エンベロープ(AEG)などのvolume情報に基
づく音量制御を行うことにより、1ch分の波形データを
複数サンプル分まとめて生成し、これを最大32ch分繰
り返すことにより行われる。また、各chにおける音量
制御は左チャンネルL、右チャンネルRおよびリバーブ
用のL+Rの3系列独立に行われ、生成された1フレー
ム×3系列分の波形データは、前記最大32ch分の波
形生成処理に先立って初期化(クリア)された出力バッ
ファ(OB3)の対応する各領域に順次足し込まれる。
【0039】この処理(2)が終了したときに、当該フ
レームの処理は終了し、次のoutputreadyメッセージが
受信されるまでの時間は、他のアプリケーションプログ
ラムなどが実行されることとなる。なお、図5の(ロ)
に示すように、次のoutput readyメッセージが来ても、
上記(2)の波形生成処理が終了していないときには、
該波形生成処理は打ち切られることとなるが、このとき
未計算チャンネルに対して強制ダンプ処理(3)が行わ
れて、クリックノイズが発生しないようになされてい
る。なお、上述した最大32チャンネル分の波形生成処
理は、上記打ち切りが行われた場合に影響が目立つチャ
ンネル、例えば現在のレベルが大きいチャンネル、から
順に行われるようになっている。
【0040】また、上述したトーンジェネレータタスク
の実行中に、より優先順位の高いタイマ割り込みによる
MIDIイベントが発生したときには、制御は強制的に
音源MIDIドライバに移され、そこで対応する処理が
行われる。この様子は、図5の[A]に矢印で示されて
いる。この図には7個のMIDIイベントが発生した様
子が示されている。
【0041】以上説明したトーンジェネレータタスク
(音源部)を図6および図7のフローチャートによりさ
らに詳細に説明する。まず、図6のステップS10にお
いて、このトーンジェネレータタスクが生成される。ト
ーンジェネレータタスクはステップS10において生成
された後、ステップS11においてスリープ状態にされ
る。該スリープ状態にあるときに、メッセージの受信な
どのイベントが発生するとアウェイクされてレディ状態
となり、タスクディスパッチャによりディスパッチされ
ると、ステップS12に移り、当該イベントの種類が判
定される。すなわち、(a)オーディオ出力デバイスか
らのoutput readyであるのか、(b)音源MIDIドラ
イバからの波形データロード要求wave load request で
あるのか、それとも、(c)音源MIDIドライバから
のTG params の受信メッセージであるのかが判定され
る。
【0042】この判定結果が、(a)のオーディオ出力
デバイスからのoutoput ready メッセージの受信である
ときは、ステップS13において音源MIDIドライバ
に対してTG status を送出する(図5における処理
(4))。そして、ステップS14において、リバーブ
がオンとされているか否かを判定し、該判定結果がYE
SのときはステップS15においてリバーブ計算処理
(図5における処理(5))を行った後に、また、該判
定結果がNOのときは直接ステップS16に進む。そし
て、ステップS16においてオーディオデータを出力
(図5における処理(6))し、前記ステップS11に
戻り、スリープ状態となる。
【0043】さて、前記ステップS12における判定結
果が(b)の音源MIDIドライバからの波形データロ
ード要求wave load request メッセージであるときは、
ステップS17に進み、該ステップS17において波形
データを読み込んでメモリに格納する処理を行い、前記
ステップS11に戻ってスリープ状態となる。なお、こ
の波形データロード要求は、トーンジェネレータタスク
の初期化時などに音源MIDIドライバから波形データ
を送るために出されるメッセージである。
【0044】前記ステップS12における判定結果が
(c)のTG params の受信メッセージであるときはステ
ップS18に進む。このTG params は前記ステップS1
3において送信されたTG status に対する返事として音
源MIDIドライバから返ってくるデータであり、前記
ステップS13〜S16の処理に引き続いて、このステ
ップS18以降の処理が実行されることとなる。該ステ
ップS18においては、音源MIDIドライバにより音
源レジスタに設定されている楽音制御パラメータTG par
ams の処理(図5における処理(1))が行われる。具
体的には、受信した楽音制御パラメータTG params から
波形データメモリアドレス、ピッチ情報、EGパラメー
タ、パンデータ、LFO制御データなどの音源制御パラ
メータが決定される。
【0045】続いて、ステップS19に進み受信したTG
params がトーンジェネレータタスクを終了させるコマ
ンドTG EXIT であるか否かが判定され、該判定結果がY
ESのときは、ステップS21に進みタスクは終了す
る。該判定結果がNOのときはステップS20に進み、
該ステップS20において最大32チャンネル分の波形
生成処理(図5の処理(2))を行う。この処理の詳細
については、図7の(a)および(b)を参照して後述
する。この波形生成処理が終了した後は、前記ステップ
S11に戻り、スリープ状態となる。
【0046】前記ステップS20の32ch分の波形生
成処理について、図7の(a)および(b)を参照して
説明する。前記ステップS20の波形生成処理が図7の
(a)のステップS30において開始されると、まず、
ステップS31において、新しいキーオンデータが発生
したか否かが判定される。ここで、新しいキーオンデー
タ有りと判定されると、ステップS32に進み、発音チ
ャンネルの演算順序の並べ替えが行われる。これは、複
数チャンネルの波形生成演算を行っている途中で前述し
たようにoutput ready requestが発生して該演算を途中
で打ち切らなければならなくなる場合があり、重要なチ
ャンネルについては先に演算を完了しておくようにする
ために行われる処理である。なお、cは発音チャンネル
数である。
【0047】このステップS32が終了した後、あるい
は、前記ステップS31において新しいキーオンデータ
の発生がないと判定されたときには、ステップS33が
実行される。このステップS33においては、演算チャ
ンネル数をカウントするカウンタiに「0」をセットし
て該カウンタiをリセットし、変数vNumに発音チャ
ンネル数cと同時発音許可チャンネル数rのうちの小さ
い方の値をセットする。この変数vNumは演算すべき
チャンネルの数を表す変数である。また、出力バッファ
(OB3)のゼロクリアを行う。続いて、ステップS3
4に進み、カウンタiの値が変数vNumよりも小さい
か否かを判定する。この判定結果がNO、すなわち、カ
ウンタiの値が演算すべきチャンネル数vNumよりも
大きいか等しいときには、ステップS39に進み、この
波形生成処理を終了する。
【0048】ステップS34の判定結果がYES、すな
わち、カウンタiの値が変数vNumよりも小さいとき
には、ステップS35に進みoutput ready requestが発
生しているか否かが判定される。この判定結果がYES
のときはステップS36に進み、そのチャンネルiの発
音信号の強制ダンプ処理(図5における(3))が行わ
れる。一方、この判定結果がNOのときは、ステップS
37において、第iチャンネルの波形生成演算が行われ
る。この詳細は図7の(b)を参照して後述する。第i
チャンネルについての強制ダンプ処理S36あるいは波
形生成演算S37が終了すると、ステップS38に進み
カウンタiをインクリメントして、再びステップS34
に戻り、今度はその次のチャンネルi+1に対して前記
ステップS34からステップS38の処理が繰り返され
る。
【0049】前記ステップS37の第iチャンネルの波
形生成演算の詳細について図7の(b)を参照して説明
する。この波形生成演算処理は、ステップS41〜S4
8の一連の処理により第iチャンネルの1サンプル分の
波形データが生成され、この一連の処理を複数回繰り返
すことにより、複数サンプル分の波形データが生成され
るようになされている。
【0050】第iチャンネルの波形生成演算S37がス
テップS40において開始されると、まず、ステップS
41において、前回の波形生成演算時におけるステップ
S44において既に算出されている読み出しアドレス
(readPtr )の整数部に応じて、波形データメモリ29
から補間に必要な数の波形サンプルを読み出し、前記読
み出しアドレスの小数部に応じて該波形サンプル間の補
間演算が行なわれる。これにより、1つの補間サンプル
ISが生成される。
【0051】次に、ステップS42において出力バッフ
ァ(OB3)30の当該サンプルデータに対応するSD
Lj、SDRjおよびSDEjに足し込まれるデータの
音量データ(volume level)VL、VRおよびVEの計
算が行われる。これは、前回のステップS45において
生成された音量エンベロープAEGに、音源レジスタに
各発音チャンネル毎に独立に設定されている3出力系列
分のセンドレベルデータLL、LRおよびLEを加算す
ることにより行われる。続いて、ステップS43におい
て、ステップS42において求められた3系列の各音量
データ(VL、VRおよびVE)をそれぞれ対応する補
間演算結果データ(IS)と乗算し、その結果を当該サ
ンプルに対応する各系列のバッファに足し込む。すなわ
ち、SDLj←SDLj+(IS×VL)、SDRj←
SDRj+(IS×VR)、SDEj←SDEj+(I
S×VE)の演算を行う。
【0052】続いて、ステップS44に進み、Fナンバ
ー(ピッチ情報)を加算して波形データメモリ29の新
たな読み出しアドレスreadPtr を作成する。このよう
に、波形データメモリの読み出しアドレスreadPtr をF
ナンバーに応じた速度で増加させていくことにより、波
形データメモリ(波形テーブル)からFナンバーに比例
したピッチ(音高)を有する波形が読み出されることと
なる。また、Fナンバがきる。
【0053】次に、ステップS45に進み、音量エンベ
ロープAEG の更新を行う。次いで、ステップS46にお
いて該更新した音量エンベロープAEG がkeyoffLevel よ
りも小さい値であるか否かが判定される。この判定結果
がNOのときはステップS47に進んでLFO(Low Fr
equency Oscillator)の更新処理を行い、次いでステッ
プS48において音量パラメータvol とパンパラメータ
pan の平滑化処理を行う。
【0054】次に、ステップS49に進み、このチャン
ネルについて生成すべき波形サンプルがまだ残っている
か、すなわち、このチャンネルについて1フレームに相
当する数のサンプルの波形の生成が終わっていないかど
うかを判定し、その判定結果がYES、すなわち、演算
生成すべきサンプルがあるときは再びステップS41に
戻る。この判定結果がNOのときは該チャンネルの全て
のサンプルについての波形演算処理が終了したのである
から、ステップS51に進み、ステップS37の当該チ
ャンネルの波形生成演算を終了する。したがって、前述
した例のように、出力バッファOB3が128×3=3
84サンプル分の容量を有する場合には、ステップS4
1〜S48の一連の処理を128回繰り返した後に、ス
テップS49における判定結果がNOとなり、ステップ
S51に抜けることとなる。
【0055】また、先のステップS46の判定におい
て、更新された音量パラメータの値がkeyoffLevel より
も小さく、判定結果がYESとなったときはキーオフで
あると判断して、ステップS50においてkeyoff処理を
行い当該チャンネルを消音状態に設定した後、ステップ
S51に進んで、このチャンネルの波形生成演算S38
を終了する。
【0056】波形生成処理においては、以上に説明した
ような順番で、生成したサンプルを出力バッファOB3
の最初のサンプルSDL1 から最後のサンプルSDE12
8 まで足し込んでいく。先に図2で説明したように、キ
ャッシュメモリは複数の連続したデータ単位(図2の例
では32バイト単位)でデータのキャッシングを行なう
ので、本発明で示したように出力バッファOB3のイン
ターリーブを行ない、連続して使用されるデータSDL
j、SDRj、SDEjを連続して配置すれば、キャッ
シュのヒット率を飛躍的に高めることが可能となる。
【0057】なお、上記の実施の形態においては、出力
バッファ30には、ドライL(DryL)、ドライR(Dry
R)およびエフェクト(Rev )の3系列出力がインター
リーブされていたが、これに限られることはなく、ステ
レオのL、Rの2出力系列やドライ、エフェクト1、エ
フェクト2、エフェクト3の4出力系列など、どのよう
な組み合わせとしてもよい。
【0058】また、上記した実施の形態においては、ト
ーンジェネレータタスクを出力ドライバの1フレーム分
の再生終了時に発生されるoutput readyメッセージによ
り起動しているが、必ずしもこれに限られることはな
い。トーンジェネレータタスクにおける(4)〜(6)
の処理は1フレーム時間に比べて短時間で終了するもの
であるから、トーンジェネレータタスクを1フレームの
再生時間の中程で起動するようにしてもよい。また、一
定時間長の各フレーム毎に起動するようにしなくても、
出力ドライバにセットされた波形データが少なくなった
ことを検出した時点で起動するようにしてもよい。
【0059】さらにまた、上記実施形態においては、前
記したように処理(4)、(5)、(6)、(2)、
(3)の順で一連の処理を行っているが、処理の順序は
必ずしもこれに限られることはない。さらにまた、上記
実施形態においては、波形生成演算処理(2)を連続し
て行っているが、必ずしもこれに限られることはなく、
複数個に分割して行うようにしてもよい。
【0060】さらにまた、楽音生成方法は上述した実施
の形態のような波形メモリ方式に限定されることはな
く、FM方式、物理モデル方式、ADPCM方式など、
どのような方式のものであってもよい。
【0061】
【発明の効果】本発明によれば、複数の系列のデータを
1サンプル分ずつインターリーブして格納しているの
で、キャッシュミスの生じる可能性を低くすることがで
き、キャッシュメモリを備えたCPUにおいて波形生成
演算を高速に実行することが可能となる
【図面の簡単な説明】
【図1】 本発明の楽音発生方法を実行する装置の構成
を示す図である。
【図2】 キャッシュメモリの構成を説明するための図
である。
【図3】 トーンジェネレータタスクの機能を説明する
ための図である。
【図4】 波形データバッファの構成を説明するための
図である。
【図5】 楽音発生に関する各処理の実行タイミングを
説明するための図である。
【図6】 トーンジェネレータタスクのフローチャート
である。
【図7】 波形生成演算のフローチャートである。
【図8】 従来の音源処理の機能を説明するための図で
ある。
【符号の説明】
1 CPU、2 キャッシュメモリ、3 ROM、4
RAM、5 タイマ、6 MIDIインターフェース、
7 キーボード、8 ディスプレイ、9 ハードディス
ク、10 再生部、11 DAC、12 サウンドシス
テム、13 バス、20、101 波形テーブル合成処
理、21 補間演算部、22、51 データ変換部、2
3、24、25 乗算部、26、27、28 加算部、
29 波形データメモリ、30、102、103、10
4 出力バッファ、40、105エフェクト処理、4
1、42、43、45、46 バッファ、44 リバー
ブ処理、52、53、106、107 オーディオ出力
バッファ、

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】 次の(1)〜(3)のステップを含む、
    キャッシュメモリを備えた演算処理装置において実行さ
    れる楽音発生方法。 (1)演奏情報を入力する入力ステップ (2)入力された演奏情報に基づいて、1サンプル分ず
    つ複数系列の波形データを繰り返し演算生成し、演算生
    成された複数系列の波形データを1サンプル分ずつイン
    ターリーブして出力バッファに格納することにより、複
    数系列の波形データを複数サンプル分まとめて生成する
    波形生成ステップ (3)前記出力バッファに格納された複数サンプル分の
    複数系列の波形データをサンプリング周期毎に1サンプ
    ルずつ出力する出力ステップ
  2. 【請求項2】 音源処理プログラムと演奏処理プログラ
    ムを記憶したメモリと、 複数サンプル分の複数系列の波形データを1サンプル分
    ずつインターリーブして格納するバッファメモリ手段
    と、 キャッシュメモリを備え、前記音源処理プログラムと前
    記演奏処理プログラムとを実行する演算手段であって、
    前記音源処理プログラムにより複数系列の波形データを
    1サンプル分ずつ繰り返し演算することにより、複数サ
    ンプル分の複数系列の波形データをまとめて演算生成し
    て前記バッファメモリ手段に格納する演算手段と、 前記バッファメモリ手段に格納された波形データに基づ
    き楽音を出力する楽音出力手段とを有することを特徴と
    する楽音発生装置。
JP33254095A 1995-11-29 1995-11-29 楽音発生方法および装置 Expired - Fee Related JP3275678B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP33254095A JP3275678B2 (ja) 1995-11-29 1995-11-29 楽音発生方法および装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP33254095A JP3275678B2 (ja) 1995-11-29 1995-11-29 楽音発生方法および装置

Publications (2)

Publication Number Publication Date
JPH09152869A JPH09152869A (ja) 1997-06-10
JP3275678B2 true JP3275678B2 (ja) 2002-04-15

Family

ID=18256066

Family Applications (1)

Application Number Title Priority Date Filing Date
JP33254095A Expired - Fee Related JP3275678B2 (ja) 1995-11-29 1995-11-29 楽音発生方法および装置

Country Status (1)

Country Link
JP (1) JP3275678B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4645597B2 (ja) * 2007-01-09 2011-03-09 ヤマハ株式会社 楽音合成方法、記録媒体および楽音合成装置

Also Published As

Publication number Publication date
JPH09152869A (ja) 1997-06-10

Similar Documents

Publication Publication Date Title
US5319151A (en) Data processing apparatus outputting waveform data in a certain interval
US5831193A (en) Method and device for forming a tone waveform by combined use of different waveform sample forming resolutions
JP3293434B2 (ja) 楽音発生方法
US6326537B1 (en) Method and apparatus for generating musical tone waveforms by user input of sample waveform frequency
JP2924745B2 (ja) 楽音発生装置及び方法
JP3163984B2 (ja) 楽音発生装置
JP3224002B2 (ja) 楽音発生方法及び波形記憶方法
JP4036233B2 (ja) 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体
JP3275678B2 (ja) 楽音発生方法および装置
JP2901143B2 (ja) 楽音生成装置
JP2000276172A (ja) 楽音生成装置および記憶媒体
JP2797142B2 (ja) 電子楽器用処理装置
JP2671690B2 (ja) 電子楽器
JP3137043B2 (ja) 波形メモリ音源装置および楽音発生装置
JP3852634B2 (ja) 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体
JP3285137B2 (ja) 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体
JP3832383B2 (ja) 楽音生成装置及びプログラム
JP3016470B2 (ja) 音源装置
JP3148803B2 (ja) 音源装置
JPH10207465A (ja) 楽音発生方法および楽音発生装置
JP3832382B2 (ja) 楽音生成装置及びプログラム
JP3603849B2 (ja) 楽音発生方法
JP3104873B2 (ja) 音源装置
JP3269361B2 (ja) 楽音発生方法および装置
JP3705203B2 (ja) 楽音発生方法

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20020108

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: 20080208

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20090208

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20090208

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20100208

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20110208

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20120208

Year of fee payment: 10

LAPS Cancellation because of no payment of annual fees