まず、この実施例に係る鍵盤楽器の機械的構成例について図1を参照して説明する。図1に示すように、鍵盤楽器(ピアノ)100には、棚板110が具備されており、棚板110の上面には、図1の紙面垂直方向に延在するよう筬中120が配置される。筬中120上面には複数のバランスピン125が立設されており、88個の鍵130の各々は、各バランスピン125に対して貫通された状態で、筬中120上面に並設される。これらの各鍵130には、各々が担当する音高を示す「21」〜「108」までのノート番号が割り当てられている。また、各鍵130は、バランスピン125に貫通された位置を、凡その支点として揺動可能に保持されており、演奏者(操作者)によって鍵130の一端(前方近傍)が押下されることで、揺動する。演奏者は鍵130を押下げることによって演奏操作(押鍵)を行う。各鍵130の後方近傍には、対応する鍵130の揺動に応じて駆動されるアクション機構140が夫々設けられている。各アクション機構140は、対応する鍵の運動をハンマによる打弦運動に変換する装置であって、対応する鍵130に応じて「21」〜「108」までのノート番号が割り当てられた88個のハンマ142を含む。各ハンマ142は、演奏者による対応する鍵の押鍵操作に連動して、対応する弦170を打撃する。ハンマ142によって弦170が打撃されると、弦振動が生じ、その振動が、駒(図示しない)を介して響板(図示しない)に伝達することで、楽音が発生する。
図2は、鍵130及びその周辺機構を抽出して示す側面図であり、図3は、ハンマ142及びその周辺機構を抽出して示す側面図である。図2に示すように、鍵130は、非押鍵時(外力を加えない状態)では、図において実線で示すようなレスト位置に位置される。鍵130は、演奏者による押鍵操作によって一端(前方近傍)を押下げられることで、バランスピン125を凡その動作支点として揺動し、該レスト位置から鍵の揺動ストロークのエンド位置まで変位しうる。図2中の2点鎖線位置は、前記エンド位置まで押下げられた鍵130が占めるストローク位置を示す。当該実施例において、鍵130はレスト位置を基準にして約10mmのストローク幅で変位されるものとする。押鍵操作が解除されると、鍵130はレスト位置へ復帰する。なお、鍵130の前記ストロークの長さ(約10mm)は、鍵の先端位置を基準に規定されたものとする。
図3において、ハンマ142は、ハンマウッド141を介してハンマシャンク143に保持されている。ハンマシャンク143は、ハンマフレンジ146においてピン144を支点として回動可能に取り付けされる。ハンマ142を保持するハンマシャンク143は、鍵130が非押鍵(外力を加えない状態)のときには、図において実線で示すようなレスト位置に位置される。演奏者による押鍵操作が行われると、これに連動して、ピン144を中心に反時計方向に回転し、ハンマ142は対応する弦170を打撃する。図3において2点鎖線位置は、ハンマ142が打撃すべき弦170に当接する位置を示し、この位置をハンマ142のストロークのエンド位置とする。当該実施例において、ハンマ142はレスト位置を基準にして約48mmのストローク幅で変位されるものとする。なおハンマ142のストロークの長さ(約48mm)も、その先端位置を基準に規定されたものとする。
周知の通り、鍵130の運動(揺動)は、アクション機構140に含まれるジャック等、複数の移動部材を介して、ハンマ142に伝達される。すなわち、まず、演奏者の演奏操作によって鍵130が運動し、その運動がジャック等のアクション機構140に含まれる複数の移動部材を変位せしめ、それに連動してハンマ142が対応する弦170を打撃すべく変位する。本発明によれば、上記のように発音動作に連動する複数種の移動部材(鍵130、ハンマ142、あるいは、ダンパ、ジャック等その他の部材)について、各々のストローク位置を、位置情報として定義された共通のメッセージ形式で表現できることが後述の説明から明らかになるだろう。また、鍵130及びハンマ142は、実際には、機械的なズレや撓み、部材のへたばり等が要因となって、レスト位置及びエンド位置として規定した位置を超えて若干余分にストローク変位しうる。当該実施例では、そのようなレスト位置及びエンド位置を超えたストローク位置も位置情報として表現できることが後述される。
当該鍵盤楽器100において、複数の鍵130に夫々対応して、当該鍵のストローク位置を検出するためのキーセンサ310が具備されており、また、複数のハンマ142に夫々対応して、当該ハンマのストローク位置を検出するためのハンマセンサ410が具備されている。キーセンサ310及びハンマセンサ410は、一例として、受光素子と発光素子を含む光学式のセンサで構成される。光学式のセンサは、周知のように、発光素子が被検出部材に向けて光を照射し、受光素子にて該被検出部材からの反射光を受光し、その受光量に応じてセンサから該被検出部材までの距離を検出出力として得るものである。
図2に示すように、鍵130の上方にはキーセンサ310を支持するための支持部材300が設けられている。各鍵130の上面には被検出部材135が配置されており、キーセンサ310は支持部材300上において該被検出部材135に対向する位置に配置される。押鍵に伴う鍵130の揺動ストロークに応じて、キーセンサ310と被検出部材135の相互距離が変化するので、キーセンサ310は、前記距離を検出することによって、鍵130のストローク位置を連続的に検出することができる。なお、キーセンサ310は、受光素子の受光量に応じて被検出部材135までの距離を、例えば0.001mm単位で検出できるものとする。
図3に示すように、ハンマシャンク143の上方には、ハンマセンサ410を支持するための支持部材400が設けられている。各ハンマシャンク143の上面には被検出部材145が配置されており、ハンマセンサ410は支持部材400上において該被検出部材145に対向する位置に配置される。ハンマ142のストローク変位(ハンマシャンク143の回転変位)に応じて、ハンマセンサ410と被検出部材145の相互距離が変化するので、ハンマセンサ410は、前記距離を検出することによって、ハンマ142のストローク位置を連続的に検出することができる。なお、ハンマセンサ410も、キーセンサと同様に受光素子の受光量に応じて被検出部材135までの距離を、例えば0.001mm単位で検出できるものとする。
なお、上記では鍵130とハンマ142に夫々センサを具備するものとしたが、これらに限らず、例えばダンパ等、その他の発音動作に連動する何れの移動部材においてもセンサを具備し、位置検出できるよう構成しうる。
図4は、当該鍵盤楽器100の電気的ハードウェア構成を示すブロック図である。当該図において、鍵盤楽器100は、CPU200、RAM210、ROM220、操作部230、タイマ240、記憶装置260及びA/D変換器250a、250bを含み、各装置間がバスBを介して接続される。A/D変換器250aには、複数(88鍵)の鍵に夫々対応して設けられたキーセンサ310が接続され、A/D変換器250bには、複数のハンマに夫々対応して設けられたハンマセンサ410が接続される。
CPU200は、ROM220或いはRAM210等メモリ内の各種プログラムを実行して全体的な動作を制御する。この各種プログラムとして、この発明に係る演奏情報生成処理及び演奏情報記録処理を実行するためのプログラムが含まれる。操作部230は、各種入力操作を行うためのスイッチ群等で構成され、操作者は演奏情報生成処理及び演奏情報記録処理の開始や終了の指示を行うことができる。タイマ240は各種時間を計時する。
各キーセンサ310は、対応する各鍵130の位置を検出し、該検出した各鍵130の位置を示すアナログ信号をA/D変換器250aに出力する。A/D変換器250aは、各キーセンサ310から入力されるアナログ信号をディジタル信号に変換して、各鍵130の位置を示すディジタル信号をCPU200に対して供給する。ここでは、センサ310から出力されアナログ信号が十分な分解能を持つビット長(例えば12ビット)のバイナリ信号に変換されるものとする。また、各ハンマセンサ410は、対応する各ハンマ142の位置を検出し、該検出した各ハンマ142の位置を示すアナログ信号をA/D変換器250bに入力する。A/D変換器250bは、各ハンマセンサ410から供給されたアナログ信号をディジタル信号に変換して、CPU200に対して各ハンマ142の位置を示すディジタル信号を供給する。ここでは、センサ410から出力されアナログ信号が十分な分解能を持つビット長(例えば12ビット)のバイナリ信号に変換されるものとする。
CPU200は、A/D変換器250aあるいは250bから供給されるディジタル信号に基づく鍵あるいはハンマの位置情報を生成し、これとタイマ240が計時する時間情報とを用いて、各鍵130及び各ハンマ142の位置が時系列的に規定された演奏情報を生成する。位置情報は、演奏者の発音動作に連動して発生された各鍵130あるいは各ハンマ142の連続的な運動の軌道(ストローク変位)を、MIDI規格に従うメッセージとして表現するものである。
記憶装置260は、上記生成した演奏情報を記憶するものであり、例えばハードディスク装置等の書き換え可能な適宜の記憶手段で構成して差し支えない。また、記憶装置260として、フロッピーディスク(登録商標)又はフレキシブルディスク(登録商標)、コンパクトディスク(CD‐ROM、CD‐RAM)、光磁気ディスク(MO)、ZIPディスク、DVD(Digital Versatile Disk)、半導体メモリ等、適宜の形態の着脱可能な外部記憶媒体を利用してもよい。
記憶装置260において生成した演奏情報を記録するためのサンプリング周期は、記憶装置260側で任意に選択できるものとしてよい。なお、本実施例においては、前記演奏情報の生成・記録のためのサンプリング周期は任意の値で固定されるものとする。また、記憶装置260において、全ての鍵130及び/又はハンマ142についての該演奏情報を記録するのみならず、ユーザが該演奏情報のうち記録すべきノート番号を任意に選択できるようにし、該選択されたノート番号に対応する鍵及び/又はハンマについてのみ記録できるようにしてもよい。
記憶装置260において記録される演奏情報は、例えばSMF(スタンダードMIDIファイル)形式のフォーマットに従って記録されたシーケンシャルなデータである。この発明に係る鍵やハンマ等の移動部材の位置情報を、MIDIメッセージとして生成、記録することは、例えば、データの通信や編集等において有利である。演奏情報は、例えば楽曲別の曲データファイルとして、該記憶装置260に記憶されるもので、当該楽曲の演奏データ群(ノートオン・ノートオフ情報、ピッチ情報やベロシティ情報などのイベントメッセージ群)として、この実施例に係る位置情報を表すイベントメッセージが含まれる。図5において、この実施例に係る位置情報を表すイベントメッセージのフォーマット例を示す。
図5(a)に示すように、当該位置情報を表すMIDIメッセージは、位置情報の基本となる「位置データ」と、前記基本となる位置データに対して更に詳細な情報を付加する「拡張データ」との2種のバイトメッセージから構成されるものであり、両者を組み合わせて1つの位置情報の表現となる。すなわち、「位置データ」は、或るサンプル時刻におけるレスト位置からエンド位置の範囲での鍵若しくはハンマのストローク位置を相対的に粗い精度で大まかに特定し、これに対応する「拡張データ」は、同サンプル時刻における鍵若しくはハンマのストローク位置を、前記「位置データ」によって大まかに特定されたストローク位置をより細分化した値、つまり、より細かい精度(分解能)で表現する。
この実施例に係る位置情報によれば、「位置データ」には、複数種の移動部材(この例では鍵並びにハンマ)の種類に対して夫々異なる数値範囲が割り当てられている。すなわち、該数値範囲に応じて、当該位置データが鍵の位置を表現しているのか、ハンマの位置を表現しているのかが区別できる。これにより、鍵の位置情報とハンマの位置情報を共通のメッセージ形式で表現することが実現される。この点については後段において詳細に述べる。
「位置データ」は、8ビットデータを1バイト単位とするデータ要素から構成され、3バイトの組み合わせが1つのバイトメッセージを構成している。第1バイトにおいて、上位4ビットは、当該データが表現するメッセージ種類を特定する識別子となるコード「1010」からなる。図示の便宜上「nnnn」で示された下位4ビットは、MIDIチャンネル番号を特定するコード情報からなる。なお、当該第1バイトの先頭ビットが「1」であることは、当該バイトがステータスバイトであることを示す。
位置データの第2バイトは、ノート番号を特定するためのノート番号指定部となる「0kkkkkkk」が格納されている。具体的には、当該第2バイトの先頭ビットが「0」であることは、当該バイトがデータバイトであることを表現し、図示の便宜上「kkkkkkk」で示した下位7ビットは、各鍵130あるいは各ハンマ142に割り当てられた「21」〜「108」までのノート番号を示すコード「0010101(10進表記における「21」)」から「1101100(10進表記における「108」)」までの何れかの値からなる。ここで示されるノート番号によって、当該位置データがノート番号「21」〜「108」のうちのいずれの鍵若しくはハンマに対応しているのかを特定する。また、ここで示すノート番号は、前記記憶装置260においてユーザが任意に選択したノート番号に対応するデータのみ記録する場合等に、参照される。
位置データの第3バイトには、キーセンサ310若しくはハンマセンサ410からの検出出力に基づく前記ディジタル信号に応じた、鍵130若しくはハンマ142のストローク位置を表す情報が割り当てられている。この情報は「0xxxxxxx」によって表現される。先頭ビットの「0」は、前記と同様に当該第3バイトがデータバイトであることを示し、図示の便宜上「xxxxxxx」で示した下位7ビットは、具体的なストローク位置の値を表すデータ部分である。この実施例によれば、この下位7ビット「xxxxxxx」がとるデータ値は、鍵の位置表現用として割り当てられた数値範囲と、ハンマの位置表現用として割り当てられた数値範囲とに区分される。なお、この数値範囲の具体的な割り当て例等については、図5(b)を参照して後述する。
「拡張データ」は、前述の位置データを基本として、対応する(すなわち基本とすべき)位置データによって表現された値を、より詳細な記述分解能で表現した情報を付加するもの(汎用拡張バイト)であって、8ビットデータを1バイト単位とするデータ要素が3バイト組み合わされることで1つのバイトメッセージを構成している。拡張データが表現するデータ内容は、対応する基本情報によって規定される。従って、この実施例では、拡張データは、対応する位置データが表現する値に対してより細かいストローク位置のデータを付加するものであるが、例えば、対応する基本情報が速度を表す情報であれば、それに従属する拡張情報は速度データを表す。
この拡張データの第1バイトにおいて、上位4ビットはコード「1010」からなり、図示の便宜上「nnnn」で示した下位4ビットは、MIDIチャンネル番号を特定するコード情報からなる。ここで「nnnn」で表現されたMIDIチャンネル番号は、対応する位置データが有するチャンネル番号のコード情報と同一である。また、第2バイトはコード「00010000」からなる。この第1バイト及び第2バイトにより当該バイトメッセージが汎用拡張バイトであることが定義される。
拡張データの第3バイトには、対応する位置データが表す鍵若しくはハンマの位置データの値をより高分解能で表現した情報が割り当てられている。この情報は「0yyyyyyy」によって表現される。先頭ビットの「0」は、前記と同様に当該第3バイトがデータバイトであることを示し、図示の便宜上「yyyyyyy」で示した下位7ビットは、具体的なストローク位置の値を表すデータ部分である。なお、拡張データの第3バイトの値は、鍵130並びにハンマ142の正味のストローク範囲(レスト位置からエンド位置までの範囲)を外側に越えたストローク位置を表現しうるよう、データ記述上の「マージン」を有する。この明細書において、用語「マージン」は、レスト位置からエンド位置までの範囲を外側に越えた移動部材のストローク位置を表現する情報の意味で使用される。このデータ記述上の「マージン」の確保は、対応する位置データによって特定されるストローク位置が、レスト位置−エンド位置範囲内である場合に、相対的に細かい精度(分解能)の「第1の分解能」が適用され、一方、レスト位置若しくはエンド位置である場合、該「第1の分解能」よりも相対的に粗い精度(分解能)の「第2の分解能」が適用されることによって実現される。
なお、拡張データは、基本となる位置データの下位に位置付けされるものであり、記憶装置260における記録にあたって、記録媒体上では、対応する位置データの直後のアドレスに書き込み、また、伝送上では、対応する位置データと拡張データとの間に他のメッセージを挟まず、且つ最小時間間隔で送られるものとする。これにより、対応する位置データとの対応付け不備や、記録ミス、伝送ミス、及び読み込みミス等の影響を可及的回避している。
図5(a)において、位置データの右側に付記した[An kk xx]は、上記位置データを16進数的に簡略表記したものである。「An」は第1バイト「1010nnnn」であって、“n”の値によってMIDIチャンネルを示す。「kk」は第2バイト「0kkkkkkk」であって、“kk”の値によってノート番号を示す。「xx」は第3バイト「0xxxxxxx」であって、“xx”の値によって具体的なデータの数値を示す。また、[Bn 10 yy]は、上記拡張データの16進数的な簡略表記であって、「Bn」が第1バイト「1011nnnn」、「10」が第2バイト「00010000」を夫々示し、「yy」は第3バイト「0yyyyyyy」であって、“yy”の値によって具体的なデータの数値を示す。以下の説明において、特に断りの無い場合は、この簡略表記を用いる。
この例では、位置データ及び拡張データの両第3バイト「xx」及び「yy」は、一般的なMIDIデータと同様に、128段階の分解能を持つもので、データ値としては値「00h」〜「7Fh」(10進表記で0〜127)をとりうるものとする(末尾の“h”は16進数表記であることを示す)。
図5(b)に示すように、位置データ[An kk xx]の第3バイト「xx」の値は、鍵130の位置表現用の数値範囲として、数値範囲「01h」(10進表記では「1」)〜「30h」(10進表記では「48」)が割り当てされる。また、ハンマ142の位置表現用の数値範囲として、数値範囲「40h」(10進表記では「64」)〜「70h」(10進表記では「112」)とが割り当てられる。なお、各移動部材毎の数値範囲の割り当ては、記述すべき部材のストローク移動量や、データを記述するための分解能等に鑑みて任意に設定しうる。
上記のようなデータフォーマットによれば、位置データ[An kk xx]の第3バイト「xx」の値が複数種の移動部材(この例では鍵とハンマ)の種類に対応して、夫々異なる数値範囲が割り当てられていることで、鍵の位置表現用の割り当てフォーマットや、ハンマの位置表現用の割り当てフォーマットを別々に設定することなく、複数種の移動部材の位置情報を共通のフォーマット(位置データ[An kk xx])によって記録できるようになる。このことは、MIDIメッセージにおける割り当てフォーマットの効率的な利用という点で好ましい。また、複数種の部材(この例では鍵とハンマ)に関する位置情報を共通のフォーマットで表現することで、データ編集が簡便化されるという利点がある。例えば、或る楽曲の演奏情報として、そこに含まれる位置情報を全く使用(例えば再生等)しない場合は、当該位置データ[An kk xx]の不使用を指示する編集操作を行うだけで、当該位置データ[An kk xx]が適用されている全ての部材について一括して位置データの使用を無効にするよう処理でき、その編集作業が簡便となる。また、例えば、編集対象となるべき位置データ[An kk xx]をノート番号毎に選択する場合、該当する鍵130とハンマ142の選択・編集操作が一括してできるので、このような場合等にも、複数の部材について共通フォーマットの位置データ[An kk xx]で記録していることが有利である。特に、この実施例に示すように、鍵とハンマのような互いに連動する複数の移動部材の位置情報等の移動状態は、編集等に際して一括して処理されることが多いので、これら互いに連動する移動部材の移動状態を共通のフォーマットで記述することは有意義である。また、周知のように、ピアノの発音動作においては、まず、演奏者の押鍵操作に応じて、まず、鍵130が変位し、それから、鍵130の運動に連動してハンマ142の変位が開始する。よって、この実施例のように、鍵130の位置表現用の数値範囲として数値の若い「01h」〜「30h」を割り当て、また、ハンマ142の位置表現用の数値範囲として数値の大きい「40h」〜「70h」を割り当てることは、上記の各移動部材の運動順序に適っており、各部材毎の位置表現を感覚的に把握しやすいという点で好ましい。
図6(a)は、ハンマ142の動作状況(軌道)の一例を示すグラフであり、(b)鍵130の動作状況(軌道)の一例を示すグラフである。図6を参照して、この実施例に係る位置情報による鍵130とハンマ142のストローク位置の表現例について具体的説明する。図6(a)、(b)において、縦軸にストローク位置をとり、横軸は時間軸を示す。当該グラフの右側には、位置データの第3バイト「xx」の値及び拡張データの第3バイト「yy」の値と、鍵130、ハンマ142のストローク位置との対応関係を夫々示す。また、図7は、ハンマ及び鍵のストローク位置と、位置データの値「xx」と拡張データの値「yy」との対応関係の一例を示す表である。以下、図6及び図7を参照してこの実施例に係る位置情報によるデータの記述について詳細に説明する。
図6(a)において、ハンマ142は、レスト位置を基準(0mm)として約48mmのストローク幅で変位する。位置データの値「xx」は、このハンマ142の或る時点(サンプル時刻)におけるストローク位置(0〜48mm)を表現すべく、値「40h」〜「70h」の数値範囲が割り当てられる。
ハンマ142の位置を示す位置データの値「xx」の最小値「40h」(10進表記で「64」)は、レスト位置(ストローク量0mm)を表現する。また、最大値「70h」(10進表記で「112」)は、エンド位置(レスト位置からストローク量48mmの位置)を表現する。そして、レスト位置‐エンド位置間のストローク位置が値「41h」〜値「6Fh」によって1ミリ単位でリニアで表現される。ここで「リニアで表現」とは、データの値1ディジットが1ミリに相当する割合で線形的に比例していることである。例えば、或るハンマ142が長さ40mmストロークした状態を表現するには、[An kk 68]と表現する。
これに対して、ハンマ142の位置を示す拡張データの第3バイト「yy」の値は、対応する位置データの値(1mm単位)で表現しきれない微小なストローク位置を記述する。これは、対応する位置データの値を更に正方向又は負方向の夫々について64段階に細分化して表現する。正方向又は負方向の夫々について64段階に分割することは、当該データの値が「00h」〜「7Fh」の128段階をとりうることから任意に設定されたものである。
値「yy」は、対応する位置データの値によってレスト位置‐エンド位置の範囲内(位置データの値「41h」〜値「6Fh」の範囲)のストローク位置が表現される場合に、1ディジットを1/64mm単位とする「第1の分解能」でハンマのストローク位置をリニアに表現する。すなわち、この場合、拡張データは対応する位置データによって特定されたストローク位置の値に対して、そこから更に1/64mm単位で表現されたストローク位置の値を付加する。一方、対応する位置データの値がレスト位置若しくはエンド位置(位置データの値「40h」若しくは値「70h」)を表現している場合、値「yy」は、1ディジットを1/4mm単位とする「第2の分解能」でハンマのストローク位置をリニアに表現する。すなわち、この場合、拡張データは、対応する位置データによって、レスト位置(ストローク量0mmの位置)若しくはエンド位置(レスト位置からストローク量48mmの位置)として表現された値に対して、そこから更に1/4mm単位で表現されたストローク位置の値を付加する。
拡張データによるハンマ位置の具体的な記述態様の一例について説明する。先ず「第1の分解能」で記述される値「yy」は、対応する位置データの値から±0mmの位置を中心の基準位置として「00h」で表現する。この値「yy」によって記述可能な最小位置は、基準位置から負方向の64段階目すなわち±0mmから−64/64mm(−1mm)の位置であって、これは値「40h」(10進表記で64)に相当する。また、この値「yy」によって記述可能な最大位置は、基準位置から正方向の63段階目すなわち±0mmから+63/64mm(+0.984375mm)の位置であって、これは値「3Fh」(10進表記で63)に相当する。従って、或る拡張データが「第1の分解能」で記述可能なストローク幅は、約±1mmとされる。位置データの値と拡張データの値とを組み合わせて表現されるハンマのストローク位置は、「xx+yy/64mm」(但し、ここでxx及びyyは、データ値が表現する物理量)である。
一方、「第2の分解能」で記述される値「yy」(すなわち対応する値xxが「40h」又は「70h」の場合)は、対応する位置データの値から0mmの位置を中心の基準位置として「00h」で表現する。この値「yy」によって記述可能な最小位置は、基準位置から負方向の64段階目すなわち±0mmから−16mm(―64/4mm)の位置であって、これは値「40h」(10進表記で64)に相当する。また、この値「yy」によって記述される最大位置は、基準位置から正方向の63段階目すなわち±0mmから+15.75mm(+63/4mm)の位置であって、値「3Fh」(10進表記で63)に相当する。従って、或る拡張データが「第2の分解能」で記述可能なストローク幅は、約±16mmとされる。位置データの値と拡張データの値とを組み合わせて表現されるハンマのストローク位置は、「xx+yy/4mm」(但し、ここで値xx及び値yyは、データ値が表現する物理量)である。これによれば、当該拡張データは、ハンマ142のストローク位置として、レスト位置若しくはエンド位置を外側に越えた「マージン」を夫々約16mmの範囲で記述できる。従って、ハンマ142のレスト位置若しくはエンド位置を越えたストローク変位(マージン)を当該拡張データによって十全に表現できることになる。
例えば、或るハンマ142のストローク位置の長さ40.5mmの記述は、位置データ[An kk 68]によってストローク長さ40mmを表現し、これに+0.5mm(+32/64mm)の表現たる拡張データ[Bn 10 20]を付加することでなされる。なお、同じストローク位置(40.5mm)は、例えば[An kk 69](位置データによる41mmの表現)と、−0.5mmの表現たる[Bn 10 60]とによっても記述できる。
また、エンド位置を外側に越えたストローク位置の表現の一例として、或るハンマ142のストローク位置の長さ56mmは、ストローク位置48mmを表現する位置データ[An kk 70]と、+8mm(+32/4mm)の表現たる拡張データ[Bn 10 20]とによって記述される。レスト位置を外側に越えた位置表現例としては、或るハンマ142のストローク長さ−0.25mmは、ストローク位置0mmを表現する位置データ[An kk 40]と、−0.25mm(−1/4mm)の表現たる拡張データ[Bn 10 7F]とによって記述される。
次に、この実施例に係る位置情報による鍵130のストローク位置の表現の一例について具体的説明する。前述したように、鍵130は、レスト位置から約10mmのストローク幅で変位する。位置データは、鍵130のレスト位置からエンド位置の間のストローク位置を表現する数値範囲として、値「01h(10進表記で1)」から値「30h(10進表記で48)」が割り当てられている。なお、この例では、鍵130の位置データ記述分解能は1ディジットあたり0.225mm単位とされる。
鍵130のストローク位置を表現する位置データの値「xx」の最小値「01h」は、基準となるレスト位置(ストローク量0mmの位置)より内側の0.225mmのストローク位置を表現する。また、最大値「30h」は、前記値「01h」から起算して0.225mm*48の位置、すなわちエンド位置(レスト位置からストローク量10mmの位置)より外側の10.8mmのストローク位置を表現する。そして、レスト位置‐エンド位置間での鍵のストローク位置を値「02h」〜値「2Fh」によって0.225ミリ単位でリニアに表現する(なお本明細書において、“*”は乗算を表す)。
鍵130のストローク位置を表現する拡張データの第3バイト「yy」の値は、前述したハンマ142のストローク位置を記述する場合と同様に、対応する位置データの値がレスト側の最小位置(xxの最小値「01h」)若しくはエンド側の最大位置(xxの最大値「30h」)を表現している場合に、データ値1ディジットあたりの位置記述単位が比較的粗い「第2の分解能」で鍵130のストローク位置を記述することで、表現可能なストローク範囲を拡張し、データ記述上の「マージン」を確保する。「第2の分解能」の一例として、値「yy」は1ディジットを0.225/4mm単位で鍵のストローク位置を記述する。すなわち、この場合、拡張データは、対応する位置データxxの値「01h」若しくは値「30h」によって表現されたストローク位置に対して、更に、正方向或は負方向について、0.225/4mm単位で表現したストローク位置の値を付加する。
対応する位置データが値「02h」〜値「2Fh」の範囲のストローク位置を表現している場合、鍵130の拡張データの値「yy」は、例えば、1ディジットを0.225/64mm単位とする「第1の分解能」でストローク位置を記述する。この場合、拡張データは、対応する位置データが0.225mm単位で特定されたストローク位置の値に対して、そこから更に、正方向或は負方向について0.225/64mm単位で表現されたストローク位置の値を付加する。
鍵130のストローク位置を表現する拡張データの具体的な記述態様は、前述したハンマ142におけるデータ記述態様と概ね同様である。すなわち、「第1の分解能」で記述される値「yy」(すなわち対応する値xxが「02h」〜「2Fh」の場合)は、1ディジットを0.225/64mm単位で鍵のストローク位置を記述するので、対応する位置データの値から±0mmの位置を基準位置(yy=00h)とし、該基準位置(±0mm)から−0.225mm(―64*0.225/64mm)の位置(yy=40h)を最小位置として、また、該基準位置(±0mm)から+0.221484375mm(+63*0.225/64mm)の位置(yy=3Fh)を最大位置として表現できる。よって、或る拡張データが「第1の分解能」で記述可能なストローク幅は、約±0.225mmとされる。位置データの値と拡張データの値とを組み合わせて表現される鍵のストローク位置は、「0.225*(xx+yy/64)mm」(但し、ここでxx及びyyは、データ値が表現する物理量)である。
一方、「第2の分解能」で記述される値「yy」(すなわち対応する値xxが「01h」又は「30h」の場合)は、1ディジットを0.225/4mm単位で鍵のストローク位置を記述するので、対応する位置データの値から±0mmの基準位置(yy=00h)から、−3.6mm(―64*0.225/4mm)の位置を最小位置(yy=40h)とし、また、該基準位置から+3.54375mm(+63*0.225/4mm)の位置を最大位置(yy=3Fh)として表現する。従って、或る拡張データが「第2の分解能」で記述可能なストローク幅は、約±3.6mmである。位置データの値と拡張データの値とを組み合わせて表現される鍵のストローク位置は、「0.225*(xx+yy/4)mm」(但し、ここで値xx及び値yyは、データ値が表現する物理量)である。これによれば、当該拡張データは、鍵130のストローク位置として、レスト位置若しくはエンド位置を外側に越えた「マージン」を夫々約3.6mmの範囲で記述できることになる。従って、鍵130のレスト位置若しくはエンド位置を越えたストローク変位(マージン)を当該拡張データによって十全に表現できる。
例えば、或る鍵130のストローク位置の長さ0mmの記述は、位置データ[An kk 01]によってストローク長さ0.225mmを表現し、これに−0.225mm(−4*0.225/4mm)の表現たる第2分解能の拡張データ[Bn 10 7C]を付加することでなされる。また、エンド位置を外側に越えたストローク位置の表現の一例として、或る鍵130のストローク位置の長さ10.125mmは、ストローク位置10.125mmを表現する位置データ[An kk 2D]と、±0mmの表現たる拡張データ[Bn 10 00]によって記述される。レスト位置を外側に越えた位置表現例としては、或る鍵130のストローク長さ−0.025mmは、ストローク位置0.225mmを表現する位置データ[An kk 01]と、−0.25mm(−1/4mm)の表現たる拡張データ[Bn 10 7F]とによって記述される。
なお、上述の実施例において、図7に示した鍵及びハンマのストローク位置と具体的なデータ値の対応関係や、1ディジットあたりの記述単位等は、一例であって、これに限定されない。
上記図6及び図7を参照して説明した実施例においては、拡張データ[Bn 10 yy]の第3バイト「yy」の値(yy=00h〜7Fh)による位置表現は、図8(a)に示す通りであった:すなわち、第3バイトの値「yy=00h」を、対応する位置データ[An kk xx]から±0mmの位置(基準値)の表現として、該基準値(00h)から+「3Fh」の数値範囲によって、移動部材(ハンマや鍵)の該基準値(±0mm)からの相対的な位置を正方向の変化分で表現し、また、該基準値(00h)から−「40h」の数値範囲によって、移動部材(ハンマや鍵)の該基準値(±0mm)からの相対的な位置を負方向の変化分で表現した。
以下に述べる第2実施例は拡張データによる位置表現の別の実施例であって、これによれば、対応する位置データ[An kk xx]が表すストローク位置からの相対的な位置を正方向で表現する場合と、負方向で表現する場合とで、夫々異なる種類の拡張データを使用する。図8(b)は当該第2実施例に係る位置表現の概略を示す概念図である。
図8(b)に示すように、当該第2実施例によれば、拡張データ[Bn 10 yy]を、対応する位置データ[An kk xx]が表すストローク位置からの相対的な位置を正方向で表現するバイトメッセージ(第1種の拡張情報)として定義し、拡張データ[Bn 11 yy]を、対応する位置データ[An kk xx]が表すストローク位置からの相対的な位置を負方向で表現するバイトメッセージ(第2種の拡張情報)として定義する。拡張データ[Bn 10 yy]は、第1バイト「Bn」及び第2バイト「10」により当該バイトメッセージが正方向の位置表現を行うための拡張バイトメッセージであることが識別される。また、拡張データ[Bn 11 yy]の第2バイトは、コード「00010001」(16進表記では「11h」)からなり、第1バイト「Bn」及び第2バイト「11」により当該バイトメッセージが負方向の位置表現を行うための拡張バイトメッセージであることが識別される。
拡張データ[Bn 10 yy]及び拡張データ[Bn 11 yy]の第3バイトの値「yy」は、「00h」〜「7Fh」(10進表記で0〜127)をとる。従って、拡張データ[Bn 10 yy]による正方向の位置表現並びに拡張データ[Bn 11 yy]による負方向の位置表現を、夫々、128段階の分解能で行うことができる。よって、図8(b)に示す当該第2実施例によれば、図8(a)に示す位置表現の方法よりも、より細かい分解能で位置を記述できるようになり、データの精度を向上させることができる。以下、図9及び図10を参照して、この第2実施例に係る拡張データによる具体的な位置記述の一例について説明する。図9(a)は、ハンマ142の軌道の一例、また、(b)は鍵130の軌道の一例を夫々示すグラフである。図9(a)、(b)において、縦軸はハンマ及び鍵のストローク位置、横軸は時間軸を夫々示しており、両グラフの右側には、位置データ[An kk xx]の第3バイト「xx」の値及び拡張データ[Bn 10 yy]乃至拡張データ[Bn 11 yy]の第3バイト「yy」の値と、ハンマ及び鍵のストローク位置の対応関係を示す。また、図10は、図9に示すハンマ及び鍵のストローク位置と、位置データの値「xx」と拡張データの値「yy」との対応関係を示す表である。
ハンマ142は、前述の通り、レスト位置(ストローク量0mmの位置)からエンド位置(レスト位置からストローク量48mmの位置)の間を約48mmのストローク幅で変位するものと想定されている。位置データ[An kk xx]には、第3バイト「xx」の値「40h」〜値「70h」がハンマ142のレスト位置からエンド位置の間のストローク位置を表現する数値範囲として割り当てられており、これは、1ディジットを1mm単位として、ハンマ142のストローク位置を表現する(図9(a)及び図10参照)。すなわち、値「xx」=「40h」がハンマ142のレスト位置を表現し、また、値「xx」=「70h」が、ハンマ142のエンド位置を表現する。そして、レスト位置‐エンド位置間のストローク位置を値「41h」〜値「6Fh」によって1ミリ単位でリニアに表現する。これは、前記図6及び図7を参照して説明した位置表現方法と同様である。
ハンマ142の位置データ[An kk xx]に対応する拡張データ[Bn 10 yy]乃至拡張データ[Bn 11 yy]の値「yy=00h〜7Fh」は、対応する位置データの値「xx」がレスト位置‐エンド位置の範囲内(値「41h」〜値「6Fh」の範囲)である場合、1ディジットを1/128mm単位とする「第1の分解能」でハンマのストローク位置を詳細に表現する。一方、対応する位置データの値がレスト位置若しくはエンド位置(位置データの値「40h」若しくは値「70h」)を表現している場合、拡張データ[Bn 10 yy]乃至拡張データ[Bn 11 yy]の値「yy=00h〜7Fh」は、1ディジットを1/8mm単位とする「第2の分解能」でハンマのストローク位置を表現することで、データ記述上のマージン(ハンマ142の正味のストローク範囲外の位置表現)を確保する。このように、正方向での位置表現及び負方向での位置表現に夫々別のアサイン[Bn 10 yy]及び[Bn 11 yy]を使用することで、第1の分解能及び第2の分解能の双方とも、より細かい精度でのデータ記述が可能となる。
拡張データ[Bn 10 yy]及び拡張データ[Bn 11 yy]によるハンマ位置の記述能力の具体的な一例について、図10を参照して述べる。
先ず、第1の分解能(1ディジット=1/128mm)の場合、正方向での相対位置を表す拡張データ[Bn 10 yy]では、対応する位置データが表す位置から+0mmの位置を「yy」=「00h」で表現でき、また、対応する位置データが表す位置から+127/128mm=+0.9921875mmの位置を「yy」=「7Fh」により表現できる。従って、拡張データ[Bn 10 yy]は、第1の分解能(1ディジット=1/128mm)の場合、対応する位置データ[An kk xx]が表す位置から正方向に最大0.9921875mmの範囲のハンマ位置を、1/128mm単位の精度で表現することができる。一方、負方向での相対位置を表す拡張データ[Bn 11 yy]では、対応する位置データが表す位置から―0mmの位置を「yy」=「00h」で表現でき、また、対応する位置データが表す位置から−127/128mm=−0.9921875mmの位置を「yy」=「7Fh」により表現できる。従って、拡張データ[Bn 11 yy]は、第1の分解能(1ディジット=1/128mm)の場合、対応する位置データ[An kk xx]が表す位置から負方向に最小−0.9921875mmの範囲のハンマ位置を、1/128mm単位の精度で表現することができる。
第2の分解能(1ディジット=1/8mm)の場合、正方向での相対位置を表す拡張データ[Bn 10 yy]では、対応する位置データが表す位置(xx=40h又は70h)から+0mmの位置を「yy」=「00h」で表現でき、また、対応する位置データが表す位置(xx=40h又は70h)から+127/8mm=+15.875mmの位置を「yy」=「7Fh」により表現できる。従って、拡張データ[Bn 10 yy]は、第2の分解能(1ディジット=1/8mm)により、ハンマ142のレスト位置又はエンド位置(xx=40h又は70h)から正方向に最大+15.875mmの範囲のハンマ位置を、データ記述マージンとして、1/8mm単位の精度で表現することができる。一方、負方向での相対位置を表す拡張データ[Bn 11 yy]では、対応する位置データが表す位置(xx=40h又は70h)から―0mmの位置を「yy」=「00h」で表現でき、また、対応する位置データが表す位置(xx=40h又は70h)から−127/8mm=−15.875mmの位置を「yy」=「7Fh」により表現できる。従って、拡張データ[Bn 11 yy]は、第2の分解能(1ディジット=1/8mm)により、ハンマ142のレスト位置又はエンド位置(xx=40h又は70h)から負方向に最小−15.875mmの範囲のハンマ位置を、データ記述マージンとして、1/8mm単位の精度で表現することができる。
また、図9(b)に示すように、鍵130は、レスト位置(ストローク量0mmの位置)からエンド位置(レスト位置からストローク量10mmの位置)の間を約10mmのストローク幅で変位するものと想定されている。位置データ[An kk xx]には、第3バイト「xx」の値「00h」〜値「30h」が鍵130のレスト位置からエンド位置の間のストローク位置を表現する数値範囲として割り当てられており、これは、1ディジットを0.225mm単位として、鍵130のストローク位置を表現する(図9(b)及び図10参照)。すなわち、値「xx」=「00h」が鍵130のレスト位置(ストローク量0mm)を表現し、また、値「xx」=「30h」が、鍵130のエンド位置より外側の10.8mmのストローク位置を表現する。そして、レスト位置‐エンド位置間のストローク位置を値「00h」〜値「30h」によって0.225ミリ単位でリニアに表現する。
鍵130の位置データ[An kk xx]に対応する拡張データ[Bn 10 yy]乃至拡張データ[Bn 11 yy]の値「yy=00h〜7Fh」は、対応する位置データの値「xx」がレスト位置‐エンド位置の範囲内(値「01h」〜値「2Fh」の範囲)である場合、1ディジットを0.225/128mm単位とする「第1の分解能」で鍵のストローク位置を詳細に表現する。一方、対応する位置データの値がレスト位置若しくはエンド側の最大位置(位置データの値「00h」若しくは値「30h」)を表現している場合、拡張データ[Bn 10 yy]乃至拡張データ[Bn 11 yy]の値「yy=00h〜7Fh」は、1ディジットを0.225/8mm単位とする「第2の分解能」で鍵のストローク位置を表現することで、データ記述上のマージン(鍵130の正味のストローク範囲外の位置表現)を確保する。かくして、ハンマの場合と同様に、正方向での位置表現及び負方向での位置表現に夫々別のアサイン[Bn 10 yy]及び[Bn 11 yy]を使用することで、第1の分解能及び第2の分解能の双方とも、より細かい精度でのデータ記述が可能となる。
拡張データ[Bn 10 yy]及び拡張データ[Bn 11 yy]による鍵位置の記述能力の具体的な一例について、図10を参照して述べる。
先ず、第1の分解能(1ディジット=0.225/128mm)の場合、正方向での相対位置を表す拡張データ[Bn 10 yy]では、対応する位置データが表す位置から+0mmの位置を「yy」=「00h」で表現でき、また、対応する位置データが表す位置から+127*0.225/128mm=+0.2232421875mmの位置を「yy」=「7Fh」により表現できる。従って、拡張データ[Bn 10 yy]は、第1の分解能(1ディジット=0.225/128mm)の場合、対応する位置データ[An kk xx]が表す位置から正方向に最大0.2232421875mmの範囲の鍵位置を、0.225/128mm単位の精度で表現することができる。一方、負方向での相対位置を表す拡張データ[Bn 11 yy]では、対応する位置データが表す位置から―0mmの位置を「yy」=「00h」で表現でき、また、対応する位置データが表す位置から−127*0.225/128mm=−0.2232421875mmの位置を「yy」=「7Fh」により表現できる。従って、拡張データ[Bn 11 yy]は、第1の分解能(1ディジット=0.225/128mm)の場合、対応する位置データ[An kk xx]が表す位置から負方向に最小−0.2232421875mmの範囲の鍵位置を、1/128mm単位の精度で表現することができる。
第2の分解能(1ディジット=0・225/8mm)の場合、正方向での相対位置を表す拡張データ[Bn 10 yy]では、対応する位置データが表す位置(xx=00h又は30h)から+0mmの位置を「yy」=「00h」で表現でき、また、対応する位置データが表す位置(xx=00h又は30h)から+127*0.225/8mm=+3.571875mmの位置を「yy」=「7Fh」により表現できる。従って、拡張データ[Bn 10 yy]は、第2の分解能(1ディジット=0.225/8mm)により、鍵130のレスト位置又はエンド側の最大位置(xx=00h又は30h)から正方向に最大+3.571875mmの範囲の鍵位置を、データ記述マージンとして、0.225/8mm単位の精度で表現することができる。一方、負方向での相対位置を表す拡張データ[Bn 11 yy]では、対応する位置データが表す位置(xx=00h又は30h)から―0mmの位置を「yy」=「00h」で表現でき、また、対応する位置データが表す位置(xx=00h又は30h)から−127*0.225/8mm=−3.571875mmの位置を「yy」=「7Fh」により表現できる。従って、拡張データ[Bn 11 yy]は、第2の分解能(1ディジット=0.225/8mm)により、鍵130のレスト位置又はエンド側の最大位置(xx=00h又は30h)から負方向に最小−3.571875mmの範囲の鍵位置を、データ記述マージンとして、1/8mm単位の精度で表現することができる。
図11は、当該第2実施例に係る拡張データ[Bn 10 yy]及び拡張データ[Bn 11 yy]の運用例を説明するための概念図である。この運用例では、負方向の拡張データ[Bn 11 yy]は、基本的には、レスト位置(ストローク量0mmの位置)よりも小さい位置の表現にのみ使用し、レスト位置以上の位置表現には正方向の拡張データ[Bn 10 yy]を使用するものとする。すなわち、位置データ[An kk 00]又は[An kk 40]で大まかにレスト位置(ストローク量0mm)と表現されたデータに、負方向の拡張データ[Bn 11 yy]で細かい分解能の負の値を付加することで、レスト位置を下側に越えた鍵又はハンマの位置を表現する。また、位置データ[An kk 30]又は[An kk 70]で大まかにエンド位置(レスト位置からのストローク量10.8mm又は48mm)と表現されたデータに、正方向の拡張データ[Bn 10 yy]で細かい分解能の正の値を付加することで、エンド位置を上側に越えた鍵又はハンマの位置を表現する。
一方、それ以外の部分(つまり、鍵又はハンマの正味のストローク範囲内)は、位置データ[An kk xx]により大まかなストローク位置を表現し、これに正方向の拡張データ[Bn 10 yy]による細かい分解能の正の値を付加することで、鍵又はハンマのストローク位置を詳細に表現する。例えば、ハンマのストローク位置の位置データ[An kk 50]と位置データ[An kk 51]の間の微小なストローク位置は、[An kk 50]に正方向の拡張データ[Bn 10 yy]を付加することで表現できる。
なお、拡張データ[Bn 10 yy]及び拡張データ[Bn 11 yy]の運用方法は、上述のようにレスト位置以下の部分を負方向の拡張データ[Bn 11 yy]で表現し、それ以外を正方向の拡張データ[Bn 10 yy]で表現するというように、両者を使い分ける方法に限らず、正方向又は負方向の拡張データのどちらで位置表現できるかを選択できてもよい。例えば、ハンマのストローク位置の位置データ[An kk 50]と或る正方向の拡張データ[Bn 10 yy]で表現された位置は、位置データ[An kk 51]と或る負方向の拡張データ[Bn 11 yy]でも表現しうる。
また、上記図11の運用例では、鍵又はハンマの正味のストローク範囲内(レスト―エンド間)の位置表現にも拡張データを使用する例を示したが、拡張データの使用は、レスト位置を下側に越えた位置及びエンド位置を上側に越えた位置の表現、即ち、マージンの表現にのみ限られていてもよい。具体的には、鍵のレスト側マージンの表現[An kk 00][Bn 11 yy]と、鍵のエンド側マージンの表現[An kk 30][Bn 10 yy]、並びに、ハンマのレスト側マージンの表現[An kk 40][Bn 11 yy]と、ハンマのエンド側マージンの表現[An kk 70][Bn 10 yy]にのみ適用されてもよい。
また、図9、図10に示した例においては、正方向の拡張データ[Bn 10 yy]と負方向の拡張データ[Bn 11 yy]の位置記述分解能(1ディジットあたりの記述単位)や、位置記述範囲は同じものとしたが、これに限らず、記述分解能や位置記述範囲を正方向の拡張データと負方向の拡張データとで違えるように設定してもよい。
なお、上述の実施例では、位置データ[An kk xx]の第3バイトの値によって位置が表現されるのは、鍵130とハンマ142との2つの部材であった。この発明によれば、位置データ[An kk xx]の第3バイトの値によって2つ以上の複数部材の位置を表現することも勿論可能である。ここで、当該位置データ[An kk xx]が位置を表現する部材としては、典型的には、発音動作(鍵操作)に従動して変位する部材であって、上記ハンマ142の他にダンパやジャック等を含む。例えば、上述の例では、位置データ[An kk xx]の第3バイト「xx」の値は、鍵130の位置表現用の数値範囲として「01h」〜「30h」、ハンマ142の位置表現用の数値範囲として「40h」〜「70h」を割り当てていた。この場合、ダンパやジャック等の他の部材の位置表現用の値「xx」の数値範囲としては、71h以上を適宜に割り当ててよい。すなわち、値「xx」が取りうる値「0〜127(10進表記)」の128段階を、位置情報を記述すべき部材の数や、記述分解能に応じて適宜の数値範囲で複数に区分すればよい。
また、上述の例では、鍵、ハンマ、あるいはダンパ等、発音動作(鍵操作)に従動する複数の移動部材について、位置データ[An kk xx]という1つのメッセージフォーマットで記録する例について説明したが、ペダル類などその他の移動部材についても適用しうる。また、1つのフォーマットで複数の移動部材の物理的状態に関する情報を記録するという技術思想は、位置情報のみならず、速度情報あるいは加速度情報の記述においても適用可能である。また、図示の例では、アコースティックピアノとしてグランドピアノの構成例を示したが、この発明は、これに限らずアップライトピアノにおける演奏情報の記述にも適用可能である。また、上述の例では、本発明をアコースティックピアノに適用した例について説明したが、1つのアクションとしての発音動作に従動する複数の移動部材について、物理的状態に関する情報(位置、速度若しくは加速度など)を、1つのフォーマットで生成、記録するという技術思想は、その他適宜の鍵盤楽器に適用して差し支えない。
また、この発明は、上述したように、鍵盤楽器にこの発明に係る演奏情報を生成、記録する装置を具備する構成のみならず、鍵盤楽器とは別体の外部装置として構成し、実施してもよいい。また、この発明は装置の発明として構成し、実施することができるのみならず、上記演奏情報を生成、記録するためにコンピュータまたはDSP等のプロセッサが実行するプログラムの形態で実施することができるし、そのようなプログラムを記憶した記録媒体の形態で実施することもできる。すなわち、前記プログラムを実行するコンピュータを鍵盤楽器に外部接続して、この発明を実施することもできる。
100 鍵盤楽器、110 棚板、120 筬中、130 鍵、135,145 被検出部材、140 アクション機構、142 ハンマ、170 弦、200 CPU、210 RAM、220 ROM、230 操作部、240 タイマ、250a,250b A/D変換器、260 記憶装置、310 キーセンサ、410 ハンマセンサ