JP2007041174A - Concert embodying method, network concert system, and program - Google Patents

Concert embodying method, network concert system, and program Download PDF

Info

Publication number
JP2007041174A
JP2007041174A JP2005223621A JP2005223621A JP2007041174A JP 2007041174 A JP2007041174 A JP 2007041174A JP 2005223621 A JP2005223621 A JP 2005223621A JP 2005223621 A JP2005223621 A JP 2005223621A JP 2007041174 A JP2007041174 A JP 2007041174A
Authority
JP
Japan
Prior art keywords
data
user
ensemble
value
variable
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.)
Withdrawn
Application number
JP2005223621A
Other languages
Japanese (ja)
Inventor
Junichi Minamitaka
純一 南高
Junichiro Soejima
淳一郎 副島
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 JP2005223621A priority Critical patent/JP2007041174A/en
Publication of JP2007041174A publication Critical patent/JP2007041174A/en
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

<P>PROBLEM TO BE SOLVED: To provide a technique for supporting players so as to have efficient practice in concert using a network. <P>SOLUTION: When a concert by three players A to C is virtually actualized, the concert is actualized by a musical performance comprising three stages. Musical performance information obtained by a musical performance by the player A in the first stage is sent to the player B who plays in the following second stage to provide an environment wherein the player B can play while listening to the musical performance by the player A. To the player C who plays in the final third stage, the musical performance information by the musical performance by the player A is sent from the player B together with musical performance by himself or herself to provide an environment wherein the player C can play while listening to the musical performance by the players A and B. Thus, the players of the respective stages are provided with environments wherein they play in concert while listening to musical performances by players of upper stages. <P>COPYRIGHT: (C)2007,JPO&INPIT

Description

本発明は、ネットワークを利用して複数の演奏者による合奏を仮想的に可能とさせるための技術に関する。   The present invention relates to a technique for virtually enabling ensemble by a plurality of performers using a network.

2つ以上の楽器によって行われる合奏は、一人で演奏するときとは異なる楽しさや充実感を味わうことができ、多くの人に楽しまれている。その合奏では、それを行う全てのメンバー(演奏者)が同じ場所に集まることが望まれる。しかし、それは個々のメンバーの都合や、時間的、或いは地理的な事情によって困難なことも少なくないのが実情である。このようなことから、例えば特許文献1に記載されているように、合奏を行う音楽活動を支援できるものが創案されている。   Ensemble performed by two or more musical instruments can be enjoyed and enjoyed by many people because it allows you to enjoy the fun and fulfillment that is different from when you play alone. In the ensemble, it is desirable that all members (performers) who perform it gather in the same place. However, this is often difficult due to the circumstances of individual members, time and geographical circumstances. For this reason, as described in Patent Document 1, for example, a device that can support music activities for performing ensembles has been devised.

特許文献1に記載された従来のネット合奏システムでは、ネットワークを介して、各メンバーが行った演奏内容を示す演奏情報をそれぞれ取得し、それらを対応付けて記録するようにしている。それにより、各メンバーがそれぞれ行った演奏を合奏の結果として確認できるようにしている。特許文献2には、音楽的な不具合の発生を回避できるように、ネットワークを介して演奏情報を送信する技術が記載されている。   In the conventional network ensemble system described in Patent Document 1, performance information indicating the performance content performed by each member is acquired via the network, and is recorded in association with each other. As a result, the performance performed by each member can be confirmed as a result of the ensemble. Patent Document 2 describes a technique for transmitting performance information via a network so that occurrence of musical problems can be avoided.

その従来のネット合奏システムでは、演奏開始を知らせることにより、各メンバーにそれぞれ並行して演奏を行わせるようになっている。そのために、各メンバーは基本的にそれぞれ自身の考えに沿った演奏を行っていた。   In the conventional net ensemble system, each member performs in parallel by notifying the start of performance. To that end, each member basically performed according to their own ideas.

周知のように、合奏では全体的なまとまりを考慮する必要がある。そのまとまり感は、各メンバーがそれぞれ自身の考えに沿った演奏(独奏)を行っては得にくいのが実情である。合奏結果を確認することにより、各メンバーはまとまり感を考慮した演奏を行うことができる。しかし、そのためには、合奏結果の確認を随時、行わなければならないことから、演奏(合奏のための演奏)に割り当てられる時間はより短くなる。他のメンバーによる演奏内容を正確に把握するには何度も合奏結果を確認しなければならないのが普通であるから、他のメンバーによる演奏に合った演奏を行えるようになるには通常(同じ場所に集まっての合奏)よりも非常に時間がかかることになる。   As is well known, it is necessary to consider the overall unit in an ensemble. The sense of unity is difficult to obtain if each member performs a performance (single solo) according to his / her own thoughts. By confirming the ensemble results, each member can perform with a sense of unity. However, for that purpose, the confirmation of the ensemble result must be performed as needed, so that the time allocated to the performance (performance for the ensemble) becomes shorter. Since it is usually necessary to check the ensemble results many times in order to accurately grasp the performance of the performance by other members, it is normal (to be in the same place) to be able to perform according to the performance of other members. It will take much longer than an ensemble).

上記のようなことから、特許文献1に記載された従来のネット合奏システムでは、所望の合奏を実現できるように効率的な練習を行うことは困難となっていた。考え方や感性は演奏者によって異なるのが普通であり、まとまり感のある合奏を行えるようにするには、数多く合奏の練習をしなければならないのが実情である。このことから、合奏の効率的な練習を行えるようにすることも極めて重要なことであると考えられる。
特開2004−212632号公報 特開2000−181447号公報
As described above, in the conventional net ensemble system described in Patent Document 1, it has been difficult to perform efficient practice so that a desired ensemble can be realized. The way of thinking and sensibility usually varies depending on the performer, and in order to be able to perform a concert with a sense of unity, it is a fact that many ensembles must be practiced. Therefore, it is considered extremely important to be able to practice ensemble efficiently.
JP 2004-212632 A JP 2000-181447 A

本発明の課題は、ネットワークを利用して合奏の効率的な練習を行えるように支援するための技術を提供することにある。   An object of the present invention is to provide a technique for supporting so that efficient practice of ensemble can be performed using a network.

本発明の合奏実現方法は、ネットワークを利用して複数の演奏者による合奏を仮想的に可能とさせるための方法であって、合奏を所望する演奏者毎に、該合奏のために演奏者が行った演奏内容を示す演奏情報を送信すべき他の演奏者を送信対象者として予め設定し、設定により送信対象者が存在する演奏者が使用するそれぞれの端末装置に、該演奏者自身の演奏による演奏情報をネットワーク上に送信させ、設定により、送信対象者、及び自身を該送信対象者とする他の演奏者が共に存在する演奏者が使用するそれぞれの端末装置に、該他の演奏者の使用する端末装置から送信されて受信される演奏情報を更にネットワーク上に送信させ、送信対象者である各演奏者に、端末装置が受信する演奏情報による一人以上の演奏者の演奏と合わせた演奏をそれぞれ行わせて合奏を仮想的に実現させる。   The ensemble realization method of the present invention is a method for virtually enabling ensemble by a plurality of performers using a network, and for each performer who desires an ensemble, the performer performs the ensemble. Other performers who should transmit performance information indicating the performance details performed are set in advance as transmission subjects, and the performances of the performers themselves are set on the respective terminal devices used by the performers in which the transmission target exists. The performance information is transmitted to the network, and, depending on the setting, the other performers are used for each terminal device used by the performer who is the transmission target person and the other performers who are the transmission target person. The performance information transmitted and received from the terminal device used by the player is further transmitted on the network, and each performer who is the transmission target is combined with the performance of one or more performers by the performance information received by the terminal device. Kanade respectively to perform the virtually realizing the ensemble with.

本発明の第1の態様のネット合奏システムは、ネットワークを介して接続される端末装置のユーザーを対象に合奏を仮想的に実現させるシステムであって、ネットワークを介して、ユーザーが楽器に対して行なった演奏内容を示す演奏情報をリアルタイムに端末装置から受信する情報受信手段と、複数のユーザーが合奏を行う場合に、該複数のユーザー間で予め設定される演奏情報を送受信すべき関係に従って、情報受信手段が受信した演奏情報を、該演奏情報を送信させた端末装置のユーザーによって特定されるユーザーの使用する端末装置に必要に応じて送信する情報送信手段と、を具備する。   A network ensemble system according to a first aspect of the present invention is a system for virtually realizing a ensemble for a user of a terminal device connected via a network. Information receiving means for receiving performance information indicating the performance contents performed from the terminal device in real time, and when a plurality of users perform ensembles, according to the relationship in which performance information preset between the plurality of users should be transmitted and received, And information transmitting means for transmitting the performance information received by the information receiving means to the terminal device used by the user specified by the user of the terminal device that has transmitted the performance information as necessary.

本発明の第2の態様のネット合奏システムは、上記第1の態様における構成に加えて、合奏のための演奏をユーザーが行っている端末装置から情報受信手段が受信する演奏情報を保存する情報保存手段、を更に具備する。   The network ensemble system according to the second aspect of the present invention, in addition to the configuration of the first aspect, information for storing performance information received by the information receiving means from the terminal device that the user is performing for the ensemble. Storage means.

本発明のプログラムは、ネットワークを介して接続される端末装置のユーザーを対象に合奏を仮想的に実現させるネット合奏システムの構築に用いられるデータ処理装置に実行させることを前提とし、ネットワークを介して、ユーザーが楽器に対して行なった演奏内容を示す演奏情報をリアルタイムに端末装置から受信する機能と、複数のユーザーが合奏を行う場合に、該複数のユーザー間で予め設定される演奏情報を送受信すべき関係に従って、受信する機能により受信した演奏情報を、該演奏情報を送信させた端末装置のユーザーによって特定されるユーザーの使用する端末装置に必要に応じて送信する機能と、を実現させる。   The program of the present invention is based on the premise that the program is executed by a data processing apparatus used for construction of a network ensemble system that virtually realizes an ensemble for users of terminal devices connected via a network. , A function for receiving performance information indicating the performance performed by the user on the musical instrument from the terminal device in real time, and when a plurality of users perform ensembles, transmission and reception of performance information set in advance between the plurality of users According to the relationship to be performed, a function of transmitting performance information received by the receiving function to a terminal device used by the user specified by the user of the terminal device that has transmitted the performance information as necessary is realized.

本発明は、合奏を所望する演奏者毎に、その合奏のために演奏者が行った演奏内容を示す演奏情報を送信すべき他の演奏者を送信対象者として予め設定し、その送信対象者が存在する演奏者が使用するそれぞれの端末装置に、自身の演奏による演奏情報をネットワーク上に送信させ、送信対象者、及び自身を送信対象者とする他の演奏者が共に存在する演奏者が使用するそれぞれの端末装置に、その他の演奏者の使用する端末装置から送信されて受信される演奏情報を更にネットワーク上に送信させる。   In the present invention, for each performer who desires an ensemble, another performer who should transmit performance information indicating the performance performed by the performer for the ensemble is set in advance as a transmission target, and the transmission target A player who has both a performer and another performer who is the subject of transmission exist in the terminal device used by the performer who has the present Each terminal device to be used is further caused to transmit performance information transmitted and received from the terminal device used by other performers on the network.

そのような演奏情報の送受信を行うことにより、送信対象者である各演奏者には、ネットワークを介して、他の一人以上の演奏者の演奏によって得られる演奏情報が送られる。このため、送られる演奏情報によって再生可能な他の一人以上の演奏者の演奏と合わせた演奏を行える環境が提供される。その環境の提供により、送信対象者である演奏者は他の演奏者との合奏を実質的に行える形となる。その結果、よりまとまり感の得られる演奏、或いは全体としてより所望の音楽表現が実現される演奏がより容易となる。   By performing transmission / reception of such performance information, performance information obtained by the performance of one or more other performers is sent via the network to each performer who is a transmission target. For this reason, the environment which can perform the performance combined with the performance of one or more other players who can be reproduced by the performance information sent is provided. By providing the environment, a performer who is a transmission target can substantially perform an ensemble with other performers. As a result, a performance that provides a sense of unity, or a performance that realizes a desired musical expression as a whole becomes easier.

それは、合奏上、より望ましい演奏をより容易に行えるようになることを意味する。このことから、他の演奏者の演奏を聴かないで合奏の練習(演奏)を行う場合と比較して、より質の高い練習を行えるようになる。より多くの演奏者が合奏上、より質の高い演奏を行えるようになるから、合奏結果の確認もより容易、且つより短い時間で行えるようになる。それらは何れもより効率的な練習を行えるように作用する。   This means that a more desirable performance can be more easily performed on the ensemble. This makes it possible to practice with higher quality than when performing ensemble practice (performance) without listening to the performances of other performers. Since more performers can perform a higher quality performance on the ensemble, the confirmation of the ensemble result can be performed more easily and in a shorter time. They all work to make more efficient practice.

以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図1は、本実施の形態によるネット合奏システムを用いて構築されたネットワークシステムの構成を説明する図である。
Hereinafter, embodiments of the present invention will be described in detail with reference to the drawings.
FIG. 1 is a diagram for explaining a configuration of a network system constructed using the net concert system according to the present embodiment.

そのネットワークシステムは、図1に示すように、ネットワーク1に対し、サーバー2、各視聴者がそれぞれ使用する端末装置である複数のパーソナルコンピュータ(PC)3、及び各演奏者がそれぞれ使用する端末装置である複数のPC4、が接続されて構築されている。   As shown in FIG. 1, the network system includes a server 2, a plurality of personal computers (PCs) 3 that are terminal devices used by each viewer, and a terminal device used by each performer. A plurality of PCs 4 are connected and constructed.

上記ネットワーク1は、例えばインターネット、及びPC3、或いは4をインターネットと接続する公衆網を含むものである。演奏者用のPC4にはそれぞれ、そのユーザーが演奏を行う電子楽器5が接続されている。そのPC4は、電子楽器5への演奏操作の内容を示す演奏情報をサーバー2に送信する。そのサーバー2は、PC4から送信された演奏情報を受信し、他のPC4、或いはPC3に必要に応じて自動的に送信するサービスを提供する。そのサービスにより、PC3のユーザーはPC4のユーザーによる演奏を視聴できるようになっている。本実施の形態によるネット合奏システムは、そのサーバー2上に実現されている。   The network 1 includes, for example, the Internet and a public network that connects the PC 3 or 4 to the Internet. Each musical instrument PC 4 is connected to an electronic musical instrument 5 on which the user performs. The PC 4 transmits performance information indicating the contents of performance operation to the electronic musical instrument 5 to the server 2. The server 2 provides a service for receiving performance information transmitted from the PC 4 and automatically transmitting it to other PCs 4 or 3 as necessary. With this service, the user of the PC 3 can view the performance performed by the user of the PC 4. The network concert system according to the present embodiment is realized on the server 2.

