JPH11133957A - 音楽情報送信方法、音楽情報送信装置、音楽情報受信処理方法、音楽情報受信処理装置、及び音楽情報送受信装置 - Google Patents

音楽情報送信方法、音楽情報送信装置、音楽情報受信処理方法、音楽情報受信処理装置、及び音楽情報送受信装置

Info

Publication number
JPH11133957A
JPH11133957A JP10102494A JP10249498A JPH11133957A JP H11133957 A JPH11133957 A JP H11133957A JP 10102494 A JP10102494 A JP 10102494A JP 10249498 A JP10249498 A JP 10249498A JP H11133957 A JPH11133957 A JP H11133957A
Authority
JP
Japan
Prior art keywords
music information
data
receiving
timing
event data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP10102494A
Other languages
English (en)
Other versions
JP3671666B2 (ja
Inventor
Hiroyuki Sasaki
博之 佐々木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP10249498A priority Critical patent/JP3671666B2/ja
Publication of JPH11133957A publication Critical patent/JPH11133957A/ja
Application granted granted Critical
Publication of JP3671666B2 publication Critical patent/JP3671666B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

(57)【要約】 【課題】 音楽情報の送受信の過程により生じる音楽的
な不具合の発生を回避できるようにする。 【解決手段】 CPU101は、送受信装置104から
音楽情報を送信する場合、MIDI入力装置105を介
して入力されたMIDIデータにタイマ106を用いて
生成したそれを処理すべきタイミングを指定する時間長
データを付加し、それらを1イベント分のデータ(音楽
情報)としてRAM103に一旦格納した後、随時イベ
ント単位で送信する。その音楽情報を送受信装置104
で受信する場合には、受信したデータをRAM103に
一旦格納する一方、時間長データからそれが付加された
MIDIデータの処理すべきタイミングを決定し、その
決定したタイミングに従ってMIDIデータを処理す
る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、音楽情報の送受信
により受信側で楽音を発音させて演奏を行わせるための
技術に関する。
【0002】
【従来の技術および発明が解決しようとする課題】現在
では、MIDI(Musical Instrument Digital Interfa
ce)が普及したこともあって、音楽情報を送信し、受信
側で楽音を発音させることが広く行われている。
【0003】従来における音楽情報の送信は、例えば送
信側がノートオンやノートオフといったイベントのデー
タ(MIDIデータ)を、それを処理させるタイミング
で受信側に順次送信することで行われている。しかし、
そのような音楽情報の送信では、送信側の負荷の重さ
や、イベントデータを送る送信路等によって受信側がイ
ベントデータを受信するタイミングが遅れ、演奏にズレ
が生じることがあるという問題点があった。
【0004】演奏(楽音の発音タイミング等)のズレ
は、その演奏から受ける印象を大きく変化させることが
多く、音楽的な影響が大きい。そのため、演奏のズレが
生じないようにすることは強く要請されている。
【0005】現在ではパーソナルコンピュータをシーケ
ンサ(自動演奏装置)として用いることも一般的に行わ
れており、様々な送信路を利用することができる状況と
なっている。周知のように、送信路によって送信に要す
る時間(送信時間)も様々に変化する。それ以外にも、
送受信の過程で音楽情報(の一部)が消えたり、或い
は、受信側で音楽情報(の一部)を正常に受信できない
ようなこともある。
【0006】音楽情報の送受信の過程により、上記した
ようなことが生じても、受信側での演奏に大きな影響を
及ぼし、音楽的に大きな不具合を発生させる。そのた
め、これからは、イベントデータ(音楽情報)の送受信
の過程により生じる音楽的な不具合の発生を回避できる
ようにする要請が高まることが予想される。
【0007】本発明の課題は、音楽情報の送受信の過程
により生じる音楽的な不具合の発生を回避できるように
することにある。
【0008】
【課題を解決するための手段】本発明の音楽情報送信方
法は、受信側が受信しながら処理していくことで演奏を
行うための音楽情報を送信することを前提とする。
【0009】第1の態様の音楽情報送信方法は、ノート
オン、ノートオフ等のイベントの内容を表すイベントデ
ータに、該イベントデータを処理すべきタイミングを表
す時間データを付加する第1の工程と、第1の工程で時
間データを付加したイベントデータを音楽情報として受
信側に順次送信する第2の工程と、を有する。
【0010】第2の態様の音楽情報送信方法は、少なく
とも、ノートオン、ノートオフ等のイベントの内容を表
すイベントデータを、該イベントデータを処理させるべ
きタイミングに基づいて音楽情報として順次送信する第
1の工程と、第1の工程で送信されたイベントデータの
なかから予め定めた種類のイベントデータを抽出する第
2の工程と、第2の工程で抽出したイベントデータを所
定のタイミングで再度音楽情報として送信する第3の工
程と、を有する。
【0011】本発明の音楽情報送信装置は、受信側が受
信しながら処理していくことで演奏を行うための音楽情
報を送信することを前提とする装置である。第1の態様
の音楽情報送信装置は、ノートオン、ノートオフ等のイ
ベントの内容を表すイベントデータに、該イベントデー
タを処理すべきタイミングを表す時間データを付加する
時間データ付加手段と、時間データ付加手段によって時
間データが付加されたイベントデータを音楽情報として
受信側に順次送信する送信手段と、を具備する。
【0012】第2の態様の音楽情報送信装置は、少なく
とも、ノートオン、ノートオフ等のイベントの内容を表
すイベントデータを、該イベントデータを処理させるべ
きタイミングに基づいて音楽情報として順次送信する第
1の送信手段と、第1の送信手段によって送信されたイ
ベントデータのなかから予め定めた種類のイベントデー
タを抽出する抽出手段と、抽出手段が抽出したイベント
データを所定のタイミングで再度音楽情報として送信す
る第2の送信手段と、を具備する。
【0013】本発明の第1の態様の音楽情報受信方法
は、第1の態様の音楽情報送信方法、或いは第1の態様
の音楽情報送信装置によって送信された音楽情報を受信
しながら処理していくことで演奏を行うことを前提と
し、音楽情報を受信する第1の工程と、第1の工程で受
信した音楽情報中の時間データから、該時間データが付
加されたイベントデータを処理すべきタイミングを決定
する第2の工程と、第2の工程で決定したタイミングに
従って、第1の工程で受信した音楽情報中のイベントデ
ータを処理する第3の工程と、を有する。
【0014】なお、上記第2の工程では、時間データか
ら、音楽情報が送信されてから受信されるまでに要した
送信時間の変動を求め、該求めた送信時間の変動をタイ
ミングの決定に反映させる、ことが望ましい。また、受
信した音楽情報中の制御データを基に、該音楽情報を正
常に受信しているか否か判定し、該音楽情報を正常に受
信していないと判定した場合に、該音楽情報による演奏
を中止する、ことが望ましい。
【0015】本発明の第2の態様の音楽情報受信方法
は、第1の態様の音楽情報送信方法、或いは第1の態様
の音楽情報送信装置によって送信された音楽情報を受信
しながら処理していくことで演奏を行うことを前提と
し、音楽情報を受信する第1の工程と、第1の工程で受
信した音楽情報を所定の記憶手段に記憶させる第2の工
程と、第1の工程で受信した音楽情報中のイベントデー
タを処理するタイミングを、該イベントデータに付加さ
れた時間データ、及び記憶手段の空容量に基づいて決定
する第3の工程と、第3の工程で決定したタイミングに
従って、第1の工程で受信した音楽情報中のイベントデ
ータを処理する第4の工程と、を有する。
【0016】本発明の第3の態様の音楽情報受信方法
は、第2の態様の音楽情報送信方法、或いは第2の態様
の音楽情報送信装置によって送信された音楽情報を受信
しながら処理していくことで演奏を行うことを前提と
し、音楽情報を受信する第1の工程と、第1の工程で受
信した音楽情報中のイベントデータを処理すべきか否か
判定する第2の工程と、第2の工程の判定結果に従っ
て、第1の工程で受信した音楽情報中のイベントデータ
を処理する第3の工程と、を有する。
【0017】本発明の第1の態様の音楽情報受信装置
は、第1の態様の音楽情報送信方法、或いは第1の態様
の音楽情報送信装置によって送信された音楽情報を受信
しながら処理していくことで演奏を行うことを前提とし
た装置であって、音楽情報を受信する受信手段と、該受
信手段が受信した音楽情報中の時間データから、該時間
データが付加されたイベントデータを処理すべきタイミ
ングを決定するタイミング決定手段と、タイミング決定
手段によって決定されたタイミングに従ってイベントデ
ータを処理する処理手段と、を具備する。
【0018】なお、上記の構成において、タイミング決
定手段は、時間データから、音楽情報が送信されてから
受信されるまでに要した送信時間の変動を求め、該求め
た送信時間の変動をタイミングの決定に反映させる、こ
とが望ましい。また、処理手段は、受信手段が受信した
音楽情報中の制御データを基に、該音楽情報を正常に受
信しているか否か判定し、該音楽情報を正常に受信して
いないと判定した場合に、該音楽情報による演奏を中止
する、ことが望ましい。
【0019】本発明の第2の態様の音楽情報受信装置
は、第1の態様の音楽情報送信方法、或いは第1の態様
の音楽情報送信装置によって送信された音楽情報を受信
しながら処理していくことで演奏を行うことを前提とし
た装置であって、音楽情報を受信する受信手段と、受信
手段が受信した音楽情報を記憶する記憶手段と、受信手
段が受信した音楽情報中のイベントデータを処理するタ
イミングを、該イベントデータに付加された時間デー
タ、及び記憶手段の空容量に基づいて決定するタイミン
グ決定手段と、タイミング決定手段が決定したタイミン
グに従って、記憶手段に記憶された音楽情報中のイベン
トデータを処理する処理手段と、を具備する。
【0020】本発明の第3の態様の音楽情報受信装置
は、第2の態様の音楽情報送信方法、或いは第2の態様
の音楽情報送信装置によって送信された音楽情報を受信
しながら処理していくことで演奏を行うことを前提とし
た装置であって、音楽情報を受信する受信手段と、受信
手段が受信した音楽情報中のイベントデータを処理すべ
きか否か判定する判定手段と、判定手段の判定結果に従
って、受信手段が受信した音楽情報中のイベントデータ
を処理する処理手段と、を具備する。
【0021】本発明の音楽情報送受信装置は、受信側が
受信しながら処理していくことで演奏を行うための音楽
情報を送受信することを前提とした装置であって、ノー
トオン、ノートオフ等のイベントの内容を表すイベント
データに、該イベントデータを処理すべきタイミングを
表す時間データを付加する時間データ付加手段と、時間
データ付加手段によって時間データが付加されたイベン
トデータを音楽情報として受信側に順次送信する送信手
段と、音楽情報を受信する受信手段と、該受信手段が受
信した音楽情報中の時間データから、該時間データが付
加されたイベントデータを処理すべきタイミングを決定
するタイミング決定手段と、該タイミング決定手段によ
って決定されたタイミングに従ってイベントデータを処
理する処理手段と、を具備する。
【0022】なお、上記の構成において、送信手段は、
受信側に、音楽情報の送信量を表す制御データを随時送
信し、処理手段は、受信手段が受信した音楽情報中の制
御データを基に、該音楽情報を正常に受信しているか否
か判定し、該音楽情報を正常に受信していないと判定し
た場合に、該音楽情報による演奏を中止する、ことが望
ましい。
【0023】本発明の第1の態様の記録媒体は、ノート
オン、ノートオフ等のイベントの内容を表すイベントデ
ータ毎に、該イベントデータを処理すべきタイミングを
表す時間データを付加する手段と、該付加する手段によ
って時間データが付加されたイベントデータを音楽情報
として順次送信する手段と、を実現させるためのプログ
ラムを記録している。
【0024】本発明の第2の態様の記録媒体は、少なく
とも、ノートオン、ノートオフ等のイベントの内容を表
すイベントデータを、該イベントデータを処理させるべ
きタイミングに基づいて音楽情報として順次送信する手
段と、該送信する手段によって送信されたイベントデー
タのなかから予め定めた種類のイベントデータを抽出す
る手段と、該抽出する手段によって抽出されたイベント
データを音楽情報として所定のタイミングで再送する手
段と、を実現させるためのプログラムを記録している。
【0025】本発明の第3の態様の記録媒体は、音楽情
報を受信する手段と、該受信する手段によって音楽情報
が受信された場合に、該受信された音楽情報中の時間デ
ータから、該時間データが付加されたイベントデータを
処理すべきタイミングを決定する手段と、該決定する手
段によって決定されたタイミングに従ってイベントデー
タを処理する手段と、を実現させるためのプログラムを
記録している。
【0026】本発明の第4の態様の記録媒体は、音楽情
報を受信する手段と、該受信する手段によって受信され
た音楽情報を記憶手段に記録させる手段と、受信する手
段により受信された音楽情報中のイベントデータを処理
するタイミングを、該イベントデータに付加された時間
データ、及び記憶手段の空容量に基づいて決定する手段
と、該決定する手段によって決定されたタイミングに従
ってイベントデータを処理する手段と、を実現させるた
めのプログラムを記録している。
【0027】本発明の第5の態様の記録媒体は、音楽情
報を受信する手段と、該受信する手段により受信された
音楽情報中のイベントデータを処理すべきか否か判定す
る手段と、該判定する手段の判定結果に従って、受信す
る手段により受信された音楽情報中のイベントデータを
処理する手段と、を実現させるためのプログラムを記録
している。
【0028】本発明の第6の態様の記録媒体は、ノート
オン、ノートオフ等のイベントの内容を表すイベントデ
ータに、該イベントデータを処理すべきタイミングを表
す時間データを付加する手段と、該付加する手段によっ
て時間データが付加されたイベントデータを音楽情報と
して順次送信する手段と、該音楽情報を受信する手段
と、該受信する手段によって音楽情報が受信された場合
に、該受信された音楽情報中の時間データから、該時間
データが付加されたイベントデータを処理すべきタイミ
ングを決定する手段と、該決定する手段によって決定さ
れたタイミングに従ってイベントデータを処理する手段
と、を実現させるためのプログラムを記録している。
【0029】本発明では、受信側が受信しながら処理し
ていくことで演奏を行うための音楽情報を構成するイベ
ントデータに、該イベントデータを処理すべきタイミン
グを表す(指定する)時間データを付加して順次送信す
る。その時間データを付加することで、イベントデータ
を受信側に処理させるべき適切なタイミングで必ずしも
送信する必要はなくなり、また、受信側ではイベントデ
ータをより適切なタイミングで処理することが可能とな
る。
【0030】本発明では、送信したイベントデータのな
かから、予め定めた種類のイベントデータを抽出し、抽
出したイベントデータを再送させる。それにより、抽出
したイベントデータを受信側に確実に受信させられるよ
うになる。
【0031】本発明では、受信した音楽情報中の時間デ
ータから、該時間データが付加されたイベントデータを
処理すべきタイミングを決定し、受信した音楽情報中の
イベントデータを決定したタイミングに従って処理す
る。そのように、時間データを基にイベントデータを処
理することから、受信したタイミングに関わらずにイベ
ントデータを適切なタイミングで処理する、或いはイベ
ントデータをより適切なタイミングで処理することが可
能となる。
【0032】本発明では、受信した音楽情報中の時間デ
ータ、及びその音楽情報を記憶する記憶手段(音楽情報
の格納用に割り当てられた記憶領域)の空容量に基づ
き、該時間データが付加されたイベントデータを処理す
べきタイミングを決定し、そのタイミングに従って処理
する。記憶手段の空容量を考慮してタイミングを決定す
ることで、それに記憶させた音楽情報を確実に処理する
ことが可能となる。
【0033】本発明では、受信した音楽情報中のイベン
トデータを処理すべきか否か判定し、その判定結果に従
ってイベントデータを処理する。それにより、たとえ繰
り返し同じイベントデータが送信されたとしても、その
送信の繰り返しの演奏への影響を確実に回避させられる
ようになる。
【0034】上記の発明を基に音楽情報の送受信を行う
ことにより、音楽情報の送受信の過程(送信路等だけで
なく、送信側、或いは受信側の装置の状態も含む)によ
り生じる音楽的な不具合の発生を回避、或いはそれを低
減させられるようになる。
【0035】
【発明の実施の形態】以下、図面を参照しながら、本発
明の実施の形態につき詳細に説明する。 <第1の実施の形態>図1は、本実施の形態による音楽
情報送受信装置の構成図である。本実施の形態による音
楽情報送受信装置は、鍵盤等の演奏操作子群を備えた各
種のコントローラや電子楽器といった外部の装置から出
力された音楽(演奏)情報を入力し、それを他の外部の
装置に出力する装置として実現されている。
【0036】その音楽情報送受信装置は、図1に示すよ
うに、装置全体の制御を行うCPU101と、プログラ
ムや各種制御用データ等を格納したROM102と、C
PU101が作業用に用いるRAM103と、特には図
示しない外部の装置、例えば他の楽音情報送受信装置と
の間でデータの送受信を行う送受信装置104と、特に
は図示しないケーブルで接続された電子キーボード11
1が出力したMIDIデータを入力するMIDI入力装
置105と、時間を計時するタイマ106と、特には図
示しないケーブルで接続された音源装置112にMID
Iデータを出力するMIDI出力装置107と、を備え
て構成されている。
【0037】以上の構成において、その動作を説明す
る。不図示の電源がオンされると、CPU101はRO
M102に格納されたプログラムを読み出して実行する
ことにより、装置全体の制御を開始する。その後は、特
には図示しない各種スイッチへのユーザの操作や電子キ
ーボード111から受け取ったMIDIデータに応じ
て、RAM103を作業用に使用しながら、ユーザが要
求した機能を実現するための制御を行う。
【0038】電子キーボード111は、それが備えた鍵
盤(キーボード)や各種スイッチに対してユーザが行っ
た操作内容を、MIDIデータの形でMIDI入力装置
105に出力(通知)する。CPU101は、そのよう
にしてMIDI入力装置105に入力されたMIDIデ
ータを、ユーザの設定(指定)に応じてMIDI出力装
置107から音源装置112に出力させるか、或いは送
受信装置104から他の音楽情報送受信装置に送信させ
る。
【0039】ユーザがMIDI出力装置(音源装置11
2)107を指定した場合、CPU101は、MIDI
入力装置105がMIDIデータを入力する度に、その
MIDIデータを直ちにMIDI出力装置107に送っ
て音源装置112に出力させる。それにより、ユーザの
電子キーボード111への操作に応じて音源装置112
から楽音をリアルタイムに発音させる。
【0040】一方、ユーザが送受信装置104(例えば
他の音楽情報送受信装置)を指定した場合には、例えば
その指定が行われた時点でタイマ106を起動させると
ともに、送信させるデータを一時格納しておく領域をR
AM103内に確保する。その後は、MIDI入力装置
105がMIDIデータを入力する度に、そのMIDI
データが入力したタイミングを表す時間データをタイマ
106の値から生成し、その時間データとMIDIデー
タを1イベント分のデータとしてRAM103内に確保
した領域に一旦格納しつつ、その領域にそれまでに格納
した未送信分のデータを送受信装置104から送信させ
ることを繰り返す。その時間データは、受信側ではMI
DIデータを処理すべきタイミングを指定しているもの
として扱われる。
【0041】その送受信装置104は、シリアルの送信
経路に対応させるために、データをビット列に置換して
直列に送信するようになっている(受信時はその逆)。
そのようにして送信されたデータが、ケーブル、更には
所定の通信回線(例えば公衆網)を介して外部の装置に
送られる。以降、混乱を避けるために、その外部の装置
は他の音楽情報送受信装置であるとして説明することに
する。
【0042】なお、本実施の形態では、MIDIデータ
が入力したタイミングを、直前のMIDIデータが入力
されてから経過した時間(デルタタイム)で表す方法を
採用している。その時間を表す値である時間データにつ
いては、以降、時間長データと呼ぶことにする。その時
間長データは例えば2バイトのデータである。
【0043】送受信装置104は、他の音楽情報送受信
装置にデータを送信する他に、それから送信されたデー
タを受信する。CPU101は、送受信装置104が受
信したデータを、例えば以下のように処理する。
【0044】送受信装置104が受信するデータは、上
記したように、MIDIデータに時間長データが付加さ
れたものである。時間長データによって指定されたタイ
ミングでMIDIデータを処理するために、CPU10
1は、例えばデータの受信をユーザが指示した時点でタ
イマ106を起動するとともに、受信したデータを一時
的に格納しておく領域をRAM103内に確保する。そ
の後は、データを受信する度に、それをRAM103内
に確保した領域に格納しつつ、時間長データからMID
Iデータを処理すべきタイミングの時刻、即ちタイマ1
06の値を特定する一方、その特定したタイミングとな
ったMIDIデータを、MIDI出力装置107を介し
て音源装置112に出力する。それにより、音源装置1
12に楽音を発音させて演奏を行わせる。
【0045】このようにして、受信側は、時間長データ
で指定されたタイミングでMIDIデータを処理する。
そのため、送信側はMIDIデータを適切なタイミング
で送信する必要がなくなり、送信路等による遅延を考慮
して早めにMIDIデータを送信することができるよう
になる。一方、MIDIデータを送信するタイミング
は、送信側はイベントのデータを一旦RAM103に格
納することから、そこから読み出すタイミングで変更す
ることができる。これらのことから、受信側は常に時間
長データで指定されたタイミングでMIDIデータを処
理することができるようになり、演奏のズレは確実に回
避されることになる。
【0046】ところで、例えば和音(コード)では、普
通、それを構成する複数の楽音の発音タイミングが基本
的には同時となる。従って、音楽情報をシリアルに送信
すると、それらのイベントデータを送信する時点で既に
タイミングにズレが生じることになる。そのズレは、通
常はさほど問題にはならない。しかし、例えばマルチト
ラックの演奏時に複数のトラックで和音(コード)のよ
うなイベントが重なり合うと、換言すれば、あるタイミ
ングで送信すべきイベントデータの数が多くなると、そ
れらを全て送信するのにより長い時間が必要となること
から、送信時のズレが大きくなる。
【0047】上記のような状況で発生するズレは、処理
させるべきタイミングで音楽情報(MIDIデータ)を
送信していく従来の方法では回避することはできない。
しかし、本実施の形態では、上記したように、必ずしも
処理させるべきタイミングで音楽情報(MIDIデー
タ)を送信しなくとも良いことから、従来の方法では回
避できなかったズレの発生も容易、且つ確実に回避する
ことができる。
【0048】一方、音楽情報(MIDIデータ)を受信
してからそれを実際に処理するまでに要する処理時間
は、装置によって異なる。このため、複数の装置に音楽
情報を送信する場合には、送信側が適切なタイミングで
音楽情報(MIDIデータ)を送信しても、各装置毎に
異なる演奏のズレが生じることがある。
【0049】音楽情報(MIDIデータ)を受信してか
らそれを実際に処理するまでの工程は、音楽情報(MI
DIデータ)を受信する工程と、それを処理する工程と
に大別することができる。本実施の形態では、処理させ
るべきタイミングの前に音楽情報(MIDIデータ)を
送信できる。そのため、少なくとも前者の工程に要する
時間が演奏に影響するのを回避することができる。その
結果、複数の異なる装置に音楽情報を送信する場合であ
っても、装置毎の演奏のズレをより抑えることができ
る。
【0050】次に、上記したCPU101の動作につい
て、図2〜図9に示す動作フローチャートを参照して詳
細に説明する。それらにフローチャートで示す処理は、
CPU101がROM102からプログラムを読み出し
て実行することにより実現される。
【0051】図2〜図5は、送信処理の動作フローチャ
ートである。この送信処理は、上記したように、ユーザ
が所定のスイッチを操作して送受信装置104からMI
DIデータ(音楽情報)を送信させることを指定した場
合に実行される。
【0052】先ず、ステップ201では、イニシャライ
ズを行う。そのイニシャライズとしては、例えばタイマ
106の起動、RAM103に保持させる各種変数への
初期値の代入、送信するデータを一時格納しておくRA
M103内の領域の確保を行い、送受信装置104には
受信側との回線の接続等を行わせる。それが終了した
後、ステップ202に移行する。なお、データの送信
用、或いは受信用にRAM103に確保した領域につい
ては、以降、送受信用領域と呼ぶことにする。
【0053】ステップ202では、電子キーボード11
1からMIDIデータが入力されたか否か判定する。ユ
ーザが電子キーボード111に対して何らかの操作を行
った場合、電子キーボード111はMIDIデータを出
力することから判定がYESとなってステップ203に
移行する。そうでない場合には、その判定はNOとなっ
て図5のステップ224に移行する。なお、MIDI入
力装置105がMIDIデータを入力したことは、例え
ばその旨を表す割り込み信号によってCPU101に通
知される。
【0054】ステップ203〜ステップ223では、M
IDI入力装置105がMIDIデータを入力したこと
に伴う処理が行われる。先ず、ステップ203では、タ
イマ106の現在値の読み込みを行う。その読み込んだ
値は変数TIMERに代入し、続くステップ204で
は、新たに入力されたMIDIデータがその直前のMI
DIデータが入力されてから経過した時間を算出し、そ
の算出結果(時間長データ)を変数SUBUNに代入す
る。現在のタイマ106の値は変数TIMERに、直前
のMIDIデータが入力された際のタイマ106の値は
変数FTIMERに代入されている。そのため、変数S
UBUNには、変数TIMERの値から変数FTIME
Rの値を減算した値が代入される。
【0055】なお、最初のMIDIデータの入力、即ち
ステップ204の実行が1回目であった場合には、ステ
ップ201で変数FTIMERに0を代入し、タイマ1
06はユーザが送信先を指定した際に起動したとする
と、変数SUBUNには送信先を指定してから電子キー
ボード111に何らかの操作を行うまでの時間(を表す
値)が代入されることになる。
【0056】変数SUBUNに新たな値を代入した後
は、ステップ205に移行して、変数TIMEに変数S
UBUNの値を代入する。続くステップ206では、変
数WRITECOUNTERの値から、RAM103の
送受信用領域にデータを格納するアドレスを特定する。
その後、ステップ207に移行する。
【0057】本実施の形態では、RAM103の送受信
用領域に、送信させるデータ、或いは受信したデータを
先頭から順次格納していき、その領域にデータを全て格
納した場合には、再度先頭から格納していくようにして
いる。上記変数WRITECOUNTERは、送受信用
領域内において次のデータの格納先を管理するための変
数である。データの読み出し先の管理用の変数は、変数
READCOUNTERである。変数TIMEは、時間
長データを保持しておくための変数である。
【0058】ステップ207では、変数WRITECO
UNTERの値と変数READCOUNTERの値とが
等しくないか否か判定する。送信させるデータは送受信
用領域内に一旦格納した後に送信させている。その領域
に未送信分のデータが残っていないときにはそれらの変
数の値は等しくなる。そのため、未送信分のデータが送
受信用領域に残っていない場合、ステップ207の判定
はNOとなって図4のステップ218に移行する。そう
でない場合には、その判定はYESとなってステップ2
08に移行する。
【0059】図4のステップ218〜223では、新た
なMIDIデータの入力に伴って送受信用領域に1イベ
ント分のデータを格納するための処理が行われる。その
1イベント分のデータは、MIDIデータ、及び時間長
データから構成される。
【0060】先ず、ステップ218では、変数WRIT
ECOUNTERの値によって指定(特定)される送受
信用領域内の格納先に、ステップ205で変数TIME
に代入した時間長データ及びMIDIデータを書き込
む。それが終了した後、ステップ219〜222で形成
される処理ループを実行し、予め定めた上限値(送受新
領域の大きさに対応する値である)を超えるときには0
を代入しつつ、変数WRITECOUNTERの値の更
新(カウントアップ)を、ステップ218で格納したデ
ータのバイト数分だけ行う。
【0061】時間長データは2バイト、1イベント分の
MIDIデータは通常2、3バイトである。そのため、
普通、1イベントで変数WRITECOUNTERの値
は4、5回更新(カウントアップ)されることになる。
そのことから、送受信用領域は1バイトで表現できる大
きさ(例えば128バイト)としても、そこには少なく
とも20イベント分以上のデータを格納でき、送信タイ
ミングを調整するうえでは十分な時間を確保することが
できるようになる。そのため、本実施の形態では、変数
WRITECOUNTER、READCOUNTERの
有効ビット数も8ビットとし、MIDIの規格に合わせ
ている。それにより、RAM103に必要な記憶容量を
抑えるとともに、後述する1イベント当たりに送信する
データ量も必要最小限に抑えるようにしている。
【0062】上記バイト数分の更新(カウントアップ)
が終了すると、ステップ222の判定がYESとなって
処理ループを抜け、ステップ223に移行する。そのス
テップ223では、変数FTIMERに変数TIMER
の値を代入、即ち変数FTIMERに現在時刻を表す値
を代入してその値を更新する。その後、図2のステップ
202に戻る。
【0063】一方、図2のステップ208〜図3のステ
ップ217では、送受信用領域に格納されている未送信
分のデータの送信に関わる処理が行われる。先ず、ステ
ップ208〜210では、現在の変数READCOUN
TERの値、時間長データ、及びMIDIデータを1イ
ベント分のデータ(上記したように、通常は5、6バイ
トである)として送信する。詳細については後述する
が、変数READCOUNTERの値は、データの送受
信が正常に行われているか否かを判定するために制御デ
ータとして送信しているものである。それが終了した
後、図3のステップ211に移行する。なお、データの
送信は、例えばCPU101が、それらを送受信装置1
04内のバッファに書き込むことで行われる。
【0064】図3のステップ211〜214で形成され
る処理ループでは、変数WRITECOUNTERのと
きと同様に、予め定めた上記の上限値を超えるときには
0を代入するようにしつつ、変数READCOUNTE
Rの値の更新(カウントアップ)を、ステップ208〜
210で送信したデータのバイト数分だけ行う。そのバ
イト数分の更新(カウントアップ)が終了すると、ステ
ップ214の判定がYESとなって処理ループを抜け、
ステップ215に移行する。
【0065】ステップ215では、ステップ208〜2
10で送信したデータが最初のMIDIデータであるか
否か判定する。そのステップ215は、MIDIデータ
を送信した後に実行される。演奏フラグは、演奏中か否
かを管理するための変数であり、ステップ201のイニ
シャライズで0が初期値として代入される。そのため、
例えば変数フラグの値が0であった場合、その判定がY
ESとなってステップ216に移行する。そうでない場
合には、即ち演奏フラグの値が1であった場合には、そ
の判定はNOとなって図2のステップ207に戻る。
【0066】ステップ216では、受信側に演奏の開始
を指示する演奏開始コードを送信する。続くステップ2
17では、演奏フラグに1を代入する。それが終了した
後、図2のステップ207に戻る。
【0067】上記した処理ステップまでの処理動作を要
約すると、以下のようになる。最初のMIDIデータを
入力したときには、変数WRITECOUNTERの値
と変数READCOUNTERの値とは等しいことか
ら、ステップ207の判定はNOとなって、送受信用領
域にそのMIDIデータが時間長データとともに送受信
用領域に格納される。
【0068】次のMIDIデータが入力したときには、
それらの変数の値は異なっていることから、ステップ2
07の判定はNOとなって、送受信用領域に格納されて
いる未送信分のデータの送信が行われる。データの送信
は、イベント単位で行い、1イベント分のデータの送信
が終了すると、ステップ207に戻る。そのため、デー
タの送信は、ステップ207の判定がNOとなるまで繰
り返し行われる。
【0069】そのようなデータの送信を行った結果、ス
テップ207の判定がNOとなると、新たに入力された
MIDIデータと時間長データとを送受信用領域に格納
する。その格納が終了すると、ステップ202に戻る。
そのため、それ以降は、新たにMIDIデータが入力す
る度に、未送信分のデータを送信した後、次に送信すべ
きデータを送受信用領域に格納するという動作を同様に
繰り返すことになる。
【0070】図2の説明に戻って、MIDIデータの新
たな入力がなかった場合の動作について説明する。MI
DIデータの新たな入力がなかった場合には、ステップ
202の判定がNOとなって図5のステップ224に移
行する。
【0071】そのステップ224では、タイマ106の
現在値の読み込み、その値を変数TIMERに代入す
る。続くステップ225では、変数TIMERの値から
変数FTIMERの値を減算した値、即ち直前のMID
Iデータが入力されてから経過した時間(を表す値)を
変数SUBUNに代入する。その後、ステップ226に
移行する。
【0072】本実施の形態では、予め定めた時間内にM
IDIデータが入力されなかった場合、データの送信を
中止し、外部の装置による演奏を停止させるようにして
いる。これは、MIDIデータの入力(ユーザの電子キ
ーボード111への操作)に応じてデータの送信を行う
ようにしていることから、MIDIデータの入力間隔が
開いても、受信側にMIDIデータを処理すべきタイミ
ングより遅れて送信するようなことを回避するためであ
る。その機能は、ステップ226〜229を実行するこ
とで実現される。
【0073】ステップ226では、変数SUBUNの値
が予め定めた時間に対応する所定値より大きいか否か判
定する。ユーザが電子キーボード111の操作をその時
間以上行わなかった場合、その判定はYESとなってス
テップ227に移行する。そうでない場合には、その判
定はNOとなって図2のステップ202に戻る。
【0074】ステップ227では、受信側に演奏の停止
を指示する演奏停止コードを送信する。続くステップ2
28では、演奏フラグに0を代入する。演奏フラグに0
を代入すると、ステップ229でRAM103内の不必
要なデータの消去といったイニシャライズを行った後、
一連の処理を終了する。
【0075】このようにして、電子キーボード111か
ら出力されたMIDIデータは、時間長データが付加さ
れるとともに、RAM103を利用したタイミングの調
整を行って送信される。
【0076】次に、上記のようにして送信されるデータ
の受信処理について、図6〜図9に示すその動作フロー
チャートを参照して詳細に説明する。その受信処理は、
例えば送信処理と同様に、ユーザが所定のスイッチを操
作して送受信装置104から音楽情報を取得するのを指
定した場合に実行される。
【0077】先ず、ステップ601では、イニシャライ
ズを行う。そのイニシャライズとしては、例えばタイマ
106の起動、RAM103に保持させる各種変数への
初期値の代入、受信したデータを一時格納しておく送受
信用領域をRAM103内に確保といったことを行う。
それが終了した後、ステップ602に移行する。
【0078】ステップ602では、送受信装置104が
データを新たに受信していないか否か判定する。送受信
装置104がデータを受信していた場合、その判定はN
Oとなって図8のステップ616に移行する。そうでな
い場合には、その判定はYESとなってステップ603
に移行する。なお、データの受信は、例えば送受信装置
104が、その旨を示す割り込み信号を出力することに
より、CPU101に通知される。
【0079】図8のステップ616〜626では、送受
信装置104がデータを受信したことに伴う処理が行わ
れる。先ず、ステップ616では、受信したデータが演
奏開始コードか否か判定する。送受信装置104がその
演奏開始コードを受信した場合、その判定はYESとな
ってステップ617に移行する。そうでない場合には、
その判定はNOとなってステップ618に移行する。
【0080】ステップ617では、演奏開始コードを受
信したことから、演奏中か否かを管理するための演奏フ
ラグに1を代入する。演奏開始コードは、上述したよう
に、最初のイベントのデータを送信した後に送信され
る。そのために、続くステップ617−1では、既に格
納されている最初のイベントの時間長データを読み込
む。更には、続くステップ617−2において、その時
間長データが付加されたMIDIデータを処理するタイ
ミングの時刻を、変数である現在時刻カウンタに代入す
る。具体的には、現在時刻カウンタに、時間長データと
変数TIMER(タイマ106の現在値)を加算した値
を代入する。それが終了した後、図6のステップ603
に戻る。
【0081】ステップ618では、データとしてイベン
トのデータを受信したか否か判定する。イベントのデー
タを受信した場合、その判定はYESとなってステップ
619に移行する。そうでない場合には、即ち演奏開始
コードやイベントのデータ以外のデータを受信した場合
には、その判定はNOとなって図6のステップ603に
戻る。
【0082】上記したように、1イベント分のデータ
は、変数READCOUNTERの値、時間長データ、
MIDIデータの順序で送信される。MIDIデータの
先頭はステータスバイトであり、その最上位ビットの値
は1である。そのステータスバイトからMIDIデータ
全体、更には1イベント分として送信されたデータの総
バイト数が特定される。このことから、本実施の形態で
は、先頭から3バイト目のデータの最上位ビットの値が
1、即ちステータスバイトで、且つそのステータスバイ
トから特定したバイト数のデータを受信した場合に、イ
ベントのデータを受信したと判定している。
【0083】ステップ619では、変数WRITECO
UNTERの値を読み込む。続くステップ620では、
その変数の値が受信した変数READCOUNTERの
値より大きいか否か判定する。変数WRITECOUN
TERの値が受信した変数READCOUNTERの値
より大きかった場合、その判定はYESとなって図9の
ステップ627に移行する。そうでない場合には、その
判定はNOとなってステップ621に移行する。
【0084】ステップ621では、変数READCOU
NTERの値が受信した変数READCOUNTERの
値より大きいか否か判定する。変数READCOUNT
ERの値は送信側より受信側のほうが大きい場合、その
判定はYESとなって図9のステップ627に移行す
る。そうでない場合には、その判定はNOとなってステ
ップ622に移行する。
【0085】データの送受信が正常に行われていれば、
本実施の形態では、変数READCOUNTERの受信
時において、その値は受信側の変数WRITECOUN
TERの値と等しくなる。変数WRITECOUNTE
Rの値と変数READCOUNTERの値とでは、後者
の値は大きくても前者の値である。これらのことから判
るように、何れにしても、データの送受信が正常に行わ
れていれば、送信側の変数READCOUNTERの値
が、受信側の変数WRITECOUNTERの値や変数
READCOUNTERの値以下、即ちステップ620
や621の判定結果がYESとなることは有り得ない。
そのため、ステップ620、或いは621の判定がYE
Sとなった場合には、エラーが発生したとして、図9の
ステップ627に移行してそのエラーへの対処が行われ
る。
【0086】そのステップ627では、エラーが発生し
ていることから、MIDI出力装置107を介して音源
装置112に発音中の全ての楽音の消音(クリア)を指
示する。全ての楽音の消音を指示すると、次に、ステッ
プ628、629で形成される処理ループを実行して、
演奏停止コードを受信するのを待つ。
【0087】演奏停止コードを受信すると、ステップ6
29の判定がYESとなってその処理ループを抜けてス
テップ630に移行する。そのステップ630では、R
AM103に保持させた各種変数や送受信用領域のクリ
アといったイニシャライズを行い、その後に一連の処理
を終了する。
【0088】このように、エラーが発生した場合には、
直ちに演奏を停止させている。そのため、エラーによっ
て演奏に実際には発音されない楽音が発音されたり、何
らかの楽音の発音が鳴りっぱなしになるといったことが
回避される。
【0089】なお、本実施の形態では、制御データであ
る変数READCOUNTERの値を各イベント毎に付
加して送信しているが、例えば10イベント毎といった
ように、ある決められた数のイベントのデータを送信す
る毎に制御データを送信するようにしても良い。制御デ
ータとしては、送信間隔をイベントといった単位で予め
決めておくような場合には、本実施の形態のように、デ
ータの送信量を表す値としなくとも良い。
【0090】エラーの検出においては、送信側が送信し
た変数READCOUNTERの値が、受信側の変数W
RITECOUNTERの値や変数READCOUNT
ERの値以下か否かによりエラーの検出を行っている
が、それ以外の方法によってエラーを検出するようにし
ても良い。例えばデータが途中で消えるといったエラー
も検出できるように、例えば変数WRITECOUNT
ERの値が受信した送信側の変数READCOUNTE
Rの値よりも小さい(正常時と比較して)場合にもエラ
ーが発生したと判定して良い。
【0091】一方、ステップ621の判定がNO、即ち
データの送受信が正常と判定したときに実行されるステ
ップ622では、変数READCOUNTERの値以外
に受信した時間長データ及びMIDIデータを、変数W
RITECOUNTERの値によって指定される送受信
用領域の格納先に書き込む。それが終了した後、ステッ
プ219〜222で形成される処理ループを実行し、予
め定めた上限値(送受新領域の大きさに対応する値であ
る)を超えるときには0を代入しつつ、変数WRITE
COUNTERの値の更新(カウントアップ)を、ステ
ップ218で格納したデータのバイト数分だけ行う。そ
の更新が終了すると、図6のステップ603に戻る。
【0092】そのステップ603では、演奏フラグの値
が1か否か判定する。送信側から演奏開始コードが送
信、或いは既に送信されていた場合、その判定はYES
となってステップ604に移行する。そうでない場合に
は、その判定はNOとなってステップ602に戻る。
【0093】ステップ604では、タイマ106の現在
値を読み込み、それを変数TIMERに代入する。続く
ステップ605では、その変数TIMERの値が、上記
現在時刻カウンタの値よりも大きいか否か判定する。そ
の現在時刻カウンタの値は、次のイベント(MIDIデ
ータ)を処理すべきタイマ106の値が代入されている
変数である。そのため、次のイベントを処理すべきタイ
ミングとなった場合には、その判定はYESとなってス
テップ606に移行する。そうでない場合には、即ち次
のイベントを処理すべきタイミングがまだ来ていない場
合には、その判定はNOとなってステップ602に戻
る。
【0094】ステップ606では、次のイベントを処理
すべきタイミングとなったことから、変数READCO
UNTERの値を読み込み、続くステップ607では、
その値に基づいて送受信用領域からMIDIデータを読
み出す。それが終了した後、ステップ608に移行す
る。
【0095】ステップ608では、ステップ607で読
み出したデータの種類を判別し、その判別結果に応じて
処理の移行先を決定する。具体的には、読み出したデー
タが演奏停止コードであった場合はステップ601に戻
り、読み出すべきデータが格納されていなかった場合は
ステップ602に戻り、読み出したデータがMIDIデ
ータであった場合にはステップ609に移行する。読み
出すべきデータが格納されていなかった場合にステップ
602に戻ることで、その場合には変数READCOU
NTERの値の更新(カウントアップ)を回避してい
る。
【0096】ステップ609では、読み出したMIDI
データを、MIDI出力装置107を介して音源装置1
12に出力する。MIDIデータを音源装置112に出
力した後は図7のステップ610に移行する。
【0097】ステップ610〜613で形成される処理
ループでは、変数READCOUNTERの値が予め定
めた上記の上限値を超えるときには0を代入するように
しつつ、変数READCOUNTERの値の更新(カウ
ントアップ)を、ステップ609で処理したイベントの
バイト数分だけ行う。そのバイト数分の更新(カウント
アップ)が終了すると、ステップ613の判定がYES
となって処理ループを抜け、ステップ614に移行す
る。ステップ614に移行時には、変数READCOU
NTERの値は次に処理すべきイベントのデータの先頭
バイトを指定する値となる。
【0098】ステップ614では、その変数READC
OUNTERの値によって指定されるイベントの時間長
データを送受信用領域から読み込む。続くステップ61
5では、その読み込んだ時間長データを用いて現在時刻
カウンタの更新を行う。具体的には、変数TIMERの
値(タイマ106の現在値)に、読み込んだ時間長デー
タを加算した値を現在時刻カウンタに代入する。それが
終了した後、図2のステップ602に戻る。
【0099】このように、受信処理を実行することで、
送信側が送信したイベント単位のデータは送受信用領域
に一旦格納され、その格納したデータは、それに含まれ
ている時間長データに従って処理される。それにより、
受信したタイミングによって発生する演奏のズレは確実
に回避される。
【0100】なお、本実施の形態では、電子キーボード
111からMIDIデータが入力したタイミングで未送
信分のデータを送信するようにしているが、データを送
信するタイミングの取り方はこれに限定されるものでは
ない。例えば、時間長データを基に、受信側が処理すべ
きタイミングより予め定めた時間だけ早く受信するよう
にデータを送信しても良い。或いは、最初のイベントの
データだけをある程度遅らせ、それ以外のイベントのデ
ータは、入力後直ちに送信するようにしても良い。これ
らのように、データを送信するタイミングの取り方には
様々な方法があることから、特に限定されるものではな
い。
【0101】また、本実施の形態では、ユーザの演奏操
作に応じて電子キーボード111が出力するMIDIデ
ータ(イベントデータ)を送信するようにしているが、
本発明は随時入力されるデータの送信に限定されるもの
でもない。イベントデータに時間長データが予め付加さ
れている自動演奏用の音楽情報の送信に、本発明を適用
しても良い。 <第2の実施の形態>最近では、イベントデータにそれ
の処理の実行を制御するための第1の制御データを加え
て処理単位となるデータ(命令)列を構成し、その処理
単位のデータ列の実行を制御するための第2の制御デー
タを更に加えて自動演奏用の演奏データ(音楽情報)を
構成することが提案されている(特願平6−14995
8号参照)。第2の実施の形態は、そのようにしてデー
タがモジュール化されている演奏データ(音楽情報)を
受信して処理できるようにしたものである。
【0102】第2の実施の形態における構成は、上記第
1の実施の形態のそれと基本的に同じである。動作につ
いては、上記のような構成の演奏データを受信して処理
できるようになっていることだけが第1の実施の形態か
ら異なっている。そのため、第1の実施の形態で付与し
た符号をそのまま使用して、第1の実施の形態から異な
っている動作のみ説明することとする。
【0103】上記第1の制御データとしては、次に処理
すべきイベントデータ(MIDIデータ)、或いは第1
の制御データを指定するジャンプ命令、主に分岐命令に
用いられるレジスタを対象とした演算命令等がある。第
2の制御データとしては、処理単位のデータ(命令)列
(以降、そのデータ(命令)列によって実行される処理
をタスクと呼ぶ)の実行開始を指示する命令(タスク生
成命令)、そのデータ(命令)列の実行終了を指示する
命令(タスク終了命令)等がある。タスク生成命令によ
って実行の開始が指示された処理単位のデータ(命令)
列は、処理対象としているタスクを時分割的に切り換え
ながら処理される。そのようにして各タスク(処理単
位)のデータ(命令)列が処理されることから、タスク
毎に演奏を行うタイミングや繰り返し等の設定が容易に
行えるようになっている。
【0104】上記したように、第2の実施の形態で受信
するのを想定している演奏データ(音楽情報)はモジュ
ール化され、また、ジャンプ命令等が用いることができ
るようになっている。そのため、送受信装置104を介
したデータの受信を指示した場合、CPU101は、1
曲分の演奏データを格納できる大きさの送受信用領域を
RAM103内に確保し、その送受信用領域に受信した
データを格納しつつ、それに格納されたデータをタスク
別に順次時分割的に切り換えながら処理する。以降、図
10〜図15を参照して、その動作について詳細に説明
する。
【0105】なお、特に詳細な説明は省略するが、上記
演奏データの送信は、例えば第1の実施の形態における
送信処理と同様に、最初に処理すべきイベントのデー
タ、演奏開始コードをこの順序で送信した後、処理すべ
きデータ或いはデータ列を順次シーケンシャルに送信し
ていくことで進行する。それらデータ或いはデータ列に
は、ジャンプ命令等に受信側が対処できるように、それ
らの格納先を指示するアドレスの値も付加されている。
【0106】図10〜図12は、第2の実施の形態によ
る受信処理の動作フローチャートである。最初に、これ
ら図10〜図12を参照して、受信処理について詳細に
説明する。なお、その受信処理は、例えば第1の実施の
形態と同様に、ユーザが所定のスイッチを操作して送受
信装置104から演奏データ(音楽情報)を取得するの
を指定した場合に、ROM102に格納されたプログラ
ムを実行することで実現される処理である。
【0107】先ず、ステップ1001では、イニシャラ
イズを行う。そのイニシャライズとしては、例えばタイ
マ106の起動、RAM103に保持させる各種変数へ
の初期値の代入、受信したデータを格納しておく送受信
用領域をRAM103に確保といったことを行う。それ
が終了した後、ステップ1002に移行する。
【0108】ステップ1002では、送受信装置104
がデータを新たに受信していないか否か判定する。送受
信装置104がデータを受信していた場合、その判定は
NOとなって図12のステップ1020に移行する。そ
うでない場合には、その判定はYESとなってステップ
1003に移行する。なお、データの受信は、例えば送
受信装置104が、その旨を示す割り込み信号を出力す
ることにより、CPU101に通知される。
【0109】図12のステップ1020〜1031で
は、送受信装置104がデータを受信したことに伴う処
理が行われる。先ず、ステップ1020では、受信した
データが演奏開始コードか否か判定する。送受信装置1
04がその演奏開始コードを受信した場合、その判定は
YESとなってステップ1021に移行する。そうでな
い場合には、その判定はNOとなってステップ1024
に移行する。
【0110】ステップ1021では、演奏開始コードを
受信したことから、演奏中か否かを管理するための演奏
フラグに1を代入する。演奏開始コードは、上述したよ
うに、最初に処理すべきイベントデータ(MIDIデー
タ)を送信した後に送信される。そのために、続くステ
ップ1022では、既に格納されている最初のイベント
の時間長データを読み込む。更には、ステップ1023
において、その時間長データが付加されたMIDIデー
タを処理すべきタイミングの時刻を、変数である現在時
刻カウンタに代入する。それが終了した後、図10のス
テップ1002に戻る。
【0111】受信したデータをタスク別に処理していく
ために、第1の実施の形態とは異なり、データの読み出
し先を管理するための変数READCOUNTER、及
び上記現在時刻カウンタを配列変数化している。現在処
理対象としているタスクは変数であるタスクカウンタT
Cで管理しており、それらの配列変数もタスクカウンタ
TCによって管理されている。そのため、配列変数につ
いては、以降、それらの配列変数の最後には(TC)を
付け加えることにする。
【0112】一方、ステップ1024では、受信したの
は演奏停止コードか否か判定する。送信側が演奏停止コ
ードを送信した場合、その判定はYESとなってステッ
プ1025に移行する。そうでない場合には、その判定
はNOとなってステップ1027に移行する。
【0113】ステップ1025では、演奏停止コードを
受信したことから、演奏フラグに0を代入する。続くス
テップ1026では、RAM103内の送受信用領域の
クリアといったイニシャライズを行う。その後、一連の
処理を終了する。このようにして、ステップ1025、
それに続くステップ1026では、送信側からの演奏停
止の指示に対処する処理が行われる。
【0114】ステップ1024の判定がYESのときに
移行するステップ1027では、演奏データを構成する
データを受信したか否か判定する。上記したように、演
奏データを構成するデータ(コマンド)は、大別して、
イベントデータ、第1及び第2の制御データの3種類が
ある。それらのデータには、ジャンプ命令(第1の制御
データ)等に受信側が対処できるように、送信側でそれ
を読み出したアドレスの値が付加されて送信されてい
る。それらのデータの形式は予め定められている。その
ため、変数READCOUNTERの値を含むデータを
受信した場合、ステップ1024の判定はYESとなっ
てステップ1028に移行する。そうでない場合には、
その判定はNOとなって図10のステップ1002に戻
る。
【0115】ステップ1028では、受信したアドレス
の値を変数WRITECOUNTERに書き込む。その
変数WRITECOUNTERは、第1の実施の形態と
同様に、データの書き込み先を管理するための変数であ
る。
【0116】ステップ1028に続くステップ1029
では、受信したアドレスの値が変数WRITECOUN
TERで示される最終アドレスの値よりも大きいか否か
判定する。その最終アドレスの値は、RAM103内に
確保した送受信用領域の大きさ、より具体的にはバイト
数に対応する。そのため、受信したアドレスの値が送受
信用領域のバイト数よりも大きかった場合、その判定は
YESとなってステップ1030に移行する。そうでな
い場合には、その判定はNOとなってステップ1031
に移行する。
【0117】受信したアドレスの値が送受信用領域のバ
イト数よりも大きかった場合、受信したデータを書き込
む先が特定できないことから、送受信用領域にそのデー
タを書き込むことができない。そのため、ステップ10
30では、データの送信、或いは受信にエラーが発生し
たとして、それに対処するための例外処理を実行する。
その後、一連の処理を終了する。他方のステップ103
1では、受信したアドレスの値、即ち変数WRITEC
OUNTERの値が指定するアドレスから時間長デー
タ、それが付加されたMIDIデータ等のコマンドを送
受信用領域に書き込む。それが終了した後、図10のス
テップ1002に戻る。
【0118】図10に戻って、ステップ1003以降の
処理について説明する。ステップ1003では、演奏フ
ラグの値が1か否か判定する。送信側が送信した演奏開
始コードを受信していた場合、その判定はYESとなっ
てステップ1004に移行する。そうでない場合には、
その判定はNOとなってステップ1002に戻る。
【0119】ステップ1004〜図11のステップ10
19では、受信したデータに従った自動演奏を実現する
ための処理が行われる。先ず、ステップ1004では、
タスクカウンタTCの初期化、即ち予め定めた値の代入
を行う。そのタスクカウンタTCは、上記したように、
処理対象としているタスクを管理するための変数であ
る。
【0120】ステップ1004に続くステップ1005
では、タイマ106の現在値を読み込み、それを変数T
IMERに代入する。続くステップ1006では、タス
クカウンタTCが指定するタスクに対応した現在時刻カ
ウンタ(TC)の値が、その変数TIMERの値以上か
否か判定する。現在時刻カウンタ(TC)には、次のイ
ベント(MIDIデータ)を処理すべきタイミングとな
ったときのタイマ106の値が代入されている。そのた
め、次のイベントを処理すべきタイミングとなった場合
には、その判定はNOとなって図11のステップ100
9に移行する。そうでない場合には、即ち次のイベント
を処理すべきタイミングがまだ来ていない場合には、そ
の判定はYESとなってステップ1007に移行する。
【0121】ステップ1007では、現在処理対象とし
ているタスクでは次のイベントを処理すべきタイミング
となっていないことから、処理対象を他のタスクに変更
するためにタスクカウンタTCのインクリメントを行
う。その後、ステップ1008に移行する。
【0122】ステップ1008では、インクリメント後
のタスクカウンタTCの値が所定値より大きいか否か判
定する。タスク生成命令によって実行を開始したタスク
には、例えばシーケンシャルに数字が順次割り当てられ
る。このことから、上記所定値は、例えばそれまでにタ
スクに割り当てた数字の最大値である。そのため、現在
実行中のタスクを一通り処理対象とした場合、その判定
はYESとなってステップ1002に戻る。そうでない
場合には、その判定はNOとなってステップ1005に
戻る。
【0123】このように、ステップ1005〜1008
は処理ループを形成しており、その処理ループの実行を
繰り返すことで、タスクカウンタTCによって指定され
たタスクに対する処理が行われていく。そのタスクに処
理すべきデータ(イベント)が存在していた場合、ステ
ップ1006の判定がYESとなって図11のステップ
1009に移行し、そのデータに対する処理が以下のよ
うに行われる。
【0124】先ず、ステップ1009では、現在処理対
象としているタスクに対応する変数READCOUNT
ER(TC)の値を読み込む。続くステップ1010で
は、その変数READCOUNTER(TC)の値に基
づいて送受信用領域から処理すべきデータを読み込む。
その後、ステップ1011に移行する。
【0125】ステップ1011では、ステップ1010
で読み込んだデータの種類(内容)を判定する。その種
類がMIDIデータであった場合、次にステップ101
2に移行して、MIDIデータを処理する音楽処理を実
行した後、ステップ1014に移行する。その種類が第
1、或いは第2の制御データであった場合には、次にス
テップ1013に移行して、それらの制御データを処理
するタスク処理を実行した後、ステップ1014に移行
する。なお、音楽処理、タスク処理についての詳細は後
述する。
【0126】ステップ1014〜1016で形成される
処理ループでは、変数READCOUNTER(TC)
を、その値がオーバーフロー、即ちその値がRAM10
13の送受信用領域外のアドレスを示しているか否かを
判定しつつ、ステップ1012の音楽処理、或いはステ
ップ1013のタスク処理で処理したデータのバイト数
だけインクリメントする。そのバイト数のインクリメン
トが終了すると、ステップ1017に移行する。
【0127】ステップ1017では、インクリメント後
の変数READCOUNTER(TC)の値に基づい
て、次に処理すべきデータに付加された時間長データを
送受信用領域から読み込む。それが終了すると、続くス
テップ1018でそのデータを処理すべきタイミングと
なったときのタイマ106の値を算出して現在時刻カウ
ンタ(TC)に代入する。より具体的には、現在時刻カ
ウンタ(TC)に、読み込んだ時間長データの値に変数
TIMERの値(タイマ106の現在値)を加算した値
を代入する。その後、図10のステップ1007に戻
る。
【0128】一方、ステップ1014〜1016で形成
される処理ループを実行中に変数READCOUNTE
R(TC)の値がオーバーフローを起こした場合、ステ
ップ1015の判定がYESとなってステップ1019
に移行する。そのステップ1019では、データの送
信、或いは受信に何らかのエラーが発生したとして例外
処理を実行する。その後、一連の処理を終了する。
【0129】このように、各種の制御データを含む演奏
データ(音楽情報)を対象とした受信処理では、受信し
たデータは随時送受信用領域内に格納し、それに格納し
た受信データに対しては、処理対象とするタスクを順次
変更しながら、各タスクで処理すべきタイミングとなっ
たデータを随時処理することが行われる。
【0130】次に、上記受信処理内で実行されるサブル
ーチン処理について、図13〜図15を参照して詳細に
説明する。図13は、図11のステップ1012で実行
される音楽処理の動作フローチャートである。始めに、
図13を参照して音楽処理について詳細に説明する。
【0131】この音楽処理は、MIDI出力装置107
を介して音源装置112を制御するための処理である。
その処理が開始すると、ステップ1301で処理すべき
MIDIデータをMIDI出力装置107に出力する。
そのMIDIデータを出力した後、一連の処理を終了す
る。
【0132】図14は、図11のステップ1013で実
行されるタスク処理の動作フローチャートである。次
に、図14を参照してタスク処理について詳細に説明す
る。なお、図14は、制御データのなかで使用頻度の高
いもの、具体的にはジャンプ命令、指定したレジスタを
用いた演算命令、及びタスク生成命令に対する処理の流
れを抜粋して示したものである。
【0133】このタスク処理を開始した後は、先ず、ス
テップ1401で処理すべきデータ(命令)の種類を判
定する。その後は、その判定した種類に応じて処理が行
われる。
【0134】そのデータ(命令)の種類がジャンプ命令
と判定した場合、ステップ1402に移行し、変数RE
ADCOUNTER(TC)に、ジャンプ先となるデー
タの格納場所を示す値を代入する。その後、一連の処理
を終了する。
【0135】演奏データには、詳細な説明は省略する
が、それ自体では何の機能も発揮しない制御コード(フ
ラグ)を挿入することができ、ジャンプ命令は、その制
御コードを指定してデータの実行個所を変更するように
なっている。そのため、ステップ1402を実行するこ
とで、変数READCOUNTER(TC)には、指定
された制御コード(フラグ)の格納先に対応する値が代
入される。
【0136】ステップ1401で判定したデータ(命
令)の種類が演算命令であった場合には、ステップ14
03に移行する。そのステップ1403では、その命令
に従って、その命令で指定したレジスタ(タスクワーク
レジスタ)の値に対する操作を行う。それを行った後、
一連の処理を終了する。
【0137】ステップ1401で判定したデータ(命
令)の種類がタスク生成命令であった場合には、ステッ
プ1404に移行する。そのステップ1404では、そ
の命令で指定されたタスクを実行中のタスクとして登録
することで、そのタスクを生成する。それを行った後、
一連の処理を終了する。
【0138】上記タスク処理を実行することで、各種制
御データに割り当てた機能が実現され、タスクを単位と
した演奏の開始や終了、それの繰り返し等が制御される
ことになる。
【0139】図15は、図11のステップ1019、或
いは図12のステップ1030で実行される例外処理の
動作フローチャートである。例外処理は、データの送
信、或いは受信にエラーが発生したと判定した場合に、
そのエラーに対処するために実行される。次に、この図
15を参照して、例外処理について詳細に説明する。
【0140】先ず、ステップ1501では、エラーが発
生したことから、MIDI出力装置107を介して音源
装置112に発音中の全ての楽音の消音(クリア)を指
示する。全ての楽音の消音を指示すると、次に、ステッ
プ1502、1503で形成される処理ループを実行し
て、演奏停止コードを受信するのを待つ。
【0141】送受信装置104が演奏停止コードを受信
すると、ステップ1503の判定がYESとなってその
処理ループを抜けてステップ1504に移行する。その
ステップ1504では、演奏フラグに演奏中ではないこ
とを示す0を代入する。続くステップ1505では、R
AM103に保持させた各種変数や送受信用領域のクリ
アといったイニシャライズを行い、その後に一連の処理
を終了する。
【0142】このように、エラーが発生した場合には、
直ちに演奏を停止させている。そのため、エラーによっ
て演奏に実際には発音されないはずの楽音が発音された
り、何らかの楽音が鳴りっぱなしになるといったことが
確実に回避される。 <第3の実施の形態>MIDIデータの送信に用いる通
信回線、或いはその使用状況等により、MIDIデータ
が送信されてから受信されるまでの送信時間が変動する
ことがある。この第3の実施の形態は、上記第1の実施
の形態と比較して、そのような送信時間の変動により適
応できるようにしたものである。
【0143】第3の実施の形態における構成は、基本的
に第1の実施の形態のそれ(図1参照)と同じである。
そのため、第1の実施の形態の説明で用いた符号を流用
して、第1の実施の形態から異なる部分のみ説明するこ
とにする。
【0144】第3の実施の形態では、電源がオンされる
と、タイマ106を起動させるようになっている。CP
U101は、そのタイマ106の値を用いて、以下のよ
うに、MIDIデータの送信、及び受信時の処理を行っ
ている。ここでも、データの送受信の対象は他の音楽情
報送受信装置であるとして説明する。
【0145】送信の対象となるMIDIデータは、MI
DI入力装置105を介して電子キーボード111から
入力される。CPU101は、そのMIDIデータに、
タイマ106の値(電源がオンしてから経過した時間
(を表す値))を時間データとして付加し、それらを1
イベント分のデータとして送受信装置104から送信さ
せる。
【0146】送信側のタイマの値と受信側のタイマ10
6の値とは、通常は一致しない。そのため、第3の実施
の形態では、送信側から送られてくる時間データ(送信
時のタイマの値)から送信側のタイマの値との違いを補
正するための値を算出し、その値を基に、送信側が付加
した時間データに沿ってMIDIデータを処理するよう
にしている。その補正するための値は、変数である補正
レジスタに保持させている。
【0147】送信時間があるため、時間データとして送
られてきた送信側のタイマの値からだけでは、送信側の
タイマの値と受信側のタイマ106の値との間の違いを
正確に特定することはできない。その送信時間自体も常
に一定であるとは限らない。送信に用いる通信回線やそ
の状態、或いは送信側と受信側の位置関係等によって、
送信時間が比較的大きく変動することがある。その送信
時間の変動は、楽音を発音させるタイミングのズレとな
って表面化する。このことから、第3の実施の形態で
は、送信側から送られる時間データを基に、その変動の
影響を低減させるようにしている。その影響の低減は、
後述するようにして、上記補正レジスタの値を変更する
ことで行っている。
【0148】送信されてきたデータは、RAM103に
確保した送受信用領域に一旦格納する。その送受信用領
域に格納したMIDIデータを処理するタイミングを、
CPU101は、それに付加された時間データ、及び補
正レジスタの値から決定し、その決定したタイミングに
従ってMIDIデータをMIDI出力装置107に出力
することで処理する。それにより、音源装置112から
楽音を発音させる。
【0149】ところで、送信時間の変動は、或る時間内
に送信されたデータを、受信側にそれよりも短い時間内
で集中的に受信させるようなことを起こすことがある。
換言すれば、単位時間当たりのデータの受信量を異常に
増大させることがある。
【0150】それは、送受信用領域に多くのデータを短
い時間内に格納する必要性が生じたことを意味する。そ
の送受信用領域には、上記したように、データを書き込
むアドレスをサイクリックに変更させている。このた
め、短い時間内で大量のデータを送受信用領域に格納さ
せると、未処理のデータを消して上書きしてしまうこと
が起こり得る。それは、例えば或る楽音が鳴りっぱなし
になるというようなことを生じさせるので、非常に望ま
しくない。
【0151】このことから、第3の実施の形態では、送
受信用領域の空容量(データが格納されていない領域、
及び既に処理したデータが格納されている領域の容量を
合計した量である)に応じて、データを処理するタイミ
ングを早めたり遅くしたりしている。そのことについて
の詳細は後述する。
【0152】なお、送受信用領域には、送信時間の変動
の他に、送信側と受信側のタイマが時間を計時するスピ
ードが異なることから未処理のデータが必要以上に大量
に格納されることも考えられる。これは、例えば送信側
のほうが受信側よりも計時のスピードが速い場合(単位
時間当たりのデータの処理量が受信側よりも送信側のほ
うが大きい場合)である。その送受信用領域について
は、以降、リングバッファと呼ぶことにする。
【0153】次に、上記したCPU101の動作につい
て、図16〜図21に示す動作フローチャートを参照し
て詳細に説明する。それらフローチャートで示す処理
は、CPU101が、ROM102からプログラムを読
み出して実行することにより実現される処理である。
【0154】図16は、第3の実施の形態における送信
処理の動作フローチャートである。この送信処理は、第
1の実施の形態と同様に、ユーザが所定のスイッチを操
作して送受信装置104からMIDIデータ(音楽情
報)を送信させることを指定した場合に実行される。
【0155】先ず、ステップ1601では、イニシャラ
イズを行う。そのイニシャライズでは、例えば送受信装
置104に受信側との回線の接続等を行わせる。その
後、ステップ1602に移行する。
【0156】ステップ1602では、MIDI入力装置
105に電子キーボード111からMIDIデータが入
力されるのを待って、MIDI入力装置105からMI
DIデータを受け取る。続くステップ1603では、そ
のMIDIデータに、タイマ106の現在値を時間デー
タとして付加する。その後、ステップ1604に移行す
る。なお、タイマ106の現在値(現在時刻)は、第1
の実施の形態と同様に、変数TIMERに保持して扱わ
れる。MIDIデータ、及び時間データについては、第
3の実施の形態では共に4バイトを割り当てている。
【0157】ステップ1604では、時間データを付加
したMIDIデータを送受信装置104に送って送信さ
せる。その後、ステップ1602に戻る。ユーザが所定
のスイッチを操作してデータの送信の終了を指示するま
での間、ステップ1602〜1604で形成される処理
ループが繰り返し実行される。それにより、電子キーボ
ード111への操作に応じて送受信装置104からデー
タが送信されることになる。
【0158】図17〜図21は、第3の実施の形態にお
ける受信処理の動作フローチャートである。次に、図1
7〜図21を参照して、受信処理について詳細に説明す
る。その送信処理は、第1の実施の形態と同様に、ユー
ザが所定のスイッチを操作して送受信装置104から音
楽情報を取得するのを指定した場合に実行される。
【0159】先ず、ステップ1701〜1704では、
イニシャライズに関わる処理を行う。それらの処理ステ
ップを実行することで、補正レジスタ、平均カウンタ、
平均レジスタ、及びリングバッファへのアクセスを管理
するための各種レジスタ(変数)に、それぞれ0が代入
され、リングバッファの内容はクリアされる。なお、平
均カウンタは、補正レジスタの値を変更するタイミング
を管理するための変数、平均レジスタは、その変更に用
いるデータを保持させる変数である。リングバッファへ
のアクセスを管理するための各種レジスタ(変数)に
は、データを書き込むアドレスを管理するための書き込
みアドレスや、それからデータを読み出すアドレスを管
理するための読み込みアドレス等がある。
【0160】ステップ1704に続くステップ1705
以降では、送受信装置104がデータを受信したことに
伴う処理が行われる。先ず、ステップ1705では、送
受信装置104がデータを受信したか否か判定する。送
受信装置104がデータを受信した場合、その判定はY
ESとなってステップ1706に移行する。そうでない
場合には、後述する図21の図ステップ1731に移行
する。なお、データの受信は、例えば送受信装置104
が、その旨を示す割り込み信号を出力することにより、
CPU101に通知される。
【0161】ステップ1706では、受信されたデータ
から時間データを取り出し、続くステップ1707で
は、タイマ106の現在値(変数TIMERの値)から
時間データの値を減算した値の絶対値を算出する。その
後、ステップ1708に移行する。なお、以降では、混
乱を避けるために、受信した時間データが示す時刻(時
間)を演奏時刻、タイマ106の現在値(変数TIME
Rの値)を現在時刻と呼ぶことにする。また、ステップ
1707で算出した値については、絶対時刻差と呼ぶこ
とにする。
【0162】ステップ1708では、その絶対時刻差が
所定時間a(ms)より大きいか否か判定する。その所
定時間aは、送信側と受信側との間に直ちに対処すべき
大きな時刻差が有るのか否かを判定するために設定した
時間である。そのため、送信側と受信側との間にそれ以
上の時刻差が存在していた場合、その判定はYESとな
ってステップ1709に移行する。そうでない場合に
は、即ち送信側と受信側の時刻が比較的に一致している
場合には、その判定はNOとなって図18のステップ1
712に移行する。なお、上記所定時間aは、例えば5
00(ms)相当の値である。
【0163】ステップ1709〜1711では、送信側
と受信側との間の大きな時刻差に対処するための処理が
行われる。先ず、ステップ1709では、受信した時間
データが示す時刻である演奏時刻から現在のタイマ10
6が示す時刻である現在時刻を減算する。続くステップ
1710では、その減算値の正負に応じて、更に所定時
間b(ms)を減算、或いは加算する。そのようにして
算出した値(時間)を、ステップ1711で補正レジス
タに代入する。その後、図18のステップ1712に移
行する。
【0164】上記所定時間bは、送信時間の突出した変
動の処理への影響を緩和するために設定した時間であ
り、a>bの関係にある。例えばaが500であれば、
bは例えば250程度の値である。
【0165】普通、送信側と受信側の時刻は大きく異な
る。そのため、始めてのデータの受信では、その殆どの
場合でステップ1709〜1711が実行され、補正レ
ジスタに何らかの値が代入されることになる。
【0166】図18のステップ1712〜1720で
は、平均カウンタ、及び平均レジスタを用いた補正レジ
スタの値の補正に関わる処理が行われる。先ず、ステッ
プ1712では、平均カウンタの値が所定値n以下か否
か判定する。その所定値nは、補正レジスタの値の補正
を間欠的に行うために設定した値である。平均カウンタ
の値が所定値n以下であった場合、その判定はYESと
なってステップ1713に移行する。そうでない場合に
は、その判定はNOとなってステップ1716に移行す
る。なお、図18のステップ1712〜1720は送受
信装置104がデータを受信する度に実行されることか
ら、所定値nは、イベント数を表している。
【0167】ステップ1713では、平均カウンタをイ
ンクリメントする。続くステップ1714では、演奏時
刻から、現在時刻と補正レジスタの値を減算する。その
ようにして算出した減算値は、現在の補正レジスタの値
を用いて送信側と受信側との間の時刻差を調整させた際
に生じた誤差であるといえる。その誤差を、ステップ1
715で平均レジスタに累算、即ち元の値にステップ1
714で算出の値を加算して得られた値を平均レジスタ
に代入した後、図19のステップ1721に移行する。
なお、上記の誤差は、送信時間の変動の他に、送信側と
受信側との間の計時速度(タイマ106がその値を更新
していく時間間隔)の違い等を原因にして生じることが
ある。
【0168】一方、ステップ1712の判定がNOとな
った場合に移行するステップ1716では、平均レジス
タの値を所定数nで割って平均値を算出する。その平均
値は、1回のデータの受信における誤差である。ステッ
プ1716に続くステップ1717〜1729は、その
誤差に応じて行われる。
【0169】ステップ1717では、その平均値が0以
上か否か判定する。その平均値が0以上であった場合、
その判定はYESとなってステップ1718に移行す
る。そうでない場合には、その判定はNOとなってステ
ップ1719に移行する。
【0170】補正レジスタには、正、或いは負の値が保
持される。平均値が0以上ということは、補正レジスタ
の値が正であれば、その値が小さすぎるということにな
る。補正レジスタの値が負であっても、その値が小さす
ぎるということになる。そのため、ステップ1718で
は、補正レジスタの値のインクリメントを行い、その後
にステップ1720に移行する。他方のステップ171
9では、逆に補正レジスタの値のデクリメントを行い、
その後にステップ1720に移行する。それらのインク
リメント、或いはデクリメントにより、補正レジスタが
表す時間が、予め定めた時間を単位として修正される。
このような修正を繰り返すことで、補正レジスタが表す
時間はより適正な時間に収束していくことになる。
【0171】ステップ1720では、平均カウンタ、及
び平均レジスタに0をそれぞれ代入する。その後、図1
9のステップ1721に移行する。それらのレジスタに
0を代入することで、補正レジスタの値の誤差によるそ
の補正が、所定値nで指定されたイベント数のデータが
受信される毎に行われることになる。
【0172】図19のステップ1721では、リングバ
ッファの空容量を求める。上記したように、リングバッ
ファに次にデータを書き込むアドレスは書き込みアドレ
ス、データを読み出すアドレスは読み込みアドレスによ
って管理している。そのため、空容量は、それらの値か
ら求めることができる。
【0173】なお、書き込みアドレス、及び読み込みア
ドレスは、データはイベント単位で送信されることか
ら、イベントを単位としてリングバッファ内のアドレス
を管理するために用いている。1イベントのデータは8
バイトである。従って、それらの値は、8バイトを単位
としてアドレスを指定する。
【0174】ステップ1721に続くステップ1722
では、ステップ1721で求めた空容量がリングバッフ
ァ全体の容量の半分以下か否か判定する。空容量がリン
グバッファ全体の容量の半分以下であった場合、その判
定はYESとなってステップ1723に移行する。そう
でない場合には、その判定はNOとなってステップ17
24に移行する。
【0175】第3の実施の形態では、空容量が全体の半
分以下となっていた場合、未処理のデータを増える傾
向、換言すれば、データの受信量が、それの処理量より
も大きくなる傾向にあるとみなしている。そのため、ス
テップ1723では、データの処理量を増やすために、
補正レジスタの値のインクリメントを行う。他方のステ
ップ1724では、その反対に補正レジスタの値のデク
リメントを行う。そのような補正レジスタの値のインク
リメント、或いはデクリメントが終了した後、図20の
ステップ1725に移行する。
【0176】上記のように、リングバッファの空容量に
応じて補正レジスタの値を変更することで、リングバッ
ファに格納されたデータの処理量を増減させる。それに
より、リングバッファに格納させたデータは、それを処
理するまで確実に残すことができ、発音させる楽音にヌ
ケが生じたり、楽音が鳴りっぱなしになるといったこと
が回避される。
【0177】ステップ1725〜1730では、受信デ
ータのリングバッファへの格納に関わる処理が行われ
る。先ず、ステップ1725では、受信データ中の演奏
時刻を、補正レジスタの値を用いて変更する。具体的に
は、演奏時刻から補正レジスタの値を減算し、その減算
結果を新たな演奏時刻とする。補正レジスタには、上記
したように、送信側と受信側の時刻差を基準とした値が
保持されている。そのため、変更後の演奏時刻は、それ
が付加されたMIDIデータを処理すべき受信側におけ
る時刻を表すものとなる。
【0178】ステップ1725に続くステップ1726
では、書き込みアドレスの値から、リングバッファに受
信データを書き込むアドレスを指定する。書き込みアド
レスにはイベント単位の値を保持させている。そのた
め、指定されるアドレスは、書き込みアドレスが保持し
ている値に8(1イベント分のデータのバイト数)を乗
算して得られる値のアドレス(リングバッファの先頭を
基準とした相対アドレス)となる。それが終了した後、
ステップ1727に移行する。
【0179】ステップ1727では、指定されたアドレ
スから受信データを書き込む。データの書き込み後は、
ステップ1728で書き込みアドレスの値のインクリメ
ントを行う。
【0180】リングバッファには、第3の実施の形態で
は1024イベントのデータを格納できる領域を割り当
てている。それに合わせて、書き込みレジスタの値域を
0〜1023としている。0は、リングバッファの先頭
に位置する1イベント分の記憶領域(8バイト)、10
23は、その最後に位置する1イベント分の記憶領域を
指定する値である。このことから、ステップ1728に
続くステップ1729では、インクリメント後の書き込
みアドレスの値が1023より大きいか否か判定する。
変数WRITECOUNTERの値が1023より大き
い場合、その判定はYESとなってステップ1730に
移行する。そうでない場合には、その判定はNOとなっ
て図21のステップ1731に移行する。
【0181】ステップ1730では、書き込みアドレス
の値がリングバッファ内のアドレスを指定するように、
その値を補正する。具体的には、書き込みアドレスに0
を代入する。それが終了した後、図21のステップ17
31に移行する。
【0182】ステップ1731〜1737では、リング
バッファに格納したデータから実際に楽音を発音させる
ことに関する処理が行われる。先ず、ステップ1731
では、読み込みアドレスの値から、リングバッファから
受信データを読み出すアドレスを指定する。読み込みア
ドレスにはイベント単位の値を保持させている。そのた
め、指定されるアドレスは、書き込みアドレスと同様
に、それが保持している値に8(1イベント分のデータ
のバイト数)を乗算して得られる値のアドレス(リング
バッファの先頭を基準とした相対アドレス)となる。そ
れが終了した後、ステップ1732に移行し、指定した
アドレスから受信データを読み出す。その後は、ステッ
プ1733に移行する。
【0183】ステップ1733では、読み出したデータ
中の演奏時刻(上記ステップ1725で変更された演奏
時刻である)が、現在時刻(タイマ106が現在計時し
ている時刻)と所定時間cとで特定される範囲内である
か否か判定する。演奏時刻がその範囲内であった場合、
その判定はYESとなってステップ1734に移行す
る。そうでない場合には、その判定はNOとなって図1
7のステップ1705に戻る。
【0184】演奏時刻はそれが付加されたMIDIデー
タを処理すべきタイミングを必ずしも正確に表していな
い。そのことから、第3の実施の形態では、MIDIデ
ータを処理するタイミングに許容範囲を設けている。上
記所定時間cは、その許容範囲を基に設定したものであ
る。そのため、ステップ1733の判定がYES、即ち
演奏時刻が上記範囲内であった場合には、その演奏時刻
が付加されたMIDIデータを処理すべきタイミングと
なったとみなして、それを処理している。なお、所定時
間cには、その絶対値が上記所定時間aの絶対値を越え
ない範囲の値を設定している。
【0185】ステップ1734では、そのMIDIデー
タをMIDI出力装置107に出力することで処理す
る。続くステップ1735では、読み込みアドレスの値
のインクリメントを行う。その後、ステップ1736に
移行する。
【0186】ステップ1736では、インクリメント後
の読み込みアドレスの値が1023より大きいか否か判
定する。その値が1023より大きい場合、その判定は
YESとなってステップ1737に移行する。そうでな
い場合には、その判定はNOとなって図17のステップ
1705に移行する。
【0187】ステップ1737では、読み込みアドレス
の値がリングバッファ内のアドレスを指定するように、
その値を補正する。具体的には、読み込みアドレスに、
リングバッファの先頭に位置するアドレスを指定する0
を代入する。それが終了した後、図17のステップ17
05に戻る。
【0188】なお、第3の実施の形態では、MIDIデ
ータを処理するタイミングの決定に用いる補正レジスタ
の値を、それに付加された時間データ(演奏時刻)、及
びリングバッファの空容量から、それぞれ独立的に補正
しているが、それらのうちの一方だけに基づいて補正レ
ジスタの値を補正するようにしても良い。リングバッフ
ァの空容量に注目した補正レジスタの値の補正では、演
奏を開始した時の空容量の割合、受信されるデータ量の
推移等を更に考慮して、その値を補正するようにしても
良い。時間データに着目した補正レジスタの値の補正で
は、予め定めたイベント数のデータを受信する度にその
補正を行っているが、その補正の頻度は、誤差の大きさ
に応じて増減させるようにしても良い。これら以外に
も、様々な変形が可能である。 <第4の実施の形態>MIDIデータでは、そのデータ
を全て受信側が受信できなかった場合、それが受信側で
の演奏に大きく影響することがある。第4の実施の形態
は、その影響を低減させるようにしたものである。
【0189】第4の実施の形態における構成は、基本的
に上記第3の実施の形態のそれ(図1参照)と同じであ
る。そのため、第3の実施の形態の説明で用いた符号を
流用して、第3の実施の形態から異なる部分のみ説明す
ることにする。
【0190】第4の実施の形態では、MIDIデータの
なかで受信側が受信できなかった際の影響が他と比較し
て大きい種類を選択し、その選択した種類のMIDIデ
ータを送信すると、それを所定時間d毎に繰り返し送信
するようにしている。それにより、未受信時の影響が大
きいデータを受信側に確実に受信させ、その影響を低減
させている。
【0191】他方のデータの受信時では、リングバッフ
ァに格納したデータを処理する際に、それが既に受信済
みのデータか否か、換言すれば、それが処理すべきデー
タか否か判定し、その判定結果に従ってデータを処理す
るようにしている。それにより、データが繰り返し送信
されても、それによる演奏上の不具合が発生するのを回
避させている。以下、それらを実現させるCPU101
の動作について、図22〜図25を参照して詳細に説明
する。
【0192】図22、及び図23は、第4の実施の形態
による送信処理の動作フローチャートである。始めに、
これら図22、及び図23を参照して、その送信処理に
ついて詳細に説明する。その送信処理は、第3の実施の
形態と同様に、ユーザが所定のスイッチを操作して送受
信装置104から音楽情報を送信させることを指定した
場合に実行される。
【0193】先ず、ステップ2201では、繰り返し送
信すべきデータを送信するタイミングを種類別に管理す
るための変数であるカウンタをクリア、即ち0を代入す
る。続くステップ2202では、他のレジスタにそれぞ
れ0を代入する。そのレジスタとしては、読み込みレジ
スタや書き込みレジスタ等がある。それらステップ22
01、及び2202は、送信処理におけるイニシャライ
ズに関わる処理として実行される。
【0194】ステップ2202に続くステップ2203
では、MIDI入力装置105に電子キーボード111
から新たに入力されたMIDIデータがあるか否か判定
する。MIDIデータがMIDI入力装置105に新た
に入力されていた場合、その判定はYESとなってステ
ップ2204に移行する。そうでない場合には、その判
定はNOとなって図23の図2212に移行する。
【0195】ステップ2204では、MIDI入力装置
105からMIDIデータを受け取る。続くステップ2
205〜2211では、MIDI入力装置105から受
け取ったMIDIデータのイベントの種類を判別し、そ
の判別結果に応じた繰り返し送信させるMIDIデータ
の保存、或いはMIDIデータの送信を行うための処理
が行われる。ここでは、説明上、便宜的に、プログラム
チェンジ、ベンダ(ベンド)チェンジ、ベンダ(ベン
ド)レンジチェンジ、ダンパ(ホールド1)が繰り返し
送信させるMIDIデータのイベントの種類であるとし
て説明する。
【0196】なお、その種類は、それらに限定されるも
のではなく、それら以外の種類を選択しても良い。具体
的には、例えばコントロールチェンジのなかから、メイ
ンボリューム、バランスコントロール等を更に選択して
も良い。更には、チャンネルプレッシャやリセット・オ
ール・コントローラーズ等も選択に加えても良い。楽音
の鳴りっぱなしを確実に防止するために、ノートオフを
加えても良い。繰り返し送信させるイベントの種類をユ
ーザが選択できるようにしても良い。
【0197】先ず、ステップ2205では、MIDIデ
ータのイベントがプログラムチェンジか否か判定する。
そのMIDIデータの1バイト目のデータ(ステータス
バイト)がプログラムチェンジであることを示していた
場合、その判定はYESとなってステップ2206に移
行し、そのMIDIデータをRAM103内に予め用意
した音色番号レジスタ(4バイトである)にストアす
る。その後、上記ステップ2203に戻る。
【0198】ステップ2207以降では、同様にして、
MIDIデータのイベントがベンダチェンジであればそ
れをベンダレジスタにストアした後(ステップ2207
→2208)、ステップ2203に戻る。MIDIデー
タのイベントがダンパであれば、それをダンパレジスタ
にストアした後(ステップ2209→2210)、ステ
ップ2203に戻る。MIDIデータのイベントがベン
ダレンジチェンジであれば、それをベンダレンジレジス
タにストアした後(ステップ2211→2212)、ス
テップ2203に戻る。そのようにして、繰り返し送信
すべきと選択したイベントのMIDIデータを、RAM
103内に予め用意した領域に種類別に格納する。
【0199】MIDI入力装置105から受け取ったM
IDIデータのイベントが繰り返し送信すべきと選択し
ていない種類であった場合、ステップ2211の判定が
NOとなってステップ2213に移行する。そのステッ
プ2213では、タイマ106の現在値(受信側におけ
る演奏時刻:変数TIMERの値)を時間データとして
MIDIデータに付加し、それを送受信装置104から
送信させる。その後、ステップ2203に戻る。
【0200】上記したように、MIDI入力装置105
に電子キーボード111から新たなMIDIデータが送
られていない場合、ステップ2203の判定がNOとな
って図23のステップ2214に移行する。そのステッ
プ2214以降では、上述のようにして各種レジスタに
ストアした繰り返し送信すべきMIDIデータの送信に
関わる処理が行われる。
【0201】先ず、ステップ2214では、現在時刻を
取得、即ちタイマ106から現在値を受け取ってそれを
変数TIMERに代入する。続くステップ2215で
は、その現在時刻が所定時間dを基に設定した所定時間
eで割り切れるか否か判定する。そのステップ2215
が、所定時間eで割り切れる時刻となってから次に割り
切れる時刻がくるまでの間で始めての実行であった場
合、その判定はYESとなってステップ2216に移行
する。そうでない場合には、その判定はNOとなって図
22のステップ2203に戻る。ステップ2216以降
の処理を実行することにより、カウンタの値で指定され
る種類のイベントのMIDIデータが送信される。
【0202】そのステップ2216では、カウンタの値
が0か否か判定する。カウンタが保持している値が0で
あった場合、その判定はYESとなってステップ221
7に移行し、音色番号レジスタにストアされているMI
DIデータに現在時刻を付加して送受信装置104から
送信させる。その後、ステップ2224に移行する。そ
うでない場合には、その判定はNOとなってステップ2
218に移行する。なお、当然のことながら、音色番号
レジスタにMIDIデータがストアされていなければ、
ステップ2217でデータの送信を行うことなくステッ
プ2224に移行する。
【0203】ステップ2218以降では、同様にして、
カウンタの値が1であればベンダレジスタにストアされ
ているMIDIデータを送信させた後(ステップ221
8→2219)、ステップ2224に移行する。カウン
タの値が2であればダンパレジスタにストアされている
MIDIデータを送信させた後(ステップ2220→2
221)、ステップ2224に移行する。カウンタの値
が3であればベンダレンジレジスタにストアされている
MIDIデータを送信させた後(ステップ2222→2
223)、ステップ2224に移行する。そのようにし
て、各種レジスタにストアされているMIDIデータ
を、カウンタの値に応じて送信させる。
【0204】ステップ2224では、カウンタをインク
リメントする。それが終了すると、ステップ2225に
移行して、カウンタの値が4か否か判定する。インクリ
メントによってカウンタの値が4となった場合、その判
定はYESとなってステップ2226に移行し、カウン
タに0を代入した後、図22のステップ2203に戻
る。そうでない場合には、その判定はNOとなって、カ
ウンタの値を変更させることなく図22のステップ22
03に戻る。
【0205】このように、第4の実施の形態では、繰り
返し送信すべきと選択したイベントのMIDIデータを
繰り返し送信させている。そのため、受信側では、それ
らのイベントのMIDIデータを確実に受信することが
できるようになる。それにより、たとえデータが途中で
消えてしまうようなことがあったとしても、それの演奏
への影響を最小限に抑えることができる。
【0206】なお、上記所定時間dと所定時間eとは、
第4の実施の形態では繰り返し送信すべきイベントの種
類を4種類としていることから、d=4eの関係となっ
ている。
【0207】図24、図25は、第4の実施の形態にお
ける受信処理の動作フローチャートである。第4の実施
の形態は、第3の実施の形態における受信処理から、図
21のステップ1731以降のみが異なっている。その
ため、図24、図25を参照して、その異なっている部
分のみ説明する。
【0208】第4の実施の形態では、図17のステップ
1705の判定、或いは図20のステップ1729の判
定がNOとなるか、或いは図20のステップ1730の
処理が終了すると、図24のステップ2401に移行す
る。そのステップ2401以降の処理を実行することに
より、リングバッファに格納されたデータは、それを処
理すべきか否か判定され、その判定結果に従って処理さ
れる。
【0209】そのステップ2401では、読み込みアド
レスの値から、リングバッファから受信データを読み出
すアドレスを指定する。続くステップ2402では、そ
のアドレスから受信データを読み出す。それが終了した
後は、ステップ2403に移行する。
【0210】ステップ2403では、読み出したデータ
中の演奏時刻(上記ステップ1725で変更された演奏
時刻である)が、現在時刻(タイマ106の現在値)と
所定時間cとで特定される範囲内であるか否か判定す
る。演奏時刻がその範囲内であった場合、その判定はY
ESとなってステップ2404に移行する。そうでない
場合には、その判定はNOとなって図17のステップ1
705に戻る。
【0211】ステップ2404では、ステップ2402
で読み出したMIDIデータのイベントがプログラムチ
ェンジか否か判定する。そのMIDIデータのステータ
スバイトがプログラムチェンジであることを表していた
場合、判定はYESとなってステップ2405に移行す
る。そうでない場合には、その判定はNOとなってステ
ップ2406に移行する。
【0212】ステップ2405では、MIDIデータが
有する音色番号が、現在音源装置112に設定中の音色
番号と一致するか否か判定する。それらが一致していた
場合、その判定はYESとなって図25のステップ24
13に移行する。そうでない場合には、その判定はNO
となってステップ2406に移行する。なお、それらの
音色番号が一致しているか否かは、プログラムチェンジ
のMIDIデータを処理(MIDI出力装置107を介
して音源装置112に送出)した際に、そのMIDIデ
ータを音色番号レジスタにストアさせることで行えるよ
うにしている。これは、他の繰り返し送信すべきと選択
されているイベントのMIDIデータにおいても同様で
ある。
【0213】ステップ2406では、リングバッファか
ら読み出したMIDIデータのイベントがベンダチェン
ジか否か判定する。そのイベントがベンダチェンジであ
った場合、判定はYESとなってステップ2407に移
行する。そうでない場合には、その判定はNOとなって
ステップ2408に移行する。なお、イベントがベンダ
チェンジか否かは、ステータスバイトから判定される。
【0214】ステップ2407では、MIDIデータ中
のベンダの値が音源装置112に設定中のベンダの値と
一致するか否か判定する。それらの値が一致した場合、
その判定はYESとなって図25のステップ2413に
移行する。そうでない場合には、その判定はNOとなっ
てステップ2408に移行する。
【0215】ステップ2408では、リングバッファか
ら読み出したMIDIデータのイベントがダンパ(ホー
ルド1)か否か判定する。そのイベントがダンパであっ
た場合、判定はYESとなってステップ2409に移行
する。そうでない場合には、その判定はNOとなって図
25のステップ2410に移行する。なお、イベントが
ダンパか否かは、ステータスバイトとそれに続く1バイ
トのデータバイトから判定される。
【0216】ステップ2409では、MIDIデータ中
のダンパの値(0か127である)が音源装置112に
設定中のダンパの値と一致するか否か判定する。それら
の値が一致した場合、その判定はYESとなって図25
のステップ2413に移行する。そうでない場合には、
その判定はNOとなって図25のステップ2410に移
行する。
【0217】図25のステップ2410では、リングバ
ッファから読み出したMIDIデータのイベントがベン
ダレンジチェンジか否か判定する。MIDIデータのイ
ベントがベンダレンジチェンジであった場合、その判定
はYESとなってステップ2411に移行する。そうで
ない場合には、その判定はNOとなってステップ241
2に移行する。
【0218】ステップ2411では、MIDIデータ中
のベンダレンジの値が音源装置112に設定中のベンダ
レンジの値と一致するか否か判定する。それらの値が一
致した場合、その判定はYESとなってステップ241
3に移行する。そうでない場合には、その判定はNOと
なってステップ2412に移行する。
【0219】ステップ2412では、ステップ2402
でリングバッファから読み出したMIDIデータは処理
すべきとして、MIDI出力装置107を介して音源装
置112に送出する。このとき、そのMIDIデータの
イベントが繰り返し送信すべきMIDIデータのイベン
トとして選択されていた場合には、そのイベントの種類
別に用意したレジスタのなかで対応するレジスタに、そ
のMIDIデータをストアする。
【0220】ステップ2412に続くステップ2413
では、読み込みアドレスの値のインクリメントを行う。
そのインクリメント後は、ステップ1736に移行し
て、読み込みアドレスの値が1023より大きいか否か
判定する。読み込みアドレスの値が1023より大きい
場合、その判定はYESとなり、ステップ2415に移
行して読み込みレジスタに0を代入した後、図17のス
テップ1705に戻る。そうでない場合には、その判定
はNOとなって、読み込みレジスタの値を変更させるこ
となく図17のステップ1705に戻る。
【0221】なお、第4の実施の形態では、繰り返し送
信すべきと選択されているイベントのMIDIデータ
を、無条件で繰り返し送信するようにしているが、例え
ば送信を繰り返す回数を設定しておき、その回数だけ送
信を繰り返すようにしても良い。また、受信時には、既
に処理したデータと一致しているか否か判定すること
で、繰り返し送信されてくるデータを重ねて音源装置1
12に送出するのを回避しているが、必ずしもそうしな
くて良い。MIDIデータには、重ねて処理しても実際
の演奏には影響しないものがあることから、処理(音源
装置112に送出)すべきか否かの判定を、その影響の
有無で行うようにしても良い。しかし、繰り返し送信さ
れてくるデータを重ねて音源装置112に送出するのを
回避させた場合には、音源装置112の負荷をより抑え
ることができるという効果がある。
【0222】また、第4の実施の形態では、MIDIデ
ータに時間データを付加しているが、時間データは必ず
しもMIDIデータに付加しなくて良い。無視できない
送信時間がある伝送路(例えば公衆網)を介してMID
Iデータ(音楽情報)を送信するといったような場合に
だけ、時間データを選択的に付加するようにしても良
い。
【0223】本実施の形態(第1〜第4の実施の形態)
は、音楽情報の送受信を行う専用の装置として実現させ
たものであるが、電子楽器や各種コントローラ、シーケ
ンサ、更にはパーソナルコンピュータ等に本発明を適用
させても良い。そのときには、当然のことながら、音楽
情報の送受信を行う機能を必ずしも搭載させる必要はな
く、音楽情報を送信する機能、及び受信する機能の何れ
か一方だけを搭載するようにしても良い。
【0224】パーソナルコンピュータへの本発明の適用
は、基本的には上記した動作を実現させるためのプログ
ラムをロードさせることで行うことができる。そのプロ
グラムは、CD−ROMやフロッピーディスクといった
携帯性に優れた記録媒体に記録して配布しても良く、何
らかの通信回線を介して配信しても良い。
【0225】
【発明の効果】以上説明したように、本発明では、受信
側が受信しながら処理していくことで演奏を行うための
音楽情報を構成するイベントデータに、該イベントデー
タを処理すべきタイミングを表す(指定するための)時
間データを付加して順次送信する。そのため、イベント
データを受信側に処理させるべき適切なタイミングで送
信しなければならない必要性を回避させることができ
る。他方の受信側では、その時間データを基に、イベン
トデータをより適切なタイミングで処理することができ
るようになる。本発明では、送信したイベントデータの
なかから、予め定めた種類のイベントデータを抽出し、
抽出したイベントデータを再送させる。そのため、抽出
したイベントデータを受信側に確実に受信させることが
できる。
【0226】本発明では、受信した音楽情報中の時間デ
ータから、該時間データが付加されたイベントデータを
処理すべきタイミングを決定し、受信した音楽情報中の
イベントデータを決定したタイミングに従って処理す
る。そのため、受信したタイミングに関わらずにイベン
トデータを適切なタイミングで処理する、或いはイベン
トデータをより適切なタイミングで処理することができ
る。
【0227】本発明では、受信した音楽情報中の時間デ
ータ、及びその音楽情報を記憶する記憶手段(音楽情報
の格納用に割り当てられた記憶領域)の空容量に基づ
き、該時間データが付加されたイベントデータを処理す
べきタイミングを決定し、そのタイミングに従って処理
する。そのため、記憶手段に記憶させた音楽情報を確実
に処理することができる。
【0228】本発明では、受信した音楽情報中のイベン
トデータを処理すべきか否か判定し、その判定結果に従
ってイベントデータを処理する。このため、たとえ繰り
返し同じイベントデータが送信されたとしても、その送
信の繰り返しが演奏に影響するのを確実に回避させるこ
とができる。
【0229】上記の発明を基に音楽情報の送受信を行う
ことにより、音楽情報の送受信の過程(送信路等だけで
なく、送信側、或いは受信側の装置の状態も含む)によ
り生じる音楽的な不具合(演奏(楽音の発音開始やその
終了といった発音タイミング等)のズレ、発音させる楽
音のヌケ、など)の発生を回避、或いはそれを低減させ
ることができる。
【図面の簡単な説明】
【図1】本実施の形態による音楽情報送受信装置の構成
図である。
【図2】送信処理の動作フローチャートである。
【図3】送信処理の動作フローチャートである(続き
1)。
【図4】送信処理の動作フローチャートである(続き
2)。
【図5】送信処理の動作フローチャートである(続き
3)。
【図6】受信処理の動作フローチャートである。
【図7】受信処理の動作フローチャートである(続き
1)。
【図8】受信処理の動作フローチャートである(続き
2)。
【図9】受信処理の動作フローチャートである(続き
3)。
【図10】受信処理の動作フローチャートである(第2
の実施の形態)
【図11】受信処理の動作フローチャートである(第2
の実施の形態:続き1)。
【図12】受信処理の動作フローチャートである(第2
の実施の形態:続き2)。
【図13】音楽処理の動作フローチャートである。
【図14】タスク処理の動作フローチャートである。
【図15】例外処理の動作フローチャートである。
【図16】送信処理の動作フローチャートである(第3
の実施の形態)。
【図17】受信処理の動作フローチャートである(第3
の実施の形態)。
【図18】受信処理の動作フローチャートである(第3
の実施の形態:続き1)。
【図19】受信処理の動作フローチャートである(第3
の実施の形態:続き2)。
【図20】受信処理の動作フローチャートである(第3
の実施の形態:続き3)。
【図21】受信処理の動作フローチャートである(第3
の実施の形態:続き4)。
【図22】送信処理の動作フローチャートである(第4
の実施の形態)。
【図23】送信処理の動作フローチャートである(第4
の実施の形態:続き1)。
【図24】受信処理の動作フローチャートである(第4
の実施の形態:第3の実施の形態からの変更分1)。
【図25】受信処理の動作フローチャートである(第4
の実施の形態:第3の実施の形態からの変更分2)。
【符号の説明】
101 CPU 102 ROM 103 RAM 104 送受信装置 105 MIDI入力装置 106 タイマ 107 MIDI出力装置 111 電子キーボード 112 音源装置

Claims (22)

    【特許請求の範囲】
  1. 【請求項1】 受信側が受信しながら処理していくこと
    で演奏を行うための音楽情報を送信する方法であって、 ノートオン、ノートオフ等のイベントの内容を表すイベ
    ントデータに、該イベントデータを処理すべきタイミン
    グを表す時間データを付加する第1の工程と、 前記第1の工程で時間データを付加した前記イベントデ
    ータを前記音楽情報として前記受信側に順次送信する第
    2の工程と、 を有することを特徴とする音楽情報送信方法。
  2. 【請求項2】 受信側が受信しながら処理していくこと
    で演奏を行うための音楽情報を送信する方法であって、 少なくとも、ノートオン、ノートオフ等のイベントの内
    容を表すイベントデータを、該イベントデータを処理さ
    せるべきタイミングに基づいて前記音楽情報として順次
    送信する第1の工程と、 前記第1の工程で送信されたイベントデータのなかから
    予め定めた種類のイベントデータを抽出する第2の工程
    と、 前記第2の工程で抽出したイベントデータを所定のタイ
    ミングで再度前記音楽情報として送信する第3の工程
    と、 を有することを特徴とする音楽情報送信方法。
  3. 【請求項3】 受信側が受信しながら処理していくこと
    で演奏を行うための音楽情報を送信する装置であって、 ノートオン、ノートオフ等のイベントの内容を表すイベ
    ントデータに、該イベントデータを処理すべきタイミン
    グを表す時間データを付加する時間データ付加手段と、 前記時間データ付加手段によって時間データが付加され
    たイベントデータを前記音楽情報として前記受信側に順
    次送信する送信手段と、 を具備したことを特徴とする音楽情報送信装置。
  4. 【請求項4】 受信側が受信しながら処理していくこと
    で演奏を行うための音楽情報を送信する装置であって、 少なくとも、ノートオン、ノートオフ等のイベントの内
    容を表すイベントデータを、該イベントデータを処理さ
    せるべきタイミングに基づいて前記音楽情報として順次
    送信する第1の送信手段と、 前記第1の送信手段によって送信されたイベントデータ
    のなかから予め定めた種類のイベントデータを抽出する
    抽出手段と、 前記抽出手段が抽出したイベントデータを所定のタイミ
    ングで再度前記音楽情報として送信する第2の送信手段
    と、 を具備したことを特徴とする音楽情報送信装置。
  5. 【請求項5】 請求項1記載の音楽情報送信方法、或い
    は請求項3記載の音楽情報送信装置によって送信された
    音楽情報を受信しながら処理していくことで演奏を行う
    ための方法であって、 前記音楽情報を受信する第1の工程と、 前記第1の工程で受信した音楽情報中の時間データか
    ら、該時間データが付加されたイベントデータを処理す
    べきタイミングを決定する第2の工程と、 前記第2の工程で決定したタイミングに従って、前記第
    1の工程で受信した音楽情報中のイベントデータを処理
    する第3の工程と、 を有することを特徴とする音楽情報受信処理方法。
  6. 【請求項6】 前記第2の工程は、前記時間データか
    ら、前記音楽情報が送信されてから受信されるまでに要
    した送信時間の変動を求め、該求めた送信時間の変動を
    前記タイミングの決定に反映させる、 ことを特徴とする請求項5記載の音楽情報受信処理方
    法。
  7. 【請求項7】 前記受信した音楽情報中の制御データを
    基に、該音楽情報を正常に受信しているか否か判定し、
    該音楽情報を正常に受信していないと判定した場合に、
    該音楽情報による演奏を中止する、 ことを特徴とする請求項5、または6記載の音楽情報受
    信処理方法。
  8. 【請求項8】 請求項1記載の音楽情報送信方法、或い
    は請求項3記載の音楽情報送信装置によって送信された
    音楽情報を受信しながら処理していくことで演奏を行う
    ための方法であって、 前記音楽情報を受信する第1の工程と、 前記第1の工程で受信した前記音楽情報を所定の記憶手
    段に記憶させる第2の工程と、 前記第1の工程で受信した音楽情報中のイベントデータ
    を処理するタイミングを、該イベントデータに付加され
    た時間データ、及び前記記憶手段の空容量に基づいて決
    定する第3の工程と、 前記第3の工程で決定したタイミングに従って、前記第
    1の工程で受信した音楽情報中のイベントデータを処理
    する第4の工程と、 を有することを特徴とする音楽情報受信処理方法。
  9. 【請求項9】 請求項2記載の音楽情報送信方法、或い
    は請求項4記載の音楽情報送信装置によって送信された
    音楽情報を受信しながら処理していくことで演奏を行う
    ための方法であって、 前記音楽情報を受信する第1の工程と、 前記第1の工程で受信した音楽情報中のイベントデータ
    を処理すべきか否か判定する第2の工程と、 前記第2の工程の判定結果に従って、前記第1の工程で
    受信した音楽情報中のイベントデータを処理する第3の
    工程と、 を有することを特徴とする音楽情報受信処理方法。
  10. 【請求項10】 請求項1記載の音楽情報送信方法、或
    いは請求項3記載の音楽情報送信装置によって送信され
    た音楽情報を受信しながら処理していくことで演奏を行
    う装置であって、 前記音楽情報を受信する受信手段と、 該受信手段が受信した音楽情報中の時間データから、該
    時間データが付加されたイベントデータを処理すべきタ
    イミングを決定するタイミング決定手段と、 前記タイミング決定手段によって決定されたタイミング
    に従って前記イベントデータを処理する処理手段と、 を具備したことを特徴とする音楽情報受信処理装置。
  11. 【請求項11】 前記タイミング決定手段は、前記時間
    データから、前記音楽情報が送信されてから受信される
    までに要した送信時間の変動を求め、該求めた送信時間
    の変動を前記タイミングの決定に反映させる、 ことを特徴とする請求項10記載の音楽情報受信処理装
    置。
  12. 【請求項12】 前記処理手段は、前記受信手段が受信
    した音楽情報中の制御データを基に、該音楽情報を正常
    に受信しているか否か判定し、該音楽情報を正常に受信
    していないと判定した場合に、該音楽情報による演奏を
    中止する、 ことを特徴とする請求項10、または11記載の音楽情
    報受信処理装置。
  13. 【請求項13】 請求項1記載の音楽情報送信方法、或
    いは請求項3記載の音楽情報送信装置によって送信され
    た音楽情報を受信しながら処理していくことで演奏を行
    う装置であって、 前記音楽情報を受信する受信手段と、 前記受信手段が受信した前記音楽情報を記憶する記憶手
    段と、 前記受信手段が受信した音楽情報中のイベントデータを
    処理するタイミングを、該イベントデータに付加された
    時間データ、及び前記記憶手段の空容量に基づいて決定
    するタイミング決定手段と、 前記タイミング決定手段が決定したタイミングに従っ
    て、前記記憶手段に記憶された音楽情報中のイベントデ
    ータを処理する処理手段と、 を具備したことを特徴とする音楽情報受信処理装置。
  14. 【請求項14】 請求項2記載の音楽情報送信方法、或
    いは請求項4記載の音楽情報送信装置によって送信され
    た音楽情報を受信しながら処理していくことで演奏を行
    う装置であって、 前記音楽情報を受信する受信手段と、 前記受信手段が受信した音楽情報中のイベントデータを
    処理すべきか否か判定する判定手段と、 前記判定手段の判定結果に従って、前記受信手段が受信
    した音楽情報中のイベントデータを処理する処理手段
    と、 を具備したことを特徴とする音楽情報受信処理装置。
  15. 【請求項15】 受信側が受信しながら処理していくこ
    とで演奏を行うための音楽情報を送受信する装置であっ
    て、 ノートオン、ノートオフ等のイベントの内容を表すイベ
    ントデータに、該イベントデータを処理すべきタイミン
    グを表す時間データを付加する時間データ付加手段と、 前記時間データ付加手段によって時間データが付加され
    たイベントデータを前記音楽情報として前記受信側に順
    次送信する送信手段と、 前記音楽情報を受信する受信手段と、 該受信手段が受信した音楽情報中の時間データから、該
    時間データが付加されたイベントデータを処理すべきタ
    イミングを決定するタイミング決定手段と、 該タイミング決定手段によって決定されたタイミングに
    従って前記イベントデータを処理する処理手段と、 を具備したことを特徴とする音楽情報送受信装置。
  16. 【請求項16】 前記送信手段は、前記受信側に、前記
    音楽情報の送信量を表す制御データを随時送信し、 前記処理手段は、前記受信手段が受信した音楽情報中の
    制御データを基に、該音楽情報を正常に受信しているか
    否か判定し、該音楽情報を正常に受信していないと判定
    した場合に、該音楽情報による演奏を中止する、 ことを特徴とする請求項15記載の音楽情報送受信装
    置。
  17. 【請求項17】 ノートオン、ノートオフ等のイベント
    の内容を表すイベントデータ毎に、該イベントデータを
    処理すべきタイミングを表す時間データを付加する手段
    と、 該付加する手段によって時間データが付加されたイベン
    トデータを音楽情報として順次送信する手段と、 を実現させるためのプログラムを記録したコンピュータ
    読み取り可能な記録媒体。
  18. 【請求項18】 少なくとも、ノートオン、ノートオフ
    等のイベントの内容を表すイベントデータを、該イベン
    トデータを処理させるべきタイミングに基づいて前記音
    楽情報として順次送信する手段と、 該送信する手段によって送信されたイベントデータのな
    かから予め定めた種類のイベントデータを抽出する手段
    と、 該抽出する手段によって抽出されたイベントデータを前
    記音楽情報として所定のタイミングで再送する手段と、 を実現させるためのプログラムを記録したコンピュータ
    読み取り可能な記録媒体。
  19. 【請求項19】 音楽情報を受信する手段と、 該受信する手段によって音楽情報が受信された場合に、
    該受信された音楽情報中の時間データから、該時間デー
    タが付加されたイベントデータを処理すべきタイミング
    を決定する手段と、 該決定する手段によって決定されたタイミングに従って
    前記イベントデータを処理する手段と、 を実現させるためのプログラムを記録したコンピュータ
    読み取り可能な記録媒体。
  20. 【請求項20】 音楽情報を受信する手段と、 該受信する手段によって受信された音楽情報を記憶手段
    に記録させる手段と、 前記受信する手段により受信された音楽情報中のイベン
    トデータを処理するタイミングを、該イベントデータに
    付加された時間データ、及び前記記憶手段の空容量に基
    づいて決定する手段と、 該決定する手段によって決定されたタイミングに従って
    前記イベントデータを処理する手段と、 を実現させるためのプログラムを記録したコンピュータ
    読み取り可能な記録媒体。
  21. 【請求項21】 音楽情報を受信する手段と、 該受信する手段により受信された音楽情報中のイベント
    データを処理すべきか否か判定する手段と、 該判定する手段の判定結果に従って、前記受信する手段
    により受信された音楽情報中のイベントデータを処理す
    る手段と、 を実現させるためのプログラムを記録したコンピュータ
    読み取り可能な記録媒体。
  22. 【請求項22】 ノートオン、ノートオフ等のイベント
    の内容を表すイベントデータに、該イベントデータを処
    理すべきタイミングを表す時間データを付加する手段
    と、 該付加する手段によって時間データが付加されたイベン
    トデータを音楽情報として順次送信する手段と、 該音楽情報を受信する手段と、 該受信する手段によって音楽情報が受信された場合に、
    該受信された音楽情報中の時間データから、該時間デー
    タが付加されたイベントデータを処理すべきタイミング
    を決定する手段と、 該決定する手段によって決定されたタイミングに従って
    前記イベントデータを処理する手段と、 を実現させるためのプログラムを記録したコンピュータ
    読み取り可能な記録媒体。
JP10249498A 1997-09-01 1998-04-14 音楽情報受信処理方法、音楽情報受信処理装置及び記憶媒体 Expired - Fee Related JP3671666B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP10249498A JP3671666B2 (ja) 1997-09-01 1998-04-14 音楽情報受信処理方法、音楽情報受信処理装置及び記憶媒体

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP9-236366 1997-09-01
JP23636697 1997-09-01
JP10249498A JP3671666B2 (ja) 1997-09-01 1998-04-14 音楽情報受信処理方法、音楽情報受信処理装置及び記憶媒体

Publications (2)

Publication Number Publication Date
JPH11133957A true JPH11133957A (ja) 1999-05-21
JP3671666B2 JP3671666B2 (ja) 2005-07-13

Family

ID=26443218

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10249498A Expired - Fee Related JP3671666B2 (ja) 1997-09-01 1998-04-14 音楽情報受信処理方法、音楽情報受信処理装置及び記憶媒体

Country Status (1)

Country Link
JP (1) JP3671666B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013015643A (ja) * 2011-07-01 2013-01-24 Yamaha Corp 演奏データ送信装置及び演奏データ受信装置
CN104923798A (zh) * 2015-06-18 2015-09-23 广西铟泰科技有限公司 连续生产铟珠的方法
CN111933099A (zh) * 2020-07-27 2020-11-13 北京爱其科技有限公司 基于单片机的midi音乐播放电路和方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013015643A (ja) * 2011-07-01 2013-01-24 Yamaha Corp 演奏データ送信装置及び演奏データ受信装置
CN104923798A (zh) * 2015-06-18 2015-09-23 广西铟泰科技有限公司 连续生产铟珠的方法
CN111933099A (zh) * 2020-07-27 2020-11-13 北京爱其科技有限公司 基于单片机的midi音乐播放电路和方法

Also Published As

Publication number Publication date
JP3671666B2 (ja) 2005-07-13

Similar Documents

Publication Publication Date Title
US7420115B2 (en) Memory access controller for musical sound generating system
JP4089582B2 (ja) 電子音楽装置の設定情報編集システム、編集装置用プログラム、および、電子音楽装置
JPH11126070A (ja) 楽音生成方法
US20040147301A1 (en) Music game apparatus and electronic musical apparatus and computer programs therefor
US6180865B1 (en) Melody performance training apparatus and recording mediums which contain a melody performance training program
JPH11133957A (ja) 音楽情報送信方法、音楽情報送信装置、音楽情報受信処理方法、音楽情報受信処理装置、及び音楽情報送受信装置
JP3372124B2 (ja) 電子楽器
JPH0922287A (ja) 楽音波形生成方法
JP2001013961A (ja) データ送信装置、データ受信装置、及び同各装置に適用されるプログラムを記録したコンピュータ読取り可能な記録媒体
JP3221314B2 (ja) 楽音合成装置及び方法
JP2000276172A (ja) 楽音生成装置および記憶媒体
JP2001265352A (ja) 楽音信号処理装置
JP2004177981A (ja) 楽音生成装置
JP2773638B2 (ja) 自動演奏装置
US6525254B2 (en) Method and apparatus for managing saving of tone control data
US20090249043A1 (en) Apparatus, method and computer program for processing instruction
US6414232B2 (en) Tone generation method and apparatus based on software
JP2000122675A (ja) 音声情報処理装置
JP3609045B2 (ja) 自動演奏装置
JPH0635460A (ja) 電子打楽器
JPH09258736A (ja) コンピュータソフトウェアを用いた音源システム及び方法
JP5167878B2 (ja) 電子音楽装置及びプログラム
JP3075155B2 (ja) 処理装置
JPH10149161A (ja) カラオケ装置
JP2009109747A (ja) 演奏端末コントローラおよびプログラム

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20041112

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041130

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050126

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050329

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050411

R150 Certificate of patent (=grant) or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090428

Year of fee payment: 4

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090428

Year of fee payment: 4

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100428

Year of fee payment: 5

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110428

Year of fee payment: 6

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120428

Year of fee payment: 7

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120428

Year of fee payment: 7

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130428

Year of fee payment: 8

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130428

Year of fee payment: 8

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140428

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees