JP4089687B2 - 楽音信号処理装置 - Google Patents

楽音信号処理装置 Download PDF

Info

Publication number
JP4089687B2
JP4089687B2 JP2004378785A JP2004378785A JP4089687B2 JP 4089687 B2 JP4089687 B2 JP 4089687B2 JP 2004378785 A JP2004378785 A JP 2004378785A JP 2004378785 A JP2004378785 A JP 2004378785A JP 4089687 B2 JP4089687 B2 JP 4089687B2
Authority
JP
Japan
Prior art keywords
channel
waveform data
transfer
sound
sound generation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2004378785A
Other languages
English (en)
Other versions
JP2006184628A (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 JP2004378785A priority Critical patent/JP4089687B2/ja
Priority to US11/318,313 priority patent/US7420115B2/en
Priority to US11/317,690 priority patent/US7425672B2/en
Publication of JP2006184628A publication Critical patent/JP2006184628A/ja
Application granted granted Critical
Publication of JP4089687B2 publication Critical patent/JP4089687B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Description

本発明は、パーソナルコンピュータによる楽音信号の生成に用いて好適な楽音信号処理装置に関する。
近年、パーソナルコンピュータを用いてメモリ音源を構成し、演奏情報に基づいて楽音信号を生成するシステムが知られている。かかるシステムにおいては、ハードディスクに格納された波形データが一部の部分データ(例えば1クラスタ)毎に波形メモリに読み込まれ、読み込まれた部分に対してエンベロープが付与され、効果処理が施されることによって楽音信号が生成される。但し、ハードディスクにおいては、CPUから読出し指示を受信した後に実際にデータが読み出されるまでのタイムラグが大きいため、実際に当該部分データが必要になる時刻よりも前に、CPUはハードディスクに対する読出し指示を出力しておく必要がある。
特許文献1においては、発音チャンネル毎に「前半」および「後半」の2系統のメモリ領域を波形メモリに設け、これら領域を交互に読み出すことによって波形データを連続的に再生する技術が開示されている。この技術においては、「前半」および「後半」の領域には連続するアドレス空間が付与され、音源回路によって「前半」および「後半」の領域が交互に読み出される。従って、読出しアドレスは鋸歯状波状に変化することになる。音源回路によって「前半」の領域の読出しが終了すると、CPUに対して割込が発生し、該CPUの制御の下、当該「前半」の領域に対してハードディスクから新たな部分データが読み込まれる。これと並行して「後半」の領域は音源回路によって読み出され、該「後半」の領域内の部分データに基づいて楽音信号が合成される。
同様に、音源回路によって「後半」の領域の読出しが終了すると、CPUに対して割込が発生し、該CPUの制御の下、当該「後半」の領域に対してハードディスクから新たな部分データが読み込まれる。これと並行して「前半」の領域は音源回路によって読み出され、楽音信号が合成される。このように、一方の領域に対する部分データの転送と、他方の領域を用いたデータの再生とが繰り返し実行されることになる。ここで、各領域の読出し速度は、対応する発音チャンネルの音高(fナンバ)に基づいて決定される。これにより、一種類の波形データを様々な音高に対して適用することができるようになる。
特開平6−51776号公報
ここで、複数チャンネルの読出しアドレスの進行状況を図2(b)を流用して説明する。各発音チャンネル毎のバッファの読み出し速度は、該発音チャンネルの音高(fナンバ)に基づいて決定されるため、図示のように読出しアドレスが成す鋸歯状波の周期は発音チャンネル毎に異なる。そして、何れの発音チャンネルにおいても、鋸歯状波の半周期毎、すなわち白丸印で示すタイミングに割込が発生し、「前半」または「後半」のメモリ領域の更新が開始される。このように、各チャンネル毎に鋸歯状波の周期が相違すると、あるタイミング(図示の例では時刻tp)付近に多数の発音チャンネルの割込がほぼ同時に発生する場合がある。このように、割込が集中して発生すると、ハードディスクから部分データを読み出すタイミングが遅れ、特に読出しアドレスの周期が短いチャンネルに対して部分データの補充が間に合わなくなるという問題があった。
この発明は上述した事情に鑑みてなされたものであり、各発音チャンネルの部分データが必要になるタイミングに応じた最適なスケジュールで各部分データを転送することができる楽音信号処理装置を提供することを目的としている。
上記課題を解決するため本発明にあっては、下記構成を具備することを特徴とする。なお、括弧内は例示である。
請求項1記載の楽音信号生成装置にあっては、波形データを所定サイズのブロック(クラスタ)単位に分割し、該分割したブロック単位にて前記波形データを記憶する波形データ記憶手段(36)と、複数の発音チャンネルに関する再生レートをそれぞれ記憶するレート記憶手段(12,DR(i))と、前記複数の発音チャンネルに対応した波形データをそれぞれ一時的に記憶する複数のバッファ(BiF,BiR)と、前記複数の発音チャンネル(i)について、それぞれ、各発音チャンネルに対応する前記バッファ(BiF,BiR)から、前記レート記憶手段に記憶された当該発音チャンネル(i)の再生レート(DR(i))に対応した速度で波形データを読み出し、該読み出された波形データに基づいて複数の発音チャンネルに対応する楽音信号を生成する楽音信号生成手段(40)と、各発音チャンネル毎に、前記波形データ記憶手段から当該発音チャンネルに対応する前記バッファに次に転送すべき波形データのブロック(次波形ブロック番号NW(i))を特定する特定手段(SP50)と、各発音チャンネル毎に、当該発音チャンネルの再生レートに基づき、特定されたブロックの転送に対応する前記バッファに一時的に記憶された波形データが全て既読となるまでの時限(TL(i))を算出する算出手段(SP10)と、前記複数の発音チャンネルを該算出された時限の早い順に並べたリスト(要求リスト)を作成する作成手段(SP56)と、各発音チャンネル毎に、当該発音チャンネルに対応するバッファに、前記楽音信号生成手段による既読領域が前記所定サイズ以上生じた場合にその旨を判定する判定手段(SP20〜SP24)と、前記リストの上位から、既読領域が所定サイズ以上ある発音チャンネルを順次選択する選択手段(SP40〜SP46)と、選択された発音チャンネルについて、前記特定手段により特定されたブロックの波形データを、前記波形データ記憶手段より読み出して当該発音チャンネルに対応するバッファへ転送する転送手段(SP48)とを具備することを特徴とする。
また、請求項2記載の楽音信号処理装置にあっては、波形データを所定サイズのブロック(クラスタ)単位に分割し、該分割したブロック単位にて前記波形データを記憶する波形データ記憶手段(36)と、複数の発音チャンネルに関する再生レートをそれぞれ記憶するレート記憶手段(12,DR(i))と、前記複数の発音チャンネルに対応した波形データをそれぞれ一時的に記憶する複数のバッファ(BiF,BiR)と、前記複数の発音チャンネル(i)について、それぞれ、各発音チャンネルに対応する前記バッファ(BiF,BiR)から、前記レート記憶手段に記憶された当該発音チャンネル(i)の再生レート(DR(i))に対応した速度で波形データを読み出し、該読み出された波形データに基づいて複数の発音チャンネルに対応する楽音信号を生成する楽音信号生成手段(40)と、前記波形データ記憶手段より前記バッファへ波形データをブロック単位で転送する転送手段(26,32)と、制御手段(CPU6)とを備え、前記制御手段(CPU6)は、各発音チャンネル毎に、前記波形データ記憶手段から当該発音チャンネルに対応するバッファに次に転送すべきブロックを特定するステップ(SP50)と、各発音チャンネル(i)毎に、当該発音チャンネルの再生レートに基づき、特定されたブロックの転送に対応する前記バッファに一時的に記憶された波形データが全て既読となるまでの時限(TL(i))を算出するステップ(SP10)と、前記複数の発音チャンネルを該算出された時限の早い順に並べたリスト(要求リスト)を作成するステップ(SP56)と、各発音チャンネル毎に、当該発音チャンネルに対応するバッファに、前記楽音信号生成手段による既読領域が前記所定サイズ以上生じた場合にその旨を判定するステップと、前記リストの上位から、前記判定された発音チャンネルを順次選択するステップ(SP40〜SP46)と、前記転送手段に対し、前記選択された発音チャンネルについて、前記特定されたブロックの波形データを転送するよう指示するステップ(SP48)とからなる処理プログラムを実行することを特徴とする。
また、請求項3記載の楽音信号処理装置にあっては、波形データを所定サイズのブロック(クラスタ)単位に分割し、該分割したブロック単位にて前記波形データを記憶する波形データ記憶手段(36)と、複数の発音チャンネルに関する再生レートをそれぞれ記憶するレート記憶手段(12,DR(i))と、前記複数の発音チャンネルに対応した波形データをそれぞれ一時的に記憶する複数のバッファ(BiF,BiR)と、前記複数の発音チャンネル(i)について、それぞれ、各発音チャンネルに対応する前記バッファ(BiF,BiR)から、前記レート記憶手段に記憶された当該発音チャンネル(i)の再生レート(DR(i))に対応した速度で波形データを読み出し、該読み出された波形データに基づいて複数の発音チャンネルに対応する楽音信号を生成する楽音信号生成手段(40)と、前記波形データ記憶手段より前記バッファへ波形データをブロック単位で転送する転送手段(26,32)と、各発音チャンネル毎に、当該発音チャンネルのバッファの未読領域のサイズと再生レートとに基づき、当該発音チャンネルのブロックの転送の時限を算出する算出手段(24)と、前記複数の発音チャンネルを該算出された時限の早い順に並べたリスト(チャンネル番号リスト)を作成する作成手段(24)と、各発音チャンネル毎に、当該発音チャンネルに対応するバッファに、前記楽音信号生成手段による既読領域が前記所定サイズ以上生じた場合にその旨を判定する判定手段と、制御手段(CPU6)と、前記リストの上位から、既読領域が所定サイズ以上ある発音チャンネルを順次選択し、選択した発音チャンネルの情報を前記制御手段に通知する通知手段(24)とを備え、前記制御手段(CPU6)は、各発音チャンネル毎に、前記波形データ記憶手段から当該発音チャンネルに対応するバッファに次に転送すべきブロックを特定するステップ(SP124)と、前記転送手段(26,32)に対し、前記通知された発音チャンネルについて、前記特定されたブロックの波形データ転送するよう指示するステップ(SP126)とからなる処理プログラムを実行することを特徴とする。

このように、本発明によれば、バッファ》に次のブロックを読み込むことが可能な発音チャンネルのうち、該バッファに記憶されているブロックによる再生が最も早いタイミングで終了する発音チャンネルを検出し、この検出された発音チャンネルを、転送手段における波形データの転送を行うべき発音チャンネルとして指定するから、各発音チャンネルのブロックが必要になるタイミングに応じた最適なスケジュールで各ブロックを転送することができる。
1.第1実施例
1.1.第1実施例のハードウエア構成
次に、本発明の第1実施例の楽音信号生成システムの構成を図1を参照し説明する。
なお、本実施例の楽音信号生成システムは、汎用パーソナルコンピュータと、該パーソナルコンピュータに実装されるサウンドボードと、該パーソナルコンピュータのオペレーティングシステム(OS)上で動作するアプリケーションプログラムとによって構成されている。図において、2は表示器であり、ユーザに対して各種情報を表示する。4は操作子であり、キーボード、マウス等から構成されている。6はCPUであり、後述するプログラムに基づいて、バス16を介して他の構成要素を制御する。10はフラッシュメモリであり、イニシャルプログラムローダ等が記憶されている。12はRAMであり、CPU10のワークメモリとして用いられる。14は通信インタフェースであり、他の機器との間でMIDI信号等のやりとりを行う。
8はDMA制御回路であり、CPU6を経由することなくRAM12にデータを入出力するための各種制御を実行する。36はハードディスクであり、パーソナルコンピュータのオペレーティングシステム、楽音信号生成システムのアプリケーションプログラムおよび波形データ等を記憶する。また、38はCD−RWドライブであり、CD−ROM、CD−R、CD−RW等のディスクに対してデータを入出力する。34はIDE・I/O部であり、これらハードディスク36およびCD−RWドライブ38に対する入出力処理を実行する。なお、ハードディスク36は、IDE・I/O部34の制御の下、「クラスタ」(例えば16ビット×32kワード)を単位として各種データが読み書きされる。
40はサウンドカードであり、その内部には最大発音チャンネル数m(mは例えば64)の楽音信号を合成する音源回路20が設けられている。22は波形メモリ(半導体メモリ)であり、ここにはハードディスク36に記憶されている各波形データの、各々先頭数クラスタ相当程度の部分データが記憶される。サウンドカード40にCPU6からノートオン信号が供給されると、サウンドカード40においては直ちに楽音信号の合成を開始する必要があるが、その波形データを得るためにハードディスク36にアクセスすると、実際に波形データが読み出されるまでにタイムラグが生じる。そこで、各波形データの先頭部分のみを波形メモリ22に予め読み込んでおくことにより、このタイムラグを解消したものである。
28,30はハードディスク36から波形メモリ22への波形データ転送用のバッファメモリ(半導体メモリ)であり、各々「1クラスタ」相当の容量を有し、相互に独立したバス27,29に各々接続されている。26,32は転送処理部であり、転送処理部26は、ハードディスク36からバッファメモリ28,30に既に読み込まれている「1クラスタ」分の波形データを、音源回路20が波形メモリ22にアクセスしていない期間に波形メモリ22に転送する。また、転送処理部32は、CPU6の指示に応じて、「1クラスタ」分の波形データをハードディスク36から読み出して、バッファメモリ28,30のうちの転送処理部26による転送が終了している側のバッファメモリに転送する。
上述した音源回路20は、複数の発音チャンネルを備えており、核発音チャンネル毎に読出しアドレスを生成して波形メモリ22から波形データを読み出し、読み出された波形データに対してエンベロープ付与を行い、各発音チャンネル毎の楽音信号を合成する。さらに、音源回路20は、合成された複数の楽音信号を混合し、混合された楽音信号に対してリバーブ等の効果を付与する。18はアンプ、スピーカ等から構成されたサウンドシステムであり、この効果付与された楽音信号を発音する。なお、図1内の各構成要素のうち、破線で示された転送管理部24は本実施例には含まれていない。
1.2.第1実施例の動作
1.2.1.初期化処理
パーソナルコンピュータのOS上において楽音信号生成システムのアプリケーションプログラムが起動されると、ハードディスク36内の所定のディレクトリに記憶されている波形データがサーチされ、これらの波形データの数nに応じて図2(a)に示す波形データ対応領域A1〜Anが波形メモリ22に確保される。そして、これら波形データの先頭部分の部分データが該波形データ対応領域A1〜Anに各々格納される。この波形データ対応領域A1〜Anは、各々数クラスタ相当分確保すると好適であるが、必ずしも「1クラスタ」の整数倍である必要はなく、「1クラスタ」以上の領域が各々確保できていればよい。さらに、ハードディスク36のクラスタ長が検出され、波形メモリ22には、最大発音チャンネル数mの各発音チャンネルに対して、「1クラスタ」相当長の2つのチャンネル対応領域B1F,B1R,B2F,B2R,……,BmF,BmRが確保される。任意発音チャンネルiのチャンネル対応領域BiF,BiRは、波形メモリ22のアドレス空間内に連続して配置される。
次に、パーソナルコンピュータのRAM12には、図6に示す管理データ50の領域が確保される。図6において管理データ50は、ヘッダデータ52と、第1〜第m発音チャンネルに各々対応するチャンネルデータ54−1〜54−mとから構成される。そして、管理データ50内においては、双方向リンクドリストの形式によって「要求リスト」というリストが形成される。この要求リストとは、ハードディスク36からチャンネル対応領域に対して部分データの転送を行うべき順に、チャンネルデータ54−1〜54−mを配列して成るものである。
管理データ50においては、該要求リストの要素数(転送要求数)ENと、要求リストの先頭チャンネル番号SCと、要求リストの末尾チャンネル番号MCとが記憶される。また、各発音チャンネルiに係るチャンネルデータ54−iには、要求リスト内の次のチャンネル番号を示す次ch番号NC(i)と、要求リスト内の前のチャンネル番号を示す前ch番号PC(i)とが記憶される。すなわち、当該要求リストは、SCの示す先頭チャンネル番号の要素に、順次次ch番号NC(i)の示す発音チャンネルの要素を連結した、全EN個の要素で構成される。なお、後述する各種処理においては、新たな要素を要求リストに追加し、何れかの要素を要求リストから削除し、または要素の順位を変更する等の操作が実行される。これらの操作は、何れも上記要素数EN、先頭チャンネル番号SC、末尾チャンネル番号MC、各発音チャンネルiの次ch番号NC(i)および前ch番号PC(i)を書き換えることによって実行されるものであり、各チャンネルデータ54−1〜54−mの実体のアドレスが変更されるわけではない。
また、チャンネルデータ54−iには、発音チャンネルiに関する以下の情報も記憶される。
・チェンジフラグCF(i):このフラグは、要求リスト内においてチャンネルデータ54−iの順位を見直す必要があるときに“1”に設定され、順位を見直す必要が無いときに“0”に設定される。
・転送イネーブルフラグTE(i):このフラグは、チャンネル対応領域BiFまたはBiRに対してハードディスク36から部分データを転送することを許容する場合には“1”に設定され、許容しない場合には“0”に設定される。
・転送時限TL(i):このデータは、チャンネル対応領域BiFまたはBiRに対するハードディスク36からの部分データの転送が完了すべき限界となる時刻を示す。図2(c)において、各部分データの音源回路20による読出し期間をTs1,Ts2,Ts3,……とすると、Ts2,Ts3,……が開始される直前の時刻t2, t3,……が転送時限TL(i)になる。なお、波形データの先頭部分(アタック部)は予め波形メモリ22に記憶されるため、対応する転送時限TL(i)は規定されない。
・次波形ブロック番号NW(i):各波形データを構成する部分データには昇順の番号であるブロック番号が付与されている。すなわち、波形データ対応領域Aiに読み込まれる先頭部分のブロック番号は「1」であり、その後の部分データには「1クラスタ」相当量毎に「2」,「3」,……のブロック番号が付与される。次波形ブロック番号NW(i)は、次にハードディスク36からチャンネル対応領域BiFまたはBiRに転送されるべき部分データのブロック番号を示す。
・再生レートDR(i):このデータは、波形メモリ22、バッファメモリ28,30を読み出す場合のアドレス間隔を示すものであり、発音チャンネルiの音高(fナンバ)に対応して決定される。
・割込時刻IT(i):このデータは、発音チャンネルiに対して最後にブロック再生完了割込が発生した時刻を示す。なお、ブロック再生完了割込は、波形データ対応領域Ap、チャンネル対応領域BiFまたはBiRに記憶された部分データの再生が完了したタイミングで発生する。
1.2.2.ノートオンイベントの発生。
パーソナルコンピュータ内部のシーケンサプログラム、あるいは通信インタフェース14から入力されたMIDI信号においてノートオンイベントが発生すると、CPU6において図3に示すノートオンイベント処理ルーチンが起動される。
図において処理がステップSP2に進むと、音源回路20内の第1〜第64発音チャンネルのうち空きチャンネルが検索され、検索された発音チャンネルが当該ノートオンイベントに割り当てられる。ここで割り当てられた発音チャンネルの番号を「i」とする。次に、処理がステップSP4に進むと、このノートオンイベントに対する音色、ベロシティ、音高に基づいて、一の波形データが決定される。次に、処理がステップSP6に進むと、音源回路20の発音チャンネルiに対して、音色、ベロシティ、音高に基づく各種パラメータが設定される。ここで、波形メモリ22における波形データ対応領域Ap(1≦p≦n)は、決定された波形データに基づいて一意に決定され、チャンネル対応領域BiF,BiRは、チャンネル番号iに基づいて一意に決定される。
次に、処理がステップSP8に進むと、発音チャンネルiの発音を開始するように、サウンドカード40に対して発音指令が送信される。これにより、音源回路20にあっては、波形データ対応領域Apの読み出しが開始される。次に、処理がステップSP10に進むと、発音チャンネルiに係る次波形ブロック番号NW(i)が「2」に設定され、転送イネーブルフラグTE(i)が“1”に設定される。すなわち、発音チャンネルiについては、現在はブロック番号「1」の波形データ対応領域Apのみがハードディスク36から読み出されている状態であるから、次波形ブロック番号NW(i)には次に読み出されるべきブロックの番号である「2」が設定されるのである。
また、この次波形ブロック番号NW(i)に係る部分データが読み込まれるべき領域であるチャンネル対応領域BiFは、当該部分データを直ちに読み込んでも差し支えない状態であるから、転送イネーブルフラグTE(i)は“1”に設定されるのである。さらに、ステップSP10においては、チェンジフラグCF(i)が“1”に設定され、転送時限TL(i)は、波形データ対応領域Ai内の部分データの再生が完了する予定時刻に設定される。また、発音チャンネルiの音高(fナンバ)に対応して再生レートDR(i)が設定され、割込時刻IT(i)は「0」(「0」は未だブロック再生完了割込が発生していないことを示す)に設定される。
次に、処理がステップSP12に進むと、チャンネルデータ54−iが要求リストの末尾に追加される。これは、発音チャンネルiのブロック番号「2」の部分データの転送を要求するためである。具体的には、現状において要求リストの末尾の発音チャンネルを「j」とすると、発音チャンネルjの次ch番号NC(j)は「i」に設定され、発音チャンネルiの前ch番号PC(i)は「j」に設定される。そして、発音チャンネルiの次ch番号NC(i)は、リストの末尾であることを示す「0」に設定される。次に、処理がステップSP14に進むと、ハードディスク36からバッファメモリ28または30に対して何らかの部分データが転送中であるか否かが判定される。ここで「YES」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「NO」と判定されると、処理はステップSP16に進み、後述する転送制御サブルーチン(図4(c))が呼び出される。その詳細については後述するが、要求リストの中から一の転送要求が選択され、該転送要求に基づいて部分データの転送処理が実行される。
1.2.3.割込み処理の概要
次に、図8(a)〜(d)を参照し、本実施例における各種割込処理の概要を説明する。
これらの図においては、第1および第3発音チャンネルにおいて波形データが楽音信号が合成されていることとしている。従って、音源回路20においては、第1発音チャンネルの再生レートDR(1)に応じた周期でチャンネル対応領域B1F,B1Rが交互に読み出されるとともに、第3発音チャンネルの再生レートDR(3)に応じた周期でチャンネル対応領域B3F,B3Rも交互に読み出されることになる。また、これらの図において波形メモリ22内のハッチングを施した領域は、未だ音源回路20による読み出されていない部分データが記憶されている領域であるとする。
図8(a)は、第3発音チャンネルについて、チャンネル対応領域B3Fの読み出しが終了し、読み出しアドレスがチャンネル対応領域B3Rに移った直後の状態を示す。チャンネル対応領域B3Fの読み出しが終了すると、音源回路20によって、チャンネル対応領域B3Fの読み出しは終了した旨をCPU6に通知するためのブロック再生完了割込が発生される。これにより、CPU6により、第3発音チャンネルが要求リストの末尾に追加される。ここで、要求リストが空リストであったとすると、第3発音チャンネルは要求リストの先頭の発音チャンネルになる。
次に、図8(b)においては、このブロック再生完了割込に応じて、CPU6から転送処理部32に対して、第3発音チャンネルに対する次の部分データを読み込むように指令される。これにより、転送処理部32によって部分データの読み出しが開始される。読み出された部分データは、バッファメモリ28,30のうち一方(図示の例ではバッファメモリ30)に順次転送されてゆく。ここで、CPU6から転送処理部26に対して、該部分データのバッファメモリ30への転送が完全に終了したときに該部分データをさらに転送すべきチャンネル対応領域(ここではB3F)が、この時点で指示される。
次に、図8(c)において、該部分データのハードディスク36からバッファメモリ30への転送が完了すると、転送処理部32から転送処理部26に対してその旨が通知されるとともに、CPU6に対して転送終了割込が発生する。転送処理部26にあっては、上記通知に応答して、バッファメモリ30から、先に通知されたチャンネル対応領域(B3F)への部分データの転送が自動的に開始される。すなわち、転送処理部26においては、音源回路20が波形メモリ22を読み出していないタイミングが検出され、そのタイミングにおいて部分データが転送される。従って、音源回路20が波形メモリ22にアクセスしている状態では、この転送処理が待機されることになる。また、CPU6においては、転送終了割込に応答して、他のチャンネルの部分データの転送の可否等が判定され、可能である場合には、該部分データの転送のための処理が実行される。以上の処理のうち、転送処理部26において実行されるデータ転送はCPU6が関与することなく、転送処理部26によって独自に実行されるため、CPU6においては特に緊急を要する処理は無い。これは、先の図8(b)の段階において、CPU6から転送処理部26に対して、部分データを転送すべきチャンネル対応領域が予め指定されているからである。このように、本実施例によれば、部分データを転送すべきチャンネル対応領域を転送処理部26に対して予め指定しておくことにより、CPU6に対して緊急を要する処理が発生する頻度を減少させることができる。
ところで、図8(c)においては、第1発音チャンネルにおいて、チャンネル対応領域B1Rの読み出しが完了したものと仮定している。これにより、音源回路20によって、チャンネル対応領域B1Rの読み出しは終了した旨をCPU6に通知するためのブロック再生完了割込が発生される。従って、CPU6により、第1発音チャンネルが要求リストの末尾に追加される。ここで、要求リストが空リストであったとすると、第1発音チャンネルは要求リストの先頭の発音チャンネルになる。
次に、図8(d)においては、このブロック再生完了割込に応じて、CPU6から転送処理部32に対して、第3発音チャンネルに対する次の部分データを読み込むように指令される。これにより、転送処理部32によって部分データの読み出しが開始される。読み出された部分データは、バッファメモリ28,30のうち、前回の転送処理に供されていなかったもの(図示の例ではバッファメモリ28)に順次転送されてゆく。上述したように、バッファメモリ28,30から波形メモリ22への部分データの転送は、音源回路20が波形メモリ22を読み出していないタイミングにおいて実行されるから、図示の例のように、この時点ではバッファメモリ30には未だ波形メモリ22に転送されていない部分データが残っている可能性がある。しかし、本実施例においてはバッファメモリ28,30が交互に使用されるため、バッファメモリ30に残存している波形データを残したまま転送処理部32による転送処理を続行することができる。
上述したように、転送処理部26によって実行されるバッファメモリ28,30からチャンネル対応領域BiF,BiRへの転送処理は、音源回路20が波形メモリ22を読み出していないタイミングが発生するまで実行されない。しかし、このようなタイミングは頻繁に発生するものである。しかも、かかる転送処理は半導体メモリから半導体メモリへの転送であるため、実際に処理が開始されると、処理は直ちに完了する。一方、転送処理部32によるハードディスク36からバッファメモリ28,30への転送処理は、ヘッドの移動やディスクの回転等、機械的な動作を伴うものであるため、転送処理部26による転送処理と比較すると非常に遅いものになる。換言すれば、転送処理部32がバッファメモリ28,30のうち一方に対して転送処理を開始すると、その転送処理が完了するまでに他方のバッファメモリは必ず空き状態になる。従って、例えばハードディスク36がデータ転送可能な状態になっているにもかかわらず、転送処理部26,32側の準備が整わないためにデータ転送を待機させるような事態はまず生じないことが解る。結局、本実施例においては、ハードディスク36から波形メモリ22への部分データの最大転送速度は、ほぼハードディスク36の性能によって決定されることになり、ハードディスク36の性能を充分に発揮させることができる。また、かかる特徴は、CPU6側から見れば、「転送終了割込が発生すると(一方のバッファメモリへの転送が完了すると)、他方のバッファメモリへの転送を直ちに開始してもよい」ということになる。これにより、CPU6においては、他方のバッファメモリが空いているか否か等を確認する必要がなく、「他方のバッファメモリが空いていない」という理由によって処理が待たされることもない。これにより、CPU6に対する負担を一層軽減することができる。
1.2.4.サウンドカード40の動作
ここでサウンドカード40内の動作を図2(a),(b)を参照し説明しておく。上述したように、発音チャンネルiに係るノートオンイベントが発生すると、該発音チャンネルに係る波形データ対応領域Ap内の部分データの読出しが開始される。読出し処理は所定のサンプリング周期毎に実行され、該サンプリング周期毎に読出しアドレスに再生レートDR(i)が加算されてゆく。ここで、再生レートDR(i)は小数点以下の位まで定義することができるため、再生レートDR(i)の累積結果である読出しアドレスの計算値も一般的には小数点以下の位を有することになる。かかる場合には、当該計算結果の前後のアドレスのサンプル値が読み出され、小数値に基づいて補間演算が行われる。これにより、読出しアドレスの計算値が小数値を有する場合であっても、折り返しノイズの少ないサンプリング値を求めることができる。
ここで、波形データ対応領域Apの読出しが完了すると、その後は発音チャンネルiに対応するチャンネル対応領域BiF,BiR内の部分データが交互に読み出される。そして、音源回路20にあっては、読み出された部分データに対してエンベロープが付与されるとともに必要に応じて効果処理が実行され、その結果得られた楽音信号がサウンドシステム18を介して放音されることになる。また、音源回路20においては、波形データ対応領域Ap、チャンネル対応領域BiF,BiRのうち何れかの読出しが完了すると、CPU6に対するブロック再生完了割込が発生する。また、何れかの発音チャンネルについてハードディスク36からバッファメモリ28,30への部分データの転送が完了すると、転送終了割込が発生する。
1.2.5.転送制御サブルーチン(図4(c))の処理
図4(c)に示す転送制御サブルーチンが呼び出されると、処理はステップSP40に進み、要求リスト中に次の転送要求(要素)が存在するか否かが判定される。ここで「NO」と判定されると、本ルーチンの処理は直ちに終了する。一方、ステップSP40において「YES」と判定されると、処理はステップSP42に進み、要求リストの次の転送要求が参照される。すなわち、本ルーチンが呼び出されステップSP40が最初に実行されると、要求リストの先頭の要素が存在するか否かが判定され、それ以降にステップSP40が実行されると、順次、次の要素が存在するか否かが判定されることになる。次に、処理がステップSP44に進むと、「存在する」と判定された転送要求に係る発音チャンネル番号が変数jに代入される。
次に、処理がステップSP46に進むと、該発音チャンネルjに係る転送イネーブルフラグTE(j)が「1」であるか否かが判定される。ここで「NO」と判定されると、処理はステップSP40に戻り、要求リスト内において発音チャンネルjの次の転送要求について、上記ステップSP40〜SP44の処理が実行される。これは、ある発音チャンネルが要求リストの先頭に位置していたとしても、当該発音チャンネルに係る転送イネーブルフラグが「1」でなければ当該チャンネルについて転送を開始することができないため、次に優先順位の高い発音チャンネルの転送を実行するためである。
このように、転送を行うことが可能である発音チャンネルのうち、要求リスト内で最も優先順位の高い発音チャンネルjが検出されると、処理はステップSP48に進む。ここでは、CPU6から転送処理部32に対して、発音チャンネルjと、次波形ブロック番号NW(j)とを伴う転送処理が指令される。これにより、転送処理部32の制御の下、ハードディスク36内に記憶され発音チャンネルjに割り当てられている波形データにおいて、次波形ブロック番号NW(j)で特定される1クラスタの部分データが読み出され、バッファメモリ28または30への転送が開始される。さらに、該ステップSP48にあっては、CPU6から転送処理部26に対して、転送された部分データをさらに転送すべきチャンネル対応領域(BjFまたはBjR)が指令される。そして、CPU6においては、要求リストの中から、当該発音チャンネルjに係る転送要求が削除される。
次に、処理がステップSP50に進むと、発音チャンネルjに係る次波形ブロック番号NW(j)が「1」だけインクリメントされ、転送イネーブルフラグTE(j)が“0”に設定される。ここで、転送イネーブルフラグTE(j)を“0”に設定する理由について説明しておく。上述したように、音源回路20においては波形データ対応領域Apの読出しが終了すると、発音チャンネルjのチャンネル対応領域BjF,BjRが交互に読み出される。その状態において上記ステップSP48が実行されると、バッファメモリ28または30に部分データが転送され、しかる後にチャンネル対応領域BjFまたはBjRのうち「現在読出し中ではない領域」に対して該部分データが転送されることになる。
そして、ステップSP50において次波形ブロック番号NW(j)が「1」だけインクリメントされると、当該次波形ブロック番号NW(j)に係る転送先の領域は、チャンネル対応領域BjFまたはBjRのうち「現在読出し中の領域」になる。従って、かかる転送処理を直ちに実行することはできず、「現在読出し中の領域」の読出しが完了するまで転送処理が実行されないように制限しておく必要がある。このため、ステップSP50においては転送イネーブルフラグTE(j)が“0”に設定されるのである。
次に処理がステップSP52に進むと、先にステップSP48において転送開始された部分データ(ブロック番号=NW(j)−1)が当該波形データの最後の部分データであるか否かが判定される。ここで「YES」と判定されると処理はステップSP54に進み、音源回路20に対して発音チャンネルjの消音処理が指令される。すなわち、音源回路20において当該指令が受信されると、発音チャンネルjの楽音信号が徐々にフェードアウトされ、しかる後に発音チャンネルjが解放される。一方、ステップSP50において「NO」と判定されると処理はステップSP56に進む。ここでは、次波形ブロック番号NW(j)の転送要求が要求リストの末尾に追加される。上述したように、要求リストの内容はその先頭から読み出されるから、最悪の場合でも転送要求は先着順に処理されることになる。さらに、後述するバックグラウンド処理ルーチン(図5)が実行されると、要求リストは転送時限TL(j)順にソートされるから、要求リストはより望ましい状態になるが、仮に該バックグラウンド処理ルーチンが実行されなかったとしても、破綻が生じにくいように要求リストが構成されることが解る。
さらに、ステップSP56においては、チェンジフラグCF(j)が“1”に設定されるとともに、転送時限TL(j)が更新される。まず、次波形ブロック番号NW(j)の転送要求は要求リストの末尾に追加されたが、この転送要求は要求リストに含まれる転送要求のうち必ずしも優先順位が最も低いわけではない。従って、後述するバックグラウンド処理において優先順位の見直しを行うため、チェンジフラグCF(j)を“1”に設定しておく必要がある。また、転送時限TL(j)は、既にチャンネル対応領域BjF,BjRに転送されている(またはステップSP48において転送開始されている)全ての部分データの再生が完了する予定時刻に設定される。以上により、本サブルーチンの処理が終了する。
1.2.6.ブロック再生完了イベント処理(図4(a))
何れかの発音チャンネルiにおいてブロック再生完了割込が発生すると、図4(a)に示すブロック再生完了イベント処理が実行される。図において処理がステップSP20に進むと、割込が発生したチャンネル番号が変数iに代入される。次に、処理がステップSP22に進むと、転送イネーブルフラグTE(i)が「1」に設定される。これは、次波形ブロック番号NW(i)の転送先の領域は、チャンネル対応領域BiF,BiRのうち、この時点で再生が完了した側の領域であり、当該領域の再生が完了したために新たな部分データをいつでも転送可能になったからである。また、ステップSP22においては、割込時刻IT(i)に現在時刻が代入される。
また、割込時刻IT(i)が更新されると、この発音チャンネルiの割込時刻IT(i)と再生レートDR(i)とに基づいて転送時限TL(i)が再計算され更新される。転送時限TL(i)の更新前の値は、発音チャンネルiの音高が変わらない限り割込時刻IT(i)と同一になる筈であるため、更新前の転送時限TL(i)に基づいて新たな転送時限TL(i)を計算することも考えられる。しかし、実際にはピッチベンド等の操作によって音高が若干変更されると、更新前の転送時限TL(i)は割込時刻IT(i)には一致しなくなる。このため、最新の割込時刻IT(i)と再生レートDR(i)とに基づいて転送時限TL(i)を再計算することが望ましいのである。次に、処理がステップSP24に進むと、ハードディスク36からバッファメモリ28または30に対して何らかの部分データが転送中であるか否かが判定される。ここで「YES」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「NO」と判定されると、処理はステップSP26に進み、上述した「転送制御サブルーチン(図4(c))」が呼び出される。
1.2.7.転送終了イベント処理(図4(b))
サウンドカード40においてバッファメモリ28,30内の何れかの領域に対する転送が終了すると、転送終了割込が発生し、図4(b)に示す転送終了イベント処理ルーチンが起動される。本ルーチンにおいては、単に転送制御サブルーチン(図4(c))が呼び出される。すなわち、部分データの転送が可能である限りは、転送が終了する毎に該転送制御サブルーチンが繰り返し呼び出され、転送処理が継続的に実行され続けることになる。
1.2.8.バックグラウンド処理(図5)
CPU6は複数のタスクを同時に処理することができ、CPU6の使用率は常にモニタされている。そして、使用率が所定値より低くなると、図5に示すバックグラウンド処理ルーチンが起動される。図において処理がステップSP60に進むと、要求リストに属する発音チャンネルのうちチェンジフラグCF(i)が“1”であるチャンネルがサーチされる。次に、処理がステップSP62に進むと、かかるチャンネルは発見されたか否かが判定される。ここで「NO」と判定されると、本ルーチンの処理は直ちに終了する。
一方、ステップSP62において「YES」と判定されると処理はステップSP64に進み、発見されたチャンネル番号が変数iに代入される。次に、処理がステップSP68に進むと、要求リストの先頭より、転送時限TL(i)の転送要求を移動すべき位置が検出される。すなわち、発音チャンネルi以外の発音チャンネルjの転送時限TL(j)を要求リストの先頭から順次検索してゆき、転送時限TL(i)よりも遅い転送時限TL(j)が発見されたならば、要求リスト中で発音チャンネルjの一つ前の位置に発音チャンネルiの転送要求が移動される。
次に処理がステップSP70に進むと、チェンジフラグCF(i)が“0”に設定される。次に、処理がステップSP72に進むと、該バックグラウンド処理以外の処理が実行されているか否かが判定される。ここで「NO」と判定されると、ステップSP60〜SP70の処理が繰り返される。一方、ステップSP72において「YES」と判定されると、当該他の処理を優先させるために本ルーチンは直ちに終了する。
このように、本ルーチンによれば、各発音チャンネルの転送要求が転送時限TLの早い順にソートされるから、上記転送制御サブルーチン(図4(c))においては、転送時限TLの早い順に転送が可能であるか否か(転送イネーブルフラグTEが“1”であるか否か)が判定される。従って、該ルーチンにおいては、転送イネーブルフラグTEが“1”である発音チャンネルのうち転送時限TLが最も早い発音チャンネルが選択されるため、部分データの転送が間に合わなくなるような事態を未然に防止することができる。
2.第2実施例
2.1.第2実施例のハードウエア構成
次に、本発明の第2実施例について説明する。第2実施例のハードウエア構成は第1実施例のものと同様であるが、サウンドカード40には破線で示す転送管理部24が追加される。この転送管理部24は、ハードディスク36から部分データの転送を行うべき発音チャンネルの順序を管理するものである。
2.2.第2実施例の動作
2.2.1.初期化処理
パーソナルコンピュータにおいて楽音信号生成システムのアプリケーションプログラムが起動されると、上記第1実施例の場合と同様に、ハードディスク36内の所定のディレクトリに記憶されている波形データがサーチされ、波形データ対応領域A1〜Anが波形メモリ22に確保され、これら波形データの先頭部分の部分データが該波形データ対応領域A1〜Anに各々格納される。また、バッファメモリ28,30には、各発音チャンネルに対して、「1クラスタ」相当長のチャンネル対応領域B1F,B2F,……,BmFおよびB1R,B2R,……,BmRが各々確保される。
次に、パーソナルコンピュータのRAM12には、管理データ領域が確保されるが、本実施例における管理データは第1実施例のものとは異なり、「要求リスト」に関連するデータは含まれていない。すなわち、管理データ内にはヘッダデータ52に対応するものは含まれず、各チャンネルデータ54−1〜54−mには先頭チャンネル番号SC、末尾チャンネル番号MCは含まれない。本実施例においては、これらに対応する情報は転送管理部24によって管理されるためである。
2.2.2.ノートオンイベントの発生。
通信インタフェース14から入力されたMIDI信号等においてノートオンイベントが発生すると、CPU6において図7(a)に示すノートオンイベント処理ルーチンが起動される。
同ルーチンのステップSP82〜SP88においては、第1実施例のSP2〜SP8と同様の処理が実行される。すなわち、該ノートオンイベントに対して発音チャンネルiが割り当てられ、波形データが決定されるとともに音源回路20の発音チャンネルiに対して各種パラメータが設定され、サウンドカード40に対して発音指令が送信される。
次に、処理がステップSP90に進むと、RAM12内のチャンネルデータ54−iにおける次波形ブロック番号NW(i)が「2」に設定される。次に、処理がステップSP94に進むと、ハードディスク36からバッファメモリ28または30に対して何らかの部分データが転送中であるか否かが判定される。ここで「YES」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「NO」と判定されると、処理はステップSP96に進み、後述する転送制御サブルーチン(図7(d))が呼び出される。
2.2.3.サウンドカード40の動作
サウンドカード40において転送管理部24以外の部分の動作は第1実施例と同様である。さらに、本実施例にあっては、転送管理部24において以下の処理が実行される。
まず、転送管理部24においては、発音中の全発音チャンネルの中から、以下の全ての条件を満たすものを列挙したリストである「チャンネル番号リスト」が生成される。
(1)当該発音チャンネルiに係るチャンネル対応領域BiF,BiRのうち何れかに対して部分データの転送が可能であること、
(2)CPU6から発音チャンネルiについて消音指令を受けていないこと。
また、該リストの末尾には、実際には存在しないチャンネル番号である数値(例えば「0」)が追加される。そして、転送管理部24においては、該チャンネル番号リストに属する全ての発音チャンネルiについて、波形メモリ22に既に書き込まれている部分データに基づいて波形データを再生可能な転送時限TL(i)が算出され、この転送時限TL(i)の早い順にチャンネル番号をソートしたリストである「チャンネル番号リスト」が生成される。但し、転送管理部24自体は次波形ブロック番号NW(i)が存在するか否かは関知しないため、チャンネル番号リストには、実際には次波形ブロックが存在しない発音チャンネルも含まれる場合がある。
また、転送管理部24において生成されたチャンネル番号リストは、CPU6から自由に読み出すことができる。転送管理部24においては、各発音チャンネルjのチャンネル対応領域BjF,BjRが逐次監視され、部分データの転送の可否に応じて発音チャンネルjがチャンネル番号リストに追加され、あるいは発音チャンネルjがチャンネル番号リストから削除される。また、これと同時に、上述したように転送時限TL(i)に応じて該リストが逐次ソートされる。従って、例えばCPU6がチャンネル番号リストの先頭を読み出すと、チャンネル対応領域BiF,BiRの何れかに空きがあり、かつソート後の順位が最も高い発音チャンネルiが読み出されることになる。
2.2.4.転送制御サブルーチン
図7(d)に示す転送制御サブルーチンが呼び出されると、処理はステップSP120に進み、転送管理部24内のチャンネル番号リストの先頭の要素であるチャンネル番号がCPU6によって読み出され、その結果が変数iに代入される。上述したように、転送処理を行うべきチャンネル番号が存在しない場合には、所定の数値(例えば「0」)が読み出されることになる。次に、処理がステップSP122に進むと、転送処理を行うべきチャンネル番号が存在するか否か(「0」以外の値であるか否か)が判定される。
ここで「NO」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「YES」と判定されると、処理はステップSP124に進み、次波形ブロック番号NW(i)に対応する部分データが存在するか否かが判定される。例えば、対応する波形データの全ブロックの転送が完了した場合等においては、ここで「NO」と判定され、処理はステップSP125に進み、CPU6から音源回路20に対して発音チャンネルiの消音指令が供給される。これにより、発音チャンネルiの楽音信号が徐々にフェードアウトされ、しかる後に発音チャンネルiが解放される。また、この消音指令が転送管理部24によって検出されると、チャンネル番号リストから発音チャンネルiに係る要素が削除される。そして、処理がステップSP120に戻ると、転送管理部24から次のチャンネル番号が読み出され、ステップSP122,SP124の判定が繰り返される。
そして、ステップSP124において「YES」と判定されると、処理はステップSP126に進む。ここでは、CPU6から転送処理部32に対して、発音チャンネルjと、次波形ブロック番号NW(j)とを伴う転送処理が指令される。これにより、転送処理部32の制御の下、ハードディスク36内に記憶され発音チャンネルjに割り当てられている波形データにおいて、次波形ブロック番号NW(j)で特定される1クラスタの部分データが読み出され、バッファメモリ28または30への転送が開始される。さらに、該ステップSP126にあっては、CPU6から転送処理部26に対して、転送された部分データをさらに転送すべきチャンネル対応領域(BjFまたはBjR)が指令される。次に、処理がステップSP128に進むと、次波形ブロック番号NW(i)が「1」だけインクリメントされ、本ルーチンの処理が終了する。
2.2.5.ブロック再生完了イベント処理(図7(b))
何れかの発音チャンネルにおいてブロック再生完了割込が発生すると、図7(b)に示すブロック再生完了イベント処理ルーチンが実行される。図において処理がステップSP100に進むと、ハードディスク36からバッファメモリ28または30に対して何らかの部分データが転送中であるか否かが判定される。ここで「YES」と判定されると、本ルーチンの処理は直ちに終了する。一方、ここで「NO」と判定されると、処理はステップSP102に進み、上述した転送制御サブルーチン(図7(d))が呼び出される。
2.2.6.転送終了イベント処理(図7(c))
サウンドカード40においてバッファメモリ28,30内の何れかの領域に対する転送が終了すると、転送終了割込が発生し、図7(c)に示す転送終了イベント処理ルーチンが起動される。本ルーチンにおいては、単に転送制御サブルーチン(図7(d))が呼び出される。すなわち、部分データの転送が可能である限りは、該転送制御サブルーチンにおいて、転送処理が継続的に実行され続けることになる。
以上のように、本実施例によれば、次波形ブロック番号NWの管理等を除き、第1実施例の要求リストに相当するチャンネル番号リストの管理の大部分がハードウエアである転送管理部24に委ねられる。これにより、本実施例は第1実施例と比較して、CPU6の処理負荷を軽減することができる。
3.変形例
本発明は上述した実施例に限定されるものではなく、例えば以下のように種々の変形が可能である。
(1)上記各実施例においては、パーソナルコンピュータ上で動作するアプリケーションプログラムによって各種処理を実行したが、このアプリケーションプログラムのみをCD−ROM、フレキシブルディスク等の記録媒体に格納して頒布し、あるいは伝送路を通じて頒布することもできる。
(2)上記各実施例においては、バッファメモリ28,30および波形メモリ22をサウンドカード40内に実装したが、これらのメモリ領域をRAM12内に確保することにより、これらメモリの実装を省略してもよい。
(3)上記各実施例において「再生レートDR(i)」は発音チャンネルiの音高(fナンバ)に対応して決定されたが、本発明の「再生レート」は音高(fナンバ)に対して一意に決定されるものである必要はない。例えば、ハードディスク36に記憶される波形データは、データを圧縮した波形データであることも考えられ、その場合、非圧縮の波形データと比較すると、同一のfナンバに対してバッファメモリ28,30内の部分データが消費される速度は遅くなる。また、波形データの分解能も「8ビット」、「16ビット」、「24ビット」等、波形データ毎に異なっても差し支えないから、波形データの分解能が高くなるほどバッファメモリ28,30内の部分データが消費される速度は速くなる。
(4)また、上記各実施例においては、次に転送すべき1ブロックの部分データの転送時限TLに基づいて要求リストを作成したが、それ以降に転送すべき複数のnブロックの転送時限TLを算出し、これらを全て含めるように要求リストを作成するようにしてもよい。
(5)また、上記実施例においては、要求リスト中には発音中の全発音チャンネルが含まれていたが、チャンネル対応領域BiF,BiRのうち一方が書き込み可能になっている発音チャンネルiのみを要求リストに含めるようにしてもよい。
(6)また、要求リストの他の構成方法として、ハードディスク36に後続の未読の部分データが存在する発音チャンネルのみによって要求リストを構成してもよい。
(7)また、全体のサイズが小さい波形データについては、全体をアタック部として波形メモリ22内に置き、ハードディスク36からの転送を行うことなく波形データを再生できるようにしてもよい。
かかる場合には、図3のステップSP10および図7(a)のステップSP90を実行する前に、全体をアタック部として波形メモリ22内に記憶した波形データであるか否かを判定し、この判定結果が否定的であれば上記実施例のステップSP10およびSP90をそれぞれ実行し、判定結果が肯定的であれば、これらに代えて以下のステップSP10’、ステップSP90’を各々実行するとよい。
・ステップSP10’:次波形ブロック番号NW(i)を「なし」の状態(例えば「0」)に設定し、転送イネーブルフラグTE(i)を“0”に設定する。
・ステップSP90’:次波形ブロック番号NW(i)を「なし」の状態(例えば「0」)に設定する。
(8)上記実施例においては最大発音チャンネル数mに対応する全発音チャンネルに対してチャンネル対応領域B1F,B1R,B2F,B2R,……,BmF,BmRを確保した。しかし、上記変形例のように「全体をアタック部として波形メモリ22内に記憶した波形データ」については、かかるチャンネル対応領域は不要である。従って、音源回路20の一部の発音チャンネルをかかる波形データに対する専用発音チャンネルとし、該専用発音チャンネル数に対応する数だけチャンネル対応領域の数を削減してもよい。
(9)上記実施例においてはアプリケーションプログラムの起動時において、各波形データの先頭部分の部分データを波形データ対応領域A1〜Anに読み込んだが、該波形データを読み込むタイミングはこれに限られるものではない。例えば、OSの起動時にこれら波形データを読み込むようにしてもよい。また、波形メモリ22の一部をフラッシュメモリまたはバッテリーバックアップ型のRAM等の不揮発性メモリによって構成すると、一旦先頭部分の部分データが読み込まれたならばOSやアプリケーションプログラムの起動毎に読み込む必要がなくなる。さらに、波形メモリ22の一部をROMによって構成し、ここに先頭部分の部分データを記憶しておけば、その読み込み自体を不要にすることができる。
(10)また、上記実施例においてバックグラウンド処理ルーチン(図5)は、CPU6の使用率が所定値より低くなったことを条件として実行されたが、同ルーチンを実行するタイミングはこれに限られるものではなく、要は他の処理と比較して優先度を低くして実行するようにするとよい。例えば、CPU6がマルチタスクに対応する場合には、同ルーチンをバックグラウンド処理プロセス内で常時実行可能にしておき、他のプロセスと比較してそのプロセスの優先度を低く設定しておいてもよい。また、CPU6が実質的な処理を行っていないアイドル期間の長さを監視し、このアイドル期間が所定時間以上になるとバックグラウンド処理ルーチンを起動するようにしてもよい。但し、バックグラウンド処理ルーチンにおいてステップSP64〜SP70が実行されている途中に他の処理によって管理データ50が更新されると、バックグラウンド処理ルーチンが誤動作するため、ステップSP64〜SP70を実行する期間内では他のプロセスに対して管理データ50をロックしておくとよい。
(11)また、上記実施例のステップSP68にあっては、要求リストの末尾より、転送時限TL(i)の転送要求を挿入すべき位置を検出するようにしてもよい。但し、この場合には、チェンジフラグCF(j)が“1”である発音チャンネルは無視する必要がある。すなわち、発音チャンネルi以外の発音チャンネルjの転送時限TL(j)を要求リストの末尾から順次検索してゆき、「転送時限TL(i)よりも早い転送時限TL(j)を有し、チェンジフラグCF(j)が“0”である発音チャンネルj」が発見されたならば、該発音チャンネルjの一つ後の位置に発音チャンネルiの転送要求を挿入するとよい。
(12)また、上記実施例においては、ハードディスク36が波形データを記憶する単位である「1ブロック」のデータ量は「1クラスタ」と同一であったが、両者は必ずしも同一でなくてもよい。すなわち、「1ブロック」が「複数クラスタ」から構成されるようにしてもよい。
(13)また、上記実施例においては、第1の記録媒体としてハードディスク36を適用した例を説明したが、第1の記録媒体として、MO、CD、DVDなどを適用してもよい。
(14)また、上記実施例においては、波形メモリ22に各発音チャンネルi毎に2つのチャンネル対応領域BiF,BiRを設けたが、発音チャンネルi毎に「3」以上のチャンネル対応領域を設けても良い。
(15)また、各発音チャンネルのチャンネル対応領域は、「1クラスタ」相当量づつ分かれている必要はない。すなわち、1つの発音チャンネルに対して「2クラスタ」以上のサイズ(「1クラスタ」の整数倍に限られない)を有する1つの領域をチャンネル対応領域にしてもよい。かかる場合は、各発音チャンネル毎に、どのアドレスまで書き込みが終了したかを示す書込みポインタと、どのアドレスまで読み出しが終了したかを示す読出しポインタとをRAM12内に確保し、両ポインタの差が1クラスタ以上になったときにブロック再生完了割込を発生させるようにするとよい。
(16)また、この例において、1つの発音チャンネルのチャンネル対応領域の総和が「2クラスタ」相当量を超える場合には、両ポインタの差が2クラスタを超えるタイミング毎にブロック再生完了割込を発生させてもよい。例えば、チャンネル対応領域が「3クラスタ」相当量である場合は、両ポインタの差が2クラスタになる毎にブロック再生完了割込を発生させ、ハードディスク36からバッファメモリ28,30を介しての波形メモリ22への部分データの転送を2回行い、1回のブロック再生完了割込において「2クラスタ」相当量の部分データを補充するようにしてもよい。
本発明の第1,第2実施例の楽音信号生成システムのブロック図である。 第1実施例の動作説明図である。 第1実施例のノートオンイベント処理ルーチンのフローチャートである。 第1実施例の各種処理ルーチンのフローチャートである。 第1実施例のバックグラウンド処理ルーチンのフローチャートである。 第1実施例のデータ構造図である。 第2実施例の各種処理ルーチンのフローチャートである。 第1および第2実施例の動作説明図である。
符号の説明
2:表示器、4:操作子、6:CPU、8:DMA制御回路、10:フラッシュメモリ、12:RAM、14:通信インタフェース、18:サウンドシステム、20:音源回路(楽音信号生成手段)、22:波形メモリ(第2の記録媒体)、24:転送管理部、26,32:転送処理部、27,29:バス(第1および第2のバス)、28,30:バッファメモリ(第3の記録媒体)、34:IDE・I/O部、36:ハードディスク(第1の記録媒体)、38:CD−RWドライブ、40:サウンドカード、50:管理データ、52:ヘッダデータ、54−1〜54−m:チャンネルデータ。

Claims (3)

  1. 波形データを所定サイズのブロック単位に分割し、該分割したブロック単位にて前記波形データを記憶する波形データ記憶手段と、
    複数の発音チャンネルに関する再生レートをそれぞれ記憶するレート記憶手段と、
    前記複数の発音チャンネルに対応した波形データをそれぞれ一時的に記憶する複数のバッファと、
    前記複数の発音チャンネルについて、それぞれ、各発音チャンネルに対応する前記バッファから、前記レート記憶手段に記憶された当該発音チャンネルの再生レートに対応した速度で波形データを読み出し、該読み出された波形データに基づいて複数の発音チャンネルに対応する楽音信号を生成する楽音信号生成手段と、
    各発音チャンネル毎に、前記波形データ記憶手段から当該発音チャンネルに対応する前記バッファに次に転送すべき波形データのブロックを特定する特定手段と、
    各発音チャンネル毎に、当該発音チャンネルの再生レートに基づき、特定されたブロックの転送に対応する前記バッファに一時的に記憶された波形データが全て既読となるまでの時限を算出する算出手段と、
    前記複数の発音チャンネルを該算出された時限の早い順に並べたリストを作成する作成手段と、
    各発音チャンネル毎に、当該発音チャンネルに対応するバッファに、前記楽音信号生成手段による既読領域が前記所定サイズ以上生じた場合にその旨を判定する判定手段と、
    前記リストの上位から、既読領域が所定サイズ以上ある発音チャンネルを順次選択する選択手段と、
    選択された発音チャンネルについて、前記特定手段により特定されたブロックの波形データを、前記波形データ記憶手段より読み出して当該発音チャンネルに対応するバッファへ転送する転送手段と
    を具備することを特徴とする楽音信号生成装置。
  2. 波形データを所定サイズのブロック単位に分割し、該分割したブロック単位にて前記波形データを記憶する波形データ記憶手段と、
    複数の発音チャンネルに関する再生レートをそれぞれ記憶するレート記憶手段と、
    前記複数の発音チャンネルに対応した波形データをそれぞれ一時的に記憶する複数のバッファと、
    前記複数の発音チャンネルについて、それぞれ、各発音チャンネルに対応する前記バッファから、前記レート記憶手段に記憶された当該発音チャンネルの再生レートに対応した速度で波形データを読み出し、該読み出された波形データに基づいて複数の発音チャンネルに対応する楽音信号を生成する楽音信号生成手段と、
    前記波形データ記憶手段より前記バッファへ波形データをブロック単位で転送する転送手段と、
    制御手段と
    を備え、前記制御手段は、
    各発音チャンネル毎に、前記波形データ記憶手段から当該発音チャンネルに対応するバッファに次に転送すべきブロックを特定するステップと、
    各発音チャンネル毎に、当該発音チャンネルの再生レートに基づき、特定されたブロックの転送に対応する前記バッファに一時的に記憶された波形データが全て既読となるまでの時限を算出するステップと、
    前記複数の発音チャンネルを該算出された時限の早い順に並べたリストを作成するステップと、
    各発音チャンネル毎に、当該発音チャンネルに対応するバッファに、前記楽音信号生成手段による既読領域が前記所定サイズ以上生じた場合にその旨を判定するステップと、
    前記リストの上位から、前記判定された発音チャンネルを順次選択するステップと、
    前記転送手段に対し、前記選択された発音チャンネルについて、前記特定されたブロックの波形データを転送するよう指示するステップと
    からなる処理プログラムを実行することを特徴とする楽音信号処理装置。
  3. 波形データを所定サイズのブロック単位に分割し、該分割したブロック単位にて前記波形データを記憶する波形データ記憶手段と、
    複数の発音チャンネルに関する再生レートをそれぞれ記憶するレート記憶手段と、
    前記複数の発音チャンネルに対応した波形データをそれぞれ一時的に記憶する複数のバッファと、
    前記複数の発音チャンネルについて、それぞれ、各発音チャンネルに対応する前記バッファから、前記レート記憶手段に記憶された当該発音チャンネルの再生レートに対応した速度で波形データを読み出し、該読み出された波形データに基づいて複数の発音チャンネルに対応する楽音信号を生成する楽音信号生成手段と、
    前記波形データ記憶手段より前記バッファへ波形データをブロック単位で転送する転送手段と、
    各発音チャンネル毎に、当該発音チャンネルのバッファの未読領域のサイズと再生レートとに基づき、当該発音チャンネルのブロックの転送の時限を算出する算出手段と、
    前記複数の発音チャンネルを該算出された時限の早い順に並べたリストを作成する作成手段と、
    各発音チャンネル毎に、当該発音チャンネルに対応するバッファに、前記楽音信号生成手段による既読領域が前記所定サイズ以上生じた場合にその旨を判定する判定手段と、
    制御手段と、
    前記リストの上位から、既読領域が所定サイズ以上ある発音チャンネルを順次選択し、選択した発音チャンネルの情報を前記制御手段に通知する通知手段と
    を備え、前記制御手段は、
    各発音チャンネル毎に、前記波形データ記憶手段から当該発音チャンネルに対応するバッファに次に転送すべきブロックを特定するステップと、
    前記転送手段に対し、前記通知された発音チャンネルについて、前記特定されたブロックの波形データ転送するよう指示するステップと
    からなる処理プログラムを実行することを特徴とする楽音信号処理装置。
JP2004378785A 2004-12-24 2004-12-28 楽音信号処理装置 Expired - Fee Related JP4089687B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2004378785A JP4089687B2 (ja) 2004-12-28 2004-12-28 楽音信号処理装置
US11/318,313 US7420115B2 (en) 2004-12-28 2005-12-23 Memory access controller for musical sound generating system
US11/317,690 US7425672B2 (en) 2004-12-24 2005-12-23 Exterior structure for keyboard instrument

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004378785A JP4089687B2 (ja) 2004-12-28 2004-12-28 楽音信号処理装置

Publications (2)

Publication Number Publication Date
JP2006184628A JP2006184628A (ja) 2006-07-13
JP4089687B2 true JP4089687B2 (ja) 2008-05-28

Family

ID=36737782

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004378785A Expired - Fee Related JP4089687B2 (ja) 2004-12-24 2004-12-28 楽音信号処理装置

Country Status (1)

Country Link
JP (1) JP4089687B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2369581A1 (en) 2010-03-23 2011-09-28 Yamaha Corporation Tone generation apparatus
US8035021B2 (en) 2009-03-23 2011-10-11 Yamaha Corporation Tone generation apparatus

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6452234B2 (ja) * 2014-11-19 2019-01-16 株式会社コルグ 楽音発生装置およびプログラム
JP6922614B2 (ja) * 2017-09-27 2021-08-18 カシオ計算機株式会社 電子楽器、楽音発生方法、及びプログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8035021B2 (en) 2009-03-23 2011-10-11 Yamaha Corporation Tone generation apparatus
EP2369581A1 (en) 2010-03-23 2011-09-28 Yamaha Corporation Tone generation apparatus

Also Published As

Publication number Publication date
JP2006184628A (ja) 2006-07-13

Similar Documents

Publication Publication Date Title
US7420115B2 (en) Memory access controller for musical sound generating system
US6441290B2 (en) Apparatus and method for reproducing or recording, via buffer memory, sample data supplied from storage device
US7259314B2 (en) Waveform data processing apparatus
JP4089688B2 (ja) 楽音信号生成装置
EP2313827B1 (en) Method and system for measuring task load
US6437228B2 (en) Method and apparatus for storing audio data
JP4089687B2 (ja) 楽音信号処理装置
JPH0922287A (ja) 楽音波形生成方法
JP3918817B2 (ja) 楽音生成装置
JP2000276172A (ja) 楽音生成装置および記憶媒体
JP3637577B2 (ja) 楽音生成方法
JP4207914B2 (ja) 波形データ処理装置
JP4140612B2 (ja) 波形データ処理装置
JP5510813B2 (ja) 楽音生成装置
JP4254677B2 (ja) 楽音発生装置および楽音発生処理のプログラム
JP3518357B2 (ja) 楽音生成方法、楽音生成装置及び楽音生成処理プログラムを記録したコンピュータ読み取り可能な記録媒体
JP3603638B2 (ja) 楽音発生方法
JP2004157350A (ja) 演奏情報処理方法、演奏情報処理装置およびプログラム
JP2004030369A (ja) ファイル管理方法、ファイル管理装置およびプログラム
JP4102931B2 (ja) 音波形合成装置
JP4477159B2 (ja) カラオケ装置
JP3770030B2 (ja) 録音再生装置
JP4102930B2 (ja) 音波形合成装置
JP3603849B2 (ja) 楽音発生方法
JP3666467B2 (ja) 波形編集装置及び波形編集用プログラム

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070822

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070918

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071116

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080218

R150 Certificate of patent or registration of utility model

Ref document number: 4089687

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20110307

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20120307

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20130307

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20140307

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees