(57)【特許請求の範囲】
【請求項１】
鍵盤のキー番号を含む演奏情報を受信する受信手段と、
発音させる仮想の弦楽器において前記受信手段が過去に受信したキー番号に割り当てられた仮想押弦位置であって、弦の弦番号及びフレット番号からなる仮想押弦位置を示すアサイン情報を記憶する記憶手段と、
前記仮想の弦楽器において前記受信手段が新たなキー番号を受信したとき、前記アサイン情報に基づいて現時点での仮想押弦の手の中心位置を判断し、当該新たなキー番号に対応する複数の弦番号及びフレット番号のうち、フレット番号が前記現時点での仮想押弦の手の中心位置に最も近いものに当該新たなキー番号を割り当てて新たなアサイン情報を生成し、当該新たなアサイン情報を前記記憶手段に記憶させるとともに出力する制御手段と、
を備えたことを特徴とする音源のアサイナ装置。
【請求項２】
前記制御手段は、前記アサイン情報を参照した結果、仮想押弦に対応する弦が複数ある場合は、当該各弦のフレット番号の平均値を前記手の中心位置とすることを特徴とする請求項１記載の音源のアサイナ装置。
【請求項３】
前記制御手段は、前記アサイン情報を参照した結果、仮想押弦に対応する弦がない場合、仮想押弦に対応する弦が１つである場合、又は仮想押弦に対応する複数の弦のフレット番号が同一である場合には、過去に仮想離弦された弦のフレット番号と、当該仮想離弦からの経過時間が短いほど重み付けを大きくする関数に基づいて前記現時点での仮想押弦の手の中心位置を算出することを特徴とする請求項１記載の音源のアサイナ装置。
【請求項４】
前記制御手段は、前記手の中心位置に最も近いフレット番号が前記手の中心位置から所定範囲にない場合には、開放弦を示すフレット番号を含めて前記新たなアサイン情報を生成することを特徴とする請求項１〜３のいずれかに記載の音源のアサイナ装置。
【請求項５】
前記制御手段は、前記新たなアサイン情報の弦番号が前記記憶手段に記憶されているアサイン情報における仮想押弦中の弦の弦番号であり、当該新たなアサイン情報のフレット番号が当該仮想押弦中の弦のフレット番号と異なるものであるときは、当該仮想押弦中の弦の弦番号及びフレット番号に対応するキー番号の消音メッセージを出力した後、当該新たなアサイン情報を出力することを特徴とする請求項１〜４のいずれかに記載の音源のアサイナ装置。
【請求項６】
前記制御手段は、前記新たなアサイン情報のフレット番号が前記仮想押弦中の弦のフレット番号よりも大きい値であるときは、ハンマリングオンの奏法のアサイン情報を生成することを特徴とする請求項５記載の音源のアサイナ装置。
【請求項７】
前記制御手段は、前記新たなアサイン情報のフレット番号が前記仮想押弦中の弦のフレット番号よりも小さい値であるときは、プリングオフの奏法のアサイン情報を生成することを特徴とする請求項５記載の音源のアサイナ装置。
【請求項８】
前記制御手段は、前記受信したキー番号に対応する仮想押弦の弦のフレット番号が前記手の中心位置から所定範囲にない場合には、当該キー番号をオクターブ単位でシフトして前記新たなアサイン情報を生成することを特徴とする請求項１〜３のいずれかに記載の音源のアサイナ装置。
【請求項９】
前記記憶手段は、前回受信したキー番号に割り当てられた弦番号及び当該弦の仮想ピッキング情報からなる履歴情報を記憶し、
前記制御手段は、前記新たなキー番号に割り当てられた弦番号に対応する開放弦の音高が前記前回受信したキー番号に割り当てられた弦番号に対応する開放弦の音高よりも高い場合には仮想ピッキング情報としてピッキングダウン情報を生成し、前記新たなキー番号に割り当てられた弦番号に対応する開放弦の音高が前記前回受信したキー番号に割り当てられた弦番号に対応する開放弦の音高よりも低い場合には仮想ピッキング情報としてピッキングアップ情報を生成し、前記新たなキー番号に割り当てられた弦番号が前記前回受信したキー番号に割り当てられた弦番号と同一である場合には前記記憶手段に記憶した前回の仮想ピッキング情報とは反対の方向の仮想ピッキング情報を生成し、当該生成した仮想ピッキング情報及び前記新たなキー番号に割り当てられた弦番号を新たな履歴情報として前記記憶手段に記憶させるとともに、当該生成した仮想ピッキング情報及び新たなアサイン情報を出力することを特徴とする請求項１又は２記載の音源のアサイナ装置。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
この発明は、電子楽器に使用する音源のアサイナ装置に関する。
【０００２】
【従来の技術】
ポリフォニックシンセサイザー等の一般的な電子楽器においては、その本体内に複数の系統の音源を備え、複数系統の音色を組み合わせることにより、種々の楽器の演奏を模倣したサウンドがつくり出せるようになっている。このような電子楽器は、押下された鍵盤を走査して鍵盤のキー番号である音高、鍵盤を押下した長さや強さ等の楽音データを送出する演奏部と、演奏部から送出された音符情報に応じた楽音を発生する音源部を備えている。また、鍵盤のような演奏部がなくＭＩＤＩの楽音データを外部装置から受信し、その楽音データを音源部に伝えることで楽音を発生するいわゆる音源モジュールもある。
このような電子楽器や音源モジュールには、演奏部からのキー番号をどのように複数の音源（チャンネル）に割り振るかというチャンネルアサイン機能をもつアサイナ装置が設けられており、各チャンネルに対して音高指示及び発音指示又は消音指示の演奏情報を伝えている。
【０００３】
【発明が解決しようとする課題】
しかしながら従来の音源のアサイナ装置におけるチャンネルアサイナは、ピアノやオルガン等の鍵盤楽器の動作を想定したものが多く、１つの音高に対しては１つの鍵盤操作が一義的に決定する構成になっている。このため、弦楽器のように１つの音高に対して複数の弦が対応し、同じ音高でも押下する弦に応じて音色が変化する楽器については、その音色を忠実に再現することができないという問題があった。さらに、ギター等の弦楽器においては、鍵盤楽器にはない特殊演奏として、ハンマリングオン、プリングオフ、ピッキングアップ及びピッキングダウン等がある。したがってこれらを従来のような鍵盤楽器に基づく音源のアサイナ装置で再現することは困難であった。
また、鍵盤楽器でよく使う１オクターブ内に和音の構成音を収めて鍵盤操作を容易にする手法、いわゆるクローズドボイシング（密集和音）をギター等の弦楽器に適用した場合には、異なる弦の離れた位置を何箇所も押下しなければならず、手の大きさから実現は困難である。
この発明の課題は、１つの音高に対して複数の操作を採り得る弦楽器のアサインを実現するとともに、弦楽器に固有の特殊演奏の模倣を実現し、弦楽器で押弦可能な和音構成を実現することである。
【０００４】
【課題を解決するための手段】
この発明は、鍵盤のキー番号を含む演奏情報を受信する受信手段と、発音させる仮想の弦楽器において受信手段が過去に受信したキー番号に割り当てられた仮想押弦位置であって、弦の弦番号及びフレット番号からなる仮想押弦位置を示すアサイン情報を記憶する記憶手段と、仮想の弦楽器において受信手段が新たなキー番号を受信したとき、アサイン情報に基づいて現時点での仮想押弦の手の中心位置を判断し、新たなキー番号に対応する複数の弦番号及びフレット番号のうち、フレット番号が現時点での仮想押弦の手の中心位置に最も近いものに新たなキー番号を割り当てて新たなアサイン情報を生成し、新たなアサイン情報を記憶手段に記憶させるとともに出力する制御手段と、を備えた構成になっている。
上記構成によれば、音高と操作位置とが一義的に定まる鍵盤のキー番号を受信すると、仮想の弦楽器において押弦すべき手の中心位置に最も近いフレット番号に受信したキー番号を割り当てる。したがって、１つの音高に対して複数の操作を採り得る弦楽器のアサインを実現することができる。
【０００５】
またこの場合において、新たなアサイン情報の弦番号が記憶手段に記憶されているアサイン情報における仮想押弦中の弦の弦番号であり、新たなアサイン情報のフレット番号が仮想押弦中の弦のフレット番号と異なるものであるときは、仮想押弦中の弦の弦番号及びフレット番号に対応するキー番号の消音メッセージを出力した後、新たなアサイン情報を出力するように制御手段を構成してもよい。
この場合には、ハンマリングオンの奏法やプリングオフの奏法のような弦楽器に固有の特殊演奏の模倣を実現できる。
【０００６】
またさらに、受信したキー番号に対応する仮想押弦の弦のフレット番号が手の中心位置から所定範囲にない場合には、キー番号をオクターブ単位でシフトして新たなアサイン情報を生成するように制御手段を構成してもよい。
この場合には、弦楽器で押弦可能な和音構成を実現できる。
【０００７】
【発明の実施の形態】
以下、図１〜図２６を参照してこの発明における音源のアサイン装置の実施形態をキーボード型シンセサイザーに適用した場合を例に採り説明する。
図１は、シンセサイザーの操作部を示す図である。操作部の上面には、音高や音の強さを入力する鍵盤１、微妙に音高をコントロールするベンダーホイール２、音量を調整するボリューム３、複数の各種スイッチ類４、動作状態等を表示するＬＣＤ５が設けられている。また、操作部の背面には、音響信号を出力する出力端子６、ＭＩＤＩデータを入力するＭＩＤＩイン端子７、ＭＩＤＩデータを出力するＭＩＤＩアウト端子８、及び、弦楽器用のメッセージ情報を出力するＭＩＤＩ  ＳＴＲアウト端子９を備えている。
【０００８】
図２は、このシンセサイザーのシステム構成を示す概略図であり、図３はその具体的なブロック図である。
図２に示すように、このシステムは楽音を構成する音符の波形データを発生する音源部１０、ユーザから演奏指令を受けるユーザインタフェース／演奏部（以下、単に「演奏部」という）２０、このシンセサイザーを制御するとともに、キー番号を変換して音源部１０の各チャンネルに対して、発音指示あるいは消音指示を伝達する機能をもつアサイナ部３０で構成されている。
【０００９】
さらに、各部の構成は図３に示すようになっている。すなわち、音源部１０は、波形データを格納している波形メモリ１１、波形メモリ１１から波形データを読み出す読み出し部１２、読み出された波形データを加工するフィルタ部１３、波形データを増幅するアンプ部１４、ビブラートやトレモロ等の効果を付加するエフェクト部１５、ディジタル信号の波形データをアナログ音響信号に変換するＤ／Ａコンバータ１６、アナログ音響信号を増幅するアナログアンプ部１７を備えている。波形メモリ１１には、弦楽器の複数の弦の任意のフレット押下に対応する波形データはもちろんのこと、ハンマリングオン、プリングオフ、ピッキングアップ及びピッキングダウン等のような弦楽器に特有の演奏方法に対応する波形データが記憶されている。
【００１０】
演奏部２０は、鍵盤１及び各種スイッチ類４の押下状態を検索するキースキャナ２１、ベンダーホイール２のアナログ変位量をディジタルデータに変換するＡ／Ｄコンバータ２２の他、ＬＣＤ５を駆動するＬＣＤドライバ（図示せず）を備えている。鍵盤１及び各種スイッチ類４をノートイベントを入力する入力手段とすると、キースキャナ２１は入力されたノートイベントを受信する受信手段である。
アサイナ部３０は、各部をバスで接続し、受信手段としてのキースキャナ２１又はシリアルインタフェース３４が受信したノートイベントのデータを処理するＣＰＵ（制御手段）３１、ＣＰＵ３１の動作プログラムを記憶するプログラムＲＯＭ３２、楽音を制御するためのパラメータその他ＣＰＵ３１が処理するデータを記憶するＲＡＭ（記憶手段）３３、外部からノートイベントすなわちキー番号のＭＩＤＩ情報を受信する受信手段としてのシリアルインタフェース３４を備えている。シリアルインタフェース３４はまた、ＭＩＤＩ ＩＮから受信したＭＩＤＩデータをＣＰＵ３１が処理可能なパラレルデータに変換し、ＣＰＵ３１から出力されるパラレルデータをＭＩＤＩデータに変換する変換手段でもあり、変換したＭＩＤＩデータをＭＩＤＩ ＯＵＴから送信するとともに、ＣＰＵ３１から出力される弦楽器対応のメッセージをＳＴＲＩＮＧ ＩＮＦＯＭＡＴＩＯＮ ＭＩＤＩ ＯＵＴから送信する送信手段でもある。なお、この実施形態において想定する弦楽器は、通常の２４フレットの６弦ギターである。
【００１１】
次に、ＲＡＭ３３に設けられた各レジスタについて説明する。
図４は、模倣する弦楽器の弦の状態「ストリングステータス」を示すレジスタである。［ｓ］は弦の数に対応して変数が存在する配列を示し、［０］〜［５］が第１弦〜第６弦に対応している。押弦状態か否かを表すレジスタｓｔｒ  ａｓｇｎ［ｓ］は「０」又は「１」の値を採り、「０」は押弦状態にない弦を示し「１」は押弦状態にある弦を示す。押弦フレットを表すレジスタｓｔｒ  ｆｒｅｔ［ｓ］は「０」〜「２４」の値を採り、押下されたフレット番号を示す。割り当てキーナンバーを表すレジスタｓｔｒ  ｋｅｙ［ｓ］は「０」〜「１２７」の値を採り、発音される楽音の音高を示す。演奏スタイルを表すレジスタｓｔｒ  ｐｉｃｋ［ｓ］は、「０」、「１」、「２」、「３」の値を採り、それぞれ「０」はピッキングダウン、「１」はピッキングアップ、「２」はハンマリングオン、「３」はプリングオフを示す。各レジスタの初期値はいずれも「０」となっている。
【００１２】
図５は、近い過去に離弦されたイベント「離弦イベントリスト」を示すレジスタであり、各イベント毎の状態が記憶される。［ｅ］は最後のイベントから数えて何番目に起こったかという値から「１」を減算した値を示す配列である。すなわち、最後のイベントから数えて１番目の離弦イベントは［０］であり、次の離弦イベントは［１］である。最大４イベントまで記憶するので［ｅ］は［０］〜［３］の値を採る。各変数は４つの配列になるが、書き込むときはポインタｅｖｐｔｒが示す番号の変数配列に書き込む。ｅｖ  ｐｔｒは最も古いイベントの番号であり、最新のイベントの番号はこのポインタの値から「１」を減算したものである。このポインタは初期値が「０」であり、書き込んだ際にインクリメントされる。例えば、最新の離弦イベントが［０］であるときは、このポインタの値は「１」であり、次の離弦イベントは［１］となる。このイベントを書き込むとポインタの値は「２」となる。ポインタが値「３」のとき、これをインクリメントすると、その値は「０」となり、書き込むごとに［ｅ］は［０］〜［３］の値を循環しつつ変化する。
【００１３】
割り当て弦レジスタｅｖ  ｓｔｒ［ｅ］は離弦された弦番号を示し、「０」〜「５」及び「−１」の値を採る。「−１」の場合には割り当て弦がないことを示す。この初期値は「−１」である。押弦フレット番号レジスタｅｖ  ｆｒｅｔ［ｅ］は押下されたフレット番号を示し、「０」〜「２４」の値となる。この初期値は「０」である。レジスタｅｖ  ｔｉｍｅ［ｅ］は１０ｍｓ単位で離弦の時刻を示し、「０」〜「６５５３５」の値を採り、押弦中は離弦状態ではないので「０」になっている。この初期値は「０」になっている。
【００１４】
図６は、時間管理のための現在時刻レジスタｃｕｒｒｅｎｔ  ｔｉｍｅ［ｅ］であり、イベントの経過時間を１０ｍｓ単位で１６ビットのカウンタを使って計測している。このカウンタは初期値「０」から１０ｍｓごとにインクリメントされて「６５５３５」までの値を採り、「６５５３５」をインクリメントすると「０」に戻る。すなわち、このカウンタはインクリメントしていくと１周して廻り続けるフリーランニングタイマである。イベントの経過時間を算出するためには、現在時刻からイベント時刻を減算する必要がある。この場合に、仮にカウンタの値が１周してその値が小さくなったとしても、マイナスの時間はあり得ないので、減算結果に「６５５３５」を加算すればよい。ｃｕｒｒｅｎｔ  ｔｉｍｅ［ｅ］の初期値は「０」である。
【００１５】
チャンネルアサインには、後述するように、複数のモードがあるが、どのモードの場合にもアサインの最初に、ノートイベント（キー番号）を受信すると、割り当てようとするノートの音高が各弦で何フレットに該当するか、またその弦は現在別のイベントによって押弦中であるかをすべて検索してリストアップする。図７は、この検査結果を記憶する押弦フレットのレジスタｓｃｎ  ｆｒｅｔ［ｓ］である。［ｓ］は弦の番号を表す配列であり、［０］〜［５］が第１弦〜第６弦に対応している。ｓｃｎ  ｆｒｅｔ［ｓ］のフレット番号は「０」〜「２４」の範囲であり、その初期値は「０」である。ただし、この値が「−１」である場合は割り当て不可を意味し、想定する弦楽器であるギターの指盤に該当するノートがないことを表している。
【００１６】
次に、このｓｃｎ  ｆｒｅｔ［ｓ］のフレット番号を書き込むポジションスキャン処理を図８のフローに基づいて説明する。
メインフロー（図示せず）からポジションスキャン処理に移行すると、弦番号ｓを第１弦「０」にセットし（ステップＳ１）、その弦の最低ノートナンバーを調べる（ステップＳ２）。そして、受信したノートイベントのキー番号（受信ノートナンバー）がその調べた結果である最低ノートキー未満であるか否かを判別する（ステップＳ３）。各弦の最低ノートキーはＣＰＵ３１内のデータＲＯＭにあらかじめ記憶されている。受信ノートナンバーが最低ノートキー未満でない場合には、最低ノートキーに「２４」を加算した値より大きいか否かを判別する（ステップＳ４）。「２４」を加算した値より大きくない場合には、受信ノートナンバーから最低ノートキーを減算した値をｓｃｎ  ｆｒｅｔ［ｓ］に書き込む（ステップＳ５）。一方、ステップＳ３において受信ノートナンバーが最低ノートキー未満である場合、又はステップＳ４において受信ノートナンバーが最低ノートキーに「２４」を加算した値より大きい場合には、想定する弦楽器に該当するノートがないので、ｓｃｎ  ｆｒｅｔ［ｓ］に「−１」を書き込む（ステップＳ６）。ステップＳ５又はステップＳ６の後、弦番号ｓをインクリメントし（ステップＳ７）、ｓが「６」になったか否かを判別する（ステップＳ８）。「６」になっていない場合には、ステップＳ２に移行してステップＳ８までの各処理を実行する。ステップＳ８においてｓが「６」になった場合、すなわちすべての弦についてｓｃｎ  ｆｒｅｔ［ｓ］のフレット番号の書き込みが完了するとこのフローを終了し、図示しないメインフローに戻る。
【００１７】
次に、弦楽器を模倣する場合の仮想的な手の中心位置（これを「ハンドポジション」という）の概念をアサインに取り入れる方法について説明する。ハンドポジションは手の中心位置がどの位置にあるかをフレット番号によって表す。その位置がフレットとフレットの間にある場合には少数を含む数値となる。この場合、ハンドポジションの初期値は適当な値が設定できる。実際に仮想的にアサインが開始され、割り当てを検討する場合、いずれのモードにおいても、このハンドポジションが重要な意味をもつ。すなわち、このハンドポジションに近い位置のフレット番号の弦ほど次に押弦される可能性が高いということを前提にアサインを行う。
このハンドポジションがどのように決定されるかというと、現在押弦されているものがあれば、それが重要な要素となることはいうまでもないが、過去に離弦されても離弦からの経過時間が短い場合には、その間に手が移動できる距離も小さいと考えられる。したがって、近い過去に離弦したイベントもハンドポジションの決定において重要な要素となる。
また、ある１箇所が押弦されていても、それが人さし指であれば、ハンドポジションはその指の位置よりも少し上に位置するはずで、近い過去に小指の押弦があって、現在は離弦されている場合は、そのイベントも判断に入れることでハンドポジションが押弦されている人さし指の位置より上の位置にもってくることができる。
【００１８】
実際にノートが割り当てられている弦とフレットを「ノートポジション」と称することとする。例えば、図９に示すように、過去４つのノートポジションがある場合、番号「１」〜「４」が若いほど古いイベントのノートポジションとすると、新しいイベントの番号「４」に大きな重みを付けて平均値をとる。この場合には、図の２点鎖線に示す位置がハンドポジションとして得られる。
ハンドポジションに関する変数レジスタを図１０に示す。現在のハンドポジションのレジスタｈａｎｄ  ｐｏｓｉｔｉｏｎには、「０」〜「２４」の範囲のフレット番号が記憶される。この場合「０」は開放弦である。また、ｈａｎｄ  ｐｏｓｉｔｉｏｎの初期値はレジスタｉｎｉｔ  ｈａｎｄ  ｐｏｓｉｔｉｏｎの値が記憶されている。そして、このハンドポジション初期値を記憶するレジスタｉｎｉｔ  ｈａｎｄ  ｐｏｓｉｔｉｏｎには、「０」〜「２４」の範囲のフレット番号が記憶され、その初期値であるフレット番号は「７」である。すなわち、演奏されていない時に仮にこのフレット番号「７」の位置に手の中心位置があると仮定する。そして、イニシャライズのときにこのフレット番号「７」をｈａｎｄ  ｐｏｓｉｔｉｏｎに転送する。
レジスタｈａｎｄ  ｔｉｍｅには、過去のイベントの重みが完全に無効になる時間が１０ｍｓの単位で記憶され、その範囲は「０」〜「６５５３５」、その初期値は「１００」である。
【００１９】
次に、ハンドポジションを求める処理について、図１１のフローに基づいて説明する。
まず、各弦の状態を調べて押弦中のものをリストアップして（ステップＳ１１）、押弦中のノートポジションがあるか否かを判別する（ステップＳ１２）。押弦中のノートポジションがある場合には最高のフレット番号と最低のフレット番号が異なるか否かを判別する（ステップＳ１３）。両者のフレット番号が異なる場合には、それらの平均値を下記の（数１）にしたがって算出し、算出した値をｈａｎｄ  ｐｏｓｉｔｉｏｎに記憶する（ステップＳ１４）。
【数１】
0003567297.tif 000002
【００２０】
一方、ステップＳ１２において押弦中のノートポジションがない場合、又はステップＳ１３において最高のフレット番号と最低のフレット番号とが等しい場合には、押弦中のノートポジションだけでハンドポジションの判断をすることはせず、以下に記述するように、過去のイベントを考慮する。
まず、過去のイベントのチェックを行う。すなわち、押弦中のイベントのフレット番号と図５のイベントレジスタに記憶されている過去の４つのイベントのフレット番号を調べて、それぞれに所定の重み付けをして平均値を求める。この重み付けのために、下記の（数２）にしたがって各イベントの経過時間ｔ［ｅ］を計算する（ステップＳ１５）。ここで［ｅ］はイベント番号である。
【数２】
0003567297.tif 000003
この（数２）の式から明らかなように、経過時間ｔ［ｅ］は現在時刻から離弦の時刻を減算して求める。
【００２１】
重みの付け方は以下の方法による。押弦中のものについては、いくつあっても重みは「１」とする。このときの押弦中のフレットポジションをｆｏｎとする。押弦中のものがない場合には、ｆｏｎ＝０となる。離弦された過去のイベントについては、経過時間が図１０のｈａｎｄ  ｔｉｍｅの無効時間を超えた場合には重みは「０」となる。経過時間が無効時間を超えない場合には、各イベントの重みｓ［ｅ］は、下記の（数３）で表される。
【数３】
0003567297.tif 000004
次に、上記結果を総合してハンドポジションを決定する。ハンドポジションは、押弦中のノートポジションと離弦されたイベントのノートポジションの重み付きの平均値である。そこで、下記の（数４）にしたがってフレット番号に重みを付けて平均値を計算し、ｈａｎｄ  ｐｏｓｉｔｉｏｎに入力する（ステップＳ１６）。この後、図示しないメインフローに戻る。
【数４】
0003567297.tif 000005
【００２２】
次に、ピッキング方向の決定について説明する。ピッキングの方向は、アップとダウンの２種類があり、初期値だけを決めておけば、次にどの弦に移動するかあるいは同じ弦を弾弦するかで次のピッキングの方向を決定する。この実施形態では、腕のピッキングストロークが小さくて済むものを選択する。この場合、以下の４つに分類できる。
その第１は、新たなノートイベントに対して割り当てられたノートポジションの弦が、前回のノートイベントのとき割り当てられた弦と比較して、開放弦の音高が高い弦すなわち細い弦のときはピッキングダウンである。
第２は、新たなノートイベントに対して割り当てられたノートポジションの弦が、前回のノートイベントのとき割り当てられた弦と比較して、開放弦の音高が低い弦すなわち太い弦のときはピッキングアップである。
第３は、新たなノートイベントに対して割り当てられたノートポジションの弦が、前回のノートイベントのとき割り当てられた弦と同じであり、前回のピッキングがアップである場合はピッキングダウンである。
第４は、新たなノートイベントに対して割り当てられたノートポジションの弦が、前回のノートイベントのとき割り当てられた弦と同じであり、前回のピッキングがダウンである場合はピッキングアップである。
【００２３】
次に、上記分類にしたがった場合のピッキング方向の決定について、図１２〜図１４を参照して説明する。例えば、図１２（Ａ）に示すノートイベントのフレーズを受信したとする。この場合、最初のノートイベントのピッキング方向は直前の最後のピッキングがどの弦で、どちらの方向にピッキングされたかをＲＡＭ３３のレジスタに記憶しておき、このレジスタの内容に応じてピッキング方向を決定する。図１３に最後のピッキングの状態を記憶するラストピッキングイベントレジスタを示す。レジスタｌａｓｔ  ｓｔｒには、最後に割り当てられた弦の弦番号「０」〜「５」のいずれかが記憶されている。この初期値は「０」である。レジスタｌａｓｔ  ｐｉｃｋには、最後のピッキング方向が記憶されている。この値が「０」の場合はダウン、「１」の場合はアップを示し、この初期値は「０」すなわちダウンである。
【００２４】
図１４はピッキング方向を決定する処理のフローである。
弦番号ｓを今回の新たな弦番号にセットし（ステップＳ２１）、図１３に示すｌａｓｔ  ｓｔｒがこの弦番号ｓよりも小さいか否かを判別する（ステップＳ２２）。ｌａｓｔ  ｓｔｒがこの弦番号ｓよりも小さい場合には、上記分類の第２の場合に該当するので、今回のピッキング方向のフラグｐを「１」すなわちアップにセットする（ステップＳ２３）。ｌａｓｔ  ｓｔｒがこの弦番号ｓよりも小さくない場合には、ｌａｓｔ  ｓｔｒがこの弦番号ｓよりも大きいか否かを判別する（ステップＳ２４）。ｌａｓｔ  ｓｔｒがこの弦番号ｓよりも大きい場合には、上記分類の第１の場合に該当し、今回のピッキング方向のフラグｐを「０」すなわちダウンにセットする（ステップＳ２５）。
【００２５】
ステップＳ２４において、ｌａｓｔ  ｓｔｒが弦番号ｓよりも大きくない場合には、図１３に示すｌａｓｔ  ｐｉｃｋが「０」すなわちダウンであるか、又は「１」すなわちアップであるかを判別する（ステップＳ２６）。そして、ｌａｓｔ  ｐｉｃｋが「０」である場合には、上記分類の第４に該当するので、ステップＳ２３に移行して今回のピッキング方向のフラグｐを「１」すなわちアップにセットする。一方、ｌａｓｔ  ｐｉｃｋが「１」である場合には、上記分類の第３に該当するので、ステップＳ２５に移行して今回のピッキング方向のフラグｐを「０」すなわちダウンにセットする。
ステップＳ２３又はステップＳ２５におけるフラグｐのセットの後は、図１３のｌａｓｔ  ｐｉｃｋの値をそのフラグｐの値とし（ステップＳ２７）、ｌａｓｔ  ｓｔｒの値を今回の弦番号ｓとする（ステップＳ２８）。この後、図示しないメインフローに戻る。
【００２６】
この結果、図１２（Ｂ）に示すように、第５弦をピッキングダウンした後、次に第４弦を押弦するので、ｌａｓｔ  ｓｔｒ（＝４）＞ｓ（＝３）すなわち次に弾弦する弦が前の弦より細いので、第４弦はピッキングダウンの奏法となる。この後、第３弦、第２弦の順に押弦するので、後に弾弦する弦が前の弦より細くなり、ピッキングダウンの奏法となる。第２弦はフレット番号５で弾弦した後、同じ第２弦をフレット番号６、フレット番号８で押弦するので、ｌａｓｔ  ｐｉｃｋを参照して、前のピッキング方向と反対の方向となり、フレット番号６の場合はピッキングアップ、フレット番号８はピッキングダウンの奏法となる。次は第３弦を押弦するので前の弦より太くなり、ピッキングアップの奏法となる。さらに次は同じ第３弦を他のフレット番号で押弦するので、前のピッキング方向と反対の方向となり、ピッキングダウンの奏法となる。
【００２７】
次に、チャンネルアサインのモードについて説明する。アサインの基本的な動作は、図１５に示すレジスタｍｏｄｅによって設定される。ｍｏｄｅの値の範囲は「０」〜「３」、すなわち４つの演奏モードによって決定する。これら４つの演奏モードのうち常にいずれか１つのモードだけが選択されている。ｍｏｄｅ「０」はノーマルモードであり、ソロ演奏やコード演奏に偏らない汎用性のある演奏に適している。ｍｏｄｅ「１」は開放弦使用モードであり、ノーマルモードにさらに開放弦の利用を可能にしたモードであり、基本はソロ演奏やコード演奏に偏らない汎用性のある演奏に適している。ｍｏｄｅ「２」はソロモードであり、ソロ演奏に適している。このモードでは、ハンマリングオン、プリングオフ、ピッキングアップ及びピッキングダウンのような特殊演奏もできる。ｍｏｄｅ「３」はオープンボイシングモードであり、コード演奏に適している。
図１６は、モード選択のフローである。ｍｏｄｅの値を図１５を参照して調べ、ｍｏｄｅの値を判別する（ステップＳ１０１〜ステップＳ１０４）。ｍｏｄｅ「０」の場合はノーマルモードに移行し（ステップＳ１０５）、ｍｏｄｅ「１」の場合は開放弦使用モードに移行し（ステップＳ１０６）、ｍｏｄｅ「２」の場合はソロモードに移行し（ステップＳ１０７）、ｍｏｄｅ「３」の場合はオープンボイシングモードに移行する（ステップＳ１０８）。アサイン処理は各モードごとに異なる。
【００２８】
以下、各モードにおけるアサイン処理について順に説明する。
ノーマルモードの基本は、弦の割り当てが先着優先であることである。すなわち、ある弦が押弦されて一度割り当てられれば、離弦されるまではそのノートがその弦に対応する音源の発信部を独占する。
ノーマルモード時におけるアサイン処理について、図１７のフローに基づいて説明する。何らかのノートイベントを受信したときには、図８に示すフローにしたがってポジションスキャン処理を行い、空いているすべての弦においてその音高に対応するノートポジション、すなわち弦番号及びフレット番号を調べあげリストアップする（ステップＳ３１）。このリストに基づき、図１１に示すフローにしたがってハンドポジションを決定する（ステップＳ３２）。次に、空いているフレットの中で決定したハンドポジションに最も近いフレットを選択する（ステップＳ３３）。この場合において、選択するフレットの候補が２つあるか否かを判別し（ステップＳ３４）、２つある場合には最後に弾弦された弦に近い弦番号のものを選択する（ステップＳ３５）。
【００２９】
次に、図１４に示すフローにしたがってピッキング方向を決定する（ステップＳ３６）。そして、ＲＡＭ３３の所定の各レジスタに結果を記憶する（ステップＳ３７）。すなわち、選択した弦の番号を割当弦番号ｓにセットし、弦割り当て状態を示すｓｔｒ  ａｓｇｎに「１」（押弦状態）をセットし、押弦フレットを示すｓｔｒ  ｆｒｅｔにフレット番号をセットし、弦割り当てキーナンバーｓｔｒ  ｋｅｙにキー番号をセットし、演奏スタイルｓｔｒ  ｐｉｃｋにピッキング方向をセットする。そして、記憶した各レジスタの内容を弦楽器対応のメッセージとしてシリアルインタフェース３４を介して外部に出力する（ステップＳ３８）。
このように、鍵盤用のノートイベントを受信したときは、ＲＡＭ３３のレジスタを参照して、想定する弦楽器における各弦のフレットの押弦位置を示すフレット番号のアサイン情報に基づいて、押弦する手の中心位置を判断し、中心位置に最も近いフレット番号に受信したノートイベントを割り当てて新たなアサイン情報を生成してＲＡＭ３３に記憶させる。したがって、鍵盤用のノートイベントを変換して、１つの音高に対して複数の操作を採り得る弦楽器のアサインを実現することができる。
【００３０】
次に、開放弦使用モードのアサイン処理について説明する。
開放弦使用モードは、上記したように、ノーマルモードに開放弦機能を付加したものである。ところで、押弦するハンドポジションは単位時間あたりに移動する距離に限界があり、１つの手で押弦する範囲にも限界がある。この限界を超えたようなキー番号を受信した場合には、ノーマルモードでは弦楽器の模倣性を実現することができないが、開放弦を使用すれば押弦の必要性がないので、いきなり離れた音高を演奏することができる。そこで、ＲＡＭ３３に開放弦を使用するためのパラメータを記憶するレジスタを設け、開放弦機能を付加した。
図１８に示すように、開放弦許可スイッチのレジスタｏｐｅｎｓ  ｅｎａｂｌｅには、開放弦使用の不可「０」又は許可「１」のいずれかをセットする。この初期値は「０」である。開放弦検索上方向スレッシホールドのレジスタｏｐｅｎｓ  ｕｐｐｅｒ  ｗｉｄｔｈには、開放弦を使用するか否かの判断をするための上方向すなわち音高が高い方向の閾値のフレット数をセットする。この閾値の範囲は「０」〜「１２」でその初期値は「３」である。開放弦検索下方向スレッシホールドのレジスタｏｐｅｎｓ  ｌｏｗｅｒ  ｗｉｄｔｈには、同じく開放弦を使用するか否かの判断をするための下方向すなわち音高が低い方向の閾値のフレット数をセットする。閾値の範囲は「０」〜「１２」でその初期値は「２」である。
【００３１】
次に、開放弦使用モードのアサイン処理について、図１９のフローに基づいて説明する。この処理は、図１７に示すノーマルモードのアサイン処理に開放弦を使用するか否かの判別処理が付加されているだけで、その他の処理については図１７のフローと同じであるので、同じ符号で示すとともにその説明は省略する。すなわち、ステップＳ３５において空いているフレット番号のなかで最も近いフレット番号を選択した後、開放弦使用の判別を行う（ステップＳ４０）。以下、開放弦判別の詳細な処理について説明する。
ステップＳ４１において、ｈａｎｄ  ｐｏｓｉｔｉｏｎにセットされているフレット番号にｏｐｅｎｓ  ｕｐｐｅｒ  ｗｉｄｔｈにセットされているフレット数を加算した値が、ステップＳ３３で選択した近いフレット番号の値よりも小さいか否か、すなわちハンドポジションから選択した近いフレットまでの距離がｏｐｅｎｓ  ｕｐｐｅｒ  ｗｉｄｔｈにセットされた閾値を超えているか否かを判別する。閾値を超えている場合には、そのフレットを押弦できないと判断して開放弦を探し（ステップＳ４２）、一致する開放弦があるか否かを判別する（ステップＳ４３）。一致する開放弦がある場合には、その開放弦が弾弦中であるか否かを判別し（ステップＳ４４）、弾弦中でない場合にはその開放弦を使用することを決定する（ステップＳ４５）。
【００３２】
一方、ステップＳ４１において選択した近いフレットまでの距離がｏｐｅｎｓ  ｕｐｐｅｒ  ｗｉｄｔｈにセットされた閾値を超えていない場合には、ステップＳ４６に移行して、ｈａｎｄ  ｐｏｓｉｔｉｏｎにセットされているフレット番号からｏｐｅｎｓ  ｌｏｗｅｒ  ｗｉｄｔｈにセットされているフレット数を減算した値が、選択した近いフレット番号の値よりも大きいか否か、すなわちハンドポジションから選択した近いフレットまでの距離がｏｐｅｎｓ  ｌｏｗｅｒ  ｗｉｄｔｈにセットされた閾値を超えているか否かを判別する。閾値を超えている場合には、そのフレットを押弦できないと判断して開放弦を探し（ステップＳ４２）、一致する開放弦があったか否かを判別する（ステップＳ４３）。一致する開放弦があった場合には、その開放弦が弾弦中であるか否かを判別し（ステップＳ４４）、弾弦中でない場合にはその開放弦を使用することを決定する（ステップＳ４５）。
【００３３】
ステップＳ４１及びステップＳ４６において、ハンドポジションから近いフレットまでの距離が、ｏｐｅｎｓ  ｌｏｗｅｒ  ｗｉｄｔｈの閾値とｏｐｅｎｓ  ｕｐｐｅｒ  ｗｉｄｔｈの閾値の範囲内にある場合には、そのフレットを押弦できると判断して、開放弦を使用せずその近いフレットを使用することを決定する（ステップＳ４７）。また、ステップＳ４３においてノートイベントに一致する開放弦がない場合、又はステップＳ４４においてその開放弦が弾弦中である場合には、開放弦を使用できないためステップＳ４７に移行して、近いフレットを使用することを決定する。このステップＳ４０の開放弦使用の判別処理の後は、ノーマルモードの場合と同様に、ステップＳ３６に移行してピッキング方向を決定する。
このように、選択した近いフレット番号が手の中心位置から所定範囲にない場合には、開放弦を含めて新たなアサイン情報を生成する。したがって、ノーマルモードの鍵盤用のノートイベントを変換して、１つの音高に対して複数の操作を採り得る弦楽器のアサインを実現する場合に、ノーマルモードの押弦の可能性をさらに高くすることができる。
【００３４】
次に、ソロモードのアサイン処理について説明する。
ソロモードの基本は、弦の割り当てが後着優先であることである。すなわち、ある弦が押弦されて一度割り当てられたものであっても、ハンドポジションが所定の条件に合致すれば他のノートに割り当てられる。さらに、ソロモードの特徴はハンマリングオンやプリングオフ等の特殊演奏の模倣が可能なことである。
ハンマリングオンの奏法は、ある弦がすでに発音中である場合に、その弦の振動を利用して、押下しているフレットポジションより上（高い音高）のフレットポジションを別の指で叩く（これも一種の押弦である）ことで、ピッキングすることなく新たな発音を行う奏法である。
プリングオフの奏法は、ある弦がすでに発音中である場合に、その弦の振動を利用して、押下しているフレットポジションより下（低い音高）のフレットポジションをあらかじめ別の指で押えておき、現在のノートに対応するフレットポジションを押えている指で弦を引っ張りながらリリースすることにより、ピッキングすることなくあらかじめ押えていた指のフレット番号の音高で発音を行う奏法である。
【００３５】
例えば、図２０（Ａ）に示すノートイベントのフレーズを受信したとする。この場合、ＲＡＭ３３のレジスタの内容に基づいてアサインを行う。図２１は、ソロモードにおいて使用するレジスタである。ハンマリングオン許可スイッチのレジスタｓｏｌｏ  ｈｏ  ｅｎａｂｌｅには、ハンマリングオンの演奏を許可しない場合は「０」をセットし、許可する場合は「１」をセットする。プリングオフ許可スイッチのレジスタｓｏｌｏ  ｐｏ  ｅｎａｂｌｅには、プリングオフの演奏を許可しない場合は「０」をセットし、許可する場合は「１」をセットする。なお、このソロモードにおいては、図４に示す演奏スタイルのレジスタｓｔｒ
ｐｉｃｋ［ｓ］も参照する。
【００３６】
次に、ソロモードのアサイン処理について、図２２のフローに基づいて説明する。何らかのノートイベントを受信したときには、図８に示すフローにしたがってポジションスキャン処理を行い、すべての弦においてその音高に対応するノートポジションすなわちフレット番号を調べあげリストアップする（ステップＳ５１）。このリストに基づき図１１に示すフローにしたがって、ハンドポジションを決定する（ステップＳ５２）。そして、すべての弦の中でこの決定したハンドポジションに最も近いフレットを選択する（ステップＳ５３）。この場合において、選択するフレットの候補が２つあるか否かを判別し（ステップＳ５４）、２つある場合には最後に弾弦された弦に近い弦番号のフレットを選択する（ステップＳ５５）。そして、その選択したフレット番号を割り当てフレットのレジスタｆにセットする（ステップＳ５６）。
【００３７】
次に、選択した弦は使用中であるか否かを、図４のｓｔｒ  ａｓｇｎ［ｓ］が「１」すなわち押弦状態であるか否かによって判別する（ステップＳ５７）。押弦状態である場合には、割り当てフレットｆが図４のｓｔｒ  ｆｒｅｔ［ｓ］の押弦フレットと同じであるか否かを判別し（ステップＳ５８）、同じでない場合にはｆがｓｔｒ  ｆｒｅｔ［ｓ］よりも小さいか否かを判別する（ステップＳ５９）。ｆがｓｔｒ  ｆｒｅｔ［ｓ］よりも大きい（音高が高い）場合には、図２１に示すｓｏｌｏ  ｈｏ  ｅｎａｂｌｅが「１」すなわちハンマリングオンが可能か否かを判別し（ステップＳ６０）、可能である場合にはハンマリングオンの奏法に決定する（ステップＳ６１）。ステップＳ５９において、ｆがｓｔｒ  ｆｒｅｔ［ｓ］よりも小さい（音高が低い）場合には、図２１に示すｓｏｌｏ  ｐｏ  ｅｎａｂｌｅが「１」すなわちプリングオフが可能か否かを判別し（ステップＳ６２）、可能である場合にはプリングオフの奏法に決定する（ステップＳ６３）。
【００３８】
ステップＳ５７において、ｓｔｒ  ａｓｇｎ［ｓ］が「０」すなわち選択した弦が使用中でない場合には、プリングオフ及びハンマリングオンの奏法を行わず、ステップＳ６４に移行し、図１４に示すフローにしたがってピッキング方向を決定する。また、ステップＳ６０においてｓｏｌｏ  ｈｏ  ｅｎａｂｌｅが「０」である場合、及び、ステップＳ６２においてｓｏｌｏ  ｐｏ  ｅｎａｂｌｅが「０」である場合、すなわちプリングオフもハンマリングオンも不可である場合にも、ステップＳ６４に移行してピッキング方向を決定する。
ステップＳ６１でハンマリングオンに決定した後、若しくはステップＳ６３でプリングオフに決定した後、又はステップＳ６４でピッキング方向を決定した後は、ステップＳ６５に移行して、配列［ｓ］にチャンネルアサインをして、キー番号のレジスタｓｔｒ  ｋｅｙ［ｓ］のノートオフメッセージを出力する。
【００３９】
次に、ＲＡＭ３３の所定の各レジスタに後に押弦したイベントの結果を記憶する（ステップＳ６６）。すなわち、選択した弦の番号を割当弦番号ｓにセットし、弦割り当て状態を示すｓｔｒ  ａｓｇｎに「１」（押弦状態）をセットし、押弦フレットを示すｓｔｒ  ｆｒｅｔにフレット番号をセットし、弦割り当てキーナンバーｓｔｒ  ｋｅｙにキー番号をセットし、ピッキング方向を決定した場合には演奏スタイルｓｔｒ  ｐｉｃｋにピッキング方向をセットする。そして、記憶した各レジスタの内容を弦楽器対応のメッセージとして外部に出力する（ステップＳ６７）。
この結果、図２０（Ａ）のノートイベントのフレーズを受けた場合には、図２０（Ｂ）に示すような演奏パターンとなる。すなわち、第５弦をフレット番号７のノートでピッキングダウンした後、弾弦状態にない第４弦を新たに押弦し、しかも前の弦より細い弦であるので、第４弦はピッキングダウンとなる。次は、同じ第４弦の大きいフレット番号７を押弦するので、ハンマリングオンの奏法となる。次は、第４弦より細い第３弦のフレット番号７を押弦するので、ピッキングダウンの奏法となる。次は、同じ第３弦の小さいフレット番号５を押弦するので、プリングオフの奏法となる。次は、弾弦状態にない第２弦のフレット番号５を新たに押弦し、しかも前の弦より細い弦であるので、ピッキングダウンの奏法となる。次は、同じ第２弦の大きいフレット番号６を押弦するので、ハンマリングオンの奏法となる。次は、同じ第２弦のさらに大きいフレット番号８を押弦するので、ハンマリングオンの奏法となる。
【００４０】
このように、ＲＡＭ３３に記憶されているアサイン情報における押弦中の弦が発音中の弦であり、受信したノートイベントが発音中の弦の異なるフレット番号に割り当てるものであるときは、発音中の弦のノートを受信したノートイベントに変更して新たなアサイン情報を生成することにより、ハンマリングオンやプリングオフの奏法のメッセージを出力する。したがって、弦楽器のソロ演奏を模倣することができる。
【００４１】
次に、オープンボイシングモードのアサイン処理について説明する。
オープンボイシングモードは、コード演奏に適しているもので、弦の割り当ては先着優先になる。またオープンボイシングモードの最大の特徴は、キーボードで演奏された形式のＭＩＤＩ信号に対応した音高通りに発音するのではなく、ノートをオクターブ単位でずらして発音することができる。
【００４２】
オープンボイシングモードの動作原理は以下のようなものである。クローズドボイシングが困難になる理由は、押弦する１つの手が同時に押えらる範囲が手の大きさを超えているからである。このため、一度に押えられる範囲を設定し、その範囲を超えたノートイベントを受信した場合には、そのノートをオクターブ単位でシフトする。このため、図２３に示すように、設定範囲のパラメータをセットするレジスタをＲＡＭ３３に設けている。レジスタｏｐｅｎｖ  ｕｐｐｅｒ  ｗｉｄｔｈには、開放弦検索上方向スレッシホールドのフレット数がセットされる。その値の範囲は「０」〜「１２」でありその初期値は「３」である。レジスタｏｐｅｎｖ  ｌｏｗｅｒ  ｗｉｄｔｈには、開放弦検索下方向スレッシホールドのフレット数がセットされる。その値の範囲は「０」〜「１２」でありその初期値は「２」である。
【００４３】
例えば、図２４（Ａ）に示すようなＥｍ９のコードフレーズのノートイベントが、Ｅ、Ｆ＃、Ｇ、Ｄの順に受信して入力された場合、これらの音高を弦楽器の弦及びフレットに割り当てたとすると、その指盤上では図２４（Ｂ）に示すアサインの押弦パターンとなる。この場合、最初の構成音Ｅは第５弦のフレット番号７に相当し、次の構成音Ｆ＃は第４弦のフレット番号４に相当し、これらは３フレット分離れている。したがって、ｏｐｅｎｖ  ｌｏｗｅｒ  ｗｉｄｔｈの値が「２」だとすると、弦楽器で演奏可能なクローズドボイシングの条件に適合しない。そこで、図２５（Ａ）に示すように、構成音Ｆ＃を１オクターブ上げて、図２５（Ｂ）に示すように、クローズドボイシングの条件に適合する第２弦のフレット番号７の位置に対応させる。さらに、構成音Ｇについてはオクターブシフトはしないが、構成音Ｆ＃の移動によって開放弦になった第４弦のフレット番号５に移動する。また、構成音Ｄは構成音Ｇの移動によって開放弦になった第３弦のフレット番号７に移動する。この結果、押弦可能なノートポジションとなるので弦楽器のクローズドボイシングの条件に適合するようになる。
【００４４】
次に、オープンボイシングモードのアサイン処理について、図２６のフローに基づいてさらに説明する。
何らかのノートイベントを受信したときには、図８に示すフローにしたがってポジションスキャン処理を行い、空いているすべての弦においてその音高に対応するノートポジション、すなわちフレット番号を調べあげリストアップする（ステップＳ７１）。このリストに基づき図１１に示すフローにしたがって、ハンドポジションを決定する（ステップＳ７２）。そして、空いているフレット番号の中でハンドポジションに最も近いフレット番号を選択する（ステップＳ７３）。この場合において、選択するフレットの候補が２つあるか否かを判別し（ステップＳ７４）、２つある場合には最後に弾弦された弦に近いフレット番号を選択する（ステップＳ７５）。
【００４５】
次に、図１０に示すレジスタｈａｎｄ  ｐｏｓｉｔｉｏｎにｏｐｅｎｖ  ｕｐｐｅｒ  ｗｉｄｔｈを加算した値が選択した近いフレット番号の値より小さいか否かを判別する（ステップＳ７６）。加算した値が近いフレット番号の値より小さい場合には、そのフレット番号が手で押弦可能な範囲を超えているので、受信したノートを１〜２オクターブ上又は下にシフトしてノートポジションを検索する（ステップＳ７７）。一方、ステップＳ７６において加算した値が近いフレットの値より小さくない場合には、ｈａｎｄ  ｐｏｓｉｔｉｏｎからｏｐｅｎｖ  ｌｏｗｅｒ  ｗｉｄｔｈを減算した値が近いフレットの値よりも大きいか否かを判別する（ステップＳ７８）。減算した値が近いフレットの値よりも大きい場合には、そのフレット番号が手で押弦可能な範囲を超えているので、ステップＳ７７に移行して１〜２オクターブ上又は下にシフトしてノートポジションを検索する。シフトしたポジションがｏｐｅｎｖ  ｕｐｐｅｒ  ｗｉｄｔｈ及びｏｐｅｎｖ  ｌｏｗｅｒ  ｗｉｄｔｈの範囲に入っているか否かを判別し（ステップＳ７９）、範囲に入っている場合にはそのシフトしたフレット番号をノートポジションに決定する（ステップＳ８０）。ステップＳ７８において、減算した値が近いフレット番号の値よりも大きくない場合には、ステップＳ７３又はステップＳ７５で選択した最も近いフレット番号をノートポジションに決定する（ステップＳ８１）。また、ステップＳ７９においてシフトしたフレットが範囲に入らない場合にも、ステップＳ８１に移行してステップＳ７３又はステップＳ７５で選択した最も近いフレット番号をノートポジションに決定する。
【００４６】
ステップＳ８０又はステップＳ８１においてフレット番号を決定した後は、図１４に示すフローにしたがってピッキング方向を決定する（ステップＳ８２）。そして、ＲＡＭ３３の所定の各レジスタに結果を記憶する（ステップＳ８３）。すなわち、選択した弦の番号を割当弦番号ｓにセットし、弦割り当て状態を示すｓｔｒ  ａｓｇｎに「１」（押弦状態）をセットし、押弦フレットを示すｓｔｒｆｒｅｔにフレット番号をセットし、弦割り当てキーナンバーｓｔｒ  ｋｅｙにキー番号をセットし、演奏スタイルｓｔｒ  ｐｉｃｋにピッキング方向をセットする。そして、記憶した各レジスタの内容を弦楽器対応のメッセージとして出力する（ステップＳ８４）。
【００４７】
このように、受信したノートイベントのフレット番号が手の中心位置から所定範囲にない場合には、ノートイベントの音高をオクターブ単位でシフトして新たなアサイン情報を生成する。したがって、例えばキーボードでは演奏可能であるがギターでは演奏不可能なクローズドボイシングの演奏コードを入力した場合に、ギターで演奏可能なオープンボイシングの演奏コードに変換して出力することができる。この結果、ギターらしい響きのコード演奏を実現することができる。
【００４８】
次に、ノートオフ処理について図２７のフローに基づいて説明する。
ノートオフのノートイベントを受信したときは、オフされたキーと同じキーで発音中の弦を検索する（ステップＳ９１）。そして、該当する弦があるか否かを判別し（ステップＳ９２）、該当する弦がある場合にはその弦番号をレジスタｓにセットするとともに、離弦されたノートポジションのフレット番号をレジスタｆにセットする（ステップＳ９３）。そして、ｓｔｒ  ａｓｇｎに「０」をセットして押弦状態から離弦状態に弦ステータスを更新する（ステップＳ９４）。次に、図５に示すイベントステータスにおいて、書き込みポインタｅｖ  ｐｔｒの示す各レジスタの内容を更新する（ステップＳ９５）。すなわち、ｅｖ  ｔｉｍｅにｃｕｒｒｅｎｔ  ｔｉｍｅをセットし、ｅｖ  ｓｔｒにレジスタｓの弦番号をセットし、ｅｖ  ｆｒｅｔにレジスタｆのフレット番号をセットする。そして、ｅｖ  ｐｔｒをインクリメントする。そして、記憶した各レジスタの内容を弦楽器対応のメッセージとして出力する（ステップＳ９６）。
【００４９】
なお、上記実施形態では、キーボード型シンセサイザを例に採って説明したが、この発明である音源のアサイナ装置を適用できる楽器はシンセサイザに限定するものではない。例えば、ＭＩＤＩフォーマットの通常の演奏信号を弦楽器コントロールに適したマルチチャンネルのＭＩＤＩ信号に変換するコンバータ単体に適用してもよい。あるいは、キーボードと弦楽器アサイナからなるＭＩＤＩコントローラでもよい。あるいは、弦楽器アサイナと音源部からなるＭＩＤＩ音源モジュールに適用してもよい。すなわち、弦楽器では直接再現できない鍵盤のキー番号を受けて、これを弦楽器で再現できるようにアサインして送出できる機能を必要とするあらゆる装置にこの発明を適用することができる。
【００５０】
【発明の効果】
この発明によれば、音高と操作位置とが一義的に定まる鍵盤のキー番号を受信すると、仮想の弦楽器において押弦すべき手の中心位置に最も近いフレット番号に受信したキー番号を割り当てる。したがって、１つの音高に対して複数の操作を採り得る弦楽器のアサインを実現することができる。
【００５１】
またこの場合において、記憶手段に記憶されているアサイン情報における仮想押弦に対応する弦が発音中の弦であり、受信したキー番号が発音中の弦の異なるフレット番号に割り当てるものであるときは、発音中の弦のキー番号を受信したキー番号に変更して新たなアサイン情報を生成することにより、ハンマリングオンの奏法やプリングオフの奏法のような弦楽器に固有の特殊演奏の模倣を実現できる。
【００５２】
またさらに、受信したキー番号に対応する仮想押弦の弦のフレット番号が手の中心位置から所定範囲にない場合には、キー番号をオクターブ単位でシフトして新たなアサイン情報を生成することにより、弦楽器で押弦可能な和音構成を実現できる。
【図面の簡単な説明】
【図１】この発明の実施形態におけるシンセサイザーの操作部の平面図。
【図２】実施形態におけるシステム構成を示す概略図
【図３】図２の具体的なシステム構成を示すブロック図。
【図４】ＲＡＭのレジスタメモリの内容を示す図。
【図５】ＲＡＭのレジスタメモリの内容を示す図。
【図６】ＲＡＭのレジスタメモリの内容を示す図。
【図７】ＲＡＭのレジスタメモリの内容を示す図。
【図８】ポジションスキャン処理のフローチャート。
【図９】弦楽器のハンドポジションを説明するための図。
【図１０】ＲＡＭのレジスタメモリの内容を示す図。
【図１１】ハンドポジション処理のフローチャート。
【図１２】ピッキング方向を説明するための図で、（Ａ）は受信したノートイベントを示し、（Ｂ）は弦楽器の押弦パターンを示す。
【図１３】ＲＡＭのレジスタメモリの内容を示す図。
【図１４】ピッキング方向決定処理のフローチャート。
【図１５】ＲＡＭのレジスタメモリの内容を示す図。
【図１６】モード選択処理のフローチャート。
【図１７】ノーマルモードのフローチャート。
【図１８】ＲＡＭのレジスタメモリの内容を示す図。
【図１９】開放弦使用モードのフローチャート。
【図２０】特殊演奏を説明するための図で、（Ａ）は受信したノートイベントを示し、（Ｂ）は弦楽器の押弦パターンを示す。
【図２１】ＲＡＭのレジスタメモリの内容を示す図。
【図２２】ソロモードのフローチャート。
【図２３】ＲＡＭのレジスタメモリの内容を示す図。
【図２４】オープンボイシングを説明するための図で、（Ａ）は受信したノートイベントを示し、（Ｂ）はノートポジションを示す。
【図２５】オープンボイシングを説明するための図で、（Ａ）はシフトしたノートイベントを示し、（Ｂ）は変更したノートポジションを示す。
【図２６】オープンボイシングのフローチャート。
【図２７】ノートオフ処理のフローチャート。
【符号の説明】
２１  キースキャナ
３１  ＣＰＵ
３３  ＲＡＭ
３４  シリアルインタフェース
【図１】
0003567297.tif 000006
【図２】
0003567297.tif 000007
【図３】
0003567297.tif 000008
【図４】
0003567297.tif 000009
【図５】
0003567297.tif 000010
【図６】
0003567297.tif 000011
【図７】
0003567297.tif 000012
【図８】
0003567297.tif 000013
【図９】
0003567297.tif 000014
【図１０】
0003567297.tif 000015
【図１１】
0003567297.tif 000016
【図１２】
0003567297.tif 000017
【図１３】
0003567297.tif 000018
【図１４】
0003567297.tif 000019
【図１５】
0003567297.tif 000020
【図１６】
0003567297.tif 000021
【図１７】
0003567297.tif 000022
【図１８】
0003567297.tif 000023
【図１９】
0003567297.tif 000024
【図２０】
0003567297.tif 000025
【図２１】
0003567297.tif 000026
【図２２】
0003567297.tif 000027
【図２３】
0003567297.tif 000028
【図２４】
0003567297.tif 000029
【図２５】
0003567297.tif 000030
【図２６】
0003567297.tif 000031
【図２７】
0003567297.tif 000032