以下、この発明の第1〜第3実施形態及びこれらの変形例について鍵盤電子楽器を例に採り、図1〜図48を参照して説明する。図1は、各実施形態における鍵盤電子楽器の装置のシステム構成を示すブロック図である。CPU1は、アドレスバスAB、データバスDB、及び図示しないコントロールバスからなるシステムバスを介してこの装置を制御する。システムバスには、プログラムROM2、ワークRAM3、操作部インタフェース4、音源5、通信制御部13が接続されている。また、CPU1には、外部のMIDI装置からMIDIデータを受信するとともに、外部のMIDI装置に対してMIDIデータを送信する。プログラムROM2は、CPU1が実行するプログラムやイニシャル処理において用いる各データが記憶されており、CPU1から指定されるアドレスに応じてプログラムやデータを出力する。ワークRAM3は、CPU1の書込指令に応じて指定されたアドレスの領域にMIDIデータその他のデータを記憶し、CPU1の読出指令又は送信指令に応じてMIDIデータ等を出力する。
操作表示インタフェース部4は、操作表示部6とCPU1との間で各種の情報を中継する。音源5は、CPU1からの楽音データ並びに発音指令及び消音指令に基づいて、発音処理及び消音処理を行う。波形ROM7は波形データを記憶しており、音源5からの読出指令及びアドレスに応じて対応する波形データを音源に出力する。DAC8は、音源5から出力される楽音信号をディジタルからアナログに変換して、スピーカー9に供給して発音させる。
通信制御部13は、インターネット等のネットワーク上の所定の記憶装置であるサーバやホストコンピュータに任意の時間(ノンリアルタイム)にアクセスして接続し、外部への楽音制御データをサーバに送信したり、外部からサーバに送信されてストアされている楽音制御データを受信する。
操作表示部6の外観を図2に示す。操作表示部6には2つのタイプがあり、1つのタイプは図2(a)に示すように、鍵盤10及びスイッチ部11からなる操作手段の他に、各鍵に対応する上の位置に、LED等からなる教示用発光素子12を備えている。そして、押鍵すべき操作子である鍵に対応する発光素子が点灯する。他の1つのタイプは図2(b)に示すように、教示用発光素子は各鍵に対応する上の位置でなく、半透明の各鍵の裏側に設けられており、押鍵すべき鍵を下から照光する構成になっている。したがって、操作表示インタフェース部4は、発光素子を駆動する駆動信号を発生する信号発生手段を構成する。
次に、本発明の第1実施形態について説明する。この第1実施形態においては、少なくとも2つの鍵盤電子楽器を用いて、一方の鍵盤電子楽器において熟練者が作成した練習用楽音制御データを他方の鍵盤電子楽器に送信して、これを受信した他方の鍵盤電子楽器の側の少なくとも1人の初心者が演奏するシステムになっている。
図3〜図7は、第1実施形態における送信者側の鍵盤電子楽器におけるCPU1のフローチャートである。図3はCPU1のメインフローであり、パワーオンになると所定のイニシャル処理(ステップS101)の後、スイッチ処理(ステップS102)、MIDI処理(ステップS103)、鍵盤処理(ステップS104)、発音・消音処理(ステップS105)、その他の処理(ステップS106)をする。そして、パワーオフされたか否かを判別し(ステップS107)、パワーオフでない場合にはステップS102〜ステップS107のループを繰り返し実行する。ステップS107においてパワーオフと判別したときは、所定のパワーオフ処理をする(ステップS108)。なお、スイッチ処理においては、各スイッチの設定状態をワークRAM3にセーブする。
図4はMIDIデータを取り込む割り込み処理であり、MIDIデータを受信したときは、他の割り込みをマスク(禁止)する等の割り込み初期処理をして(ステップS109)、出力MIDIデータを送出用レジスタに転送する等のMIDIデータ送出用処理を行う(ステップS110)。そして、他の割り込みの禁止解除等の割り込み終了処理をして(ステップS111)、メインフローに戻る。
図5はメインフローのステップS105における発音・消音処理である。この処理では、メインフローにおけるスイッチ処理において設定された状態をセーブしたワークRAM3の内容を参照して以下の各処理を行う。練習用データ作成モードであるか否かを判別し(ステップS112)、練習用データ作成モードでない場合には、通常の発音・消音処理をする(ステップS113)。そして、このフローを終了する。練習用データ作成モードである場合には、練習用データ作成に対応する該当チャンネルであるか否かを判別する(ステップS114)。該当チャンネルでないときは、そのチャンネルについて発音する設定がされているか否かを判別する(ステップS115)。発音する設定がされているときは、ステップS113に移行して通常の発音・消音処理をして、このフローを終了する。発音する設定がされていないときは、直ちにこのフローを終了する。
ステップS114において、練習用データ作成に対応する該当チャンネルであるときは、その音高が練習用データ作成に対応する音高の鍵として設定されているか否かを判別する(ステップS116)。該当する音高の鍵でないときは、その音高について発音する設定がされているか否かを判別する(ステップS117)。発音する設定がされているときは、ステップS113に移行して通常の発音・消音処理をする。そして、このフローを終了する。発音する設定がされていないときは、直ちにこのフローを終了する。
ステップS116において、その音高が練習用データ作成に対応する音高の鍵として設定されているときは、MIDIデータの指示が発音であるかあるいは消音であるかを判別する(ステップS118)。MIDIデータの指示が発音であるときは、ノートオン処理すなわち練習データ作成オン時の発音処理及び変換データ作成処理をする(ステップS119)。一方、MIDIデータの指示が消音であるときは、ノートオフ処理すなわち練習データ作成オン時の消音処理及び変換データ作成処理をする(ステップS120)。ノートオン処理又はノートオフ処理の後はこのフローを終了する。
図6は、図5の発音・消音処理のステップS119におけるノートオン処理のフローである。この処理では、該当する楽音データのベロシティを変更したMIDI送信用データを作成してMIDIバッファに転送する(ステップS121)。そして、送信システム側が無発音モードであるか又は発音モードであるかを判別する(ステップS122)。無発音モードである場合には、直ちにこのフローを終了する。一方、発音モードである場合には、通常の楽音を発音する通常発音モードであるか、あるいはクリック音やカスタネット音等のタイミング音を発音するタイミング音モードであるかを判別する(ステップS123)。
通常楽音モードであるときは、オクターブ単位で上(高音側)又は下(低音側)に音高をシフトさせた発音用MIDIデータを作成して、MIDIバッファに転送する(ステップS124)。一方、タイミング音モードであるときは、発音音色をタイミング音に割り当てた発音用MIDIデータを作成して、MIDIバッファに転送する(ステップS125)。ステップS124又はステップS125において、発音用MIDIデータを転送した後は、本来のすなわち変更前の楽音制御データに基づく本来の発音処理を行う(ステップS126)。そして、このフローを終了する。
図7は、図5の発音・消音処理のステップS120におけるノートオフ処理のフローである。この処理では、該当する楽音データのOFF用MIDI送信用データを作成してMIDIバッファに転送する(ステップS127)。そして、送信システム側が無発音モードであるか又は発音モードであるかを判別する(ステップS128)。無発音モードである場合には、直ちにこのフローを終了する。一方、発音モードである場合には、通常の楽音を発音する通常発音モードであるか、あるいはクリック音やカスタネット音等のタイミング音を発音するタイミング音モードであるかを判別する(ステップS129)。
通常楽音モードであるときは、オクターブ単位で上(高音側)又は下(低音側)に音高をシフトさせた消音用MIDIデータを作成して、MIDIバッファに転送する(ステップS130)。一方、タイミング音モードであるときは、発音音色をタイミング音に割り当てた消音用MIDIデータを作成して、MIDIバッファに転送する(ステップS131)。ステップS130又はステップS131において、消音用MIDIデータを転送した後は、本来のすなわち変更前の楽音制御データに基づく本来の消音処理を行う(ステップS132)。そして、このフローを終了する。
一方、受信者側においては、送信者側から送信されたMIDIデータを受信して、楽音制御データを生成する。図8は、受信者側における演奏教習装置のメインフローである。所定のイニシャライズ(ステップJ101)の後、スイッチ処理(ステップJ102)、MIDI処理(ステップJ103)、鍵ガイド処理(ステップJ104)、鍵盤処理(ステップJ105)、発音処理(ステップJ106)を実行する。そして、パワー・オフの操作がされたか否かを判別する(ステップJ107)。パワー・オフでない場合には、ステップJ102〜J106の処理を実行する。パワー・オフである場合には、パワー・オフ処理を行い(ステップJ108)、このメインフローを終了する。
図9は、図8のメインフローにおけるステップJ103のMIDI処理のフローである。この処理では、MIDIデータを外部装置からリアルタイムで受信したか否かを判別し(ステップJ109)、受信しない場合にはメインフローに戻る。受信したときはそのMIDIデータが演奏教習のためのガイド用MIDIデータであるか否かを判別する(ステップJ110)。ガイド用MIDIデータを受信したときは、レジスタGEVENT及びレジスタGVELOCITYにMIDIデータをストアする(ステップJ111)。次に、ガイドフラグGFを「1」にセットして(ステップJ112)、メインフローに戻る。
ステップJ111において受信データがガイド用MIDIデータでない場合には、受信したデータが発音用MIDIデータであるか否かを判別する(ステップJ113)。発音用データである場合には、レジスタSEVENT及びレジスタSVELOCITYにMIDIデータをストアする(ステップJ114)。次に、発音フラグSFを「1」にセットして(ステップJ115)、メインフローに戻る。なお、受信データがガイド用MIDIデータでも発音用MIDIデータでもない場合にも、メインフローに戻る。
図10は、図8のメインフローにおけるJ104の鍵ガイド処理のフローである。この処理では、ガイドフラグGFが「1」であるか否かを判別し(ステップJ116)、「1」ない場合にはメインフローに戻る。GFが「1」である場合には、GEVENTのMIDIデータがノート・オンであるか否かを判別する(ステップJ117)。ノート・オンである場合には、GEVENTのノートに対応する鍵のLEDを点灯する(ステップJ118)。ノート・オフである場合には、GEVENTのノートに対応する鍵のLEDを消灯する(ステップJ119)。LEDを点灯又は消灯した後は、GFを「0」にリセットして(ステップJ120)、メインフローに戻る。
図11は、図8のメインフローにおけるステップ105の鍵盤処理のフローである。この処理では、鍵変化があったか否かを判別して(ステップJ121)、変化がない場合にはメインフローに戻る。オフからオンに鍵変化があったときは、ノート・オンデータ及びノートデータをレジスタEVENTにストアし(ステップJ122)、ベロシティデータをレジスタVELOCITYにストアする(ステップJ123)。一方、オンからオフに鍵変化があったときは、ノート・オフデータ及びノートデータをEVENTにストアし(ステップJ124)、VELOCITYに「0」をストアする(ステップJ125)。ステップJ123又はJ125においてVELOCITYにデータをストアした後は、発音フラグHFを「1」にセットして(ステップJ126)、メインフローに戻る。
図12は、図8のメインフローにおけるJ106の発音処理のフローである。この処理では、HFが「1」であるか否かを判別し(ステップJ127)、「1」である場合には、EVENTのデータがノート・オンであるか否かを判別する(ステップJ128)。ノート・オンである場合には、ノートデータ及びベロシティデータに基づいて発音指示を行う(ステップJ129)。一方、ノート・オフである場合には、ノートデータに基づいて消音指示を行う(ステップJ130)。発音指示又は消音指示の後は、HFを「0」にリセットする(ステップJ131)。
ステップJ131においてHFを「0」にリセットした後、又はステップJ127においてHFが「0」である場合には、SFが「1」であるか否かを判別する(ステップJ132)。SFが「0」である場合はメインフローに戻る。SFが「1」である場合には、SEVENTのデータがノート・オンであるか否かを判別する(ステップJ133)。ノート・オンである場合には、SEVENTのデータがノートデータであるか又はトーンデータであるか否かを判別する(ステップJ134)。
ノートデータである場合には、SEVENTのノートデータ及びSVELOCITYのベロシティデータに基づいて発音指示を行う(ステップJ135)。この場合には、オクターブ単位で上又は下側にシフトされた音高で発音指示を行う。トーンデータである場合には、SEVENTのトーンデータ及びSVELOCITYのベロシティデータに基づいて発音指示を行う(ステップJ136)。この場合には、トーンデータの音色によるタイミング音で発音指示を行う。ステップJ135又はステップJ136における発音指示の後は、SFを「0」にリセットして(ステップJ137)、メインフローに戻る。
ステップJ133において、SEVENTのデータがノート・オフである場合には、SEVENTのデータがノートデータであるか又はトーンデータであるかを判別する(ステップJ138)。ノートデータである場合には、そのノートの消音指示を行う(ステップJ139)。トーンデータである場合には、そのトーンの消音指示を行う(ステップJ140)。ステップJ139又はJ140における消音指示の後は、SFを「0」にリセットして(ステップJ137)、メインフローに戻る。
このように、上記第1実施形態によれば、送信側における演奏教習装置は、楽音制御データについて練習用の内容を設定するデータ設定手段と、入力される楽音制御データを前記データ設定手段によって設定された内容に基づいて練習用楽音制御データに変換するデータ変換手段と、データ変換手段によって変換された練習用楽音制御データを送信するデータ送信手段と、を有する構成になっている。
また、受信側における演奏教習装置は、楽音制御データを受信するデータ受信手段と、このデータ受信手段によって受信された楽音制御データの中の練習用楽音制御データを検出するデータ検出手段と、このデータ検出手段によって検出された練習用楽音制御データに基づいて演奏練習用の内容を設定するデータ設定手段と、を有する構成になっている。
第1実施形態における演奏教習装置によれば、熟練者である送信者側が、入力される楽音制御データを練習用楽音制御データに変換して送信するので、初心者である受信者側では、その練習用楽音データに基づいて演奏練習を行う。したがって、外部から供給される楽音制御データに基づいて、初心者でも、様々な練習方法を容易に実現できる。
この場合において、練習用楽音制御データとして設定される内容が、楽音制御データのベロシティデータを低減する内容である場合には、練習するチャンネルの楽音を小音量で発音させるので、練習者は、自分の操作音の音高と小音量の正しい音高とを容易に識別でき、効果的な練習が可能となる。
あるいは、練習用楽音制御データとして設定される内容が、楽音制御データの音高データをオクターブ単位でシフトさせる内容である場合、又は楽音制御データの音高にかかわらず所定の音高で、かつ、楽音制御データのいずれの音色とも異なる音色、例えばクリック音やカスタネット音等のタイミング音に変更する内容である場合で、しかも発音タイミングが元の楽音制御データと同じである場合には、練習者は、自分の演奏タイミングを容易に認識することにより、効果的な練習が可能となる。
次に、第1実施形態の変形例について説明する。図13は、変形例における受信側のメインフローである。所定のイニシャライズ(ステップJ141)の後、スイッチ処理(ステップJ142)、MIDI処理(ステップJ143)、鍵盤処理(ステップJ144)、発音処理(ステップJ145)を実行する。そして、パワー・オフの操作がされたか否かを判別する(ステップJ146)。パワー・オフでない場合には、ステップJ142〜J145の処理を実行する。パワー・オフである場合には、パワー・オフ処理を行い(ステップJ147)、このメインフローを終了する。すなわち、この変形例においては、鍵ガイド処理は行わない。
図14は、図13のメインフローにおけるステップJ145の発音処理のフローである。この処理では、HFが「1」であるか否かを判別し(ステップJ148)、「1」である場合には、EVENTのデータがノート・オンであるか否かを判別する(ステップJ149)。ノート・オンである場合には、ノートデータ及びベロシティデータに基づいて発音指示を行う(ステップJ150)。一方、ノート・オフである場合には、ノートデータに基づいて消音指示を行う(ステップJ151)。発音指示又は消音指示の後は、HFを「0」にリセットする(ステップJ152)。
ステップJ152においてHFを「0」にリセットした後、又はステップJ148においてHFが「0」である場合には、GFが「1」であるか否かを判別する(ステップJ153)。「1」である場合には、GEVENTのデータがノート・オンであるか否かを判別する(ステップJ154)。ノート・オンである場合には、GEVENTのノートデータ及びGVELOCITYのベロシティデータに基づく発音指示を行う(ステップJ155)。GEVENTのデータがノート・オフである場合には、そのノートによる楽音を消音指示する(ステップJ156)。ステップJ155又はJ156における発音指示又は消音指示の後は、GFを「0」にリセットする(ステップJ157)。
次に、SFが「1」であるか否かを判別する(ステップJ158)。SFが「1」である場合には、SEVENTのデータがノート・オンであるか否かを判別する(ステップJ159)。ノート・オンである場合には、SEVENTのデータがノートデータであるか又はトーンデータであるか否かを判別する(ステップJ160)。ノートデータである場合には、SEVENTのノートデータ及びSVELOCITYのベロシティデータに基づいて発音指示を行う(ステップJ161)。トーンデータである場合には、SEVENTのトーンデータ及びSVELOCITYのベロシティデータに基づいて発音指示を行う(ステップJ162)。ステップJ161又はステップJ162における発音指示の後は、SFを「0」にリセットして(ステップJ163)、メインフローに戻る。
ステップJ159において、SEVENTのデータがノート・オフである場合には、SEVENTのデータがノートデータであるか又はトーンデータであるかを判別する(ステップJ164)。ノートデータである場合には、そのノートの消音指示を行う(ステップJ165)。トーンデータである場合には、そのトーンの消音指示を行う(ステップJ166)。ステップJ165又はJ166における消音指示の後は、SFを「0」にリセットして(ステップJ163)、メインフローに戻る。また、ステップJ153においてGFが「0」である場合、ステップJ158においてSFが「0」である場合には、メインフローに戻る。
図13のメインフローにおけるステップJ143のMIDI処理は、図9における送信側におけるMIDI処理のフローと同じであるので説明は省略する。また、図13のメインフローにおけるステップJ144の鍵盤処理も、図11における送信側における鍵盤処理のフローと同じであるので説明は省略する。
次に、第2実施形態について説明する。図15は、第2実施形態における送信側のメインフローである。所定のイニシャライズを行った後(ステップS201)、スイッチ処理(ステップS202)、鍵盤処理(ステップS203)、ガイドデータ作成処理(ステップS204)、発音処理(ステップS205)、送信処理(ステップS206)を実行する。そして、パワー・オフの操作がされたか否かを判別する(ステップS207)。パワー・オフでない場合には、ステップS202〜S206の処理を実行する。パワー・オフである場合には、パワー・オフ処理を行い(ステップS208)、このメインフローを終了する。
図16は、図15のメインフローにおけるステップS202のスイッチ処理のフローである。この処理では、モードスイッチ処理(ステップS209)、スタート/ストップ処理(ステップS210)、送信スイッチ処理(ステップS211)、その他のスイッチ処理(ステップS212)を実行して、メインフローに戻る。
図17は、図16のスイッチ処理におけるステップS209のモードスイッチ処理のフローである。この処理では、作成モードスイッチが変化したか否かを判別し(ステップS213)、変化がない場合には図16のフローに戻る。作成モードスイッチがオフからオンに変化したときは、モードフラグMFを「1」にセットする(ステップS214)。作成モードスイッチがオンからオフに変化したときは、MFを「0」にリセットする(ステップS215)。
ステップS214又はステップS215において、MFをセット又はリセットした後は、タイミング音モードスイッチが変化したか否かを判別し(ステップS216)、変化がない場合には図16のフローに戻る。このスイッチがオフからオンに変化したときは、タイミングフラグTFを「1」にセットする(ステップS217)。このスイッチがオンからオフに変化したときは、TFを「0」にリセットする(ステップS218)。ステップS217又はステップS218において、TFをセット又はリセットした後は、図16のフローに戻る。
図18は、図16のスイッチ処理におけるステップS210のスタート/ストップスイッチ処理のフローである。この処理では、スタート/ストップスイッチがオンであるか否かを判別し(ステップS219)、オフである場合には図16のフローに戻る。このスイッチがオンである場合には、スタートフラグSTFを反転する(ステップS220)。次に、STFが「1」であるか否かを判別する(ステップS221)。「1」である場合には、タイムレジスタTIMEを「0」にリセットし(ステップS222)、アドレスレジスタADを「0」にセットする(ステップS223)。そして、タイマインタラプトを禁止解除にする(ステップS224)。ステップS221においてSTFが「0」である場合には、タイマインタラプトを禁止し(ステップS225)、ADのアドレスで指定するメモリのエリアMEM[AD]にENDデータをストアする(ステップS226)。
ステップS224においてタイマインタラプトを禁止解除した後、又はステップS226においてENDデータをストアした後は、図16のフローに戻る。タイマインタラプトを禁止解除した場合には、図19のフローに示すように、一定時間が経過するたびにTIMEの値をインクリメントする(ステップS227)。そして、図16のフローに戻る。
図20は、図16のスイッチ処理におけるステップS211の送信スイッチ処理のフローである。この処理では、送信スイッチがオンされたか否かを判別し(ステップS228)、オンされたときは送信フラグSOFを「1」にセットする(ステップS229)。SOFをセットした後、又はステップS228において送信スイッチがオンされない場合には、図16のフローに戻る。
図21は、図15のメインフローにおけるステップS204のガイドデータ作成処理のフローである。この処理では、モードフラグMFが「1」であるか否かを判別し(ステップS230)、「1」である場合には発音フラグHFが「1」であるか否かを判別する(ステップS231)。MF及びHFのいずれか一方でも「0」である場合には、図15のメインフローに戻る。MF及びHFのいずれも「1」である場合には、ADのアドレスで指定するメモリのエリアMEM[AD]にTIMEのタイムデータをストアする(ステップS232)。
次に、ADをインクリメントして(ステップS233)、次のエリアMEM[AD]にEVENTのデータをストアする(ステップS234)。さらに、ADをインクリメントして(ステップS235)、次のエリアMEM[AD]にVELOCITYのベロシティデータに「1」より小さい所定値α(例えば、α=0.1)を乗じた値をストアする(ステップS236)。すなわち、低減したベロシティデータをメモリにストアする。そして、ADをインクリメントする(ステップS237)。
次に、TFが「1」であるか否かを判別し(ステップS238)、「1」である場合にはMEM[AD]のエリアにノート・オンのデータ及びトーンデータをストアする(ステップS239)。TFが「0」である場合には、MEM[AD]のエリアにEVENTのノートデータのオクターブを変更したデータをストアする(ステップS240)。ステップS239においてノート・オンのデータ及びトーンデータをストアした後、又は、ステップS240においてオクターブを変更したデータをストアした後は、ADをインクリメントする(ステップS241)。そして、MEM[AD]のエリアにVELOCITYのベロシティデータをストアする(ステップS242)。さらに、ADをインクリメントした後(ステップS243)、図15のメインフローに戻る。
図22は、図15のメインフローにおけるステップS205の発音処理のフローである。この処理では、発音フラグHFが「1」であるか否かを判別し(ステップS244)、「1」でない場合には図15のメインフローに戻る。HFが「1」である場合には、EVENTのデータがノート・オンであるか否かを判別する(ステップS245)。ノート・オンである場合には、EVENTのノートデータとVELOCITYのベロシティデータで発音指示を行う(ステップS246)。EVENTのデータがノート・オフである場合には、EVENTのノートデータの楽音を消音指示する(ステップS247)。発音指示又は消音指示の後は、HFを「0」にリセットする(ステップS248)。そして、図15のメインフローに戻る。
図23は、図15のメインフローにおけるステップS206の送信処理のフローである。この処理では、送信フラグSOFが「1」であるか否かを判別し(ステップS249)、「1」でない場合には図15のメインフローに戻る。SOFが「1」である場合には、MEMのデータをネットワーク上のサーバに転送する(ステップS250)。そして、転送が終了したか否かを判別し(ステップS251)、終了していない場合にはステップS250の転送を続行する。転送が終了したときは、SOFを「0」にリセットして(ステップS252)、図15のメインフローに戻る。
図24は、第2実施形態における受信側のメインフローである。所定のイニシャライズ(ステップJ201)の後、スイッチ処理(ステップJ202)、鍵ガイド処理(ステップJ203)、鍵盤処理(ステップJ204)、発音処理(ステップJ205)、受信処理(ステップJ206)を実行する。そして、パワー・オフの操作がされたか否かを判別する(ステップJ207)。パワー・オフでない場合には、ステップJ202〜J206の処理を実行する。パワー・オフである場合には、パワー・オフ処理を行い(ステップJ208)、このメインフローを終了する。
図25は、図24のメインフローにおけるステップJ202のスイッチ処理のフローである。この処理では、鍵ガイドスイッチ処理(ステップJ209)、受信スイッチ処理(ステップJ210)、その他のスイッチ処理(ステップJ211)を実行して、図24のメインフローに戻る。
図26は、図25のスイッチ処理におけるステップJ209の鍵ガイドスイッチ処理のフローである。この処理では、鍵ガイドスイッチがオンされたか否かを判別し(ステップJ212)、オンされない場合には図25のフローに戻る。このスイッチがオンされたときは、スタートフラグSTFを反転する(ステップJ213)。そして、STFが「1」であるか否かを判別する(ステップJ214)。「1」である場合には、タイムレジスタTIMEを「0」にリセットし(ステップJ215)、アドレスレジスタADを「0」にセットする(ステップJ216)。そして、タイマインタラプトを禁止解除にする(ステップJ217)。ステップJ214においてSTFが「0」である場合には、タイマインタラプトを禁止し(ステップJ218)、LEDを消灯する(ステップJ219)。
ステップJ217においてタイマインタラプトを禁止解除した後、又はステップJ219においてLEDを消灯した後は、図25のフローに戻る。タイマインタラプトを禁止解除した場合には、図27のフローに示すように、一定時間が経過するたびにTIMEの値をインクリメントする(ステップJ220)。そして、図25のフローに戻る。
図28は、図25のスイッチ処理におけるステップJ210の受信スイッチ処理のフローである。この処理では、受信スイッチがオンされたか否かを判別し(ステップJ221)、オンされない場合には図25のフローに戻る。受信スイッチがオンされたときは、受信フラグZFを「1」にセットする(ステップJ222)。そして、図25のフローに戻る。
図29及び図30は、図24のメインフローにおけるステップJ203の鍵ガイド処理のフローである。この処理では、スタートフラグSTFが「1」であるか否かを判別し(ステップJ223)、「1」である場合にはTIMEのデータがMEM[AD]のタイムデータに達したか否かを判別する(ステップJ224)。STFが「0」である場合、又はTIMEのデータがMEM[AD]のタイムデータに達していない場合には、図24のメインフローに戻る。
STFが「1」で、かつ、TIMEのデータがMEM[AD]のタイムデータに達している場合には、ADをインクリメントする(ステップJ225)。次に、ADのアドレスで指定するメモリのエリアMEM[AD]のデータをレジスタGEVENTにストアする(ステップJ226)。そして、GEVENTのデータがノート・オンであるか否かを判別する(ステップJ227)。ノート・オンである場合には、GEVENTのノートデータに対応する鍵のLEDを点灯する(ステップJ228)。ノート・オフのデータである場合には、GEVENTのノートデータに対応する鍵のLEDを消灯する(ステップJ229)。LEDを点灯又は消灯した後は、ADをインクリメントする(ステップJ230)。
次に、図30においてタイミングフラグTFが「0」であるか否かを判別し(ステップJ232)、TFが「1」である場合には、GEVENTのデータがノート・オフであるか否かを判別する(ステップJ233)。TFが「0」である場合、又はGEVENTのデータがノート・オンである場合には、ADのアドレスで指定するメモリのエリアMEM[AD]のデータをレジスタSEVENTにストアする(ステップJ234)。そして、ADをインクリメントして(ステップJ235)、MEM[AD]のデータをレジスタSVELOCITYにストアする(ステップJ236)。次に、発音フラグSFを「1」にセットする(ステップJ237)。
SFをセットした後、又はステップJ233においてGEVENTのデータがノート・オフである場合には、ADをインクリメントして(ステップJ238)、MEM[AD]のデータがENDデータであるか否かを判別する(ステップJ239)。ENDデータでない場合には、図24のメインフローに戻る。一方、ENDデータである場合には、STFを「0」にリセットし(ステップJ240)、タイマインタラプトを禁止して(ステップJ241)、図24のメインフローに戻る。
メインフローにおけるステップJ204の鍵盤処理については、図11に示した第1実施形態のフローと同じであるので説明は省略する。また、メインフローにおけるステップJ205の発音処理についても、図12に示した第1実施形態のフローと同じであるので説明は省略する。
図31は、メインフローにおけるステップJ206の受信処理のフローである。この処理では、受信フラグZFが「1」であるか否かを判別し(ステップJ242)、「0」である場合には図24のメインフローに戻る。ZFが「1」である場合には、ネットワーク上のサーバから受信したデータをメモリに転送する(ステップJ243)。そして、受信が終了したか否かを判別し(ステップJ244)、終了していない場合にはステップJ243の転送処理を続行する。受信が終了したときは、ZFを「0」にリセットして図24のメインフローに戻る。
次に、第2実施形態における受信側の処理の変形例を説明する。図32は変形例における受信側のメインフローである。所定のイニシャライズを行った後(ステップJ246)、スイッチ処理(ステップJ247)、鍵盤処理(ステップJ248)、ガイドデータ読出処理(ステップJ249)、発音処理(ステップJ250)、受信処理(ステップJ251)を実行する。そして、パワー・オフの操作がされたか否かを判別する(ステップS252)。パワー・オフでない場合には、ステップS247〜S251の処理を実行する。パワー・オフである場合には、パワー・オフ処理を行い(ステップS253)、このメインフローを終了する。
図33は、図32のメインフローにおけるスイッチ処理のフローである。この処理では、鍵ガイドスイッチ処理(ステップJ254)、受信スイッチ処理(ステップJ255)、その他のスイッチ処理(ステップJ256)を実行して、図32のメインフローに戻る。
図34は、図33のスイッチ処理におけるステップJ254の鍵ガイドスイッチ処理のフローである。この処理では、鍵ガイドスイッチがオンされたか否かを判別し(ステップJ257)、オンされない場合には図33のスイッチ処理のフローに戻る。鍵ガイドスイッチがオンされたときは、スタートフラグSTFを反転する(ステップJ258)。そして、STFが「1」であるか否かを判別する(ステップJ259)。「1」である場合には、タイムレジスタTIMEを「0」にリセットし(ステップJ260)、アドレスレジスタADを「0」にセットする(ステップJ261)。そして、タイマインタラプトを禁止解除にする(ステップJ262)。ステップJ259においてSTFが「0」である場合には、タイマインタラプトを禁止する(ステップJ263)。
ステップJ262においてタイマインタラプトを禁止解除した後、又はステップJ263においてタイマインタラプトを禁止した後は、図33のスイッチ処理のフローに戻る。タイマインタラプトを禁止解除した場合には、第2実施形態における図27のフローに示すように、一定時間が経過するたびにTIMEの値をインクリメントする。そして、図33のスイッチ処理のフローに戻る。
図33のスイッチ処理におけるステップJ255の受信スイッチ処理は、第2実施形態における図28に示すフローと同じであるので、説明は省略する。また図32のメインフローにおいて、ステップJ248の鍵盤処理については、第1実施形態において図11に示したフローと同じであるので、説明は省略する。
図35及び図36は、図32のメインフローにおけるステップJ249のガイドデータ読出処理のフローである。図35において、STFが「1」であるか否かを判別し(ステップJ264)、「1」である場合にはTIMEのデータがMEM[AD]のタイムデータに達したか否かを判別する(ステップJ265)。STFが「0」である場合、又はTIMEのデータがMEM[AD]のタイムデータに達していない場合には、図32のメインフローに戻る。
ステップJ264においてSTFが「1」で、かつ、ステップJ265においてTIMEのデータがMEM[AD]のタイムデータに達したときは、ADをインクリメントする(ステップJ266)。そして、ADのアドレスで指定するメモリのエリアMEM[AD]のデータをレジスタGEVENTにストアする(ステップJ267)。次に、ADをインクリメントして(ステップJ268)、ガイドフラグGFを「1」にセットする(ステップJ269)。
次に、図36においてTFが「0」であるか否かを判別し(ステップJ270)、TFが「1」である場合には、GEVENTのデータがノート・オフであるか否かを判別する(ステップJ271)。TFが「0」である場合、又はGEVENTのデータがノート・オンである場合には、ADのアドレスで指定するメモリのエリアMEM[AD]のデータをレジスタSEVENTにストアする(ステップJ272)。そして、ADをインクリメントして(ステップJ273)、MEM[AD]のデータをレジスタSVELOCITYにストアする(ステップJ274)。次に、発音フラグSFを「1」にセットする(ステップJ275)。
SFをセットした後、又はステップJ271においてGEVENTのデータがノート・オフである場合には、ADをインクリメントして(ステップJ276)、MEM[AD]のデータがENDデータであるか否かを判別する(ステップJ277)。ENDデータでない場合には、図32のメインフローに戻る。一方、ENDデータである場合には、STFを「0」にリセットし(ステップJ278)、タイマインタラプトを禁止して(ステップJ279)、図32のメインフローに戻る。
メインフローにおけるステップJ250の発音処理は、第1実施形態の変形例において図14に示したフローと同じであるので、説明は省略する。また、メインフローにおけるステップJ251の受信処理についても、第2実施形態において図31に示したフローと同じであるので、説明は省略する。
なお、上記第1及び第2各実施形態においては、鍵盤電子楽器を例に採り、教示する操作手段を鍵盤としたが、本発明を適用する対象としては、電子ドラムセット、電子管楽器、電子弦楽器でもよい。これらの場合には、操作手段は、ドラムのパッド、電子管楽器のピストン部、電子弦楽器の弦になる。
また、上記第1及び第2実施形態においては、演奏教習装置として鍵盤電子楽器を例に採って説明したが、シーケンサやパソコン等にも本発明を適用することができる。そして、上記実施形態においては、楽音制御データとして鍵盤入力データとしたが、自動演奏用データや一般の音楽再生データ等でもよい。
次に、第3実施形態について説明する。この第3実施形態においては、図2に示した操作表示部6にペダル画像を表示する画面を設けて、ペダル操作をガイドする構成になっている。図には示さないが、ペダル画像にはダンパーペダル、ソステヌートペダル、ソフトペダルの3つのペダルが表示されており、操作すべきペダルに対応する画像を点灯するように制御する。ダンパーペダルを操作すると、この後の鍵盤演奏において鍵盤から指を離しても音を長く伸ばすことができる。ソステヌートペダルを操作すると、このペダルを操作したときに押さえていた鍵の音だけを、鍵盤から指を離しても音を長く伸ばすことができる。ソフトペダルを操作すると、音量がわずかに下がり、音の響きを柔らかくすることができる。
第3実施形態における送信側のメインフローについては、第2実施形態において図15に示したフローと同じである。したがってここでは、第2実施形態とは異なる処理についてのみ説明する。第3実施形態の送信側の処理では、スイッチ処理の中のモードスイッチ処理、及び送信処理の中のガイドデータ作成処理が第2実施形態と異なっている。
図37は、スイッチ処理におけるモードスイッチ処理のフローである。この処理では、作成モードスイッチが変化したか否かを判別し(ステップS301)、変化がない場合にはメインフローに戻る。このスイッチがオフからオンに変化したときは、モードフラグMFを「1」にセットする(ステップS302)。一方、オンからオフに変化したときは、MFを「0」にリセットする(ステップS303)。MFをセット又はリセットした後は、メインフローに戻る。
図38は、送信処理におけるガイドデータ作成処理のフローである。この処理では、MFが「1」であるか否かを判別し(ステップS304)、「1」である場合にはHFが「1」であるか否かを判別する(ステップS305)。MFが「0」である場合、又はHFが「0」である場合には、メインフローに戻る。
MFが「1」で、かつ、HFが「1」である場合には、ADのアドレスで示すメモリのエリアMEM[AD]にタイムレジスタTIMEのデータをストアする(ステップS306)。次に、ADをインクリメントして(ステップS307)、MEM[AD]にレジスタEVENTのデータをストアする(ステップS308)。そして、ADをインクリメントして(ステップS309)、メインフローに戻る。
図39は、第3実施形態における受信側のメインフローである。所定のイニシャライズ(ステップJ301)の後、スイッチ処理(ステップJ302)、鍵ガイド処理(ステップJ303)、発音処理(ステップJ304)、ペダルデータ作成処理(ステップJ305)、受信処理(ステップJ306)を実行する。そして、パワー・オフの操作がされたか否かを判別する(ステップJ307)。パワー・オフでない場合には、ステップJ302〜J306の処理を実行する。パワー・オフである場合には、パワー・オフ処理を行い(ステップJ308)、このメインフローを終了する。
図40は、図39のメインフローにおけるステップJ302のスイッチ処理のフローである。この処理では、鍵ガイドスイッチ処理(ステップJ309)、受信スイッチ処理(ステップJ310)、ペダルデータ作成スイッチ処理(ステップJ311)、その他のスイッチ処理(ステップJ312)を実行して、図39のメインフローに戻る。
図40のスイッチ処理におけるステップJ309の鍵ガイドスイッチ処理については、第2実施形態において図26に示したフローと同じであるので、説明は省略する。また、図40におけるステップJ310の受信スイッチ処理についても、第2実施形態において図28に示したフローと同じであるので、説明は省略する。
図41は、図40のステップJ311におけるペダルデータ作成スイッチ処理のフローである。この処理では、ペダルデータ作成スイッチがオンされたか否かを判別し(ステップJ313)、オンされない場合には図40のスイッチ処理のフローに戻る。このスイッチがオンされたときは、ペダルフラグPFを「1」にセットして(ステップJ314)、図40のスイッチ処理に戻る。
図42は、図39のメインフローにおけるステップJ302の鍵ガイド処理のフローである。この処理では、スタートフラグSTFが「1」であるか否かを判別し(ステップJ315)、「1」である場合にはタイムレジスタTIMEのデータがADのアドレスで指定するメモリのエリアMEM[AD]のタイムデータに達したか否かを判別する(ステップJ316)。STFが「0」である場合、又は、TIMEのデータがMEM[AD]のタイムデータに達していない場合には、図39のメインフローに戻る。
STFが「1」であり、かつ、TIMEのデータがMEM[AD]のタイムデータに達したときは、ADをインクリメントする(ステップJ317)。そして、MEM[AD]のデータがノート・オンであるか否かを判別する(ステップJ318)。ノート・オンである場合には、MEM[AD]のノートデータに対応する鍵のLEDを点灯する(ステップJ319)。MEM[AD]のデータがノート・オンでない場合には、MEM[AD]のデータがノート・オフであるか否かを判別する(ステップJ320)。ノート・オフである場合には、MEM[AD]のノートデータに対応する鍵のLEDを消灯する(ステップJ321)。
MEM[AD]のデータがノート・オン及びノート・オフでない場合には、MEM[AD]のデータがペダル・オンであるか否かを判別する(ステップJ322)。ペダル・オンである場合には、対応するペダルマークを点灯する(ステップJ323)。MEM[AD]のデータがノート・オン、ノート・オフ及びペダル・オンのいずれでもない場合には、MEM[AD]のデータがペダル・オフであるか否かを判別する(ステップJ324)。ペダル・オフである場合には、対応するペダルマークを消灯する(ステップJ325)。
LED又はペダルマークの点灯処理及び消灯処理の後は、ADをインクリメントする(ステップJ326)。そして、MEM[AD]のデータが時間データであるか否かを判別する(ステップJ327)。時間データでない場合には、ステップJ318に移行してMEM[AD]のデータを判別する。時間データである場合には、図39のメインフローに戻る。
一方、図42のフローにおいて、MEM[AD]のデータがノートデータでもペダルデータでもない場合には、MEM[AD]のデータがENDデータであるか否かを判別する(ステップJ328)。ENDデータである場合には、スタートフラグSTFを「0」にリセットして(ステップJ329)、タイマインタラプトを禁止して(ステップJ330)、点灯しているLED及びペダルマークを消灯し(ステップJ331)、図39のメインフローに戻る。ステップJ328においてMEM[AD]がENDデータでない場合には、ステップJ326に移行してADをインクリメントした後、ステップJ327においてMEM[AD]のデータを判別する。
図39のメインフローにおけるステップJ304の発音処理は、第2実施形態において図22に示したフローと同じあるので、説明は省略する。
図43〜図46は、図39のメインフローにおけるステップJ305のペダルデータ作成処理のフローである。図43において、ペダルフラグPFが「1」であるか否かを判別し(ステップJ332)、PFが「0」である場合には図39のメインフローに戻る。PFが「1」である場合には、ADを「0」にセットする(ステップJ333)。そして、メモリのエリアMEM[AD]のデータがイベントデータであるか否かを判別する(ステップJ334)。
MEM[AD]のデータがイベントデータでない場合には、ADをインクリメントする(ステップJ335)。そして、MEM[AD]のデータがENDデータであるか否かを判別する(ステップJ336)。ENDデータでない場合には、ステップJ334に移行して、インクリメントしたADのアドレスで指定するMEM[AD]のデータがイベントデータであるか否かを判別する。
イベントデータである場合には、そのイベントデータがノート・オンであるか否かを判別する(ステップJ337)。ノート・オンである場合には、ソステヌートペダルフラグSPFが「0」であるか否かを判別する(ステップJ338)。「0」である場合には、直前のノート・オンの鍵の番号を示すポインタNを「0」にセットして(ステップJ339)、Nをインクリメントしながら、直前のノートイベントデータのオンフラグONF(N)の値を判別する。すなわち、ONF(N)が「1」であるか否かを判別し(ステップJ340)、「1(発音)」である場合にはMEM[AD]のノートデータからポインタNで示すノートデータを差し引いた絶対値が所定値より大きいか否かを判別する(ステップJ341)。すなわち、1つ前のノート・オンのデータに対応する鍵と次のノート・オンのデータに対応する鍵との間隔(鍵数)がある程度(所定値よりも)大きいか否かを判別する。
ステップJ340においてONF(N)が「0(消音)」である場合、又は、ステップJ341においてノートデータの差分の絶対値が所定値以下である場合には、Nをインクリメントする(ステップJ342)。そして、Nが所定数を超えたか否かを判別する(ステップJ343)。所定数以下である場合には、ステップJ340に移行して、ONF(N)の値を判別する。
ステップJ341においてノートデータの差分の絶対値が所定値より大きい場合には、SPFを「1」にセットする(ステップJ344)。すなわち、直前のノート・オンの鍵と次のノート・オンの鍵との間隔(鍵数)がある程度大きい場合には、ソステヌートペダルのペダルマークを点灯するためのフラグをセットする。
次に、アドレスレジスタPADに、AD(N)のアドレスをストアする(ステップJ345)。そして、図44のフローにおいて、「PAD+1」以下のデータを「2」アドレスだけ繰り下げる(ステップJ347)。すなわち、直前のノート・オンのイベントデータのエリアの後の2つのエリアを空きにする。そして、MEM[AD+1]のエリア(1番目の空きエリア)に、直前のノート・オンのタイムデータTIME(N)と同じタイムデータをストアする(ステップJ348)。次に、MEM[AD+2]のエリア(2番目の空きエリア)に、ペダル・オンのイベントデータをストアする(ステップJ349)。
ペダル・オンのイベントデータをストアした後、又は、図43のステップJ338においてSPFが「1」である場合、若しくは、図43のステップJ343においてNが所定数を超えた場合には、図44のステップJ350において、Nを「0」にセットして、Nをインクリメントしながら、オンフラグの値を判別する。すなわち、ONF(N)が「0」であるか否かを判別し(ステップJ351)、「1」である場合にはNをインクリメントする(ステップJ352)。そして、Nが所定数を超えたか否かを判別する(ステップJ353)。所定数以下である場合には、ステップJ351に移行して、ONF(N)の値を判別する。
ONF(N)が「1」である場合には、ADで指定するMEM[AD]のノートデータを、Nで指定するレジスタNOTE(N)にストアする(ステップJ354)。次に、AD(N)のアドレスをADのアドレスに変更する(ステップJ355)。すなわち、現在指定しているノート・オンのイベントデータのアドレスを、Nのポインタで指定するノート・オンのイベントデータのアドレスに更新する。そして、その更新したアドレスのノート・オンに対応するONF(N)を「1」にセットする(ステップJ356)。また、MEM[AD−1]のタイムデータをTIME(N)にストアする(ステップJ357)。
タイムデータをストアした後、又は、ステップJ353において、Nが所定数を超えた場合には、ADをインクリメントして(ステップJ358)、図43のステップJ334に移行して、メモリの次のエリアMEM[AD]のデータがイベントデータであるか否かを判別する。そして、イベントデータである場合には、ステップJ337において、そのイベントデータがノート・オンであるかを判別する。
MEM[AD]のイベントデータがノート・オフである場合には、図45のフローにおいて、SPFが「1」であるか否かを判別する(ステップJ359)。「1」である場合には、直前のノート・オンの鍵の番号を示すポインタNを「0」にセットして(ステップJ360)、Nをインクリメントしながら、直前のノートイベントデータのオンフラグONF(N)の値を判別する。すなわち、ONF(N)が「1」であるか否かを判別し(ステップJ361)、「1(発音)」である場合にはMEM[AD]のノートデータとポインタNで示すノートデータとが同じであるか否かを判別する(ステップJ362)。
ステップJ361においてONF(N)が「0(消音)」である場合、又は、ステップJ362においてノートデータが同じでない場合には、Nをインクリメントする(ステップJ363)。そして、Nが所定数を超えたか否かを判別する(ステップJ364)。所定数以下である場合には、ステップJ361に移行して、ONF(N)の値を判別する。
ステップJ362において、MEM[AD]のノートデータとポインタNで示すノートデータとが同じである場合には、SPFを「0」にリセットする(ステップJ365)。次に、ペダルデータのアドレスレジスタPADに、AD(N)のアドレスをストアする(ステップJ366)。そして、「PAD+1」以下のデータを「2」アドレスだけ繰り下げる(ステップJ367)。次に、図46のフローにおいて、MEM[AD+1]のエリア(1番目の空きエリア)に、直前のノート・オンのタイムデータTIME(N)と同じタイムデータをストアする(ステップJ368)。次に、MEM[AD+2]のエリア(2番目の空きエリア)に、ペダル・オフのイベントデータをストアする(ステップJ369)。
ペダル・オフのイベントデータをストアした後、又は、図45のステップJ359においてSPFが「0」である場合、若しくは、図45のステップJ364においてNが所定数を超えた場合には、図46のステップJ370において、Nを「0」にセットして、Nをインクリメントしながら、オンフラグの値を判別する。すなわち、ONF(N)が「1」であるか否かを判別し(ステップJ371)、「1」である場合には、NOTE(N)のノートデータとMEM[AD]のノートデータとが同じであるか否かを判別する(ステップJ372)。ONF(N)が「0」である場合、又はNOTE(N)のノートデータとMEM[AD]のノートデータとが異なる場合には、Nをインクリメントする(ステップJ373)。そして、Nが所定数を超えたか否かを判別する(ステップJ374)。所定数以下である場合には、ステップJ371に移行して、ONF(N)の値を判別する。
ステップJ371においてONF(N)が「1」であり、かつ、ステップJ372においてノートデータが同じである場合には、ONF(N)を「0」にリセットする(ステップJ375)。ONF(N)をリセットした後、又は、ステップJ374においてNが所定数を超えた場合には、ADをインクリメントして(ステップJ376)、図43のステップJ334に移行して、メモリの次のエリアMEM[AD]のデータがイベントデータであるか否かを判別する。
このように、上記第3実施形態によれば、演奏教習装置は、鍵盤演奏に関する楽音制御データを受信するデータ受信手段と、このデータ受信手段によって受信された楽音制御データにおける鍵盤演奏が特殊な押鍵操作であるか否かを判別するデータ判別手段と、このデータ判別手段によって特殊な押鍵操作であると判別された場合には、当該特殊な押鍵操作を補うためのペダル操作の楽音制御データを生成するデータ生成手段と、このデータ生成手段によって生成されたペダル操作を所定の表示手段に表示させる表示制御手段と、を有する構成になっている。
この場合において、前記特殊な押鍵操作は、任意の押鍵位置から次の押鍵位置までが所定の鍵数を超える操作であり、前記ペダル操作は、前記任意の押鍵位置での発音を持続させるための操作である。
また、前記データ受信手段は、ネットワーク上のサーバから任意の時間に前記データを受信する。
次に、第3実施形態の変形例について説明する。この変形例においては、送信側においてペダルデータ作成処理を行う構成になっている。図47は、第3実施形態の変形例における送信側のメインフローである。所定のイニシャライズを行った後(ステップS310)、スイッチ処理(ステップS311)、鍵盤処理(ステップS312)、ガイドデータ作成処理(ステップS313)、ペダルデータ作成処理(ステップS314)、発音処理(ステップS315)、送信処理(ステップS316)を実行する。そして、パワー・オフの操作がされたか否かを判別する(ステップS317)。パワー・オフでない場合には、ステップS311〜S316の処理を実行する。パワー・オフである場合には、パワー・オフ処理を行い(ステップS318)、このメインフローを終了する。
図48は、図47のメインフローにおけるステップS310のスイッチ処理のフローである。この処理では、モードスイッチ処理(ステップS318)、スタート/ストップスイッチ処理(ステップS319)、送信スイッチ処理(ステップS320)、ペダルデータ作成スイッチ処理(ステップS321)、その他のスイッチ処理(ステップS322)を実行して、メインフローに戻る。
図47のメインフローにおいて、ステップJ312の鍵盤処理については、第1実施形態において図11に示したフローと同じである。ステップJ313のガイドデータ作成処理については、第2実施形態において図22に示したフローと同じである。ステップJ314のペダルデータ作成処理は、第3実施形態において図43〜図46に示したフローと同じである。ステップJ315の発音処理は、第2実施形態において図23に示したフローと同じである。ステップJ316の送信処理は、第2実施形態において図21に示したフローと同じである。したがって、これらの説明は省略する。
また、図48のスイッチ処理のフローにおいて、ステップJ319のモードスイッチ処理は、第2実施形態において図17に示したフローと同じである。ステップJ320のスタート/ストップスイッチ処理は、第2実施形態において図19に示したフローと同じである。ステップJ321の送信スイッチ処理は、第2実施形態において図20に示したフローと同じである。ステップJ322のペダルデータ作成スイッチ処理は、第3実施形態において図41に示したフローと同じである。したがって、これらの説明は省略する。
さらに、この第3実施形態の変形例における受信側のフローについは、第2実施形態において図24〜図31に示したフローと同じであるので、説明は省略する。
なお、上記各実施形態においては、演奏教習処理のプログラムをプログラムROM2に格納した装置について説明したが、フロッピー(登録商標)ディスク、CD、ハードディスク等の記録媒体に、演奏教習処理のプログラムを記録し、このプログラムを汎用のパソコンに実行させる構成にしてもよい。この場合において、上記実施形態に対応して、記録媒体には下記の第1〜第5のプログラムが記録される。
第1のプログラムによる演奏教習処理は、
楽音制御データを受信するデータ受信手順と、
このデータ受信手順によって受信された楽音制御データの中の練習用楽音制御データを検出するデータ検出手順と、
このデータ検出手順によって検出された練習用楽音制御データに基づいて演奏練習用の内容を設定するデータ設定手順と、
を実行する。
第2のプログラムによる演奏教習処理は、
楽音制御データを受信するデータ受信手順と、
このデータ受信手順によって受信された楽音制御データの中の練習用楽音制御データを検出するデータ検出手順と、
このデータ検出手順によって検出された練習用楽音制御データに基づいて演奏練習用の内容を設定するデータ設定手順と、
を実行する。
第1及び第2のプログラムによる演奏教習処理によれば、熟練者である送信者側が、入力される楽音制御データを練習用楽音制御データに変換して送信するので、初心者である受信者側では、その練習用楽音データに基づいて演奏練習を行う。したがって、外部から供給される楽音制御データに基づいて、初心者でも、様々な練習方法を容易に実現できる。
第3のプログラムによる演奏教習処理は、
楽音制御データについて練習用の内容を設定するデータ設定手順と、
入力される楽音制御データを前記データ設定手順によって設定された内容に基づいて練習用楽音制御データに変換するデータ変換手順と、
前記データ変換手順によって変換された練習用楽音制御データをネットワーク上の所定の記憶装置に任意の時間に送信するデータ送信手順と、
を実行する。
第4のプログラムによる演奏教習処理は、
ネットワーク上の所定の記憶装置から楽音制御データを任意の時間に受信するデータ受信手順と、
このデータ受信手順によって受信された楽音制御データの中の練習用楽音制御データを検出するデータ検出手順と、
このデータ検出手順によって検出された練習用楽音制御データに基づいて演奏練習用の内容を設定するデータ設定手順と、
を実行する。
第3及び第4のプログラムによる演奏教習処理によれば、熟練者である送信者側が、楽音制御データを練習用楽音制御データに変換して、任意の時間にインターネット等のネットワーク上の所定の記憶装置に送信するので、遠隔地にいる教習者や時間的な制限のある教習者である受信者側では、最寄りのアクセスポイントを介して自分の都合の良い時間に、送信されている練習用楽音制御データを受信する。したがって、遠隔地に住んでいる教習者や勤務等により時間的に制限のある教習者でも、容易に楽音制御データの供給を受けることができる。
第5のプログラムによる演奏教習処理は、
鍵盤演奏に関する楽音制御データを受信するデータ受信手順と、
このデータ受信手順によって受信された楽音制御データにおける鍵盤演奏が特殊な押鍵操作であるか否かを判別するデータ判別手順と、
このデータ判別手順によって特殊な押鍵操作であると判別された場合には、
当該特殊な押鍵操作を補うためのペダル操作の楽音制御データを生成するデータ生成手順と、
このデータ生成手順によって生成されたペダル操作を所定の表示手段に表示させる表示制御手順と、
を実行する。
第5のプログラムによる演奏教習処理によれば、楽音制御データの供給を受ける教習者にとって鍵盤の演奏操作が困難な場合に、押鍵操作を補うためのペダル操作の楽音制御データを生成して表示させる。したがって、楽音制御データの供給を受ける教習者にとって鍵盤の演奏操作が困難な場合に、鍵盤操作をスムーズにできる。