(57)【特許請求の範囲】
【請求項１】
所定の通信手段を介して接続された外部装置から転送される処理単位のデータを受信する装置であって、
前記外部装置に対し、前記データの転送を要求する要求手段と、
前記外部装置から転送されたデータを受信する受信手段と、
前記データを構成するワードデータを処理内容に基づいて複数のワードデータ群に分類して、前記受信手段がデータを正常に受信したか否かを前記ワードデータ群単位で判定する判定手段と、
前記判定手段が正常でないと判定したワードデータ群が存在していた場合に、前記受信手段の受信状態に応じて、該ワードデータ群、及び他のワードデータ群の少なくとも一方を変更する変更手段と、
を具備したことを特徴とするデータ受信装置。
【請求項２】
前記判定手段が正常でないと判定したワードデータ群の再転送を要求するか否か決定する決定手段と、
前記ワードデータ群の再転送を要求すると前記決定手段が決定した場合に、該ワードデータ群の再転送を前記外部装置に要求する再転送要求手段と、を更に具備し、
前記変更手段は、前記ワードデータ群の再転送を要求しないと前記決定手段が決定した場合に、該ワードデータ群、及び他のワードデータ群の少なくとも一方を変更する、
ことを特徴とする請求項１記載のデータ受信装置。
【請求項３】
請求項１または２記載のデータ受信装置にデータを送信する装置であって、
前記データ受信装置からのデータの転送要求、及び前記ワードデータ群の再転送要求を受信する受信手段と、
前記受信手段が受信した要求の内容に応じて、前記データ、及び前記ワードデータ群の少なくとも一方を前記データ受信装置に送信する送信手段と、
を具備したことを特徴とするデータ送信装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、通信手段を介して接続された２つの装置間でデータを転送する技術に関する。
【０００２】
【従来の技術】
音声発音機能を備えた装置、例えば電子楽器では、その音声発音機能によって発音できる音声（楽音）の選択肢を広げるために、音声（楽音）を発音するための音声データを他の装置（ここでは、転送側装置と呼ぶことにする）から必要に応じて供給するようなことも行われている。転送側装置から音声データを必要に応じて供給するようにした場合には、電子楽器（音声発音側の装置）は様々な音色で楽音を発音させることができるという利点に加えて、データを格納するためのメモリ容量が小さくて済むことから、コストを低減することができるという利点も得ることができる。
【０００３】
【発明が解決しようとする課題】
上記のように、２つの装置間で音声データの転送を行った場合、その音声データによって発音される音声に不具合が生じないように、受信側である電子楽器はそれを正常に受信したか否かのチェックを行っている。そのチェックを行った結果、音声データの転送（受信）に異常（エラー）が発生していた場合、電子楽器は音声データの転送を転送側装置に再度要求して、それの受信を再度行っていた。
【０００４】
しかし、このような音声データの従来の転送方法では、エラーの発生時におけるデータ転送に要する時間はそうでないときの２倍以上かかり、非常に長くなる。このため、例えば曲の演奏途中に行った音色の切り替え時にエラーが発生すると、発音させるべき楽音の発音タイミングが遅れたり、或いは発音できないことがあるという問題があった。
【０００５】
周知のように、人間は発音タイミングの僅かなズレを認識することができる。発音タイミングの僅かなズレによって、人が受ける音楽的な（聴感上の）印象が大きく変わることも多い。これらのことからも明らかなように、発音タイミングのズレが音楽上で与える影響は非常に大きい。このことから、たとえデータの転送エラーの発生頻度が小さくとも、例えばエラー発生時のデータ転送にかかる時間を短縮するといったように、そのエラーの発生によって生じる影響を低減（或いは回避）することが強く望まれていた。
【０００６】
本発明の課題は、データ転送に発生したエラーの影響を低減することにある。
【０００７】
【課題を解決するための手段】
本発明の第１の態様によるデータ受信装置は、所定の通信手段を介して接続された外部装置から転送される処理単位のデータを受信することを前提とし、外部装置に対し、データの転送を要求する要求手段と、外部装置から転送されたデータを受信する受信手段と、データを構成するワードデータを処理内容に基づいて複数のワードデータ群に分類して、受信手段がデータを正常に受信したか否かをワードデータ群単位で判定する判定手段と、判定手段が正常でないと判定したワードデータ群が存在していた場合に、受信手段の受信状態に応じて、該ワードデータ群、及び他のワードデータ群の少なくとも一方を変更する変更手段と、を具備する。
【００１１】
なお、上記の構成に加えて、判定手段が正常でないと判定したワードデータ群の再転送を要求するか否か決定する決定手段と、ワードデータ群の再転送を要求すると決定手段が決定した場合に、該ワードデータ群の再転送を外部装置に要求する再転送要求手段と、を更に具備し、変更手段は、ワードデータ群の再転送を要求しないと決定手段が決定した場合に、該ワードデータ群、及び他のワードデータ群の少なくとも一方を変更する、ことが望ましい。
【００１２】
本発明のデータ送信装置は、上記データ受信装置にデータを送信することを前提とし、データ受信装置からのデータの転送要求、及びワードデータ群の再転送要求を受信する受信手段と、受信手段が受信した要求の内容に応じて、データ、及びワードデータ群の少なくとも一方をデータ受信装置に送信する送信手段と、を具備する。
【００１５】
本発明の第１の態様のデータ受信装置は、転送を要求することで送信されてきたデータを、ワードデータ群単位でエラー発生の有無を監視し、エラーが発生していた場合に、その受信状態に応じて、例えばワードデータ群間の整合性をとるようにワードデータ群を変更する。これにより、エラーによって生じる不具合を低減することが可能となる。
【００１６】
本発明のデータ送信装置は、上記データ受信装置からのデータの転送要求、或いは再転送要求に応じて、データ全体、或いはワードデータ群の送信を行う。これにより、上記データ受信装置は、必要なデータ、或いはワードデータ群だけを、必要に応じて得ることが可能となる。
【００１７】
【発明の実施の形態】
以下、図面を参照しながら、本発明の実施の形態につき詳細に説明する。
＜第１の実施の形態＞
図１は、第１の実施の形態が適用されたシステムの概観図である。
【００１８】
図１に示すように、上記システムは、ユーザに演奏操作される鍵盤１０２を備えた電子楽器１０１と、それにケーブル１０４によって接続されたパーソナルコンピュータ（以降、パソコンと記す）１０３とから構成されている。第１の実施の形態によるデータ受信装置は電子楽器１０１に、第１の実施の形態によるデータ送信装置はパソコン１０３に適用されている。
【００１９】
図２は、上記電子楽器１０１の全体回路図である。次に、図２を参照して、その構成、及び動作について説明する。また、パソコン１０３の動作についても合わせて説明する。
【００２０】
図２に示すように、電子楽器１０１は、楽器全体の制御を実行するＣＰＵ２０１と、プログラムや制御データ、自動演奏データ等を格納したＲＯＭ２０２と、ＣＰＵ２０１がワーク用に使用するＲＡＭ２０３と、不図示のコネクタを介してパソコン１０３を含む他の装置とのデータの送受信を行うインターフェイス（Ｉ／Ｆ）２０４と、鍵盤１０２のスキャンを行うキーマトリクス回路２０５と、そのキーマトリクス回路２０５によってスキャンされるスイッチ群２０６と、ＣＰＵ２０１の指示に従って楽音を発音するサウンドシステム２０７とを備えて構成されている。
【００２１】
以上の構成において、その概略動作を説明する。
楽器１０１の電源がオンされると、ＣＰＵ２０１は、ＲＯＭ２０２からプログラムを読み出してそれを実行することにより、楽器１０１の制御を開始する。その制御は、鍵盤１０２やスイッチ群２０６に対してユーザが行った操作、更にはインターフェイス２０４を介して他の装置から送信されたデータに応じて行われる。なお、他の装置については、混乱を避けるために、パソコン１０３に特定して以降の説明を行うことにする。
【００２２】
上記スイッチ群２０６は、自動演奏モードの設定用の自動演奏モードスイッチ、自動演奏のスタートやストップを指示するためのスタート／ストップスイッチ、音色の変更を指示するためのトーンボタン、音色や自動演奏させる曲などを番号で指定するための０〜９ボタン等の各種スイッチをまとめて表したものである。ＣＰＵ２０１は、キーマトリクス回路２０５に鍵盤１０２やスイッチ群２０６のスキャンを行わせ、そのスキャン後の信号を解析することにより、それらの操作状態や、行われた操作を検出して、その検出結果に従って楽器１０１全体の制御を実行する。
【００２３】
ユーザが鍵盤１０２の操作を行った場合、ＣＰＵ２０１は、ユーザが操作した鍵、及びその操作内容を特定し、それら特定した内容に応じて制御コマンドを生成してサウンドシステム２０７に出力する。それにより、サウンドシステム２０７は、ユーザが鍵盤１０２に行った操作に応じて楽音の発音を開始したり、発音中の楽音を消音させる。
【００２４】
上記サウンドシステム２０７は、例えば音源ＬＳＩ、Ｄ／Ａコンバータ、アンプ、及びスピーカから構成されている。音源ＬＳＩは、例えばＰＣＭ方式で符号化された波形データを内部のメモリに格納し、その波形データを読み出す速さを変えることにより、様々な音高の波形データを生成し、必要に応じて、生成した波形データに音響効果を付加する処理を施してＤ／Ａコンバータに出力する。Ｄ／Ａコンバータは、波形データをアナログのオーディオ信号に変換してアンプに出力し、アンプはそれの増幅を行ってスピーカに出力する。アンプからスピーカにオーディオ信号が出力されることにより、楽音が発音される。
【００２５】
上記音源ＬＳＩ内のメモリに格納させる波形データは、例えばＲＯＭ２０２に、その構成を表す情報と合わせてファイル形式で格納されている。ＣＰＵ２０１は、ユーザがスイッチ群２０６を介して指定した音色に応じて、ＲＯＭ２０２から波形データを読み出して音源ＬＳＩに送出することにより、音色の切り換えを行う。なお、そのファイル形式で格納されたデータ一式については、波形データと区別するために、音声データと呼ぶことにする。
【００２６】
ＲＯＭ２０２に格納されていない音声データは、音声データを供給するアプリケーションプログラムをパソコン１０３上で起動させることで取得することができる。このアプリケーションプログラムは、例えばパソコン１０３のハードディスク上にインストールさせて使用するようにしたものであっても良いが、ＣＤ−ＲＯＭといった記憶媒体に格納して配布し、その記憶媒体から必要に応じて主記憶装置上にロードさせて（例えばドライブに装着時）使用するようにしたものであっても良い。第１の実施の形態では、様々な音声データを用意しなければならないことから後者を採用し、アプリケーションプログラムを音声データ等とともに記憶媒体に格納させて配布している。
【００２７】
ユーザがＲＯＭ２０２に格納されていない音声データの音色を選択した場合、ＣＰＵ２０１は、パソコン１０３に対し、インターフェイス２０４を介して、ユーザが選択した音色に対応する音声データの転送を要求する音声データ転送要求コマンドを送る。他方のパソコン１０３は、その要求コマンドを受け取ると、その内容に従って記憶媒体（例えばＣＤ−ＲＯＭ）から該当する音声データを含むファイルを検索し、電子楽器１０１に検索した音声データを転送する。
【００２８】
図３は、上記音声データの構成図である。図３に示すように、音声データはヘッダ部とＰＣＭデータ部とから構成され、そのＰＣＭデータ部はストレート部とループ部とから構成されている。
【００２９】
上記ヘッダ部は、ＰＣＭデータ部を適切に制御するために必要なワードデータ群であり、そのデータ転送や発音処理は、ヘッダ部に格納された情報に基づいて行われる。そのヘッダ部には、第１及び第２バイト目にはストレート部のデータ数、第３バイト目にはそのストレート部のチェックサム値、第４及び第５バイト目にはループ部のデータ数、第６バイト目にはループ部のチェックサム値が格納されている。
【００３０】
ＰＣＭデータ部は、実際の音声のアナログ信号をサンプリングしてデジタルデータに変換した１ワードが８ビットのデータ群である。それを構成するストレート部には、楽音の発音において１回だけ処理されるデータが格納され、ループ部には、ストレート部の処理に引き続いて繰り返し処理されるデータが格納されている。
【００３１】
なお、音声データが声のデータであった場合には、上記ストレート部は発音の頭の子音部分に相当するワードデータ群であり、他方のループ部は発音の後ろのほうの母音部分に相当するワードデータ群である。
【００３２】
図４は、上記音声データ要求コマンドの構成図である。図４に示すように、３バイトのデータとして構成されている。
第１バイト目に格納されるコマンドＩＤは、パソコン１０３に要求する内容を表すコマンドのコードである。第２バイト目の音声データ番号は、転送を要求する音声データを指定するデータである。第３バイト目のデータ転送形式は、音声データのなかで転送を要求する部分を指定するコードである。
【００３３】
第１の実施の形態では、データ転送形式として、３種類の値を用意、換言すれば音声データを転送する形式を３種類に分けている。ここでは、上記３種類の値を、DATA HEADER 、DATA STRAIGHT 、DATA LOOP とする。DATA HEADER は、音声データの全ての転送を要求していることを表し、DATA STRAIGHT はＰＣＭデータ部全ての転送を、DATA LOOP はＰＣＭデータ部中のループ部のみの転送を要求していることをそれぞれ表している。
【００３４】
電子楽器１０１側のＣＰＵ２０１は、ユーザが音色の指定を行うと、コマンドＩＤには音声データ転送要求コマンドである旨を示すコードの値、音声データ番号にはユーザが音色の指定に入力した番号、データ転送形式にはDATA HEADER をそれぞれ格納したコマンドを生成してインターフェイス２０４に出力し、インターフェイス２０４を介してパソコン１０３にコマンドを送る。
【００３５】
データ転送には、何らかの理由からエラーが発生することがある。このため、ＣＰＵ２０１は、上記コマンドを送った後に開始されるパソコン１０３のデータ転送が正常に行われているか否かの監視を、音声データの各部毎に行う。その監視を行った結果、正常に転送されていない部分を検出すると、その部分のデータの転送を要求する音声データ転送要求コマンドを生成してそれをパソコン１０３に送る。
【００３６】
他方のパソコン１０３は、電子楽器１０１からコマンドを受け取ると、コマンドＩＤからそのコマンドの種別を特定し、電子楽器１０１の要求に応じてデータを転送するといった処理を行う。そのコマンドが音声データ転送要求コマンドであった場合には、音声データ番号で指定された音声データをＣＤ−ＲＯＭ等の記憶媒体から取得し、その取得した音声データから、データ転送形式で指定された部分を抽出して電子楽器１０１に転送する。これにより、電子楽器１０１側の要求に応じて、音声データの全て、或いはその一部分がパソコン１０３から電子楽器１０１に転送される。
【００３７】
電子楽器１０１のＣＰＵ２０１は、パソコン１０３から転送されたデータを、インターフェイス２０４を介して受け取り、ＲＡＭ２０３に格納する。そのデータ転送が正常に完了すると、その音声データをサウンドシステム２０７に送出する。それにより、パソコン１０３から転送された音声データで楽音を発音させることができる。
【００３８】
第１の実施の形態では、上述したように、音声データを処理内容に基づいて複数の部分に分割し、各部分毎に独立してデータ転送を行えるようにしている。このため、エラーが発生しても、そのエラーが発生した部分だけの再転送を行うだけで良く、転送が正常に行われた部分の再転送を回避することができる。それにより、エラー発生時でのデータ転送にかかる時間を短縮することができ、発音タイミングの遅れ等を回避、或いはその遅れ等を小さくすることができる。
【００３９】
以上が、電子楽器１０１、及びパソコン１０３の動作の概略である。次に、図５〜図７を参照して電子楽器１０１の動作を、また、図８を参照してパソコン１０３の動作を詳細に説明する。
【００４０】
図５は、電子楽器１０１で実行される全体処理の動作フローチャートである。始めに、図５を参照して、全体処理について詳細に説明する。なお、全体処理は、ＣＰＵ２０１が、ＲＯＭ２０２に格納されているプログラムを読み出して実行することにより実現される処理である。
【００４１】
楽器１０１の電源がオンされると、ＣＰＵ２０１は、ＲＯＭ２０２からプログラムを読み出してその制御を開始する。その制御の開始時には、ステップ５０１が実行される。
【００４２】
そのステップ５０１では、楽器１０１を予め定められた状態に初期設定するイニシャル処理を実行する。このイニシャル処理を実行することにより、ＲＡＭ２０３、或いはＣＰＵ２０１内のレジスタに保持される各種制御用の変数には、それぞれ、予め定められた初期値が代入される。例えば音声データの転送に関わる変数byDataReceivingStatus 、wDataCounter、wLoopNum、byCheckSumには、それぞれ、DATA HEADER 、０、６、０が代入される。このようなイニシャル処理が終了した後、ステップ５０２に移行する。
【００４３】
なお、上記変数byDataReceivingStatus は、パソコン１０３が音声データのどの部分を転送しているかを管理するための変数である。他の変数については、変数wDataCounterは音声データの各部分で受信したデータ（ワード）数をカウントするための変数、変数wLoopNumは各部分で受信すべきデータ（ワード）数が代入される変数であり、ヘッダ部のデータ数は６であることから、上記イニシャル処理では６が代入される。最後の変数byCheckSumは、各部（ここでは、ストレート部とループ部）でデータを正確に受信できたか否かを判定するために使用される。具体的には、各部においてそれまでに受信したデータのチェックサムの計算結果（例えば排他的論理和）が代入される。
【００４４】
ステップ５０２では、スイッチ群２０６の操作状態、及び各種のスイッチに対して行われた操作を検出し、その検出結果に基づいて各種の設定等を行うスイッチ処理を実行する。このスイッチ処理の実行により、ユーザはスイッチ群２０６に対する操作を介して各種モードや音色、テンポ、自動演奏させる曲等を設定することができる。
【００４５】
ステップ５０２に続くステップ５０３では、鍵盤１０２に対して行われた操作を検出し、その検出結果に基づいて楽音を発音させる鍵盤処理を実行する。この鍵盤処理の実行により、ユーザは鍵盤１０２への操作を介して所望の楽音を随時発音させることができる。
【００４６】
鍵盤処理が終了すると、ステップ５０４に移行する。そのステップ５０４では、自動演奏データに従って曲を再生する曲再生処理を実行する。その曲再生処理を終了した後、ステップ５０５に移行する。
【００４７】
なお、上記自動演奏データは、例えばスタンダードＭＩＤＩファイル（ＳＭＦ）の形式で用意されたデータである。ＳＭＦは、ＭＩＤＩのイベントデータに時間情報を付加して構成されたデータストリームである。このため、自動演奏データに従った曲の再生は、その時間情報に従って順次ＭＩＤＩイベントを処理していくことで行われる。
【００４８】
ステップ５０５では、データ受信処理を実行する。実際のデータの受信は、後述するインタラプト処理で行っている。ここで行われるのは、その受信したデータに対する処理であり、受信した音声データのサウンドシステムへの送出は、ここで行われる。
【００４９】
ステップ５０５に続くステップ５０６では、パソコン１０３に、音声データの転送を要求する音声データ要求処理を実行する。ここで要求される音声データは、ステップ５０２のスイッチ処理、ステップ５０３の鍵盤処理、或いはステップ５０４の曲再生処理を実行することで特定したものである。その音声データ要求処理を終了すると、ステップ５０２に戻る。
【００５０】
このように、ステップ５０２〜５０６で形成される処理ループが繰り返し実行される。これにより、ユーザが指定した曲の自動演奏や、所望する楽音が所望の音色で発音されることになる。
【００５１】
図６は、上記全体処理内でステップ５０６として実行される音声データ要求処理の動作フローチャートである。次に、図６を参照して、そのサブルーチン処理について詳細に説明する。
【００５２】
なお、音声データの転送の要求は、ユーザがスイッチ群２０６を操作して指定した音色や、自動演奏データ中のプログラムチェンジが指定する音色が電子楽器１０１（ＲＯＭ２０２）に用意されていないときに生じる。また、設定方法等についての説明は省略するが、鍵盤１０２の各鍵毎、或いは１つ以上の鍵で構成させた各グループ毎に、異なる音色、或いは楽音を割り当てた場合には、鍵盤１０２をユーザが操作する度に音色データの転送を要求する必要が生じる。音色データ要求処理では、これらのようなことから必要になった音声データの転送をパソコン１０３に要求することが行われる。
【００５３】
先ず、ステップ６０１では、ステップ５０２のスイッチ処理、ステップ５０３の鍵盤処理、或いはステップ５０４の曲再生処理を実行することによって必要と認識した音声データの転送を要求する音声データ転送要求コマンドを作成する。このとき、第３バイト目のデータ転送形式には、音声データの全てが必要であることから、DATA HEADER が格納される。
【００５４】
ステップ６０１に続くステップ６０２では、上記作成した音声データ転送要求コマンドを送信データバッファに書き込む。その書き込みが終了した後、一連の処理を終了する。
【００５５】
上記送信データバッファは、インターフェイス２０４内のバッファに設けられた送信用の記憶領域である。このため、ステップ６０２の処理は、ＣＰＵ２０１が、インターフェイス２０４に作成した音声データ転送要求コマンドを出力し、そのコマンドを、内部に備えたバッファ内の送信データバッファ（記憶領域）に書き込ませることで実現される。
【００５６】
パソコン１０３は、ケーブル１０４を介して、インターフェイス２０４のバッファにアクセスする。このため、インターフェイス２０４内のバッファに音声データ転送要求コマンドを書き込むことにより、そのコマンドがパソコン１０３に送られることになる。
【００５７】
なお、上述した音声データ要求処理の処理動作は、パソコン１０３に音声データの転送を要求する場合のものである。音声データの転送を要求する必要がない場合には、ステップ６０１及び６０２の処理を実行せずに一連の処理が終了することになる。
【００５８】
図７は、データ受信インタラプト処理の動作フローチャートである。次に、図７を参照して、このインタラプト処理について詳細に説明する。
音声データ転送要求コマンドを受け取ったパソコン１０３は、そのコマンドが指定する音声データを１バイト（ワード）ずつ転送する。インターフェイス２０４は、パソコン１０３からデータを内部のバッファに格納するとともに、ＣＰＵ２０１に対して割り込みを発生させる。データ受信インタラプト処理は、その割り込みの発生により実行される処理である。
【００５９】
ＣＰＵ２０１は、音声データの転送をパソコン１０３に要求した場合、音声データを格納する領域を各部分毎にＲＡＭ２０３内に用意し、パソコン１０３から転送される音声データをその領域に一旦格納する。データ受信インタラプト処理では、インターフェイス２０４が受信したデータが音声データ中のどの部分のものであるか、また、各部分のデータが正常に転送されているかを判定しながら、音声データをＲＡＭ２０３に格納することが行われる。
【００６０】
先ず、ステップ７０１では、変数byDataReceivingStatus に代入されている値を判定する。上記したように、変数byDataReceivingStatus は、現在受信中のデータが音声データのどの部分かを把握するための変数であり、DATA HEADER 、DATA STRAIGHT 、及びDATA LOOP の３種類の値のうちの一つが代入される。DATA HEADER はヘッダ部のデータを受信中であることを表し、DATA STRAIGHT はストレート部、DATA LOOP はループ部のデータを受信中であることをそれぞれ表している。
【００６１】
変数byDataReceivingStatus にDATA HEADER が代入されていた場合、ステップ７０２に移行する。そのステップ７０２では、受信データを、ＲＡＭ２０３内のヘッダ部用のデータ格納領域に格納する。その格納が終了すると、ステップ７０７に移行する。
【００６２】
変数byDataReceivingStatus にDATA STRAIGHT が代入されていた場合には、ステップ７０３に移行する。そのステップ７０３では、受信データを、ＲＡＭ２０３内のＰＣＭデータ部用のデータ格納領域に格納し、続くステップ７０４では、チェックサム値の計算を行い、その計算結果を変数byCheckSumに代入する。それが終了すると、ステップ７０７に移行する。
【００６３】
チェックサム値としては、図３に示すように、ＰＣＭデータ部を構成するストレート部、ループ部の２つの値をヘッダ部に格納させている。チェックサムの計算はストレート部とループ部とで別々に行うようにしている。これにより、受信を正常に行えたか否かを部分毎に判定することができるようになっている。なお、チェックサム値の計算は、例えば、それまでに受信したデータの排他的論理和を算出、即ち変数byCheckSumと受信データの排他的論理和を算出することで行われる。
【００６４】
変数byDataReceivingStatus にDATA LOOP が代入されていた場合には、ステップ７０５に移行する。そのステップ７０５では、受信データを、ＲＡＭ２０３内のＰＣＭデータ部用のデータ格納領域に格納し、続くステップ７０６では、チェックサム値の計算を行い、その計算結果を変数byCheckSumに代入する。それが終了すると、ステップ７０７に移行する。
【００６５】
このように、ステップ７０１〜７０６では、受信データが音声データのどの部分に属しているかに応じてＲＡＭ２０３に格納することが行われる。
上記ステップ７０７では、音声データとして１バイト（ワードデータ）を受信したことから、変数wDataCounterの値のインクリメントを行う。その後、ステップ７０８に移行する。
【００６６】
ステップ７０８では、変数wDataCounterの値が変数wLoopNumの値と等しいか否か判定する。変数wLoopNumは、ヘッダ部、ストレート部、或いはループ部の各部分を構成しているデータ（ワード）の総数が代入される変数であり、ヘッダ部のデータを受信している場合には６、ストレート部のデータを受信している場合にはヘッダ部の第１及び第２バイト目のデータ、ループ部のデータを受信している場合にはヘッダ部の第４及び第５バイト目のデータがそれぞれ代入される。このため、現在受信中の部分のデータを全て受信した場合、その判定はＹＥＳとなってステップ７０９に移行する。そうでない場合には、その判定はＮＯとなって一連の処理を終了する。
【００６７】
ステップ７０９以降では、音声データを構成する１部分のデータの受信が完了したと判断して、それに伴う処理が行われる。その部分のデータの受信が正常に行えたか否か判定、即ちエラーの発生の有無を判定し、その判定結果に応じた処理はここで行われる。
【００６８】
先ず、ステップ７０９では、変数wDataCounterの値をクリア、即ちそれに０を代入する。続くステップ７１０では、変数byDataReceivingStatus に代入されている値を判定する。変数byDataReceivingStatus にDATA HEADER が代入されていた場合、ステップ７１１に移行して、変数byDataReceivingStatus とwLoopNumの更新を行う。具体的には、ヘッダ部の受信が完了したことから、変数byDataReceivingStatus にDATA STRAIGHT を代入し、他方の変数wLoopNumには、受信が完了したヘッダ部の第１及び第２バイト目のデータで構成される１６ビットの値（第１バイト目が上位８ビット、第２バイト目が下位８ビットである）を代入する。それが終了した後に一連の処理を終了する。
【００６９】
変数byDataReceivingStatus にDATA STRAIGHT が代入されていた場合には、ステップ７１２に移行する。そのステップ７１２では、変数byCheckSumに代入されているチェックサム値が、受信したヘッダ部の第３バイト目のチェックサム値と一致するか否か判定する。ストレート部の受信が正常に行われた場合、それらチェックサム値は一致することから判定はＹＥＳとなり、ステップ７１３に移行する。そうでない場合には、即ちエラーが発生している場合には、その判定はＮＯとなってステップ７１４に移行する。
【００７０】
ステップ７１３では、変数byDataReceivingStatus 、wLoopNum、及びbyCheckSumの更新を行う。具体的には、ストレート部の受信を正常に完了したことから、変数byDataReceivingStatus にDATA LOOP を代入し、変数wLoopNumには、受信が完了したヘッダ部の第４及び第５バイト目のデータで構成される１６ビットの値（第４バイト目が上位８ビット、第５バイト目が下位８ビットである）を代入し、変数byCheckSumには０を代入する。それが終了した後に一連の処理を終了する。
【００７１】
他方のステップ７１４では、ストレート部の受信にエラーが発生したことから、このストレート部の転送を要求する音声データ転送要求コマンド（第３バイト目のデータ転送形式をDATA STRAIGHT としたコマンドである）を生成し、続くステップ７１５でそのコマンドをインターフェイス２０４の送信データバッファに書き込む。その後、一連の処理を終了する。
【００７２】
上記再作成した音声データ転送要求コマンドを送信データバッファに書き込むことにより、パソコン１０３からストレート部のデータが再転送される。エラーが発生した場合、変数byDataReceivingStatus の更新を行っていないので、上記コマンドを送出後にパソコン１０３から転送されるデータはストレート部のデータとして受信される。
【００７３】
一方、変数byDataReceivingStatus にDATA LOOP が代入されていた場合には、ステップ７１０からステップ７１６に移行する。そのステップ７１６では、変数byCheckSumに代入されているチェックサム値が、受信したヘッダ部の第６バイト目のチェックサム値と一致するか否か判定する。ループ部の受信が正常に行われた場合、それらチェックサム値は一致することから判定はＹＥＳとなり、ステップ７１７に移行する。そうでない場合には、即ちエラーが発生している場合には、その判定はＮＯとなってステップ７１８に移行する。
【００７４】
ステップ７１７では、変数byDataReceivingStatus 、wLoopNum、及びbyCheckSｕｍの更新を行う。具体的には、ループ部の受信を正常に完了、即ち音声データの受信を全て正常に完了したことから、変数byDataReceivingStatus にDATA HEADER を代入し、変数wLoopNumにはヘッダ部の全データ（ワード）数である６を代入し、変数byCheckSumには０を代入する。それが終了した後に一連の処理を終了する。
【００７５】
他方のステップ７１８では、ループ部の受信にエラーが発生したことから、このループ部の転送を要求する音声データ転送要求コマンド（第３バイト目のデータ転送形式をDATA LOOP としたコマンドである）を生成し、続くステップ７１９でそのコマンドをインターフェイス２０４の送信データバッファに書き込む。その後、一連の処理を終了する。
【００７６】
このように、第１の実施の形態では、ヘッダ部を除く各部分毎にデータ転送にエラーが発生したか否か判定し、エラーが発生していると判定すれば、そこでデータ転送を中断させて、エラーが発生した部分からデータ転送を再開するようにしている。
【００７７】
各部分毎に独立にエラーを検出するようにしたことで、音声データ全体の転送が終了する前の段階で、即ち発生したエラーを迅速に検出することができる。エラーが発生した部分に限定してデータの再転送を行えるようにしたことで、実際に必要としているデータの転送にかかる時間を短縮することができる。エラーが発生した部分でデータの転送を中断させることにより、エラーの発生によって廃棄されるデータの転送にかかる時間を短縮することができる。これらにより、エラー発生時におけるデータ転送をより短時間で行うことができ、エラー発生時の影響を低減することができる。
【００７８】
以上が電子楽器１０１側が実行する主要な処理である。次に、図８を参照して、パソコン１０３側が実行する動作について詳細に説明する。図８は、パソコン１０３が実行する全体処理の動作フローチャートである。
【００７９】
なお、第１の実施の形態では、パソコン１０３から音声データを供給するアプリケーションプログラムをその音声データ等とともにＣＤ−ＲＯＭで配布している。このことから、図８に示す全体処理は、そのＣＤ−ＲＯＭに格納されているアプリケーションプログラムを起動、即ちそのアプリケーションプログラムを主記憶装置上にロードし、それにパソコン１０３のＣＰＵの制御を割り当てることで実現される。
【００８０】
また、図８に示す動作フローチャートは、上記アプリケーションプログラムをパソコン１０３のＣＰＵが実行した際の処理動作のなかから、本発明に特に関わる部分を抜粋して示したものである。
【００８１】
先ず、ステップ８０１では、コマンドを受信したか否か判定する。上記したように、パソコン１０３は、電子楽器１０１のインターフェイス２０４内のバッファにアクセスする。より具体的には、パソコン１０３のＣＰＵは、パソコン１０３側のインターフェイス、ケーブル１０４を介して電子楽器１０１のインターフェイス２０４内のバッファにアクセスする。例えば上記インターフェイスは、インターフェイス２０４内に割り当てられた送信データバッファに何らかのコマンドが書き込まれていた場合に割り込み信号を出力し、その旨をＣＰＵに通知するようになっている。このため、その送信データバッファ内に何らかのコマンドが書き込まれていた場合、その判定はＹＥＳとなってステップ８０２に移行する。そうでない場合には、その判定はＮＯとなって一連の処理を終了する。
【００８２】
ステップ８０２では、上記送信データバッファに書き込まれていたコマンドを読み出して（受信して）解析を行う。それに続くステップ８０３では、コマンドを解析した結果、そのコマンドが音声データ転送要求コマンドか否か判定する。電子楽器１０１のインターフェイス２０４の転送データバッファ内に音声データ転送要求コマンドが書き込まれていた場合、その判定はＹＥＳとなってステップ８０５に移行する。そうでない場合には、その判定はＮＯとなってステップ８０４に移行する。
【００８３】
ステップ８０４では、音声データ転送要求コマンド以外のコマンドに応じた処理を実行する。このコマンドに応じた処理では、一例を挙げればＣＤーＲＯＭに格納されている自動演奏データを電子楽器１０１に転送するといったことが行われる。それが終了した後、ステップ８０１に戻る。
【００８４】
他方のステップ８０５では、音声データ転送要求コマンドの第２バイト目に格納されている音声データ番号に該当するファイルをＣＤ−ＲＯＭから検索する。その検索が終了した後、ステップ８０６に移行し、検索したファイルから、上記コマンドの第３バイト目であるデータ転送形式で要求された部分のデータを抽出してその送信を行う。それが終了した後、ステップ８０１に戻る。
【００８５】
上記したように、音声データは、８ビット（１ワード）毎に、電子楽器１０１側の受信に合わせて順次転送するようにしている。このため、実際のデータ転送は、インタラプト処理で行っている。
【００８６】
そのインタラプト処理は、例えばパソコン１０３が備えたケーブル１０４に接続されているインターフェース（図示せず）が出力した割り込み信号（入出力割り込み）によって実行される処理である。それを実行することにより、１バイトのデータを電子楽器１０１側の動作に合わせて出力する。このようなことから、ステップ８０６でのデータの送信は、例えばその送信を開始することを電子楽器１０１に通知するといったことだけが行われる。
【００８７】
なお、音声データを構成する各部分は、電子楽器１０１側に合わせて、ヘッダ部、ストレート部、ループ部の順序で転送される。また、音声データ転送要求コマンドのデータ転送形式の内容に応じて転送する部分についても、電子楽器１０１側の動作に合わせて設定される。即ち例えばデータ転送形式がDATA STRAIGHT であった場合には、ＰＣＭデータ部を構成するストレート部とループ部が共に転送される。
【００８８】
上記のような処理動作が、上記アプリケーションプログラムの実行時にパソコン１０３上で行われる。これにより、電子楽器１０１からのデータ転送の要求、即ち音声データ転送要求コマンドに応じて、パソコン１０３から電子楽器１０１に音声データが１バイトずつ転送される。
【００８９】
なお、第１の実施の形態では、音声データをヘッダ部、ストレート部、及びループ部の３つの部分に分割してデータ転送を行っているが、例えば各部のデータ量に応じてより細かく分割するようにしても良い。具体的には、例えばストレート部のデータ量が他の部分と比較して大きいような場合、そのストレート部を複数の部分に更に分割するようにしても良い。
＜第２の実施の形態＞
上記第１の実施の形態では、音声データをヘッダ部、ストレート部、及びループ部に分割して、それら各部のデータが正常に転送されたか否かをチェックし、エラーの発生を検出した時点でそのエラーが発生した部分のデータを無条件で再送するようにしている。これに対し、第２の実施の形態は、エラーの発生を検出したときのデータの再送を行うか否か選択できるようにしたものである。
【００９０】
データの転送にエラーが発生した場合、転送されたデータで楽音を発音させると、エラーの内容によって程度は異なるが、聴感上、何らかの不具合を人に与える。しかし、例えば自動演奏中におけるプログラムチェンジ（音色変更）のように（このときには、ユーザの鍵盤１０２に対する押鍵に応じて楽音を発音させる必要もある）、迅速な発音のための処理を行わなければならない状況では、データの再送によって発音タイミングの遅れが発生することもありえるため、エラーの発生時にデータの再送を行うことは必ずしも得策とは限らない。このようなことから、第２の実施の形態は、データの再送を行うか否かを選択することで、ユーザがより快適な状態で楽音を発音させられることを実現できるようにさせたものである。
【００９１】
第２の実施の形態による電子楽器は、第１の実施の形態によるそれと構成は基本的に同じであり、また、処理動作も基本的に同じである。パソコンについては、第１の実施の形態から構成、及び処理動作が変わっていない。このため、第１の実施の形態で使用した符号をそのまま使用して、第２の実施の形態による電子楽器１０１が第１の実施の形態によるそれから異なっている部分のみ説明することにする。
【００９２】
第２の実施の形態では、エラー発生時にデータの再送を行うか否かを、ユーザが選択できるようにしている。その選択用として、図２に示すように、スイッチ群２０６を構成するスイッチの一つとして再送スイッチ２０６ａを備えている。データの再送を行うか否かを示す変数（フラグ）として、bReTransferFlag を用意している。ＣＰＵ２０１は、ユーザが上記再送スイッチ２０６ａを操作する毎に、その変数bReTransferFlag に代入する値の変更を行う。
【００９３】
なお、変数bReTransferFlag に代入される値は、データを再送するか否かの２種類であるが、それに代入されている値の意味を明確にするために、データを再送する場合（再送モード時）の値をＴＲＵＥと記載することにする。ＣＰＵ２０１は、変数bReTransferFlag にＴＲＵＥを代入した場合には、例えば不図示のＬＥＤを点灯させてその旨をユーザに通知することを合わせて行う。
【００９４】
また、第２の実施の形態では、データ転送中に発生するデータの欠落を検出するために、それ用の１ワードのデータをＰＣＭデータ部に挿入させている。
図９は、第２の実施の形態で用いられる音声データの構成図である。ループ部の先頭には、図９に示すように、１バイトの標識データを追加している。その標識データは、最上位ビットの値は１とし、ＰＣＭデータ部の他のデータは７ビットのデータ（最上位ビット（ＭＳＢ）の値は０）としている。これにより、標識データを他のデータと区別することができるようにしている。
【００９５】
図９に示すような音声データを転送した場合、上記標識データを受信したタイミングにより、データの欠落が発生したか否かを判定することができる。例えばヘッダ部の第１及び第２バイト目に格納されているデータ数だけデータを受信する前に標識データを受信した場合には、ヘッダ部、或いはストレート部でデータの欠落が発生したことになる。
【００９６】
データの欠落は、データ全体の用法に影響することが多く、データを正確に受信できなかったときよりも聴感上の不具合が大きくなるのが普通である。第２の実施の形態では、エラーの内容によって影響の大きさが異なることから、影響の大きさを基にエラーを２種類に分類し、不具合が比較的に大きいエラーの発生時にはデータの再送を無条件で行い、それが比較的に小さいときにはユーザの指定（再送モードが設定されているか否か）に応じてデータの再送を行っている。
【００９７】
以上が、第２の実施の形態の概要である。次に、上記エラー発生時におけるデータの再送を実現するための第２の実施の形態におけるＣＰＵ２０１の動作について詳細に説明する。
【００９８】
第２の実施の形態における処理動作の流れは、第１の実施の形態のそれと同じである。その処理内容としては、データ受信インタラプト処理が第１の実施の形態から最も異なっている。他の処理においては、相違点が無いか、相違点が有ったとしても僅かである。このため、図１０に示すその動作フローチャートを参照して、データ受信インタラプト処理のみ説明する。
【００９９】
先ず、ステップ１００１では、変数byDataReceivingStatus に代入されている値を判定する。上記したように、変数byDataReceivingStatus は、現在受信中のデータが音声データのどの部分かを把握するための変数であり、DATA HEADER 、DATA STRAIGHT 、及びDATA LOOP の３種類の値のうちの一つが代入される。
【０１００】
変数byDataReceivingStatus にDATA HEADER が代入されていた場合、ステップ１００２に移行する。そのステップ１００２では、受信データを、ＲＡＭ２０３内のヘッダ部用のデータ格納領域に格納する。その格納が終了すると、ステップ１０１２に移行する。
【０１０１】
変数byDataReceivingStatus にDATA STRAIGHT が代入されていた場合には、ステップ１００３に移行する。そのステップ１００３では、受信データが標識データか否か判定する。その受信データの最上位ビットの値が１であった場合、標識データを受信したとして判定はＹＥＳとなり、ステップ１００６に移行する。そうでない場合には、その判定はＮＯとなってステップ１００４に移行する。
【０１０２】
ステップ１００４では、受信データを、ＲＡＭ２０３内のＰＣＭデータ部用のデータ格納領域に格納し、続くステップ１００５では、チェックサム値の計算を行い、その計算結果を変数byCheckSumに代入する。それが終了すると、ステップ１０１２に移行する。
【０１０３】
ステップ１００６に移行時には、ヘッダ部の第１及び第２バイト目に格納されているデータ数のデータの受信を行う前にストレート部の転送が終了したことになる。即ちデータの欠落が発生したことになる。このため、ステップ１００６〜１００８では、それに応じた処理を行う。具体的には、ステップ１００６では、変数byDataReceivingStatus にDATA HEADER を、変数wLoopNumには６を、変数wDataCounterには０をそれぞれ代入し、ステップ１００７ではデータ転送形式にDATA HEADER を格納した音声データ転送要求コマンドを再作成し、ステップ１００８では、その再作成したコマンドをインターフェイス２０４の送信データバッファに格納する。それらが終了した後、一連の処理を終了する。
【０１０４】
変数byDataReceivingStatus にDATA LOOP が代入されていた場合には、ステップ１００１からステップ１００９に移行する。そのステップ１００９では、受信データが標識データか否か判定する。その受信データの最上位ビットの値が１であった場合、それは標識データであることから、その判定はＹＥＳとなって一連の処理を終了する。そうでない場合には、その判定はＮＯとなってステップ１０１０に移行する。
【０１０５】
上記したように、ループ部の転送が開始する前にデータの欠落が発生すると、音声データ全体の再送を行っている。このため、ループ部の受信の開始時には、その先頭に追加した標識データを受信することになる。その標識データは楽音の再生には使用しないデータである。このため、電子楽器１０１側ではそれを廃棄している。
【０１０６】
他方のステップ１０１０では、受信データを、ＲＡＭ２０３内のＰＣＭデータ部用のデータ格納領域に格納し、続くステップ１０１１では、チェックサム値の計算を行い、その計算結果を変数byCheckSumに代入する。それが終了すると、ステップ１０１２に移行する。
【０１０７】
このように、ステップ１００１〜１０１１では、受信データが音声データのどの部分に属しているかに応じてＲＡＭ２０３に格納するとともに、データの欠落が発生したか否かに応じて音声データの再送が行われる。
【０１０８】
上記ステップ１０１２では、音声データとして１バイト（１ワード）を受信したことから、変数wDataCounterの値のインクリメントを行う。その後、ステップ１０１３に移行する。
【０１０９】
ステップ１０１３では、変数wDataCounterの値が変数wLoopNumの値と等しいか否か判定する。変数wLoopNumは、ヘッダ部、ストレート部、或いはループ部の各部分を構成しているワードの総数が代入される変数であり、ヘッダ部のデータを受信している場合には６、ストレート部のデータを受信している場合にはヘッダ部の第１及び第２バイト目のデータ、ループ部のデータを受信している場合にはヘッダ部の第４及び第５バイト目のデータがそれぞれ代入される。このため、現在受信中の部分のデータを全て受信した場合、その判定はＹＥＳとなってステップ１０１４に移行する。そうでない場合には、その判定はＮＯとなって一連の処理を終了する。
【０１１０】
ステップ１０１４以降では、音声データを構成する１部分のデータの受信が完了したと判断して、それに伴う処理が行われる。その部分のデータの受信が正常に行えたか否か判定、即ちエラーの発生の有無を判定して、その判定結果に応じた対処が行われる。
【０１１１】
先ず、ステップ１０１４では、変数wDataCounterの値をクリア、即ちそれに０を代入する。続くステップ１０１５では、変数byDataReceivingStatus に代入されている値を判定する。変数byDataReceivingStatus にDATA HEADER が代入されていた場合、ステップ１０１６に移行して、変数byDataReceivingStatus とwLoopNumの更新を行う。具体的には、ヘッダ部の受信が完了したことから、変数byDataReceivingStatus にDATA STRAIGHT を代入し、他方の変数wLoopNumには、受信が完了したヘッダ部の第１及び第２バイト目のデータで構成される１６ビットの値（第１バイト目が上位８ビット、第２バイト目が下位８ビットである）を代入する。それが終了した後に一連の処理を終了する。
【０１１２】
変数byDataReceivingStatus にDATA STRAIGHT が代入されていた場合には、ステップ１０１７に移行する。そのステップ１０１７では、変数byCheckSumに代入されているチェックサム値が、受信したヘッダ部の第３バイト目のチェックサム値と一致するか否か判定する。ストレート部の受信が正常に行われた場合、それらチェックサム値は一致することから判定はＹＥＳとなり、ステップ１０１８に移行する。そうでない場合には、即ちエラーが発生している場合には、その判定はＮＯとなってステップ１０１９に移行する。
【０１１３】
ステップ１０１８では、変数byDataReceivingStatus 、wLoopNum、及びbyCheckSumの更新を行う。具体的には、ストレート部の受信を正常に完了したことから、変数byDataReceivingStatus にDATA LOOP を代入し、変数wLoopNumには、受信が完了したヘッダ部の第４及び第５バイト目のデータで構成される１６ビットの値（第４バイト目が上位８ビット、第５バイト目が下位８ビットである）を代入し、変数byCheckSumには０を代入する。それらが終了した後に一連の処理を終了する。
【０１１４】
他方のステップ１０１９では、変数bReTransferFlag にＴＲＵＥが代入されているか否か判定する。ユーザが再送スイッチ２０６ａを操作してエラー発生時のデータの再送を指定、即ち再送モードを設定していた場合、その判定はＹＥＳとなってステップ１０２０に移行する。そうでない場合には、即ちエラー発生時にもデータの転送の続行をユーザが指定していた場合には、その判定はＮＯとなって上述のステップ１０１８に移行する。
【０１１５】
ステップ１０２０では、データ転送形式にDATA STRAIGHT を格納した音声データ転送要求コマンドを再作成する。続くステップ１０２１では、その再作成したコマンドをインターフェイス２０４の送信データバッファに格納する。その後、一連の処理を終了する。
【０１１６】
このように、変数bReTransferFlag に代入されている値に応じて、エラー発生時にデータの再送が行われる。変数bReTransferFlag に代入されている値は、再送スイッチ２０６ａに対する操作によって変化させることができる。このため、ユーザは、楽音の発音状態を制御することができ、より快適に電子楽器１０１を使用することができる。即ち再送モードを設定しない場合には発音タイミングの遅れを回避、或いはその遅れを最小限に抑えさせることができ、それを設定した場合には、発音される楽音の音質の低下を回避させることができる。
【０１１７】
一方、変数byDataReceivingStatus にDATA LOOP が代入されていた場合には、ステップ１０１５からステップ１０２２に移行する。そのステップ１０２２では、変数byCheckSumに代入されているチェックサム値が、受信したヘッダ部の第６バイト目のチェックサム値と一致するか否か判定する。ループ部の受信が正常に行われた場合、それらチェックサム値は一致することから判定はＹＥＳとなり、ステップ１０２３に移行する。そうでない場合には、即ちエラーが発生している場合には、その判定はＮＯとなってステップ１０２４に移行する。
【０１１８】
ステップ１０２３では、変数byDataReceivingStatus 、wLoopNum、及びbyCheckSumの更新を行う。具体的には、ループ部の受信を正常に完了、即ち音声データの受信を全て正常に完了したことから、変数byDataReceivingStatus にDATA HEADER を代入し、変数wLoopNumにはヘッダ部の全データ（ワード）数である６を代入し、変数byCheckSumには０を代入する。それらの終了後、一連の処理を終了する。
【０１１９】
他方のステップ１０２４では、ループ部の受信にエラーが発生したことから、このループ部の転送を要求する音声データ転送要求コマンド（第３バイト目のデータ転送形式をDATA LOOP としたコマンドである）を生成し、続くステップ１０２５でそのコマンドをインターフェイス２０４の送信データバッファに書き込む。その後、一連の処理を終了する。
【０１２０】
このように、第２の実施の形態では、ストレート部の受信でエラーが発生すると、再送モードが設定されているか否かに応じてデータの再送を要求するが、ループ部の受信でエラーが発生すると無条件でデータの再送を要求している。これは、ストレート部は発音において１回だけ処理される部分であることから、繰り返し処理されるループ部よりもエラーの影響が比較的に小さいためである。
【０１２１】
このことから判るように、音声データをヘッダ部、ストレート部、及びループ部とに分ける分割方法は、各部分の重要度に着目した分割方法でもある。各部分のデータの処理内容に応じてデータを分割することにより、重要度に着目した分割を行うことができる。このため、上記のように、重要度に応じたデータの再送を行うことができるようになる。換言すれば、エラー発生時には階層的に対処することができ、ユーザの様々な要求に柔軟に対応できる。
【０１２２】
なお、第２の実施の形態では、データ欠落検出用の標識データを一つだけ音声データ中に挿入しているが、例えばストレート部の先頭、更にはループ部の最後といったように、それを複数挿入して、各部毎にデータの欠落を検出できるようにしても良い。このようにした場合、データの欠落の検出時には、各部毎にデータの再送を要求すれば良い。その再送の要求は、エラーを検出して直ちに行っても良いが、音声データ全体の転送が終了した後に行うようにしても良い。
【０１２３】
また、第２の実施の形態では、エラー発生時にデータの再送を行うか否かをユーザに選択させているが、その選択を自動的に行うようにしても良い。例えば、自動演奏モードによる曲の演奏中か否かといった設定状態に基づいて、データの再送を行うか否か決定するようにしても良い。
＜第３の実施の形態＞
上記第２の実施の形態では、上述したように、データの欠落を検出した場合、直ちに音声データの再送を要求するようにしている。これに対し、第３の実施の形態は、データの欠落を検出した場合において、データを再送させるか否かの選択を更に行えるようにしたものである。
【０１２４】
第３の実施の形態による電子楽器は、第２の実施の形態によるそれと構成は基本的に同じであり、また、処理動作も基本的に同じである。パソコンについては、第１の実施の形態から構成、及び処理動作が変わっていない。このため、第１の実施の形態で使用した符号をそのまま使用して、第３の実施の形態による電子楽器１０１が第２の実施の形態によるそれから異なっている部分のみ説明することにする。
【０１２５】
第２の実施の形態では、エラーを、データの欠落と、データの不正確な受信（転送）との２種類に分類し、前者のエラー発生時にはデータの再送、後者のそれの発生時にはユーザの指定、即ち再送モードが設定されているか否かに応じたデータの再送を行っている。第３の実施の形態では、再送モードが設定されているか否かに応じて、データが欠落したエラーの発生時におけるデータの再送を行うようにしている。
【０１２６】
音声データを用いた楽音の発音は、基本的にヘッダ部に格納されている情報を基に行われる。データが欠落すると、そのヘッダ部の情報と実際のデータの構成とが一致しなくなる。このため、第３の実施の形態では、データの欠落の発生（検出）にデータの再送を行わない場合、データの受信状態に応じてヘッダ部の情報の変更を行い、整合性をとっている。
【０１２７】
以上が、第３の実施の形態の概要である。次に、上記エラー発生時におけるデータの再送を実現するための第３の実施の形態におけるＣＰＵ２０１の動作について詳細に説明する。
【０１２８】
第３の実施の形態における処理動作の流れは、第１及び第２の実施の形態のそれと同じである。その処理内容としては、データ受信インタラプト処理が第２の実施の形態から最も異なっている。他の処理においては、相違点が無いか、相違点が有ったとしても僅かである。このため、図１１に示すその動作フローチャートを参照して、データ受信インタラプト処理のみ説明する。
【０１２９】
先ず、ステップ１１０１では、変数byDataReceivingStatus に代入されている値を判定する。上記したように、変数byDataReceivingStatus は、現在受信中のデータが音声データのどの部分かを把握するための変数であり、DATA HEADER 、DATA STRAIGHT 、及びDATA LOOP の３種類の値のうちの一つが代入される。
【０１３０】
変数byDataReceivingStatus にDATA HEADER が代入されていた場合、ステップ１１０２に移行する。そのステップ１１０２では、受信データを、ＲＡＭ２０３内のヘッダ部用のデータ格納領域に格納する。その格納が終了すると、ステップ１１１５に移行する。
【０１３１】
変数byDataReceivingStatus にDATA STRAIGHT が代入されていた場合には、ステップ１１０３に移行する。そのステップ１１０３では、受信データが標識データか否か判定する。その受信データの最上位ビットの値が１であった場合、標識データを受信したとして判定はＹＥＳとなり、ステップ１１０６に移行する。そうでない場合には、その判定はＮＯとなってステップ１１０４に移行する。
【０１３２】
ステップ１１０４では、受信データを、ＲＡＭ２０３内のＰＣＭデータ部用のデータ格納領域に格納し、続くステップ１１０５では、チェックサム値の計算を行い、その計算結果を変数byCheckSumに代入する。それが終了すると、ステップ１１１５に移行する。
【０１３３】
ステップ１１０６に移行時には、ヘッダ部の第１及び第２バイト目に格納されているデータ数のデータの受信を行う前にストレート部の転送が終了したことになる。即ちデータの欠落が発生したことになる。このため、ステップ１１０６〜１１１１では、データ欠落時における処理が行われる。
【０１３４】
先ず、ステップ１１０６では、変数bReTransferFlag にＴＲＵＥが代入されているか否か判定する。ユーザが再送スイッチ２０６ａを操作して再送モードを設定していた場合、その判定はＹＥＳとなってステップ１１０７に移行する。そうでない場合には、その判定はＮＯとなってステップ１１１０に移行する。
【０１３５】
ステップ１１０７〜１１０９では、データ欠落のエラー発生に応じてデータの再送を要求する処理が行われる。具体的には、ステップ１１０７では変数wDataCounterに０を代入し、ステップ１１０８ではデータ転送形式にDATA STRAIGHT を格納した音声データ転送要求コマンドを再作成し、ステップ１１０９では再作成したコマンドをインターフェイス２０４内の送信データバッファに書き込む。それらが終了した後、一連の処理を終了する。
【０１３６】
他方のステップ１１１０、及び１１１１では、データ欠落に応じたデータの再送を行わないことから、その欠落に対処するための処理が行われる。
ステップ１１１０では、既に受信したヘッダ部のデータの書き換えを行う。具体的には、ＲＡＭ２０３内に割り当てたヘッダ部のデータ格納領域に格納されているヘッダ部の第１及び第２バイト目のデータを、変数wDataCounterに代入されている実際に受信したストレート部のデータ数に書き換える。それが終了した後、ステップ１１１１に移行し、変数byDataReceivingStatus にDATA LOOP 、変数wLoopNumにヘッダ部の第４及び第５バイト目のデータ、変数wDataCounterに０をそれぞれ代入する。標識データは、ループ部の先頭に挿入されている。このため、変数byDataReceivingStatus にDATA LOOP を代入することにより、標識データに続いて転送されるループ部のデータを受信することができる。そのステップ１１１１を終了した後、一連の処理を終了する。
【０１３７】
このように、再送モードの未設定時にストレート部でデータの欠落が発生した場合、ストレート部の実際の受信状態に応じたヘッダ部のデータの書き換えを行い、ヘッダ部とストレート部の間の整合性をとっている。これにより、データ欠落によって生じる聴感上の不具合を最小限に抑えることができる。
【０１３８】
一方、変数byDataReceivingStatus にDATA LOOP が代入されていた場合には、ステップ１１０１からステップ１１１２に移行する。そのステップ１１１２では、受信データが標識データか否か判定する。その受信データの最上位ビットの値が１であった場合、それは標識データであることから、その判定はＹＥＳとなって一連の処理を終了する。そうでない場合には、その判定はＮＯとなってステップ１１１３に移行する。
【０１３９】
上記したように、ループ部の転送が開始する前にデータの欠落が発生すると、音声データの再送、或いはヘッダ部のデータの書き換えが行われている。このため、ループ部の受信の開始時には、その先頭に追加されている標識データを受信していることになる。その標識データは楽音の再生には使用しないデータである。このため、標識データを受信した場合にはそれを廃棄している。
【０１４０】
ステップ１１１３では、受信データを、ＲＡＭ２０３内のＰＣＭデータ部用のデータ格納領域に格納し、続くステップ１１１４では、チェックサム値の計算を行い、その計算結果を変数byCheckSumに代入する。それが終了すると、ステップ１１１５に移行する。
【０１４１】
このように、ステップ１１０１〜１１１４では、受信データが音声データのどの部分に属しているかに応じてＲＡＭ２０３に格納するとともに、データの欠落が発生したか否か、及び再送モードが設定されているか否かに応じて音声データの再送、或いはヘッダ部のデータの書き換えが行われる。
【０１４２】
上記ステップ１１１５では、音声データとして１バイト（１ワード）を受信したことから、変数wDataCounterの値のインクリメントを行う。その後、ステップ１１１６に移行する。
【０１４３】
ステップ１１１６では、変数wDataCounterの値が変数wLoopNumの値と等しいか否か判定する。変数wLoopNumは、ヘッダ部、ストレート部、或いはループ部の各部分を構成しているワードの総数が代入される変数であり、ヘッダ部のデータを受信している場合には６、ストレート部のデータを受信している場合にはヘッダ部の第１及び第２バイト目のデータ、ループ部のデータを受信している場合にはヘッダ部の第４及び第５バイト目のデータがそれぞれ代入される。このため、現在受信中の部分のデータを全て受信した場合、その判定はＹＥＳとなってステップ１１１７に移行する。そうでない場合には、その判定はＮＯとなって一連の処理を終了する。
【０１４４】
ステップ１１１７以降では、音声データを構成する１部分のデータの受信が完了したと判断して、それに伴う処理が行われる。その部分のデータの受信が正常に行えたか否か判定、即ちエラーの発生の有無を判定して、その判定結果に応じた対処が行われる。
【０１４５】
先ず、ステップ１１１７では、変数wDataCounterの値をクリア、即ちそれに０を代入する。続くステップ１１１８では、変数byDataReceivingStatus に代入されている値を判定する。変数byDataReceivingStatus にDATA HEADER が代入されていた場合、ステップ１１１９に移行して、変数byDataReceivingStatus とwLoopNumの更新を行う。具体的には、ヘッダ部の受信が完了したことから、変数byDataReceivingStatus にDATA STRAIGHT を代入し、他方の変数wLoopNumには、受信が完了したヘッダ部の第１及び第２バイト目のデータで構成される１６ビットの値（第１バイト目が上位８ビット、第２バイト目が下位８ビットである）を代入する。それが終了した後に一連の処理を終了する。
【０１４６】
変数byDataReceivingStatus にDATA STRAIGHT が代入されていた場合には、ステップ１１２０に移行する。そのステップ１１２０では、変数byCheckSumに代入されているチェックサム値が、受信したヘッダ部の第３バイト目のチェックサム値と一致するか否か判定する。ストレート部の受信が正常に行われた場合、それらチェックサム値は一致することから判定はＹＥＳとなり、ステップ１１２１に移行する。そうでない場合には、即ちエラーが発生している場合には、その判定はＮＯとなってステップ１１２２に移行する。
【０１４７】
ステップ１１２１では、変数byDataReceivingStatus 、wLoopNum、及びbyCheckSumの更新を行う。具体的には、ストレート部の受信を正常に完了したことから、変数byDataReceivingStatus にDATA LOOP を代入し、変数wLoopNumには、受信が完了したヘッダ部の第４及び第５バイト目のデータで構成される１６ビットの値（第４バイト目が上位８ビット、第５バイト目が下位８ビットである）を代入し、変数byCheckSumには０を代入する。それが終了した後に一連の処理を終了する。
【０１４８】
他方のステップ１１２２では、変数bReTransferFlag にＴＲＵＥが代入されているか否か判定する。ユーザが再送スイッチ２０６ａを操作して再送モードを設定していた場合、その判定はＹＥＳとなってステップ１１２３に移行する。そうでない場合には、即ちエラー発生時にもデータの転送の続行をユーザが指定していた場合には、その判定はＮＯとなってステップ１１２１に移行する。
【０１４９】
ステップ１１２３では、データ転送形式にDATA STRAIGHT を格納した音声データ転送要求コマンドを再作成する。続くステップ１１２４では、その再作成したコマンドをインターフェイス２０４の送信データバッファに格納する。その後、一連の処理を終了する。
【０１５０】
このように、変数bReTransferFlag に代入されている値に応じて、エラー発生時にデータの再送が行われる。変数bReTransferFlag に代入されている値は、再送スイッチ２０６ａに対する操作によって変化させることができる。このため、ユーザは、再送モードを設定しない場合には発音タイミングの遅れを回避させることができ、それを設定した場合には、発音される楽音の音質の低下を回避させることができる。
【０１５１】
一方、変数byDataReceivingStatus にDATA LOOP が代入されていた場合には、ステップ１１１８からステップ１１２５に移行する。そのステップ１１２５では、変数byCheckSumに代入されているチェックサム値が、受信したヘッダ部の第６バイト目のチェックサム値と一致するか否か判定する。ループ部の受信が正常に行われた場合、それらチェックサム値は一致することから判定はＹＥＳとなり、ステップ１１２６に移行する。そうでない場合には、即ちエラーが発生している場合には、その判定はＮＯとなってステップ１１２７に移行する。
【０１５２】
ステップ１１２６では、変数byDataReceivingStatus 、wLoopNum、及ぶbyCheckSumの更新を行う。具体的には、ループ部の受信を正常に完了、即ち音声データの受信を全て正常に完了したことから、変数byDataReceivingStatus にDATA HEADER を代入し、変数wLoopNumにはヘッダ部の全データ（ワード）数である６を代入し、変数byCheckSumには０を代入する。それが終了した後に一連の処理を終了する。
【０１５３】
他方のステップ１１２７では、ループ部の受信にエラーが発生したことから、このループ部の転送を要求する音声データ転送要求コマンド（第３バイト目のデータ転送形式をDATA LOOP としたコマンドである）を生成し、続くステップ１１２８でそのコマンドをインターフェイス２０４の送信データバッファに書き込む。その後、一連の処理を終了する。
【０１５４】
なお、第３の実施の形態では、再送モードの設定に応じてデータ欠落時におけるデータの再送を行うようにしているが、エラーの大きさに応じて、例えばデータが欠落したエラーと、転送が正確に行われなかったエラーとで別々に、そのエラー発生時にデータの再送を行うか否か設定できるようにしても良い。また、上記したように、データの再送を行うか否かを自動的に選択させるようにしても良い。更には、データの再送を行う部分を個別に選択できるようにしても良い。
【０１５５】
また、第３の実施の形態では、データの欠落が発生した場合、その欠落状態に応じてヘッダ部のデータの書き換えを行っているが、ヘッダ部のデータに合わせて、データが欠落した部分のほうの書き換えを行うようにしても良い。例えば欠落したデータ数が比較的に少ない場合には、データが欠落した部分の所定のデータをコピーして、その欠落分を補うようにようにしても良い。
【０１５６】
また、本実施の形態（第１〜第３の実施の形態）は、電子楽器１０１とパソコン１０３に本発明を適用した場合のものであるが、本発明が適用されるのはこれらの装置に限定されるものではない。例えば２つのパソコンに、それぞれ、本発明によるデータ受信装置、及びデータ送信装置を適用させ、それらの間で双方向に本発明に基づくデータの送受信を行えるようにすることもできる。即ち、上述した電子楽器１０１、及び／或いは、パソコン１０３の動作を実現するためのプログラムを実行できる装置であれば、既存の装置であってもそのプログラムをロードさせることで本発明を搭載させることができる。このことから明らかなようにに、本発明は柔軟に適用（搭載）させることができるものである。
【０１５７】
また、それらの間で送受信するデータについては、当然のことながら、音声データに限定されるものでもない。また、データの分割においては、本実施の形態のように、データ（ワードデータ）の処理内容に着目した分割の他に、例えば項目といったデータ（ワードデータ）の種類に着目した分割を行うようにしても良い。また、それらを組み合わせた分割を行っても良い。データの分割においても、そのデータによって様々な方法を用いることができる。
【０１５８】
【発明の効果】
以上説明したように本発明の第１の態様のデータ受信装置は、転送を要求することで送信されてきたデータを、ワードデータ群単位でエラー発生の有無を監視し、エラーが発生していた場合に、その受信状態に応じて、例えばワードデータ群間の整合性をとるようにワードデータ群を変更する。このため、エラーによって生じる不具合を極めて迅速に低減することができる。
【０１６１】
本発明のデータ送信装置は、上記データ受信装置からのデータの転送要求、或いは再転送要求に応じて、データ全体、或いはワードデータ群の送信を行う。このため、上記データ受信装置は、必要なデータ、或いはワードデータ群だけを、必要に応じて得ることができる。
【図面の簡単な説明】
【図１】第１の実施の形態が適用されたシステムの外観図である。
【図２】電子楽器の全体回路図である。
【図３】音声データの構成図である。
【図４】音声データ転送要求コマンドの構成図である。
【図５】全体処理の動作フローチャートである。
【図６】音声データ要求処理の動作フローチャートである。
【図７】データ受信インタラプト処理の動作フローチャートである。
【図８】パソコンの全体処理の動作フローチャートである。
【図９】音声データの構成図である（第２の実施の形態）。
【図１０】データ受信インタラプト処理の動作フローチャートである（第２の実施の形態）。
【図１１】データ受信インタラプト処理の動作フローチャートである（第３の実施の形態）。
【符号の説明】
１０１  電子楽器
１０３  パソコン
２０１  ＣＰＵ
２０２  ＲＯＭ
２０３  ＲＡＭ
２０４  インターフェイス
２０６  スイッチ群
【図１】
0003658661.tif 000002
【図２】
0003658661.tif 000003
【図３】
0003658661.tif 000004
【図４】
0003658661.tif 000005
【図５】
0003658661.tif 000006
【図６】
0003658661.tif 000007
【図７】
0003658661.tif 000008
【図８】
0003658661.tif 000009
【図９】
0003658661.tif 000010
【図１０】
0003658661.tif 000011
【図１１】
0003658661.tif 000012