JP3767608B2 - 楽音制御装置 - Google Patents

楽音制御装置 Download PDF

Info

Publication number
JP3767608B2
JP3767608B2 JP2004083544A JP2004083544A JP3767608B2 JP 3767608 B2 JP3767608 B2 JP 3767608B2 JP 2004083544 A JP2004083544 A JP 2004083544A JP 2004083544 A JP2004083544 A JP 2004083544A JP 3767608 B2 JP3767608 B2 JP 3767608B2
Authority
JP
Japan
Prior art keywords
key
state
sound
time
threshold value
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 - Lifetime
Application number
JP2004083544A
Other languages
English (en)
Other versions
JP2004220044A (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 JP2004083544A priority Critical patent/JP3767608B2/ja
Publication of JP2004220044A publication Critical patent/JP2004220044A/ja
Application granted granted Critical
Publication of JP3767608B2 publication Critical patent/JP3767608B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Description

この発明は、鍵盤楽器のキーなどの動きに応じて楽音を制御する楽音制御装置に関する。
周知のように、近年にあっては、記録した演奏情報(あるいは外部から供給される演奏情報)に応じて自動演奏する自動演奏ピアノが各種実用化されている。この自動演奏ピアノにおいては、キーの動きを検出するためのキーセンサが設けられ、演奏記録時においてキーの挙動を検出するようにしている。
また、所定の機構を作動させることにより、ハンマーの打弦を抑制して消音させる消音ピアノも開発されているが、この消音ピアノでは、消音時にはキーの動きをキーセンサによって検出し、これにより電子的に楽音を発生するようにしている。
ここで、図29に従来のキーセンサの構成を示す。図において、1はキーであり、下部にシャッタ2が設けられている。3はキーセンサであり、2つのフォトセンサ4a,4bを設けている。これらフォトセンサ4a,4bは、図示のように所定距離隔てて設けられており、各々は対向する発光素子からの光を受光するようになっている。
上記構成においては、フォトセンサ4a,4bの受光状態から次の3つの状態が認識できる。すなわち、
(1)フォトセンサ4a,4bがともに受光状態、
(2)フォトセンサ4aが受光状態、フォトセンサ4bが遮光状態、
(3)フォトセンサ4a,4bが共に遮光状態の3状態である。
そして、(1)〜(3)のいずれの状態に遷移したかにより、キーオンおよびキーオフが検出される。
なお、図29には、検出箇所が2カ所ある2点センサを示したが、検出点を増やした多点センサも開発されている。この場合には、検出点の数に応じて認識し得る状態の数が増える。
しかしながら、上述した従来のキーセンサは、決まった検出位置での情報しか得られないため、位置精度が十分でないという欠点があった。さらに、キーセンサの取付位置によって検出位置が決まってしまうので、その取付精度が要求されるという問題があった。
ところで、キーの上下動に応じたアナログ信号を出力するセンサを設け、このセンサの出力値をソフトウエアによって処理することにより、検出点の位置をしきい値として設定するピアノが開発されている(USP5001339,USP5231283)。このピアノによれば、検出点の位置はセンサ取付後に任意に設定することができるので、センサ取付精度は要求されない。
しかしながら、上述した各従来例においては、キーがどの検出点(あるいはしきい値)を通過したか否かによって直接的に発音制御を行っているため、不自然な発音がなされることがある。
例えば、ピアノにおいては、キーをゆっくり押下してある深さまで達すると、その後さらに押下してもハンマーが打弦せず、発音されないのが通常であるが、上述した各従来装置においては、キーがある検出点(しきい値)を超えると必ず発音されてしまうという問題があった。
この発明は、上述した事情に鑑みてなされたもので、センサの取付精度が要求されず、しかも、極めて自然な発音制御を行うことができる楽音発生装置を提供することを目的としている。
上記課題を解決するために、請求項1に記載の発明においては、演奏操作子の位置を連続的に検出する位置検出手段と、前記位置検出手段の検出位置と複数のしきい値とを比較し、この比較結果を認識する比較結果認識手段と、前記演奏操作子が所定の状態のいずれにあるかを決定する際に、前の状態と前記比較結果認識手段の認識内容とに応じて決定する状態決定手段と、前記状態決定手段が決定した状態に基づいて楽音の制御を行う制御手段とを具備し、前記状態決定手段は、前記演奏操作子が所定の状態のいずれにあるかを決定する際に、前の状態、前記比較結果認識手段の認識内容、および前の状態の継続時間に応じて決定することを特徴とする。
また、請求項2に記載の発明においては、楽音を発音する音源手段をさらに具備し、前記制御手段は、発音制御情報に基づいて前記音源手段による楽音の発音を制御し、前記制御手段は、前記状態決定手段によって前の状態とは異なる状態に決定されたとき、新たな発音制御情報を求め、求めた新たな発音制御情報が更新条件を満たした場合には、既に設定されている発音制御情報を前記新たな発音制御情報に更新し、更新後の前記新たな発音制御情報に基づいて前記音源手段による楽音の発音を制御することを特徴とする。
この発明によれば、センサの取付精度が要求されず、しかも、極めて自然で多様な発音制御を行うことができる。
<A:実施形態の構成>
以下、図面を参照してこの発明の実施形態について説明する。なお、この実施形態は、本発明を消音機構付きの自動ピアノに適用した例である。
図2は、本実施形態におけるキーの構造を示す側面図である。図において、10はキーであり、バランスピンBPを中心に揺動する。このキー10の下部には、板状のシャッタKSが設けられており、シャッタKSの下方にはセンサボックスSBが設けられている。センサボックスSBは、棚板11の上面に取り付けられており、キー10の位置に応じた量だけシャッタKSが進入するようになっている。
ここで、図3はセンサボックスSBの内部を示す概略図であり、図において221は発光側センサヘッドである。この発光側センサヘッド221は、光ファイバを介してLED224から光を供給されて、直径約5mm程度の光ビームを出力する。222は、受光側センサヘッドであり、発光側センサヘッド221が照射する光ビームを受光する。その受けられた光は、光ファイバを介してフォトダイオード225へ送られ、そのフォトダイオード225は光量に応じた信号Saを出力する。
この場合、発光側センサヘッド221から照射される光ビームは、シャッタKSの位置に応じた分だけ遮蔽されるようになっており、この結果、受光側センサヘッド222の受光量はシャッタKSの位置、すなわち、キー10の位置に応じて変化する。したがって、フォトダイオード225の出力信号Saは、キー10の位置を反映するアナログ値となり、例えば、図4に示すような特性となる。なお、この図においてレスト位置とは、キー10の初期位置であり、また、エンド位置とはキー10を押し切った位置である。
ところで、図1、図2および図5に示すSOLは、ソレノイドであり、励磁されるとプランジャP・SOLが突出してキー10の右端側(演奏者に対して奥側)を押し上げ、演奏者による押鍵と同様の鍵動作を行わせる。
次に、図5は、この実施形態におけるピアノアクションの構成を示す側面図である。本実施形態においては、押鍵に応じた打弦を行う通常演奏モードと、押鍵があっても打弦を抑止して弦から発音させない消音演奏モードとがあり、以下、図5を参照して、各モードにおけるピアノアクションの動作について説明する。
(1)通常演奏時の動作
押鍵が行われると、ウイペン23はキャプスタン12によって突き上げられ、ピン22aを中心として時計回りに回動する。これにより、ジャック大26aがバット41を突き上げてハンマーアッセンブリ40(バット41、ハンマー44、キャッチャー46等からなる)を時計回りの方向へ回転させ、ハンマー44が弦Sを打撃する。この打弦操作時において、ジャック26は、その回動途中にジャック小26bがレギュレーティングボタン34に当接することにより、時計方向への回動が阻まれる。一方、ウイペン23は回動を継続しているため、ジャック26は、レギュレーティングボタン34を支点としてウイペン23に対して反時計方向へ相対的に回動し、これにより、ジャック大26aの上端面がバット41の下面から図中左方向へ逃げ、バット41との非当接位置に移動する。そして、ハンマー44による打弦後のハンマーアッセンブリ40の回動復帰の動作は、キャッチャー46がバックチェック38に当接することにより一時的に停止され、その間にジャック26は、キー10の復帰動作に伴うウイペン23の回動復帰に連動し、ジャック大26aの上端部は再びバット41の下部に入り込み、次の打弦動作を可能にする。
(2)消音演奏時の動作
次に、消音演奏状態にするには、所定の操作を行ってストッパー66を実線で示す水平状態から回転させて下方へ向けて鎖線で示す状態にする。本実施形態においては、ストッパー66はアクチュエータ77(図1参照)によって駆動されるが、これに代えて、ストッパー66に連動するレバーやペダルを設けておき、これらを操作することによってストッパー66を回転させてもよい。また、本実施形態においては、ストッパー66は、キャッチャー46の回動を阻止することで、ハンマーアッセンブリ40全体の回動を阻止するようにしているが、ハンマーアッセンブリ40の他の部分を阻止することでハンマーアッセンブリ40全体の回動を阻止するようにしてもよい。
さて、ストッパー66が回転した状態で押鍵が行われると、ウイペン23はキャプスタン12によって突き上げられ、ピン22aを中心として時計回りに回動する。これにより、ジャック大26aがバット41を突き上げてハンマーアッセンブリ40を時計回りの方向へ回転させる。次に、ジャック小26bがレギュレーティングボタン34に当接することにより、ジャック大26aの上端面がバット41の下面から図中左方向に逃げる。その間、ハンマーアッセンブリ40は慣性力で回動を続けるが、弦Sに当たる手前でキャッチャー46がストッパー66に当接し、反時計回りの方向へ跳ね返される。その後のハンマーアッセンブリ40等の復帰動作は通常演奏の場合と同様である。なお、消音演奏時においては、電子的に楽音が形成されるが、これについては後述する。
上述した通常演奏時および消音演奏時における押鍵は、演奏者による押鍵であっても、また、ソレノイドSOLによる押鍵であっても、全く同様の動作となる。
次に、図1は、本実施形態の制御回路の構成を示すブロック図である。図において、201は装置各部を制御するCPUであり、202はプログラムや各種テーブルが記憶されているROMである。203は各種データが一時記憶されるワーキングエリアや、各種処理に用いられるテーブルが設定されているRAMである。
204は種々のスイッチが設けられているパネルスイッチ部であり、この中には前述した通常演奏と消音演奏を切り換えるための通常/消音切替スイッチSWが設けられている。ここで、通常/消音切替スイッチSWが押されると、そのスイッチ信号がCPU201に検出され、この結果、CPU201はアクチュエータ駆動回路208を制御してアクチュエータ77を回動させる。これにより、ストッパー66が図5に示す鎖線の位置に移動し、消音演奏モードになる。そして、通常/消音切替スイッチSWを再び押すと、CPU201はアクチュエータ駆動回路208を制御して、アクチュエータ77を反対方向に駆動させる。この結果、ストッパー66は図5に示す実線位置に戻り、通常演奏モードになる。このように、通常/消音切替スイッチSWを押す毎に、通常演奏モードと消音演奏モードとが交互に切り替わる。
次に、210は音源回路であり、CPU201から供給されるキー番号(キーコードともいう)、ベロシティ(押鍵の強さに対応したデータ)、キーオン信号KON、キーオフ信号KOFおよびリリースレートRL等に基づいてピアノ音の楽音信号を生成し、スピーカSPまたはヘッドホンHHに供給する。
この場合、キーオン信号KONが供給されると、アタック、ディケイ、サステインの各部分のエンベロープ制御を行い、さらに、リリース期間のエンベロープ制御としてリリースレートRLに基づく減衰制御を行う。なお、楽音信号の振幅(音量)は、ベロシティKVに基づいて制御される。
また、音源回路210は、16個の発音チャンネルを有しており、これにより、16音の同時発音が可能になっている。
次に、223は、前述したフォトダイオード225(図3参照)の出力信号をデジタル信号に変換するA/D変換器であり、その出力信号はCPU201に読み取られるようになっている。本構成では、センサマトリックス方式が採用されており、12個のLED224と8個のフォトダイオード225を使って88鍵分のデータ(88<12×8)を読み取るようになっている。すなわち、12個のLED224は、各々8個の発光側センサヘッド221に接続されており、また、各発光側センサヘッド221に対応する受光側センサヘッド222は、各々フォトダイオード225に接続される。この時、1つのフォトダイオードが12個の受光側センサヘッドを受け持つように接続される。
そして、ある1つのLEDだけを点灯させ、その時の8個のフォトダイオードの出力を読み、次に、また別のLEDを1つだけ点灯させて8個のフォトダイオードの出力を読むというように順次データを獲得する。また、本構成ではハードウエアの制約から、一度に4個のフォトダイオードの出力をA/D変換するようになっている。これら受発光センサヘッド221、222、LED224、およびフォトダイオード225等でフォトセンサを構成している。
CPU201は、A/D変換器223によってデジタル値に変換された各キーの位置情報に基づいて各キーの状態を認識し、これに基づいて、ベロシティ、キーオン信号KON、キーオフ信号KOFおよびリリースレートRLを生成する。また、CPU201は、スキャン操作に応じて、いずれのキーについての位置情報かを認識し、これに基づいてキー番号KNを出力する。
次に、250はFDドライバであり、フロッピー(登録商標)ディスク251に対して、演奏情報の書込/読出を行う。この場合の演奏情報は、前述したベロシティ、キー番号KN、キーオン信号KON、キーオフ信号KOFおよびリリースレートRLであり、MIDI情報に変換されて書き込まれる。また、フロッピーディスク251から読み出された演奏情報は、RAM203に一旦格納された後、楽曲の進行に応じて読み出され、ソレノイド駆動回路260に供給される。ソレノイド駆動回路260は、演奏情報に応じたソレノイド駆動信号を作成し、ソレノイドSOLに供給する。これによって、各キー毎に設けられているソレノイドSOLが駆動され、演奏情報に基づいた自動演奏が行われる。
<B:実施形態の動作>
(1)しきい値設定動作
次に、上述した構成によるこの実施形態の動作について説明するが、始めに、キーストロークの所定位置に設定されるしきい値について説明する。
この実施形態においては、しきい値を超えたことが検出された時刻や位置に基づいて、後述するキー・ステートの決定やベロシティの決定などが行われる。また、この実施形態においては、キー・ステートに基づいて、楽音制御が行われるようになっており、このため、しきい値の設定は極めて重要な事項となる。
ここで、しきい値には、図6に示すように、レスト位置からエンド位置へ向けて順次設定されるK1〜K4と、しきい値K2とK3との間に設定されるK2Aとがある。上述したしきい値K1〜K4およびK2Aは、キー・ステートの決定に用いられ、特に、しきい値K2Aは、リリース時におけるエンベロープ制御にも用いられる。なお、図6に示す曲線C1は、一般的なキー軌跡の一例である。
始めに、装置に電源が投入されると、CPU201は、各レジスタやRAM203を初期化し、また、割込処理を許可した後に、以下のようなしきい値設定動作を行う(図17のステップSP1,2参照)。
まず、CPU201は、A/D変換器223によってデジタルデータに変換されたフォトダイオード225の出力信号を、4キー分ずつ受け取る。ここで、CPU201は、4キー分ずつのA/D変換情報を、第0〜第23の検出チャンネルのデータとして受け取る。なお、この実施形態のキー数は88鍵であるから、実際には第0〜第21の検出チャンネルを設定すれば足りるが(22×4=88)、ハードウエアの関係から0〜95を1周期とするため、第0〜第23の検出チャンネルが設定されている。
さて、電源投入直後においては、全てのキーは押されていない状態にあるから、CPU201が受け取るデータは、全て各キーのレスト位置のデータとなる。次に、CPU201は、各キーのレスト位置に対して所定の演算を行い、しきい値K1〜K4およびK2Aを算出する。
この実施形態の場合は、レスト位置データをXrとした場合に、所定の係数ri(i=1〜4および2A)を乗算することによって各しきい値を得る。すなわち、
K1=Xr×r1
K2=Xr×r2
K3=Xr×r3
K4=Xr×r4
K2A=Xr×r2A
という演算によって各しきい値が求められる。各係数r1〜r4およびr2Aは、キーの状態を識別するのに適した値が実験等によって求められ、例えば、白鍵と黒鍵のそれぞれについて、実験値の平均が設定される。
以上の演算によって求められた各しきい値は、RAM203の所定エリアに記憶される。ここで、図7に、RAM203内に設定されているキー情報用のテーブルを示す。この図においてはマトリックス状に表示してあり、横方向にはキー番号が示されている。ただし、実際のキーは第0番から第87番までであるが、各キーの現在位置を示すKEY−POSの行(詳細は後述)には、ハードウエアの関係上、第95番までのキー番号が付されている。
また、図に示すKEY−RSTの行は、キーのレスト位置情報が記憶される行であり、上述した処理によってCPU201が読み取った各キーのレスト位置情報は、対応するキー番号のエリアに記憶される。同様に、THR−K1、THR−K2、THR−K3、THR−K4およびTHR−K2Aの行は、各々しきい値K1,K2,K3,K4およびK2Aを記憶する行であり、上述の演算によって求められた各しきい値が、対応するキー番号のエリアに記憶される。
また、KEY−STATEの行は、キー・ステート(キーの状態)が記憶される行であり、また、TBL−NUMはテーブルナンバーが記憶される行である。テーブルナンバーとは、押下されたキーについての発音を制御するための発音制御テーブルのナンバーである。この実施形態においては、音源回路210の16個の発音チャンネル(同時発音可能チャンネル)に合わせて、第0〜第15の発音制御テーブルが用意されている。すなわち、発音制御テーブルによって指示された発音情報が、16個の発音チャンネルに適宜割り当てられて発音される。
ここで、図8に発音制御テーブルの内容を示す。この発音制御テーブルは、RAM203内の所定エリアに設けられ、後述する処理によってその内容が適宜書き込まれるようになっている。また、図8においてはマトリックス状に表示してあり、横方向にはテーブル番号が示されている。そして、KEY−NUMの行には、テーブルが割り当てられたキーの番号が書き込まれ、OVR−K1〜OVR−K3には、しきい値K1〜K3を越えたときのキーの位置が各々書き込まれるようになっている。同様にして、OVK1−TIM〜OVK3−TIMの行には、しきい値K1〜K3を越えたときの時刻(検出時刻)が書き込まれるようになっている。この実施形態においては、各キーの位置情報は、所定のタイミングで検出するようにしており(図13参照)、このため、各キーがしきい値に達するタイミングと検出タイミングとが一致するとは限らない。そこで、上述のように、各キーがしきい値を越えたときの位置と時刻とを対にして記憶するようにしている。また、上述の時刻データは、2バイトのデータ長になっている。
(2)ベロシティの基本演算
次に、図8に示すVELOCITYの行には、ベロシティ(押鍵速度に対応)が書き込まれる。この場合のベロシティの基本的な算出は、以下のようにして行われる。
まず、あるしきい値Ki(i=1〜3)を超えたときのキー位置をd1とし、それより大きいしきい値Kj(j=2〜4,j>i)を超えたときのキー位置をd2とする。また、これらのしきい値を超えたときの時刻を各々t1、t2とすると、CPU201においては、まず、以下の計算を行う。
(d1−d2)×2÷(レスト位置データ)×2=(正規化された変位)
ここで、d1−d2はキーの移動距離(変位)である。d1からd2を減算しているのは、キー位置データがレスト位置からエンド位置に向かって小さくなるように出力されるからである。また、レスト位置データで除しているのは、各キーのレスト位置のばらつきを正規化するためであり、2を乗じているのは時刻データのバイト数(2バイト)と合わせるためである。以上のようにして、正規化された変位が演算されると、これを時刻データの差(移動時間)で除して速度を求める。すなわち、次の演算を行う。
(正規化された変位)÷(t2−t1)÷2=(速度データ)
なお、この演算において2で除しているのは、データ長を再び1バイトに戻すためである。
次に、CPU201は、以上のようにして求められた鍵の速度を表す速度データを、図11に示すテーブルTB2を参照してハンマーの打弦速度を表すハンマーベロシティに変換する。テーブルTB2は、速度データxに対し、所定の演算に従う変換曲線によって、キーについての速度データをMIDI規格によるハンマーベロシティに変換するとともに、フォトセンサの非線形特性を補正する。実際には、これら2つの変換を同時に行うような変換曲線が設定されている。この場合、このテーブルTB2は、ROM202内に設定されている。
次に、図11に示すテーブルTB3−2〜TB3−4は、各々ダウンカウント値出力テーブルであり、テーブルTB2が出力するベロシティに基づき、当該ベロシティでハンマーが運動を続けた場合の打弦までの時間データ(ダウンカウント値)を出力する。打弦までの時間は、キー速度を算出したときの位置、すなわち、どのしきい値を通過していたかによって異なる。このため、上述のd2がどのしきい値を超えたときのデータであるかによって、ダウンカウント値出力テーブルTB3−2〜TB3−4のいずれかが選択される。すなわち、しきい値K2、K3、K4に対応して、ダウンカウント値出力テーブルTB3−2、TB3−3、TB3−4が適宜選択される。
さて、テーブルTB2から出力されるベロシティおよびダウンカウント値出力テーブルTB3−2〜TB3−4から出力されるダウンカウント値は、各々図8に示すVELOCITYおよびDWN−CNTRの行に書き込まれる。この場合、ベロシティは、キーが新たなしきい値を通過すると再計算されるが(詳細は後述)、再計算によるベロシティの方が大きい場合にのみ、該当するエリアの値が更新される。また、ダウンカウント値は、所定の周期でダウンカウントされ、その値が「0」になると、そのキーについてのキー番号とベロシティが音源回路210に供給されて発音されるようになっている。
(3)各種処理ルーチンの関係
次に、各種処理ルーチンについて説明するが、始めに、各ルーチンの時間的な関係について説明する。この実施形態においては、メインルーチン(分岐するルーチンを含む)、A/D割込みルーチンおよびタイマ割込みルーチンがあり、それぞれのタイミング的関係は、図12に示すようになっている。ここで、同図に示す(ロ)がメインルーチンの処理タイミングである。メインルーチンは、発音制御における主な処理を行うルーチンであり、大半の処理はここにおいて行われる。
次に、同図(イ)は、タイマ割込みルーチンであり、100μs毎に割込で起動される。このルーチンは、時間計測に用いられるタイマ値を更新する処理や、上述したダウンカウント値を減算する処理を行う。また、同図(ハ)は、A/D割込みルーチンであり、約1msec毎に割込で起動される。このA/D割込みルーチンは、フォトダイオード225の出力信号を4キー分ずつ読み込む処理を行う。前述のタイマ割込み処理ルーチンとA/D割込み処理ルーチンとが競合する場合は、タイマ割込み処理ルーチンが優先される。これはタイマ割込み処理ルーチンが所定周期で起動されないと、タイマの値に誤差が生じるからである。
なお、図12は、各処理ルーチンの動作タイミングを模式的に示すもので、それらの処理時間の割合を示すものではない。以下、各処理について、順次詳細に説明する。
(4)タイマ割込み処理
図14はタイマ割込み処理を示すフローチャートである。まず、図に示すステップSPa1においては、タイマの値を1増加させる。この場合、タイマはCPU201内のレジスタによって構成されている。すなわち、図10に示すCPU201内のレジスタセットのうち、レジスタE6がタイマとして機能する。
ここで、図10に示す各レジスタについて説明すると、図示のように、En(n=0〜6)、RnH(n=0〜6)、およびRnL(n=0〜6)の合計21個が設定されている。これらのうち本実施形態で特に機能を決めて使用しているのは、上述のレジスタE6(タイマ)の他、以下の6つである。
まず、メインルーチン(詳細は後述)に関連して、レジスタE5にはA/D変換の時刻が書き込まれ、レジスタR3Hにはキー・ステート(キーの状態)が書き込まれ、レジスタR3Lにはキーの現在位置が書き込まれ、レジスタR4Lにはテーブル番号が書き込まれ、レジスタR5Lにはキー番号が書き込まれる。そして、レジスタR6LにはA/D変換を行うチャンネルが書き込まれる。なお、その他のレジスタは、汎用レジスタとして使用される。
さて、ステップSPa1の処理は、タイマ割込みが起動される毎に行われるから、タイマ値は100μ毎に1つずつ増加する。したがって、タイマ値は、現在時刻を示す値となる。
次に、ステップSPa2に進み、タイマ値が8の倍数であるか否かが判定される。この判定が「NO」の場合はそのままメインルーチンへ復帰し、「YES」の場合はステップSPa3へ進む。この場合、ステップSPa2の判定は、800μs毎に「YES」となる。
次に、ステップSPa3においては、図8に示す各発音制御テーブルのダウンカウント値(DWN−CNTRの行の各値)を各々1減算し、減算後の値が0の発音制御テーブルがあれば、音源回路210に対応するMIDI信号を出力する。すなわち、ダウンカウント値が0となったキーに対応するベロシティ、キー番号KNおよびキー音信号KONを音源回路210の空きチャンネルに出力する。この結果、音源回路210はキー番号KNに応じた音高で、かつ、ベロシティに応じたエンベロープを有する楽音を発生する。
また、ステップSPa3においては、ダウンカウント値が0になったキーについては、そのキー・ステートをSOUNDにし、図7に示すKEY−STATE行の該当エリアを書き換える。さらに、そのキーについてのテーブル番号(図7に示すTBL−NUM行に書かれる番号)をクリアし、発音制御テーブルを解放する。すなわち、今まで当該キーが使用していた発音制御テーブルを解放し、他のキーの使用を許可する。ここで、キー・ステートがSOUNDであるということは、そのキーについては発音がなされていることを意味する。
次に、ステップSPa4に進み、タイマ値が8192の倍数か否かが判定される。この判定が「NO」の場合は、メインルーチンに復帰し、「YES」の場合はステップSPa5に進む。この場合、ステップSPa4は、819.2ms毎に「YES」となる。
そして、ステップSPa5においては、第0〜第15の各発音制御テーブル毎に設けられたタイムオーバー検知用カウンタを各々1増加させる。タイムオーバー用カウンタは、RAM203内に設定されており、そのカウント内容に基づいてキー・ステートがtime overか否かが判断される。この場合、time overとは、キー・ステートが所定時間以上継続したことを示す。なお、タイムオーバーカウンタについては、図示を省略する。
(5)A/D割込み処理
次に、A/D割込み処理について図13を参照して説明する。A/D変換器223は、CPUの動きと並行して動作しており、4キー分のA/D変換が終わると割込み要求を発生し、これによりCPUは、A/D割込み処理を開始する。まず、ステップSPb1においては、A/D変換処理を停止させ、また、次のチャンネルのLED224を点灯させる。
次に、ステップSPb2へ進み、4キー分の位置データを、図7に示すKEY−POS行の対応するエリアに書き込む。また、タイマ値(レジスタE6の値)を図9に示すテーブル(KEY−TIM行のみ)に書き込む。この場合の書き込みは、現在読み込んだ検出チャンネル番号に対応するエリアに行われる。図9に示すテーブルは、各検出チャンネルについての検出時刻(A/D変換時刻)を記憶するテーブルであり、RAM203内に設けられている。
次に、ステップSPb3に進み、検出チャンネルの番号を1インクリメントし(ただし、「23」の次は「0」)、A/D変換をスタートさせて、メインルーチンに復帰する。ここで、上記処理におけるA/D変換のスタート/ストップのタイミングについては、図12の(ハ)、(ニ)に示す。
(6)メインルーチン
次に、メインルーチン(分岐されるルーチンを含む)について説明する。このメインルーチンにおいては、キー・ステートを適宜設定する処理が行われるので、理解のために、まず、キー・ステート設定の概略について説明する。
図15は、キーの軌跡の一例を示す図であり、図においては、時刻t1においてレスト位置にあったキーが時刻t2,t3,t4,t5において、それぞれしきい値K1,K2,K3,K4を通過し、時刻t6においてエンド位置に達している。このような軌跡は、一般的な押鍵の軌跡である。そして、この実施形態における原則的なキー・ステートは、キーがレスト位置からしきい値K1の間にあるときにUPPER、しきい値K1を超えるた場合にTOUCH−A、しきい値K2を超えた場合にCOUNT−DOWN−0、しきい値K3を超えた場合にCOUNT−DOWN−1、しきい値K4を超えた場合にCOUNT−DOWN−2としている。また、発音がなされた場合のキー・ステートは、前述のようにSOUNDとする。
また、時刻t6からt7においてエンド位置にあったキーが離鍵され、時刻t8,t9,t10においてしきい値K4,K3,K2を通過した場合は、しきい値K2を通過するまではキー・ステートはSOUNDを維持し、しきい値K2を通過した後にキーオフされてキー・ステートがHOLDになる。すなわち、離鍵過程にあるキーが、しきい値K2を通過したときは、キー・ステートはHOLDとなる。
また、時刻t10でHOLDとなったキーが、その後、レスト位置に戻ることなく再び押下されてしきい値K2を超えると、キー・ステートはTOUCH−Bとなる。一方、TOUCH−Bとなったキーが、その状態を所定時間以上維持すると、キー・ステートはTIME−OVERとなる。
また、押鍵速度が早い場合には、キー位置のサンプリング間隔において、2以上のしきい値を通過することがあり、この場合のキー・ステートはCOUNT−DOWN−3としている。図16は、このような押鍵があった場合の軌跡を示しており、この軌跡において、前回のサンプリングにおけるキー位置が点P1であり、今回のサンプリングにおけるキー位置が点P2であることが検出されると、COUNT−DOWN−3となる。同様に、前回サンプリング位置がP3で、今回サンプリング位置がP4の場合も、キー・ステートはCOUNT−DOWN−3となる。
以上がこの実施形態におけるキー・ステート設定の概略であるが、実際には前のキー・ステートやその継続時間などによって適宜決定される。上述の説明はあくまで原則的なものである。次に、各処理ルーチンについて説明する。
<a:メインルーチン>
図17は、メインルーチンの処理内容を示すフローチャートであり、電源が投入されると、ステップSP1の初期化およびステップSP2におけるしきい値計算処理が行われる。なお、これらの処理内容については、前述した「しきい値設定動作」の項において説明したので省略する。
次に、ステップSP3に進むと、図10に示すレジスタR5Lに1を加える。ただし、レジスタR5Lの内容が「87」であれば0にする。すなわち、レジスタR5Lは、これから処理を行おうとするキーのキー番号が書き込まれるレジスタであり、0〜87までを循環する必要があるため、ステップSP3において歩進するようにしている。
次に、ステップSP5に進み、レジスタR5Lが示すキーについてのA/D変換された位置データおよびA/D変換時刻をRAM203のテーブルのKEY−POS行(図7参照)およびKEY−TIM行(図9参照)から読み込み、レジスタR3LおよびE5に各々書き込む。この場合、前述したA/D割込み処理によって各テーブルには所定のデータが書き込まれている。そして、ステップSP6に進み、図7に示すKEY−STATE行から当該キーのキー・ステートを読み出し、図10に示すレジスタR3Hに書き込む。
次いで、ステップSP7〜SP12においては、レジスタR3Hに書き込まれたキー・ステートがUPPERか、COUNT−DOWNか(COUNT−DOWN1〜3のいずれかか)、TOUCH−Aか、SOUNDか、HOLDか、あるいはTIME−OVERかが判断され、「YES」であれば、それぞれに対応したステップ(分岐ルーチン)SP13,14,15,16,17あるいはSP18に進む。また、ステップSP7〜12の全てにおいて「NO」と判断された場合は、そのキー・ステートはTOUCH−Bであるので、ステップSP19に進んでTOUCH−Bルーチンに入る。
そして、各分岐ルーチンであるステップSP13〜SP19のいずれかに進んだ後、それらの処理が終了すると、再び、ステップSP3に戻り、レジスタR5L内のキー番号を更新し、次のキーについて上述の処理を行う。このように、各キーについて、順次そのキー・ステートに対応した処理が行われる。次に、各分岐処理について説明する。
<b:UPPERルーチン>
図18はUPPERルーチンの処理内容を示すフローチャートであり、ステップSPc1においては、レジスタR3Lのキー位置データがそのキーのしきい値K1を超えたか否かが判定される。この判定が「NO」の場合は、メインルーチンに戻り、ステップSP3に進んで次のキーについての処理を開始する。これは、当該キーについては、キー・ステートUPPERのまま変化しておらず、特に処理を行う事項がないからである。
一方、ステップSPc1の判定が「YES」の場合は、ステップSPc2に進んで、発音制御テーブルの確保を行う。すなわち、キーが押されたと認識し、発音制御のための準備を開始する。ここで、テーブルの空きがあれば、当該テーブル番号をレジスタR4Lに書き込んでステップSPc3に進むが、空きテーブルがない場合は、メインルーチンに戻る。これは、本実施形態においては、16音まで同時発音可能にしているが、16の発音制御テーブルが全て使用中であれば、それ以上の発音制御は不可能だからである。
次に、ステップSPc3においては、レジスタR3L内のキー位置データが、しきい値K2を超えたか否かが判断される。この判定が「NO」の場合は、キーがしきい値K1だけを超えた場合であり、キー・ステートがUPPERからTOUCH−Aに変化した場合である。そこで、ステップSPc4に進み、図7に示すKEY−STATE行の該当するエリアをUPPERからTOUCH−Aに書き換える。また、ステップSPc4においては、そのキーが割当てられた発音制御テーブルに対応するタイムオーバー検知用のカウンタをクリアするとともに、レジスタR3L内のキー位置データおよびレジスタE5にある時刻データを、図8に示す発音制御テーブルのOVR−K1行およびOVK1−TIM行の当該キー番号のエリアに書き込む。これにより、当該キーについて、しきい値K1を超えたときの位置と時刻が記憶される。
一方、ステップSPc3の判定が「YES」の場合は、サンプリング間隔内において、しきい値K1とK2を一度に超えた場合である(図16のP1,P2参照)。そこで、ステップSPc5に進み、図7に示すKEY−STATE行の該当するエリアをUPPERからCOUNT−DOWN−3に書き換える。また、キー・ステートがCOUNT−DOWN−3の場合は、キーが最高速度で押されたと判断して、ベロシティとしての最高値「7F」をVELOCITY行(図8参照)の該当するエリアに書き込み、さらに、このベロシティを基にダウンカウント値を求め、DWN−CNTR行の該当するエリアに書き込む。この場合、ダウンカウント値は、前述したTB3−2(図11参照)を用いて求められるが、ベロシティはテーブルTB2を用いずに予め設定された最高値を設定する。上述したステップSPc4またはSPc5の処理の後はメインルーチンにリターンし、次のキーについての処理を開始する。
<c:TOUCH−Aルーチン>
図19は、TOUCH−Aルーチンの処理内容を示すフローチャートである。先ず、ステップSPd1においては、time overか否かが判断される。この判断は、タイムオーバー検知用カウンタの値が予め定められた所定値を超えたか否かによって判断される。タイムオーバー検知用カウンタは、図14に示すステップSPa5においてタイマ割込み処理毎に歩進されるので、所定値に達する前にリセットされないとタイムオーバーとなる。そして、ステップSPd1の判定が「YES」の場合には、ステップSPd2に進み、獲得していた発音制御テーブルを解放するとともに、図7に示すKEY−STATE行の該当するエリアをTOUCH−AからHOLDに書き換えてメインルーチンにリターンする。
このように、ステップSPd1→SPd2と移行するときは、TOUCH−Aの状態が所定時間以上継続する場合であり、キーが浅く押された位置で長時間止まっている状態と認識される。このような押鍵操作は、そのキーに指を乗せているだけで、しばらく押鍵されない可能性が高いので、この実施形態においては、上述のように、発音制御テーブルを解放して当該キーの発音準備を解除し、他のキーの発音処理を優先させるようにしている。なお、キー・ステートがHOLDとなった場合でも、その状態からキーを押下すれば、後述する処理によって発音される。
一方、ステップSPd1において「NO」と判定された場合は、ステップSPd3に進み、しきい値K3を超えたか否かが判定され、「NO」であれば、ステップSPd4に進んでしきい値K2を超えたか否かが判定される。この判定が「YES」であれば、キーがしきい値K2を超えた場合であり、キー・ステートがTOUCH−AからCOUNT−DOWN−0に変化した場合である。そこで、ステップSPd5に進み、図7に示すKEY−STATE行の該当するエリアをTOUCH−AからCOUNT−DOWN−0に書き換える。また、ステップSPd5においては、レジスタR3L内のキー位置データおよびレジスタE5にあるA/D変換の時刻データを、図8に示す発音制御テーブルのOVR−K2行およびOVK2−TIM行の当該キー番号のエリアに書き込む。これにより、当該キーについて、しきい値K2を超えたときの位置と時間が記憶される。また、ステップSPd5に至る場合は、図18に示すステップSPc4を経過しているから、しきい値K1を超えたときの位置と時刻がRAM203のテーブルに記憶されている。そこで、ステップSPd5においては、前述した数式に基づいて速度データを算出し、かつ、図11に示すテーブルTB2を用いてベロシティを求める。また、テーブルTB3−2を用いてダウンカウント値を求め、ベロシティとともに発音制御テーブル(図8参照)の所定エリアに書き込む。
一方、ステップSPd3において、「YES」と判定された場合は、サンプリング間隔内において、しきい値K2とK3を一度に超えた場合である(図16のP3,P4参照)。そこで、ステップSPd6に進み、図7に示すKEY−STATE行の該当するエリアをTOUCH−AからCOUNT−DOWN−3に書き換える。また、ベロシティとしての最高値「7F」をVELOCITY行(図8参照)の該当するエリアに書き込み、さらに、このベロシティを基にダウンカウント値を求め、DWN−CNTR行の該当するエリアに書き込む。この処理は、前述したステップSPc5と同様である。
一方、ステップSPd4において「NO」と判断された場合は、ステップSPd7に進み、キーがしきい値K1を超えているか否かが判定される。この判定が「YES」の場合は、キーはいぜんとしてTOUCH−Aの状態を維持している場合であるから、何もせずにメインルーチンに戻る。また、ステップSPd7において「NO」と判定された場合は、ステップSPd8に進み、獲得していた発音制御テーブルを解放するとともに、図7に示すKEY−STATE行の該当するエリアをTOUCH−AからUPPERに書き換えてメインルーチンにリターンする。
このように、ステップSPd8に至るときは、TOUCH−AからUPPERに戻る場合であり、言い換えれば、キーが浅く押された直後に離された場合である。このような押鍵操作では、通常のピアノでは発音されないので、この実施形態においては、上述のように、発音制御テーブルを解放して当該キーの発音準備を解除し、他のキーの発音処理を優先させるようにしている。
<d:COUNT−DOWNルーチン>
次に、COUNT−DOWNルーチンについて図20を参照して説明する。まず、ステップSPe1においては、キー位置(レジスタR3L内のキー位置データ)がしきい値K2を超えているか否かが判定される。この判定が「NO」の場合には、しきい値K2を一旦超えたキーが戻された場合であるので、発音準備を停止すべく、ステップSPe2に移って発音制御テーブルを解放する。そして、ステップSPe3において、キーがしきい値K1を超えているか否かが判定され、「NO」であれば、レスト位置かそれに近い位置まで戻された場合であるから、ステップSPe4に進んでキー・ステートをUPPERとする。すなわち、図7に示すKEY−STATE行の該当するエリアをCOUNT−DOWN(0〜3)からUPPERに書き換える。
また、ステップSPe3において「YES」と判定された場合は、ステップSPe5に進んで、KEY−STATE行の該当するエリアをCOUNT−DOWN(0〜3)からHOLDに書き換える。
一方、ステップSPe1において「YES」と判定された場合には、ステップSPe6に進み、COUNT−DOWN−2,3か否かが判定される。この判定が「YES」の場合には、以下の処理を行わず、そのままリターンする。ステップSPe6の判定が「NO」の場合には、ステップSPe7に進み、レジスタR3L内のキー位置データがしきい値K3を超えたか否かが判断される。この判断が「NO」の場合は、キーはしきい値K2〜K3の間にある場合なので、いぜんとして図19のステップSPd5で設定したキー・ステートCOUNT−DOWN−0のままであると認識されるので、何の処理も行わずリターンする。
一方、ステップSPe7において「YES」と判定された場合は、ステップSPe8に進んでしきい値K4を超えたか否かが判定される。このステップSPe8において「NO」と判定された場合は、ステップSPe12に進み、キー・ステートがCOUNT−DOWN−0か否かが判定される。この判定が「YES」の場合は、キーがしきい値を一つ超えてCOUNT−DOWN−1に移行したと考えられるので、ステップSPe13に移って、キー・ステートをCOUNT−DOWN−1に変更するとともに、しきい値K1、K3を超えたときの位置および時刻に基づいてベロシティおよびダウンカウント値を求める。そして、新たに求めたベロシティが、発音制御テーブルに記憶されているベロシティより大きければ、新たに求めたベロシティおよびダウンカウント値に書き換える。これは、キーの押下が加速されたと認識されるので、それに対応させるためである。
なお、ステップSPe13における演算において、しきい値K1を超えた場合の位置および時刻は、発音制御テーブルから得るが、しきい値K3を超えたときの位置および時刻は、現在位置および時刻であるから、レジスタR3L、E5(図10参照)から読み出す。
また、ステップSPe12において「NO」と判定された場合は、既に設定されたCOUNT−DOWN−1がそのまま維持されていると考えられるので、直ちにリターンする。
一方、ステップSPe8において「YES」と判定された場合は、キー・ステートがCOUNT−DOWN−0か否かが判定される。この判定が「YES」のときは、サンプリング期間の間に、2つのしきい値K3,K4を超えた場合であるから、ステップSPe10に進んでキー・ステートをCOUNT−DOWN−3に更新し、最大ベロシティおよびこれに対応するカウントダウン値を発音制御テーブルに書き込む。
また、ステップSPe9において「NO」と判定された場合には、ステップSPe11に進み、キー・ステートをCOUNT−DOWN−2に更新するとともに、しきい値K2、K4を超えたときの位置および時刻に基づいてベロシティおよびダウンカウント値を求める。そして、新たに求めたベロシティが、発音制御テーブルに記憶されているベロシティより大きければ、新たに求めたベロシティおよびダウンカウント値に書き換える。これは、キーの押下が加速されたと認識されるので、それに対応させるためである。
なお、ステップSPe13の場合と同様に、しきい値K2を超えた場合の位置および時刻は、発音制御テーブルから得るが、しきい値K4を超えたときの位置および時刻は、現在位置および時刻であるから、レジスタR3L、E5(図10参照)から読み出す。
ところで、スタッカートのように押鍵後直ちに離鍵されるような演奏の場合に、ステップSPe2に至る可能性があり、発音されないこともある。しかしこのようなケースは希であると考えられるため、本実施形態では他のキーの発音処理を優先させている。しかしながら、このようなケースにおいても発音を有効とさせた方がよい場合には、ダウンカウント値が書き込まれている発音制御テーブルについては解放しないように制御してもよい。
<e:SOUNDルーチン>
次に、図21を参照してSOUNDルーチンについて説明する。このサウンドルーチンが実行されるのは、前述した各処理において設定されたダウンカウント値が、図14に示すタイマ割込みのステップSPa3の処理で減算され、その値が0となって発音処理が開始されてキー・ステートがSOUNDとなった後である。
さて、図21に示すステップSPf1においては、キーがしきい値K2を超えているか否かが判定される。この判定が「NO」の場合は、ステップSPf2に進み、音源回路210に対してキーオフ信号KOF(MIDI OFF)を出力する。この結果、音源回路210は、当該キーについての発音を急速ダンプさせて消音する。そして、ステップSPf3に進み、キー位置がしきい値K1を越えているか否かを判定する。この判定が「NO」の場合は、ステップSPf4に進んで、キー・ステートをUPPERにしてリターンし、また、「YES」の場合はキー・ステートをHOLDにしてリターンする。
一方、ステップSPf1の判定が「YES」の場合には、ステップSPf6に進んで、リリース・ルーチンの処理を行う。ここで、図22はリリース・ルーチンの処理を示すフローチャートである。始めに、ステップSPg1において、キー・ステートがSOUND 0か否かが判定される。ところで、キー・ステートSOUNDは、SOUND 0とSOUND 1の2つのステートがある。前述した図14のステップSPa3で設定されるキー・ステートは、実際にはSOUND 0である。したがって、発音が開始されたときのキー・ステートはSOUND 0になっている。このため、リリースルーチンに移行した際のステップSPg1の判定は、当初は「YES」になり、ステップSPg4に進む。ステップSPg4においては、キーがしきい値2Aを超えているか否かが判定され、「YES」であれば未だ深い押鍵位置にあるので、なにもせずにリターンする。一方、ステップSPg4の判定が「NO」の場合には、押鍵位置がしきい値K2Aより浅くなっているので、SPg5に進み、キー・ステートをSOUND 1に変更するとともに、リリースレートRLをダンピングが大きい値(A×××01(MIDI信号の一例))に書き換える。この結果、音源回路210においては、当該キーの発音のリリースエンベロープにおける減衰レートが大きくなり、その音は自然減衰より若干早く減衰する。
一方、ステップSPg1の判定が「NO」の場合(キー・ステートとしてSOUND 1が設定されている場合)には、ステップSPg2に進み、キー位置がしきい値K2Aを超えているか否かが判定される。この判定が「NO」の場合には、押鍵位置が浅くSOUND 1のままであると認識されるので、そのままリターンする。また、ステップSPg2の判定が「YES」の場合は、押鍵位置が深くなっている場合であり、ステップSPg3に進み、キー・ステートをSOUND 0に変更し、リリースレートをダンピングが小さい値(A×××00(MIDI信号の一例))にする。この結果、当該キーの発音のリリースエンベロープにおける減衰レートが小さくなり、その音は自然減衰と同様の速度で減衰する。
したがって、押鍵の深さが変化すると、リリースルーチンによってリリースレートが切り替わり、微妙なリリース制御が行われる。アコースティックピアノにおいては、ダンパが弦を押さえることによって消音が行われるが、演奏の仕方によってはダンパと弦とが触れたり離れたりし、また、その触れ方も一様ではない。従って、上述のようにキーの位置によってリリースレートを制御すると、実際のピアノのダンパ動作による音の消え入り方を模倣することができる。
<f:HOLDルーチン>
次に、HOLDルーチンについて図24を参照して説明する。始めに、ステップSPi1において、キー位置がしきい値K2を超えているか否かが判定され、「NO」であれば、ステップSPi2に移ってキー位置がしきい値K1を超えているか否を判定する。このステップSPi2の判定が「YES」の場合は何もせずにリターンする。これは、キー・ステートHOLDは、一旦しきい値K2より深く押鍵されたキーが、再びK2より浅い位置(ただし、しきい値K1よりは深い位置)まで戻されたとき、あるいはしきい値K2以下でK1を超える領域に所定時間以上止まっていた場合に設定されるステートであるから、SPi2で「YES」となるときは状態の変化は生じていないと判断されるからである。また、ステップSPi2で「NO」と判定された場合は、キー位置がレスト位置に近く、極めて浅くなった場合であるから、キー・ステートをUPPERに変更してリターンする(ステップSPi3)。
一方、ステップSPi1において「YES」と判定された場合、すなわち、キーが再びしきい値K2より深く押下された場合は、ステップSPi4に進み、発音制御テーブルを確保して発音の準備に入る。ただし、空きテーブルがない場合はリターンする。
次に、ステップSPi5に進むと、キー位置がしきい値K3を超えたか否かが判定され、「YES」であれば、サンプリング期間に2つのしきい値K2,K3を超えた場合であるので、キー・ステートをCOUNT−DOWN−3にするとともに、最大値のベロシティおよびこれに応じたダウンカウント値を設定してリターンする(ステップSPi6)。また、ステップSPi5の判定が「NO」の場合は、ステップSPi7に進み、キー・ステートをTOUCH−Bとするとともに、タイムオーバー検知用カウンタをクリアする。また、ステップSPi7においては、レジスタR3L内のキー位置データおよびレジスタE5にある時刻データを、図8に示す発音制御テーブルのOVR−K2行およびOVK2−TIM行の当該キー番号のエリアに書き込む。これにより、当該キーについて、しきい値K2を超えたときの位置と時刻が記憶される。
<g:TOUCH−Bルーチン>
次に、TOUCH−Bルーチンについて図25を参照して説明する。まず、ステップSPj1においては、time overか否か、すなわち、タイムオーバー検知用カウンタが所定値を超えたか否かが判定される。この判定が「YES」の場合には、発音テーブルを解放して他のキーの発音を優先させ、また、キーステートをTIME−OVERに書き換える(ステップSPj2)。
一方、ステップSPj1の判定が「NO」の場合は、ステップSPj3に進んで、キー位置がしきい値K4を超えているか否かが判定される。この判定が「YES」の場合は、サンプリング期間に2つのしきい値K3,K4を超えた場合だから、キー・ステートをCOUNT−DOWN−3にするとともに、最大値のベロシティおよびこれに応じたダウンカウント値を設定してリターンする(ステップSPj4)。
また、ステップSPj3で「NO」と判定された場合は、ステップSPj5に進み、キー位置がしきい値K3を超えているか否かが判定される。この判定が「YES」の場合は、ステップSPj6に進み、キー・ステートをCOUNT−DOWN−1に更新するとともに、しきい値K2、K3を超えたときの位置および時刻に基づいてベロシティおよびダウンカウント値を求める。そして、発音制御テーブルに、新たに求めたベロシティおよびダウンカウント値を書き込む。なお、ステップSPe13の場合と同様に、しきい値K2を超えた場合の位置および時刻は、発音制御テーブルから得るが、しきい値K3を超えたときの位置および時刻は、現在位置および時刻であるから、レジスタR3L、E5(図10参照)から読み出す。
一方、ステップSPj7において「NO」と判定された場合は、ステップSPj8に進み、発音制御テーブルを解放して他のキーの発音を優先させ、次いで、ステップSPj9においてキー位置がしきい値K1を超えているか否かを判定する。この判定は「YES」の場合はキー・ステートをHOLDに、「NO」の場合はキー・ステートをUPPERにする。
<h:TIME−OVERルーチン>
次に、TIME−OVERルーチンについて図23を参照して説明する。まず、ステップSPh1において、キー位置がしきい値K2を超えたか否かが判定され、「YES」であればそのままリターンする。すなわち、キー・ステートがTIME−OVERになった後は、その状態からキーを押し下げてもキー・ステートは変わらない。したがって、仮に、キーをエンド位置まで押下しても発音はされない。これは、実際のピアノでもしきい値K2とK3の間でキーがある時間以上停止した場合、その後キーを押し下げても発音がされないので、これに対応させるためである。
一方、しきい値K2よりもキー位置を浅くすると、ステップSPh1の判定が「NO」となり、ステップSPh2の判定を介して、キー・ステートHOLDかキー・ステートUPPERのいずれかが設定されるので(ステップSPh3,SPh4)、それ以後の押鍵操作によって再発音が可能になる。
以上のように、各ルーチンにおいてキー・ステートが適宜設定され、また、書き換えられる。そして、各キー・ステートに応じた発音制御が行われる。ここで、参考のために、図26にキー・ステートの遷移状態を示す。
(7)動作例
次に、上述した各処理ルーチンの動作の関連をより明確にするために、図15、図16に示すキー軌道が発生した場合を例にとって説明する。始めに、図15の時刻t1において押鍵が開始される。初期状態におけるキー・ステートはUPPERが設定されるので、押鍵開始直後は図18に示すUPPERルーチンにより処理が行われる。そして、キーがしきい値K1を超えるまでは、ステップSPc1からすぐにリターンするので、キー・ステートは変化しない。次に、キーがしきい値K1を超えると、ステップSPc2,3,4の処理が行われ、発音制御テーブルが獲得されて、発音の準備が開始される。また、キー・ステートはTOUCH−Aとなる。
したがって、以後は図19に示すTOUCH−Aルーチンに処理が移行される。そして、図15の時刻t3においてしきい値K2を通過した後は、図19のステップSPd1,3,4,5の処理が行われ、カウントダウン値の計算などが行われる。また、キー・ステートはCOUNT−DOWNとなり、以後の処理は図20に示すCOUNT−DOWNルーチンに移行する。そして、時刻t4においてしきい値K3を通過した後は、ステップSPe7,8,12,13の処理が行われ、カウントダウン値の計算等が行われるとともに、キー・ステートがCOUNT−DOWN−1となる。さらに、時刻t5においてしきい値K4を通過した後は、図20のステップSPe8,9,11の処理が行われ、カウントダウン値の計算等が行われるとともに、キー・ステートがCOUNT−DOWN−2に設定される。この場合、ベロシティはキーが新たなしきい値を通過するたびに再計算されるが、再計算によるベロシティが大きい場合のみ更新されるから、最終的には一番大きいベロシティが選択されることになる。そして、そのベロシティに対応するダウンカウント値がダウンカウント値出力テーブルTB3−1〜TB3−4のいずれかから求められる。このようにして求められたカウントダウン値は、タイマ割込みのステップSPa3(図14参照)において減算され、その減算値が0となった時点(時刻t6)において発音が開始されてキー・ステートがSOUNDモードになる。
次に、時刻t7から離鍵が開始され、キー位置がしきい値K2より浅くなると(時刻t10)、キーオフ信号KOFが出力されて発音が停止され、キー・ステートはHOLDになる(図21のステップSPf1,2,3,5)。そして、再びキーが押下され始め、時刻t11においてしきい値K2を超えた後は、図24に示すステップSPi1,4,5,7の処理によって発音制御テーブルが獲得され、かつ、キー・ステートがTOUCH−Bになる。次に、キー位置が更に深くなると、前述の場合と同様にキー・ステートがCOUNT−DOWNとなり、カウントダウン値が0になった時点(時刻t14)において発音が行われる。そして、離鍵が行われ、時刻t17以後にHOLD、時刻t18以後にTOUCH−Bのキー・ステートが設定される。次に、TOUCH−Bの状態が所定時間以上経過すると、図25に示すステップSPj1,2の処理によってキー・ステートがTIME−OVERとなる。この後、図15に示すように、キー位置が深くなってもキーステートはTIME−OVERのまま変化せず、カウントダウン値が設定されることはないため、発音は行われない。そして、図15の時刻t21、t22において、キー位置が各々しきい値K2およびK1より浅くなると、キー・ステートは各々HOLD、UPPERとなる。
ところで、図15の点P10において、キー位置が維持され、そのまま所定時間が経過すると点P11においてtime overとなり、キー・ステートはHOLDとなる(ステップSPd1,2)。また、点P10からキー位置が浅くなり、例えば、点P12の位置に達すると、キー・ステートはUPPERになる(ステップSPd7,8)。
一方、TOUCH−Bにある点P20から離鍵が行われ、例えば、点21の位置に達すると、キー・ステートはHOLDになる(ステップSPj9,10)。次に、図16に示す点P1,P2の場合は、サンプリング期間に2つのしきい値を通過した場合であるから、図18に示すUPPERルーチンのステップSPc1,2,3,5が行われ、COOUNT−DOWN−3となり、最高ベロシティの発音が行われる。また、点P3,P4の場合も同様である(ステップSPi1,4,5,6)。
ところで、図6に示すように、発音が開始されてキー・ステートがSOUNDとなった後の離鍵操作において、しきい値K2Aを上下するようにキー位置が変化すると、図22のリリースルーチンにより、リリースレートが切り替わり、音の消え入り方を微妙に制御することができる。
<C:実施形態効果>
(1)しきい値の設定をソフトウエア処理によって自由に行うことができる。
(2)しきい値K1までに至らない浅いキー位置、しきい値の間のキー位置、あるいはしきい値K4を超えた深いキー位置についても、正確な位置情報が得られるので、種々の奏法に対応できる楽音制御を行うことができる。例えば、しきい値K1まで達しない浅い打弦の発音制御や、音の消え入り方を微妙に制御することが可能である。
(3)しきい値をソフトウエア処理によって自由に設定できるので、フォトセンサの取付精度が要求されない。
(4)上記実施形態においては、例えば、TOUCH−A、COUNT−DOWN−0、TOUCH−B、HOLDなどのキー・ステートを決定する際に、前のキー・ステートとキーの位置(どのしきい値の間にいるか)によって決定しているので、適切な状態把握を行うことができる。さらに、TIME−OVERやHOLDを決定する際においては、前のキー・ステート、キーの位置、および前のキー・ステートの継続時間も考慮して決定しているので、実際のピアノに即した状態把握を行うことができる。
しかも、以上のようにして設定したキー・ステート(状態)に基づいて楽音が制御されるから、ピアノ等の自然楽器の発音を正確に模倣することができるとともに、きめ細かな楽音制御を行うことができる。
また、ピアノにおいては、離鍵するとダンパーが弦を押さえて消音するが、この際、キーの操作によっては、ダンパーと弦とが触れたり離れたりし、また、その触れ方も一様ではない。したがって、楽音の減衰レートは一定ではない。一方、上述した従来装置においては、楽音のリリース時の減衰レートは一定であり、キー操作が反映されないという欠点があった。これに対して本実施形態では、しきい値をキーオフ近傍の領域に複数設定し、離鍵時にキーがどのしきい値の間にいるかによってリリースレートを制御するようにしているので、例えば、ピアノのダンパー操作を模倣して、より自然な発音制御を行うことができる。
<D:変形例>
(1)上述した実施形態は、ピアノ音を電子的に発生する例であったが、ピアノ音以外の楽音を合成するようにしてもよい。この場合には、エンベロープ制御は、楽音に応じたエンベロープを予め設定して置けばよく、リリース時のエンベロープ制御は実施形態と同様に行えばよい。
また、実施形態におけるリリースルーチンのエンベロープ制御は、リリース時の制御に限らず、その他の部分(例えば、サステイン部)のエンベロープ制御に用いることもできる。
(2)上述した実施形態は、消音機構付きの自動ピアノにおける例であったが、本発明は打弦機構を持たない、電子楽器にも適用することができる。
(3)フォトセンサの出力信号を自動演奏時のキー位置フィードバック信号として用いることもできる。
(4)また、TOUCH−Aではしきい値K1〜K2間、COUNT−DOWN−0ではしきい値K1〜K3間、COUNT−DOWN−1ではしきい値K2〜K4間で速度を算出するようにしたが、どのような間隔を選んでも良く、例えば、COUNT−DOWN−0においてしきい値K2〜K3間で速度を算出してもよい。
(5)リリース時のエンベロープ制御をより繊細に行うために、図27に示すように、しきい値K2とK3の間をより細かく区切っても良い。そして、同図に示すように、上方の区間に行くほどダンピングが大きくなるようにリリースレートを設定する。このようにすると、例えば、同図に示すような鍵の軌跡の場合は、点P50〜P51、P52〜P53の間は自然消音するが、鍵が上方に行くに従いダンピング係数が強くなって次第に早く減衰するようになり、より自然な楽音とすることができる。図28は、この時のエンベロープの様子を示している。
また、しきい値K2とK3の間をより細かく区切る場合であっても、キーセンサ等を追加することなく、しきい値K2A〜K2Cをソフトウエア処理で設定すればよい。したがって、ハードウエアの変更が不要であり、コストアップにならない。さらに、使用状況や演奏者の技量に応じて、しきい値K2とK3の間の区間数を切り換えるようにしてもよい。
(6)また、上述した実施形態においては、キーが新たなしきい値を通過する毎にベロシティを再計算し、再計算によるベロシティと既に得られているベロシティとを比較することにより、ベロシティおよびダウンカウント値を更新するようにしているが、既に得られているダウンカウント値の現在値と再計算によるベロシティに対応したダウンカウント値とを比較するようにすれば、より精度が向上する。ただし、本出願人の実験によれば、両者の比較結果は、ほぼ完全に一致するので、上述した実施形態においては、処理の簡単化のために、前者を採用している。
この発明による一実施形態の構成を示すブロック図である。 同実施形態のキーの構成を示す側面図である。 同実施形態におけるキーのシャッタ付近の構成を示す斜視図である。 図3に示すフォトダイオード225の出力特性を示す特性図である。 同実施形態におけるハンマーアクションを示す側面図である。 同実施形態におけるしきい値を示す図である。 同実施形態においてRAM203内に設けられているテーブルを示す概念図である。 同実施形態における発音制御テーブルを示す概念図である。 同実施形態におけるサンプリング時刻を記憶するためのテーブルを示す概念図である。 同実施形態におけるレジスタを示す概念図である。 同実施形態におけるベロシティおよびダウンカウント値を求めるためのテーブルを示す図である。 同実施形態における各処理のタイミング関係を示す図である。 同実施形態におけるA/D割込み処理を示すフローチャートである。 同実施形態におけるタイマ割込み処理を示すフローチャートである。 同実施形態におけるキー軌道の一例と、これに対するキー・ステートの関係を示す図である。 同実施形態におけるキー軌道の一例と、これに対するキー・ステートの関係を示す図である。 同実施形態のメインルーチンを示すフローチャートである。 同実施形態のUPPERルーチンを示すフローチャートである。 同実施形態のTOUCH−Aルーチンを示すフローチャートである。 同実施形態のCOUNT−DOWNルーチンを示すフローチャートである。 同実施形態のSOUNDルーチンを示すフローチャートである。 同実施形態のリリースルーチンを示すフローチャートである。 同実施形態のTIME−OVERルーチンを示すフローチャートである。 同実施形態のHOLDルーチンを示すフローチャートである。 同実施形態のTOUCH−Bルーチンを示すフローチャートである。 同実施形態におけるキー・ステートの遷移状態を示す図である。 しきい値K2,K3間をより細かく区切る際のしきい値の例を示す図である。 図27に示すしきい値を用いた際の楽音制御の一例を示す図である。 従来のキーセンサの一例を示す側面図である。
符号の説明
201……CPU(比較結果認識手段、状態決定手段、制御手段)、202……ROM、203……RAM(状態決定手段)、210……音源回路、220……LEDドライバ(位置検出手段)、221……発光側センサヘッド(位置検出手段)、222……受光側センサヘッド(位置検出手段)、223……A/D変換器(位置検出手段)、224……LED(位置検出手段)、225……フォトダイオード(位置検出手段)。

Claims (2)

  1. 演奏操作子の位置を連続的に検出する位置検出手段と、
    前記位置検出手段の検出位置と複数のしきい値とを比較し、この比較結果を認識する比較結果認識手段と、
    前記演奏操作子が所定の状態のいずれにあるかを決定する際に、前の状態と前記比較結果認識手段の認識内容とに応じて決定する状態決定手段と、
    前記状態決定手段が決定した状態に基づいて楽音の制御を行う制御手段と
    を具備し、
    前記状態決定手段は、前記演奏操作子が所定の状態のいずれにあるかを決定する際に、前の状態、前記比較結果認識手段の認識内容、および前の状態の継続時間に応じて決定する
    ことを特徴とする楽音制御装置。
  2. 楽音を発音する音源手段をさらに具備し、
    前記制御手段は、発音制御情報に基づいて前記音源手段による楽音の発音を制御し、
    前記制御手段は、前記状態決定手段によって前の状態とは異なる状態に決定されたとき、新たな発音制御情報を求め、求めた新たな発音制御情報が更新条件を満たした場合には、既に設定されている発音制御情報を前記新たな発音制御情報に更新し、更新後の前記新たな発音制御情報に基づいて前記音源手段による楽音の発音を制御することを特徴とする
    請求項1記載の楽音制御装置。
JP2004083544A 1995-06-09 2004-03-22 楽音制御装置 Expired - Lifetime JP3767608B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004083544A JP3767608B2 (ja) 1995-06-09 2004-03-22 楽音制御装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP14375295 1995-06-09
JP2004083544A JP3767608B2 (ja) 1995-06-09 2004-03-22 楽音制御装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP27032295A Division JP3552366B2 (ja) 1995-06-09 1995-10-18 楽音制御装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2004125897A Division JP3821137B2 (ja) 1995-06-09 2004-04-21 楽音制御装置、消音機能付ピアノ、および、自動演奏ピアノ

Publications (2)

Publication Number Publication Date
JP2004220044A JP2004220044A (ja) 2004-08-05
JP3767608B2 true JP3767608B2 (ja) 2006-04-19

Family

ID=32910583

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004083544A Expired - Lifetime JP3767608B2 (ja) 1995-06-09 2004-03-22 楽音制御装置

Country Status (1)

Country Link
JP (1) JP3767608B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4395433B2 (ja) 2004-11-18 2010-01-06 太陽誘電株式会社 光情報記録装置および方法および信号処理回路

Also Published As

Publication number Publication date
JP2004220044A (ja) 2004-08-05

Similar Documents

Publication Publication Date Title
JP3887968B2 (ja) 鍵盤楽器および鍵速度判定装置
JP3552366B2 (ja) 楽音制御装置
JP3900712B2 (ja) 鍵盤楽器のセンサ較正装置及びセンサ較正方法
JP3890649B2 (ja) 自動ピアノの演奏データ変換装置
JP5162938B2 (ja) 楽音発生装置及び鍵盤楽器
WO2018168953A1 (ja) 信号供給装置、鍵盤装置およびプログラム
JP3567527B2 (ja) 鍵盤楽器
JPH0659667A (ja) 鍵盤楽器
US8106287B2 (en) Tone control apparatus and method using virtual damper position
JPH09134172A (ja) 自動ピアノ
US7238875B2 (en) Electronic musical instrument
US8859878B2 (en) Method and device for identifying half point of pedal on keyboard musical instrument
JP3767608B2 (ja) 楽音制御装置
JP3821137B2 (ja) 楽音制御装置、消音機能付ピアノ、および、自動演奏ピアノ
JP3767609B2 (ja) 楽音制御装置
US20140305286A1 (en) Keyboard musical instrument, and method for reproducing half performance of pedal or key damper on keyboard musical instrument
JP3407355B2 (ja) 鍵盤楽器
JP3279307B2 (ja) 鍵盤楽器
JP2001005458A (ja) 鍵盤楽器
US9384720B2 (en) Keyboard musical instrument, and method for recording half performance of pedal or key damper on keyboard musical instrument
JP4110691B2 (ja) 鍵盤楽器のセンサデータ変換装置及びセンサデータ変換方法
JP2891248B2 (ja) 電子鍵盤楽器
JP4135275B2 (ja) 速度検出装置及び速度検出方法
JP5657868B2 (ja) 楽音制御方法及び楽音制御装置
JP4419808B2 (ja) 電子打楽器

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040421

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20051219

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060123

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313532

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

Free format text: PAYMENT UNTIL: 20090210

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20100210

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20110210

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120210

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20130210

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20140210

Year of fee payment: 8

EXPY Cancellation because of completion of term