図2は、上記サーバー2の構成を説明する図である。図2に示すように、サーバー2は、全体の制御を行うCPU21と、そのCPU21がワークに用いるRAM22と、電源投入時に実行される起動用のプログラム等を格納したROM23と、ネットワーク1を介した通信を行うためのネットワークインターフェース24と、例えばキーボードやポインティングデバイス(マウス等)、CD−ROMやDVD等の記録媒体にアクセスする媒体駆動装置、及びそれらのインターフェース等からなる入力装置25と、表示装置に画像を表示させる表示部26と、例えばハードディスク装置である補助記憶装置27と、それら各部21〜27を互いに接続するバス28と、を備えた構成となっている。   FIG. 2 is a diagram for explaining the configuration of the server 2. As shown in FIG. 2, the server 2 includes a CPU 21 that performs overall control, a RAM 22 that the CPU 21 uses for work, a ROM 23 that stores a startup program executed when the power is turned on, and the network 1. A network interface 24 for performing communication, a keyboard, a pointing device (mouse, etc.), a medium driving device for accessing a recording medium such as a CD-ROM or DVD, an input device 25 comprising these interfaces, and a display device The display unit 26 displays an image, an auxiliary storage device 27 that is a hard disk device, for example, and a bus 28 that connects the units 21 to 27 to each other.

電源が投入されると、CPU21はROM23に格納された起動用のプログラム読み出して実行することにより、その制御によって補助記憶装置27にアクセスする。そのアクセスにより、補助記憶装置27に格納されたOS(オペレーティングシステム)を読み出し、そのOSに制御を移す。それ以降は、OS上で動作するアプリケーション・プログラム(以降「アプリケーション」と略記)を実行する。上記サービスは、対応するアプリケーションを実行することで実現される。   When the power is turned on, the CPU 21 reads out and executes the startup program stored in the ROM 23, thereby accessing the auxiliary storage device 27 by its control. By the access, the OS (operating system) stored in the auxiliary storage device 27 is read, and control is transferred to the OS. Thereafter, an application program (hereinafter abbreviated as “application”) running on the OS is executed. The service is realized by executing a corresponding application.

図3は、上記PC4、及び電子楽器5の構成を説明する図である。
そのPC4は、図3に示すように、CPU41、RAM42、ROM43、ネットワークインターフェース44、入力装置45、表示部46、MIDIインターフェース(I/F)47、補助記憶装置48、及びバス49を備えた構成となっている。それにより、上記サーバー2と殆ど同じ構成となっている。サーバー2に存在しないMIDI I/F47は、電子楽器5とMIDIデータの送受信を行うためのものである。
FIG. 3 is a diagram illustrating the configuration of the PC 4 and the electronic musical instrument 5.
As shown in FIG. 3, the PC 4 includes a CPU 41, a RAM 42, a ROM 43, a network interface 44, an input device 45, a display unit 46, a MIDI interface (I / F) 47, an auxiliary storage device 48, and a bus 49. It has become. Thereby, it has almost the same configuration as the server 2. The MIDI I / F 47 that does not exist in the server 2 is used to transmit / receive MIDI data to / from the electronic musical instrument 5.

その電子楽器5は、図3に示すように、PC4とMIDIデータの送受信を行うためのMIDI I/F51と、演奏操作の対象となるキーボード52と、放音すべき楽音の波形データを生成して放音する音源・サウンドシステム(以降「音源システム」と略記)53と、を備えた構成となっている。   As shown in FIG. 3, the electronic musical instrument 5 generates a MIDI I / F 51 for transmitting / receiving MIDI data to / from the PC 4, a keyboard 52 as a performance operation target, and waveform data of a musical sound to be emitted. And a sound source / sound system (hereinafter abbreviated as “sound source system”) 53 for emitting sound.

電子楽器5のキーボード52は、例えばユーザーの鍵への操作を検出し、操作を検出した鍵、及びその操作内容を示す操作情報をMIDI I/F51に出力する。そのI/F51は、例えばその操作情報に対応するMIDIデータを生成して音源システム53、及びPC4のMIDI I/F47にそれぞれ出力する。そのI/F47から入力したMIDIデータも音源システム53に出力する。それにより、ユーザーのキーボード52に対する演奏操作に応じた楽音の放音、及びPC4から出力されたMIDIデータによる楽音の放音を行わせるようになっている。このことから、PC4とそれに接続された電子楽器5は、ネットワーク5を介し、ユーザーが電子楽器5に対して行った演奏内容を示す演奏情報を送受信できる演奏者用システムを構成している。本実施の形態では、その演奏情報としてMIDIデータを採用している。   The keyboard 52 of the electronic musical instrument 5 detects, for example, a user's operation on a key, and outputs a key with the detected operation and operation information indicating the operation content to the MIDI I / F 51. The I / F 51 generates, for example, MIDI data corresponding to the operation information and outputs the MIDI data to the sound source system 53 and the MIDI I / F 47 of the PC 4. The MIDI data input from the I / F 47 is also output to the sound source system 53. Thereby, a musical sound is emitted according to a performance operation performed by the user on the keyboard 52 and a musical sound is emitted according to the MIDI data output from the PC 4. Thus, the PC 4 and the electronic musical instrument 5 connected thereto constitute a performer system that can transmit and receive performance information indicating the performance contents performed by the user to the electronic musical instrument 5 via the network 5. In the present embodiment, MIDI data is adopted as the performance information.

他方のPC3は、PC4の構成と同じか、或いは音源システム53に相当するシステムを搭載しているものである。ここでは説明上、便宜的に、図3に示す構成において、MIDI I/F47の代わりに音源システム53を搭載していると想定する。その想定により、構成要素の符号としてPC4のそれを用いることにする。   The other PC 3 has the same configuration as the PC 4 or a system corresponding to the sound source system 53. Here, for convenience of explanation, it is assumed that the sound source system 53 is mounted instead of the MIDI I / F 47 in the configuration shown in FIG. Based on this assumption, the code of PC4 is used as the component code.

PC3、4は、電源が投入されると、CPU41はROM43に格納された起動用のプログラム読み出して実行することにより、その制御によって補助記憶装置48にアクセスする。そのアクセスにより、補助記憶装置48に格納されたOS(オペレーティングシステム)を読み出し、そのOSに制御を移す。それ以降は、入力装置45を介したユーザーの指示に応じた制御を行う。OS上で動作するアプリケーション・プログラム(以降「アプリケーション」と略記)の起動/終了は、その制御によって実現される。   When the PCs 3 and 4 are powered on, the CPU 41 reads out and executes the startup program stored in the ROM 43, thereby accessing the auxiliary storage device 48 by its control. By the access, the OS (operating system) stored in the auxiliary storage device 48 is read, and control is transferred to the OS. Thereafter, control is performed in accordance with a user instruction via the input device 45. The activation / termination of an application program (hereinafter abbreviated as “application”) operating on the OS is realized by its control.

図4は、仮想的な合奏の実現方法を説明する図である。その実現方法は、演奏者A〜Cの3人のメンバーによる合奏を仮想的に実現させる場合のものである。
本実施の形態では、図4に示すように、演奏者A〜Cの3人のメンバーによる仮想的な合奏は3段階でそれぞれ行う演奏によって実現させるようにしている。第1段階で演奏者Aが演奏を行って得られる演奏情報は、その次の第2段階の演奏を行う演奏者Bに送ることにより、その演奏を聴きながら演奏を行える環境(演奏者Aとの合奏を行える環境)を演奏者Bに提供する。最終の第3段階で演奏を行う演奏者Cには、演奏者Bから、自身の演奏による演奏情報と共に、演奏者Aの演奏による演奏情報を送ることにより、演奏者A、Bの演奏を聴きながら演奏を行える環境(演奏者A、Bとの合奏を行える環境)を演奏者Cに提供する。その第3段階で演奏者Cが演奏を行うことにより、全ての演奏者A〜Cによる合奏の最終結果が得られる。視聴者Dは、その結果として得られる、各演奏者A〜Cの演奏による演奏情報が送られる人であり、演奏者A〜Cの何れも視聴者Dとなることができる。
FIG. 4 is a diagram for explaining a method of realizing a virtual ensemble. The realization method is a case where an ensemble by three members of performers A to C is virtually realized.
In the present embodiment, as shown in FIG. 4, virtual ensembles by three members of performers A to C are realized by performances performed in three stages. The performance information obtained when the performer A performs in the first stage is sent to the performer B performing the next second stage performance so that the performance can be performed while listening to the performance (the performers A and A). To performer B). The performer C who performs in the final third stage listens to the performances of the performers A and B by sending performance information based on the performance of the performer A together with performance information based on the performance of the performer B. However, the player C is provided with an environment in which performance can be performed (environment in which the ensemble with the performers A and B can be performed). When the performer C performs in the third stage, the final result of the ensemble by all the performers A to C is obtained. The viewer D is a person to whom performance information obtained by the performance of each of the performers A to C is sent as a result, and any of the performers A to C can be the viewer D.

このようにして、本実施の形態では、各演奏段階で演奏を行う演奏者に対し、それよりも上流に位置する演奏段階で行われた演奏による演奏情報を提供することにより、第1段階(最上流の演奏段階)で演奏を行う演奏者A以外は、それよりも上流の演奏段階で行われた演奏を聴きながら、その演奏に合わせた演奏(合奏)を行えるようにさせている。このため、第1段階以外の演奏段階の演奏者にとっては、全体としてまとまり感のある(所望の音楽表現が実現されている)合奏結果が得られるような演奏、つまり合奏のためのより適切な演奏を容易に行うことができるようになる。それにより、合奏のための演奏はより効率的に練習できることとなる。   In this way, in the present embodiment, performance information on the performance performed in the performance stage located upstream from the performer in each performance stage is provided to the first stage ( Other than the performer A who performs at the most upstream performance stage), the performance (ensemble) according to the performance can be performed while listening to the performance performed at the upstream performance stage. For this reason, for a performer other than the first stage, a performance that gives a sense of unity (a desired musical expression is realized) as a whole, that is, a performance that is more appropriate for an ensemble. It becomes possible to perform easily. Thereby, the performance for the ensemble can be practiced more efficiently.

第1段階以外の演奏段階の演奏者が合奏上、より質の高い演奏を行えるようになると、合奏上、望ましくない演奏方法や演奏箇所はより少なくなる。このため、合奏結果の確認もより容易に行えるようになって、その確認に必要な時間はより短縮させることができる。このことからも、より効率的な練習を行えることとなる。   If a performer other than the first stage can perform a higher quality performance on the ensemble, there are fewer undesirable performance methods and performance points on the ensemble. For this reason, the confirmation of the ensemble result can be performed more easily, and the time required for the confirmation can be further shortened. This also means that you can practice more efficiently.

第1段階の演奏者Aは、その演奏を聴きながら他の演奏者が演奏を行うことから、他の演奏者が合わせるべき演奏を行う者、合奏曲のベースとなる演奏を行う者、或いは最も演奏の上手な者、とすることが望ましい。そのような者を演奏者Aとすることにより、より望ましい合奏結果がより容易に得られるようになる。   The performer A in the first stage is performed by other performers while listening to the performance. Therefore, the performer A performs a performance that other performers should perform, performs a performance as a base of the ensemble, or most. It is desirable to be a good performer. By making such a person a performer A, a more desirable ensemble result can be obtained more easily.

なお、本実施の形態では、各演奏段階の演奏者を一人のみとしているが、第1段階以外の演奏段階の演奏者は複数であっても良い。その場合、複数の演奏者全てに同じ種類の楽器、或いはパートを演奏させる必要はない。演奏段階数は、2つ以上であればあれば良く、合奏曲、演奏者数、及び演奏するパート数等を考慮して適宜、決定すれば良い。ネットワーク1上に送信される演奏情報はその送信元(演奏者)が明らかとなっているので、何れの演奏段階に複数の演奏者が存在していても、演奏者毎にその演奏情報をまとめることができる。   In this embodiment, only one performer is provided at each performance stage, but there may be a plurality of performers at performance stages other than the first stage. In that case, it is not necessary for all the plurality of players to play the same type of instrument or part. The number of performance stages may be two or more, and may be appropriately determined in consideration of the ensemble, the number of performers, the number of parts to be played, and the like. Since the performance information transmitted on the network 1 is clear from the transmission source (performer), the performance information is collected for each performer even if there are a plurality of performers at any performance stage. be able to.

演奏段階に分けて各演奏者に演奏を行わせる場合、各演奏者に演奏情報を送るべき相手、その演奏者から演奏情報を送るべき相手はその演奏者の演奏段階に応じて自動的に特定することができる。このことから本実施の形態では、図4に示すような実現方法を採用しているが、演奏者に演奏情報を送信すべき他の演奏者を演奏者毎に個別に設定するようにしても良い。演奏情報を送信する流れのパターン(例えば演奏位置と演奏情報が送受信される演奏位置の関係を示すもの)を幾つか用意し、そのパターン上で各演奏者の演奏位置を指定するようにしても良い。当然のことながら、別の方法を採用しても良い。   When each performer performs a performance divided into performance stages, the other party to whom performance information should be sent to each performer and the other party to whom performance information should be sent from that performer are automatically specified according to the performance stage of that performer. can do. For this reason, in the present embodiment, an implementation method as shown in FIG. 4 is adopted, but other performers who should transmit performance information to the performers may be individually set for each performer. good. Several flow patterns (for example, showing the relationship between the performance position and the performance position where performance information is transmitted and received) are prepared, and the performance position of each performer may be specified on the pattern. good. Of course, other methods may be employed.

図4に示すような合奏は、サーバー2、PC4(PC3)のCPU21、41がそれぞれ専用のアプリケーションを実行することで実現される。以降は、図5〜図16の説明図を参照して、サーバー2、PC4別に、合奏を実現させるための動作について詳細に説明する。   The ensemble as shown in FIG. 4 is realized by the CPUs 21 and 41 of the server 2 and the PC 4 (PC 3) respectively executing dedicated applications. Hereinafter, an operation for realizing the ensemble will be described in detail for each of the server 2 and the PC 4 with reference to the explanatory diagrams of FIGS.

サーバー2は、PC4間に入って図4に示すような演奏情報の送受信を実現させるサービス(合奏サービス)を提供する。PC3のユーザー(視聴者D)に対しては、合奏結果として保存した演奏情報を提供するサービス(視聴サービス)を行う。それらのサービスを提供するために、図5に示すようなデータを管理している。図5(a)はサービスを提供するPC3、4のユーザーを管理するためのユーザーデータベース(DB)のデータ構成を示し、図5(b)はPC4間のデータの送受信用のリングバッファの構成を示している。   The server 2 provides a service (ensemble service) that enters between the PCs 4 and realizes transmission / reception of performance information as shown in FIG. For the user of PC3 (viewer D), a service (viewing service) is provided that provides performance information stored as an ensemble result. In order to provide these services, data as shown in FIG. 5 is managed. FIG. 5A shows a data structure of a user database (DB) for managing users of PCs 3 and 4 that provide services, and FIG. 5B shows a structure of a ring buffer for transmitting and receiving data between the PCs 4. Show.

