(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-10
(45)【発行日】2024-06-18
(54)【発明の名称】エンベロープ発生装置、電子楽器、方法、及びプログラム
(51)【国際特許分類】
G10H 1/057 20060101AFI20240611BHJP
【FI】
G10H1/057 Z
(21)【出願番号】P 2020055137
(22)【出願日】2020-03-25
【審査請求日】2023-03-15
(73)【特許権者】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】110004185
【氏名又は名称】インフォート弁理士法人
(74)【代理人】
【識別番号】100074099
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100121083
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【氏名又は名称】天田 昌行
(72)【発明者】
【氏名】佐藤 博毅
(72)【発明者】
【氏名】川島 肇
【審査官】佐久 聖子
(56)【参考文献】
【文献】特開2007-286503(JP,A)
【文献】特開昭63-065495(JP,A)
【文献】特開2011-191551(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G10H 1/00- 7/12
(57)【特許請求の範囲】
【請求項1】
設定された目標値との差が漸近的に0に収束していく第1エンベロープを発生する第1エンベロープ発生器と、
設定された到達時間内で100%値から0%値まで変化する第2エンベロープを発生する第2エンベロープ発生器と、
前記第1エンベロープと前記第2エンベロープとの所定演算により、少なくとも前記第1エンベロープにおける前記目標値との差が0に収束していないタイミングで前記第2エンベロープの値が前記0%値となった時に、前記目標値との差が0となるような第3エンベロープを発生するエンベロープ演算器と、
を備え
、
前記第1エンベロープ発生器は、設定された開始値から設定された前記目標値へと漸近的に収束していく前記第1エンベロープを発生し、
前記第2エンベロープ発生器は、前記第1エンベロープ発生器が発生する前記第1エンベロープが前記開始値であるタイミングでは前記100%値となり、前記第1エンベロープ発生器が発生する前記第1エンベロープが前記目標値に達する前のタイミングで前記0%値になるように前記第2エンベロープを発生するエンベロープ発生装置。
【請求項2】
請求項1に記載のエンベロープ発生装置であって更に、
前記エンベロープ演算器における前記所定演算は、前記第1エンベロープにおける前記目標値との差の値に対して前記第2エンベロープの値を乗算する演算を含み、前記第2エンベロープが前記100%値である時には前記開始値となり、前記第2エンベロープの値が前記0%値となった時に前記目標値となる演算であるエンベロープ発生装置。
【請求項3】
請求項1又は2に記載のエンベロープ発生装置であって更に、
前記第1エンベロープの変化は、指数的変化であって、前記到達時間が経過した時点では前記目標値との間に所定の差があるような減衰期を有する変化であり、
前記第2エンベロープの変化は、線形変化であるエンベロープ発生装置。
【請求項4】
請求項1
から請求項3の何れか
一項に記載のエンベロープ発生装置であって更に、
前記エンベロープ演算器における前記所定演算は、前記第1エンベロープにおける前記目標値との差に対して前記第2エンベロープの値を乗算して得られる値を前記目標値から減算することにより、前記第3エンベロープの現在値を求める演算であるエンベロープ発生装置。
【請求項5】
請求項1
から請求項4の何れか
一項に記載のエンベロープ発生装置であって更に、
前記第1エンベロープは滑らかな曲線で変化し、
前記所定演算は、前記第3エンベロープが滑らかな曲線となるような演算であるエンベロープ発生装置。
【請求項6】
請求項1
から請求項5の何れか
一項に記載のエンベロープ発生装置であって更に、
前記所定演算の有無を設定し、
前記エンベロープ演算器は、前記所定演算が指定された場合には前記所定演算の結果を出力し、前記所定演算が指定されない場合には前記第1エンベロープの値を出力するエンベロープ発生装置。
【請求項7】
請求項1
から請求項6の何れか
一項に記載のエンベロープ発生装置を備え、
ノートオン操作に応じて、少なくとも音高、ベロシティ、及びエンベロープ形状を決定し、
前記決定された少なくとも音高、ベロシティ、及びエンベロープ形状に基づいて、前記開始値、前記目標値、前記到達時間、および前記所定演算の有無を設定する、電子楽器。
【請求項8】
請求項7に記載の電子楽器であって更に、
前記ノートオン操作に応じてエンベロープ区間の種類を、アタック、ディケイ、サスティーンの順で順次移行させるとともに、離鍵操作に応じて前記エンベロープ区間の種類をリリースに移行させ、
前記エンベロープ区間の種類毎に、前記開始値、前記目標値、及び前記到達時間を設定する電子楽器。
【請求項9】
請求項
3に記載の電子楽器であって更に、
ピッチ、フィルタ、アンプを含む複数の制御対象毎に異なるエンベロープが設定され、少なくとも前記アンプの制御において前記指数的変化のエンベロープを設定する電子楽器。
【請求項10】
請求項9に記載の電子楽器であって更に、
前記指数的変化のエンベロープにおける半減期を設定する電子楽器。
【請求項11】
設定された開始値から設定された目標値へと漸近的に収束していくとともに前記目標値との差が漸近的に0に収束していく第1エンベロープを発生し、
前記第1エンベロープが前記開始値であるタイミングでは100%値となり、記第1エンベロープが前記目標値に達する前のタイミングで0%値になるとともに、設定された到達時間内で
前記100%値から
前記0%値まで変化する第2エンベロープを発生し、
前記第1エンベロープと前記第2エンベロープとの所定演算により、少なくとも前記第1エンベロープにおける前記目標値との差が0に収束していないタイミングで前記第2エンベロープの値が前記0%値となった時に、前記目標値との差が0となるような第3エンベロープを発生する、
方法。
【請求項12】
エンベロープを発生するコンピュータに、
設定された開始値から設定された目標値へと漸近的に収束していくとともに前記目標値との差が漸近的に0に収束していく第1エンベロープを発生する処理と、
前記第1エンベロープが前記開始値であるタイミングでは100%値となり、記第1エンベロープが前記目標値に達する前のタイミングで0%値になるとともに、設定された到達時間内で
前記100%値から
前記0%値まで変化する第2エンベロープを発生する処理と、
前記第1エンベロープと前記第2エンベロープとの所定演算により、少なくとも前記第1エンベロープにおける前記目標値との差が0に収束していないタイミングで前記第2エンベロープの値が前記0%値となった時に、前記目標値との差が0となるような第3エンベロープを発生する処理と、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、エンベロープ発生装置、電子楽器、方法、及びプログラムに関する。
【背景技術】
【0002】
電子楽器などのエンベロープ発生器では、自然楽器の減衰をシミュレートするために指数的なカーブでエンベロープを変化させることが多い。しかし、そのようにして発生されるエンベロープカーブは、理論的には漸近的な変化なので永遠に目標値に到達しない。
【0003】
このため、目標レベルと現在値との差が所定以下になった時点でエンベロープのフェーズ(アタック、ディケイ、サスティーン、リリース等)を移行させるようにした技術が知られている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記の先行技術においては、目標レベルに到達しないうちにエンベロープのフェーズを移行させてしまうので、フェーズの移行を適切に行うことができない場合があった。
【0006】
そこで、本発明は、フェーズの移行を適切に行うことができるようにエンベロープを発生させることを目的とする。
【課題を解決するための手段】
【0007】
態様の一例では、設定された目標値との差が漸近的に0に収束していく第1エンベロープを発生する第1エンベロープ発生器と、設定された到達時間内で100%値から0%値まで変化する第2エンベロープを発生する第2エンベロープ発生器と、第1エンベロープと第2エンベロープとの所定演算により、少なくとも第1エンベロープにおける目標値との差が0に収束していないタイミングで第2エンベロープの値が0%値となった時に、目標値との差が0となるような第3エンベロープを発生するエンベロープ演算器と、を備え、前記第1エンベロープ発生器は、設定された開始値から設定された前記目標値へと漸近的に収束していく前記第1エンベロープを発生し、前記第2エンベロープ発生器は、前記第1エンベロープ発生器が発生する前記第1エンベロープが前記開始値であるタイミングでは前記100%値となり、前記第1エンベロープ発生器が発生する前記第1エンベロープが前記目標値に達する前のタイミングで前記0%値になるように前記第2エンベロープを発生する。
【発明の効果】
【0008】
本発明によれば、フェーズの移行を適切に行うことができるようにエンベロープを発生させることが可能となる。
【図面の簡単な説明】
【0009】
【
図1】電子鍵盤楽器の一実施形態の外観例を示す図である。
【
図2】電子鍵盤楽器の制御システムの一実施形態のハードウェア構成例を示すブロック図である。
【
図3】実施形態における主要機能である音源ブロックダイアグラムである。
【
図4】指数カーブを有するエンベロープの例を示す図である。
【
図5】ピッチ・エンベロープ、フィルタ・エンベロープ、及びアンプ・エンベロープの形状の例を示す図である。
【
図6】「ピッチ、フィルタ、アンプ・エンベロープパラメータ」テーブルの構成例と、リニア・エンベロープの形状例と、リニア・エンベロープパラメータの例を示す図である。
【
図7】LIN_SLAVE=「ON」におけるピッチ、フィルタ・エンベロープ例と、アンプ・エンベロープ例を示す図である。
【
図8】リニア・エンベロープによるエンベロープの同期動作の説明図である。
【
図9】エンベロープ制御処理の例を示すフローチャートである。
【
図10】エンベロープ・ジェネレータ&演算器の処理の例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。
図1は、エンベロープ発生装置を搭載した電子鍵盤楽器の一実施形態100の外観例を示す図である。電子鍵盤楽器100は、演奏操作子としての複数の鍵からなる鍵盤101と、音量の指定、自動演奏のテンポ設定等の各種設定を指示する第1のスイッチパネル102と、自動伴奏の選曲や音色の選択等を行う第2のスイッチパネル103と、各種設定情報を表示するLCD(Liquid Crystal Display:液晶ディスプレイ)104と、ピッチベンドや各種変調を行うためのベンダー/モジュレーション・ホイール105を備える。また、電子鍵盤楽器100は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、又は背面部等に備える。
【0011】
図2は、
図1の自動演奏装置を搭載した電子鍵盤楽器100の制御システム200の一実施形態のハードウェア構成例を示す図である。
図2において、制御システム200は、CPU(中央演算処理装置)201、ROM(リードオンリーメモリ)202、RAM(ランダムアクセスメモリ)203、音源LSI(大規模集積回路)204、ネットワークインタフェース205、
図1の鍵盤101、第1のスイッチパネル102、第2のスイッチパネル103が接続されるキースキャナ206、及び
図1のLCD104が接続されるLCDコントローラ208、及び
図1のベンダー/モジュレーション・ホイール105が接続されるA/Dコンバータ209が、それぞれシステムバス210に接続されている。また、CPU201には、エンベロープの時間経過や自動演奏のシーケンスを制御するためのタイマ211が接続される。更に、音源LSI204から出力される楽音出力データ214は、D/Aコンバータ212によりアナログ楽音出力信号に変換される。アナログ楽音出力信号は、アンプ213で増幅された後に、特には図示しないスピーカ又は出力端子から出力される。
【0012】
CPU201は、RAM203をワークメモリとして使用しながらROM202に記憶された制御プログラムを実行することにより、
図1の電子鍵盤楽器100の制御動作を実行する。また、ROM202は、上記制御プログラム及び各種固定データのほか、後述するピッチ、フィルタ、アンプ・エンベロープパラメータ(
図6(a)参照)やリニア・エンベロープパラメータ(
図6(c)参照)を記憶する。
【0013】
CPU201には、本実施形態で使用するタイマ211が実装されており、例えば電子鍵盤楽器100において生成されるエンベロープの時間経過をカウントする。
【0014】
音源LSI204は、CPU201からの発音制御指示に従って、例えば特には図示しない波形ROMから楽音波形データを読み出し、D/Aコンバータ212に出力する。音源LSI204は、同時に最大256ボイスを発振させる能力を有する。
【0015】
キースキャナ206は、
図1の鍵盤101の押鍵/離鍵状態、第1のスイッチパネル102、及び第2のスイッチパネル103のスイッチ操作状態を定常的に走査し、CPU201に割り込みを掛けて状態変化を伝える。
【0016】
LCDコントローラ208は、
図1のLCD104の表示状態を制御するIC(集積回路)である。
【0017】
ADコンバータ209は、
図1のベンダー/モジュレーション・ホイール105の操作量を検出して、CPU201に通知する。
【0018】
ネットワークインタフェース205は、例えばLocal Area Network(LAN)等の通信ネットワークに接続され、CPU201が使用する制御プログラム(後述する
図9、
図10等参照)又はデータを外部の装置から受信し、それらをRAM203等にロードして使用することができる。
【0019】
図3は、本実施形態における主要機能である音源ブロックダイアグラムである。本実施形態において
図2の楽音出力データ214を生成するための音源は、
図2のCPU201と音源LSI204の両方によって実現される。
【0020】
まず、音源LSI204は、複数チャネルの楽音出力データ214に対応する#1~#256の楽音波形データを発生する256組の波形発生器301(#1)~301(#256)、楽音に音響効果をもたらすDSP(Digital Signal Processor)302、各波形発生器301(#1)~301(#256)からの各楽音波形データとDSP302からの音響効果音とを混合するミキサ303から構成される。
【0021】
波形発生器301(#1)~301(#256)はそれぞれ、楽音の元になる波形を発生するオシレータ307、音色を調整するフィルタ308、音量を調整するアンプ309から成り、オシレータ307、フィルタ308、及びアンプ309個別に特性を時間的に滑らかに変化させるための、ピッチ補間器304、フィルタ補間器305、及びアンプ補間器306を具備する。これらの補間器304、305、及び306は、値を滑らかに変化させるためのものであり、複雑な形状のエンベロープは、CPU201のソフトウェア処理であるCPUエンベロープジェネレータ処理310で実現している。この処理の詳細については、
図9及び
図10のフローチャートを用いて後述する。CPUエンベロープジェネレータ処理310からのエンベロープの出力値は、
図2のシステムバス210を介して音源LSI204伝えられる。
【0022】
CPUエンベロープジェネレータ処理310は、音源LSI204と同様に、256チャネルの波形発生器1~256用エンベロープジェネレータ311(#1)~311(#256)を時分割処理によって実現している。各波形発生器1~256用エンベロープジェネレータ311(#1)~311(#256)はそれぞれ、ピッチ・エンベロープ・ジェネレータ312、フィルタ・エンベロープ・ジェネレータ313、及びアンプ・エンベロープ・ジェネレータ314(第1エンベロープ発生器)を備える。また、本実施形態は、リニア・エンベロープ・ジェネレータ315(第2エンベロープ発生器)を備える。
【0023】
通常は、ピッチ・エンベロープ・ジェネレータ312、フィルタ・エンベロープ・ジェネレータ313、及びアンプ・エンベロープ・ジェネレータ314はそれぞれ、独立した動作をするが、リニア・エンベロープ・ジェネレータ315を、スイッチ機能319、320、又は321を介して、各演算機能316、317、又は318(エンベロープ演算器)に接続することによって、ピッチ・エンベロープ・ジェネレータ312、フィルタ・エンベロープ・ジェネレータ313、又はアンプ・エンベロープ・ジェネレータ314と結合させることができる。
【0024】
アンプ・エンベロープ・ジェネレータ314やフィルタ・エンベロープ・ジェネレータ313では、従来と同様のアンプ・エンベロープ・ジェネレータ314、或いは、フィルタ・エンベロープ・ジェネレータ313においては、制御する対象となる値を時間に対して直線的に変化させるのではなく、指数カーブに代表されるような曲線が用いられることが多い。これは人間の音量感のスケールが波高値に対して曲線的であること、音質特性の周波数に対して対数的であること、実際の物理的振動が自然に減衰する際の特性に近いことなどに起因する。また、アナログシンセサイザーの回路では充放電の特性を利用しているので、これをデジタル音源でモデリングする場合もこの特性を再現する必要がある。
【0025】
このカーブは、現在レベルが目標値に漸近するに従って速度を落とすために、理論的には永遠に目的レベルに達しないものであるが、実際の電子楽器では、デジタル演算によって目的レベルまでの距離が0に漸近するように例えば等比級数の乗算を繰り返すため、やがてこの距離がアンダーフローを起こして0になり、その時点で到達することになる。
【0026】
しかし、目的レベルに達した後に別の動作に遷移するような設定を行った場合にはその到達までの時間は極めて長く、また、演算精度に依存するために予想ができないものとなってしまうという問題があり、楽音の出力状態(音高、音量、音色)の変化を自由に形成することが困難になってしまう。
【0027】
例えば、
図4に示されるような、3ステップのエンベロープを形成する場合を考えてみると、0に漸近する第3区間は問題ないが、レベルL1、L2に漸近し、達した時点で次のステップに進む場合、到達時間であるT1-T0及びT2-T1は理論的には無限であり、演算誤差に依って到達時間が異なるので予想をするのは困難であり、一般的に、楽音の出力状態(音色、音量、音高などの特性)を調整するのに支障を来していた。
【0028】
更には、目標レベルの異なる複数のエンベロープ、例えばフィルタ・エンベロープ・ジェネレータ313とアンプ・エンベロープ・ジェネレータ314を同期して動かそうとしてエンベロープのレート(傾き)を細かく調整しても、同時に目標値に到達するような設定をするのは非常に難しく、どちらかが先に到達してしまうのが常であった。
【0029】
これを解決するために、本実施形態では、リニア・エンベロープ・ジェネレータ315が生成するリニア・エンベロープの値を、上記スイッチ機能及び演算機能を介して、各エンベロープ・ジェネレータが出力するエンベロープの指数カーブの目標値との差分レベルに乗算することで、曲線でありながらも正確に到達時間が設定できるエンベロープ・ジェネレータを実現するものである。
【0030】
上述したように、エンベロープ・ジェネレータには、ピッチ・エンベロープ・ジェネレータ312、フィルタ・エンベロープ・ジェネレータ313、及びアンプ・エンベロープ・ジェネレータ314の3種類があり、それぞれ制御対象に従って、動作範囲、変化カーブ、ステップの数が異なる。以下に、各エンベロープについて説明する。
【0031】
<ピッチ・エンベロープ(第1エンベロープ)>
ピッチ・エンベロープ・ジェネレータ312が生成するピッチ・エンベロープは、聴感上自然であるように音程に対して直線的に変化する。これは周波数に対しては対数的に変化することを意味するが、音源LSI204内部で対数変換を行うので、CPU201側からはリニアな音程値が与えられることになる。
【0032】
図5(a)に例示されるように、ピッチ・エンベロープの形状は、押鍵時に所定のオフセットL0から開始して本来の演奏ピッチである値0にR0の速度で近づき、0からオーバーシュートした後にL1に達した後は、値0に-R2の速度で近づき、値0に達した後は押鍵中はこの値を維持するサスティーン区間となる。離鍵時には現在値から所定のオフセット値L3にR3の速度で近づくという4区間からなるエンベロープが実現される。リリース発音中にL3に達した場合は、L3の値が維持される。
【0033】
ピッチ・エンベロープのパラメータとしては、
図6(a)の「ピッチ、フィルタ、アンプ・エンベロープパラメータ」テーブルに例示されるように、リニア・エンベロープ・ジェネレータ315とピッチ・エンベロープ・ジェネレータ312とのスイッチ機能319の動作を示す「LIN_SLAVE」値と、各目標レベルL0、L1、L2、及びL3と、各移動レートR1、R2、及びR3が用意される。
図6(a)のテーブルで示されるように、エンベロープの仕様に応じて一部のパラメータは設定することができないようにすることができる。LIN_SLAVE値を「ON」に設定した場合の動作については、後述する。
【0034】
図6(a)に例示される「ピッチ、フィルタ、アンプ・エンベロープパラメータ」テーブルは、例えば
図2のROM202に記憶される。
【0035】
<フィルタ・エンベロープ(第1エンベロープ)>
フィルタ・エンベロープ・ジェネレータ313が生成するフィルタ・エンベロープは、フィルタのカットオフ周波数を動かすものであるが、その動作仕様はピッチ・エンベロープ同様に、聴感上自然であるようにオクターブに対して直線的に変化する。これもピッチ・エンベロープと同様に、周波数に対しては対数的に変化することを意味し、音源LSI204内部で対数変換を行うのでCPU201側からはリニアなオクターブ値(音程値)が与えられることになる。
【0036】
フィルタ・エンベロープの形状は、ピッチ・エンベロープとエンベロープ・ステップ数が、同じようにもできるし、異なるようにもできる。
図5(b)に例示されるように、押鍵時に所定のオフセットL0から開始してR1の速度でL1に達すると、次にL2を目標値として速度R2で近づき、押鍵中はこの値を維持するサスティーン区間となる。離鍵時には、現在値から所定のオフセット値L3に速度R3で近づくという4区間からなるエンベロープが実現される。リリース発音中にL3に達した場合は、L3の値が維持される。レベル値の領域は、正の値のみである。フィルタ・エンベロープの制御では、基本カットオフ周波数にエンベロープ値の加算が行われるが、より低いカットオフ周波数に設定したい場合は基本カットオフ周波数を低く設定すれば良いためである。
【0037】
フィルタ・エンベロープのパラメータとしては、
図6(a)の「ピッチ、フィルタ、アンプ・エンベロープ パラメータ」テーブルに例示されるように、リニア・エンベロープ・ジェネレータ315とフィルタ・エンベロープ・ジェネレータ313とのスイッチ機能320の動作を示す「LIN_SLAVE」値と、各目標レベルL0、L1、L2、及びL3と、各移動レートR1、R2、及びR3が用意される。LIN_SLAVE値を「ON」に設定した場合の動作については、後述する。
【0038】
<アンプ・エンベロープ(第1エンベロープ)>
アンプ・エンベロープ・ジェネレータ314が生成するアンプ・エンベロープは、音源LSI204内の
図3のアンプ309のレベルを動かすものであるが、その動作仕様は聴感上自然であることや、アナログシンセサイザーの充放電カーブをシミュレートするために、指数カーブを用いている。この指数カーブは、CPU201の演算によって生成される。これは、音源LSI204内部でCPU201から受けた値をそのまま出力波形の波高値に乗算するために、CPU201側からはリニアな値を与えると不自然になってしまうためである。
【0039】
具体的な演算としては、CPU201がアンプ・エンベロープの現在値と目標値を定期的に監視し、目標値との差分にレートに応じた0以上1未満の値を乗算することで、徐々に差分が0に漸近する方式を採用することができる。
【0040】
図5(c)に例示されるように、アンプ・エンベロープの形状は、押鍵時にL0=0から開始してR1の速度でfL1に達すると、次にL2を目標値として速度R2で近づき、押鍵中はこの値を維持するサスティーン区間となる。離鍵時には、現在値から所定の値0に速度R3で近づくという4区間からなるエンベロープが実現される。アンプ・エンベロープの特性として、ピッチ・エンベロープやフィルタ・エンベロープと異なり、指数カーブで目標値に近づくため、到達時間は理論的には無限である。しかしながら、実際にはデジタル演算でいつかはアンダーフローによって現在値と目標値の差分がゼロになるのを待つ方法もあるが、差分がある値以下になった時に、強制的に直線的に目標値に遷移させるような手法を取ることで有限とするのが一般的である。リリース発音中にL3に達した場合は、L3の値が維持される。レベル値の領域は、正の値のみである。
【0041】
アンプ・エンベロープのパラメータとしては、
図6(a)の「ピッチ、フィルタ、アンプ・エンベロープ パラメータ」テーブルに例示されるように、リニア・エンベロープ・ジェネレータ315とアンプ・エンベロープ・ジェネレータ314とのスイッチ機能321の動作を示す「LIN_SLAVE」値と、各目標レベルL0、L1、L2、及びL3と、各移動レートR1、R2、及びR3が用意される。
図6(a)のテーブルで示されるように、エンベロープの仕様に応じて一部のパラメータは設定することができないようにすることができる。LIN_SLAVE値を「ON」に設定した場合の動作については、後述する。
【0042】
<リニア・エンベロープ(第2エンベロープ)>
ピッチ・エンベロープ・ジェネレータ312、フィルタ・エンベロープ・ジェネレータ313、及びアンプ・エンベロープ・ジェネレータ314は、それぞれの
図6(a)に示される「ピッチ、フィルタ、アンプ・エンベロープパラメータ」テーブルにおいて、LIN_SLAVEパラメータ値を「ON」に設定することで、各スイッチ機能319、320、又は321を介して、リニア・エンベロープ・ジェネレータ315に接続され、次のエンベロープ・ステップに進むタイミングをこのリニア・エンベロープ・ジェネレータ315に委ねることができるようになる。
【0043】
リニア・エンベロープ・ジェネレータ315が生成するリニア・エンベロープは、
図6(b)に例示されるように、常に100%からスタートして所定時間Tn(到達時間)で0%に到達する特性を基本としている。押鍵時にはT1、T2で設定される2区間を経てサスティーン区間にはいる。離鍵後T3で設定される区間に遷移する。このときリニア・エンベロープ・ジェネレータ315に対して設定されるパラメータとしては、
図6(c)に示されるように、T1、T2、又はT3の各区間の値である。
【0044】
サスティーン区間では接続されたエンベロープ・ジェネレータの出力をそのまま出力するが、T1、T2、T3で規定されている区間では、接続されたエンベロープ・ジェネレータの現在値と次の目標値の差分値と、リニア・エンベロープ・ジェネレータ315の出力値とが乗算されて、その乗算結果が新たな差分値として置き換えられて、出力エンベロープ(第3エンベロープ)のカーブが形成されるように動作する。
【0045】
ただし、元々リニアなピッチやフィルタについては、エンベロープ形状には影響は与えず、他にLIN_SLAVE=「ON」とされているエンベロープ・ジェネレータと次のステップへの到達タイミングの同期の目的のために利用することになるので、現在値は開始時の値を維持して乗算する。例えばフィルタ・エンベロープのLIN_SLAVE値が「ON」にされた場合のL0からL1の動きは、
図7(a)の「LIN_SLAVE=「ON」におけるピッチ、フィルタ・エンベロープ例」として例示されるように、R1が無効(0)にされて、開始値とリニア・エンベロープの現在値を使って前述した演算が実行される。その結果、「出力エンベロープ」で示されるような結果が得られる。リニア・エンベロープが目標値に達すると(現在値0になると)、接続された例えばフィルタ・エンベロープ・ジェネレータ313は次のステップに進む。
【0046】
アンプ・エンベロープのLIN_SLAVEが「ON」にされた場合は、「OFF」のときと同様の指数演算はそのまま実行され、演算に用いられる。例えば、L0からL1の動きは、
図7(b)の「LIN_SLAVE=「ON」におけるアンプ・エンベロープ例」で示されるように、指数演算に依って得られた目標値と現在値との差分に、リニアエンベロープの値が乗算されて新たな現在値が算出され、新しいアンプ・エンベロープが形成される。その結果、例えば「指数エンベロープ1」に対しては「出力エンベロープ1」で示されるような結果が、また「指数エンベロープ2」に対しては「出力エンベロープ2」で示されるような結果が得られ、期間T1で確実に目標値に到達する。また、元々の指数エンベロープの特性も反映されるので、R1やR3によって凹凸の調整をすることも可能となる。更には、別のエンベロープ・ジェネレータでLIN_SLAVE=「ON」に設定されている場合は、そのエンベロープとの同期を取ることも可能となる。
【0047】
リニア・エンベロープと他のエンベロープとの同期について、
図8を用いて説明する。本実施形態では、各ピッチ・エンベロープ・ジェネレータ312、フィルタ・エンベロープ・ジェネレータ313、又はアンプ・エンベロープ・ジェネレータ314とリニア・エンベロープ・ジェネレータ315とをリンクさせることで、各エンベロープ同士の動作を同期させることができる。例えば、自然楽器において音色変化と音量変化は密接な関係にあり、どちらか一方だけが独自の変化を続けるようなことはない。これを再現するためには、フィルタ・エンベロープとアンプ・エンベロープの各ポイントの目標到達時刻を同期させる必要があるが、リニア・エンベロープとのリンクによってその動作が実現される。
【0048】
図8(a)の「リニア・エンベロープ形状」、
図8(b)の「リニア・エンベロープに同期したフィルタ・エンベロープ形状」、及び
図8(c)の「リニア・エンベロープに同期したアンプ・エンベロープ形状」に示されるように、破線で示されるように元々は独自のタイミングで変化するように設定されていたフィルタ・エンベロープとアンプ・エンベロープが、リニア・エンベロープとのリンクによって、実線で示されるように、リニア・エンベロープの到達タイミングに合わせるように同期して、フィルタ・エンベロープとアンプ・エンベロープが動作することがわかる。
【0049】
図9は、エンベロープ制御処理の例を示すフローチャートである。
図2のCPU201は、
図9のフローチャートの処理に対応するROM202に記憶されたエンベロープ制御処理プログラムを、RAM203に読み出して実行する。
【0050】
CPU201は、
図9のフローチャートの処理を開始すると、まずユーザが例えば
図1の電子鍵盤楽器100上の第2のスイッチパネル103上の音色スイッチを操作することにより電子鍵盤楽器100の音色を指定する。この結果、CPU201は、指定された音色に対応する波形情報をROM202から読み出して、音源LSI204内の波形発生器301(#1)~301(#256)にセットする(ステップS901)。
【0051】
その後、CPU201は、
図2のキースキャナ206を介して
図1の鍵盤101上で押鍵が発生したか否かを判定する処理(ステップS902)、その判定がNOの場合に、
図2のキースキャナ206を介して
図1の鍵盤101上で離鍵が発生したか否かを判定する処理(ステップS905)、更にその判定がNOの場合に、エンベロープ処理中であるか否かを判定する処理(ステップS908)、その判定がNOならばステップS902の判定処理に戻り、その判定がYESの場合に、
図3の313~315のうちの何れかのエンベロープ・ジェネレータからエンベロープの一つの区間終了の報告があったか否かを判定する処理(ステップS909)、その判定がNOならばステップS902の判定処理に戻る処理を、繰り返し実行する。
【0052】
上述のステップS902~S910の繰返し処理において、押鍵が発生してステップS902の判定がYESになると、CPU201は、
図2のキースキャナ206を介して、押鍵操作に応じて鍵盤101上で押鍵操作された鍵の音高とベロシティを取得する(ステップS903)。
【0053】
次に、CPU201は、押鍵に応じて発生される楽音波形に対応するこれからの処理予定のエンベロープ区間を、アタック、ディケイ、サスティーンの順に設定する(ステップS904)。
【0054】
一方、上述のステップS902~S910の繰返し処理において、離鍵が発生してステップS905の判定がYESになると、CPU201は、音源LSI204上で該当する発音中の波形発生器301(
図3参照)に対して、処理予定のエンベロープ区間を、リリース区間に設定する(ステップS906)。
【0055】
押鍵におけるステップS903又は離鍵におけるステップS906の処理の後、CPU201は、ステップS903又はS906で設定した処理予定の区間のうちの最初の区間を選択する(ステップS907)。
【0056】
そして、CPU201は、ステップS912以降のエンベロープの制御処理を実行する。この制御処理については後述する。
【0057】
上述のステップS902~S910の繰返し処理において、
図3の313~315のうちの何れかのエンベロープ・ジェネレータからエンベロープの一つの区間終了の報告があってステップS909の判定がYESになった場合には、CPU201は、処理予定であってまだ未処理の区間が残っているか否かを判定する(ステップS910)。未処理の区間が残っていなければ、CPU201は、ステップS902以降の繰返し処理に戻る。未処理の区間が残っていれば、CPU201は、処理予定の次の区間を選択し、ステップS912以降のエンベロープの制御処理を実行する。
【0058】
ステップS912以降のエンベロープの制御処理について説明する。まず、CPU201は、ステップS907又はS911で例えば、
図4、
図5などのように設定されているエンベロープにおいて新たに選択された現在のエンベロープ区間、音高、ベロシティ、音色に基づいて、その区間のエンベロープの形状、開始値、目標値、到達時間を決定する(ステップS912)。
【0059】
次に、CPU201は、ステップS912で決定した区間のエンベロープの形状は、
図4又は
図5(c)に例示されるような指数形状か、
図5(a)又は(b)に例示されるようなそうでない直線形状か否かを判定する(ステップS913)。
【0060】
区間のエンベロープの形状が指数形状であってステップS913の判定がYESの場合には、CPU201は、指数カーブの時定数を決定する(ステップS914)。エンベロープの形状が指数形状になるのは、主にアンプ・エンベロープ・ジェネレータ314(
図3参照)の設定が行われる場合であり、エンベロープの形状が直線形状になるのは、主にピッチ・エンベロープ・ジェネレータ312又はフィルタ・エンベロープ・ジェネレータ313(
図3参照)の設定が行われる場合である。しかしながら、エンベロープの形状がこのように限定されるものではない。
【0061】
区間のエンベロープの形状が直線形状であってステップS913の判定がNOの場合には、CPU201は、直線の傾きを決定する(ステップS915)。
【0062】
ステップS914又はS915の処理の後、CPU201は、決定した条件によるエンベロープパラメータを
図6(a)に例示される「ピッチ、フィルタ、アンプ・エンベロープパラメータ」テーブルから取得して、
図3の312~314のうちの設定を行おうとするエンベロープ・ジェネレータに設定する(ステップS916)。
【0063】
続いて、CPU201は、ステップS916での
図6(a)に例示されるテーブルの参照の結果、LIN_SLAVE値が「ON」に設定されていて、前述したように
図3スイッチ機能319、320、又は321を介して、リニア・エンベロープ・ジェネレータ315を接続し、現在の区間のタイミングをリニア・エンベロープ・ジェネレータ315に委ねる設定がなされているか否か、即ち、到達時間内に目標値との差を0にする必要があるか否かを判定する(ステップS917)。
【0064】
ステップS917の判定がYESの場合、CPU201は、
図3の312~314のうちの制御対象としているエンベロープ・ジェネレータの出力に対して、リニア・エンベロープ・ジェネレータ315の値を演算する319~321のうちの何れかのスイッチ機能を「ON」にする(ステップS918)。
【0065】
続いて、CPU201は、
図6(b)で前述したように、ステップS912で設定した到達時間内で、100%値から0%値まで変化するように、リニア・エンベロープ・ジェネレータ315のパラメータを
図6(c)に例示されるような形式で設定する(ステップS919)。
【0066】
ステップS917の判定がNOの場合、CPU201は、ステップS918とS919の処理はスキップする。
【0067】
最後に、CPU201は、
図3の波形発生器1~256用エンベロープジェネレータ311(#1)~311(#256)のうちの何れかのチャネルを指定して、そのエンベロープ・ジェネレータ内の312~314のうち制御対象としているエンベロープ・ジェネレータ(
図3参照)の動作を開始させる(ステップS920)。
【0068】
その後、CPU201は、ステップS902以降の繰返し処理に戻る。
【0069】
図10は、
図3の各エンベロープ・ジェネレータ312~314、及び各演算機能316~318の処理例を示すフローチャートである。このフローチャートの処理も、
図2のCPU201がROM202に記憶されたエンベロープ・ジェネレータ&演算機能の処理プログラムをRAM203に読み出して、それを
図3の波形発生器1~256用エンベロープジェネレータ311(#1)~311(#256)の256チャネル分時分割で実行することにより、実現される。従って、以下の処理は、256チャネル分の処理が並列に時分割で実行されている。
【0070】
CPU201は、まず、前述した
図9のステップS920から、自分のチャネルに対して動作開始の指示があったか否かを判定待機している(ステップS1001の判定がNOの繰返し処理)。
【0071】
動作開始の指示があってステップS1001の判定がYESになると、CPU201はまず、RAM203(
図2)上の経過時間を示す変数tの値を0にリセットする(ステップS1002)。t=0は、現在のエンベロープ区間の開始を意味する。
【0072】
次に、CPU201は、前述した
図9のステップS912で決定され上記開始指示に含まれるエンベロープの形状を判定する(ステップS1003)。
【0073】
ステップS1003の判定の結果、エンベロープの形状が半減期1の指数形状である場合には、CPU201は、前述した図のステップS912で決定され上記開始指示に含まれるパラメータLi-1、Li(1≦i≦3)、及び半減期1の値に基づいて、次式の演算により、エンベロープ値Lampを演算する(ステップS1005)。
Lamp=(Li-Li-1)×0.5(t/半減期1)
【0074】
ステップS1003の判定の結果、エンベロープの形状が半減期1の値とは異なる半減期2の指数形状である場合には、CPU201は、前述した図のステップS912で決定され上記開始指示に含まれるパラメータLi-1、Li(1≦i≦3)、及び半減期1の値に基づいて、次式の演算により、エンベロープ値Lampを演算する(ステップS1004)。
Lamp=(Li-Li-1)×0.5(t/半減期2)
【0075】
ステップS1003の判定の結果、エンベロープの形状が直線変化である場合には、CPU201は、前述した図のステップS912で決定され上記開始指示に含まれるパラメータLi-1、Li、及びTi(1≦i≦3)の各値に基づいて、次式の演算により、エンベロープ値Lampを演算する(ステップS1006)。
Lamp=(Li-Li-1)×(Ti-t)/Ti
【0076】
ステップS1004、S1005、又はS1006の処理の後、CPU201は、
図3の319~321のうちの自分の対象のスイッチ機能が「ON」にされているか否かを判定する(ステップS1007)。
【0077】
ステップS1007の判定がYESならば、CPU201はまず、リニア・エンベロープの値Llinを、次式により算出する(ステップS1008)。
Llin=(Ti-t)/Ti
【0078】
更に、CPU201は、ステップS1008で算出したリニア・エンベロープの値Llinと、ステップS1004、S1005、又はS1006で算出したエンベロープ値Lampと、前述した図のステップS912で決定され上記開始指示に含まれるパラメータL1(
図5参照)とを用いて、次式により出力エンベロープ値Loutを算出する(ステップS1009)。
Lout=L
i-(Lamp×Llin)
【0079】
ステップS1007の判定がNOならば、CPU201は、リニア・エンベロープ値は用いずに、ステップS1004、S1005、又はS1006で算出したエンベロープ値Lampと、前述した図のステップS912で決定され上記開始指示に含まれるパラメータL1(
図5参照)とを用いて、次式により出力エンベロープ値Loutを算出する(ステップS1010)。
Lout=L
i-Lamp
【0080】
ステップS1009又はS1010の処理の後、CPU201は、時刻経過を示す変数tの値が、前述した図のステップS912で決定され上記開始指示に含まれるパラメータT1(
図5参照)以上になったかを判定する(ステップS1011)。
【0081】
ステップS1011の判定がNOならば、CPU201は、現在の時刻変数tの値を、
図2のタイマ211が示す前回からの経過時刻Δtだけインクリメントし(ステップS1012)、その後、ステップS1003の処理に戻って、エンベロープの進行監視を続行する。
【0082】
ステップS1011の判定がYESになったら、CPU201は、前述した
図9のステップS909の処理に対して、区間終了を報告し(ステップS1013)、その後、エンベロープ発生を停止して、ステップS1001の判定待機処理に戻る。
【0083】
以上説明した実施形態により、指数カーブの漸近線のような目標値に到達するための時間の予想が困難なケースでも、曲線でありながらも正確に到達時間が設定できるエンベロープ・ジェネレータが実現できる。例えば立ち上がりのアタックで漸近カーブを用いても、確実に設定時間で到達させることができる。
【0084】
また、フィルタ・エンベロープとアンプ・エンベロープとで異なるレベルに到達するようなエンベロープをプログラムしたとしても、それぞれのリニアなエンベロープ・ジェネレータのレベルとレートを揃えることで、到達タイミングの同期を取ることが可能となる。
【0085】
更には、リニアなエンベロープ・ジェネレータの設定を同じにしても、曲線のエンベロープ・ジェネレータのレートを変更することで、曲線の形を比較的リニアに近いものから、凹凸の大きな特性まで、自由に調整することもでき、表現の幅を広げることが可能となる。
【0086】
以上、開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができる。
【0087】
その他、本発明は上述した実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上述した実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。上述した実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。
【0088】
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
設定された目標値との差が漸近的に0に収束していく第1エンベロープを発生する第1エンベロープ発生器と、
設定された到達時間内で100%値から0%値まで変化する第2エンベロープを発生する第2エンベロープ発生器と、
前記第1エンベロープと前記第2エンベロープとの所定演算により、少なくとも前記第1エンベロープにおける前記目標値との差が0に収束していないタイミングで前記第2エンベロープの値が前記0%値となった時に、前記目標値との差が0となるような第3エンベロープを発生するエンベロープ演算器と、
を備えるエンベロープ発生装置。
(付記2)
付記1に記載のエンベロープ発生装置であって更に、
前記第1エンベロープ発生器は、設定された開始値から設定された前記目標値へと漸近的に収束していく前記第1エンベロープを発生し、
前記第2エンベロープ発生器は、前記第1エンベロープ発生器が発生する前記第1エンベロープが前記開始値であるタイミングでは前記100%値となり、前記第1エンベロープ発生器が発生する前記第1エンベロープが前記目標値に達する前のタイミングで前記0%値になるように前記第2エンベロープを発生し、
前記エンベロープ演算器における前記所定演算は、前記第1エンベロープにおける前記目標値との差の値に対して前記第2エンベロープの値を乗算する演算を含み、前記第2エンベロープが前記100%値である時には前記開始値となり、前記第2エンベロープの値が前記0%値となった時に前記目標値となる演算であるエンベロープ発生装置。
(付記3)
付記1又は2に記載のエンベロープ発生装置であって更に、
前記第1エンベロープの変化は、指数的変化であって、前記到達時間が経過した時点では前記目標値との間に所定の差があるような減衰期を有する変化であり、
前記第2エンベロープの変化は、線形変化であるエンベロープ発生装置。
(付記4)
付記1乃至3の何れかに記載のエンベロープ発生装置であって更に、
前記エンベロープ演算器における前記所定演算は、前記第1エンベロープにおける前記目標値との差に対して前記第2エンベロープの値を乗算して得られる値を前記目標値から減算することにより、前記第3エンベロープの現在値を求める演算であるエンベロープ発生装置。
(付記5)
付記1乃至4の何れかに記載のエンベロープ発生装置であって更に、
前記第1エンベロープは滑らかな曲線で変化し、
前記所定演算は、前記第3エンベロープが滑らかな曲線となるような演算であるエンベロープ発生装置。
(付記6)
付記1乃至5の何れかに記載のエンベロープ発生装置であって更に、
前記所定演算の有無を設定し、
前記エンベロープ演算器は、前記所定演算が指定された場合には前記所定演算の結果を出力し、前記所定演算が指定されない場合には前記第1エンベロープの値を出力するエンベロープ発生装置。
(付記7)
付記1乃至6の何れかに記載のエンベロープ発生装置を備え、
ノートオン操作に応じて、少なくとも音高、ベロシティ、及びエンベロープ形状を決定し、
前記決定された少なくとも音高、ベロシティ、及びエンベロープ形状に基づいて、前記開始値、前記目標値、前記到達時間、および前記所定演算の有無を設定する、電子楽器。
(付記8)
付記7に記載の電子楽器であって更に、
前記ノートオン操作に応じてエンベロープ区間の種類を、アタック、ディケイ、サスティーンの順で順次移行させるとともに、離鍵操作に応じて前記エンベロープ区間の種類をリリースに移行させ、
前記エンベロープ区間の種類毎に、前記開始値、前記目標値、及び前記到達時間を設定する電子楽器。
(付記9)
付記7又は8に記載の電子楽器であって更に、
ピッチ、フィルタ、アンプを含む複数の制御対象毎に異なるエンベロープが設定され、少なくとも前記アンプの制御において前記指数的変化のエンベロープを設定する電子楽器。
(付記10)
付記9に記載の電子楽器であって更に、
前記指数的変化のエンベロープにおける半減期を設定する電子楽器。
(付記11)
設定された目標値との差が漸近的に0に収束していく第1エンベロープを発生し、
設定された到達時間内で100%値から0%値まで変化する第2エンベロープを発生し、
前記第1エンベロープと前記第2エンベロープとの所定演算により、少なくとも前記第1エンベロープにおける前記目標値との差が0に収束していないタイミングで前記第2エンベロープの値が前記0%値となった時に、前記目標値との差が0となるような第3エンベロープを発生する、
方法。
(付記12)
エンベロープを発生するコンピュータに、
設定された目標値との差が漸近的に0に収束していく第1エンベロープを発生する処理と、
設定された到達時間内で100%値から0%値まで変化する第2エンベロープを発生する処理と、
前記第1エンベロープと前記第2エンベロープとの所定演算により、少なくとも前記第1エンベロープにおける前記目標値との差が0に収束していないタイミングで前記第2エンベロープの値が前記0%値となった時に、前記目標値との差が0となるような第3エンベロープを発生する処理と、
を実行させるためのプログラム。
【符号の説明】
【0089】
100 電子鍵盤楽器
101 鍵盤
102 第1のスイッチパネル
103 第2のスイッチパネル
104 LCD
105 ベンダー/モジュレーション・ホイール
200 制御システム
201 CPU
202 ROM
203 RAM
204 音源LSI
205 ネットワークインタフェース
206 キースキャナ
208 LCDコントローラ
209 A/Dコンバータ
210 システムバス
211 タイマ
212 D/Aコンバータ
213 アンプ
214 楽音出力データ
301 波形発生器
302 DSP
303 ミキサ
304 ピッチ補間器
305 フィルタ補間器
306 アンプ補間器
307 オシレータ
308 フィルタ
309 アンプ
310 CPUエンベロープジェネレータ処理
311 波形発生器1~256用エンベロープジェネレータ
312 ピッチ・エンベロープ・ジェネレータ
313 フィルタ・エンベロープ・ジェネレータ
314 アンプ・エンベロープ・ジェネレータ
315 リニア・エンベロープ・ジェネレータ
316、317、318 演算機能
319、320、321 スイッチ機能