以下、添付図面を参照して、この発明に係る楽音制御装置の一実施形態について詳細に説明する。
図1は、この発明に係る、弦の振動を抑制するために設けられたダンパーを備えたアコースティックピアノの物理的発音機構を模擬した電子的な楽音発音制御を行う楽音制御装置を適用したピアノ型電子鍵盤楽器(電子ピアノ)のハードウェア構成例を示すブロック図である。電子ピアノ1において、CPU2、フラッシュメモリ3、およびRAM4は電子ピアノ1の全体的な動作を制御する制御部(マイクロコンピュータ)である。この制御部に対して、操作部5、表示部6、および音源部7がバスライン8を介して接続される。フラッシュメモリ3は、CPU2が実行する各種制御プログラムやデータテーブル等が記憶される。CPU2は、各種制御プログラムを実行して、電子ピアノ1の各部の動作を制御する。
操作部5には、楽音信号の発音開始及び消音開始を指示する鍵や、リリース制御(消音制御)用のペダル操作子(ダンパーペダル、及びソステヌートペダル)など、演奏を行うための演奏用操作子と、音色パラメータなどのパラメータの設定を行うための設定操作子とが含まれる。操作部5には、ユーザが行った操作を検出する検出手段が含まれており、操作部5の操作に応じた検出信号が、CPU10に供給される。CPU2は、供給された検出信号に基づきMIDIイベントデータ(MIDIメッセージ)を含む各種データを生成して、該生成した各種データに基づいて処理を実行する。また、表示部6は、CPU2の制御に基づき各種情報を表示するためのものである。なお、MIDIイベントデータは、MIDI規格(MIDIは“Musical Instrument Digital Interface”の略)に準拠した形式の演奏データである。電子楽器の種々の演奏動作についてMIDIイベントデータが定義されている。
音源部7は、あらかじめメモリの各アドレスに1サンプルずつ記録された波形データを再生することで楽音を生成する波形メモリ音源方式の音源であって、操作部5を用いた演奏操作により楽音信号の発生開始が指示されたときに、CPU2から供給される各種MIDIイベントデータに基づいて楽音信号の生成を開始して、楽音信号の消音開始が指示されたときに、CPU2から供給される各種MIDIイベントデータに基づいて楽音信号の消音を開始する。アンプ9は、音源部7から出力された楽音信号を所定のゲイン値で増幅して、スピーカ10に出力する。スピーカ10は、アンプ9で増幅された楽音信号を発音する。楽音信号の消音制御(リリース制御)は、アコースティックピアノにおいて、弦の振動を抑制するために設けられたダンパーの位置を物理的に制御することで行なわれるが、物理的発音機構を持たない電子ピアノ1においては、音量エンベロープ信号のリリースレートを電子的に制御することで行なわれる。この発明は、リリースレートの値を決定要素として「仮想ダンパー位置データ」というパラメータを設定すること、詳しくは、アコースティックピアノの物理的発音機構を模擬した構成で「仮想ダンパー位置データ」を生成する点に特長がある。
図2は、図1に示す電子ピアノ1の楽音生成機能の構成を説明するための機能的ブロック図である。なお、図2に示す各ブロックの動作は、図1に示すCPU2、フラッシュメモリ3、RAM4、操作部5、音源部7、アンプ9、及びスピーカ10により実現されるものである。
図2において、鍵盤ユニット20、ダンパーペダルユニット21、及びソステヌートペダルユニット22は、ユーザが演奏操作を入力し、該演奏操作に対応するMIDIイベントデータを発生するモジュール(演奏入力機能)である。これに対して、符号23〜30までの各ブロックは、演奏操作に応じて電子的に楽音信号を生成するモジュール(音源機能)である。なお、本明細書で「モジュール」という用語は、楽音生成機能を構成する1つの機能的要素を指す。
鍵盤ユニット20は、それぞれ音高が割り当てられた複数の鍵(この例では88鍵)からなる鍵盤と、各鍵の操作方向の位置を検出する検出機構(キーセンサ)とを含んで構成される。ユーザは所望の音高に対応する鍵を操作して、その音高の楽音の発音を指示する。鍵盤ユニット20は、ユーザの操作に応じた鍵の変位を1鍵毎に検出して、検出結果に基づくMIDIイベントデータを発生し、発生したMIDIイベントデータを受信部23に出力する。鍵盤ユニット20が発生するMIDIイベントデータは、キーオンデータ9xと、キーオフデータ8xと、離鍵操作時の鍵の操作方向の位置を示す離鍵位置データAx(ポリフォニックキープレッシャー)である。
キーセンサは、各鍵毎の操作方向の位置を連続値で検出することができるセンサであれば、従来から電子ピアノや自動ピアノ等に登載されている適宜のキーセンサを適用してよい。鍵盤楽器用のキーセンサの具体的な構成例としては、「特開2004‐213043号公報」に記載された光学式キーセンサなどがある。この光学式キーセンサは、各鍵の下面に取り付けられたシャッターと、該シャッターの下方に設けられた発光部及び受光部を含むセンサボックスからなり、発光部が照射した光を受光部で受光して、該受光量に応じた出力信号を出力するものである。このキーセンサによれば、鍵が押し込まれると、該鍵に取り付けられたシャッターにより発光部から照射された光が遮られるので、その結果、受光部の受光量が鍵の操作方向の位置に応じて変化し、鍵の操作方向の位置に応じたアナログ信号を得ることができる。
離鍵位置データAxの値は、キーセンサの出力信号をAD変換した値であって、「0」〜「127」の128段階のMIDI値をエンド位置からレスト位置までの範囲に割り当てて、離鍵操作時の鍵の操作方向の位置を表すデータとする。「鍵の操作方向」とは、押鍵操作の方向、及び離鍵操作の方向であって、鍵盤面に対して略垂直方向である。従って、「鍵の操作方向」における「操作」には、鍵の水平方向の操作(鍵盤面に対して平行方向のスライド操作)は含まない。なお、以下、単に「鍵の位置」という場合、「鍵の操作方向の位置」を指す。
図3は、鍵の操作方向の位置(キーセンサの出力信号)と鍵の操作状態の関係を説明する図である。図3において、縦軸は鍵の操作方向の位置であって、図面上方がレスト位置、図面下方がエンド位置を示す。なお、レスト位置とは、鍵の初期位置(操作されていない状態)であり、エンド位置とは、鍵を押し切った位置である。また、横軸は時間である。同図において、説明の便宜上、鍵の操作方向の位置について、閾値K2、K2A、K2B、K2C、及びK4の4点の閾値を設定する。閾値は、鍵の操作状態の判断基準となる。符号31は鍵の軌道である。鍵の軌道31のうち符号40で示す部分が「押鍵操作」に対応する。押鍵操作とは、鍵をレスト位置からエンド位置の方向に押し込む操作である。また、符号41で示す部分が「離鍵操作」に対応する。離鍵操作とは、押鍵操作により押し込まれた鍵をレスト位置の方向へ戻す操作である。
鍵の操作状態を表す概念として、「キーオン」と「キーオフ」との2つの概念がある。本明細書では、「キーオン」及び「キーオフ」の2つの概念について、「鍵盤的キーオン」及び「鍵盤的キーオフ」と、「音源的キーオン」及び「音源的キーオフ」とを区別している。「鍵盤的キーオン」及び「鍵盤的キーオフ」は、図2の鍵盤ユニット20において、鍵の操作状態を判断する概念である。また、「音源的キーオン」及び「音源的キーオフ」は、音源機能(図2の受信部23)において鍵の操作状態を判断する概念である。
「鍵盤的キーオン」は、押鍵操作された鍵の位置が、所定の鍵盤的キーオン位置(例えばエンド位置)に到達した時点(図3では「(1)」の時点)から、離鍵操作の開始後、所定の鍵盤的キーオフ位置(例えば閾値K2)をエンド位置側からレスト位置側に越えた時点(図3では「(3)」の時点)までをいう。また、「鍵盤的キーオフ」は、前記鍵盤的キーオン以外の状態、すなわち、鍵がレスト位置にある状態、若しくは、押鍵操作中(つまり、押鍵操作された鍵の位置がレスト位置から所定のキーオン位置に到達する前まで)をいう。
鍵盤ユニット20は、鍵の位置が所定の鍵盤的キーオン位置(図3ではエンド位置)に到達した時点(図3では「(1)」の時点)で、その鍵の操作状態が「鍵盤的キーオン」になったものと判断して、その鍵についてキーオンデータ9xを発生する。つまりキーオンデータ9xの発生は、鍵盤的キーオンの開始を意味する。また、鍵盤ユニット20は、鍵盤的キーオン中の鍵の位置が所定の鍵盤的キーオフ位置(図3では閾値K2)を越えた時点(図3では「(3)」の時点)で、その鍵の操作状態が「鍵盤的キーオフ」になったものと判断して、その鍵についてキーオフデータ8xを発生する。つまりキーオフデータ8xの発生は、鍵盤的キーオフの開始(鍵盤的キーオンの終了)を意味する。
また、鍵盤ユニット20は、鍵盤的キーオン中の鍵について、離鍵操作が開始した時点から離鍵位置データAxを発生する。つまり、離鍵位置データAxが発生するのは、鍵の位置が図3の(2)〜(3)の期間にあるときのみである。
一方、「音源的キーオン」は、押鍵操作された鍵の位置が所定のキーオン位置(例えばエンド位置)に到達した時点(図3では「(1)」の時点)から、離鍵操作が開始した時点まで(図3では「(2)」の時点)をいう。また、「音源的キーオフ」は、前記鍵盤的キーオン以外の状態、すなわち、鍵がレスト位置にある状態、若しくは、押鍵操作中(所定のキーオン位置に到達する前まで)、若しくは、離鍵操作中(図3における「(2)」から「(3)」)をいう。符号23〜30で示す音源機能では、後述する通り、「音源的キーオン」の開始にあわせて楽音信号の発音を開始して、「音源的キーオフ」の開始(音源的キーオンの終了)にあわせて当該楽音信号の消音を開始する。
図2に戻ると、ダンパーペダルユニット21は、足踏み操作式のペダル操作子(ダンパーペダル)と、該ペダルの操作方向の位置(踏み込み量)を連続値で検出するダンパーペダルセンサを含んで構成され、検出結果に応じたダンパーペダル位置データBx40を発生し、発生したダンパーペダル位置データBx40を受信部23に出力する。ダンパーペダルユニット21に含まれるダンパーペダルは、アコースティックピアノに備わるダンパーペダルの作用と同等な演奏効果、すなわち、全ての音高に対応するダンパーを一斉に動かす作用と同等な演奏効果を得るためのペダルである。ダンパーペダルの操作方向は、ペダルの踏み込み方向及び戻し方向であって、鍵盤面に対して略垂直方向である。
ダンパーペダルセンサは、ダンパーペダルの操作方向の位置(踏み込み量)を、操作にあわせてリアルタイムで検出できる構造であれば、どのようなものであってもよい。ダンパーペダルセンサは、一例として、当該ペダルを軸支する回転部材の回転角度を連続値で検出する角度センサにより構成され、ペダル踏み込み操作に応じて該回転部材が回転し、その回転角度を当該ダンパーペダルの操作方向の位置として検出するものを適用することができる。なお、以下において、「ダンパーペダルの操作方向の位置」を単に「ダンパーペダル位置」ともいう。また、ダンパーペダルセンサの配置場所は、ダンパーペダル位置を検出できるのであれば、ペダル部分に限らず、例えば鍵盤付近など電子ピアノ本体側であってもよい。
ダンパーペダル位置データBx40の値は、ダンパーセンサの出力信号をAD変換した値であって、「0」〜「127」のMIDI値が割り当てられているが、センサの検出分解はペダル可動範囲に対して4〜5段階の分解能で、ダンパーペダル位置を表すデータとする。
ソステヌートペダルユニット22は、足踏み操作式のペダル操作子(ソステヌートペダル)と、該ペダルの操作状態をオン・オフの2値で検出するソステヌートペダルセンサを含んで構成され、検出結果に応じたソステヌートペダルデータBx42を発生し、発生したソステヌートペダルデータBx42を受信部23に出力する。受信部23に出力されるソステヌートペダルデータBx42は、当該ペダルの操作状態がオン状態であることを示すソステヌートペダルオンデータ、又は、当該ペダルの操作状態がオフ状態であることを示すソステヌートペダルオフデータのいずれかである。ソステヌートペダルユニット22に含まれるソステヌートペダルは、アコースティックピアノに備わるソステヌートペダルの作用と同等な演奏効果、すなわち、当該ペダルを踏み込んだときに押鍵操作中の鍵に対応するダンパーについて、弦から離れた状態でロックする作用と同等な演奏効果を得るためのペダルである。Bx42の値は、「0」〜「127」のMIDI値が割り当てられており、「0」をソステヌートペダルオンデータに割り当て、「127」をソステヌートペダルオフデータに割り当てる。
受信部23は、鍵盤ユニット20、ダンパーペダルユニット21、及びソステヌートペダルユニット22から出力された各MIDIイベントデータ(キーオンデータ9x、キーオフデータ8x、離鍵位置データAx、ダンパーペダル位置データBx40、及びソステヌートペダルデータBx42(ソステヌートペダルオンデータ、又はソステヌートペダルオフデータ))を受信したときに、後述する図8,9に示す処理を実行して該受信したMIDIイベントデータを解釈し、該受信したMIDIイベントデータを仮想ダンパー位置データ生成部24、位相生成部25、及びエンベロープ生成部29に転送するインターフェース機能を担うモジュールである。
受信部23は、また、受信部23は、前記各部から受信したMIDIイベントデータに基づいて、各種イベントデータの現在値を保持するレジスタを具える。前記レジスタには、「音源的キーオフ」又は「音源的キーオン」いずれかを示す値を保持するキーオン・キーオフレジスタと、離鍵位置データAxの現在値を保持するAxレジスタと、現在のダンパーペダル位置データBx40の現在値を保持するBx40レジスタと、ソステヌートペダルオン又はソステヌートペダルオフのいずれかを示す値を保持するBx42レジスタとが含まれる。キーオン・キーオフレジスタ、Axレジスタ、及びBx42レジスタは、それぞれ、鍵盤を構成する各鍵毎(音高毎)に1つずつ設けられている。また、Bx40レジスタは、全ての音高で1つのレジスタを共有する。これらレジスタは、RAM4に設けられるものとする。
仮想ダンパー位置データ生成部24は、受信部23から転送されたMIDIイベントデータに基づき「仮想ダンパー位置データ」を生成するモジュールである。「仮想ダンパー位置データ」は、アコースティックピアノにおいて弦の振動を抑制するために設けられたダンパーの位置を擬似的に表すデータである。仮想ダンパー位置データ生成部24によって生成された仮想ダンパー位置データは、エンベロープ生成部29に供給され、該エンベロープ生成部29が生成するエンベロープ信号のリリースレートを制御する唯一のパラメータとして利用される。
アコースティックピアノにおいてダンパーは、各鍵(音高)に対応して設けらており、対応する音高の弦と接触する部分にフェルトを有し、消音時に該フェルトが当該弦に接触して、対応する音高の演奏音をミュートし、対応する音高の演奏音の発音時に、該フェルトが弦から離れて、弦の振動(演奏音の発音)を可能とするものである。ダンパーの動作要因には、(1)対応する鍵の操作と、(2)ダンパーペダルの操作と、(3)ソステヌートペダルの操作との3通りの要因がある。鍵の操作に対するダンパーの動作は、押鍵操作に応じてダンパーが弦から離れて、離鍵操作に応じて、鍵の位置(離鍵位置)に比例してダンパーと弦の距離(弦に対するダンパーの位置)が近づく、というものである。ダンパーペダルの操作に対するダンパーの動作は、ダンパーペダルの踏み込み量(ペダンパーペダルの操作方向の位置)に比例してダンパーと弦の距離(弦に対するダンパーの位置)が遠ざかる、というものである。ソステヌートペダルの操作に対するダンパーの動作は、当該ペダルを踏んだとき押鍵されている鍵に対応するダンパーが弦から離れた状態(弦から最も遠い位置)でロックされる、というものである。
仮想ダンパー位置データ生成部24は、後述する仮想ダンパー位置データ設定及び生成処理により、キーオンデータ9x、キーオフデータ8x、離鍵位置データAx、ダンパーペダル位置データBx40、及びソステヌートペダルデータBx42(ソステヌートペダルオンデータ、又はソステヌートペダルオフデータ)の少なくともいずれか1つに基づき、仮想ダンパー位置データを生成することで、複数の動作要因により複合的にダンパーの位置(ダンパーと弦の距離)を制御するアコースティックピアノの物理的発音機構(リリース制御機構)の構成をシミュレートする。
仮想ダンパー位置データは、所定の最小値から所定の最大値までの仮想的ダンパーの仮想的可動範囲の位置を、「0」〜「127」までの128段階の値で表すデータである。アコースティックピアノにおけるダンパーの可動範囲とは、当該ダンパーが弦に完全に接触した状態(弦をミュートしている状態)からダンパーが弦から最も離れた状態(弦から最も遠い位置)までである。仮想ダンパー位置データの最小値は、アコースティックピアノにおけるダンパーが弦に完全に接触した状態(弦をミュートしている状態)に対応する。これは、例えば鍵が操作されていない(レスト位置にある)ときのダンパーの位置に対応する。
また、仮想ダンパー位置データの最大値は、アコースティックピアノにおけるダンパーが弦から最も離れた状態(弦から最も遠い位置)に対応している。これは、押鍵操作によって発音開始が指示されたときのダンパーの位置、ダンパーペダルが最大値まで踏み込まれたときのダンパーの位置、或いは、ソステヌートペダルによるダンパーのロック動作が作用しているときのダンパーの位置などに対応している。
位相生成部25、アドレス生成部26、波形メモリ11、補間部27、及び、乗算部28は、楽音信号生成処理を行うブロックである。
位相生成部25には、受信部23からキーナンバ(音高)とキーオンデータ9x(若しくは、キーナンバとキーオフデータ8x)が転送される。位相生成部25は、キーオンデータ9xが入力されたときに、該キーオンデータ9xとともに入力されたキーナンバ(該キーオンデータ内で規定されているキーナンバ)に応じた位相情報を生成する。具体的には、発音すべき音高(キーナンバ)に対応するFナンバ(小数部を含む値)をサンプリング周期毎に累算し、その累算結果が位相情報となる。位相情報は、整数部と小数部とからなる。位相情報の整数部はアドレス生成部26に供給され、また、位相情報の小数部は補間部27に供給される。
アドレス生成部26は、位相生成部25から入力された位相情報の整数部に、当該波形データの先頭アドレス等を加算して、波形メモリ11をアクセスするために用いるアドレス信号を生成して、該生成したアドレス信号を用いて波形メモリ11をアクセスし、波形メモリ11のアドレスから波形サンプルを読み出す。この実施例では、波形メモリ11に記憶された波形データはアタック部の波形とループ部の波形とからなるものを想定しているので、アドレス生成部26は、アドレス生成部26から出力されたアドレス信号を用いて波形データのアタック部を一通り読み出した後、波形メモリのループ読み出し区間が指定するループ部を繰り返し読み出す処理を行う。
波形メモリ11からは、サンプリング周期毎に、アドレス生成部26から出力されたアドレス信号が指定するアドレスから波形サンプルが出力される。補間部27は、サンプリング周期毎に、位相生成部25から供給された位相情報の小数部を用いて、波形メモリ11から読み出された波形サンプルをサンプル間補間して、サンプル間補間済みの波形サンプルを乗算部28に出力する。ここで行なわれるサンプル間補間は、例えば、隣接する波形サンプル(直前のサンプリング周期で読み出した波形サンプル)を用いた2つの波形サンプル間を適宜の補間演算により補間してもよいし、2以上の波形サンプルを用いた補間演算であってもよい。
エンベロープ生成部(EG)29は、受信部23からキーナンバ(音高)とキーオンデータ9x(若しくはキーナンバとキーオフデータ8x)が転送されるとともに、後述する仮想ダンパー位置データ生成部24から出力された仮想ダンパー位置データが入力され、入力された各データに基づき、発音すべき楽音信号の音量の時間的変化を制御するための音量エンベロープ信号を生成して、生成した音量エンベロープ信号をサンプリング周期毎に乗算部28に出力する。なお、以下では、「音量エンベロープ信号」のことを、単に「エンベロープ信号」ということもある。
図4は、エンベロープ生成部29が生成するピアノ音色用の音量エンベロープ信号を説明するための図であって、縦軸にエンベロープ信号の音量レベルをとり、横軸に時間をとる。エンベロープ信号の形状は、アタックレート、ディケイレート、サスティンレート、及びリリースレートという複数のパラメータにより制御されるものであって、各パラメータの値は、基本的には、受信部23から転送された各種MIDIイベントデータ(現在設定中の音色や、発音すべき楽音信号の音量(ベロシティ)、音高(キーナンバ)等)に基づき設定される。
しかし、エンベロープ信号のパラメータのうちリリースレートの値については、仮想ダンパー位置データ生成部24により生成された仮想ダンパー位置データに基づき決定される。この点に本願発明の主要な特徴がある。
エンベロープ信号のパラメータのうちのアタックレートは、発音開始タイミング直後の音の出始めから音量レベルの最大値(アタックレベル)に達するまでの時間を制御するパラメータであって、符号32で示す部分(アタック部)の傾きを作る。ディケイレートは、最大振幅からサスティンレベルに音が減衰するまでの時間を制御するパラメータであって、符号33で示す部分(ディケイ部)の傾きを作る。サスティンレートは、サスティンレベルから完全に減衰するまでの時間を制御するパラメータであって、符号34で示す部分(サスティン部)の傾きを作る。サスティンレートが示す音量の減衰特性は、アコースティックピアノの演奏音の自然減衰(ダンパーにより弦の振動を抑制しない場合の音量減衰)の特性に相当するものである。そして、リリースレートは、消音開始タイミングから音量が完全に減衰するまでの時間を制御するパラメータであって、符号35で示す部分(リリース部)の傾きを作る。
エンベロープ生成部(EG)29は、「音源的キーオン」開始(前記図3では「(1)」の時点)後から、サンプリング周期毎に、エンベロープ信号のパラメータのうちアタックレート、ディケイレート及びサスティンレートの値を順に出力して、アタック、ディケイ及びサスティンの各部に対応するエンベロープ信号を生成する。また、エンベロープ生成部(EG)29は、「音源的キーオフ」の開始(前記図3では「(2)」の時点)後から、サンプリング周期毎に、エンベロープ信号のパラメータのうちリリースレートの値を出力して、リリース部に対応するエンベロープ信号を生成する。すなわち、「音源的キーオフ」の開始にあわせてリリース制御を開始して、リアルタイムで変化する仮想ダンパー位置データに基づき決定されるリリースレートに基づいたリリース部の形成が行われる。
乗算部28は、補間部27から出力された補間済み波形サンプルに、エンベロープ生成部29から出力された音量エンベロープ信号を乗算することにより、波形サンプルにエンベロープ(音量の時間変化)を付与する。乗算部28でエンベロープ付与した波形サンプルは、サンプリング周期毎に、デジタル・アナログ変換器、アンプ、スピーカ等を含むスピーカシステム30に出力される。スピーカシステム30は、上記の各部の動作により生成され、エンベロープ付与された楽音信号を発音する。
次に、図2の各部の動作について、図5〜図11に示すフローチャートを参照して説明する。なお、以下の説明では、説明の便宜上、図5〜図11に示す各処理を実行する主体を、その動作を担うモジュール(鍵盤ユニット20等)として説明するが、いずれの処理もハードウェア的に処理を実行する主体はCPU2である。
図5は、図2の鍵盤ユニット20の動作手順を説明するフローチャートである。このフローチャートに示す一連の処理は、CPU2が実行するソフトウェアプログラムによって実現されるもので、鍵盤を構成する88個の鍵の1つずつ毎に起動する。また、この処理は、各鍵について、所定周期(例えば50ms)毎に起動する処理である。88個の各鍵毎に50ms毎に当該処理が起動することで、鍵盤ユニット20は、各鍵の操作状態を所定周期毎にチェックする。
図5のステップS1において、鍵盤ユニット20は、キーセンサの出力信号を取得して、鍵の現在位置を検出する。鍵の位置の値(キーセンサの出力信号)は、前述のとおりエンド位置からレスト位置までの範囲(鍵の操作方向の可動範囲)を128段階の分解能で示すデータである。ステップS2において、鍵盤ユニット20は、前記ステップS1で検出した鍵の位置が、前回の処理で検出した値から変化しているかどうかを判断する。
前記ステップS1で検出した鍵の位置が、前回の処理で検出した値から変化している場合(ステップS2のNO)、鍵盤ユニット20は、ステップS3以下の処理を行う。
また、鍵の位置が前回の処理で検出した値から変化していない場合(ステップS2のYES)には、鍵盤ユニット20は、当該鍵について今回の処理を終了する。当該ステップS2をYESに分岐するのは、当該鍵が操作されずにレスト位置にある状態が継続している場合や、打鍵操作中の鍵が押し込まれた状態が継続している場合(図3に示す軌道31では、エンド位置が継続している平らな部分)等である。
ステップS3においては、鍵盤ユニット20は、検出した鍵の前回の操作状態が「鍵盤的キーオフ」であるかどうかを判断する。「鍵盤的キーオフ」でない(鍵盤的キーオン中)の場合には、ステップS3をNOに分岐して、処理をステップS6に進める。
鍵盤的キーオフ中の場合(ステップS3のYES)、鍵盤ユニット20は、ステップS4において、当該鍵の今回の位置が鍵盤的キーオン位置であるかどうか調べる。図3の例では、エンド位置を鍵盤的キーオン位置に設定しているので、この例に従えば、ステップS4において鍵の位置がエンド位置に達したかどうかを調べる。鍵の位置が鍵盤的キーオン位置(エンド位置)に達していた場合(ステップS4のYES)、鍵盤ユニット20は、今回の処理タイミングで鍵の位置が鍵盤的キーオン位置に到達したものと判断して、ステップS5においてキーオンデータ9xを生成する。キーオンデータ9xは、音源部7に発音開始を指示するコマンドと、処理対象とする音高(当該鍵の音高)を示すキーナンバ、及び押鍵操作の強さを示すベロシティデータ等を含む。
一方、鍵盤的キーオフ中(ステップS3のYES)、且つ、その位置が前記鍵盤的キーオン位置(エンド位置)でなければ(ステップS4のNO)、鍵盤ユニット20は、当該鍵の操作状態を図3において符号40で示す押鍵操作中(つまり、レスト位置からエンド位置に向かって押し込まれる過程にある)と判断する。この場合は、鍵盤ユニット20は、このタイミングでは当該鍵についてMIDIイベントデータの生成を行わずに、当該鍵について今回の処理を終了する。
鍵盤的キーオン中の場合(ステップS3のNO)、鍵盤ユニット20は、ステップS6において、当該鍵の今回の位置が、鍵盤的キーオフ位置であるかどうか判断する。図3の例では、閾値K2を鍵盤的キーオフ位置に設定しているので、鍵の位置が閾値K2よりもレスト位置側であるかを調べる。鍵の位置が閾値K2よりもレスト位置側であれば(ステップS6のYES)、鍵盤ユニット20は、今回の処理タイミングで鍵盤的キーオンが終了したものと判断し、ステップS7において、キーオフデータ8xを生成する。キーオフデータ8xは、音源部7に対して発音終了(消音開始)を指示するコマンドと、処理対象とする音高(当該鍵の音高)を示すキーナンバを含むデータである。
鍵盤的キーオン中(ステップS3のNO)であり、且つ、その位置が鍵盤的キーオフ位置(閾値K2)よりもエンド位置側であれば(ステップS6のNO)とは、当該鍵の操作状態が図3において符号41で示す離鍵操作中である場合に限られる。離鍵操作中とは、鍵盤的キーオン位置(エンド位置)まで押し込まれた鍵が、レスト位置に向かって戻りつつある状態である。その場合、鍵盤ユニット20は、ステップS8において、前記ステップS1で検出した鍵の位置に応じた離鍵位置データAxを生成する。離鍵位置データAxは、離鍵操作時の鍵の操作方向の位置(前記ステップS1で検出した鍵の位置)を表すデータと、そのデータがどの音高のデータであるかを示す情報(キーナンバ)を含む。
ステップS9では、前記ステップS5で生成されたキーオンデータ9x,前記ステップS7で生成されたキーオフデータ8x,又は前記ステップS8で生成された離鍵位置データAxを受信部23へ出力する。
図6は、図2のダンパーペダルユニット21の動作手順を説明するフローチャートである。このフローチャートに示す一連の処理は、CPU2が実行するソフトウェアプログラムによって実現されるもので、所定周期(例えば10ms)毎に起動する。すなわち、ダンパーペダルユニット21の処理の起動周期は、前記図5に示す鍵盤ユニット20の処理の起動周期よりも短い周期である。
ステップS10において、ダンパーペダルユニット21は、ダンパーペダルセンサの出力信号を取得して、ダンパーペダルの現在位置を検出る。なお、ダンパーペダルセンサは、前述のとおり、ペダルの踏み込み量(ダンパーペダルの位置)を、ペダル可動範囲に対して4〜5段階の分解能で検出する回転角度センサを想定している。ダンパーペダルの現在位置に前回の検出値から変化があれば(ステップS11のNO)、ダンパーペダルユニット21は、ステップS12において、検出したダンパーペダルの位置に応じたダンパーペダル位置データBx40を生成して、生成したダンパーペダル位置データBx40を受信部23へ出力する。
また、図7は、図2のソステヌートペダルユニット22の動作手順を説明するフローチャートである。このフローチャートに示す一連の処理は、CPU2が実行するソフトウェアプログラムによって実現されるもので、ソステヌートペダルの操作が検出される毎に起動する。ソステヌートペダルセンサの出力信号は、オン又はオフの2値である。したがって、図7のステップS13において、ソステヌートペダルユニット22は、ソステヌートペダルが押し込まれる操作を検出したときにソステヌートペダルオンデータ、該ソステヌートペダルの押し込みを戻す操作を検出したときにソステヌートペダルオフデータ、のソステヌートペダルデータBx42を生成し、ステップS14において該生成したソステヌートペダルデータBx42を受信部23へ出力する。
図8及び図9は、図2の受信部23の動作手順を説明するフローチャートである。受信部23は、上記図5、図6及び図7の処理により、鍵盤ユニット20、ダンパーペダルユニット21、及びソステヌートペダルユニット22のいずれかから、キーオンデータ9x、キーオフデータ8x、離鍵位置データAx、ダンパーペダル位置データBx40、ソステヌートペダルオンデータ(Bx42)、及びソステヌートペダルオフデータ(Bx42)のいずれかのMIDIイベントデータを受信したときに、図8及び図9に示す処理を実行する。この処理は、CPU2が実行するソフトウェアプログラムにより実現されるものである。
受信部23は、鍵盤ユニット20からキーオンデータ9xを受信したときには(ステップS15のYES)、該受信したキーオンデータ9xに含まれるキーナンバが示す音高に該当するキーオン・キーオフレジスタの値をキーオン(音源的キーオン)に変更し(ステップS16)、当該受信したキーオンデータ9xと、該受信したキーオンデータ9xに含まれるキーナンバを位相生成部25及びエンベロープ生成部29に転送して、当該受信したキーオンデータ9xに基づく楽音信号の発音を開始させる(ステップS17)。また、受信部23は、今回受信したキーオンデータ9xに含まれるキーナンバ(処理対象としている音高)について、後述する図10の仮想ダンパー位置データ生成及び設定処理(ステップS18)を開始させる。
また、鍵盤ユニット20から離鍵位置データAxを受信したときに(ステップS19のYES)、該受信した離鍵位置データAxに含まれるキーナンバが示す音高に該当するキーオン・キーオフレジスタの現在値がキーオン(音源的キーオン)中かどうかを判断することで、今回受信した離鍵位置データAxの音高の楽音信号が現時点で発音中かどうかを判断する。当該音高に該当するキーオン・キーオフレジスタの現在値がキーオンであれば(ステップS20のYES)、当該受信した離鍵位置データAxは、当該キーナンバが示す音高の発音に対しての初めて受信した離鍵位置データAxであり、今回の離鍵位置データAx受信のタイミングが図3において(2)で示すタイミングに対応する。この場合、今回受信した離鍵位置データAxに対応する音高の音源的キーオフ(消音)を開始するものと判断できる。
ステップS20をYESに分岐した場合、受信部23は、ステップS21において、今回受信した離鍵位置データAxに含まれるキーナンバが示す音高について発音(音源的キーオン)を終了する、つまり、当該音高に該当する現在発音中の楽音信号を消音するためのキーオフデータ8xを生成し、ステップS22において、前記キーナンバが示す音高に該当するキーオン・キーオフレジスタの値をキーオン(音源的キーオン)からキーオフ(音源的キーオフ)に変更する。そして、受信部23は、位相生成部25及びエンベロープ生成部29に、前記生成したキーオフデータBxと、該キーオフデータBxに含まれるキーナンバを転送して、今回受信した離鍵位置データAxの音高に該当する楽音信号の消音開始を指示する(ステップS23)。
なお、「楽音信号の消音」処理は、エンベロープ信号のリリース部の出力を開始して、現在のリリースレートに従って楽音信号の音量を減衰させる処理(リリース制御)を含む。本願発明は、消音制御のうちのエンベロープ信号のリリースレートの決定(リリース制御)に特徴があるもので、それ以外の消音制御に関連する処理については、電子ピアノ等の分野で従来から知られる技術を適宜援用してよい。
受信部23は、ステップS23の後、Ax用データ変換テーブルに基づき、当該受信した離鍵位置データAxの値を仮想ダンパー位置データに対応する値に変換し(ステップS24)、当該変換後の値でAxレジスタを変更する(変換後の値をAxレジストへ上書きする)ことで、今回受信した離鍵位置データAxの音高に該当するAxレジスタの現在値を変更する(ステップS25)。
なお、Ax用データ変換テーブルは、フラッシュメモリ3、又はRAM4に予め記憶されたデータテーブルであって、離鍵位置データAxの値(鍵の位置)毎に、各Axの値が仮想ダンパー位置データのとりうる値(仮想的ダンパーの仮想的可動範囲)のうちのどの値に相当するかを規定しているテーブルである。
ここで、Ax用データ変換テーブルの趣旨について説明する。仮想ダンパー位置データ生成部24は、離鍵位置データAxとダンパーペダル位置データBx40に対して、それぞれのデータ示す位置データに基づく仮想ダンパー位置データを生成する。離鍵位置データAxの値とダンパーペダル位置データBx40の値とは、一方が鍵の位置位置、他方がペダルの操作位置を表すデータであるから、互いに関連性を持たない独立した値である。したがって、仮想ダンパー位置データ生成部24においては、これらの値を、そのまま仮想ダンパー位置データとして扱うのではなく、それぞれ仮想ダンパー位置という同じ仮想的可動範囲の値に変換して扱うことが好ましい。すなわち、アコースティックピアノの物理的発音機構においては、離鍵操作時の鍵の操作方向の位置(鍵の深さ)とダンパーの踏み込み量とが物理的に同じ値(例えば互いに1cmずつ動かした場合など)であったとしても、離鍵の深さに応じたダンパーの変位量と、ダンパーペダル踏み込み量に応じたダンパーの変位量とは、それぞれ異なっている。アコースティックピアノの物理的発音機構の構成を模擬することを意図した本願実施例に係る楽音制御装置においては、上記離鍵操作に対するダンパーの動作特性と、ダンパーペダル操作に対するダンパーの動作特性との違いを吸収するために、離鍵位置データAxを仮想ダンパー位置データに対応する値に変換するAx用データ変換テーブルが用意されている。
一方、鍵盤ユニット20から離鍵位置データAxを受信したときに(ステップS19のYES)、該受信した離鍵位置データAxに含まれるキーナンバが示す音高に該当するキーオン・キーオフレジスタの値が既にキーオフ(音源的キーオフ)であれば(ステップS20のNO)、今回受信した離鍵位置データAxの音高に該当する楽音信号は現時点で既に消音制御中である。この場合、受信部23は、Ax用データ変換テーブルに基づき、当該受信した離鍵位置データAxの値を仮想ダンパー位置データに対応する値に変換し(ステップS26)、当該変換後の値でAxレジスタを変更する(変換後の値をAxレジストへ上書きする)ことで、今回受信した離鍵位置データAxの音高に該当するAxレジスタの現在値を変更する(ステップS27)。
そして、受信部23は、前記ステップS25又は前記ステップS27におけるAxレジスタの変更後に、今回受信した離鍵位置データAxに含まれるキーナンバ(処理対象としている音高)について、後述する図10の仮想ダンパー位置データ生成及び設定処理(ステップS28)を仮想ダンパー位置データ生成部24に開始させる。
また、鍵盤ユニット20からキーオフデータ8xを受信したときに(ステップS29のYES)、該受信したキーオフデータ8xに含まれるキーナンバが示す音高に該当するキーオン・キーオフレジスタの現在の値が音源的キーオンの場合には(ステップS30のYES)、受信部23は、当該キーオン・キーオフレジスタの値を音源的キーオフに変更して(ステップS31)、前記受信したキーオフデータ8xの音高に該当する楽音信号について、前記ステップS23と同様な消音開始処理を開始させる(ステップS32)。
受信部23は、前記ステップS29で受信したキーオフデータ8xに対応する離鍵位置データAxを生成して(ステップS33)、該生成された離鍵位置データAxをデータ変換テーブルに基づき仮想ダンパー位置データに変換して(ステップS34)、当該変換後の値でAxレジスタを変更する(変換後の値をAxレジストへ上書きする)ことで、今回受信したキーオフデータ8xの音高に該当するAxレジスタの現在値を変更する(ステップS35)。
ステップS30をYESに分岐する場合というのは、音源的キーオンの後、離鍵位置データAxが発生することなく、キーオフデータ8xが発生するケース(例えば、離鍵速度が速い場合等)である。したがって、受信部23は、ステップS30をYESに分岐した場合には、今回受信したキーオフデータ8xに対応する離鍵操作について離鍵位置データAxを得るために、前記ステップS31の処理により鍵盤的キーオフ位置(閾値K2)に対応する位置を示す離鍵位置データAxを生成する。
また、鍵盤ユニット20からキーオフデータ8xを受信したときに(ステップS29のYES)、該受信したキーオフデータ8xに含まれるキーナンバが示す音高に該当するキーオン・キーオフレジスタの現在の値が既にキーオフ(音源的キーオン)である場合には(ステップS30のNO)、受信部23は、ステップS36〜S38において、前記ステップS33〜S35と同様な処理を行い、鍵盤的キーオフ位置(閾値K2)に対応する位置を示す離鍵位置データAxを生成して、該生成された離鍵位置データAxをデータ変換テーブルに基づき仮想ダンパー位置データに変換し、当該変換後の値で、今回受信したキーオフデータ8xの音高に該当するAxレジスタの現在値を変更する。
前記ステップS30をNOに分岐する場合というのは、今回受信したキーオフデータ8xに含まれるキーナンバ(今回処理対象となっている音高)について、今回キーオフデータ8xを受信する前に既に、離鍵位置データAxを受信部23から受信して、既に音源的キーオフ中の場合、つまり楽音の消音制御(リリース制御)が始まっている場合である。
そして、受信部23は、前記ステップS35又はS38により今回処理対象となっている音高についてAxレジスタの値を変更した後に、今回受信したキーオフデータ8xに含まれるキーナンバ(処理対象としている音高)について、後述する図10の仮想ダンパー位置データ生成及び設定処理を仮想ダンパー位置データ生成部24に開始させる(ステップS39)。
また、鍵盤ユニット20からダンパーペダル位置データBx40を受信した場合には(ステップS40のYES)、受信部23は、Bx40用データ変換テーブルに基づき、該受信したBx40の値を仮想ダンパー位置データに変換し(ステップS41)、当該変換後の値でBx40レジスタを変更する(変換後の値をBx40レジスタに上書きする)ことで、今回受信したダンパーペダル位置データBx40に対応する仮想ダンパー位置データでBx40レジスタの現在値を変更する(ステップS42)。Bx40用データ変換テーブルは、フラッシュメモリ3、又はRAM4に予め記憶されたもので、ダンパーペダル位置データBx40の値(ダンパーペダルの位置)毎に、各Bx40の値が仮想ダンパー位置データのとりうる値(仮想的ダンパーの仮想的可動範囲)のうちのどの値に相当するかを規定しているテーブルである。Bx40用データ変換テーブルの趣旨は、Ax用データ変換テーブルについて前述したのと同様に、ダンパーペダル操作に対するダンパーの動作特性との違いを吸収するために、ダンパーペダル位置データBx40を仮想ダンパー位置データに対応する値に変換する点にある。
ステップS43において、受信部23は、前記ステップS42におけるBx40レジスタの変更後に、現時点でキーオン・キーオフレジスタの値が音源的キーオン中の全てのキーナンバ(現在発音中の全ての音高)について、後述する図10の仮想ダンパー位置データ生成及び設定処理を仮想ダンパー位置データ生成部24に開始させる。
また、鍵盤ユニット20からソステヌートペダルデータBx42を受信した場合(ステップS44のYES)、受信部23は、該受信したBx42がソステヌートペダルオンデータか、ソステヌートペダルオフデータかを判断する(ステップS45)。
ソステヌートペダルオンデータを受信した場合(ステップS45のYES)、受信部23は、全ての音高についてキーオン・キーオフレジスタの値を調べて、その値が「キーオン(音源的キーオン)に設定されているキーオン・キーオフレジスタを全て検出し(ステップS46)、該検出した全てのキーオン・キーオフレジスタに該当する各キーナンバ(音高)についてBx42レジスタの値をソステヌートペダルオンに変更する(ステップS47)。これにより、現在音源的キーオン中の全ての音高についてソステヌートペダルの操作状態がオンに設定される。
一方、ソステヌートペダルオフデータを受信した場合(ステップS45のNO)、受信部23は、全ての音高に対応するBx42レジスタのうちで、今回ソステヌートペダルデータBx42を受信した時点で、その値がソステヌートペダルオンになっている音高のBx42レジスタについて、その値をソステヌートペダルオフに変更する(ステップS48)。
受信部23は、前記ステップS47又はS48によりBx42レジスタの値を変更した後、ステップS49において、処理対象となる各音高について後述する仮想ダンパー位置データ生成及び設定処理を仮想ダンパー位置データ生成部24に開始させる。すなわち、前記ステップS48を経由した場合には、該ステップS48で値が変更された全てのBx42レジスタに該当する音高が、また、前記ステップS47を経由した場合には、前記ステップS46で検出した全てのキーナンバ(音高)すべてが、後述する図10の処理の処理対象となる。
なお、上記ステップS25、S27、S35、又はS38において更新されたAxレジスタの値については、当該鍵について次回のキーオンが発生した時にリセットされる。
図10は、仮想ダンパー位置データ生成部24の動作手順を説明するフローチャートである。この処理(仮想ダンパー位置データ生成及び設定処理)は、前記図8及び図9のステップS18、S28、S39、S43、及びS49において呼び出されて、処理対象とされた個々の音高それぞれについて個々に実行される。当該処理の要点は、前記図8及び図9の処理により更新されたキーオン・キーオフレジスタ、Axレジスタ、Bx40レジスタ、及びBx42レジスタの現在値に基づき、仮想ダンパー位置データのデータを生成して、設定する点にある。以下では、1つの鍵(音高)について仮想ダンパー位置データを生成して、設定する処理について説明する。なお、この処理は、CPU2が実行するソフトウェアプログラムにより実現されるものである。
当該鍵のBx42レジスタの現在値が「ソステヌートペダルオン」であれば(ステップS50のYES)、仮想ダンパー位置データ生成部24は、仮想ダンパー位置データの値を所定の最大値に設定する(ステップS51)。また、当該鍵のキーオン・キーオフレジスタの現在値がキーオンの場合(ステップS52のYES)、仮想ダンパー位置データ生成部24は、仮想ダンパー位置データの値を所定の最大値に設定する(ステップS53)。仮想ダンパー位置データの最大値とは、前述の通り、ダンパーが弦から最も離れた状態(弦から最も遠い位置)に対応した位置を示すデータである。従って、この処理により、ソステヌートペダルオンデータを受信したときにキーオン中の鍵があった場合、又は、キーオンデータ9xを受信した場合に、アコースティックピアノにおけるステヌートペダルの操作に対するダンパーのロック動作、又は、押鍵操作に応じてダンパーが弦から離れる動きをシミュレートすることができる。
当該鍵についてBx42レジスタの現在値がソステヌートペダルオフ、及び、キーオン・キーオフレジスタの現在値がキーオフのときに(ステップS50のNO、ステップS52のNO)、当該鍵についてAxレジスタの値が閾値K2以下(閾値K2よりもエンド側の値)の場合(ステップS54のNO)、Axレジスタの現在値とBx40レジスタの現在値を比較して、Bx40レジスタの現在値(ダンパーペダル位置)の方が大きければ(ステップS55のYES)、Bx40レジスタの現在値を仮想ダンパー位置データの値に設定する(ステップS56)。Axレジスタの現在値の方がBx40レジスタの現在値によりも大きければ(ステップS55のNO)、Axレジスタの現在値を仮想ダンパー位置データの値に設定する(ステップS57)。
アコースティックピアノにおいて、鍵の操作によるダンパー制御と、ダンパーペダル操作によるダンパー制御とが同時ある場合、より大きくダンパーを動かしている操作に応じてダンパー位置が決定されるのであるから、前記ステップS55において、仮想ダンパー位置データの決定要因として、仮想ダンパー位置データをより大きい値に設定するイベントデータを優先することは、合理的である。
また、当該鍵についてBx42レジスタの現在値がソステヌートペダルオフ、及び、キーオン・キーオフレジスタの現在値がキーオフのときに(ステップS50のNO、ステップS52のNO)、当該鍵についてAxレジスタの値が閾値K2より大きい場合(ステップS54のYES)には、仮想ダンパー位置データ生成部24は、Bx40レジスタの現在値を仮想ダンパー位置データの値に設定する(ステップS56)。また、この実施例の構成ではないが、離鍵位置データAxを受信しない構成(離鍵位置データAxの検出機構を持たない機種)の場合には、Axレジスタに値がない。つまり、常にAxレジスタの値が閾値K2より大きい値(初期値)となっている。
そして、前記ステップS51、S53、S56、又はS57で設定された仮想ダンパー位置データが前回の値から変化していれば(ステップS58のYES)、当該設定した仮想ダンパー位置データをエンベロープ生成部29に転送して、該エンベロープ生成部29にリリースレートを変更する処理を行わせる(ステップS59)。
図11は、エンベロープ生成部(EG)29が行うリリースレート変更処理の手順を示すフローチャートである。この処理は、前記図10のステップS59から呼び出される処理であって、該図10の処理が処理対象としていた音高を処理対象として、1音高ずつについて実行される。ここで、前記図10の処理は、上述の通り、図8及び図9のステップS18、S28、S39、S43、及びS49のいずれから立ち上げられたかによって、その処理対象とする音高の数が異なっている。図10の処理は、1音高分の処理であるから、処理対象とする音高の数が複数ある場合には、該処理対象とする音高の数だけ図10に示す処理が起動する。以下に説明する図11の「リリースレート変更処理」は、図10の処理が処理対象としていた1音高に対して1つずつ実行されるものであるから、図10の処理が複数立ち上げられた場合には、図11の処理も複数実行される。
なお、この処理は、CPU2が実行するソフトウェアプログラムにより実現されるものである。
EG29は、前記ステップS51、S53、S56、又はS57で設定された仮想ダンパー位置データに基づきエンベロープ信号のリリースレートを決定して(ステップS60)、該決定した値にリリースレートを変更する(ステップS61)。アコースティックピアノのリリースの特性は、ダンパーが弦から離れた状態になるほど、リリースがゆるやかな傾きになり、ダンパーが弦に近いほどリリースが急になる。したがって、リリースレートの設定は、仮想ダンパー位置データを参照して、仮想ダンパー位置データが最大値のときはリリースレートを最もゆるやかな傾きの値に設定し、仮想ダンパー位置データが小さくなるにつれてリリースレートの傾きが徐々に急になるよう値を設定する。この設定には、例えば、仮想ダンパー位置データの値毎に対応するリリースレートの値を規定したテーブル(リリースレート変換テーブル)を予め用意しておき、そのテーブルを参照して仮想ダンパー位置データをリリースレートへ変更するようにして行う。これにより、EG29は、仮想ダンパー位置データに基づき決定されたリリースレートを持つエンベロープ信号を生成する。
EG29は、音源的キーオンのタイミングから、サンプリング周期毎に、アタックレート、ディケイレート及びサスティンレートの値を順に出力して、アッタク部、ディケイ部、及びサスティン部からなるエンベロープ信号を生成する。そして、音源的キーオフのタイミングに応じて、EG29は、前記ステップS61で新たに設定したリリースレートに従うエンベロープ信号で楽音信号のリリース制御(消音制御)を行う。これにより、仮想ダンパー位置データの現在値に応じたリリース制御が行われる。よって、鍵盤的キーオン中に(つまり、楽音信号の発音制御中又は消音制御中に)、鍵の操作(離鍵位置データ)や、ダンパーペダルの操作によって、仮想ダンパー位置データが更新されて、リリースレートが更新されれば、リリースレートがリアルタイムで変化することになる。
以上説明した通り、この発明の一実施例を適用した電子ピアノ1は、仮想ダンパー位置データ生成部24を備わることにより、各鍵についてキーオンデータ9x、キーオフデータ8x、離鍵位置データAx、ダンパーペダル位置データBx40、ソステヌートペダルオン(Bx42)、又はソステヌートペダルオフデータ(Bx42)の少なくともいずれか1つを受信したときに、該受信したデータに基づいて仮想ダンパー位置データを生成して、この生成した仮想ダンパー位置データをリリースレートを決定するパラメータとすることで、複数の動作要因により複合的にダンパーの位置(ダンパーと弦の距離)を制御するアコースティックピアノの物理的発音機構(リリース制御機構)を模擬した構成で、アコースティックピアノにおけるリリース制御をリアルに再現することができる。
上記実施例では、本願発明を適用する電子楽器(電子ピアノ1)の操作部5の構成として、鍵盤ユニット20、ダンパーペダルユニット21、およびソステヌートペダルユニット22を具える例について説明したが、鍵盤ユニット20、ダンパーペダルユニット21、およびソステヌートペダルユニット22のいずれかのユニットを持たない電子楽器においても、本願発明の楽音制御(図8、図9、図10および図11の処理)を適用することができる。その場合、電子楽器に実装されていないユニットについては、そのユニットから発生すべきデータが発生していないだけであり、受信部23が実行する処理は、上記図8〜図11の処理に何ら変更を加える必要がない。すなわち、図8および図9の処理においては、実装されていないユニットから発生すべきデータの受信判断ステップで、常にデータ受信なし(NO)と判断されるだけとなる。また、鍵盤ユニット20については、離鍵位置データを発生できない(例えば検出機構を持たない)ユニット、つまりキーオンデータおよびキーオフデータのみを発生するユニットを実装した電子鍵盤楽器にも、本願発明をそのまま適用することができる。更に、本願発明の楽音制御(図8、図9、図10および図11の処理)は、離鍵位置データAxの解像度が異なる鍵盤ユニットを登載した電子楽器においても、アルゴリズムの変更なしにそのまま適用できる。その場合は、離鍵位置データAxの解像度にあわせたAx用データ変換テーブルを用意することが望ましい。このように、上記実施例の発明は、仮想ダンパー位置データにお基づくリリース制御を、合理的で汎用性の高い構成で実現することができるという優れた効果を奏する。
また、上記図8及び図9に示す変更例として、ステップS24、S26,S34,S37、及びS41のテーブル変換処理を行わずに、離鍵位置データAxの値又はダンパーペダル位置データBx40の値を、そのまま仮想ダンパー位置データとして扱う処理構成としてもよい。
なお、上記実施例では、電子ピアノ1をユーザが演奏する場合を想定して、楽音信号のリリース制御を説明したが、これに限らず、キーオンデータ9x、キーオフデータ8x、離鍵位置データAx、ダンパーペダル位置データBx40、ソステヌートペダルオン(Bx42)、又はソステヌートペダルオフデータ(Bx42)の少なくともいずれか1つを含む自動演奏データを再生する場合(自動演奏)にも、本発明に係るリリース制御を適用することができる。その場合、図2の受信部23に対するMIDIイベントデータの供給元である鍵盤ユニット20、ダンパーペダルユニット21、及びソステヌートペダルユニット22を、自動演奏データの供給手段に読み替えればよい。
また、上記実施例では、離鍵位置データAxが128段階の分解能で離鍵操作時の鍵の操作方向の位置を表すデータとしたが、例えば、図3の閾値K2、K2A,K2B,K2C及びK4で区切られた4区間について4段階の離鍵位置データAxを出力する構成など、レスト位置からエンド位置までの範囲に設定された数ポイントの区間毎に離鍵位置データAxの値が出力される構成であってもよい。
また、上記のように数ポイントの区間毎に離鍵位置データAxの値を出力する構成とした場合、鍵盤ユニット20に含まれるキーセンは、鍵の位置を連続量で検出するものである必要はなく、鍵の操作方向の位置について、数ポイントの閾値の通過を検出できる構成(例えば、図3の閾値K2、K2A,K2B,K2C及びK4の各閾値の通過を検出する構成)であってよい。
また、上記実施例では、本発明に係る楽音制御装置を電子ピアノに適用する例について説明したが、いわゆる電子ピアノに限らず、例えば、シンセサイザー、電子オルガンなどの電子楽器や、電子的に楽音信号を生成する処理を実行させる機能を有する楽音信号生成装置など、電子的に楽音信号を生成する機能を有する装置、コンピュータに楽音信号を生成する処理を実行させるソフトウェアプログラムに対して、本発明を適用可能であり、特にピアノ系音色の楽音信号の生成について本発明が顕著な効果を発揮する。
1 電子ピアノ、2 CPU、3 フラッシュメモリ、4 RAM、5 操作部、6 表示部、7 音源部、8 バスライン、9 アンプ、10 スピーカ、20 鍵盤ユニット、21 ダンパーペダルユニット、22 ソステヌートペダルユニット、23 受信部、24 仮想ダンパー位置データ生成部、25 位相生成部、26 アドレス生成部、27 補間部、28 乗算部、29 エンベロープ生成部、30 スピーカシステム、31 軌道、32 アタック部、33 ディケイ部、34 サスティン部、35 リリース部