図5(a)に示すように、ユーザーDBには、ユーザー毎に、データiFD、cUserID、cStat、及びcUserModeが格納されている。データiFDは、ユーザー毎に異なる通信識別用番号であり、PC3、4は送信するデータにそれを付加するようになっている。データcUserIDはユーザーID、データcStatは対応するユーザーが接続(ログオン)状態か否かを管理するためのデータ、データcUserModeは対応するユーザーのモードを管理するためのデータである。そのユーザーモードとしては、ここでは演奏者A〜C、及び視聴者Dのみを考慮することとする。   As shown in FIG. 5A, the user DB stores data iFD, cUserID, cStat, and cUserMode for each user. The data iFD is a communication identification number that is different for each user, and the PCs 3 and 4 add it to the data to be transmitted. Data cUserID is a user ID, data cStat is data for managing whether or not the corresponding user is connected (logged on), and data cUserMode is data for managing the mode of the corresponding user. As the user mode, only the performers A to C and the viewer D are considered here.

上記リングバッファは、図5(b)に示すように、「buffer」を表記した部分(以降「データバッファ」と呼ぶ)、「iSize」を表記した部分(以降「サイズバッファ」と呼ぶ)、及び「iUDBid」を表記した部分(以降「ユーザーバッファ」と呼ぶ)の3つの部分から構成されている。データバッファにはPC4から受信したデータの本体(実体)が格納される。サイズバッファには、データバッファに格納されたデータのサイズが格納される。ユーザーバッファには、データバッファに格納されたデータを送信させたユーザーを示す識別情報(ここではデータiFD)が格納される。それにより、リングバッファは、データ本体、データサイズ、及びデータを送信させたユーザーのデータを格納したユーザーDB中のレコードを示すインデクス値をセットで参照できるようになっている。図5(a)において[]内に表記の「0」や「n」はそのインデクス値を表している。データのサイズ、及び識別情報は受信データ中から抽出される。   As shown in FIG. 5B, the ring buffer includes a portion indicating “buffer” (hereinafter referred to as “data buffer”), a portion indicating “iSize” (hereinafter referred to as “size buffer”), and It is composed of three parts, “iUDDBid” (hereinafter referred to as “user buffer”). The data buffer stores the main body (substance) of data received from the PC 4. The size buffer stores the size of data stored in the data buffer. In the user buffer, identification information (here, data iFD) indicating the user who has transmitted the data stored in the data buffer is stored. Thereby, the ring buffer can refer to the data body, the data size, and the index value indicating the record in the user DB storing the data of the user who transmitted the data as a set. In FIG. 5A, “0” or “n” in [] represents the index value. The data size and identification information are extracted from the received data.

上記ユーザーDBは、補助記憶装置27に保存されており、RAM22に読み出されて参照・更新される。上記リングバッファはRAM22に確保された領域である。
図7は、サーバー2が実行する全体処理のフローチャートである。その全体処理は、上記合奏サービス、及び視聴サービスを提供するためにサーバー2が実行する処理を抜粋してその流れを示したものである。それらサービス提供用のアプリケーションを補助記憶装置27からRAM22に読み出してCPU21が実行することで実現される。次に図7を参照して、その全体処理について詳細に説明する。
The user DB is stored in the auxiliary storage device 27 and is read out to the RAM 22 for reference / update. The ring buffer is an area secured in the RAM 22.
FIG. 7 is a flowchart of overall processing executed by the server 2. The overall process is an excerpt of the process executed by the server 2 to provide the ensemble service and the viewing service. The service providing application is read out from the auxiliary storage device 27 to the RAM 22 and executed by the CPU 21. Next, the entire process will be described in detail with reference to FIG.

先ず、ステップ101では、ユーザーDBの読み込みや、各種変数、及びリングバッファの初期化、クライアントであるPC3、4との送受信準備といった初期化を行う。その次に移行するステップ102では、並行して実行すべきスレッドを起動させる。そのスレッドの一つとして、図9にフローチャートを示す送信スレッドが存在する。その送信スレッドは、PC4間のデータの送受信を実現させるためのものである。   First, in step 101, initialization such as reading of a user DB, initialization of various variables and a ring buffer, and preparation for transmission / reception with PCs 3 and 4 as clients is performed. In the next step 102, a thread to be executed in parallel is activated. As one of the threads, there is a transmission thread whose flowchart is shown in FIG. The transmission thread is for realizing transmission / reception of data between the PCs 4.

ステップ102に続くステップ103では、変数iContに1を代入する。その代入後はステップ104に移行して、変数iContの値は1か否か判定する。その値が1であった場合、判定はYESとなってステップ105に移行し、そうでない場合には、判定はNOとなり、ここで一連の処理を終了する。このように変数iContは、アプリケーションの終了を管理するためのものであり、特に詳細な説明は省略するが、管理者の終了指示によって、他のアプリケーション、或いはOSが1以外の値を代入するようになっている。   In step 103 following step 102, 1 is substituted into the variable iCont. After the substitution, the process proceeds to step 104 to determine whether the value of the variable iCont is 1. If the value is 1, the determination is yes and the process proceeds to step 105. If not, the determination is no and the series of processes ends here. As described above, the variable iCont is for managing the termination of the application, and a detailed description thereof is omitted. However, according to the termination instruction from the administrator, another application or the OS may substitute a value other than 1. It has become.

ステップ105では、PC3、4(以降「クライアント」と総称する)からデータを受信するのを待つ。そのデータをネットワークインターフェース24が受信すると、判定がYESとなってステップ106に移行し、変数fdに0を代入する。その次に移行するステップ107では、変数fdの値が、受信データに含まれているデータiFDの値と一致するか否か判定する。それらの値が一致する場合、判定はYESとなってステップ109に移行する。そうでない場合には、判定はNOとなり、ステップ108で変数fdの値をインクリメントした後、再度、ステップ107の判定処理を行う。それにより、受信データに含まれているデータiFDの値の特定を行う。   In step 105, it waits to receive data from the PCs 3 and 4 (hereinafter collectively referred to as “client”). When the data is received by the network interface 24, the determination is YES, the process proceeds to step 106, and 0 is substituted for the variable fd. In the next step 107, it is determined whether or not the value of the variable fd matches the value of the data iFD included in the received data. If the values match, the determination is yes and the process moves to step 109. Otherwise, the determination is no, the value of the variable fd is incremented at step 108, and then the determination process at step 107 is performed again. Thereby, the value of the data iFD included in the received data is specified.

ステップ109では、受信データがログオフを要求するものか否か判定する。そのログオフを要求するものであった場合、判定はYESとなってステップ110に移行し、ユーザーDBのログオフを要求したユーザーのレコードに格納されているデータcStatをログオフのものに更新するとともに、ログオン中のユーザーが使用するクライアントにログオフしたユーザーを通知するための情報をネットワークインターフェース24により送信させた後、上記ステップ105に戻る。そうでない場合には、判定はNOとなってステップ111に移行する。   In step 109, it is determined whether or not the received data is a logoff request. If the logoff is requested, the determination is yes and the process proceeds to step 110, where the data cStat stored in the record of the user who requested logoff of the user DB is updated to the logoff and the logon is performed. After the network interface 24 transmits information for notifying the user who has logged off to the client used by the user, the process returns to step 105. Otherwise, the determination is no and the process moves to step 111.

ステップ111では、リングバッファを構成するデータバッファのなかで受信データを格納すべき場所を示す値(図中「リングバッファポインター」と表記)を変数bufに代入する。その受信データのデータバッファへの格納に対応して、サイズバッファ、及びユーザーバッファにそれぞれデータを格納すべき場所を示す値(図中、共に「リングバッファポインター」と表記)を変数iSizePtr、及びiUDBPtrに代入する(ステップ112、113)。その代入後はステップ114に移行して、データバッファ中の変数bufの値で指定される場所から受信データを格納し、サイズバッファ中の変数iSizePtrの値で指定される場所にそのサイズ(を示す値)を格納する。ステップ115にはその格納後に移行する。   In step 111, a value (denoted as “ring buffer pointer” in the figure) indicating a place where received data is to be stored in the data buffer constituting the ring buffer is substituted into the variable buf. Corresponding to the storage of the received data in the data buffer, values indicating the locations where the data should be stored in the size buffer and the user buffer (both expressed as “ring buffer pointer” in the figure) are variables iSizePtr and iUDPTr. (Steps 112 and 113). After the substitution, the process proceeds to step 114, where the received data is stored from the location specified by the value of the variable buf in the data buffer, and the size (indicated at the location specified by the value of the variable iSizePtr in the size buffer). Value). The process proceeds to step 115 after the storage.

ステップ115では、変数jに0を代入する。続くステップ116では、ユーザーDBの変数jの値をインデクス値として持つレコードに格納されているデータiFD(図中「udb[j].iFD」と表記。他のデータも同様の表記法を用いる)の値が上記変数fdの値と一致するか否か判定する。それらの値が一致する場合、判定はYESとなってステップ118に移行する。そうでない場合には、判定はNOとなり、ステップ117で変数jの値をインクリメントした後、再度ステップ116の判定処理を行う。それにより、受信データを送信させたユーザーに対応するレコードのインデクス値の特定を行う。   In step 115, 0 is substituted for variable j. In the following step 116, data iFD stored in a record having the value of the variable j of the user DB as an index value (denoted as “udb [j] .iFD” in the figure. Other data uses the same notation) It is determined whether or not the value of the value matches the value of the variable fd. If the values match, the determination is yes and the process moves to step 118. Otherwise, the determination is no, and after the value of variable j is incremented in step 117, the determination process in step 116 is performed again. Thereby, the index value of the record corresponding to the user who has transmitted the received data is specified.

ステップ118では、ユーザーバッファ中の変数iUDBPtrの値で指定される場所に、受信データを送信させたユーザーに対応するレコードのインデクス値として変数jの値を格納する。次のステップ119では、データバッファ、サイズバッファ、及びユーザーバッファのそれぞれにおいて、次のデータを格納すべき場所を示す値(図中「リングバッファポインター」と表記)を更新する。それらの更新後はステップ120に移行する。   In step 118, the value of variable j is stored as the index value of the record corresponding to the user who sent the received data at the location specified by the value of variable iUDBPPtr in the user buffer. In the next step 119, in each of the data buffer, the size buffer, and the user buffer, a value (denoted as “ring buffer pointer” in the figure) indicating the location where the next data is to be stored is updated. After the update, the process proceeds to step 120.

クライアントのユーザーがサーバー2に対してログオフ以外の要求を行う場合にも、そのクライアントからその要求に応じたデータがサーバー2に送信される。ステップ120以降では、そのようなデータに対応するための処理が行われる。ここではその要求として、ログオン要求、モード変更要求、録音要求、及び再生要求のみを想定することとする。録音要求は、視聴者Dが視聴の対象とする合奏結果の録音(保存)を要求するためのものであり、再生要求はその合奏結果の再生を要求するためのものである。   When a client user makes a request other than logoff to the server 2, data corresponding to the request is transmitted from the client to the server 2. In step 120 and subsequent steps, processing for dealing with such data is performed. Here, only a logon request, a mode change request, a recording request, and a playback request are assumed as the requests. The recording request is for requesting recording (storing) of the ensemble result to be viewed by the viewer D, and the reproduction request is for requesting reproduction of the ensemble result.

先ず、ステップ120では、受信データがログオンを要求するものか否か判定する。そのログオンを要求するものであった場合、判定はYESとなってステップ121に移行し、認証処理を実行した後、上記ステップ105に戻る。そうでない場合には、判定はNOとなってステップ122に移行し、受信データがユーザーモードの変更を要求するものか否か判定する。そのモードの変更を要求するものであった場合、判定はYESとなり、ステップ123でその要求に対応するためのユーザーモード更新処理を実行した後、上記ステップ105に戻る。そうでない場合には、判定はNOとなってステップ124に移行する。   First, in step 120, it is determined whether the received data is a request for logon. If the log-on is requested, the determination is yes, the process proceeds to step 121, the authentication process is executed, and then the process returns to step 105. Otherwise, the determination is no and the process moves to step 122 to determine whether or not the received data is a request for changing the user mode. If it is a request to change the mode, the determination is YES, and after executing the user mode update process for responding to the request in step 123, the process returns to step 105. Otherwise, the determination is no and the process moves to step 124.

上記ステップ123のユーザーモード更新処理では、ユーザーDBのなかで変数jの値をインデクス値とするレコードに格納されているデータcUserModeを、受信データで指定されたモードを表すものに更新する。そのような更新を行うことにより、クライアントのユーザーは演奏者A〜C、視聴者Dのうちの何れかに任意に変更できるようになっている。ユーザーモードを変更したレコードは、ログオン中のユーザーが使用するクライアント全てに送信する。   In the user mode update process of step 123, the data cUserMode stored in the record having the value of the variable j as the index value in the user DB is updated to the one representing the mode specified by the received data. By performing such an update, the user of the client can arbitrarily change to one of the performers A to C and the viewer D. The record with the changed user mode is sent to all clients used by the logged-on user.

ステップ124では、受信データが録音、或いは再生を要求するものか否か判定する。その録音、或いは再生を要求するものであった場合、判定はYESとなってステップ125に移行し、要求された録音、或いは再生を開始するための処理を実行した後、上記ステップ105に戻る。そうでない場合には、判定はNOとなってそのステップ105に戻る。   In step 124, it is determined whether or not the received data is a request for recording or reproduction. If the recording or reproduction is requested, the determination is YES, the process proceeds to step 125, the requested recording or reproduction is started, and the process returns to step 105. Otherwise, the determination is no and the process returns to step 105.

図8は、上記ステップ121として実行される認証処理のフローチャートである。次に図8を参照して、その認証処理について詳細に説明する。
本実施の形態では、上述したように、サーバー2によるサービスを利用するには専用のアプリケーションをクライアントに実行させるようにしている。そのアプリケーションは、アプリケーション毎に異なるID(データcUserID)と共にCD−ROM等の記録媒体に記録して、ネットワークを利用した合奏を望む人を対象に配布している。そのアプリケーションは、ログオン要求時に自身に割り当てられたデータcUserIDを送信するようになっている。
FIG. 8 is a flowchart of the authentication process executed as step 121 described above. Next, the authentication process will be described in detail with reference to FIG.
In the present embodiment, as described above, in order to use the service provided by the server 2, a dedicated application is executed by the client. The application is recorded on a recording medium such as a CD-ROM together with a different ID (data cUserID) for each application, and is distributed to those who desire ensemble using the network. The application transmits the data cUserID assigned to itself when a logon request is made.

