以下、本発明に係る楽音生成装置、楽音生成方法、楽音生成プログラム及び電子楽器を実施するための形態について、図面を参照しながら詳しく説明する。
<電子楽器>
図1は、本発明に係る楽音生成装置を適用した電子楽器の一実施形態を示す外観図である。ここでは、本発明に係る電子楽器の一実施形態として、電子鍵盤楽器(電子キーボード)を示して説明する。また、図2は、本実施形態に係る電子楽器に適用されるハードウェアの構成例を示すブロック図であり、図3は、本実施形態に係る電子楽器に適用される音源/CPU LSIの内部構造の例を示すブロック図である。
本発明に係る電子楽器100の外観は、例えば図1に示すように、楽器本体の一面側に、演奏操作子としての複数の鍵を有し、音高を指定するための鍵盤102と、音色選択ボタン104及び機能選択ボタン106からなるスイッチ・パネルと、ピッチベンドやトレモロ、ビブラート等の各種モジュレーション(演奏効果)を付加するためのベンダ/モジュレーション・ホイール108と、音色やその他の各種設定情報を表示する表示部110と、を備えている。また、図示を省略したが、電子楽器100は、演奏により生成された楽音を出力するスピーカや楽器外部への出力端子を備えている。
電子楽器100の内部機能は、例えば図2に示すように、CPUの機能を含む音源LSIである音源/CPU LSI202と、DMA(Direct Memory Access)コントローラ204と、RAM206と、フラッシュメモリ208とが、それぞれシステムバス220に接続されている。また、電子楽器100は、図1に示した鍵盤102と、音色選択ボタン104及び機能選択ボタン106を有するスイッチ・パネルとがキー・スキャナ214及びI/Oコントローラ210を介してシステムバス220に接続されている。また、電子楽器100は、ベンダ/モジュレーション・ホイール108がA/Dコンバータ216及びI/Oコントローラ210を介してシステムバス220に接続され、LCD等の表示部110がLCDコントローラ212及びI/O(入出力)コントローラ210を介してシステムバス220に接続されている。また、システムバス220はバスコントローラ218に接続され、バスコントローラ218により上記の各構成間で送受信される信号やデータが制御される。また、音源/CPU LSI202には、D/Aコンバータ222及びアンプ224が接続され、音源/CPU LSI202から出力されるデジタル楽音波形データがD/Aコンバータ222によりアナログ楽音波形信号に変換され、さらにアンプ224で増幅された後に、出力端子又は図示を省略したスピーカから出力される。
上記のような構成において、音源/CPU LSI202は、機器全体の処理を制御する制御部としての機能と、演奏者(ユーザ)による鍵盤演奏やボタン操作に基づく楽音を生成する音源部としての機能とを備えた集積回路である。音源/CPU LSI202は、例えば図3に示すように、CPU302と、256基の波形発生装置306として機能する波形発生器(ウェーブジェネレータ;WG)304と、DSP(デジタル信号処理回路)308と、タイマ・カウンタ310と、バスインターフェース312と、を備えている。CPU302、波形発生器304及びDSP308は、バスインターフェース312を介してシステムバス220に接続され、音源/CPU LSI202によるRAM206へのアクセスや、電子楽器100内の他の構成との通信が行われる。ここで、CPU302は上記の制御部に対応し、波形発生器304、DSP308及びタイマ・カウンタ310は上記の音源部に対応する。
CPU302は、RAM206をワーク領域として使用しながら所定の制御プログラムを実行することにより、電子楽器100全体の制御を行うメインプロセッサである。特に、本実施形態において、CPU302は、RAM206及び音源/CPU LSI202内の波形発生器304やDSP308を制御して、後述する楽音生成方法を含む一連の制御動作を実行する。
波形発生器304の各波形発生装置306は、RAM206から波形データを読み出して音色の波形を再生する発振器である。ここで、波形発生器304は、ハードウェア的には単一の構成からなり、時分割制御によりソフトウェア的に256基の波形発生装置として機能させている。
DSP308は、楽音に音響効果をもたらす信号処理回路を有し、演奏に応じて波形発生器304の各波形発生装置306によりRAM206から読み出された波形データに対して、CPU302から供給される楽音パラメータに応じて音量や音色の属性を設定したのち合成して、出力楽音波形データとしてDSP308の外部に出力する。DSP308の出力信号は、図2に示したように、D/Aコンバータ222及びアンプ224を介して所定の信号レベルのアナログ信号に変換されて、スピーカやヘッドホン等に出力される。
また、タイマ・カウンタ310は、CPU302や波形発生器304、DSP308における処理動作の実行タイミングを参照するために、波形データの1サンプリング周期ごとにリセットされる計時手段である。ここで、1サンプリング周期は、音源/CPU LSI202における信号処理周期であって、波形発生器304が1サンプルの波形データを処理する周期である。例えばCD音質の楽音を生成する場合には1サンプリング周期は22μsecに設定される。
RAM(記憶手段)206は、アクセス速度が高速で記憶容量が小さい高価なメモリデバイスであり、後述するフラッシュメモリ208から転送された波形データや制御プログラム、各種の固定データ等を配置する。特に、RAM206は、音源/CPU LSI202において実行される楽音の生成処理に使用される波形データを展開する波形メモリ(音源メモリ)としての機能を有し、発音される楽音の波形データは必ず、RAM206上に配置される。また、RAM206は、音源/CPU LSI202において所定の制御プログラムを実行する際のワーク領域としても使用される。
フラッシュメモリ208は、上述したRAM206に比較して、アクセス速度が低速で記憶容量が大きい安価なメモリデバイスである。フラッシュメモリ208は、音源/CPU LSI202において実行される楽音の生成処理に使用される(又は、使用される可能性のある)全ての音色の波形データやパラメータデータ、音源/CPU LSI202内のCPU302やDSP308において実行される制御プログラムのプログラムデータ、音楽データや演奏者の設定データ等の各種の固定データを記憶している。ここで、フラッシュメモリ208は、CPU302からはランダムアクセスが不可能であり、DSP308からもアクセスが不可能であるため、フラッシュメモリ208に記憶されたデータ等は、再生前にCPU302がシーケンシャルに順次アクセスすることにより読み出されて、ランダムアクセスが可能なRAM206に一旦転送される。
なお、本実施形態においては、低速大容量で安価なメモリデバイスとして、フラッシュメモリ(例えば、NAND型のフラッシュメモリを集積して構成されたSSD;Solid State Drive)を適用する場合を示すが、本発明はこれに限定されるものではなく、ハードディスクを適用するものであってもよい。ここで、フラッシュメモリやハードディスクは、電子楽器100に対して着脱可能(すなわち、差し替え可能)な構成を有しているものであってもよい。また、データの高速転送が可能である場合には、大容量のメモリデバイスとして、特定のネットワーク上やインターネット上(すなわち、クラウド上)のハードディスクを適用するものであってもよい。
LCDコントローラ212は、表示部110のLCDの表示状態を制御するICである。キー・スキャナ214は、鍵盤102や音色選択ボタン104及び機能選択ボタン106等のスイッチ・パネルの状態を走査して、CPU302に通知するICである。A/Dコンバータ216は、ベンダ/モジュレーション・ホイール108の操作位置を検出するICである。これらのLCDコントローラ212やキー・スキャナ214、A/Dコンバータ216は、インターフェースであるI/Oコントローラ210を介してシステムバス220との間でデータや信号の入出力を行う。
このような電子楽器100は、機器全体がバスコントローラ218によって制御されるシステムバス220を中心に構成されている。具体的には、バスコントローラ218は、システムバス220に接続された上記の各構成における信号やデータの送受信時の優先順位を制御する。例えばRAM206は、音源/CPU LSI202内のCPU302と波形発生器304とDSP308とによって共有されている(図3参照)が、発音に伴う処理を行う音源部である波形発生器304及びDSP308は、データの欠落が許されないため、バスコントローラ218により波形発生器304やDSP308と、RAM206と間の送受信動作が他の送受信動作に対して最も高い優先順位に設定されている。そのため、必要に応じてCPU302によるRAM206へのアクセスも制限されることになる。
次に、本実施形態に係る電子楽器に適用される動作仕様の概要について説明する。ここでは、本実施形態に係る電子楽器に適用される音源構造、RAM206のバスアクセス占有率及びアクセス優先順位、アクセス時の処理負荷、音色グレードの設定及び選択、バスインターフェースによるアクセス管理について説明する。
(音源ブロックダイアグラム)
図4は、本実施形態に係る電子楽器に適用される音源の構造を示すブロック図であり、図5は、本実施形態に適用される楽音のエフェクトの種類とRAMのバスアクセス占有率との関係を示す図である。
本実施形態に係る電子楽器100においては、例えば図4に示すように、音源/CPU LSI202に設けられるDSP308内に4つの音色パートPart1〜Part4が用意され、波形発生器304の各波形発生装置306により順次読み出された波形データが、分配器を介して各音色パートPart1〜Part4に順次入力される。ここで、各音色パートPart1〜Part4には異なるエフェクトEffect1〜Effect4を割り当てることが可能であり、各音色パートPart1〜Part4に入力された波形データに、演奏者がボタン操作等により指定したエフェクトEffect1〜Effect4が付与されるように信号処理が行われる。エフェクトが付与された波形データは、ミキサ320により合成されて出力楽音波形データとして出力される。
図4に示した各音色パートPart1〜Part4に割り当て可能なエフェクトは、例えば図5に示すように、エフェクト番号「1」の「EQ」(イコライザー)〜「13」の「Hall Reverb」(ホール残響)の13種類が用意されている。また、波形データにエフェクトを付与しない場合にはエフェクト番号「0」の「Bypass」(バイパス)が選択される。ここで、それぞれのエフェクトにおけるRAM206のバスアクセス占有率は、図5のように示され、エフェクトの種類によっては、同種のものであってもバスアクセス占有率が低くDSP308における処理負荷の軽いものと、バスアクセス占有率が高く処理負荷が重いものがある。例えば、エフェクト番号「6」の「Chorus」(コーラス)においてはバスアクセス占有率が「12.5%」であるのに対して、エフェクト番号「7」の「Stereo Chorus」(ステレオコーラス)においてはバスアクセス占有率が「20.0%」に達する。なお、これらのエフェクトのバスアクセス占有率に対して、波形発生器304の1基分の波形発生装置306におけるバスアクセス占有率は「0.25%」と極めて低く、256基全てを使用した場合で占有率は「64%」になる。なお、エフェクトと処理負荷の関係については、後述する音色グレードにおいても説明する。
(RAMアクセス優先順位)
図6は、本実施形態に適用されるRAMのアクセス優先順位を示す概念図であり、図7は、本実施形態に適用されるRAMの時分割アクセス制御の一例を示す概略図である。
本実施形態に係る電子楽器100においては、上述したように、音源/CPU LSI202に設けられたCPU302と波形発生器304とDSP308とによりRAM206が共有されている。また、これらの機能部のRAM206へのアクセス権の優先順位は、楽音生成処理に支障を来さないように、音源部である波形発生器(WG)304及びDSP308が制御部であるCPU302よりも優先され、さらに、音源部内では、波形発生器304がDSP308よりも優先されるように設定されている。すなわち、図6に示すように、波形発生器(WG)304を最優先として、DSP308、CPU302の順に優先順位が低くなるように予め設定されている。そのため、波形発生器(WG)304がRAM206へのアクセスを行っている間は、DSP308やCPU302によるアクセスは許されず、DSP308がRAM206へのアクセスを行っている間はCPU302によるアクセスは許されない。
このような処理上の制約を考慮して、本実施形態におけるRAM206へのアクセス制御の一例を図7に示す。本実施形態においては、波形データを処理する際の基本単位となる1サンプリング周期(信号処理周期)において、アクセス制御に時分割処理を採用することにより、波形発生器(WG)304のRAM206へのアクセスは、256基の波形発生装置306に設定されている番号(WG0〜WG255)に基づいて、実行タイミング(RAM206へのアクセスを許可するタイミング)が固定的に割り振られる。
すなわち、図7に示すように、まず、各波形発生装置(WG0〜WG255)306によるアクセスの実行期間が優先的に設定され、次いで、当該波形発生装置306のアクセスの実行期間を除く、隙間や余剰の期間を使用してDSP308及びCPU302によるアクセスが実行される。このようなRAM206へのアクセスに関わるタイミング制御は、音源/CPU LSI202に設けられたバスインターフェース312によりハードウェア的に実行される。
なお、上記のようなアクセス制御(時分割アクセス)において、優先度の低いCPU302により1つのインストラクション(動作命令)の実行が始まると、その実行期間中は波形発生器(WG)304やDSP308であってもRAM206へのアクセスを割り込んで実行することはできず、次のインストラクションの実行タイミングから優先度の高い順にRAM206へのアクセスが割り当てられることになる。
また、図7に示した時分割アクセス制御の例においては、説明の都合上、波形発生器304の256基の波形発生装置306の全部が1サンプリング周期内に順次RAM206にアクセスする場合を示したが、実際には、楽音の生成の際に同時発音のために使用される波形発生装置306のみがRAM206にアクセスするものであって、常に256基の波形発生装置306によるRAM206へのアクセスが実行されるものではない。
(RAMアクセス時の処理負荷の判定)
次いで、上述したRAM206へのアクセス制御において、音源/CPU LSI202の機能部全体の処理負荷について説明する。
上述したRAM206へのアクセス制御において、楽音を適切に生成するためには、音源部である波形発生器(WG)304及びDSP308の処理を必ず1サンプリング周期の期間内に完了する必要がある。ここで、音源部のうち、優先順位が最も高い波形発生器(WG)304は、アクセスの実行タイミングが固定的に割り振られているので、その処理は1サンプリング周期から外れることはなく、その期間内に適切に実行される。これに対して、DSP308及びCPU302は優先順位が低いため、実行タイミングの設定によっては音源/CPU LSI202における処理負荷(特に、音源部の処理負荷)が影響を受けることになる。
そこで、本実施形態においては、CPU302は、図7に示すように、音源部のうち、優先順位が(最も)低いDSP308における1サンプリング周期内の処理の最後のインストラクションとして、最後の処理を終えたタイミング「DSP END」をタイマ・カウンタ310から読み取って(計測して)、そのカウント値をバスインターフェース312のレジスタに格納する。そして、取得されたDSP308の処理終了タイミング「DSP END」を、音源/CPU LSI202における処理負荷を判断する要素として用いる。すなわち、1サンプリング周期の期間を100%と設定した場合に、1サンプリング周期に対する処理終了タイミング「DSP END」の時間比率をバスアクセス占有率として算出し、この値が100%に近くなるほど、音源/CPU LSI202における処理負荷が高くなると判断する。
なお、処理終了タイミング「DSP END」の時間比率が100%に達している場合や1サンプリング周期内に処理終了タイミング「DSP END」が取得されなかった場合には、DSP308の処理が間に合わず終了しなかったと判断することができる。この場合には、生成される楽音にノイズが混入したり、演奏に支障を来したりする可能性が非常に高くなる。このようなDSP308の処理終了タイミング「DSP END」に基づくRAMアクセス時の処理負荷やその軽減方法については、後述するバスインターフェースによるアクセス管理方法、及び、電子楽器の制御方法においてさらに詳しく説明する。
(音色グレード)
次いで、本実施形態に適用される音色のグレード設定について説明する。
図8は、本実施形態に適用される音色のグレードの設定例を示す図である。図9は、本実施形態に適用される音色グレードに設定される波形のサンプリングレートを説明するための図であり、図10は、本実施形態に適用される音色グレードに設定される差分圧縮処理を説明するための図である。
本実施形態においては、例えば図8に示すように、1つの音色あたり2種類のグレードが用意されている。グレード「1」は高音質の楽音であって、RAM206へのアクセス時の処理負荷が標準的なものであり、グレード「2」は低音質の楽音であって、グレード「1」に比較して処理負荷が低いものである。ここで、RAMアクセス時の処理負荷に関わる音色グレードの属性としては、例えば図8に示すように、(1)波形のサンプリングレート、(2)波形の圧縮・非圧縮、(3)波形に付与するエフェクトの有無及び種類の3つを挙げることができ、これらの属性を適宜選択することにより2種類の音色グレード「1」、「2」が設定される。
波形のサンプリングレートは、「標準」と「1/2」との2種類が用意されている。具体的には、例えば図9(a)に示すように、鍵盤102の特定の音高、例えば「C3」の音高で録音された波形データ1を「標準」のサンプリングレートとして設定する。また、図9(b)に示すように、録音された波形データ1を1/2のデータ量に間引き処理し、グレードを下げたものを、「1/2」のサンプリングレートの波形データ2として設定する。そのため、「標準」のサンプリングレートで取得される波形データ1が高音質の楽音であるのに対して、「1/2」のサンプリングレートで取得される波形データ2は低音質の楽音になる。ここで、波形データ2はそのまま再生すると「C3」に対して1オクターブ高い「C4」の音高で再生されてしまうため、再生スピードを半分に設定して波形読み出しを行う。この結果、単位時間あたりに転送されるデータ量を半分(1/2)にすることができる。
なお、本実施形態においては、図8及び図9に示したように、「標準」のサンプリングレートで取得した波形データ1と、波形データ1を1/2のデータ量に間引き処理した波形データ2との2種類の波形データを用いた形態を示したが、本発明はこれに限定されるものではない。例えばサンプリングレートを「標準」の1種類として、波形データのサンプリング時に「1/2」のサンプリングレートを設定して低音質の楽音の波形データを取得するものであってもよい。
また、波形データは、圧縮状態と非圧縮状態との2種類が用意されている。非圧縮の状態では高音質の楽音であって、例えば図10に示すように、時間L1、L2、L3・・・における波高値が16bitのリニアデータで表現される。これに対して、差分圧縮処理を施した状態では低音質の楽音であって、図10に示すように、各時間L1、L2、L3・・・における波高値間の差分データD1、D2・・・で表現されるが、この差分データD1、D2・・・は、非圧縮リニアデータに比較して振幅が小さくなるため、8bitという少ないビット数で表現することができる。なお、差分データが8bitの範囲を超えてしまい表現できない場合には、波形自体を修正して表現できる範囲に収める手法を採用することができる。
また、波形に付与されるエフェクトは、図5、図8に示したように、種類ごとに高音質でバスアクセス占有率が高いエフェクトと、低音質でバスアクセス占有率が低いエフェクトとの2つのグレードが用意されている。
このように、上記の(1)波形のサンプリングレート、(2)波形の圧縮・非圧縮、(3)波形に付与するエフェクトの各属性について、それぞれの設定、及び、組合せを適宜選択することにより、各音色の特性に合わせて極力グレード「1」とグレード「2」の間の聴感上の差異が少なくなる範囲で、かつ、アクセス時の処理負荷が減るように、音色ごとに2種類の音色グレード「1」、「2」が設定される。
なお、本実施形態においては、図8に示したように、1つの音色あたり、高音質のグレード「1」と、低音質のグレード「2」との2種類のグレードを用いた形態を示したが、本発明はこれに限定されるものではなく、例えば中間音質のグレードを設けて、バスアクセス占有率に応じて生成される楽音の音質を細かく設定するものであってもよい。
(音色グレードの選択方法)
次いで、図8のように設定された音色グレードの選択制御の概要について説明する。
図7に示したように、1サンプリング周期において、CPU302が処理動作を実行可能な時間は、DSP308の処理終了タイミング「DSP END」以前ではDSP308がRAMアクセスを行っていないタイミングスロットと、処理終了タイミング「DSP END」以降の全ての期間である。ここで、CPU302の実行タイミングは、信号処理のサンプリング周期とは無関係であるが、上述した手法により取得された処理終了タイミング「DSP END」に基づく処理負荷が1サンプリング周期に対して100%未満であっても、割り当てられた実行時間が極端に少ない場合には演奏や操作に支障を来すことになる。
そこで、本実施形態においては1サンプリング周期に対する比率が、例えば90%となる時間位置を、DSP308の処理終了タイミング「DSP END」の最大値と規定し、「DSP END」がこの最大値を超えていない場合、すなわち、1サンプリング周期に対する処理終了タイミング「DSP END」の時間比率であるバスアクセス占有率が90%を超えていない場合には、次回の発音の音色グレードを「1」に設定して発音させる。一方、最大値(90%)を超えている場合には、次回の発音の音色グレードを「1」から「2」にグレードを変更して発音させて、RAMアクセス時の処理負荷を軽減する。
また、本実施形態においては、上述した音色グレードの選択方法によるRAMアクセス時の処理負荷の軽減方法に加え、バスアクセス占有率に基づいて、DSP308や波形発生器304における使用状況に応じて処理を停止することにより、RAMアクセス時の処理負荷を軽減する。
例えば、DSP308において波形に付与されるエフェクトについて、同じ音色パートで既に使用しているものがある場合には、新規の発音で使用しているエフェクトに切り替えを行う。一方、新規の発音でエフェクトを使用しない設定に変更されている場合には、その音色パートにおけるDSP308の使用を解除(すなわち、DSP308における処理を停止)して、RAMアクセス時の処理負荷を軽減する。また、波形発生器304において音楽的に優先度の低い波形発生装置306に対して、波形データの割り当てを解除して波形発生器304における同時発音数を減らすことにより、RAMアクセス時の処理負荷を軽減する。
このような音色グレードの選択方法、及び、RAMアクセス時の処理負荷の軽減方法については、後述する電子楽器の制御方法において詳しく説明する。なお、本実施形態においては、DSP308の処理終了タイミング「DSP END」に基づいて算出されるバスアクセス占有率について、最大値を90%と規定し、この最大値を閾値としてバスアクセス占有率の大小を判定して、DSP308における発音の音色グレードを選択したり、DSP308や波形発生器304における処理を停止したりする制御方法を示すが、本発明はこれに限定されるものではなく、80%や85%等の適切な数値を規定するものであってもよい。
(バスインターフェースによるアクセス管理方法)
次いで、本実施形態に適用されるバスインターフェース312によるRAM206のアクセス管理の詳細な動作について説明する。
音源/CPU LSI202に設けられるバスインターフェース312は、プライオリティを有するバスアービタ(バスに対する使用要求の競合を、優先順位に従って調停する回路)により構成されている。ここで、本実施形態においては、上述したように、RAM206へのアクセス権の優先順位は、波形発生器(WG)304を最優先とし、DSP308、CPU302の順に低くなるように設定されているため、DSP308と波形発生器304との間でシステムバス220へのアクセス競合が生じた場合には、DSP308は、処理待ち状態となる。そのため、DSP308の処理の進行状況(DSP308の処理が終了したか否か)やRAM206へのアクセス負荷の程度を判断するためには、図7に示したDSP308の処理が終了したタイミング「DSP END」を取得する必要がある。
DSP308の処理終了タイミング「DSP END」を取得する手法としては、次のような手法を用いる。まず、音源/CPU LSI202に設けられるタイマ・カウンタ310は、リセット動作によりカウント値が「0」に設定される。ここで、タイマ・カウンタ310は、CPU302からのカウントイネーブル信号を受けて、所定の動作クロックでカウントアップを行い、サンプリング期間中に、サンプリング周波数に対する動作クロックのカウント値の比率{(動作クロック)/(サンプリング周波数)}を算出する処理を実行する。
DSP308は、遅延メモリを用いた処理(すなわち、波形発生器304の各波形発生装置306により読み出された波形データに対して、設定された音色グレードに応じた信号処理)を実行する場合、RAM206に対してアクセスを行い、RAM206へのアクセス処理の最後(処理終了タイミング)に、図7に示したように、「DSP END」コマンドを発行する。この「DSP END」コマンドは、既定のアドレスに対するリードもしくはライト命令の形式に設定されている。
これにより、バスインターフェース312は、DSP308から「DSP END」コマンドを受け付けた場合には、タイマ・カウンタ310のカウント機能をイネーブル(enable)状態からディセーブル(disable)状態に設定して、タイマ・カウンタ310のカウント動作を停止させる。このとき、バスインターフェース312は、システムバス220上には、このコマンドアドレスに向けたリードもしくはライト命令を発行しない。
なお、バスインターフェース312において、1サンプリング周期中に「DSP END」コマンドが受け付けられなかった場合には、DSP308の処理が溢れた(終了していない)ことを意味し、この場合には、CPU302に対してエラー割り込みを発生する。
1サンプリング周期中に「DSP END」コマンドが受け付けられたことによりタイマ・カウンタ310から取得したカウント値は、CPU302から読み出し可能な、バスインターフェース312のレジスタに格納される。取得されたカウント値は、DSP308における遅延メモリへのアクセス処理が完了するまでに必要な時間とみなされ、DSP308は、この時間に基づいて発音時の形態やそれに伴う処理等を設定する。
ここで、発音形態を最適な状態に設定するために、カウント値のレジスタへの格納時には、CPU302からカウント値の最大値保持、最小値保持、サンプリング周期ごとの更新値を選択して設定できるものとする。このような設定手法は、今回のサンプリング周期で取得したカウント値と前回取得したカウント値との大小関係を判定し、所定の条件を満たす場合に、レジスタに格納されるカウント値を更新することにより実現することができる。
そして、次のサンプリング周期で、DSP308からRAM206へのアクセスが行われると、バスインターフェース312は再度タイマ・カウンタ310のカウント機能をイネーブル状態に設定して、タイマ・カウンタ310のカウント動作を開始する。本実施形態においては、上述したような一連の処理が1サンプリング周期ごとに繰り返し実行される。なお、上述したRAM206のアクセス管理方法における、DSP308の処理終了タイミングの取得方法(或いは、RAM206へのアクセス負荷の測定方法)は、一例であって、本発明はこの手法に限定されるものではない。
<電子楽器の制御方法>
次に、本実施形態に係る電子楽器の制御方法(楽音生成方法)について詳しく説明する。ここでは、上述した動作仕様の各概要に示した手法を適用した楽音生成方法を有する、電子楽器の制御方法について説明する。また、以下に示す一連の制御処理は、上述した電子楽器100の音源/CPU LSI202に設けられたCPU302及びDSP308において、RAM206に記憶された所定の制御プログラムを実行することにより実現されるものである。
(メインルーチン)
図11は、本実施形態に係る電子楽器の制御方法のメインルーチンを示すフローチャートである。
本実施形態に係る電子楽器100の制御方法においては、演奏者により電子楽器100の装置電源がパワーオンされると、CPU302は図11に示すメインルーチンを起動し、装置各部を初期化する初期化処理(ステップS1102)を実行する。その後、CPU302は、演奏者が鍵盤102を弾いた際の押鍵や離鍵に対する鍵盤処理や、音色選択や機能選択等のボタン類の操作に対するボタン操作処理を行うイベント処理(ステップS1104)、演奏に伴う発音の状態等を定期的に更新する周期処理(ステップS1106)の一連の処理動作を繰り返し実行する。
なお、図11に示したフローチャートにおいて、CPU302は上述した各処理動作(ステップS1102〜S1106)の実行中に、演奏モードが終了や中断したり、装置電源をパワーオフしたりする状態の変化を検出した場合には、メインルーチンを強制的に終了する。
以下、本実施形態に適用される特徴的な処理動作について、具体的に説明する。
(イベント処理)
図12は、本実施形態に係る電子楽器の制御方法に適用されるイベント処理の一例を示すフローチャートである。
演奏者が電子楽器100に備えられた鍵盤102を操作した際や、ボタンやスイッチ類を操作した際に実行される発音イベント処理においては、CPU302は、図12に示すフローチャートのように、まず、キーアサイン処理により、音源/CPU LSI202に設けられた波形発生器304の256基の波形発生装置306のうちの一つを、発音に使用する波形発生装置306として割り当てる(ステップS1202)。
次いで、CPU302は、発声した発音イベントが図4に示したDSP308に用意された4つの音色パートPart1〜Part4のうちの、どの音色パートに対するイベントであるかを示す情報として、パート番号を取得する(ステップS1204)、次いで、CPU302は、後述するバスアクセス占有率取得処理により現在のバスアクセス占有率を取得した後(ステップS1206)、RAM206のバスアクセス占有率を確認(判定)する処理を行う(ステップS1208)。
ステップS1208において、バスアクセス占有率が90%以下である場合には、CPU302は、先に取得した音色パートに設定されている、RAMアクセス時の処理負荷が標準的なグレード「1」の情報を取得する(ステップS1210)。一方、ステップS1208において、バスアクセス占有率が90%よりも大きい場合には、CPU302は、先に取得した音色パートに設定されている、RAMアクセス時の処理負荷がグレード「1」よりも低いグレード「2」の情報を取得する(ステップS1212)。
ステップS1210、S1212における音色グレードの情報の取得後、CPU302は、音色のグレード情報と発音イベントのキー番号、ベロシティに基づいて読み出し波形を決定した後(ステップS1214)、当該波形データのサンプリングレートを確認(判定)する処理を行う(ステップS1216)。
ステップS1216において、波形のサンプリングレートが「標準」に設定されている場合には、CPU302は、ステップS1220の処理を行う。一方、波形のサンプリングレートが「1/2」に設定されている場合には、CPU302は、割り当てられた波形発生装置306に対して、波形の読み出しスピードを半分にして単位時間あたりに転送されるデータ量を半分(1/2)にするように設定した後(ステップS1218)、ステップS1220の処理を行う。
次いで、CPU302は、波形に施される圧縮方式を確認(判定)する処理を行う(ステップS1220)。波形に施される圧縮方式が差分の場合には、CPU302は、割り当てられた波形発生装置306に対して、読み出し波形が例えば8bitの差分データであるとして再生するように設定する(ステップS1222)。一方、波形に施される圧縮方式がリニアの場合には、CPU302は、割り当られた波形発生装置306に対して、読み出し波形が例えば16bitのリニアデータであるとして再生するように設定する(ステップS1224)。
ステップS1222、S1224における波形の圧縮方式の確認後、CPU302は、波形に付与するエフェクトを確認(判定)する処理を行う(ステップS1226)。波形に対してエフェクトを使用していない設定の場合には、CPU302は、その音色パートにおけるDSP308の使用を解除する手段として、音色パートのエフェクトを「Bypass」に設定する(ステップS1228)。一方、波形に対してエフェクトを使用している設定の場合には、CPU302は、既に音色パートに設定されているエフェクトと同じか否かを比較する処理を行う(ステップS1230)。今回の発音イベントで波形に付与されるエフェクトと、既に音色パートに設定されているエフェクトとが同じ場合は、CPU302は、ステップS1234の処理を行う。一方、今回の発音イベントで波形に付与されるエフェクトと、既に音色パートに設定されているエフェクトとが異なる場合は、CPU302は、今回の発音イベントで取得したエフェクトに切り替える処理を行った後(ステップS1232)、ステップS1234の処理を行う。
次いで、CPU302は、先に割り当てられた波形発生装置306で読み出した波形の再生を開始した後(ステップS1234)、発音イベント処理を終了して、メインルーチンに戻る。
(バスアクセス占有率取得処理)
図13は、本実施形態に係る電子楽器の制御方法に適用されるバスアクセス占有率取得処理の一例を示すフローチャートである。
上述した発音イベント処理において実行されるバスアクセス占有率取得処理(ステップS1206)においては、1サンプリング周期の期間内での波形発生器304、DSP308、CPU302の各インストラクション処理とバスアクセス占有率の算出処理、及び、バスアクセス占有率に基づく波形発生器304のFast Dump処理を有している。
バスアクセス占有率取得処理においては、図13に示すフローチャートのように、CPU302は、まず、バスアクセス占有率を算出するためのタイマ・カウンタ310をリセットしてカウント値を「0」に設定する(ステップS1302)。
次いで、CPU302は、波形発生器(WG)304の波形発生装置306の数分のWGインストラクション処理を繰り返し実行する(ステップS1304、S1306、S1320)。ここで、WGインストラクション処理の実行タイミングは、固定的に割り振られている。
この繰り返し実行されるWGインストラクション処理において、CPU302は、一つのWGインストラクション処理が終了すると(ステップS1306)、次のWGインストラクション処理が実行されるまでの間に、DSPインストラクション処理が設定されているか否かを判定し(ステップS1308)、設定されている場合には、DSPインストラクション処理を行う(ステップS1310)。CPU302は、DSPインストラクション処理の終了後、当該処理が同一のサンプリング周期内で最後のDSPインストラクション処理か否かの判断を行う(ステップS1312)。
終了したDSPインストラクション処理が最後のDSPインストラクション処理である場合には、上述した処理終了タイミング「DSP END」(図7参照)であるので、CPU302は、タイマ・カウンタ310のカウント値をバスインターフェース312のレジスタに格納する(ステップS1314)。そして、CPU302は、取得したカウント値に基づいて、現在のバスアクセス占有率を計算する(ステップS1316)。
次いで、DSPインストラクション処理の終了後、次のWGインストラクション処理が実行されるまでに時間がある場合には、CPU302は、図7に示したように、CPUインストラクション処理を行う(ステップS1318)。また、ステップS1308において、DSPインストラクション処理が設定されていない場合、及び、ステップS1312において、処理が終了したDSPインストラクション処理が同一のサンプリング周期内での最後のDSPインストラクション処理ではない場合にも、次のWGインストラクション処理が実行されるまでに時間がある場合には、CPU302は、CPUインストラクション処理を行う(ステップS1318)。
次いで、波形発生装置306の数分のWGインストラクション処理(ステップS1304〜S1320)が終了すると、CPU302は、1サンプリング周期の時間が経過したか否かの判断を行う(ステップS1322)。1サンプリング周期の時間がまだ経過していない場合には、CPU302は、上述したステップS1308〜S1318と同等の処理を実行する。
すなわち、CPU302は、DSPインストラクション処理が設定されているか否かを判定し(ステップS1324)、設定されている場合には、DSPインストラクション処理を行う(ステップS1326)。DSPインストラクション処理の終了後、CPU302は、当該処理が同一のサンプリング周期内で最後のDSPインストラクション処理か否かを判断し(ステップS1328)、最後のDSPインストラクション処理である場合には、処理終了タイミング「DSP END」であるので、タイマ・カウンタ310のカウント値をバスインターフェース312のレジスタに格納する(ステップS1330)。そして、CPU302は、取得したカウント値に基づいて、現在のバスアクセス占有率を計算する(ステップS1332)。次いで、DSPインストラクション処理の終了後、CPU302は、CPUインストラクション処理を行う(ステップS1334)。また、ステップS1324において、DSPインストラクション処理が設定されていない場合、及び、ステップS1328において、処理が終了したDSPインストラクション処理が同一のサンプリング周期内での最後のDSPインストラクション処理ではない場合にも、CPU302は、CPUインストラクション処理を行う(ステップS1334)。その後、CPU302は、ステップS1322に戻って、1サンプリング周期の時間が経過したか否かの判断を行う。
ステップS1322において、1サンプリング周期の時間が経過した場合には、CPU302は、現在までにDSPインストラクション処理の終了タイミング「DSP END」を示すコマンドが発行されたか否かの判定を行う(ステップS1336)。現在までに「DSP END」コマンドが発行されていなかった場合には、CPU302は、現在のバスアクセス占有率を100%に設定し(ステップS1338)、バスアクセス占有率を確認(判定)する処理を行う(ステップS1340)。一方、現在までに「DSP END」コマンドが発行されていた場合には、CPU302は、ステップS1316又はステップS1332において算出された、現在のバスアクセス占有率を確認(判定)する処理を行う(ステップS1340)。
ステップS1340において、CPU302は、現在のバスアクセス占有率が90%以下か、90%よりも大きいかの判定を行う。現在のバスアクセス占有率が90%以下の場合には、CPU302は、バスアクセス占有率取得処理を終了して、メインルーチンに戻る。一方、現在のバスアクセス占有率が90%よりも大きい場合には、CPU302は、波形発生器304のFast Dump Flagを確認(判定)する処理を行う(ステップS1342)。Fast Dump Flagが「OFF」の場合には、CPU302は、音楽的に優先度の最も低い波形発生装置306に対して、Fast Dump処理を行い(ステップS1344)、割り当てを解除して同時発音数を減らすことにより、アクセス時の処理負荷を軽減して、バスアクセス占有率を低くする。併せて、CPU302は、波形発生器304のFast Dump Flagを「ON」に設定する(ステップS1346)。
なお、音楽的に優先度の最も低い波形発生装置306、すなわち、音楽的な優先度の低い波形データを発振している波形発生装置306の特定方法については様々な方法が考えられる。例えば、波形発生装置306の発振が小さいもの(発音されている音量が小さいもの)から順番に優先度が低いと判断してもよい。この場合、発振が最も小さい波形発生装置306が、最も優先度が低い波形発生装置306になる。
或いは、所有するポイントが最も低い波形発生装置306を優先度が最も低いと判断してもよい。例えば、演奏者による押鍵に応じた発音のために使用している波形発生装置306は10ポイントが付与され、記憶手段に記憶されている自動伴奏データの発音のために使用している波形発生装置306は8ポイントが付与されるとする。また発音状態が発音中の波形発生装置306は50ポイントが付与され、消音処理中の波形発生装置306にはポイントが付与されないとする。或いは、ベロシティが或る閾値より大きい値のノートオン情報に基づいて波形データを発振している場合は、10ポイントが付与され、ベロシティが或る閾値より小さい値のノートオン情報に基づいて波形データを発振している場合は、7ポイントが付与されるとする。この場合、合計ポイントが最も小さい波形発生装置306が、最も優先度が低い波形発生装置306になる。
一方、ステップS1342において、Fast Dump Flagが「ON」の場合には、現在、音楽的に優先度の最も低い波形発生装置306に対して、Fast Dump処理が実行されているので、CPU302は、バスアクセス占有率取得処理を終了して、メインルーチンに戻る。
なお、波形発生器304のFast Dump Flagは、実行中のFast Dump処理が終了した時点で、「OFF」に切替え設定される。このようなFast Dump Flagの切替え設定は、Fast Dump処理がバスアクセス占有率取得処理に比較して、処理に多くの時間を必要とするため、処理負荷を軽減するための手法として採用している。
このように、本実施形態は、電子楽器100の全体処理を実行するCPU302、楽音の生成を含む音声処理を実行するDSP308、RAM206からの波形読み出しによって楽音波形を発生する波形発生器304等の複数の機能部によって、単一又は複数のRAM206を共有(シェア)するメモリアクセス管理システムを搭載した電子楽器に関する。このようなシステムにおいて、波形発生器304による楽音発生時や、DSP308によるエフェクトの選択時に共有するRAM206に対するアクセス負荷に対応するバスアクセス占有率を、DSP308における処理終了タイミングで発行される「DSP END」コマンドに基づいて算出する。そして、その値が所定の閾値を超えている場合には、予め用意された音色の属性である波形のサンプリングレート、波形の圧縮・非圧縮処理、波形に付与するエフェクトの種類、エフェクトのオン・オフなどのグレードを下げて、トラフィック(バスアクセス占有率)と生成される楽音の音質とのバランスを調整(ダイナミッククォリティーコントロール)することにより、音楽的な影響を最小限に留めるものである。
(本実施形態の効果の比較検証)
ここで、上述したような本実施形態における作用効果について、比較例を示して具体的に説明する。
図14は、本実施形態に係る電子楽器の作用効果を説明するための比較例を示す図である。
上述した実施形態と同様に、電子楽器の音源に設けられる波形発生器(WG)やCPU、DSP等の複数の機能部が、RAM等の単一の高速メモリデバイスをデータメモリやプログラムメモリ、ワークメモリとして共有して使用するようなシステムにおいては、特定の期間や特定のタイミングで複数の機能部(波形発生器、CPU、DSP)によるアクセスが集中することがある。このとき、アクセス量の合計がRAMのアクセス速度の限界値を超えた場合、いずれかの機能部によるRAMへのアクセスが待たされることになる。
ここで、仮に波形発生器やDSPにおいてRAMへのアクセスが待たされて所定の動作時間(1サンプリング周期)内にアクセスが間に合わなくなった場合には、音源により生成される楽音にノイズが発生する原因になり、電子楽器の本来の機能を大きく損なうことになる。そのため、一般に、波形発生器やDSPは、CPUよりもアクセス権の優先順位が高くなるように設定されている。図14の各図においては、図面左方の端部を基準(波形データに対する処理開始タイミング)にして、1サンプリング周期の期間内に波形発生器(WG)、DSP、CPUの順に、RAMへのアクセスが行われている状態を示している。
図14は、ある時点における単位時間あたりのRAMのバスアクセス占有率を示したものであるが、図14(a)に示すように、波形データの1サンプリング周期を100%とした場合に、3つの機能部によるアクセス時間の合計占有率が100%以下に収まっている場合には、それぞれの機能部の処理動作は適切に行われる。
ところが、図14(b)に示すように、波形発生器やDSPにおける処理負荷が増大して、3つの機能部によるアクセス時間の合計占有率が100%を超過すると、CPUによるRAMへのアクセスが待たされて、CPUの処理動作に遅延が生じることになる。CPUによるRAMへのアクセスが待たされる状態が一時的、又は、短期的なものである場合には、楽音生成処理や電子楽器の動作に問題は生じないが、このような状態が長期的に続いた場合には、演奏や操作に支障を来すことになるという問題を有している。
さらに、図14(c)に示すように、波形発生器とDSPとによるアクセス時間の合計占有率が100%を超過すると、例えば波形発生器におけるアクセス権の優先順位がDSPよりも高く設定されている場合には、DSPによるRAMへのアクセスが動作時間内に終了しないことになり、音源により生成される楽音にノイズが発生する可能性が高くなるという問題を有している。
上記のような問題を解決して、波形発生器やDSPが待ち状態にならないようにするためには、例えば図14(d)に示すように、波形発生器に30%、DSPに40%、CPUに30%のように固定的に占有率を割り当てる方法も考えられる。この手法においては、DSPのワークメモリの使用量や同時発音数に固定枠を設けることになるが、仮にDSPの使用率が低い状態であっても、波形発生器は30%以上を使用することができないため、バスの使用効率が低下し、ハードウェアの能力を最大限に活かしきれていないという問題を有している。
これに対して、本実施形態においては、複数の機能部により単一又は少ない数の高速メモリデバイスを共有して使用するメモリアクセス管理システムを備えた楽音生成装置及び電子楽器において、図7に示したようなDSPの処理終了タイミング「DSP END」に基づいて取得されるバスアクセス占有率を加味した時分割アクセス制御を実行することにより、楽音生成に伴う処理動作を効率的に実行しつつ、楽音を適切に生成することができる。
すなわち、本実施形態においては、バスアクセス占有率に基づいて、波形発生器及びDSPによるメモリデバイスへのアクセス負荷の程度を判断し、バスアクセス占有率が所定値を超える場合には、各波形発生装置に割り当てる波形データのグレードを下げて、楽音生成処理を実行することができる。これにより、少ない数のメモリデバイスを共有することができるので製品コストを抑制することができ、かつ、メモリデバイスの速度性能を最大限に活用できるように楽音の質を最適化することができるので、経済性と性能を両立できる電子楽器を実現することができる。
なお、上述した実施形態においては、単一の音源/CPU LSI202に、楽音を生成する音源となる波形発生器304及びDSP308と、音源を含む電子楽器100全体の処理を制御するCPU302とを備えた構成を示したが、本発明はこれに限定されるものではなく、CPUが音源LSIとは別個に設けられ、システムバスに直接接続されているものであってもよい。
以上、本発明のいくつかの実施形態について説明したが、本発明は、上述した実施形態に限定されるものではなく、特許請求の範囲に記載された発明とその均等の範囲とを含むものである。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
(付記)
[1]
信号処理周期ごとに、少なくとも第1のウェーブジェネレータ及び第2のウェーブジェネレータを含む複数のウェーブジェネレータに対してメモリへの時分割アクセスを命令するウェーブジェネレータ命令処理と、前記第1のウェーブジェネレータが前記メモリへのアクセスを完了してから前記第2のウェーブジェネレータが前記メモリへのアクセスを開始する前に、デジタルシグナルプロセッサに対して前記メモリへのアクセスを命令するデジタルシグナルプロセッサ命令処理と、当該周期内に前記デジタルシグナルプロセッサに対する前記メモリへのアクセスの命令が必要か否かを判断する判断処理と、前記判断処理により前記メモリへのアクセスの命令が必要で無いと判断されたタイミングが当該周期内のどのタイミングかを判断するタイミング判断処理と、当該周期の前記タイミング判断処理により判断された第1タイミングが或るタイミングに達している場合、当該周期の次の周期の前記タイミング判断処理により判断される第2タイミングが前記或るタイミングに達しないように制御する制御処理と、を実行する楽音生成装置。
[2]
前記メモリは、或る音色における第1グレードに対応する第1サンプリングレートの第1波形データと、前記第1グレードより下がる第2グレードに対応する前記第1サンプリングレートより低い第2サンプリングレートの第2波形データと、を記憶し、
前記制御処理は、
前記第1波形データに応じた読み出しスピードで前記第1波形データに基づいて発振していたウェーブジェネレータに、前記第2波形データに応じた読み出しスピードで前記第2波形データに基づいて発振させることにより、前記第2タイミングが前記或るタイミングに達しないように制御する[1]に記載の楽音生成装置。
[3]
前記メモリは、或る音色における第1グレードに対応する第1エフェクトを示すデータと、前記第1グレードより下がる第2グレードに対応する第2エフェクトを示すデータと、を記憶し、
前記制御処理は、
前記第1エフェクトを付与している前記デジタルシグナルプロセッサに対して、前記第1エフェクトの代わりに前記第2エフェクトを付与させることにより、前記第2タイミングが前記或るタイミングに達しないように制御する[1]または[2]に記載の楽音生成装置。
[4]
前記制御処理は、
前記複数のウェーブジェネレータのうちの発振している或るウェーブジェネレータに対して消音処理させることにより、前記第2タイミングが前記或るタイミングに達しないように制御する[1]乃至[3]のいずれかに記載の楽音生成装置。
[5]
楽音生成装置のコンピュータに、
信号処理周期ごとに、少なくとも第1のウェーブジェネレータ及び第2のウェーブジェネレータを含む複数のウェーブジェネレータに対してメモリへの時分割アクセスを命令するウェーブジェネレータ命令処理と、前記第1のウェーブジェネレータが前記メモリへのアクセスを完了してから前記第2のウェーブジェネレータが前記メモリへのアクセスを開始する前に、デジタルシグナルプロセッサに対して前記メモリへのアクセスを命令するデジタルシグナルプロセッサ命令処理と、当該周期内に前記デジタルシグナルプロセッサに対する前記メモリへのアクセスの命令が必要か否かを判断する判断処理と、前記判断処理により前記メモリへのアクセスの命令が必要で無いと判断されたタイミングが当該周期内のどのタイミングかを判断するタイミング判断処理と、当該周期の前記タイミング判断処理により判断された第1タイミングが或るタイミングに達している場合、当該周期の次の周期の前記タイミング判断処理により判断される第2タイミングが前記或るタイミングに達しないように制御する制御処理と、を実行させる方法。
[6]
楽音生成装置のコンピュータに、
信号処理周期ごとに、少なくとも第1のウェーブジェネレータ及び第2のウェーブジェネレータを含む複数のウェーブジェネレータに対してメモリへの時分割アクセスを命令するウェーブジェネレータ命令処理と、前記第1のウェーブジェネレータが前記メモリへのアクセスを完了してから前記第2のウェーブジェネレータが前記メモリへのアクセスを開始する前に、デジタルシグナルプロセッサに対して前記メモリへのアクセスを命令するデジタルシグナルプロセッサ命令処理と、当該周期内に前記デジタルシグナルプロセッサに対する前記メモリへのアクセスの命令が必要か否かを判断する判断処理と、前記判断処理により前記メモリへのアクセスの命令が必要で無いと判断されたタイミングが当該周期内のどのタイミングかを判断するタイミング判断処理と、当該周期の前記タイミング判断処理により判断された第1タイミングが或るタイミングに達している場合、当該周期の次の周期の前記タイミング判断処理により判断される第2タイミングが前記或るタイミングに達しないように制御する制御処理と、を実行させるプログラム。
[7]
[1]乃至[4]のいずれかに記載の楽音生成装置と、
音高を指定するための演奏操作子と、
を備える電子楽器。