図1は本発明の電子楽器の外観を示す図である。この電子楽器は、楽器本体IとディスプレイDとが別体となっており、ケーブルCにより接続されている。楽器本体Iはギターに類似した形状を有しており、ボディBとネックNとからなる。ボディBにはパッドP、ミュートスイッチMS、ホイールW、パネルスイッチPSが設けられているとともに、メモリカートリッジMCが着脱可能に装着されている。
パッドPには打撃センサ(圧電センサ等)が設けられており、演奏者の指等による打撃の有無、及び打撃強度を検出可能になっている。打撃に応じて、楽音が発生される。また、このパッドPはその円周方向に回転可能に構成されており、演奏者による回転操作を検出する回転センサ(ロータリーボリューム等)が設けられている。回転操作により、発生される楽音の音高等を変化させることが出来る。回転操作されたパッドPは、演奏者による回転操作から開放されると、基準位置に復帰するように構成されている。さらに、このパッドPは内部に圧力センサが組み込まれており、演奏者による押圧操作を検出可能である。押圧操作により、発生される楽音の音量や音色、効果等を変化させることが出来る。
ミュートスイッチMSはパッドPの操作により発音された楽音を消音させるのに用いる。すなわち、パッドPの操作によって発音された楽音は、ミュートスイッチMSが押されるまで持続する。ミュートスイッチMSには押圧速度検出センサが設けられており、検出された押圧速度によって消音の仕方、例えば消音する際のリリース時間の制御等を変更制御する。なお、ミュートスイッチMSを押す前に再度パッドPを操作したときは、それまで発音されていた音は消音され、それに引き続いて新たな音が発音される。
このミュートスイッチMSには発音している楽音を消音させる機能の他に、新たに発音する楽音の音色を変更/制御する機能も有している。すなわち、ミュートスイッチMSを押しながらパッドPを操作したときと、ミュートスイッチMSを押さずにパッドPを操作したときとで、異なる音色で発音するようにする。例えば、ミュートスイッチMSを押さずにパッドPを操作したときは通常のギターの音色、ミュートスイッチMSを押しながらパッドPを操作したときはミュートギターの音色で発音するようにする。或いは、ミュートスイッチMSに押圧力を検出する押圧力センサを設け、ミュートスイッチMSを押しながらパッドPを操作したとき、検出されたミュートスイッチMSの押圧力に応じて音源回路のフィルタパラメータを制御するようにする。このようにミュートスイッチMSの操作の有無により発生される楽音の音色が変化するようにすると、ギターの弦を手のひらで押さえながらピッキングしたときと、そうでない時とで音色が変化するのと同様の効果を得ることができ、簡単な操作で表現力の高い演奏が可能となる。なお、音色はギターに限らないことはいうまでもない。
ホイールWは演奏者によって回転操作可能に構成されており、回転操作を検出する回転センサ(ロータリーボリューム等)を備えている。演奏者はこのホイールWを回転操作することにより、音量や音色、効果等を変化させることが出来る。
メモリカートリッジMCはROMカートリッジ、或いはRAMカートリッジで構成されており、複数の曲データが記憶されている。各曲データは、メロディパート、ベースパート、コードパート、リズムパート等、複数の演奏パートから構成されている。本電子楽器は、これら複数の演奏パートのうち、1つのパートの演奏をパッドPの操作により行い、その他のパートの演奏を記憶されている曲データに従って自動演奏する。
また、ボディBには、図示しないスピーカ、MIDI端子等も設けられている。
ネックNには多数(この実施の形態においては20個)のフレットスイッチFSが1列に設けられている。押されたフレットスイッチFSの位置に応じて、パッドPの打撃により発生される楽音の音高が制御される。また、このフレットスイッチFSの下部には圧力センサが設けられており、フレットスイッチFSを押したときの押圧力を検出できるようになっている。フレットスイッチFSの押圧力により、発生される楽音の音量や音色、効果等を変化させることが出来る。
ディスプレイDはCRT表示器等からなり、演奏位置等を表示する。なお、ディスプレイDは楽器本体Iに内蔵されてもよい。
図2はパネルスイッチPSの詳細を示す図である。PS1及びPS2は曲選択スイッチであり、メモリカートリッジMCに記憶された複数の曲データのうち、いずれかを選択するためのスイッチである。PS1で曲番号を+方向に、PS2で−方向に選択する。選択された曲番号は、ディスプレイDに表示される。
PS3はスタート/ストップスイッチであり、選択された曲データの演奏をスタート或いはストップさせる。
PS4からPS7は制御パート選択スイッチであり、PS4はメロディパートを、PS5はベースパートを、PS6はコードパート1を、PS7はコードパート2をそれぞれ選択する。なお、ベースパート、コードパート1、コードパート2は、バッキングパートとしてメロディパートと大別される。パッドPの操作により、制御パート選択スイッチによって選択されたパートの演奏が行われる。
PS8、PS9は制御対象パートとしてメロディパートが選択されているときのメロディパート演奏モードを選択するためのスイッチである。PS8はメモリカートリッジMCに記憶されている曲データ中のメロディパートのシーケンスデータに基づいて演奏をするシーケンスモードのスイッチであり、PS9は曲データ中のメロディパートのシーケンスとは異なるアドリブ演奏をするアドリブモードのスイッチである。
PS8はシーケンスモードのうちのメロディモード1とメロディモード2を選択的に、交互に設定する。メロディモード1はパッドPを操作する毎にメロディパートのシーケンスを1つ進めてメロディパートの音を発音させるモードである。すなわち、メロディ以外のパートに対して、パッドPの操作を遅らせれば、メロディパートの進行は遅れ、逆に、パッド操作を進ませれば、メロディパートの進行は進む。メロディ音が抜ける可能性はないが、一旦メロディパートの進行位置とメロディ以外のパートの進行位置がずれると、メロディパートの進行位置を他のパートの進行位置に復帰させることは難しい。
一方、メロディモード2はパッドPの操作とは無関係に、メロディ以外のパートの進行に合わせてメロディパートのシーケンスを進め、パッドPの操作があったとき、その時点におけるメロディパートの音を発音させるモードである。すなわち、パッドPの操作とは無関係にメロディパートも進行するため、パッドの操作がなければ、メロディパートの音は発音されないまま進んでいく。メロディ音が抜ける可能性はあるが、メロディパートの進行位置とメロディ以外のパートの進行位置は常に一致している。メロディモード1よりも初心者に適した演奏モードである。
PS9はアドリブモードのうちのマニュアルアドリブモードと自動アドリブモードを選択的に、交互に設定するスイッチである。マニュアルアドリブモードは複数のフレットスイッチFSのそれぞれに、選択されている曲データの調にあった音階の音を割り当てておき、フレットスイッチFSの操作によって音高を指定しながらパッドPを操作することで、メロディパートのアドリブ演奏を行うモードである。フレットスイッチFSに割り当てる音階は後述する音階選択スイッチPS10からPS14によって選択可能である。フレットスイッチFSに割り当てる音階は曲データの調にあった音階であるので、フレットスイッチFSを適当に押してパッドPを操作するだけで、曲の調にあったアドリブ演奏を容易に行うことが出来る。
一方、自動アドリブモードは複数のフレットスイッチFSのそれぞれに所定のアドリブフレーズを割り当てておき、いずれかのフレットスイッチを操作しながらパッドPを操作することで、所定のアドリブフレーズに沿ったアドリブ演奏を行うモードである。アドリブフレーズは曲の調にあったものがフレットスイッチFSに割り当てらる。従って、フレットスイッチFSを適当に押してパッドPを操作するだけで、曲の調にあったアドリブ演奏を容易に行うことが出来る。しかも、前述のマニュアルアドリブモードは同じフレットスイッチFSを押したままだと同じ音高の音が発生されるため、アドリブらしい演奏をするには通常のギター演奏と同様にフレットスイッチFSをすばやく押し替えなければならないが、自動アドリブモードは同じフレットスイッチFSを押したままであっても次々と異なる音高の音が発生される。従って、マニュアルアドリブモードよりも初心者に適した演奏モードである。
PS10からPS14は音階選択スイッチである。これらのスイッチの操作により、フレットスイッチFSに割り当てる音階のタイプを選択する。PS10はダイアトニックスケール選択スイッチであって、曲データの調にあったダイアトニックスケール(7音音階)がフレットスイッチFSに割り当てられる。曲データの調はこの実施の形態においては曲のシーケンスデータをもとに検出するようにしているが、演奏者が所定の調を指定したり、予め曲データ中に調を指定するデータが埋め込まれているようなものであってもよい。
PS11はペンタトニックスケール1選択スイッチであって、曲データの調にあった第1のペンタトニックスケール(5音音階)がフレットスイッチFSに割り当てられる。PS12はペンタトニックスケール2選択スイッチであって、曲データの調にあった第2のペンタトニックスケールがフレットスイッチFSに割り当てられる。第1のペンタトニックスケールと第2のペンタトニックスケールは同じ調であっても異なる5音が選ばれており、スケールを切り換えることで同じ5音音階でも異なる雰囲気の演奏となる。例えば第1ペンタトニックスケールとしてダイアトニックスケールから「ヨナヌキ」と呼ばれる第4音と第7音を取り去ったスケールを、第2ペンタトニックスケールとして、ブルーノートを伴ったブルーススケールを割り当てることが出来る。もちろん、他のスケールであってもよい。
PS13はコード構成音選択スイッチであって、曲データ中のコード構成音がフレットスイッチFSに割り当てられる。曲の進行に従ってコードが変化するので、そのコード変化に伴い、フレットスイッチFSに割り当てられるコード構成音も変化する。すなわち、コードが変化する時点でフレットスイッチFSに割り当てるコード構成音が更新される。曲データのコードは、この実施の形態においては曲のシーケンスデータを元に検出するようにしているが、演奏者が所定のコード進行を指定したり、予め曲データ中にコード進行を指定するデータが埋め込まれているようなものであってもよい。上述したダイアトニックスケール、ペンタトニックスケール1、2では、曲の調にはあっていてもその時点のコードとは合わない音が発音される可能性があるが、コード構成音をフレットスイッチFS割り当てたときは、その時点のコードとは合わない音が発音されることはない。そのかわり音高種類が少ないため、単調なアドリブ演奏になる恐れがある。
PS14はメロディ構成音選択スイッチであって、曲データ中のメロディパートに現れる音名がフレットスイッチFSに割り当てられる。曲データを複数のフレーズに区分し、各区分毎に、その区分内において出現する音高をフレットスイッチFSに割り当てる。この実施の形態においては、曲データを複数のフレーズに区分する際、曲データ中に含まれている歌詞データの改行コード(フレーズ区切り位置に含まれている)を頼りに区分しているが、演奏者がフレーズの区切り位置を任意に指定したり、曲データのコード進行やメロディ進行を解析して、フレーズの区切り位置を検出するようにしてもよい。メロディ構成音をフレットスイッチFSに割り当てたときは、上述したコード構成音と同様にその時点でのコードと合わない音が発音されることは無いが、単調なアドリブ演奏になる恐れがある。なお、メロディ構成音の場合、コード構成音と比べて、よりメロディに近いアドリブ演奏を行うことが出来る。
PS15はパニックスイッチであり、メロディシーケンスのメロディモード1の演奏の際、演奏者のパッドP操作が他のパートに対して遅すぎる、或いは早すぎるため、メロディの進行位置が本来の進行位置と大幅にずれてしまったとき、本来の位置に修正するためのスイッチである。このスイッチを押すことによりメロディシーケンスモードは解除され、メロディパートは本来の進行位置に復帰し、他のパートと同様の自動演奏に切り替わる。その後、再びパッドPの操作があると、メロディシーケンスモードに切り替わる。このスイッチの機能は、曲のメロディをよく知らず、演奏をしている内にどこを演奏しているのかわからなくなってしまった場合、すなわちパニック状態に陥ったときに有効な機能である。
図3はハード構成の概略ブロックを示す図である。CPU(中央処理装置)1は電子楽器全体の動作を制御するものであり、ROM(リード・オンリィ・メモリ)3に記憶された制御プログラムにしたがって処理を実行する。また、CPU1と各部とはバス2を介して接続されており、各種データの送受が行われる。
RAM(ランダム・アクセス・メモリ)4はCPU1による処理時において発生する各種データを一時的に記憶するレジスタ、フラグ等の領域が設けられているとともに、メロディ演奏やバッキング演奏をする際に用いる制御対象パートデータやメロディパートデータ(詳しくは後述)を記憶する領域も設けられている。タイマ5はCPU1に対して割り込み信号を供給するもので、所定周期の割り込み信号を発生する。メモリカートリッジMCに記憶されたシーケンスデータやRAM4に記憶された制御対象パートデータは、CPU1が実行する所定周期毎の割込処理によって読み出される。
6はMIDI(ミュージカル・インストゥルメント・ディジタル・インターフェース)インターフェース(I/F)であり、外部装置とデータの送受を行う。例えば、外部の音源モジュールへと演奏イベントを出力することにより、より高音質な音で演奏をすることができる。7はパッドPの操作を検出するためのパッド検出回路であり、パッドPの操作の有無、及び操作されたときの打撃強度を検出する。8はスイッチ類検出回路であり、パネルスイッチPS、フレットスイッチFS、ミュートスイッチMSのオン/オフ操作、ホイールWの回転操作、パッドPの回転操作および押圧操作、ミュートスイッチの押圧操作、フレットスイッチの押圧操作等を検出する。CPU1は供給された操作情報に従って各種機能を実行する。
音源回路9は供給された演奏イベントデータにもとづいて楽音波形信号を形成する。この実施の形態においては音源回路の方式として、波形メモリ読み出し+フィルタ方式で音源回路を構成する。なお、周知のFM(周波数変調)方式や物理モデルシミュレーション方式、高調波合成方式、フォルマント合成方式、発振器とフィルタを組み合わせたアナログシンセサイザ方式等を用いてもよい。音源回路9において形成された楽音波形信号は、サウンドシステム10において音響として放音される。なお、専用のハードを用いて音源回路を構成するものに限らず、DSP(デジタルシグナルプロセッサ)+マイクロプログラムを用いて音源回路を構成するようにしてもよいし、CPU+ソフトウェアのプログラムで音源回路を構成するようにしてもよい。また、1つの回路を時分割で使用することによって複数の発音チャンネルを形成するようなものでもよいし、1つの発音チャンネルが1つの回路で構成されるような形式のものであってもよい。
Dは前述のディスプレイである。
図4はシーケンスモードにおけるメロディモード1の演奏例を示す図である。
(A)はシーケンスデータ中に記憶されている本来のメロディデータを表し、(B)はその下に示す上向き矢印のタイミングにおいて演奏者がパッドPを操作することにより発音される音を表す。横方向に延びる太い実線が発音期間を示す。
この例においては、演奏者によるパッドPの操作が本来のメロディの演奏タイミングに対して若干遅れている。なお、図中「ミュート」と示した時点でミュートスイッチMSを操作している。この時点で発音中の音は消音されるので、スタッカート気味の演奏が出来る。これ以外の部分はバッドPの操作によってそれまで発音されていた音が消音されると共に、それに引き続いて新たな音の発音が開始されるので、レガートでの演奏になる。
図5はシーケンスモードにおけるメロディモード2の演奏例を示す図である。(A)は図4と同様にシーケンスデータ中に記憶されている本来のメロディデータを表し、(B)は図4と同じタイミングで演奏者がパッドPを操作したときに発音される音を表す。この例においては、演奏者によるパッドPの操作が本来のメロディの演奏タイミングに対して若干遅れており、特に、Lで示す音については、その本来の発音期間内においてパッドPの操作が無かったため、発音されない。また、図中「ミュート」と示した時点でミュートスイッチMSを操作し、この時点で発音中の音が消音されるのは図4の場合と同様である。
次に、図6を用いて音階割り当てテーブルについて説明する。音階割り当てテーブルはアドリブ演奏の時にフレットスイッチFSに割り当てられる複数種類の音階を記憶したテーブルであり、RAM4に記憶される。ここでは開放位置および1〜20の20個のフレットスイッチの合計21のポジションの各々に割り当てる音高の例が示されている。「ダイアトニック」、「ペンタトニック1」、「ペンタトニック2」については演奏曲の調により音階が決定され、「コード構成音」については演奏曲中で出現するコードに基づいて音階が決定され、「メロディ構成音」については演奏曲中で出現するメロディ音に基づいて音階が決定され、決定された音階音が音階割り当てテーブルに記憶される。
「ダイアトニック」、「ペンタトニック1」、「ペンタトニック2」は1つの曲の中で変更されない。すなわち、演奏曲の開始から終了までテーブル内容は変化しない。なお、曲によっては転調する曲もあるため、曲の途中でテーブル内容が変化するようにしてもよいことはいうまでもない。一方、「コード構成音」と「メロディ構成音」は演奏曲の進行に従って逐次記憶内容が変化する。なぜならば、演奏曲の中の場所によって出現するコードやメロディ音が変化するからである。「コード構成音」は、例えばコード進行が変化する場所において毎回テーブル内容を更新し、「メロディ構成音」は所定のフレーズの区切り毎にテーブル内容を更新するようにすればよい。なお、所定のフレーズは後述する歌詞の区切り位置に基づいて決定するが、メロディパートやその他の演奏パートの構造を解析してフレーズ区切り位置を決定するようにしてもよい。なお、この音階割り当てテーブルの例はほんの一例に過ぎないことはいうまでもない。
次に、図7、図8、図9を用いて演奏曲のデータ構造について説明する。図7は演奏曲の元データを示すシーケンスデータを表している。このシーケンスデータはメモリカートリッジMCに記憶されるものである。シーケンスデータはタイミングデータとイベントデータが演奏の進行順に記憶されているものである。タイミングデータは1つ前のイベントデータとその次のイベントデータの間の発生時間間隔を示すデータであり、所定の音符長(例えば384分音符)を単位としたクロック数という値で表現されている。複数のイベントデータが同時に発生する場合には、タイミングデータとしては「0」が記憶される。
イベントデータはノートイベント、歌詞に関連する歌詞イベント、コントロールチェンジイベントからなる。ノートイベントは演奏曲の音符に対応するノートオン或いはノートオフを示すデータ、音高データ、ベロシティデータからなる。コントロールチェンジデータは曲を演奏する上で必要な種々のデータであり、例えば音量、ピッチベンド、音色切り替えなどのデータが含まれている。各々のノートイベント、コントロールチェンジイベントには1〜16のチャンネルのいずれに属するかを示すチャンネルデータが付されており、このチャンネルデータによって各イベントがどのチャンネルに属するのかを識別するようになっている。
なお、各チャンネルは演奏パートに対応したものであり、チャンネルデータと共に各イベントを記憶することによって、複数パートのイベントデータを混在させて記憶することができる。また、これらのデータの最後にはエンドデータが記憶されている(図示せず)。このシーケンスデータの読み出しは、第1の読み出しポインタによって行われる(詳しくは後述)。
図8は前述の複数パート分の演奏データおよび歌詞イベントからなるシーケンスデータのうち、パッド操作によって読み出される複数種類の制御対象パート(メロディパート、ベースパート、コード1パート、コード2パート)のデータのみを抜き出したものである。制御対象パートデータはRAM4に記憶される。この制御対象パートデータは、メロディパート演奏のうちのメロディモード2、ベースパート演奏、コード1パートの演奏、コード2パートの演奏に用いられる。
制御対象パートデータは、詳しくは後述するが、前述のシーケンスデータ中に含まれる各パートの演奏データを、制御に適した形態に多少加工したものが記憶される。なお、記憶の形式は前述のシーケンスデータと同様にタイミングデータとイベントデータとで構成されるものなので、詳細説明は省略する。この制御対象パートデータは、第2の読み出しポインタによって読み出される。
図9は前述の複数パート分の演奏データおよび歌詞イベントからなるシーケンスデータのうち、メロディパートのデータのみを抜き出したものである。メロディパートデータはRAM4に記憶される。メロディパートデータは前述のシーケンスデータ、制御対象パートデータとは異なり、タイミングデータやコントロールチェンジイベントは含まれていない。また、ノートイベントのうちでも、ノートオンイベントのみが記憶され、ノートオフイベントは記憶されない。このメロディパートデータは、メロディパート演奏のうちのメロディモード1の演奏に用いられる。メロディパートデータの読み出しは、第3の読み出しポインタによって読み出される。
次に図10を用いて、ベースパート演奏、コード1パート演奏、コード2パート演奏の時の演奏音の音高制御について説明する。ベースパート演奏、コード1パート演奏、コード2パート演奏は、読み出された制御対象パートのノートイベントに基づいて発音がなされるが、このとき、押さえられているフレットの位置に応じてオクターブが変化するように制御される。すなわち、フレットのネックに近い部分を操作した場合は低い音高にて発音され、ボディに近い部分を操作した場合は高い音高にて発音される。よって、単にメモリから読み出されたノートイベントが示す音高で発音するだけではなく、操作者が発音される音の高さを制御することが出来るため、変化に富んだ演奏が楽しめる。
図10(A)はROM3に記憶される発音範囲規制テーブルを示す。これは、操作されているフレットポジションに応じて、発音される音高が属する音域を決定するためのテーブルである。例えば、フレットポジション「0」(開放位置)ならばE0〜E2の範囲に、フレットポジション「10」ならばC2〜C4の範囲に、フレットポジション「20」(最もボディ寄り)ならばG#3〜G#5の範囲になるように、フレットポジションが1つ変わる毎に、2半音ずつ、発音範囲が変化している。
図10(B)はこの発音範囲規制テーブルによって発音音高のオクターブが制御される例を示すものである。今、入力音(制御対象パートデータから読み出されたノートイベント)の音高がC4、C3、C2の場合を考える。C4であった場合、フレットポジション0〜9までには発音範囲にそのC4の音高は含まれていない。このとき、C4の音高はC2に変更される。フレットポジション10〜20までには発音範囲にC4の音高が含まれるため、音高は変更されない。
入力音がC3であった場合、フレットポジション0〜3までには発音範囲にそのC3の音高は含まれていない。このとき、C3の音高はC1に変更される。フレットポジション4〜16までには発音範囲にC4の音高が含まれるため、音高は変更されない。そして、フレットポジション17〜20までには発音範囲にC3の音高が含まれないため、C3の音高はC5に変更される。
入力音がC2であった場合、フレットポジション0〜10までには発音範囲にC2の音高が含まれるため、音高は変更されない。フレットポジション11〜20までには発音範囲にC2の音高は含まれない。このとき、C2の音高はC4に変更される。すなわち、変更規則としては、「入力音が発音範囲に含まれていなければ、その発音範囲に含まれる音高であって、偶数の添字がついた音高は別の最も近い偶数の添字がついた音高に、奇数の添字がついた音高は別の最も近い奇数の添字がついた音高に、それぞれ変更される」ということになる。なお、この音高変更例はほんの一例に過ぎない。添字の偶数、奇数は問わないようにしてもよい。規制する発音範囲も図示のものに限らない。
次に、図11を用いてディスプレイDにおける表示例を示す。この例においては、ディスプレイDには歌詞、メロディパート、ベースパート、コード1パート、コード2パートの各演奏タイミング、選択されているパート、現在の楽曲の進行位置、現在の操作者の操作位置、進み具合が表示される。図11において、歌詞、メロディパートの演奏タイミング、ベースパートの演奏タイミング、コード1パートの演奏タイミング、コード2パートの演奏タイミングが、それぞれ左から右方向に向かって進行が進むような形式で、縦に並べて表示されている。メロディパート、ベースパート、コード1パート、コード2パートについては四角で表す部分が発音している部分である。すなわち、四角の左端が発音開始タイミング、横方向の長さが発音時間に相当する。なお、ノートイベントに含まれるベロシティ値を検出して、該四角の縦方向の長さで示すことにより、パッドを操作するときの推奨強度を表示してもよい。
ドットの網掛けにより、制御対象パートとして選択されているパートが表示されている。図11においてはメロディパートが選択されている。また、現在の楽曲の進行位置が縦の実線により表示されている。この縦の実線は、楽曲の演奏が進むにつれて、右側に移動していく。また、縦線の網掛けにより現在の操作者の操作位置が表示されている。図11においてはメロディパートの発音タイミングを示す四角が左から3つ分塗りつぶされている。これは、現在の操作位置が3つ目の音符の位置であることを示している。
「進め」、「待て」で示す斜線による網掛けの部分は、進み具合が表示される。楽曲の進行位置と操作者による操作位置がほぼ同じ位置の場合、「進め」が点灯する。カラー表示可能なディスプレイであれば、例えば青色で点灯する。楽曲の進行位置に対して操作者による操作位置が遅れている場合は、「急げ」を表すために「進め」の表示が点滅する。逆に、楽曲の進行位置に対して操作者による操作位置が進んでいる場合は、「待て」が点灯する。カラー表示可能なディスプレイであれば、例えば赤色で点灯する。この表示により、操作者は自分の操作をそのまま続けるべきなのか、早めるべきなのか、或いは少し待つべきなのかが一目で把握できる。なお、表示形態はこの例に限らず、進み具合表示として「進め」、「急げ」、「待て」の3種類を用意してもよい。
次に、図12から図43を用いて、CPU1による処理の流れを説明する。図12はパネルスイッチ処理を示すフローチャートである。この処理は所定期間毎、例えば10ms毎に実行される。ステップs1においてパネルスイッチを走査する。ステップs2においてスイッチ状態に変化があったか否かを判断し、変化があればステップs3にて変化のあったスイッチに応じた処理を実行する。
図13は前述のステップs3における「変化のあったスイッチに応じた処理」の一部である曲選択スイッチ処理を示すフローチャートである。ステップs11において押されたスイッチに対応する曲を選択し、メモリカートリッジMCからシーケンスデータを読み出す。ステップs12にて読み出されたシーケンスデータ中の複数の演奏パートのうち、制御対象となるパートを抽出する。抽出の一例として、メロディパートはチャンネル4の演奏パートを、ベースパートは音色名が「○○ベース」に対応するプログラムチェンジイベントが初期音色として記憶されている演奏パートを、コード1はすべての演奏パートの中でドラムパートを除き音数が最も多い演奏パートを、コード2パートはドラムパートを除き2番目に音数が多い演奏パートをそれぞれ設定する。 ここで、チャンネル4のパートをメロディパートとした理由は、コンピュータミュージックの分野において、一般的にメロディパートとして4チャンネルを使用することが多いからである。このほか、演奏データ中にコメント情報が記憶されており、その中に「メロディ」或いはそれに対応したコメントが入っている場合などは、このコメントを頼りにメロディパートを抽出するようにしてもよい。また、ベースパートとしてプログラムチェンジイベントがベース音色を示すものをペースパートとして決定する以外に、上記メロディパートの抽出方法と同じように、コメント情報を参照してもよいし、全パートの中で、最も低音が多発するパートをベースパートとして決定してもよい。
また、コード1、2パートの抽出方法として、音の長さを考慮し、発音している総時間が最も長いものをこれらのパートとして抽出してもよい。また、音数が最も多いパートをコード1、2パートとしてもよい。また、上記メロディやベースパートと同様、コメント情報を参照してもよい。また、予め、演奏データ中にどのパートを制御対象として抽出すべきかを示す情報を持たせるようにしてもよい。また、自動的に決定した制御対象パートを、操作者が変更できるようにしてもよい。
ステップs13では抽出された制御対象パートのそれぞれについて、制御用のデータを作成する。制御用のデータとは、制御対象パートに対応する元のシーケンスデータの内容を多少修正して、制御に適するようにしたものである。元のシーケンスデータは本発明による制御を意図せずに作成されていることもあり、このようなシーケンスデータをそのまま用いると制御に適さない場合がある。例えば、シーケンスデータの各パート中の音符と音符の間には、若干の無発音期間があるのが普通である(無発音期間が全くないと、常にレガート演奏になってしまい、リズム感のない単調な音楽になってしまう)。メロディパートのメロディモード2、ベースパート、コード1パート、コード2パートの演奏はパッド操作時点における音をならすため、この無発音期間の間に操作者がパッドの操作をすることにより発音指示をした場合、操作があったにも係わらず、何も発音されないという不都合が起こる。このような不都合を防ぐため、予め無発音期間のない演奏データを作成しておき、それを制御対象パートのデータとして記憶するようにしているのである。
無発音期間の無い演奏データは、例えば次のいずれかのルールで作成する。
(1)無発音期間の次にくるノートイベントで、無発音期間を埋める。すなわち、次のノートイベントの発音開始タイミングを、前のノートイベントの消音タイミングの直後とする。
(2)無発音期間の中間に、前のノートイベントの消音タイミングと、次のノートイベントの発音開始タイミングをもってくる。すなわち、前のノートイベントの消音タイミングが無発音期間の中間まで遅れると共に、次のノートイベントの発音開始タイミングが無発音期間の中間まで早まる。
(3)すべてのノートイベントの発音開始タイミングを所定時間だけ早める。これにより、例えば拍の頭で鳴るべき音を発音させようと、拍の頭の付近でパッドを操作したが、操作が若干早すぎたために、意図する音が発音されなかったという不都合を解消することが出来る。それでもなお、無発音期間が存在するのであれば、上記(1)、(2)などを適用して無発音期間をなくす。
なお、無発音期間の無い演奏データの作成ルールは、上記例以外であってもよい。また、制御対象パート毎に、作成ルールを異ならせるようにしてもよい。
次に、ステップs14でシーケンスデータから曲の調を検出する。例えば、出現する各音に、その長さ(音価)を掛けたものの総計をもとめ、その分布からその曲の調を求める。なお、曲の調の求め方は従来より様々なものが発案されているので、そのうちの任意のものを適用することが出来る。そして、ステップs15において、求められた調とシーケンスデータ中のノートデータに基づいて曲のコード進行を検出する。複数の演奏パートを考慮してコード進行を決定してもよいし、ある特定のパートのみに着目してコード進行を検出してもよい。着目する演奏パートは、音数が最も多いパート、平均発音長さが最も長いパートなどにより決定することが出来る。曲のコード進行の求め方も従来より様々なものが発案されているので、そのうちの任意のものを適用することが出来る。
ステップs16では歌詞イベントに含まれる改行コードに基づいて、フレーズの区切り位置を抽出する。前述のようにシーケンスデータには、歌詞の進行に従って歌詞イベントが記憶されている。例えば歌詞イベントは、その歌詞に対応する音符と同じ位置に、1文字分ずつ記憶されている。歌詞を表示する際に、所定のフレーズ区切りで歌詞表示を改行する必要があるので、歌詞イベントのうちの所定のものには、改行を指示する改行コードが含まれている。この改行コードはフレーズ毎に含まれていると考えることが出来るので、この実施例においては、改行コードを検出することにより、フレーズの区切り位置を抽出するようにしている。なお、曲データの構造解析をすることによってフレーズ位置を抽出するようにしてもよい。
ステップs17では、求められた調、コード進行、フレーズに基づいて音階テーブルを作成する。すなわち、求められた調に基づいて、ダイアトニックスケール、ペンタトニックスケール1、2を作成し、コード進行に基づいてコード構成音のスケールを作成し、フレーズ区切り位置によってメロディを区切り、各区間で出現する音高に基づいてメロディ構成音のスケールを作成する。なお、コード構成音、メロディ構成音は、曲の進行に従って逐次変化していくので、この時点では出現するコードの種類分、フレーズ分の各スケールを作成しておき、曲の進行に従ってテーブルを逐次切り換えていくようにする。
ステップs18では、求められた調に応じた自動アドリブフレーズをフレットの数に対応する数だけ作成する。例えばペンタトニックスケール、ダイアトニックスケールでそれぞれ複数種類ずつ作成し、適当にフレットに割り当てる。このとき、フレット位置に応じて、音域が変わるようにするのが好ましい。なお、自動アドリブフレーズは、調のスケール音をランダムに並べたものであってもよいし、所定のフレーズを予め記憶しておき、求めた調に応じて音高を修正して作成するようにしてもよい。
図14は前述のステップs3における「変化のあったスイッチに応じた処理」の一部であるスタート/ストップスイッチ処理を示すフローチャートである。ステップs21において自動演奏中であることを示すランフラグRUNが1であるか否かを判断し、1ではない、すなわち非自動演奏中である時は、ステップs22で自動演奏処理(後述)を許可する。これにより自動演奏処理が開始される。続くステップs23では第1、第2、第3、第4の読み出しポインタをそれぞれ対応するデータの先頭へとセットする。
一方、ステップs21でランフラグRUNが1であると判断したときはステップs24で自動演奏処理を禁止することにより、自動演奏を停止させ、ステップs25で音源回路へオールノートオフコマンドを出力することによりその時点で発音中であった音を消音させる。
図15は前述のステップs3における「変化のあったスイッチに応じた処理」の一部である制御対象パート選択スイッチ処理を示すフローチャートである。ステップs31で、発音中の制御対象パートの音が有れば、その音に対応するキーオフイベントを音源回路の制御対象パートのチャンネルへと出力する。これにより、制御対象パートが変更されたとき、前の制御対象パートの音が消音される。
ステップs32では押されたスイッチに応じて制御対象パートを変更する。ステップs33では変更後の制御対象パートを示すため、ディスプレイDにおける制御対処パートの表示を変更するとともに、選択されたパートに対応したLEDを点灯させる。
次に、ステップs34では新たに選択された制御対象パートがメロディパートであるか否かを判断する。メロディパートではないときは、この後、直ちにこの制御対象パート選択スイッチ処理を終える。メロディパートであったときは、ステップs35でシーケンスモードであるか、それともアドリブモードであるかを判断する。アドリブモードであれば、制御対象パート選択スイッチ処理を終える。シーケンスモードであったならば、ステップs36にてメロディモードが1であるのか、それとも2であるのかが判断される。メロディモードが2であるならば制御対象パート選択スイッチ処理を終える。メロディモードが1であったとき、ステップs37でメロディパートの自動演奏を実行することを示すフラグAUTOを1にセットする。これにより、メロディパートは自動演奏状態、すなわち、操作者がパッドを操作しなくても自動的にメロディ演奏がなされる状態になる。また、メロディパートの自動演奏は、現在の楽曲の進行位置と同期したものとなる。
これは、次のような理由による。メロディモード1はパッド操作をしない限り次の音に移行しないため、制御対象パートを他のパートからメロディパートに切り換えたとき、直ちにパッドを操作しなければメロディの進行位置はどんどん遅れてしまう。しかしながら、他の演奏パートからメロディパートに切り換えた直後であるので、操作者はメロディパートの演奏がどのように進行していくのか、すなわち、どのようにパッドを操作すれば正しいメロディが演奏されるかがわからない場合が多い。従って、切り換えた直後はメロディパートの演奏を自動的に実行することによって、操作者にメロディパートの流れを把握させ、その後、任意の時点でパッド操作を開始することにより、その時点から操作者の操作によってメロディパートの演奏が制御されるようにするのがよいからである。
図16は前述のステップs3における「変化のあったスイッチに応じた処理」の一部であるシーケンススイッチ処理を示すフローチャートである。ステップs41では制御対象パートがメロディパートであるか否かを判断し、メロディパート以外であれば、以下の処理は関係ないのでこの処理を終了する。メロディパートであったとき、ステップs42で現在のモードがシーケンスモードであるのか、それともアドリブモードであるのかを判断する。シーケンスモードであった場合は、ステップs43でメロディモード切り替え処理(後述)を実行する。一方、アドリブモードであった場合は、ステップs44でシーケンスモードに切り替え、ステップs45でメロディモードが1であるのか、2であるのかを判断する。メロディモードが1であれば前述のステップs37と同様に、ステップs46でフラグAUTOを1にセットする。これにより、現在の楽曲の進行位置と同期したメロディパートの自動演奏が実行される。メロディモードが2であればこのステップs46の処理は行わない。そして、ステップs47では発音中のメロディパートの音があれば対応するキーオフイベントを音源回路のメロディパートのチャンネルへと出力し、該音を消音させる。そしてステップs48で、選択されたモードに応じたLEDを点灯させる。
図17は前述のステップs43におけるメロディモード切り替え処理を示すフローチャートである。ステップs51では現在メロディモード1が設定されているのか、それともメロディモード2が設定されているのかを判断し、メロディモードが1であればステップs52でメロディモードを2に設定する。一方、メロディモードが2であればステップs53でメロディモードを1に設定し、ステップs54でフラグAUTOを1にセットする。これにより、現在の楽曲の進行位置と同期したメロディパートの自動演奏が実行される。
図18は前述のステップs3における「変化のあったスイッチに応じた処理」の一部である音階選択スイッチ処理を示すフローチャートである。ステップs61において押されたスイッチに対応する音階割り当てテーブルを選択する。そして、ステップs62にて必要に応じて最新のフレットポジションを格納しているフレットレジスタFRETの位置の音名が、今までのものと今回のものとで一致、または近い値になるように、必要に応じて音階割り当てテーブルの内容を書き替える。ステップs63では選択された音階に対応するLEDを点灯させる。
図19は前述のステップs3における「変化のあったスイッチに応じた処理」の一部であるアドリブスイッチ処理を示すフローチャートである。ステップs71において、制御対象がメロディパートに設定されているか否かを判断する。メロディパート以外であればこの処理を終了する。一方、メロディパートが設定されていれば、ステップs72にてアドリブモードが設定されているのか、シーケンスモードが設定されているのかを判断する。シーケンスモードが設定されている場合は、ステップs73でアドリブモードに切り替える。一方、アドリブモードが設定されている場合は、ステップs74においてマニュアルアドリブモードに設定されているのか、それとも自動アドリブモードに設定されているのかを判断する。マニュアルアドリブモードに設定されている場合は、ステップs75において自動アドリブモードに切り替える。一方、自動アドリブモードが設定されている場合は、ステップs76においてマニュアルアドリブモードに切り替える。その後、ステップs77において、設定されたモードに応じてLEDを点灯させる。
図20は前述のステップs3における「変化のあったスイッチに応じた処理」の一部であるパニックスイッチ処理を示すフローチャートである。ステップs81において、制御対象パートがメロディパートであるか否かを判断し、メロディパート以外であればこの処理を終了させる。メロディパートであれば、ステップs82においてシーケンスモードに設定されているのか、それともアドリブモードに設定されているのかを判断する。アドリブモードに設定されている場合は、この処理を終了させる。シーケンスモードに設定されているのであれば、ステップs83にてメロディモード1に設定されているのか、それともメロディモード2に設定されているのかを判断する。メロディモード2に設定されている場合はこの処理を終了させる。メロディモード1に設定されている場合は、ステップs84にてフラグAUTOを1にセットする。これにより、現在の楽曲の進行位置と同期したメロディパートの自動演奏が実行される。そして、ステップs85にて、発音中のメロディパートの音があれば対応するキーオフイベントを音源回路のメロディパートのチャンネルへと出力し、該音を消音させる。
図21は前述のステップs3における「変化のあったスイッチに応じた処理」の一部であるミュートスイッチ処理を示すフローチャートである。ステップs91においてスイッチがオンされたのか、それともオフされたのかを判断し、オンされたのであれば、ステップs92にてミュートスイッチがオンされている状態を示すミュートフラグMUTEを1にセットする。そして、ステップs93にて制御対象パートの音が現在発音中であるか否かを判断し、発音中であれば、ステップs94にて発音中の制御対象パートの楽音に対応するキーオフイベントを、音源回路の制御対象パートに対応するチャンネルへと出力することにより、該発音中の楽音を消音させる。このとき、ミュートスイッチの操作タッチ速度が検出されているので、その速度に応じて、楽音のリリース時間を制御する。例えば速度が速いときはリリース時間を短くし、遅いときはリリース時間を長くする。なお、リリース時間以外の楽音パラメータ、例えばフィルタのカットオフ周波数などを制御することでリリースの仕方を制御するようにしてもよい。このようにミュートスイッチのタッチ速度に応じて楽音のリリースの仕方を制御すると、例えばギターの弦を押さえてミュートする場合に、ブリッジの近辺を押さえた場合と、ブリッジから多少離れた場所を押さえた時とで、音の減衰の仕方が異なるような減少をシミュレートすることが出来る。もちろん、音色がギター以外の時に上述した制御を適用してもよい。
ステップs91にて、ミュートスイッチがオフされたと判断されたときは、ステップs95にてフラグMUTEに0をセットする。
図22は前述のステップs3における「変化のあったスイッチに応じた処理」の一部であるフレットスイッチ処理を示すフローチャートである。ステップs101においてフレットスイッチを走査する。ステップs102にてフレットスイッチの押圧状態にに変化があれば、ステップs103にて操作されているフレットスイッチのうち、最もボディに近いものの位置をフレットポジションレジスタFRETへと格納する。
次に、図23から図28を用いて、パッド打撃センサ処理について説明する。このパッド打撃センサは所定時間(例えば10ms)毎に実行される処理である。まずステップs111にてパッド打撃センサの出力値を読む。パッド打撃センサからの出力値は複数段階(例えば128段階)の値を持ち、パッドの打撃があると、出力値が急激に増加し、ピークに達する。そしてピークに達した後、徐々に減衰していく。ステップs112では値に変化があったかどうかを判断し、ステップs113ではその変化により、出力値がピークを迎えたか否かを判断する。ピークを迎えていたら、パッド操作があったと判断し、ステップs114へと進む。ピーク以外、すなわち、増加している最中である、または減衰中であるという場合は、ステップs113でNOと判断される。ステップs114ではピーク値を打撃強度としてベロシティを格納するレジスタに記憶させる。そしてステップs115にてパッド発音処理を実行する。
図24は前述のステップs115のパッド発音処理の詳細を示すフローチャートである。まずステップs121において制御対象パートがメロディパートであるか否かを判断する。メロディパートであればステップs122へ進み、非メロディパートであればステップs131のメロディモード2及び非メロディパート処理へと進む。ステップs122ではシーケンスモードが設定されているのか、それともアドリブモードが設定されているのかを判断する。シーケンスモードが設定されている場合はステップs123へ進み、アドリブモードが設定されている場合はステップs132のアドリブ処理へと進む。
ステップs123ではメロディモード1が設定されているのか、それともメロディモード2が設定されているのかを判断する。メロディモード1が設定されている場合はステップs124へ進み、メロディモード2が設定されている場合はステップs131へと進む。ステップs124では、フラグAUTOが1にセットされていれば0にリセットする。これにより、今までパッド操作無しでも自動的に演奏されていたメロディパートはパッド操作がないと演奏されない状態となる。そしてステップs125では、発音中のメロディパートの音があれば対応するキーオフイベントを音源回路のメロディパートのチャンネルへと出力し、該音を消音させる。なお、ミュートスイッチの操作により、既に楽音が消音されていれば、ここでの処理は行われない。ステップs126では第3の読み出しポインタを進め、次のメロディパートのデータを読み出す。そしてステップs127で音色変更処理を実行する。
図26及び図27はこの音色変更処理を示すフローチャートである。図26の処理はパッドが操作された時点でミュートスイッチが押されているか否かに応じて楽音の音色を変えるものである。まずステップs151にてミュートフラグMUTEに1がセットされているか否かを判断し、1がセットされていればステップs152においてミュート音に対応するプログラムチェンジ(音色変更コマンド+音色番号)を音源回路の制御対象パートのチャンネルへと出力する。ミュート音に対応するプログラムチェンジとは、例えば非ミュート時の音色としてギターの音色が設定されている場合はミュートギターの音色に対応するプログラムチェンジであり、非ミュート時の音色としてトランペットの音色が設定されている場合はミュートトランペットの音色に対応するプログラムチェンジである。一方、フラグMUTEに1がセットされていない場合は、ステップs153にて非ミュート音(例えば前述のギターやトランペット)に対応するプログラムチェンジを音源回路の制御対象パートのチャンネルへと出力する。このような処理により、ミュートスイッチを押しながらパッドを操作すると、ミュート音が発音され、ミュートスイッチを操作せずにパッドを操作すると、非ミュート音が発音される。なお、上述の例においてはパッドの操作がある毎に必ずプログラムチェンジを音源回路へと出力するようにしたが、前回のパッド操作時と今回の状態が同じであれば、プログラムチェンジを出力せず、状態に変化があったときのみ出力するほうが好ましい。
図27の処理は音色変更処理の他の例を示すものであって、パッドが操作された時点におけるミュートスイッチの押圧力に応じて楽音制御パラメータを変更するものである。この処理では、ステップs161において、ミュートスイッチの押圧力を格納するレジスタMUTE_PRESに格納されている値に応じたフィルタパラメータを作成し、音源回路の制御対象パートのチャンネルへと出力する。これにより、ミュートスイッチが押されていないときは押圧力=0に対応するフィルタパラメータが音源回路へと与えられ、例えばフィルタカットオフ周波数が高い、明るく派手な音色で楽音が発音され、ミュートスイッチが押されているときは、その時の押圧力に応じてカットオフ周波数が低域に移動しているフィルタパラメータが音源回路へと与えられ、丸く柔らかい音色で楽音が発音される。なお、これらの音色変更処理のいずれか一方を適用してもよいし、両方を同時に適用してもよい。
次にステップs128で、読み出されたキーオンイベントデータに含まれているベロシティをパッド操作により得られたベロシティと入れ替えた後、該キーオンイベントを音源回路のメロディパートへと出力する。以上の動作により、それまで発音されていた楽音が消音されると共に、新たに読み出されたノートイベントに対応した音高、パッドの操作強度に応じたベロシティ、ミュースイッチの押圧状態に応じた音色にて楽音が発音され、メロディ演奏が行われる。続いて、ステップs129において、出力したキーオンイベントに対応する表示要素(図11において前述した各パートの四角)の表示態様を変更(図11においては縦線の網掛け)し、操作者が現在どの音を演奏しているのかを表示する。そして、ステップs130において第3、第4の読み出しポインタの位置の差に応じて「進み具合」の表示態様を変更する。第4ポインタは後述する自動演奏処理において進められるものであり、本来のメロディパートの進行と同期して進められるものである。表示態様は、例えば、前述のように第3ポインタと第4ポインタの位置がほぼ一致していれば青色を点灯、第3ポインタの位置が第4ポインタの位置に比べてかなり遅い場合は、青色を点滅、第3ポインタの位置が第4ポインタの位置に比べてかなり進んでいる場合は、赤色を点灯させる。これにより、操作者は自分の操作が適正なのか、または早すぎる、遅すぎるのかがわかり、操作がしやすくなる。
図25は前述のステップs131におけるメロディモード2及び非メロディパート処理を示すフローチャートである。ステップs141において、発音中の制御対象パートの音があれば対応するキーオフイベントを音源回路の制御対象パートのチャンネルへと出力し、該音を消音させる。なお、ミュートスイッチの操作により、既に楽音が消音されていれば、ここでの処理は行われない。ステップs142では図26或いは図27の音色変更処理を実行する。次に、ステップs143において制御対象パートがメロディパートであるか否かを判断し、メロディパートであればステップs144にて、制御対象パートレジスタの内容に基づき、ベロシティをパッド操作により得られたベロシティを入れ替えて、キーオンイベントを音源回路のメロディパートのチャンネルへと出力する。これにより、メロディパートから読み出され、現在の楽曲の進行位置に対応した音高の楽音が、パッド操作により発音され、メロディ演奏が行われる。なお、制御対象パートレスタには、現在の進行位置において制御対象パートから読み出されているノートベントが記憶されている(詳しくは後述)。
一方、制御対象パートがメロディパート以外の時は、ステップs145へ進み、制御対象パートレジスタに記憶されているノートイベントのキーコードのオクターブを、必要に応じて発音範囲規制テーブル内容とフレットポジションレジスタFRETの内容に従って変換し、ベロシティをパッド操作により得られたベロシティを入れ替えて、キーオンイベントを音源回路の制御対象パートのチャンネルへと出力する。これにより、ベースパート、コード1パート、コード2パートのいずれかのパートから読み出され、現在の楽曲の進行位置に対応した音高の楽音が、フレット操作位置に対応したオクターブに変更された状態で、パッド操作により発音され、バッキング演奏が行われる。続いて、ステップs146へと進み、出力したキーオンイベントに対応する表示要素(図11の四角)の表示態様を変更する。
図28は前述のステップs132におけるアドリブ処理を示すフローチャートである。まずステップs171にて発音中のメロディパートの音があれば対応するキーオフイベントを音源回路のメロディパートのチャンネルへと出力し、該音を消音させる。なお、ミュートスイッチの操作により、既に楽音が消音されていれば、ここでの処理は行われない。次にステップs172にてマニュアルアドリブモードが設定されているのか、或いは自動アドリブモードが設定されているのかを判断する。マニュアルアドリブモードが設定されている場合は、ステップs173にてフレットポジションレジスタFRETの記憶内容に対応するノートナンバを、選択されている音階割り当てテーブルから読み出す。一方、自動アドリブモードが設定されている場合は、ステップs174にてフレットポジションレジスタFRETの記憶内容に対応する自動アドリブシーケンスデータのポインタを進め、ノートナンバを読み出す。次にステップs175で図26或いは図27の音色変更処理を実行した後、ステップs176で、ステップs173またはステップs174にて決定されたノートナンバに、パッド操作により得られたベロシティを付加したキーオンイベントを、音源回路のメロディパートへと出力する。これにより、メロディアドリブ演奏がなされる。 次に、図29から図38を用いて、所定時間(例えば10ms)毎に実行される自動演奏処理について説明する。
図29において、ステップs181ではシーケンスデータから読み出されたタイミングデータを格納するレジスタTIME1から所定値Kを減算する。所定値Kは自動演奏処理の周期(例えば10ms)の間に進めるべき単位音符の長さに対応しており、K=(テンポ×分解能×実行周期)/(60×1000)で表される。ここで、「テンポ」は1分間に演奏される4分音符数であり、「分解能」はシーケンスデータのタイミングデータが、4分音符をいくつに分けたものによって記述されているかをかを表す。例えば、前述のようにタイミングデータが384分音符を単位として記述されている場合、384分音符は4分音符を96に分けたものであるから、「分解能」は96となる。「実行周期」は自動演奏処理が実行されるときの処理周期であり、前述のようにこの実施形態においては例えば10msである。従って、「テンポ」が120、「分解能」が96、「割込周期」が10ならば、Kの値は1.92となり、1回の自動演奏処理によってタイミングデータが1.92だけ進むことになる。例えば、タイミングデータの値が「192(=2分音符の長さに相当)」であったとすると、100回の自動演奏処理によって2分音符分の演奏が進むことになる。言い換えると、Kの値を変更することにより、再生テンポを変更することができる。なお、演奏のテンポを変更する方法は、自動演奏処理の実行周期を変更するものや、実行周期はそのままでタイミングデータの値を修正するものあってもよい。なお、レジスタTIME1の初期値としては、図示はしないが演奏スタート時にシーケンスデータの中の最初のタイミングデータがセットされる。
ステップs181の結果、レジスタTIME1の値が0以下になったとき、ステップs182でYESと判断され、ステップs183において第1の読み出しポインタを進め、該ポインタが示すシーケンスデータを読み出す。ステップs184では読み出されたデータがタイミングデータであるか否かが判断される。演奏スタート時には既に先頭のタイミングデータが読み出されているので、ステップs183ではタイミングデータの次の記憶されているイベントデータが読み出される。従って、ステップs184の判断はNOとなり、ステップs185へと進む。
ステップs185では読み出されたイベントデータに応じた処理が実行される。この処理については後述する。その後、再びステップs183へ戻り、第1の読み出しポインタを進め、次のデータを読み出す。イベントデータの次にはタイミングデータが記憶されているので、ステップs184ではYESと判断され、ステップs186でレジスタTIME1に読み出されたタイミングデータが加算される。タイミングデータを加算した結果、TIME1の値が正の値になっていれば、ステップs188へと進む。ノートイベントデータと歌詞イベントデータが連続する場合や、和音に対応したノートイベントデータが存在する場合などは、タイミングデータの値が0或いは0に近い値を取ることもあり、そのような場合は、ステップs187でNOと判断され、さらにステップs183以降を繰り返す。
ステップs188では先読み表示処理(後述)を実行し、その後ステップs189で現在の進行位置表示バーの位置を自動演奏処理の実行周期(例えば10ms)に対応した量だけ右側へと移動させ、次にステップs190で制御対象パートの読み出し処理(後述)を実行する。そして、ステップs191にて音階割り当てテーブルの書き換え処理を行う。音階割り当てテーブルのうち、コード構成音の音階とメロディ構成音の音階に関しては曲の進行に従ってその時点の音階に逐次変更する必要がある。従って、この音階割り当てテーブル書き換え処理では、現在の楽曲の進行位置がコード変更位置であれば、コード構成音の音階を変更されるコードに応じたものに変更し、フレーズの区切り位置であれば、メロディ構成音の音階を、該フレーズ区間に対応したものへと変更する。なお、コード変更位置やフレーズ区切り位置であることの判別は、次のようにすればよい。すなわち、図13において前述したステップs15にてコード進行を検出し、ステップs16にてフレーズを抽出しているので、コードの変更位置やフレーズの区切り位置をこの時点で記憶しておき、図29の自動演奏処理において現在の進行位置を管理し、コード変更位置やフレーズ区切り位置と現在進行位置とを比較することにより判別できる。
図30は前述のステップs185の「イベントデータに応じた処理」の一部である演奏イベント処理を示すフローチャートである。まずステップs201においてメロディパートのイベントであるか否かを判断する。各イベントにはチャンネルナンバが付与されているので、このチャンネルナンバを見ることでどのパートのイベントであるかを判断することが出来る。メロディパートのイベントであったときは、ステップs202にて、それがキーオンイベントであるか否かを判断する。キーオンイベントであったときは、ステップs203にて第4の読み出しポインタを進める。これにより、第4の読み出しポインタは、常に正規の進行位置と同期して進められることになる。次にステップs204にてフラグAUTOが1にセットされているか否かを判断する。1にセットされているときは、ステップs205へ進んで第3の読み出しポインタを第4の読み出しポインタの位置に合わせる。これにより、メロディの自動演奏時は第3の読み出しポインタも正規の進行位置と同期して進むことになり、その後のパッド操作によって、正規の進行位置からメロディモード1の演奏を再開することが可能となる。そして、ステップs206にてこのキーオンイベントを音源のメロディパートのチャンネルへと出力し、メロディパートの楽音が発音される。フラグAUTOが1にセットされていないときは、ステップs207において第3、第4の読み出しポインタの位置の差に応じて、「進み具合」の表示態様を前述のステップs130の処理と同様に変更する。そして、操作者のパッドによるメロディ演奏のため、音源回路へのデータ出力は行わない。
ステップs202においてキーオンイベントではないと判断されたとき(すなわちキーオフイベントやコントロールチェンジイベント)、ステップs208へ進み、フラグAUTOが1にセットされているか否かを判断し、1にセットされていたら、ステップs209にてイベントデータを音源回路のメロディパートのチャンネルへと出力することにより、メロディパートの楽音の消音や音量、ピッチ、音色等の制御がなされる。フラグAUTOが1にセットされていなければ、操作者のパッドによるメロディ演奏のため、音源回路へのデータ出力は行わない。
一方、ステップs201においてメロディパート以外のイベントであったと判断されたとき、ステップs210で制御対象パート以外のイベントであるか否かを判断する。制御対象パート以外のイベントであれば、ステップs211にてイベントデータを音源回路の該当チャンネルへと出力することにより、楽音の発生や消音等がなされる。制御対象パートのイベントであれば、楽音の発音は操作者のパッド操作により行われるため、ここでは音源回路へのデータの出力は行わない。
図31は前述のステップs185の「イベントデータに応じた処理」の一部である歌詞イベント処理を示すフローチャートである。ステップs221では読み出された歌詞に対応する文字の色を変更することにより、歌詞の進行位置を表示する。このとき、歌詞の色が左側から徐々に変化していくようにしてもよいし、一度に変化するようにしてもよい。
図32は前述のステップs185の「イベントデータに応じた処理」の一部であるエンドデータ処理を示すフローチャートである。ステップs231にて自動演奏処理を禁止させい、ステップs232にて音源回路へオールノートオフを出力する。これによって自動演奏は停止する。
図33は前述のステップs188の先読み表示処理の詳細を示すフローチャートである。まずステップs241において現在の進行位置が小節戦に対応するタイミングであるか否かを判断する。小節戦のタイミングであれば、ステップs242にて小節カウントレジスタMEASUREの値を1だけインクリメントし、ステップs243にてその値が5になったか否かを判断し、5になっていれば、ステップs244でMEASUREの値を1にセットし、ステップs245にて過去の4小節分の表示を消去し、表示段をずらす。そして、ステップs246において4小節分の各制御対象パートの演奏イベント及び歌詞イベントをシーケンスデータの中から先読みし、表示のためのデータを作成してディスプレイDへと表示する。すなわち、この例においては、1段の表示量を4小節分とし、これを複数段(例えば2段)表示可能なようにしている。そして、演奏が4小節経過する毎に最も過去の4小節分の表示を消去し、そのかわりに、現在位置から4小節先までの演奏及び歌詞のデータを先読みして表示するようにしている。このとき、過去の4小節消去するをことにより空いた表示領域に、既に表示されている他の段をずらして表示し、空いた領域に最新の4小節分の表示をするようにしている。なお、表示の仕方はこのような表示態様に限るものではない。
図34は前述のステップs190の制御対象パート読み出し処理の詳細を示すフローチャートである。ステップs251では制御対象パートデータから読み出されたタイミングデータを格納するレジスタTIME2から所定値Kを減算する。所定値Kは前述のステップs251にて減算した値と同じ値である。なお、レジスタTIME2の初期値としては、図示はしないが演奏スタート時に制御対象パートデータの中の最初のタイミングデータがセットされる。
ステップs251の結果、レジスタTIME2の値が0以下になったとき、ステップs252でYESと判断され、ステップs253で第2の読み出しポインタを進め、該ポインタが示す制御対象パートデータを読み出す。ステップs254では読み出されたデータがタイミングデータであるか否かが判断される。演奏スタート時には既に先頭のタイミングデータが読み出されているので、ステップs253ではタイミングデータの次の記憶されているイベントデータが読み出される。従って、ステップs254の判断はNOとなり、ステップs255へと進む。
ステップs255では読み出されたイベントデータに応じた処理が実行される。この処理については後述する。その後、再びステップs253へ戻り、第2の読み出しポインタを進め、次のデータを読み出す。イベントデータの次にはタイミングデータが記憶されているので、ステップs254ではYESと判断され、ステップs256でレジスタTIME2に読み出されたタイミングデータが加算される。タイミングデータを加算した結果、TIME2の値が正の値になっていれば、この処理を終了する。ノートイベントデータが連続する場合、タイミングデータの値が0或いは0に近い値を取ることもあり、そのような場合は、ステップs257でNOと判断され、さらにステップs253以降を繰り返す。
図35から図38は前述のステップs255における「イベントデータに応じた処理」の詳細を示すフローチャートである。図35はメロディパートのイベントデータが読み出されたときの処理である。まず、ステップs261にて読み出されたイベントデータがキーオンイベントであるか否かを判断する。キーオンイベントであれば、ステップs262にて該キーオンイベントをメロディレジスタへと書き込む。一方、キーオフイベントであった場合は、ステップs263へと進み、該キーオフイベントに対応し、既に書き込まれているキーオンイベントを、メロディレジスタから消去する。このメロディレジスタは、複数の記憶領域を有し、楽曲の各進行位置において、その時点で発音しているはずのキーイベントを保持するレジスタである。キーオンイベントが読み出されたときはこのレジスタに記憶され、キーオフイベントが読み出されたときは対応するキーオンイベントをレジスタから消去する。基本的にはメロディパートは単音発音であるが、デュエット曲などは複数の音が同時になることもある。この点を考慮して、複数の記憶領域を設けてある。メロディモード2においてパッドが操作されたときは、このレジスタの内容が前述のステップs144にて読み出され、発音される。
図36はベースパートのイベントが読み出されたときの処理である。まず、ステップs271にて読み出されたイベントデータがキーオンイベントであるか否かを判断する。キーオンイベントであれば、ステップs272にて該キーオンイベントをベースレジスタへと書き込む。一方、キーオフイベントであった場合は、ステップs273へと進み、該キーオフイベントに対応し、既に書き込まれているキーオンイベントを、ベースレジスタから消去する。このベースレジスタは、前述のメロディレジスタと同様の機能を持つレジスタである。ベース演奏モードにおいてパッドが操作されたときは、このレジスタの内容が前述のステップs144にて読み出され、発音される。
図37はコード1パートのイベントが読み出されたときの処理である。まず、ステップs281にて読み出されたイベントデータがキーオンイベントであるか否かを判断する。キーオンイベントであれば、ステップs282にて該キーオンイベントをコード1レジスタへと書き込む。一方、キーオフイベントであった場合は、ステップs283へと進み、該キーオフイベントに対応し、既に書き込まれているキーオンイベントを、コードレジスタから消去する。このコード1レジスタも、前述のメロディレジスタと同様の機能を持つレジスタである。コード1演奏モードにおいてパッドが操作されたときは、このレジスタの内容が前述のステップs144にて読み出され、発音される。
図38はベースパートのイベントが読み出されたときの処理である。まず、ステップs291にて読み出されたイベントデータがキーオンイベントであるか否かを判断する。キーオンイベントであれば、ステップs292にて該キーオンイベントをコード2レジスタへと書き込む。一方、キーオフイベントであった場合は、ステップs293へと進み、該キーオフイベントに対応し、既に書き込まれているキーオンイベントを、コード2レジスタから消去する。このコード2レジスタも、前述のメロディレジスタと同様の機能を持つレジスタである。コード2演奏モードにおいてパッドが操作されたときは、このレジスタの内容が前述のステップs144にて読み出され、発音される。
次に、図39から図43を用いて、その他の各種センサの処理について説明する。各処理は所定周期(例えば10ms)毎に実行される。図39はフレットアフタタッチセンサの処理を示すフローチャートである。ステップs301にてフレットアフタタッチセンサの出力を読む。センサ出力に変化があったか否かをステップs302にて判断し、変化があったときは、ステップs303にてフレットアフタタッチセンサの出力値を第1アフタタッチとし、該値を音源回路の制御対象パートのチャンネルへと出力する。第1アフタタッチにより制御される楽音パラメータは、任意に設定可能であるが、例えばビブラートの深さが制御される。したがって、フレットを押さえる強さを変えることによってビブラートの係り具合を制御することが出来る。
図40はパッドアフタタッチセンサの処理を示すフローチャートである。ステップs311にてパッドアフタタッチセンサの出力を読む。センサ出力に変化があったか否かをステップs312にて判断し、変化があったときは、ステップs313にてパッドアフタタッチセンサの出力値を第2アフタタッチとし、該値を音源回路の制御対象パートのチャンネルへと出力する。第2アフタタッチにより制御される楽音パラメータは、任意に設定可能であるが、例えば音量が制御される。したがって、パッドを操作した後、さらにパッドを押し込むように操作することで、楽音を発音させた後の音量を制御することが出来る。なお、パッドアフタタッチセンサとパッド打撃センサとは異なる種類のセンサであり、押し込むような操作では、打撃センサはあまり反応しないようにするとよい。
図41はパッド回転センサの処理を示すフローチャートである。ステップs321にてパッド回転センサの出力を読む。センサ出力に変化があったか否かをステップs322にて判断し、変化があったときは、ステップs323にてパッド回転センサの出力値をピッチベンドの値に変換する。このとき、楽曲の調とその時発音されている楽音の音高とに応じて、パッド回転センサを最大操作した場合に、楽曲の調におけるスケール上の音に達するように、ピッチベンド値に所定の係数を掛ける。このようにすると、パッド回転操作子を最大限に操作した場合に必ずスケール上の音になり、初心者であっても音楽的におかしくない演奏が可能である。そして、係数を掛けたピッチベンド値を音源回路の制御対象パートのチャンネルへと出力する。なお、非発音中にパッド回転センサを操作し、操作した状態でパッドを操作したときは、係数としてどの値を掛ければ最終ピッチがスケール上の音になるかはわからないため、このような場合には係数を掛けず、センサの出力値をそのままピッチベンド値として用いる。
図42はホイールセンサの処理を示すフローチャートである。ステップs331にてホイールセンサの出力を読む。センサ出力に変化があったか否かをステップs332にて判断し、変化があったときは、ステップs333にてホイールセンサの出力値をホイール値とし、該値を音源回路の制御対象パートのチャンネルへと出力する。ホイール値により制御される楽音パラメータは、任意に設定可能であるが、例えばフィルタのカットオフ周波数が制御される。したがって、パッドを操作した後、パッド近傍のホイールを操作することで、楽音の音色を制御することが出来る。
図43はミュートスイッチ圧力センサの処理を示すフローチャートである。ステップs341にてミュートスイッチ圧力センサの出力を読む。センサ出力に変化があったか否かをステップs342にて判断し、変化があったときは、ステップs343にてミュートスイッチ圧力センサの出力値をレジスタMUTE_PRESへと格納する。このレジスタMUTE_PRESの値は、前述のようにパッド操作時の音色制御に用いられる。
なお、上述した例においては、無発音期間を無くした制御対象パートデータというものを予め作成しておき、それに基づいてメロディパートのメロディモード2、ベースパート、コード1パート、コード2パートの演奏するようにしたが、このようなデータを予め作成することはせず、パッドの操作があった時点で、その時点が無発音期間であれば、発音すべきノートイベントをサーチするようにしてもよい。例えば、
(1)パッドの操作があった時点が無発音期間であれば、所定時間後にノートイベント(ノートオン)が有るかどうかチェックする。ノートイベントが有れば、その音で発音する(図44(A))。
(2)(1)でノートイベントが無ければ、前後所定区間(例えば1小節)内にノートイベントが有るかどうかチェックする。ノートイベントが有れば、そのうちの最も近いノートイベントの音で発音する(図44(B))。
(3)(2)でもノートイベントがなければ、パッド操作時点における制御対象パート以外のパートの音を探し、見つかった音からコードを検出し、該コード構成音のうち、少なくとも1つを発音する(メロディパート、ベースパートの時は1音を発音、コード1、2パートの時は複数音を発音)。
といった具合にしてもよい。
次に、他の実施の形態について説明する。この実施の形態においては、前述の形態とは次の点で異なる。
(1)厳密な調検出やコード検出を行うことなく、スケール音、コード音を決定する。
(2)いずれかのフレットスイッチを押しながらパッドを操作したときはアドリブ演奏モード、フレットスイッチを押さずにパッドを操作したときはシーケンス演奏モードに自動的に切り替わる。
(3)アドリブ演奏モードにおいて、発音中にフレットスイッチをオフしたら、その時点で鳴っている自動演奏楽音のうちのいずれか最も近い音高へと自動的に移行する。その後、再度フレットスイッチが操作されるか、またはパッドが操作されるまで、その時点で鳴っている自動演奏楽音のうちのいずれか最も近い音高へと自動的に移行する動作が継続する(アドリブ追従モード)。
図45から図51を用いて、他の実施の形態について詳しく説明する。なお、ここでは前述の装置と異なる部分のみを説明する。図45はスケール音検出処理を示すフローチャートである。この処理は、前述の図13におけるステップs14の調検出、及びステップs17の音階割り当てテーブル作成の代わりに実行されるものである(その他の処理は省略した)。ステップs351にて、曲全体で出現する音数、或いは数×音価(音の長さ)を、各音名毎に求め、多いほうから順位を付ける。ステップs352では順位付けされた音名のうち、上位7音をスケール音として決定し、それに基づいて音階割り当てテーブルを作成する。すなわち最も多く出現する7音を、楽曲の調におけるスケール音とほぼ等価であると見なし、上位7音をその楽曲のスケール音としてしまうのである。このようにすると、複雑な調検出のアルゴリズムが不要となり、装置を簡略化することが出来る。
図46はパッド音発音処理を示すフローチャートである。この処理は前述の図24に代わる処理である。まずステップs361において、いずれかのフレットスイッチがオンされているか否かを判断する。フレットスイッチがオンされているときは、ステップs362にてモードをアドリブ演奏モードに設定すると同時に、アドリブ追従モード(後述)も解除する。その後ステップs363にてアドリブ演奏音決定処理を実行した後、ステップs364で、決定した音で発音させる。一方、すべてのフレットスイッチが離された状態でパッドの操作があったときは、ステップs365にてモードをシーケンス演奏モードに設定し、ステップs366でシーケンス演奏音を発音させる。このステップs366の処理は前述のシーケンスモードにおける処理と同様の処理であり、ここでの詳細説明は省略する。
図47は前述のステップs363におけるアドリブ演奏音決定処理を示すフローチャートであり、コード音の音階で発音する場合である。ステップs371において、自動演奏(ドラムパート以外のパート)において現在発音されているすべての音名をサーチする。ステップs372では、見つかった音名に基づいて音階割り当てテーブルを作成する。すなわち、パッドが操作された時点で、自動演奏において発音されている音名を、その時点におけるコード構成音とほぼ等価であると見なしている。このようにすると、複雑なコード検出のアルゴリズムが不要となり、装置を簡略化することが出来る。なお、パッドが操作された時点を含む所定区間(例えば1拍)の間に発生する音名を検出し、その時点におけるコード構成音としてもよい。そして、ステップs373で操作されているフレットに対応する音を音階割り当てテーブルから探し、発音する音を決定する。
図48は前述のステップs363におけるアドリブ演奏音決定処理を示すフローチャートであり、スケール音の音階で発音する場合である。スケール音の音階割り当てテーブルは前述のステップs352において作成されているので、ステップs381では操作されているフレットに対応する音を音階割り当てテーブルから探し、発音する音を決定する。
図49は前述のステップs363におけるアドリブ演奏音決定処理を示すフローチャートであり、コード音とスケール音が混合された音階で発音する場合である。すなわち、自動演奏において鳴っている音名が7音に満たない場合や、8音以上ある場合に、スケール音を考慮することによって7音にそろえるようにする。まずステップs391にて、自動演奏(ドラムパート以外のパート)において現在発音されているすべての音名をサーチする。次にステップs392で、見つかった音名が7音であるか否かを判断し、7音であった場合はステップs393でその7音を元に音階割り当てテーブルを作成する。ステップs392で7音ではないと判断されたとき、ステップs394で7音よりも少ないか、それとも多いかを判断する。7音よりも少ないときは、ステップs395で7音になるようにスケール音のうちの上位の音名の中で、コード音に含まれていない音を加えて7音にする。ステップs394で7音よりも多いと判断されたときは、ステップs396でいずれかの音を削除して7音とする。このとき、削除する音はスケール音の上位に無い音を優先的に削除する。そしてステップs393でその7音を元に音階割り当てテーブルを作成する。これらの後、ステップs397において、操作されているフレットに対応する音を音階割り当てテーブルから探し、発音する音を決定する。このようにすると、次のような利点がある。スケール音のみによって音階を決定する方法は、曲が進行しても音階が変化しないため、パッド操作時点におけるコードとの相性が悪い音が発生する可能性がある。一方、コード音のみによって音階を作成する方法は、コード進行に伴って逐次音階が変化するので、パッド操作時点におけるコードとの相性は非常によいが、常にコード構成音しかならないため、単調で表現力に乏しい。コード音の足りないところをスケール音で補うようにすると、コード進行と相性の良い音が出る確率が高いと共に、たまにコード構成音にはない音がでることがあり、単調さをなくすことが出来る。しかもその音はスケール音であるので、音楽的にそれほどおかしくなることはない。
図50はフレットスイッチ処理を示すフローチャートである。この処理は図22のフレットスイッチ処理に代わる処理である。ステップs401において、フレットスイッチがオンされたのか、それともオフされたのかを判断する。オンされたときは、該オンされたフレットスイッチの位置を得る。ステップs403にて、現在アドリブ追従モードであるか否か、ステップs404で現在発音中であるか否かを判断する。両者ともにYESであれば、ステップs405で前述のアドリブ演奏音決定処理を実行し、その後、ステップs406において、決定したピッチにて、ポルタメントコントロールコマンドを音源回路へ出力する。これにより、それまで発音していた楽音は、ステップs405にて決定されたピッチへと滑らかに変化する。このアドリブ追従モードは、アドリブ演奏によって発生された楽音が非コード構成音であり、それが長時間継続して発音していると、他の自動演奏のパートと協和しなくなり、耳障りになることがある。これを防ぐため、フレットスイッチをオフしており、すぐにアドリブ演奏を続ける意志がないと判断されるときは、このアドリブ追従モードに自動的に移行するようにしている。
一方、ステップs401でフレットスイッチがオフされたと判断されたとき、ステップs407でその時点で発音中であるか否かを判断する。フレットスイッチをオフする前にミュートスイッチを操作している場合は、ここでの判断はNOとなるが、それ以外の時はYESと判断される。ステップs408では自動演奏において現在鳴っているすべての音をサーチし、その時点での疑似コード構成音を検出する。ステップs409では見つかった音の中で発音中の音に最も近い音を探し、新たに発音する音として決定する。そして、ステップs410でアドリブ追従モードに設定する。
図51は発音ピッチ変更処理を示すフローチャートであり、所定時間(例えば100ms)毎に実行される処理である。この処理に対応する処理は、前述の実施の形態にはない。アドリブ追従モードのための処理である。まずステップs411にてアドリブ追従モードに設定されているか否かを判断し、設定されていれば、ステップs412で現在アドリブ演奏音が発音中であるか否かが判断される。発音中であれば、ステップs413で自動演奏において現在鳴っているすべての音をサーチする。ステップs414では見つかった音の中に前記発音中の音が無いか否かを判断し、無ければ、ステップs415で見つかった音の中で、発音中の音に最も近い音を探し、新たに発音する音を決定する。そして、ステップs416にて、決定したピッチにて、ポルタメントコントロールコマンドを音源回路へ出力する。これにより、それまで発音していた楽音は、ステップs415にて決定されたピッチへと滑らかに変化する。
なお、次のような変形も可能である。
フレットスイッチは1列のみ配置したが、ギターの弦のように複数列配置してもよい。このとき、アドリブ演奏ならば各スイッチ列毎にスケールを異ならせたり、音域を異ならせたりすることが出来る。また、シーケンス演奏ならば各スイッチ列毎に演奏するパートを異ならせたり、音域を異ならせたりすることが出来
る。また、フレット部をスイッチにて構成するものに限らず、感圧センサなどにより構成することもできる。
メロディモード2やバッキングパートの演奏において、パッド操作による発音開始から所定時間以内に次の音が読み出されていたら、その時点で次の音のピッチに移行するようにしてもよい。すなわち、本来は次の音のピッチで発音開始させるつもりであったのに、若干早めにパッド操作をしてしまい、前の音で発音しはじめてしまった場合にも、本来の意図した音で演奏をすることが出来る。
制御対象パートに含まれるコントロールチェンジデータは無視するような例を示したが、これらのデータも有効とするようにしてもよい。
操作者による演奏の時、ノートイベントのベロシティはパッド操作から得られた値を用いるようにしたが、本来のノートイベント中に含まれるベロシティの値をそのまま用いてもよいし、パッド操作のベロシティとノートイベントに含まれるベロシティを合成して、両者の中間のベロシティとしてもよい。
形状はギタータイプの楽器に限らない。操作子も、パッドに限らず、スイッチであってもよい。要は、少なくともパッド等の演奏のための操作子を有していればよい。
上述したすべての機能を1つの電子楽器で実現する必要はなく、個々の機能を単独で搭載していてもよい。
曲データはメモリカートリッジで供給するほか、MIDIインターフェースを介して供給するようにしてもよいし、各種通信手段を用いて供給するようにしてもよい。
さらに背景映像を表示できるようにしてもよい。
操作者による操作の善し悪しを採点してもよい。また、採点結果を各種モードの制御に反映させてもよい。例えば、採点結果が良ければより高度な演奏方法のモードに切り替え、逆に採点結果が悪ければより簡単な演奏方法のモードに切り替えるようにしてもよい。また、採点結果が良ければ拍手を、採点結果が良くなければブーイングを発音するようにしてもよい。また、演奏途中での採点結果が悪い場合に、途中で操作者による演奏に代えて、自動演奏に移行するようにしてもよい。
各種スイッチの種類や、操作性(どのように操作するとどのような機能が実行されるか、など)は任意であってよい。 複数台の電子楽器を接続して、それぞれが異なるパートを担当してアンサンブル演奏をするようにしてもよい。その場合、演奏データを各楽器間でやり取りをして、全部の楽器の動作を総合的に制御するようにしてもよいし、制御は1つの楽器が集中して担当し、その他の楽器は操作情報のみを1つの楽器に対して送信するだけという形式にしてもよい。
最後に、本発明の電子楽器に関連する電子楽器の実施の形態として、次のようなものがあることを付記しておく。
(1)第1の操作子と、第2の操作子と、演奏データを記憶した記憶手段と、第1の操作子の操作に応じて、前記記憶手段から演奏データを読み出して音源回路に対して該演奏データに基づく発音を指示する読み出し手段であって、第1の操作子の操作毎に演奏位置を更新するとともに、既に発音指示されている音に関する消音を指示するものと、第2の操作子の操作に応じて、音源回路に対して消音を指示する消音指示手段と、を備えたことを特徴とする電子楽器。
上記構成によれば、第1の操作子の操作がある毎に記憶手段から演奏データが読み出され、発音される。これと同時に、それまで発音されていた音が消音される。従って、第1の操作子を操作するだけで、レガート気味の演奏が可能となる。必要に応じて第2の操作子を操作すれば、発音中の楽音を消音させることが出来るので、スタッカート気味の演奏もできる。
(2)第1の操作子と、第2の操作子と、演奏データを記憶した記憶手段と、演奏の進行に従って、前記記憶手段から演奏データを順次読み出す読み出し手段と、第1の操作子の操作に応じて、該操作時において前記記憶手段から読み出されている演奏データに対応する発音を音源回路に対して指示するとともに、既に発音指示されている音に関する消音を指示する発音消音指示手段と、第2の操作子の操作に応じて、音源回路に対して消音を指示する消音指示手段と、を備えたことを特徴とする電子楽器。
上記構成によれば、第1の操作子の操作がある毎に、その時点において記憶手段から読み出されている演奏データに基づく発音がなされる。これと同時に、それまで発音されていた音が消音される。従って、第1の操作子を操作するだけで、レガート気味の演奏が可能となる。必要に応じて第2の操作子を操作すれば、発音中の楽音を消音させることが出来るので、スタッカート気味の演奏もできる。また、第1の操作子の操作が無くても演奏位置は順次更新されるため、操作者は演奏位置を気にせずに第1の操作子を操作すればよい。
(3)第1の操作子と、第2の操作子と、第1及び第2の演奏データを記憶した記憶手段と、第1の操作子の操作に応じて、前記記憶手段から第1の演奏データを読み出して音源回路に対して該第1の演奏データに基づく発音を指示する第1の読み出し手段であって、第1の操作子の操作毎に演奏位置を更新するものと、演奏の進行に従って、前記記憶手段から第2の演奏データを順次読み出して音源回路に対して該第2の演奏データに基づく発音を指示する第2の読み出し手段と、第1の読み出し手段により読み出された第1の演奏データによる発音と、第2の読み出し手段により読み出された第2の演奏データによる発音のいずれか一方を選択的に有効とする切り替え手段であって、第1の読み出し手段による発音が有効となっている状態で、第2の操作子の操作があったとき、第1の読み出し手段による発音に代えて、第2の読み出し手段による発音を有効とするものと、を備えたことを特徴とする電子楽器。
上記構成によれば、第1の操作子の操作に基づく演奏位置がわからなくなった場合、第2の操作子を操作することにより、操作者の演奏に代えて自動演奏が実行されるようになる。これにより、操作者の演奏位置が本来の演奏位置とずれてしまった場合に、容易に本来の演奏位置を確認することが出来る。
(4)上述した(3)に記載の電子楽器であって、前記切り替え手段は、第2の読み出し手段による発音が有効となっている状態で、第1の操作子の操作があったとき、第2の読み出し手段による発音に代えて、第1の読み出し手段による発音を有効とすることを特徴とする電子楽器。
このようにすることにより、自動演奏から、容易に操作者による演奏に復帰することが出来る。