ユーザーDBに格納されるデータiFDは、ログオンを要求したユーザーに、そのときの状況に応じて割り当てるようにしている。このため、受信データがログオン要求のためのものであった場合、その受信データにはデータiFDに対応するものが付加されていない。そのような受信データに対応するために、特には図示していないが、上記ステップ107では受信データにデータcUserIDが付加されていればYESと判定するようにしている。また、上記ステップ116、117で形成される処理ループでは、データが格納されていないレコードが見つかるまで、変数jの値をインデクス値とするレコードのデータiFDを順次、参照することにより、データiFDとして割り当て可能な値(例えば最小値)を特定し、その特定した値を変数fdに代入するようになっている。認証処理は、そのような値が変数fdに代入されている状況下で実行される。   The data iFD stored in the user DB is assigned to the user who requested the logon according to the situation at that time. For this reason, when the received data is for a logon request, no data corresponding to the data iFD is added to the received data. In order to cope with such received data, although not particularly shown, in step 107, if the data cUserID is added to the received data, the determination is YES. Further, in the processing loop formed in the above steps 116 and 117, the data iFD of the record having the value of the variable j as an index value is sequentially referred to until the record in which no data is stored is found, so that the data iFD is obtained. An assignable value (for example, the minimum value) is specified, and the specified value is substituted into the variable fd. The authentication process is executed under a situation where such a value is assigned to the variable fd.

先ず、ステップ201では、変数jに0を代入する。続くステップ202では、ユーザーDBの変数jの値をインデクス値とするレコードを参照し、そのレコードにデータが格納されていないか否か判定する。ユーザーDBは、データが格納されたレコードは連続するインデクス値の何れかで指定できるようにしている。つまり、ユーザー登録の抹消によりデータを消去したレコードが一つ発生すると、それよりも大きいインデクス値の各レコードのデータをそれまでより一つ小さいインデクス値のレコードにそれぞれコピーするようにしている。このことから、データが格納されている全てのレコードを参照した場合、次に変数jの値によって参照するレコードにはデータが格納されていないこととなる。その結果、判定はYESとなってステップ208に移行する。そうでない場合には、判定はNOとなってステップ203に移行する。そのYESの判定は、未登録のユーザーがログオン要求を行ったことを意味する。   First, in step 201, 0 is substituted for variable j. In the following step 202, a record having the value of the variable j in the user DB as an index value is referred to, and it is determined whether or not data is stored in the record. The user DB allows a record in which data is stored to be specified by one of continuous index values. That is, when one record from which data has been erased due to the deletion of user registration is generated, the data of each record having a larger index value is copied to the record having a smaller index value than before. For this reason, when all the records in which data is stored are referred to, no data is stored in the record to be referred to next by the value of the variable j. As a result, the determination is yes and the process proceeds to step 208. Otherwise, the determination is no and the process moves to step 203. The determination of YES means that an unregistered user has made a logon request.

ステップ203では、参照するレコードのデータcUserIDが受信データに存在するデータcUserIDと同じか否か判定する。それらが同じものであった場合、判定はYESとなってステップ205に移行する。そうでない場合には、判定はNOとなり、ステップ204で変数jの値をインクリメントした後、上記ステップ202に戻る。そのYESの判定は、登録済みのユーザーがログオン要求を行ったことを意味する。   In step 203, it is determined whether the data cUserID of the record to be referenced is the same as the data cUserID existing in the received data. If they are the same, the determination is yes and the process moves to step 205. Otherwise, the determination is no, the variable j is incremented in step 204, and the process returns to step 202. The determination of YES means that a registered user has made a logon request.

ステップ205では、ユーザーDBの変数jの値をインデクス値として持つレコードのデータiFD(図中「udb[j].iFD」と表記)として変数fdの値を格納する。続くステップ206では、そのレコードのデータcStatとして、ログオン状態であることを示す値の1を格納する。次に移行するステップ207では、そのレコードのデータcUserModeとして演奏者Aを表す値の1を格納し、ユーザーバッファ中の変数iUDBPtrのステップ119で更新する前の値で指定される場所に、受信データを送信させたユーザーに対応するレコードのインデクス値として変数jの値を格納する。その格納を行った後に、認証を行ったユーザーのクライアントにユーザーDBを送信する。そのユーザーのレコードは、ログオン中となっている他のユーザーのクライアント全てに送信する。そのような送信を行った後、一連の処理を終了する。   In step 205, the value of the variable fd is stored as data iFD (indicated as “udb [j] .iFD” in the figure) of the record having the value of the variable j of the user DB as the index value. In the next step 206, 1 is stored as the data cStat of the record, indicating a value of 1 indicating the logon state. At the next step 207, the value 1 representing the player A is stored as the data cUserMode of the record, and the received data is stored at the location specified by the value before the update at step 119 of the variable iUDPTr in the user buffer. The value of the variable j is stored as the index value of the record corresponding to the user who has transmitted. After the storage, the user DB is transmitted to the client of the authenticated user. The user's record is sent to all other users' clients who are logged on. After performing such transmission, the series of processing ends.

上記全体処理では、受信データを送信させたユーザーに対応するレコードのインデクス値として変数jの値をステップ118でユーザーバッファに格納するようになっている。しかし、受信データがログオン要求のためのものであった場合、受信データにはデータiFDが付加されていないことから、その変数jの値は正しいインデクス値となっていない。このことから、認証処理ではユーザーバッファに格納したインデクス値を正しいインデクス値に更新するようにしている。   In the overall process, the value of the variable j is stored in the user buffer in step 118 as the index value of the record corresponding to the user who sent the received data. However, if the received data is for a logon request, since the data iFD is not added to the received data, the value of the variable j is not a correct index value. For this reason, in the authentication process, the index value stored in the user buffer is updated to the correct index value.

上記ステップ202の判定がYESとなって移行するステップ208では、変数jに0を代入する。次のステップ209では、ユーザーDBの変数jの値をインデクス値とするレコードを参照し、それがデータの格納されていないレコード(未登録エリア)か否か判定する。参照したレコードにデータが格納されていない場合、判定はYESとなり、ステップ211でudb[j].iFDとして変数fdの値、udb[j].cUserIDとして受信データに付加されているデータcUserIDをそれぞれ格納した後、上記ステップ206に移行する。そうでない場合には、判定はNOとなり、ステップ210で変数jの値をインクリメントした後、再度、ステップ209の判定処理を行う。   In step 208, where the determination in step 202 is YES and the process proceeds, 0 is substituted for variable j. In the next step 209, a record having the value of the variable j in the user DB as an index value is referred to, and it is determined whether or not it is a record in which no data is stored (unregistered area). If no data is stored in the referenced record, the determination is yes, and in step 211, udb [j]. The value of variable fd as iFD, udb [j]. After storing the data cUserID added to the received data as cUserID, the process proceeds to step 206 above. Otherwise, the determination is no, and after the value of variable j is incremented in step 210, the determination process of step 209 is performed again.

図9は、上記送信スレッドの実行によって実現される処理のフローチャートである。その送信スレッドは、図7に示す全体処理内のステップ102で起動される。次に図9を参照して、その送信スレッドについて詳細に説明する。その送信スレッドは、上述したように、PC4間のデータの送受信を実現させるためのものである(図4)。   FIG. 9 is a flowchart of processing realized by execution of the transmission thread. The transmission thread is activated at step 102 in the overall process shown in FIG. Next, the transmission thread will be described in detail with reference to FIG. The transmission thread is for realizing transmission / reception of data between the PCs 4 as described above (FIG. 4).

先ず、ステップ301では、送信スレッドの終了を管理するための変数iSendThreadに1を代入する。続くステップ302では、その変数iSendThreadの値が1か否か判定する。その値が1でなかった場合、判定はNOとなってステップ318に移行する。そうでない場合には、判定はYESとなってステップ303に移行する。特に詳細な説明は省略するが、変数iSendThreadへの1以外の値の代入は、例えばPC4からの合奏の停止要求、録音中であれば録音停止要求によって図7に示す全体処理を実現させるアプリケーションが行うようになっている。再度の1の代入は、合奏の開始要求によってそのアプリケーションが行う。   First, in step 301, 1 is substituted into a variable iSendThread for managing the end of the transmission thread. In the subsequent step 302, it is determined whether or not the value of the variable iSendThread is 1. If the value is not 1, the determination is no and the process moves to step 318. Otherwise, the determination is yes and the process moves to step 303. Although a detailed description is omitted, substitution of a value other than 1 to the variable iSendThread is performed by, for example, an application that realizes the overall process shown in FIG. To do. The application of 1 again is performed by the application in response to the start request of the ensemble.

上述したように、クライアント間で送受信させるデータはリングバッファ(図5)に一時的に格納するようになっている。ステップ303では、そのリングバッファに送信の対象となるデータがないか否か判定する。そのようなデータがリングバッファに存在していない場合、判定はYESとなって上記ステップ302に戻る。そうでない場合には、判定はYESとなり、次のステップ304で変数iに0を代入した後、ステップ305に移行する。   As described above, data to be transmitted and received between clients is temporarily stored in the ring buffer (FIG. 5). In step 303, it is determined whether or not there is data to be transmitted in the ring buffer. If such data does not exist in the ring buffer, the determination is yes and the process returns to step 302 above. Otherwise, the determination is yes, and after substituting 0 for the variable i in the next step 304, the process proceeds to step 305.

ステップ305以降では、変数iの値を順次、インクリメントしながら、その値をインデクス値とするレコードにデータが格納されたユーザーに、リングバッファに格納されている送信すべき受信データを送信するための処理が行われる。   In step 305 and the subsequent steps, while sequentially incrementing the value of the variable i, the reception data to be transmitted stored in the ring buffer is transmitted to the user whose data is stored in the record having the value as the index value. Processing is performed.

先ず、ステップ305では、変数iの値がユーザーDBに登録済みのユーザー数MAX_USER未満か否か判定する。変数iに初期値として代入する値は0であり、その値を順次、インクリメントして更新するようにしている。このため、受信データの送信を考慮すべきユーザーの全てに送信すべき受信データの送信を行った場合、変数iの値はユーザー数MAX_USER以上となる。その結果、判定はNOとなって上記ステップ303に戻る。そうでない場合には、判定はYESとなってステップ306に移行する。   First, in step 305, it is determined whether or not the value of the variable i is less than the number of users MAX_USER registered in the user DB. The value assigned to the variable i as an initial value is 0, and the value is sequentially incremented and updated. For this reason, when transmission of reception data to be transmitted to all users who should consider transmission of reception data, the value of the variable i is equal to or greater than the number of users MAX_USER. As a result, the determination is no and the process returns to step 303. Otherwise, the determination is yes and the process moves to step 306.

ステップ306では、リングバッファに格納されている送信対象の受信データがユーザーモード変更要求のためのものか否か判定する。その要求のためのものであった場合、判定はYESとなり、ステップ307で受信データを、変数iの値をインデクス値とするレコードにデータが格納されているユーザー宛に送信し、更にステップ308で変数iの値をインクリメントした後、上記ステップ305に戻る。一方、そうでない場合には、判定はNOとなってステップ309に移行する。   In step 306, it is determined whether the received data to be transmitted stored in the ring buffer is for a user mode change request. If the request is for that request, the determination is YES, and in step 307, the received data is transmitted to the user whose data is stored in the record having the value of variable i as the index value, and further in step 308. After incrementing the value of the variable i, the process returns to step 305. On the other hand, if not, the determination is no and the process proceeds to step 309.

上記ステップ307では、受信データと併せてリングバッファに格納されたインデクス値が変数iの値と一致している場合、その受信データの送信は行わない。それにより、データを受信したクライアントにそのデータを送信することを回避させている。   In step 307, if the index value stored in the ring buffer together with the received data matches the value of the variable i, the received data is not transmitted. As a result, transmission of the data to the client that has received the data is avoided.

ステップ309では、送信対象の受信データが録音、或いは再生を指示するためのものか否か判定する。そのような指示のためのものであった場合、判定はYESとなって上記ステップ307に移行する。そうでない場合には、判定はNOとなってステップ310に移行する。   In step 309, it is determined whether or not the received data to be transmitted is for instructing recording or reproduction. If it is for such an instruction, the determination is yes and the process proceeds to step 307. Otherwise, the determination is no and the process moves to step 310.

このようにして本実施の形態では、演奏情報(MIDIデータ)以外の受信データは他のユーザーに送信している。それにより、ログオンさせている他のユーザーのユーザーモード、他のユーザーが行っている要求を把握できるようにさせている。これは、合奏を行うためには他のユーザーの動きを把握する必要があるためである。録音の指示のための受信データを送信することにより、合奏を行う演奏者にとっては、録音の開始に合わせて合奏を開始させることができる。視聴者Dにとっては、そのような合奏の開始を知ることができる。   Thus, in this embodiment, received data other than performance information (MIDI data) is transmitted to other users. This makes it possible to grasp the user mode of other users who are logged on and the requests made by other users. This is because it is necessary to grasp the movements of other users in order to perform an ensemble. By transmitting the received data for recording instructions, a performer performing an ensemble can start the ensemble at the start of recording. Viewer D can know the start of such an ensemble.

ステップ310では、受信データと併せてリングバッファに格納されたインデクス値を変数iUDBfrに代入する。次のステップ311では、変数aに、ユーザーDBの変数iUDBfrの値をインデクス値とするレコードに格納されているデータcUserModeを代入する。その次のステップ312では、変数bに、ユーザーDBの変数iの値をインデクス値とするレコードに格納されているデータcUserModeを代入する。ステップ313にはその後に移行する。上記想定により、ステップ313への移行は送信対象とする受信データがMIDIデータであることを意味する。そのMIDIデータには、処理すべきタイミングを示す時間データが付加されている。   In step 310, the index value stored in the ring buffer together with the received data is substituted into the variable iUDFfr. In the next step 311, the data cUserMode stored in the record having the value of the variable iUDFfr of the user DB as the index value is substituted for the variable a. In the next step 312, the data cUserMode stored in the record having the value of the variable i of the user DB as the index value is substituted for the variable b. Step 313 then proceeds. Based on the above assumption, the shift to step 313 means that the received data to be transmitted is MIDI data. Time data indicating the timing to be processed is added to the MIDI data.

ステップ313では、変数aの値が示すユーザーモードは演奏者Aであり、且つ変数bの値が示すユーザーモードは演奏者Bであるか否か判定する。受信データが演奏者AをユーザーモードとするユーザーのPC4から送信されたMIDIデータ(を含む演奏情報)であり、且つその受信データの送信を考慮しているユーザーのユーザーモードが演奏者Bであった場合、判定はYESとなってステップ307に移行する。そうでない場合には、判定はNOとなってステップ314に移行する。   In step 313, it is determined whether or not the user mode indicated by the value of the variable a is the player A and the user mode indicated by the value of the variable b is the player B. The received data is MIDI data (including performance information) transmitted from the user's PC 4 in which the performer A is the user mode, and the user mode of the user considering the transmission of the received data is the performer B. If YES, the determination is yes and the process proceeds to step 307. Otherwise, the determination is no and the process moves to step 314.

ステップ314では、変数aの値が示すユーザーモードは演奏者Bであり、且つ変数bの値が示すユーザーモードは演奏者Cであるか否か判定する。受信データが演奏者BをユーザーモードとするユーザーのPC4から送信されたMIDIデータ(を含む演奏情報)であり、且つその受信データの送信を考慮しているユーザーのユーザーモードが演奏者Cであった場合、判定はYESとなってステップ307に移行する。そうでない場合には、判定はNOとなってステップ315に移行する。   In step 314, it is determined whether or not the user mode indicated by the value of the variable a is the player B and the user mode indicated by the value of the variable b is the player C. The received data is MIDI data (including performance information) transmitted from the user's PC 4 with the performer B as the user mode, and the user mode of the user considering the transmission of the received data is the performer C. If YES, the determination is yes and the process proceeds to step 307. Otherwise, the determination is no and the process moves to step 315.

ステップ315では、変数aの値が示すユーザーモードは演奏者Cであり、且つ変数bの値が示すユーザーモードは視聴者Dであるか否か判定する。受信データが演奏者CをユーザーモードとするユーザーのPC4から送信されたMIDIデータ(を含む演奏情報)であり、且つその受信データの送信を考慮しているユーザーのユーザーモードが視聴者Dであった場合、判定はYESとなってステップ316に移行する。そうでない場合には、判定はNOとなってステップ308に移行する。   In step 315, it is determined whether or not the user mode indicated by the value of the variable a is the player C and the user mode indicated by the value of the variable b is the viewer D. The received data is MIDI data (including performance information) transmitted from the user's PC 4 with the performer C as the user mode, and the user mode of the user considering the transmission of the received data is the viewer D. If yes, the determination is yes and the process proceeds to step 316. Otherwise, the determination is no and the process moves to step 308.

このようにして、PC4からサーバー2に送信された演奏情報は、そのユーザーによって特定される、それを送信すべきユーザーに限定して送信する。それにより、図4に示すような演奏情報の流れが実現される。   In this way, the performance information transmitted from the PC 4 to the server 2 is transmitted only to the user who is specified by the user and should transmit it. Thereby, the flow of performance information as shown in FIG. 4 is realized.

ステップ316では、録音を行っているか否か判定する。その録音を行っている場合、判定はYESとなり、ステップ317で受信データを録音用に確保したバッファに保存した後、上記ステップ307に移行する。そうでない場合には、判定はNOとなり、他のステップの処理を実行することなく、そのステップ307に移行する。   In step 316, it is determined whether recording is being performed. If the recording is being performed, the determination is yes, and in step 317, the received data is stored in a buffer reserved for recording, and then the process proceeds to step 307. Otherwise, the determination is no, and the process proceeds to step 307 without executing the process of other steps.

上記ステップ302の判定がNOとなって移行するステップ318でも同様に、録音を行っているか否か判定する。その録音を行っている場合、判定はYESとなり、録音用に確保したバッファに保存した受信データ(演奏情報)をステップ319でファイルとして保存した後、一連の処理を終了する。そうでない場合には、判定はNOとなり、ここで一連の処理を終了する。   Similarly, in step 318 where the determination in step 302 is NO and the process proceeds, it is determined whether recording is being performed. If the recording is being performed, the determination is YES, and the received data (performance information) stored in the buffer reserved for recording is stored as a file in step 319, and then the series of processing ends. Otherwise, the determination is no and the series of processing ends here.

図10は、再生スレッドの実行によって実現される処理のフローチャートである。その再生スレッドは、再生指示のためのデータを受信した場合に、図7に示す全体処理内のステップ125で起動される。次に図10を参照して、その再生スレッドについて詳細に説明する。その再生スレッドは、上述したようにファイルとして保存した演奏情報を随時、ログオン中の全てのユーザーのクライアントに送信することにより、そのクライアントに合奏結果を再生させて視聴させるためのものである。演奏情報の送信は、再生指示を行った後、再生開始を指示することで開始される。   FIG. 10 is a flowchart of processing realized by executing the playback thread. The playback thread is activated at step 125 in the overall process shown in FIG. 7 when data for playback instruction is received. Next, the playback thread will be described in detail with reference to FIG. The playback thread is for sending performance information stored as a file as described above to the clients of all logged-on users at any time so that the ensemble results can be played back and viewed. Transmission of performance information is started by instructing the start of reproduction after instructing reproduction.

その演奏情報は、MIDIデータに時間データを付加したものである。PC4は、その時間データとして、MIDIデータの発生時刻(を示す値)を付加している。その発生時刻は、MIDIデータがキーボード52への演奏操作によって生成されたものであればその演奏操作が行われた時刻であり、そのMIDIデータが受信したものであればそれを処理した時刻である。その時刻は、CPU21に搭載されたハードタイマから取得されるものである。これはPC4(PC3)でも同様である。   The performance information is obtained by adding time data to MIDI data. The PC 4 adds the generation time (indicating value) of MIDI data as the time data. The generation time is the time when the performance operation is performed if the MIDI data is generated by the performance operation on the keyboard 52, and the time when the MIDI data is received if the MIDI data is received. . The time is obtained from a hard timer mounted on the CPU 21. The same applies to PC4 (PC3).

先ず、ステップ401では、再生スレッドの終了を管理するための変数iPlayThreadに1を代入する。続くステップ402では、その変数iPlayThreadの値が1か否か判定する。その値が1でなかった場合、判定はNOとなり、ここで一連の処理を終了する。そうでない場合には、判定はYESとなってステップ403に移行する。特に詳細な説明は省略するが、変数iPlayThreadへの1以外の値の代入は、例えばクライアントからの再生の停止要求によってステップ125で行われる。   First, in step 401, 1 is substituted into a variable iPlayThread for managing the end of the playback thread. In the subsequent step 402, it is determined whether or not the value of the variable iPlayThread is 1. If the value is not 1, the determination is no, and the series of processing ends here. Otherwise, the determination is yes and the process moves to step 403. Although a detailed description is omitted, the assignment of a value other than 1 to the variable iPlayThread is performed in step 125 by a reproduction stop request from the client, for example.

ステップ403では、変数iPlayStartの値が1か否か判定する。その値が1でなかった場合、判定はNOとなって上記ステップ402に戻る。そうでない場合には、判定はYESとなってステップ404に移行する。変数iPlayStartへの1の代入は、例えばクライアントからの再生開始要求によってステップ125で行われる。ステップ402、403で形成される処理ループを繰り返し実行することにより、その再生開始要求が行われるのを待つ。   In step 403, it is determined whether the value of the variable iPlayStart is 1. If the value is not 1, the determination is no and the process returns to step 402 above. Otherwise, the determination is yes and the process moves to step 404. Substitution of 1 to the variable iPlayStart is performed in step 125 by a reproduction start request from the client, for example. By repeatedly executing the processing loop formed in steps 402 and 403, it waits for the reproduction start request to be made.

ステップ404では、再生の対象とするファイルをオープンする。続くステップ405では、送信対象とする演奏情報を管理するための変数iCに0を代入し、変数iFirstDataに1を代入する。その後は、ステップ406で変数lTimeOffsetに現在時刻を示す値を代入してからステップ407に移行する。   In step 404, the file to be reproduced is opened. In the subsequent step 405, 0 is substituted into a variable iC for managing performance information to be transmitted, and 1 is substituted into a variable iFirstData. Thereafter, in step 406, a value indicating the current time is substituted into the variable lTimeOffset, and then the process proceeds to step 407.

録音によって得られたファイルは、例えば所定期間、保存するようにしている。そのため、再生の対象となるファイルが複数、存在している場合、その対象とするファイルを選択できるようになっている。ここでは、それらについての詳細な説明は省略する。   A file obtained by recording is stored for a predetermined period, for example. For this reason, when there are a plurality of files to be reproduced, the file to be reproduced can be selected. Here, detailed description thereof is omitted.

ステップ407では、変数iPlayStartの値が1か否か判定する。その値が1であった場合、変数iCの値で指定される演奏情報をステップ408でファイルから読み込んだ後、ステップ409に移行する。そうでない場合には、判定はNOとなって上記ステップ402に戻る。   In step 407, it is determined whether the value of the variable iPlayStart is 1. If the value is 1, the performance information specified by the value of the variable iC is read from the file in step 408, and the process proceeds to step 409. Otherwise, the determination is no and the process returns to step 402 above.

ステップ409では、変数iCの値で指定される演奏情報がないか否か判定する。演奏情報の再生(送信)が終了した場合、変数iCの値で指定される演奏情報は存在しなくなることから、判定はYESとなって上記ステップ402に戻る。それにより、演奏情報の再生を先頭から再度、開始させる。一方、そうでない場合には、判定はNOとなってステップ410に移行する。   In step 409, it is determined whether there is performance information designated by the value of the variable iC. When the reproduction (transmission) of the performance information is completed, there is no performance information specified by the value of the variable iC, so the determination is YES and the process returns to step 402 above. Thereby, the reproduction of the performance information is started again from the beginning. On the other hand, if not, the determination is no and the process proceeds to step 410.

ステップ410では、ステップ408で読み込んだ演奏情報中の時間データを変数lMidiTimeに代入する。続くステップ411では、変数lTimeに、現在時刻を示す値を代入する。その次に移行するステップ412では、変数iFirstDataの値が1か否か判定する。その値が1であった場合、判定はYESとなり、変数lTimeOffsetの値から変数lMidiTimeの値を減算し、その減算結果に定数CONSTAを加算した値(=lTimeOffset−lNidiTime+CONSTA)をステップ413で変数lDivに代入し、更にステップ414で変数iFirstDataに0を代入した後、ステップ415に移行する。そうでない場合には、判定はNOとなり、次にそのステップ415に移行する。   In step 410, the time data in the performance information read in step 408 is substituted into a variable lMidiTime. In the subsequent step 411, a value indicating the current time is substituted into the variable lTime. In the next step 412, it is determined whether or not the value of the variable iFirstData is 1. If the value is 1, the determination is YES, the value of the variable lTimeiSet is subtracted from the value of the variable lTimeOffset, and the value obtained by adding the constant CONSTA to the subtraction result (= lTimeOffset-lNidiTime + CONSTA) is set to the variable lDiv in step 413. Further, after substituting 0 into the variable iFirstData in step 414, the process proceeds to step 415. Otherwise, the determination is no and the process moves to step 415 next.

MIDIデータには発生時刻を示す時間データが付加されている。このため、変数lTimeOffsetの値から変数lMidiTimeの値を減算して得られる値は、サーバー2上の現在時刻と最初のMIDIデータの発生時刻の時間差を示している。その値に加算する定数CONSTAは、ネットワーク1を介した通信に要する時間の変動を吸収するためのものである。   Time data indicating the time of occurrence is added to the MIDI data. For this reason, the value obtained by subtracting the value of the variable lMidiTime from the value of the variable lTimeOffset indicates the time difference between the current time on the server 2 and the generation time of the first MIDI data. The constant CONSTA added to the value is for absorbing fluctuations in time required for communication via the network 1.

ステップ415では、変数lTimeの値から変数lDivの値を引いた値が、変数lMidiTimeの値より大きいか否か判定する。その大小関係が成立している場合、判定はYESとなり、ステップ417で変数jに0を代入した後、ステップ418に移行する。そうでない場合には、判定はNOとなって上記ステップ407に戻る。   In step 415, it is determined whether or not the value obtained by subtracting the value of the variable lDiv from the value of the variable lTime is greater than the value of the variable lMidiTime. If the magnitude relationship is established, the determination is YES, and after substituting 0 for the variable j in step 417, the process proceeds to step 418. Otherwise, the determination is no and the process returns to step 407.

変数lDivには上述したような値が代入されている。このため、上記大小関係は、ステップ408で読み込んだ演奏情報のMidiデータを処理すべきタイミングとなる前に成立することになる。それにより、本実施の形態では、通信に要する時間が変動しても、クライアントに送信したMIDIデータの処理が遅れるのを確実に回避できるように送信している。   The variable lDiv is assigned a value as described above. For this reason, the above magnitude relationship is established before the timing at which the midi data of the performance information read in step 408 is to be processed. Thereby, in this embodiment, even if the time required for communication fluctuates, the transmission of the MIDI data transmitted to the client is reliably prevented from being delayed.

ステップ418では、変数jの値が上記ユーザー数MAX_USER未満か否か判定する。その値がユーザー数MAX_USER未満であった場合、判定はNOとなってステップ419に移行する。そうでない場合には、判定はYESとなり、ステップ416で変数iCの値をインクリメントした後、上記ステップ407に戻る。   In step 418, it is determined whether the value of the variable j is less than the number of users MAX_USER. If the value is less than the number of users MAX_USER, the determination is no and the process moves to step 419. Otherwise, the determination is yes, and after the value of variable iC is incremented in step 416, the process returns to step 407.

ステップ419では、ユーザーDBの変数jの値をインデクス値とするレコードのデータcStatの値が1、つまりそのレコードにデータが格納されたユーザーがログオン中か否か判定する。そのユーザーがログオン中であった場合、判定はYESとなり、ステップ408で読み込んだ演奏情報をそのユーザーにステップ420で送信し、更にステップ421で変数jの値をインクリメントした後、上記ステップ418に戻る。そうでない場合には、判定はNOとなり、次にステップ421に移行する。   In step 419, it is determined whether or not the value of the data cStat of the record having the value of the variable j of the user DB as the index value is 1, that is, whether or not the user whose data is stored in the record is logged on. If the user is logged on, the determination is yes, the performance information read in step 408 is transmitted to the user in step 420, the value of variable j is further incremented in step 421, and the process returns to step 418. . Otherwise, the determination is no and the process moves to step 421.

次にPC4の動作について詳細に説明する。
サーバー2は、ユーザーがログオンしたクライアントにユーザーDB(図5)を送信する。また、図6に示すように、サーバー2が随時、送信するデータは、ヘッダー、及びそれが付加されたデータ本体に分けて、RAM42、或いは補助記憶装置48に確保した領域であるバッファに格納している。ヘッダーには、データサイズ、データ本体の内容、データ本体の送信者情報、などが格納されている。
Next, the operation of the PC 4 will be described in detail.
The server 2 transmits the user DB (FIG. 5) to the client on which the user has logged on. Further, as shown in FIG. 6, the data to be transmitted by the server 2 as needed is divided into a header and a data body to which the server 2 is added, and stored in a RAM 42 or a buffer which is an area secured in the auxiliary storage device 48. ing. The header stores the data size, the contents of the data body, the sender information of the data body, and the like.

上述したように本実施の形態では、サーバー2によるサービスを利用するには専用のアプリケーションをクライアントに実行させるようにしている。以降は、そのアプリケーションを実行することで実現されるPC4の動作について、図11〜図16のフローチャートを参照して詳細に説明する。そのアプリケーションは、入力装置45を構成する媒体駆動装置にそれが格納された記録媒体をセットしてインストールを指示することで補助記憶装置48に格納される。   As described above, in this embodiment, in order to use the service provided by the server 2, a dedicated application is executed by the client. Hereinafter, the operation of the PC 4 realized by executing the application will be described in detail with reference to the flowcharts of FIGS. The application is stored in the auxiliary storage device 48 by setting the recording medium storing the application in the medium driving device constituting the input device 45 and instructing the installation.

図11は、PC4が実行する全体処理のフローチャートである。その全体処理は、上記アプリケーションを実行することで実現される。始めに図11を参照して、その全体処理について詳細に説明する。そのアプリケーションは、例えば補助記憶装置48からRAM42に読み出して実行される。   FIG. 11 is a flowchart of the entire process executed by the PC 4. The entire process is realized by executing the application. First, the entire process will be described in detail with reference to FIG. The application is read from the auxiliary storage device 48 to the RAM 42 and executed, for example.

先ず、ステップ501では、各種変数の初期化や図6に示すバッファの確保といった初期化を行う。次のステップ502では、ユーザーが入力装置45を操作して行う入力待ちを行う。その入力が行われることでステップ503に移行する。   First, in step 501, initialization such as initialization of various variables and securing of the buffer shown in FIG. 6 is performed. In the next step 502, the user waits for an input performed by operating the input device 45. When the input is performed, the process proceeds to step 503.

ステップ503では、入力がサーバー2との接続要求のためのものか否か判定する。ユーザーが入力装置45に対して接続要求のための操作を行った場合、判定はYESとなり、ステップ504でサーバー2との接続を行うための接続処理を実行した後、上記ステップ502に戻る。そうでない場合には、つまり再生指示、録音指示、或いはユーザーモード変更指示といった別の目的のための操作をユーザーが行った場合には、判定はNOとなり、ステップ503でその操作に対応するためのその他の処理を実行した後、そのステップ502に戻る。   In step 503, it is determined whether or not the input is for a connection request with the server 2. If the user performs an operation for requesting connection to the input device 45, the determination is YES, and after performing connection processing for connecting to the server 2 in step 504, the process returns to step 502. If this is not the case, that is, if the user performs an operation for another purpose such as a playback instruction, a recording instruction, or a user mode change instruction, the determination is NO, and in order to respond to the operation in step 503 After performing other processing, the process returns to step 502.

図12は、上記ステップ504として実行される接続処理のフローチャートである。次に図12を参照して、その接続処理について詳細に説明する。
先ず、ステップ601では、各種変数等の初期化を行う。続くステップ602では、サーバー2に接続するための送準備を行う。その準備により、サーバー2との接続を行ううえでの通信条件が確定され、ネットワークインターフェース44は確定された通信条件に応じて設定される。その準備後に移行するステップ603では、ネットワークインターフェース44を用いて、サーバー2に対する接続要求を行う。この接続要求により、アプリケーションに割り当てられたデータcUserIDが送信される。
FIG. 12 is a flowchart of the connection process executed as step 504. Next, the connection process will be described in detail with reference to FIG.
First, in step 601, various variables and the like are initialized. In subsequent step 602, preparation for transmission for connection to the server 2 is performed. Due to the preparation, communication conditions for connection with the server 2 are determined, and the network interface 44 is set according to the determined communication conditions. In step 603 to which the process proceeds after preparation, a connection request to the server 2 is made using the network interface 44. In response to this connection request, the data cUserID assigned to the application is transmitted.

ステップ603に続くステップ604では、サーバー2との接続が確立し、ログオンが承認されたか否か判定する。ログオンが承認された旨がサーバー2から通知された場合、判定はYESとなってステップ605に移行する。そうでない場合には、判定はNOとなり、ここで一連の処理を終了する。   In step 604 following step 603, it is determined whether or not the connection with the server 2 is established and the logon is approved. If the server 2 notifies that the logon has been approved, the determination is yes and the process moves to step 605. Otherwise, the determination is no and the series of processing ends here.

ステップ605では、ログオンを承認したユーザーに対してサーバー2が送信するユーザーDBを受信するのを待って、それをRAM42、或いは補助記憶装置48に保存する。それ以降は、受信スレッド、送信スレッド、MIDIアウトスレッドを順次、起動させ(ステップ606〜608)、変数iOnConnectに1を代入する(ステップ609)。一連の処理はその代入を行った後に終了する。   In step 605, it waits for reception of the user DB transmitted by the server 2 to the user who has approved the logon, and stores it in the RAM 42 or the auxiliary storage device 48. Thereafter, the reception thread, the transmission thread, and the MIDI out thread are sequentially activated (steps 606 to 608), and 1 is assigned to the variable iOnConnect (step 609). A series of processing ends after the substitution.

上記変数iOnConnectはサーバー2との接続状態を特定するためのものであり、それに代入した1はサーバー2と接続されていることを示す値である。以降は、接続処理で起動させる各種スレッドについて詳細に説明する。   The variable iOnConnect is for specifying the connection state with the server 2, and 1 assigned thereto is a value indicating that the server 2 is connected. Hereinafter, various threads activated by the connection process will be described in detail.

図13は、受信スレッドの実行によって実現される処理のフローチャートである。各種スレッドの説明では、始めに図13を参照してその受信スレッドについて詳細に説明する。その受信スレッドは、サーバー2から受信するデータに対応するためのプログラムである。   FIG. 13 is a flowchart of processing realized by execution of the reception thread. In the description of various threads, first, the reception thread will be described in detail with reference to FIG. The reception thread is a program for handling data received from the server 2.

先ず、ステップ701では、変数flagに1を代入する。その変数flagは、受信スレッドの終了を管理するための変数であり、それに代入した1は、受信スレッドは実行を継続すべき状況にあることを示す値である。それに1を代入した後は、ステップ702に移行して、その値が1か否か判定する。その値が1であった場合、判定はYESとなり、ステップ703でサーバー2からデータを受信するのを待つ。一方、そうでない場合には、判定はNOとなり、ここで一連の処理を終了する。変数flagへの1以外の値の代入は、例えばアプリケーションが実行を終了させる際に行われる。   First, in step 701, 1 is substituted into the variable flag. The variable flag is a variable for managing the end of the receiving thread, and 1 assigned to the variable is a value indicating that the receiving thread is in a state where execution should be continued. After substituting 1 for it, the process proceeds to step 702 to determine whether the value is 1 or not. If the value is 1, the determination is yes, and it waits for data to be received from the server 2 in step 703. On the other hand, if this is not the case, the determination is no, and the series of processing ends here. The assignment of a value other than 1 to the variable flag is performed, for example, when the application terminates execution.

サーバー2からデータを受信すると、ステップ703の判定がYESとなってステップ704に移行する。そのステップ704では、一時的なデータ保存用のバッファrecv_bufに受信データを保存する。次のステップ705では、変数jに0を代入する。その代入後に移行するステップ706では、ユーザーDBの変数jの値をインデクス値とするレコードのデータiFDの値が、バッファrecv_bufに保存した受信データ中の送信者情報(ここではデータiFD)の値(図中「recv_buf[SEND_USER_ID]」と表記)と一致するか否か判定する。それらの値が一致する場合、判定はYESとなってステップ708に移行する。そうでない場合には、判定はNOとなり、次にステップ707で変数jの値をインクリメントした後、再度ステップ706の判定処理を実行する。   When data is received from the server 2, the determination in step 703 is YES and the process proceeds to step 704. In step 704, the received data is stored in a temporary data storage buffer recv_buf. In the next step 705, 0 is substituted into the variable j. In step 706 which moves after the substitution, the value of the data iFD of the record having the value of the variable j of the user DB as the index value is the value of the sender information (here, data iFD) in the received data stored in the buffer recv_buf ( It is determined whether or not it matches “recv_buf [SEND_USER_ID]” in the figure. If the values match, the determination is yes and the process moves to step 708. Otherwise, the determination is no, and after the value of variable j is incremented in step 707, the determination process in step 706 is executed again.

ステップ708では、変数iUDBidに変数jの値を代入する。続くステップ709では、受信データがMIDIデータ(演奏情報)か否か判定する。それがMIDIデータであった場合、判定はYESとなり、受信したMIDIデータに対応するためのMIDI処理をステップ710で実行した後、上記ステップ702に戻る。そうでない場合には、判定はNOとなってステップ711に移行する。   In step 708, the value of variable j is substituted into variable iUDDBid. In the subsequent step 709, it is determined whether or not the received data is MIDI data (performance information). If it is MIDI data, the determination is YES, the MIDI processing for responding to the received MIDI data is executed in step 710, and then the process returns to step 702. Otherwise, the determination is no and the process moves to step 711.

ステップ711では、受信データがユーザーモードの変更要求のためのものか否か判定する。それがその変更要求のためのものであった場合、判定はYESとなり、その変更要求を送信させたユーザーの変更後のユーザーモードを表示部46により通知するためのユーザーモード処理をステップ712で実行した後、上記ステップ702に戻る。そうでない場合には、判定はNOとなってステップ713に移行する。   In step 711, it is determined whether the received data is for a user mode change request. If it is for the change request, the determination is YES, and the user mode process for notifying the display unit 46 of the user mode after the change of the user who sent the change request is executed in step 712. After that, the process returns to step 702. Otherwise, the determination is no and the process moves to step 713.

ステップ713では、受信データがユーザーDBのレコードのデータか否か判定する。そのレコードのデータを受信した場合、判定はYESとなり、保存しているユーザーDBにそのレコードのデータを格納して更新するためのユーザーDB処理を実行した後、上記ステップ702に戻る。そうでない場合には、判定はNOとなってステップ715に移行する。   In step 713, it is determined whether or not the received data is record data in the user DB. When the data of the record is received, the determination is YES, and after executing the user DB process for storing and updating the data of the record in the saved user DB, the process returns to step 702. Otherwise, the determination is no and the process moves to step 715.

上述したようにサーバー2は、ユーザーDBの更新を行うと、その更新によって内容が変化したレコードのデータを各クライアントに送信する。そのため、各クライアントは、サーバー2で行われたユーザーDBに対する更新に連動させる形で自身が管理するユーザーDBを更新し、サーバー2が更新後のユーザーDBを実現させる。そのようにして、サーバー2、クライアントに同じユーザーDBを共有化させることから、そのレコードに格納するデータの設定により、クライアント間で送受信すべきデータの送受信を自動的に行わせることができる。それにより、例えば或る演奏者による音色の変更、音響効果の付加/解除、或いは付加する音響効果の変更、等の設定変更に対し、他のユーザーが使用する各クライアントに自動的に対応させることができるようになる。その結果、各クライアントのユーザーは、演奏者のより実際の演奏に近い演奏を自動的に聴くことができるから、高い利便性が得られる。   As described above, when the server 2 updates the user DB, the server 2 transmits the record data whose contents are changed by the update to each client. Therefore, each client updates the user DB managed by itself in a manner linked to the update to the user DB performed by the server 2, and the server 2 realizes the updated user DB. Thus, since the server 2 and the client share the same user DB, the data to be transmitted / received between the clients can be automatically transmitted / received by setting the data stored in the record. Thus, for example, a setting change such as a timbre change by a player, addition / cancellation of a sound effect, or a change of a sound effect to be added is automatically made correspond to each client used by another user Will be able to. As a result, the user of each client can automatically listen to a performance closer to the actual performance of the performer, thereby obtaining high convenience.

上記設定変更は、再生する演奏情報に対して行うことができる。つまり、オリジナルの演奏の音色を変更させることや、種類、或いは内容がオリジナルとは異なる音響効果を付加させるといったことができる。そのような設定変更をクライアントのユーザーが行っても、各演奏者が演奏を行った際の設定内容を示すデータがユーザーDBに残っていれば、変更前の設定内容に自動的、或いはユーザーの指示により戻すことができる。   The setting change can be performed on the performance information to be reproduced. That is, it is possible to change the timbre of the original performance, or to add an acoustic effect whose type or content is different from the original. Even if the client user makes such a setting change, if the data indicating the setting contents when each performer has performed is left in the user DB, the setting contents before the change are automatically changed or the user's It can be returned by instruction.

ステップ715では、受信データが録音、或いは再生を指示するためのものか否か判定する。録音、或いは再生を指示するためのデータを受信した場合、判定はYESとなり、その指示内容を表示部46により通知するための録音・再生処理をステップ716で実行した後、上記ステップ702に戻る。そうでない場合には、判定はNOとなって次にそのステップ702に移行する。   In step 715, it is determined whether the received data is for instructing recording or reproduction. If data for instructing recording or reproduction has been received, the determination is YES, recording / reproducing processing for notifying the instruction content by the display unit 46 is executed in step 716, and then the processing returns to step 702. Otherwise, the determination is no and the process moves to step 702 next.

図14は、上記ステップ710として実行されるMIDI処理のフローチャートである。次にそのMIDI処理について、図14に示すそのフローチャートを参照して詳細に説明する。   FIG. 14 is a flowchart of the MIDI process executed as step 710. Next, the MIDI processing will be described in detail with reference to the flowchart shown in FIG.

先ず、ステップ801では、変数iFirstMidiの値が1か否か判定する。その値が1だった場合、判定はYESとなってステップ802に移行し、そうでない場合には、判定はNOとなってステップ806に移行する。その変数iFirstMidiへの1の代入は、図12に示す接続処理内のステップ601で行われる。   First, in step 801, it is determined whether or not the value of the variable iFirstMidi is 1. If the value is 1, the determination is yes and the process proceeds to step 802, and if not, the determination is no and the process proceeds to step 806. Substitution of 1 to the variable iFirstMidi is performed in step 601 in the connection process shown in FIG.

ステップ802では、変数iFirstMidiに0を代入する。続くステップ803では、変数lStartTimeに現在時刻を示す値を代入する。それに続くステップ804では、変数ulMに、受信データに付加された時間データを代入する。その代入後はステップ805に移行する。その時間データは、MIDIデータの後に付加されて送信される。   In step 802, 0 is substituted into the variable iFirstMidi. In the subsequent step 803, a value indicating the current time is substituted for the variable lStartTime. In subsequent step 804, the time data added to the received data is substituted into the variable ulM. After the substitution, the process proceeds to step 805. The time data is added after the MIDI data and transmitted.

ステップ805では、変数lTimeOffsetに、変数lStartTimeの値から変数ulMの値を減算した値(=lStartTime−ulM)を代入する。次のステップ806では、電子楽器5に出力すべきMIDIデータ用に確保したバッファ(MIDIアウトバッファ)の変数wPtrの値で指定される場所、及びその値をインクリメントした値で指定される場所(図中それらは「lMidiOutBuf[wPtr,wPtr+P1]」と表記)に、バッファrecv_bufに格納した受信データ中のMIDIデータ、時間データをそれぞれ格納する。その次のステップ807では、変数wPtrの値を更新、ここではそれまでの値に2を加算した値への更新を行う。その後、一連の処理を終了する。   In step 805, a value obtained by subtracting the value of the variable ulM from the value of the variable lStartTime (= lStartTime-ulM) is substituted into the variable lTimeOffset. In the next step 806, the location specified by the value of the variable wPtr of the buffer (MIDI out buffer) reserved for the MIDI data to be output to the electronic musical instrument 5, and the location specified by the incremented value (see FIG. Among them, the MIDI data and the time data in the received data stored in the buffer recv_buf are respectively stored in “lMidiOutBuf [wPtr, wPtr + P1]”). In the next step 807, the value of the variable wPtr is updated. Here, the value is updated to a value obtained by adding 2 to the previous value. Thereafter, the series of processing is terminated.

その変数wPtrは、図12に示す接続処理内のステップ601で初期値(例えば0)が代入される変数である。変数lTimeOffsetに代入する、変数lStartTimeの値から変数ulMの値を減算した値(=lStartTime−ulM)は、現在時刻を基準にした場合に、最初の受信したMIDIデータに付加されている時間データが示す発生時刻の考慮すべきシフト量(時間差)を表している。   The variable wPtr is a variable to which an initial value (for example, 0) is substituted in step 601 in the connection process shown in FIG. The value obtained by subtracting the value of the variable ulM from the value of the variable lStartTime to be substituted for the variable lTimeOffset (= lStartTime-ulM) is the time data added to the first received MIDI data when the current time is used as a reference. This represents the shift amount (time difference) to be considered in the occurrence time shown.

図15は、図12に示す接続処理内のステップ607で起動される送信スレッドの実行によって実現される処理のフローチャートである。次に図15を参照して、その送信スレッドについて詳細に説明する。   FIG. 15 is a flowchart of processing realized by the execution of the transmission thread activated in step 607 in the connection processing shown in FIG. Next, the transmission thread will be described in detail with reference to FIG.

サーバー2に送信する対象とすべきMIDIデータは時間データと共にその送信用に確保したバッファ(送信バッファ)に格納するようにしている。図15中に表記の「rPtrS」は、そのバッファからデータを読み出す場所を管理するための変数であり、図12に示す接続処理内のステップ601で初期値(例えば0)が代入される。また、表記の「iMidiSendThreadCont」は、送信スレッドの終了を管理するための変数である。   MIDI data to be transmitted to the server 2 is stored together with time data in a buffer (transmission buffer) reserved for transmission. “RPtrS” shown in FIG. 15 is a variable for managing a location where data is read from the buffer, and an initial value (for example, 0) is substituted in step 601 in the connection process shown in FIG. The notation “iMidiSendThreadCont” is a variable for managing the end of the transmission thread.

先ず、ステップ901では、変数iMidiSendThreadContに1を代入する。続くステップ902では、変数iMidiSendThreadContの値が1か否か判定する。その値が1でなかった場合、判定はNOとなり、ここで一連の処理を終了する。そうでない場合には、判定はYESとなってステップ903に移行する。   First, in step 901, 1 is substituted into the variable iMidiSendThreadCont. In the following step 902, it is determined whether or not the value of the variable iMidiSendThreadCont is 1. If the value is not 1, the determination is no, and the series of processing ends here. Otherwise, the determination is yes and the process moves to step 903.

その変数iMidiSendThreadContへの1以外の値の代入は、例えばユーザーがユーザーモードとして視聴者Dへの変更を要求した場合に、図11に示す全体処理内のステップ505で行われる。そのステップ505では、視聴者Dから演奏者A〜Cへのユーザーモードの変更が要求された場合に、初期化を行い送信スレッドを起動させるようになっている。   Substitution of a value other than 1 to the variable iMidiSendThreadCont is performed in step 505 in the overall processing shown in FIG. 11 when the user requests a change to the viewer D as the user mode, for example. In step 505, when a change of the user mode from the viewer D to the performers A to C is requested, initialization is performed and a transmission thread is activated.

ステップ903では、送信バッファに送信すべきデータがないか否か判定する。送信すべきデータが存在していない場合、判定はYESとなって上記ステップ902に戻る。そうでない場合には、判定はNOとなってステップ904に移行する。   In step 903, it is determined whether there is data to be transmitted in the transmission buffer. If there is no data to be transmitted, the determination is yes and the process returns to step 902. Otherwise, the determination is no and the process moves to step 904.

ステップ904では、変数wParamに、送信バッファの変数rPtrSの値で指定される場所に格納されているデータ(図中「ulMidiSendBuf[wPtrS]」と表記のMIDIデータ)を代入する。その次に移行するステップ905では、変数lParamに、送信バッファの変数rPtrSの値をインクリメントした値で指定される場所に格納されているデータ(図中「ulMidiSendBuf[wPtrS+1]」と表記の時間データ)を代入する。その後に実行するステップ906では、MIDIデータ送信用のヘッダーを生成しバッファsend_bufにセットする。以降は、変数wParam、lParamrにそれぞれ代入した値をバッファsend_bufにセットし(ステップ907)、バッファsend_bufにセットしたデータをサーバー2に送信させ(ステップ908)、変数rPtrSにそれまでの値に2を加算した値を新たに代入する(ステップ909)。ステップ910にはその代入後に移行する。   In step 904, the data stored in the location specified by the value of the variable rPtrS in the transmission buffer (MIDI data represented as “ulMidiSendBuf [wPtrS]” in the figure) is substituted into the variable wParam. In the next step 905, data stored in a location specified by a value obtained by incrementing the value of the variable rPtrS of the transmission buffer in the variable lParam (time data expressed as “ulMidiSendBuf [wPtrS + 1]” in the figure). Is assigned. In the subsequent step 906, a header for MIDI data transmission is generated and set in the buffer send_buf. Thereafter, the values assigned to the variables wParam and lParamr are set in the buffer send_buf (step 907), the data set in the buffer send_buf is transmitted to the server 2 (step 908), and the variable rPtrS is set to 2 so far. The added value is newly substituted (step 909). Step 910 proceeds after the substitution.

ステップ910では、変数rPtrSの値が送信バッファにデータを格納可能な最大数SIZE以上か否か判定する。その値が最大数SIZE以上であった場合、判定はYESとなり、ステップ911で変数rPtrSに0を代入した後、上記ステップ903に戻る。そうでない場合には、判定はNOとなり、他のステップの処理を実行することなく、そのステップ903に戻る。   In step 910, it is determined whether the value of the variable rPtrS is equal to or greater than the maximum number SIZE that can store data in the transmission buffer. If the value is greater than or equal to the maximum number SIZE, the determination is yes, and after substituting 0 for the variable rPtrS in step 911, the process returns to step 903. Otherwise, the determination is no and the process returns to step 903 without executing the process of the other steps.

図16は、図12に示す接続処理内のステップ608で起動されるMIDIアウトスレッドの実行によって実現される処理のフローチャートである。最後に図16を参照して、そのアウトスレッドについて詳細に説明する。そのアウトスレッドは、MIDIアウトバッファに格納されたMIDIデータの処理、処理したMIDIデータ、及び電子楽器5から入力したMIDIデータの送信バッファへの格納を実現させるためのものである。   FIG. 16 is a flowchart of processing realized by execution of the MIDI out thread started at step 608 in the connection processing shown in FIG. Finally, the out-thread will be described in detail with reference to FIG. The out thread is for realizing processing of MIDI data stored in the MIDI out buffer, storage of processed MIDI data, and storage of MIDI data input from the electronic musical instrument 5 in the transmission buffer.

クライアント間で送受信すべき演奏情報の送受信はサーバー2の制御下で行われる。このことから、MIDIアウトスレッドは、受信したMIDIデータ、及び電子楽器5から入力したMIDIデータを共にサーバー2に送信する対象としている。MIDIデータに付加された時間データが示す発生時刻は、それを送信したPC4での過去のものであるから、そのMIDIデータを処理した時刻に変更している。それにより、受信したMIDIデータ、及び電子楽器5から入力したMIDIデータの時間データはそれらを送信するPC4を基準としたものとさせている。このため、送信したMIDIデータを受信するクライアントは、MIDIデータを区別することなく、全てのMIDIデータを適切に処理することができる。   Transmission / reception of performance information to be transmitted / received between clients is performed under the control of the server 2. For this reason, the MIDI out thread is a target for transmitting both the received MIDI data and the MIDI data input from the electronic musical instrument 5 to the server 2. Since the generation time indicated by the time data added to the MIDI data is a past time in the PC 4 that transmitted the MIDI data, it is changed to the time when the MIDI data was processed. Thus, the received MIDI data and the time data of the MIDI data input from the electronic musical instrument 5 are based on the PC 4 that transmits them. Therefore, a client that receives the transmitted MIDI data can appropriately process all the MIDI data without distinguishing the MIDI data.

図16中に表記の「rPtr」は、送信バッファからデータを読み出す場所を管理するための変数であり、図12に示す接続処理内のステップ601で初期値(例えば0)が代入される。また、表記の「iMidiOutThreadCont」は、MIDIアウトスレッドの終了を管理するための変数である。   “RPtr” shown in FIG. 16 is a variable for managing a location to read data from the transmission buffer, and an initial value (for example, 0) is substituted in step 601 in the connection process shown in FIG. The notation “iMidiOutThreadCont” is a variable for managing the end of the MIDI out thread.

先ず、ステップ1001では、変数iMidiOutThreadContに1を代入する。続くステップ1002では、変数iMidiOutThreadContの値が1か否か判定する。その値が1でなかった場合、判定はNOとなり、ここで一連の処理を終了する。そうでない場合には、判定はYESとなってステップ1003に移行する。   First, in step 1001, 1 is substituted into the variable iMidiOutThreadCont. In the subsequent step 1002, it is determined whether or not the value of the variable iMidiOutThreadCont is 1. If the value is not 1, the determination is no, and the series of processing ends here. Otherwise, the determination is yes and the process moves to step 1003.

その変数iMidiOutThreadContへの1以外の値の代入は、例えばユーザーがユーザーモードとして視聴者Dへの変更を要求した場合に、図11に示す全体処理内のステップ505で行われる。そのステップ505では、視聴者Dから演奏者A〜Cへのユーザーモードの変更が要求された場合に、初期化を行いMIDIアウトスレッドを起動させるようになっている。   Substitution of a value other than 1 to the variable iMidiOutThreadCont is performed in step 505 in the overall processing shown in FIG. 11 when the user requests a change to the viewer D as the user mode, for example. In step 505, when a change of the user mode from the viewer D to the performers A to C is requested, initialization is performed and a MIDI out thread is started.

ステップ1003では、変数lNowTimeに現在時刻を示す値を代入する。続くステップ1004では、定数lDelay、及びMIDIアウトバッファの変数rPtrの値をインクリメントした値で指定される場所に格納された時間データ(図中「lMidiOutBuf[rPtr+1]」と表記)の値をそれぞれ変数lTimeOffsetの値に加算し、その加算結果を変数lNowTimeの値から減算した値(=lNowTime−(lTimeOffset+lDelay+lMidiOutBuf[rPtr+1]))を変数aに代入する。その代入後はステップ1005に移行する。   In step 1003, a value indicating the current time is substituted into a variable lNowTime. In the subsequent step 1004, the value of the time data (denoted as “lMidiOutBuf [rPtr + 1]” in the figure) stored in the location designated by the constant lDelay and the value of the MIDI out buffer variable rPtr incremented is set to the variable lTimeOffset, respectively. The value obtained by subtracting the addition result from the value of the variable lNowTime (= lNowTime- (lTimeOffset + lDelay + lMidiOutBuf [rPtr + 1])) is substituted into the variable a. After the substitution, the process proceeds to step 1005.

上記定数lDelayは、ネットワーク1、及びサーバー2を介した送受信に係る通信時間の変動を吸収するために定めた定数である。変数lTimeOffsetの値は上記時間データ(iMidiOutBuf[rPtr+1])が示す発生時刻の考慮すべきシフト量(時間差)を表していることから、ステップ1004で変数aに代入する値は、その時間データが付加されたMIDIデータを処理すべきタイミングが到来することで0以上の値となる。その定数lDelayは各クライアントのユーザーが変更できるようにしても良い。   The constant lDelay is a constant determined to absorb a change in communication time related to transmission / reception via the network 1 and the server 2. Since the value of the variable lTimeOffset represents the shift amount (time difference) to be considered in the generation time indicated by the time data (iMidiOutBuf [rPtr + 1]), the value to be substituted for the variable a in step 1004 is added by the time data. When the timing for processing the processed MIDI data arrives, the value becomes 0 or more. The constant lDelay may be changed by the user of each client.

ステップ1005では、その変数aの値が0以上か否か判定する。その値が0未満であった場合、判定はNOとなってステップ1012に移行する。そうでない場合には、判定はYESとなってステップ1006に移行し、MIDIアウトバッファの変数rPtrの値で指定される場所に格納されたMIDIデータ(図中「lMidiOutBuf[rPtr]」と表記)が楽音の発音に係わるものか否か判定する。そのMIDIデータが楽音の発音に係わるものでない場合、判定はNOとなってステップ1012に移行する。そうでない場合には、判定はYESとなってステップ1007に移行する。   In step 1005, it is determined whether or not the value of the variable a is 0 or more. If the value is less than 0, the determination is no and the process moves to step 1012. Otherwise, the determination is yes and the process moves to step 1006, where the MIDI data stored in the location specified by the value of the variable rPtr in the MIDI out buffer (indicated as “lMidiOutBuf [rPtr]” in the figure). It is determined whether or not it is related to the pronunciation of a musical sound. If the MIDI data is not related to the pronunciation of a musical sound, the determination is no and the process moves to step 1012. Otherwise, the determination is yes and the process moves to step 1007.

ステップ1007では、そのMIDIデータをMIDI I/F47により電子楽器5に出力させる。次のステップ1008では、ユーザーのユーザーモードを示す値を変数bに代入する。それに続くステップ1009では、変数bの値とステップ1007で処理したMIDIデータの送信者のユーザーモードを示す値(図中「USER_MODE_PLAYERMAX」と表記。そのMIDIデータのヘッダーに格納されているデータiFDを用いてユーザーDBを参照することにより特定される)の大小関係を比較して、その送信者がユーザーよりも上流で演奏する演奏者か否か判定する。その送信者がユーザーよりも上流で演奏する演奏者であった場合、判定はYESとなってステップ1010に移行する。そうでない場合には、判定はNOとなって上記ステップ1004に戻る。   In step 1007, the MIDI data is output to the electronic musical instrument 5 by the MIDI I / F 47. In the next step 1008, a value indicating the user mode of the user is substituted into the variable b. In the subsequent step 1009, the value of the variable b and the value indicating the user mode of the sender of the MIDI data processed in step 1007 (indicated as “USER_MODE_PLAYERMAX” in the figure. Data iFD stored in the header of the MIDI data is used. Are compared with each other by referring to the user DB), and it is determined whether or not the sender is a player who plays upstream from the user. If the sender is a player performing upstream from the user, the determination is yes and the process moves to step 1010. Otherwise, the determination is no and the process returns to step 1004.

ステップ1010では、変数bの値と視聴者Dのユーザーモードを示す値(図中「USER_MODE_AUDIENCE」と表記)の大小関係を比較して、ユーザーが視聴者Dでないか否か判定する。そのユーザーが視聴者Dでない場合、判定はYESとなり、ステップ1007で処理したMIDIデータ、及び時間データとして変数lNowTimeの値をステップ1011で送信バッファに格納した後、上記ステップ1004に戻る。そうでない場合には、判定はNOとなり、他のステップの処理を実行することなく、そのステップ1004に戻る。MIDIデータに時間データとして変数lNowTimeの値を付加することにより、そのMIDIデータの発生時刻はそのMIDIデータを送信するPC4で処理した時刻に更新される。   In step 1010, the magnitude relationship between the value of the variable b and the value indicating the user mode of the viewer D (indicated as “USER_MODE_AUDIOENCE” in the figure) is compared to determine whether or not the user is the viewer D. If the user is not the viewer D, the determination is YES, the MIDI data processed in step 1007 and the value of the variable lNowTime as time data are stored in the transmission buffer in step 1011, and the process returns to step 1004. Otherwise, the determination is no and the process returns to step 1004 without executing the process of other steps. By adding the value of the variable lNowTime as time data to the MIDI data, the generation time of the MIDI data is updated to the time processed by the PC 4 that transmits the MIDI data.

上記ステップ1005、或いは1006の判定がNOとなって移行するステップ1012では、電子楽器5からMIDIデータを入力したか否か判定する。そのMIDIデータを入力した場合、判定はYESとなってステップ1011に移行し、そのMIDIデータ、及び時間データとしての変数lNowTimeの値を送信バッファに格納する。一方、そうでない場合には、判定はNOとなって上記ステップ1002に戻る。   In step 1012 in which the determination in step 1005 or 1006 is NO and the process proceeds to step 1012, it is determined whether MIDI data is input from the electronic musical instrument 5. If the MIDI data is input, the determination is yes and the process proceeds to step 1011, where the MIDI data and the value of the variable lNowTime as time data are stored in the transmission buffer. On the other hand, if not, the determination is no and the process returns to step 1002.

なお、本実施の形態では、演奏操作の内容を示すデータとしてMIDIデータを採用しているが、別のデータ、例えば楽音の波高値を示す波形データ、或いはその符号化データを採用しても良い。時間データも同様に、発生時刻を示すものではなくとも良い。例えば直前に送信した演奏情報との間の処理タイミングの差を示すものであっても良い。ネットワーク2の送信に要する通信時間に生じる変動分が無視できるような場合には、時間データは付加しなくとも良い。   In this embodiment, MIDI data is used as data indicating the contents of the performance operation. However, other data, for example, waveform data indicating the peak value of a musical sound, or encoded data thereof may be used. . Similarly, the time data may not indicate the time of occurrence. For example, it may indicate the difference in processing timing with the performance information transmitted immediately before. In the case where fluctuations occurring in the communication time required for transmission on the network 2 can be ignored, the time data need not be added.

また、合奏結果として録音する対象は、演奏者CをユーザーモードとするユーザーのPC4から送信されるMIDIデータ(演奏情報)としているが、その対象を任意に選択できるようにしても良い。PC4の複数のユーザーがその選択をそれぞれ行えるようにしても良い。送信される演奏情報には送信者を示す情報が付加されていることから、複数のユーザーのそれぞれの要望に沿った録音を並行して行うことは容易である。   The object to be recorded as the ensemble result is MIDI data (performance information) transmitted from the user's PC 4 with the performer C as the user mode. However, the object may be arbitrarily selected. A plurality of users of the PC 4 may perform the selection. Since information indicating the sender is added to the performance information to be transmitted, it is easy to perform recording in accordance with the requests of a plurality of users in parallel.

上述したようなサーバー2(ネット合奏システム)を実現させるようなプログラム(アプリケーション)は、CD−ROM、DVD、或いは着脱自在なフラッシュメモリ等の記録媒体に記録させて配布しても良い。公衆網等のネットワークを介して、そのプログラムの一部、若しくは全部を配信するようにしても良い。そのようにした場合には、ユーザーはプログラムを取得してデータ処理装置にロードすることにより、その装置を用いて本発明を適用したネット合奏システムを構築することができる。このことから、記録媒体は、プログラムを配信する装置がアクセスできるものであっても良い。   A program (application) for realizing the server 2 (net concert system) as described above may be distributed by being recorded on a recording medium such as a CD-ROM, a DVD, or a removable flash memory. Part or all of the program may be distributed via a network such as a public network. In such a case, the user can construct a net concert system to which the present invention is applied by using the apparatus by acquiring the program and loading it into the data processing apparatus. Therefore, the recording medium may be accessible by a device that distributes the program.

本実施の形態によるネット合奏システムを用いて構築されたネットワークシステムの構成を説明する図である。It is a figure explaining the structure of the network system constructed | assembled using the network concert system by this Embodiment. 本実施の形態によるネット合奏システムを搭載したサーバーの構成を説明する図である。It is a figure explaining the structure of the server carrying the network concert system by this Embodiment. 合奏を行う演奏者が使用するパーソナルコンピューター、及び電子楽器の構成を説明する図である。It is a figure explaining the structure of the personal computer and electronic musical instrument which the player who performs an ensemble uses. 仮想的な合奏の実現方法を説明する図である。It is a figure explaining the realization method of virtual ensemble. 本実施の形態によるネット合奏システムを搭載したサーバーが合奏実現用に管理するデータを説明する図である。It is a figure explaining the data which the server carrying the network ensemble system by this Embodiment manages for ensemble realization. パーソナルコンピューターによる受信したデータの保存方法を説明する図である。It is a figure explaining the preservation | save method of the data received with the personal computer. 本実施の形態によるネット合奏システムを搭載したサーバーが実行する全体処理のフローチャートである。It is a flowchart of the whole process which the server carrying the network concert system by this Embodiment performs. 認証処理のフローチャートである。It is a flowchart of an authentication process. 図7に示す全体処理で起動される送信スレッドの実行によって実現される処理のフローチャートである。It is a flowchart of the process implement | achieved by execution of the transmission thread started by the whole process shown in FIG. 図7に示す全体処理で起動される再生スレッドの実行によって実現される処理のフローチャートである。It is a flowchart of the process implement | achieved by execution of the reproduction | regeneration thread started by the whole process shown in FIG. 合奏を行う演奏者のパーソナルコンピューターが実行する全体処理のフローチャートである。It is a flowchart of the whole process which the personal computer of the player who performs an ensemble performs. 接続処理のフローチャートである。It is a flowchart of a connection process. 図12に示す接続処理で起動される受信スレッドの実行によって実現される処理のフローチャートである。It is a flowchart of the process implement | achieved by execution of the reception thread started by the connection process shown in FIG. MIDI処理のフローチャートである。It is a flowchart of a MIDI process. 図12に示す接続処理で起動される送信スレッドの実行によって実現される処理のフローチャートである。It is a flowchart of the process implement | achieved by execution of the transmission thread started by the connection process shown in FIG. 図12に示す接続処理で起動されるMIDIアウトスレッドの実行によって実現される処理のフローチャートである。It is a flowchart of the process implement | achieved by execution of the MIDI out thread started by the connection process shown in FIG.

符号の説明Explanation of symbols

1 ネットワーク
2 サーバー
3、4 パーソナルコンピューター
5 電子楽器
21、41 CPU
22、42 RAM
23、43 ROM
24、44 ネットワークインターフェース
25、45 入力装置
27、48 補助記憶装置
28、49 バス
47、51 MIDI I/F
52 キーボード
53 音源・サウンドシステム
1 Network 2 Server 3, 4 Personal Computer 5 Electronic Musical Instrument 21, 41 CPU
22, 42 RAM
23, 43 ROM
24, 44 Network interface 25, 45 Input device 27, 48 Auxiliary storage device 28, 49 Bus 47, 51 MIDI I / F
52 Keyboard 53 Sound source / Sound system

Claims (4)

ネットワークを利用して複数の演奏者による合奏を仮想的に可能とさせるための方法であって、
前記合奏を所望する演奏者毎に、該合奏のために演奏者が行った演奏内容を示す演奏情報を送信すべき他の演奏者を送信対象者として予め設定し、
前記設定により前記送信対象者が存在する演奏者が使用するそれぞれの端末装置に、該演奏者自身の演奏による演奏情報を前記ネットワーク上に送信させ、
前記設定により、前記送信対象者、及び自身を該送信対象者とする他の演奏者が共に存在する演奏者が使用するそれぞれの端末装置に、該他の演奏者の使用する端末装置から送信されて受信される演奏情報を更に前記ネットワーク上に送信させ、
前記送信対象者である各演奏者に、前記端末装置が受信する演奏情報による一人以上の演奏者の演奏と合わせた演奏をそれぞれ行わせて前記合奏を仮想的に実現させる、
ことを特徴とする合奏実現方法。
A method for virtually enabling an ensemble by multiple players using a network,
For each performer who desires the ensemble, other performers who should transmit performance information indicating the performance contents performed by the performer for the ensemble are set in advance as transmission subjects,
According to the setting, each terminal device used by a player who has the transmission target person transmits performance information by the player's own performance on the network,
According to the setting, the terminal device used by the other performer is transmitted to each terminal device used by the performer who has both the transmission subject and the other performer who is the transmission subject. Further transmitting performance information received on the network,
Causing each performer who is the transmission target to perform the performance together with the performance of one or more performers according to the performance information received by the terminal device to virtually realize the ensemble,
The ensemble realization method characterized by the above.
ネットワークを介して接続される端末装置のユーザーを対象に合奏を仮想的に実現させるシステムであって、
前記ネットワークを介して、前記ユーザーが楽器に対して行なった演奏内容を示す演奏情報をリアルタイムに前記端末装置から受信する情報受信手段と、
複数のユーザーが合奏を行う場合に、該複数のユーザー間で予め設定される演奏情報を送受信すべき関係に従って、前記情報受信手段が受信した演奏情報を、該演奏情報を送信させた端末装置のユーザーによって特定されるユーザーの使用する端末装置に必要に応じて送信する情報送信手段と、
を具備することを特徴とするネット合奏システム。
A system for virtually realizing ensemble for users of terminal devices connected via a network,
Information receiving means for receiving, in real time, performance information indicating performances performed on the musical instrument by the user from the terminal device via the network;
When a plurality of users perform an ensemble, the performance information received by the information receiving means is transmitted according to the relationship in which performance information set in advance between the plurality of users is to be transmitted and received. Information transmitting means for transmitting to the terminal device used by the user specified by the user, if necessary;
A network ensemble system comprising:
前記合奏のための演奏をユーザーが行っている端末装置から前記情報受信手段が受信する演奏情報を保存する情報保存手段、
を更に具備することを特徴とする請求項2記載のネット合奏システム。
Information storage means for storing performance information received by the information receiving means from a terminal device in which a user is performing for the ensemble;
The net ensemble system according to claim 2, further comprising:
ネットワークを介して接続される端末装置のユーザーを対象に合奏を仮想的に実現させるネット合奏システムの構築に用いられるデータ処理装置に実行させるプログラムであって、
前記ネットワークを介して、前記ユーザーが楽器に対して行なった演奏内容を示す演奏情報をリアルタイムに前記端末装置から受信する機能と、
複数のユーザーが合奏を行う場合に、該複数のユーザー間で予め設定される演奏情報を送受信すべき関係に従って、前記受信する機能により受信した演奏情報を、該演奏情報を送信させた端末装置のユーザーによって特定されるユーザーの使用する端末装置に必要に応じて送信する機能と、
を実現させるためのプログラム。
A program to be executed by a data processing apparatus used for construction of a network ensemble system that virtually realizes an ensemble for users of terminal devices connected via a network,
A function for receiving, in real time, performance information indicating the performance performed by the user on the musical instrument from the terminal device via the network;
When a plurality of users perform an ensemble, the performance information received by the receiving function according to the relationship in which performance information set in advance between the plurality of users should be transmitted and received is transmitted from the terminal device that has transmitted the performance information. A function to send to the terminal device used by the user specified by the user, if necessary,
A program to realize
JP2005223621A 2005-08-02 2005-08-02 Concert embodying method, network concert system, and program Withdrawn JP2007041174A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005223621A JP2007041174A (en) 2005-08-02 2005-08-02 Concert embodying method, network concert system, and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005223621A JP2007041174A (en) 2005-08-02 2005-08-02 Concert embodying method, network concert system, and program

Publications (1)

Publication Number Publication Date
JP2007041174A true JP2007041174A (en) 2007-02-15

Family

ID=37799228

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005223621A Withdrawn JP2007041174A (en) 2005-08-02 2005-08-02 Concert embodying method, network concert system, and program

Country Status (1)

Country Link
JP (1) JP2007041174A (en)

Similar Documents

Publication Publication Date Title
JP4382786B2 (en) Audio mixdown device, audio mixdown program
JP2018519538A (en) Karaoke processing method and system
US7554027B2 (en) Method to playback multiple musical instrument digital interface (MIDI) and audio sound files
JP4755672B2 (en) Content editing apparatus, method and program
JP5803056B2 (en) Acoustic processing system and acoustic processing method
JP4265082B2 (en) Server client system and server device
JP2011119847A (en) Communication system and communication method
JP5380109B2 (en) Karaoke service system, distribution server, terminal device
JP2009282254A (en) Login user copy system among plural karaoke terminals
JP2007041174A (en) Concert embodying method, network concert system, and program
JP4096734B2 (en) Music activity support system and program
JP3864808B2 (en) Terminal device and program thereof
JP2008171194A (en) Communication system, communication method, server, and terminal
JP2014153516A (en) Determination device
JP2021190895A (en) Control method and control system
CN112905834A (en) Song list management method, medium, device and computing equipment
JP4134691B2 (en) Information duplication method, network system, and information processing apparatus
JP2009124543A (en) Content transmission device, content transmission method, and computer program
JP4126246B2 (en) Performance data communication system
JP4131678B2 (en) Performance data communication system
JP5191336B2 (en) Sound system with group performance practice support function
JP5645327B2 (en) DISTRIBUTION DEVICE, DISTRIBUTION METHOD, DISTRIBUTION CONTROL COMPUTER PROGRAM, REPRODUCTION DEVICE, REPRODUCTION METHOD, REPRODUCTION CONTROL COMPUTER PROGRAM, AND DISTRIBUTION SYSTEM
CN117379787A (en) Music control method and device in game, readable storage medium and electronic equipment
Voloskyi Development of web audio app" Music equalizer"
JP7063533B2 (en) Karaoke system

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20081007