図1は、本発明の実施の一形態である表示システム1の構成を示す。表示装置である表示システム1は、サーバ10およびそのサーバ10にネットワークによって接続される複数の表示部であるクライアント20、たとえばクライアントA20A〜クライアントD20Dを含む。ネットワークは、たとえば無線LAN(Local Area Network)もしくは有線LANによるLAN30によるネットワーク、またはIEEE(Institute of
Electrical and Electronic Engineers)1394などの規格を用いるネットワークである。表示装置の音出力方法は、表示システム1によって処理される。
サーバ10は、コンテンツなどのデータおよびプログラムを記憶する半導体メモリあるいはハードディスク装置などによって構成される記憶部11と、記憶部11に記憶されるコンテンツをストリーミングデータに変換する映像出力部12と、映像出力部12によって変換されたストリーミングデータあるいは各クライアントの位置情報などの情報を、ネットワークを介してクライアント20と送受信するサーバ通信部13と、図示しない入力装置と、図示しない出力装置と、これらを制御するサーバ制御部14とを含む。
サーバ制御部14は、たとえばCPU(Central Processing Unit)などで構成され、記憶部11に記憶されるプログラムを実行することによって制御する。サーバ制御部14は、サーバ通信部13によって、各クライアントから各クライアントおよび隣接するクライアントに関する隣接情報を取得し、取得した隣接情報に基づいて、クライアントの構成と各クライアントの配置位置を設定する。クライアントおよび隣接するクライアントに関する隣接情報は、隣接情報を送信するクライアントのクライアントID(Identification
)、上下左右に隣接するクライアントの有無、隣接するクライアントのクライアントIDなどの情報を含む。クライアントIDは、各クライアントを識別するための情報である。設定されたクライアントの構成および各クライアントの配置位置などの情報を含む構成情報は、それぞれのクライアントに送信される。
クライアントA20Aは、サーバ10および他のクライアント20と通信を行うクライアント通信部21と、画面に向かって左側に配置され、音信号を音に変換して出力するL−SPK(Left Speaker:左スピーカ)22と、画面に向かって右側に配置され、音信号を音に変換して出力するR−SPK(Right Speaker:右スピーカ)23と、クライアント通信部21によって受信されたストリーミングデータからアナログの音信号に変換し、変換した音をL−SPK22およびR−SPK23に送り、L−SPK22およびR−SPK23からの出力を制御する音声部24と、クライアント通信部21によって受信されたストリーミングデータから映像データに変換して、表示、必要であれば拡大して表示する液晶ディスプレイなどによって構成される表示画面部25と、上下左右に隣接するクライアントの有無の検出および隣接するクライアントがある場合はその隣接するクライアントの識別情報を取得する位置検出部26と、ユーザがデータを入力するためのリモートコントローラ(以下「リモコン」という)などによって構成される入力部27と、図示しない記憶装置と、これらを制御するクライアント制御部28とを含む。クライアントB20B〜クライアントD20Dは、クライアントA20Aと同じ構成であるので、説明は省略する。
クライアント制御部28は、たとえばCPUなどで構成され、半導体メモリあるいはハードディスク装置などによって構成される図示しない記憶装置に記憶されるプログラムを実行することによって制御する。クライアント制御部28は、サーバ10からクライアント通信部21によって受信した構成情報に基づいて、受信したコンテンツの画像を分割した分割画像のうちで自クライアントが表示すべき分割画像と分割画像の拡大率とを決定する。さらに、音声部24によって、サーバ10からの指示に基づき、音の出力を制御する。音声部24は、クライアント通信部21によって受信されたストリーミングデータからアナログの音信号に変換する際、ステレオである場合は、左チャネルの音信号と、右チャネルの音信号とに変換し、L−SPK22またはR−SPK23から出力させる。その際、左チャネルの音信号をL−SPK22から出力させることもできるし、R−SPK23から出力させることもできる。同様に、右チャネルの音信号をL−SPK22から出力させることもできるし、R−SPK23から出力させることもできる。さらに、L−SPK22およびR−SPK23をそれぞれ個別にミュートして音の出力を抑止し、あるいは出力する音量を個別に変更することができる。
図2は、図1に示した複数のクライアント20に表示される画像の例を示す。図2(a)は、各クライアントともコンテンツ1の画像を表示する例である。クライアントA20A〜クライアントD20Dには、同じコンテンツ1の画像が表示されている。このとき、クライアントの画面に向かって左側のクライアントA20AおよびクライアントC20Cは、ステレオの左チャネルの音Lを出力し、向かって右側のクライアントB20BおよびクライアントD20Dは、ステレオの右チャネルの音Rを出力する。
図2(b)は、コンテンツ1の画像を分割したそれぞれの分割画像を各クライアントに表示させた例を示す。クライアントA20A〜クライアントD20Dによって拡大され、全体として1つの画像として表示される。図2(b)に示した例でも、向かって左側のクライアントA20AおよびクライアントC20Cは、ステレオの左チャネルの音Lを出力し、向かって右側のクライアントB20BおよびクライアントD20Dは、ステレオの右チャネルの音Rを出力する。図2(c)は、各クライアントが分割された分割画像のうちどの位置の分割画像を拡大して表示するかを示す。すなわち、画像を4分割した分割画像のうち、クライアントA20Aは、画面に向かって左上の分割画像を拡大して表示し、クライアントB20Bは、画面に向かって右上の分割画像を拡大して表示し、クライアントC20Cは、画面に向かって左下の分割画像を拡大して表示し、クライアントD20Dは、画面に向かって右下の分割画像を拡大して表示する。
図3は、図1に示したサーバ10からクライアント20への映像および音声の送信形態を示す。「音声」という場合、音声以外の音も含めて音声という。図3(a)は、コンテンツを送信するためのネットワークのチャネルを示す。コンテンツは、サーバ10から、ネットワークのコンテンツ用チャネル31を介して各クライアントへ送信される。サーバ10からクライアントへの制御情報は、ネットワークの制御用チャネル32を介して送信される。
ネットワークのチャネルは、IP(Internet Protocol)アドレスと論理的な番号であるPort(ポート)番号とによって識別される。サーバ10は、各クライアントに対して、コンテンツの映像と音声とを受信するチャネルをIPアドレスおよびポート番号によって指定する。図3(a)に示した例では、コンテンツ用チャネル31は、たとえば「IP=239.255.1.1:Port=100」のチャネルであり、映像と音声とを含むコンテンツをストリーミングデータとして送信する。各クライアント20は、映像および音声ともに、「Port=100」のチャネルを介して受信する。制御用チャネル32は、たとえば「IP=239.255.1.1:Port=10」のチャネルである。
図3(b)は、図3(a)に示した各クライアントに表示される映像を示す。各クライアントは、コンテンツ用チャネル31としてポート指定された「IP=239.255.1.1:Port=100」のチャネルを介して受信した同じ映像を表示している。
図4は、図1に示した複数のクライアント20の構成例を示す。図4(a)は、図2に示した構成、つまり4つのクライアントA20A〜クライアントD20Dを縦2段横2列で構成した例である。サーバ10は、各クライアントから、各クライアントおよび隣接するクライアントに関する隣接情報33を受信し、各クライアントから受信した隣接情報に基づいて設定したクライアントの構成および各クライアントの配置位置を示す構成情報34を各クライアントに送信する。
配置位置は、たとえば画面に向かって、最も左側でかつ最も上側に位置するクライアントを基準に、縦の下方向に何段目、横の右方向に何列目として表す。具体的には、図4(a)で、上段左側のクライアントA20Aは、「1−1」つまり縦方向に1段目で、かつ横方向に1列目であることを示す。クライアントB20Bは、「1−2」つまり縦方向に1段目かつ横方向に2列目であり、クライアントC20Cは、「2−1」つまり縦方向に2段目かつ横方向に1列目であり、クライアントD20Dは、「2−2」つまり縦方向に2段目かつ横方向に2列目である。各クライアントは、受信した構成情報に基づいて、コンテンツの画像が分割された複数の分割画像のうちで自クライアントが表示すべき分割画像と分割画像の拡大率とを決定する。
図4(b)は、4つのクライアントA20A〜クライアントD20Dを縦1段横4列で構成した例である。各クライアントの配置位置は、クライアントA20Aが「1−1」であり、クライアントB20Bが「1−2」であり、クライアントC20Cが「1−3」であり、クライアントD20Dが「1−4」である。図4(c)は、4つのクライアントA20A〜クライアントD20Dを縦4段横1列で構成した例である。各クライアントの配置位置は、クライアントA20Aが「1−1」であり、クライアントB20Bが「2−1」であり、クライアントC20Cが「3−1」であり、クライアントD20Dが「4−1」である。
図5は、図1に示したクライアント20の外観の斜視図である。クライアント20は、隣接するクライアントと通信する4つの位置検出部(以下「検出器」ともいう)26を含む。4つの検出器26は、クライアント20の上面、左側面、下面、および右側面の4つの面に設けられる。
図6は、図5に示した検出器26の端子の配置例を示す。検出器26は、端子TX、端子GND、および端子RXの3つの端子を有する。端子TXは、情報を送信するための端子であり、端子GNDはグランド端子であり、端子RXは、情報を受信するための端子である。
図7は、図5に示した検出器26を接続する接続ケーブル35の一例を示す。接続ケーブル35は、隣接するクライアント20同士を接続するケーブルであり、接続ケーブル35の両端は、それぞれ各クライアント20の検出器26と接続される。この例では、接続ケーブル35を用いているが、2つのクライアント20を隣接したとき、それぞれの検出器26の各端子が密着するように構成し、接続ケーブル35を用いないで接続するようにしてもよい。
図8は、図5に示した検出器26の端子と隣接するクライアント20の検出器26の端子との接続関係を示す。クライアント20の上側の検出器26U1は、上側に隣接するクライアントの下側の検出器26D2と接続される。検出器26U1の端子TXと検出器26D2の端子RXとが接続され、検出器26U1の端子GNDと検出器26D2の端子GNDとが接続され、検出器26U1の端子RXと検出器26D2の端子TXとが接続される。同様に、クライアント20の右側の検出器26R1は、右側に隣接するクライアントの左側の検出器26L2と接続され、クライアント20の下側の検出器26D1は、下側に隣接するクライアントの上側の検出器26U2と接続され、クライアント20の左側の検出器26L1は、左側に隣接するクライアントの右側の検出器26R2と接続される。
クライアント20は、これら4つの検出器26によって、それぞれ隣接するクライアントがあるか否かを検出し、隣接するクライアントが検出された場合は、その隣接するクライアントのクライアントIDを取得する。クライアントIDは、予め各クライアントに割り当てられ設定されている。
図9は、図1に示したサーバ10がクライアント20の配置を自動で設定する手順の一例を示す。たとえば、図4(a)に示した4つのクライアントの場合について、説明する。クライアントA20A〜クライアントD20DのクライアントIDを、それぞれたとえば「A」、「B」、「C」、および「D」とする。
クライアントA20Aは、検出器26によって、右方向にクライアントID「B」のクライアント、および下方向にクライアントID「C」のクライアントがあることを検出する。クライアントB20B〜クライアントD20Dも、それぞれの検出器26によって、隣接するクライアントを検出する。
クライアントA20Aは、自クライアントのクライアントIDが「A」であり、右側のクライアントがクライアントID「B」のクライアントであり、下側のクライアントがクライアントID「C」のクライアントであり、上側および左側にはクライアントがないことを示す隣接情報を、サーバ10に送信する。サーバ10は、クライアントA20Aから隣接情報を受信すると、まず、図9(a)に示すように、クライアントの構成を管理するためのマップ上に、クライアントID「A」のクライアントを登録し、次に、図9(b)に示すように、その右側にクライアントID「B」のクライアントおよび下側にクライアントID「C」のクライアントを登録する。
次に、クライアントB20Bは、自クライアントのクライアントIDが「B」であり、左側のクライアントがクライアントID「A」のクライアントであり、下側のクライアントがクライアントID「D」のクライアントであり、上側および右側にはクライアントがないことを示す隣接情報を、サーバ10に送信する。サーバ10は、クライアントID「A」およびクライアントID「B」のクライアントを既にマップ上に登録しているので、新たに登録は行わない。クライアントID「D」のクライアントは、マップ上に登録されていないので、図9(c)に示すように、クライアントID「B」のクライアントの下側にクライアントID「D」のクライアントを登録する。
さらに、クライアントC20Cは、自クライアントのクライアントIDが「C」であり、上側のクライアントがクライアントID「A」のクライアントであり、右側のクライアントがクライアントID「D」のクライアントであり、下側および左側にはクライアントがないことを示す隣接情報を、サーバ10に送信する。隣接情報に含まれるクライアントはいずれも既にマップ上に登録されているので、新たな登録は行わない。同様に、クライアントD20Dは、自クライアントのクライアントIDが「D」であり、上側のクライアントがクライアントID「B」のクライアントであり、左側のクライアントがクライアントID「C」のクライアントであり、下側および右側にはクライアントがないことを示す隣接情報を、サーバ10に送信する。隣接情報に含まれるクライアントはいずれも既にマップ上に登録されているので、新たな登録は行わない。
サーバ10は、最終的に、図9(d)に示すように、縦2段横2列の4台のクライアントで構成されるマップが作成される。作成されたマップは記憶部11に設定つまり記憶される。
図10は、図1に示したサーバ10がクライアント20の配置を自動で設定する手順の他の例を示す。図9では、サーバ10は、隣接情報の中に、隣接するクライアントのクライアントIDを含んでいると、その隣接するクライアントを無条件でマップに登録したが、図10(a)に示すように、その隣接するクライアントは、まず仮登録し、たとえば図10(a)に点線で示したクライアントID「C」のクライアントのように仮登録であることがわかるように区別しておき、仮登録されたクライアントから、自クライアントが隣接するクライアントであると、知らされたときに、図10(b)に太い実線で示したクライアントID「C」のクライアントのように登録してもよい。
図9および図10にサーバ10が行うクライアント20の配置を自動設定する手順の例を示したが、クライアント20の配置を自動設定する詳細な手順については、図24〜図39で後述する。
図11は、図1に示したサーバ10における構成設定画面40の例を示す。図11に示した構成設定画面40は、サーバ10の図示しないディスプレイなどの出力装置に表示される画面であり、実際に配置されている各クライアントの位置を手動でサーバ10に設定するための画面である。設定すべきクライアントを表示する領域41が構成設定画面40の右側にあり、その左側の領域がクライアントを実際に配置されている位置に対応する位置に設定するためのマップ領域である。図4(a)に示した縦2段横2列の構成の場合を例にして、説明する。
図11(a)は、まだ配置位置の設定が行われていない構成設定画面であり、設定すべきクライアントが領域41に表示されている。設定すべきクライアントは、サーバ10が隣接情報を受信したクライアントであり、たとえば隣接情報を受信した順序で、領域41の上側から表示される。1番目のクライアントのクライアントIDは「C」であり、2番目のクライアントのクライアントIDは「A」であり、3番目のクライアントのクライアントIDは「B」であり、4番目のクライアントのクライアントIDは「D」である。
ユーザは、サーバ10の図示しないキーボードあるいはマウスなどの入力装置によって、最初に設定するクライアントを選択する。このとき、サーバ10は、選択されたクライアントに対して、選択されていることを示す表示を指示する。たとえば画面の色を他のクライアントと異なる色に変更した表示、そのクライアントのMAC(Media Access
Control)アドレスの表示、あるいは画面をフラッシングする表示を指示する。
図11(b)は、1番目のクライアントが、実際の位置に対応するマップ領域の位置に設定された状態を示している。ユーザは、図11(a)で選択した1番目のクライアント、つまりのクライアントID「C」のクライアントの実際の位置を確認し、確認した位置に対応するマップ領域の位置にそのクライアントを設定する。
図12は、図11に示した構成設定画面40に表示されたクライアント20の実際の位置との対応を示す。図12(a)は、クライアントC20Cが選択されている状態を示す。図11(a)に示した領域41の1番目のクライアントが選択されたとき、サーバ10は、クライアントID「C」のクライアントに選択されていることを示す表示、たとえば画面をフラッシングする表示を指示する。クライアントC20Cは、サーバ10からの指示によって、画面をフラッシングする。
図12(b)は、領域41での2番目のクライアント、たとえばクライアントA20Aが選択されている状態を示す。図11(a)に示した領域41の2番目のクライアントが選択されたとき、サーバ10は、クライアントID「A」のクライアントに選択されていることを示す表示、たとえば画面をフラッシングする表示を指示する。クライアントA20Aは、サーバ10からの指示によって、画面をフラッシングする。
図13は、図11に示した構成設定画面40での2台目のクライアント20の手動設定の例を示す。ユーザは、図12(b)に示したフラッシングされているクライアントの位置を確認し、その位置に対応するマップ領域の位置に2台目のクライアント、たとえばクライアントA20Aを設定する。同様に、3台目および4台目のクライアントについても設定する。
図14は、図11に示した構成設定画面40で手動設定されたクライアント20の配置位置を示す。左上に2番目のクライアントであるクライアントA20Aが設定され、右上に3番目のクライアントであるクライアントB20Bが設定され、左下に1番目のクライアントであるクライアントC20Cが設定され、右下に4番目のクライアントであるクライアントD20Dが設定されている。手動でマップ領域に設定されたマップは、記憶装置11に記憶される。
コンテンツの画像を分割したそれぞれの分割画像を、4台のクライアントが分担して表示する場合、サーバ10は、ユニキャスト通信によって、個々のクライアントに対して、個々のクライアントに表示させる分割画像を拡大した画像を送信することも可能であるが、この場合クライアントに送信するデータ量は、クライアントの台数分のデータ量を送信する必要がある。送信するデータ量を減らすために、マルチキャスト通信またはブロードキャスト通信を用いて、コンテンツを送信する。
具体的には、サーバ10は、コンテンツを送信する前に各クライアント20に対して、構成情報を、すなわち全体の構成たとえば縦方向の数および横方向の数と、その全体の構成の中での各クライアントの位置とを表す情報を、サーバ通信部13によって送信する。構成情報は、記憶装置11に記憶されたマップに基づいてクライアント毎に生成される。たとえば、図14に示した構成の場合、クライアントC20Cに対して、構成が縦2段横2列であることを示す情報「構成は2*2」と、位置が2段目の1番目であることを示す情報「位置は2−1」とが生成される。他のクライアントに対しても、「構成は2*2」という情報と、それぞれの位置を示す情報とが生成される。
各クライアント20は、受信した構成情報から、全体構成の中での自クライアントの配置位置を認識する。各クライアントは、認識した配置位置に対応する位置にある分割画像を自クライアントが表示すべき分割画像と判断する。たとえば、クライアントA20Aは、構成情報として、「構成は2*2」および「位置は1−1」を表す情報を受信する。クライアントA20Aは、受信した構成情報から、自クライアントが、縦2段横2列である構成の中で1段目の左から1番目のクライアントであることがわかる。すなわち、クライアントA20Aは、4つに分割した画像のうち左上の分割画像が、自クライアントが表示すべき分割画像であると判断する。
サーバ10は、すべてのクライアントに対してそれぞれの構成情報を送信した後、コンテンツを、サーバ送信部13によってマルチキャスト通信またはブロードキャスト通信で送出する。各クライアント20は、コンテンツを受信すると、コンテンツの画像から自クライアントの配置位置に対応する分割画像を切り出し、画面サイズに合わせて画像を拡大する。たとえば、クライアントA20Aは、クライアントの構成の中で1段目の左から1番目のクライアントであるので、受信した画像を縦横それぞれ半分に分割した場合の分割画像のうちの左上の分割画像を切り出し、縦横それぞれ2倍に拡大して表示する。
音声については、サーバ10が各クライアントの配置位置に応じた音を出力するように設定する。たとえばクライアントA20Aは、配置位置がクライアントの構成の中で1段目の左から1番目のクライアントであるので、左チャネルの音をL−SPK22から出力するように設定する。クライアントC20Cも、同様に左チャネルの音をL−SPK22から出力するように設定する。クライアントB20BおよびクライアントD20Dは、いずれも右チャネルの音をR−SPK23から出力するように設定する。
図15は、図1に示した複数のクライアント20が縦2段横2列の構成の場合について各スピーカから出力させる音の割り振りの例を示す。図15(a)は、左チャネルの音を出力するクライアントを左側の2台、および右チャネルの音を出力するクライアントを右側の2台とした場合の構成を示す。左チャネルの音を出力するクライアントのグループCL51を、位置1−1のクライアントおよび位置2−1のクライアントによって構成し、右チャネルの音を出力するクライアントのグループCR52を、位置1−2のクライアントおよび位置2−2のクライアントによって構成する。
図15(b1)は、最も外側のスピーカのみを用いて音を出力する例を示す。左チャネルの音を出力するスピーカのグループSL53を、グループCL51に含まれるクライアント、つまり位置1−1および位置2−1のクライアントの左側のスピーカつまりL−SPK22によって構成し、右チャネルの音を出力するスピーカのグループSR54を、グループCR52に含まれるクライアント、つまり位置1−2および位置2−2のクライアントの右側のスピーカつまりR−SPK23によって構成する。グループSL53およびグループSR54のいずれのグループにも属さないスピーカ、つまり、位置1−1および位置2−1のクライアントのR−SPK23、ならびに位置1−2および位置2−2のクライアントのL−SPK22は、ミュート、すなわち音が出ないように設定する。
図15(b2)は、最も外側のスピーカ以外のスピーカも用いて音を出力する例を示す。すなわち、図15(b1)に示したように最も外側のスピーカのみから音を出力するのではなく、他のスピーカも用いて音を出力する。たとえば、左チャネルの音を出力するスピーカのグループSL53を、グループCL51に含まれるクライアント、つまり位置1−1および位置2−1のクライアントのL−SPK22およびR−SPK23によって構成し、右チャネルの音を出力するスピーカのグループSR54を、グループCR52に含まれるクライアント、つまり位置1−2および位置2−2のクライアントのL−SPK22およびR−SPK23によって構成する。
図16は、図1に示した複数のクライアント20が縦2段横3列の構成の場合について各スピーカから出力させる音の割り振りの例を示す。図16(a)は、左チャネルの音を出力するクライアントを左端の2台、および右チャネルの音を出力するクライアントを右端の2台とした場合の構成を示す。すなわち、左チャネルの音を出力するクライアントのグループCL51を、位置1−1および位置2−1のクライアントによって構成し、右チャネルの音を出力するクライアントのグループCR52を、位置1−3および位置2−3のクライアントによって構成する。位置1−2および位置2−2のクライアントは、いずれのスピーカもミュートする。
図16(b1)は、最も外側のスピーカのみを用いて音を出力する例を示す。左チャネルの音を出力するスピーカのグループSL53を、位置1−1および位置2−1のクライアントのL−SPK22によって構成し、右チャネルの音を出力するスピーカのグループSR54を、位置1−3および位置2−3のクライアントのR−SPK23によって構成する。グループSL53およびグループSR54のいずれのグループにも属さないスピーカ、つまり、位置1−1および位置2−1のクライアントのR−SPK23、位置1−2および位置2−2のクライアントのL−SPK22およびR−SPK23、ならびに位置1−3および位置2−3のクライアントのL−SPK22は、ミュートする。
図16(b2)は、最も外側のスピーカ以外のスピーカも用いて音を出力する例を示す。すなわち、図16(b1)に示したように最も外側のスピーカのみから音を出力するのではなく、他のスピーカも用いて音を出力する。たとえば、左チャネルの音を出力するスピーカのグループSL53を、位置1−1および位置2−1のクライアントのL−SPK22およびR−SPK23によって構成し、右チャネルの音を出力するスピーカのグループSR54を、位置1−3および位置2−3クライアントのL−SPK22およびR−SPK23によって構成する。
あるいはグループSL53を、位置1−1および位置2−1のクライアントのL−SPK22およびR−SPK23、ならびに位置1−2および位置2−2のクライアントのL−SPK22によって構成し、グループSR54を、位置1−2および位置2−2のクライアントのR−SPK23、ならびに位置1−3および位置2−3のクライアントのL−SPK22およびR−SPK23によって構成してもよい。この場合、真中に位置するクライアント、つまり位置1−2および位置2−2のクライアントは、左チャネルの音をL−SPK22から出力し、右チャネルの音をR−SPK23から出力することになる。このように、横方向のクライアントの台数が奇数であって、すべてのスピーカから音を出力する場合、真中のクライアントは、左チャネルの音をL−SPK22から出力し、右チャネルの音をR−SPK23から出力する。
図17は、図1に示した複数のクライアント20が縦2段横4列の構成の場合について各スピーカから出力させる音の割り振りの例を示す。図17(a1)は、左チャネルの音を出力するクライアントを左端の2台、および右チャネルの音を出力するクライアントを右端の2台とした場合の構成を示す。すなわち、左チャネルの音を出力するクライアントのグループCL51を、位置1−1および位置2−1のクライアントによって構成し、右チャネルの音を出力するクライアントのグループCR52を、位置1−4および位置2−4のクライアントによって構成する。位置1−2、位置1−3、位置2−2、および位置2−3のクライアントは、いずれのスピーカもミュートする。
図17(a2)は、左チャネルの音を出力するクライアントを左側の4台、および右チャネルの音を出力するクライアントを右側の4台とした場合の構成を示す。すなわち、左チャネルの音を出力するクライアントのグループCL51を、位置1−1、位置1−2、位置2−1、および位置2−2のクライアントによって構成し、右チャネルの音を出力するクライアントのグループCR52を、位置1−3、位置1−4、位置2−3、および位置2−4のクライアントによって構成する。
図17(b1)は、最も外側のスピーカのみを用いて音を出力する例を示す。左チャネルの音を出力するスピーカのグループSL53を、位置1−1および位置2−1のクライアントのL−SPK22によって構成し、右チャネルの音を出力するスピーカのグループSR54を、位置1−4および位置2−4のクライアントのR−SPK23によって構成する。グループSL53およびグループSR54のいずれのグループにも属さないスピーカ、つまり、位置1−1および位置2−1のクライアントのR−SPK23、位置1−2、位置1−3、位置2−2、および位置2−3のクライアントのL−SPK22およびR−SPK23、ならびに位置1−4および位置2−4のクライアントのL−SPK22は、ミュートする。
図17(b2)は、最も外側のスピーカ以外のスピーカも用いて音を出力する一例を示す。すなわち、図17(b1)に示したように最も外側のスピーカのみから音を出力するのではなく、他のスピーカも用いて音を出力する。たとえば、左チャネルの音を出力するスピーカのグループSL53を、位置1−1および位置2−1のクライアントのL−SPK22およびR−SPK23によって構成し、右チャネルの音を出力するスピーカのグループSR54を、位置1−4および位置2−4のクライアントのL−SPK22およびR−SPK23によって構成する。グループSL53およびグループSR54のいずれのグループにも属さないスピーカ、つまり、位置1−2、位置1−3、位置2−2、および位置2−3のクライアントのL−SPK22およびR−SPK23は、ミュートする。
図17(b3)は、最も外側のスピーカ以外のスピーカも用いて音を出力する他の例を示す。すなわち、左チャネルの音を出力するスピーカのグループSL53を、位置1−1および位置2−1のクライアントのL−SPK22およびR−SPK23、ならびに位置1−2および位置2−2のクライアントのL−SPK22によって構成し、右チャネルの音を出力するスピーカのグループSR54を、位置1−3および位置2−3のクライアントのR−SPK23、ならびに位置1−4および位置2−4のクライアントのL−SPK22およびR−SPK23によって構成する。グループSL53およびグループSR54のいずれのグループにも属さないスピーカ、つまり、位置1−2および位置2−2のクライアントのR−SPK23、ならびに位置1−3および位置2−3のクライアントのL−SPK22は、ミュートする。
あるいは、左チャネルの音を出力するスピーカのグループSL53を、位置1−1、位置1−2、位置2−1、および位置2−2のクライアントのL−SPK22およびR−SPK23によって構成し、右チャネルの音を出力するスピーカのグループSR54を、位置1−3、位置1−4、位置2−3、および位置2−4のクライアントのL−SPK22およびR−SPK23によって構成する。
音を出力させるスピーカの数は、サーバ10の図示しない入力装置から入力される。たとえば入力装置によって、横方向に並ぶスピーカのうち、外側から何番目のスピーカまで音を出力させるかを示す情報が入力される。
図18は、図1に示したサーバ10が処理するスピーカパターンおよび音量制御処理のフローチャートである。いずれかのクライアント20のリモコンによってコンテンツの再生要求があり、サーバ10がそのクライアント20からコンテンツの再生要求を受信すると、ステップA1に移る。
ステップA1では、クライアントの配置状態を取得する。すなわち、各クライアントから隣接情報を取得し、取得した隣接情報に基づいて、クライアントの全体構成および各クライアントの配置位置を自動で設定あるいは手動で設定する。設定内容は、記憶部11に記憶される。ステップA2では、クライアントの位置情報、すなわち全体構成と各クライアントの配置位置とを表す構成情報を各クライアントに送信する。ステップA3では、画像分割/等倍設定を各クライアントに送出する。すなわち、各クライアントは、受信したコンテンツの画像を分割し拡大して表示するのか、受信したコンテンツの画像をそのまま表示するのかを指示する情報を各クライアントに送信する。
ステップA4では、音を出力するスピーカの本数を設定する後述するスピーカ設定処理を呼び出す。ステップA5では、スピーカ設定処理で設定されたスピーカの本数に従って、音を出力するスピーカおよび音を出力するスピーカから出力させる音を設定し、その設定を各クライアントに送信する後述するスピーカ設定送出処理を呼び出す。ステップA6では、各クライアントにコンテンツのポートを指定する。すなわち、各クライアントにコンテンツを受信すべきチャネル指示するポート番号を送信する。
ステップA7では、設定応答を受信する。すなわち、ステップA2、ステップA3、ステップA5、およびステップA6で送信した情報に対するクライアントからの設定完了を示す応答を受信する。ステップA8では、全クライアントから設定完了を示す応答を受信したか否かを判定する。全クライアントから設定完了の応答を受信すると、ステップA9に進み、全クライアントから設定完了の応答を受信していないと、ステップA2に戻る。ステップA8では、すべてのクライアントから応答があるまで繰り返しているが、タイマを用いて、規定時間内に応答がない場合には、エラーを図示しない出力装置に表示してユーザに警告してもよい。
ステップA9では、クライアントに送信するためのコンテンツを取得する。たとえば記憶部11から読み出すことによって取得、あるいはネットワークに接続される映像出力装置などから取得する。ステップA10では、取得したコンテンツをマルチキャストもしくはブロードキャストで送信する。ステップA11では、クライアントからスピーカ変更を受信したか否かを判定する。スピーカ変更を受信すると、すなわち、スピーカの構成変更の要求を受信すると、ステップA13に進み、スピーカ変更を受信しないと、すなわち、スピーカの構成変更の要求を受信しないと、ステップA12に進む。ステップA12では、コンテンツの送信が終了したか否かを判定する。コンテンツの送信が終了すると、処理を終了し、コンテンツの送信が終了していないと、ステップA10に戻る。
ステップA13では、音を出力するスピーカ本数の変更またはスピーカから出力する音量の変更を行う後述するスピーカ制御処理を呼び出す。ステップA14では、スピーカ設定を保存して、ステップA12に進む。すなわち、変更されたスピーカ本数または音量を、次回にも利用することができるようにするために、記憶部13に記憶して、ステップA12に進む。
図19は、図18に示したスピーカパターンおよび音量制御処理から呼び出されるスピーカ設定処理のフローチャートである。スピーカ設定処理は、音を出力するスピーカの本数を設定する。図18に示したステップA4で呼び出されると、ステップB1に移る。
ステップB1では、前回利用した環境を使用するか否かを判定する。前回利用した環境は、前回利用したスピーカの本数であり、記憶部11に記憶されている。前回利用したスピーカの本数を使用するか否かは、たとえば図示しない出力装置に、前回利用したスピーカの本数を使用するか否かを問い合わせるメニューを表示し、図示しない入力装置によるそのメニューに対する応答によって判断する。前回利用した環境を使用する場合は、ステップB4に進み、前回利用した環境を使用しない場合は、ステップB2に進む。
ステップB2では、出力するスピーカ本数SPを手動で設定する。たとえば、図示しない入力装置によってスピーカ本数を入力する。スピーカ本数SPは、縦横に配置された各クライアントのスピーカを、縦1列のスピーカからなる縦グループに分け、さらに分けられた複数の縦グループを横方向の中央で二分したとき、二分した片方に属する縦グループのうち音を出力する縦グループの数である。音を出力する縦グループは、横方向の外側寄りの縦グループである。すなわち、左端からスピーカ本数SP分の縦グループのスピーカおよび右端からスピーカ本数SP分の縦グループのスピーカから音が出力される。ステップB3では、スピーカ設定を保存する。すなわち、入力されたスピーカ本数を記憶部11に記憶して、終了する。
ステップB4では、設定保存があるか否かを判定する。すなわち、記憶部13にスピーカ本数が記憶されていると、設定保存があると判定する。設定保存があると、ステップB5に進み、設定保存がないと、ステップB6に進む。ステップB5では、前回設定のスピーカ本数SPを使用する。すなわち、使用するスピーカの本数を、記憶部13に記憶されているスピーカ本数そのままに設定して、終了する。ステップB6では、デフォルトのスピーカ本数、たとえばSP=1を使用する。すなわち、使用するスピーカの本数を、デフォルトのスピーカ本数たとえば「1」に設定して、終了する。
図20は、図18に示したスピーカパターンおよび音量制御処理から呼び出されるスピーカ制御処理の前半部分のフローチャートである。スピーカ制御処理は、音を出力するスピーカ本数の変更またはスピーカから出力する音量の変更を行う。図18に示したステップA13で呼び出されると、ステップC1に移る。
ステップC1では、クライアントの配置状態を取得する。すなわち、各クライアントから隣接情報を取得し、取得した隣接情報に基づいて、クライアントの全体構成および各クライアントの配置位置を自動で設定あるいは手動で設定する。クライアントを以下「モニタ」ともいう。ステップC2では、有効モニタの横方向台数SPMを取得する。すなわち、ステップC1で設定した全体構成から、横方向のモニタの台数を抽出し、抽出したモニタの台数を有効モニタの横方向台数SPMとする。
ステップC3では、スピーカ本数を増やすか否かを判定する。すなわち、図18のステップA11でクライアントから受信したスピーカの構成変更の要求にスピーカ本数を増やす要求があると、スピーカ本数を増やすと判定する。スピーカ本数を増やす場合は、ステップC5に進み、スピーカ本数を増やさない場合は、ステップC4に進む。ステップC4では、スピーカ本数を減らすか否かを判定する。すなわち、図18のステップA11でクライアントから受信したスピーカの構成変更の要求にスピーカ本数を減らす要求があると、スピーカ本数を減らすと判定する。スピーカ本数を減らす場合は、ステップC8に進み、スピーカ本数を減らさない場合は、図21に示すステップC11に進む。
ステップC5では、SP<SPMか否かを判定する。すなわち、音を出力するスピーカ本数SPが、有効モニタ数の横方向台数SPMよりも小さいか否かを判定する。SP<SPMであると、すなわち、スピーカ本数SPが横方向台数SPMよりも小さいとステップC6に進み、SP<SPMでないと、すなわち、スピーカ本数SPが横方向台数SPMよりも小さくないと、終了する。ステップC6では、「SP=SP+1」とする。すなわち、スピーカ本数SPを「1」増加する。ステップC7では、後述するスピーカ設定送出処理を呼び出し、そのスピーカ設定送出処理が終了すると、図21に示すステップC11に進む。スピーカ設定送出処理は、スピーカの本数に従って、音を出力するスピーカおよび音を出力するスピーカから出力させる音を決定し、決定内容を各クライアントに送信する。
ステップC8では、SP>1か否かを判定する。すなわち、音を出力するスピーカ本数SPが、「1」よりも大きいか否か判定する。SP>1であると、すなわち、音を出力するスピーカ本数SPが「1」よりも大きいと、ステップC9に進み、SP>1でないと、すなわち、音を出力するスピーカ本数SPが「1」よりも大きくないと、終了する。ステップC9では、「SP=SP−1」とする。すなわち、スピーカ本数SPを「1」減少する。ステップC10では、後述するスピーカ設定送出処理を呼び出し、そのスピーカ設定送出処理が終了すると、図21に示すステップC11に進む。
図21は、図18に示したスピーカパターンおよび音量制御処理から呼び出されるスピーカ制御処理の後半部分のフローチャートである。図20に示したステップC4でスピーカ本数を減らさないと判定されたとき、またはステップC7もしくはステップC10が処理された後、ステップC11に移る。
ステップC11では、スピーカ音量制御であるか否かを判定する。すなわち、図18のステップA11でクライアントから受信したスピーカの構成変更の要求にスピーカ音量制御があると、スピーカ音量制御であると判定する。スピーカ音量制御であると、ステップC12に進み、スピーカ音量制御でないと、終了する。
ステップC12では、「VOL=設定音量/SP」とする。すなわち、設定音量つまり既に設定されている音量をスピーカ本数SPで除算した値を、単位音量VOLとする。ステップC13では、「NV=1」とする。すなわち、カウンタNVに初期値「1」を代入する。ステップC14では、端からNV番目のスピーカを、「設定音量−VOL*(NV−1)」の音量に設定する。たとえば、一番端のスピーカは、「設定音量」の音量が設定され、端から2番目のスピーカは、「設定音量−VOL」の音量が設定され、端から3番目のスピーカは、「設定音量−2VOL」の音量が設定される。すなわち、端から順に1VOLずつ音量が減少する。
ステップC15では、対応クライアントに設定を送出する。すなわち、ステップC14で設定された音量を、その音量の音を出力するスピーカを有するクライアントに送信する。ステップC16では、「NV=NV+1」とする。すなわち、カウンタNVに「1」を加算する。ステップC17では、NV<=SPであるか否か判定する。すなわち、カウンタNVの値が、スピーカ本数SP以下か否かを判定する。NV<=SPであると、すなわち、カウンタNVの値がスピーカ本数以下であると、ステップC14に戻り、NV<=SPでないと、すなわち、カウンタNVの値がスピーカ本数を超えると、終了する。
図21に示した例では、横方向について、クライアントの配置位置に応じて音の出力を制御する例を示したが、上下方向で音の出力を制御してもよい。具体的には、上段のクライアントの音量を大きくし、下段のクライアントの音量を小さくするように制御してもよい。
図22は、図18に示したスピーカパターンおよび音量制御処理から呼び出されるスピーカ設定送出処理のフローチャートである。スピーカ設定送出処理は、図19に示したスピーカ設定処理で設定されたスピーカの本数に従って、音を出力するスピーカおよび音を出力するスピーカから出力させる音を決定し、決定内容を各クライアントに送信する。スピーカ設定送出処理は、図20に示したスピーカ制御処理からも呼び出される。図18に示したステップA5、図20に示したステップC7、または図20に示したステップC10で呼び出されと、ステップD1に進む。
ステップD1では、「SP2=INT(SP/2)」とする。すなわちスピーカ本数SPを2で除算した値の整数部分を、左右2つのスピーカから音を出力するモニタの数SP2とする。ステップD2では、左配置のモニタのうち、SP2分のスピーカを有効とし、L/RともLch出力を設定する。すなわち、横方向に配置されたモニタの左側からSP2台のモニタの左右のスピーカを有効にし、出力する音は、L−SPK22およびR−SPK23ともLchつまり左チャネルの音を出力するように設定する。ステップD3では、右配置のモニタのうち、SP2分のスピーカを有効とし、L/RともRch出力を設定する。すなわち、横方向に配置されたモニタの右側からSP2台のモニタの左右のスピーカを有効にし、出力する音は、L−SPK22およびR−SPK23ともRchつまり右チャネルの音を出力するように設定する。
ステップD4では、「SP=奇数」であるか否かを判定する。すなわち、スピーカ本数が奇数であるか否かを判定する。「SP=奇数」であると、つまりスピーカ本数が奇数であると、ステップD7に進み、「SP=奇数」でないと、つまりスピーカ本数が奇数でないと、ステップD5に進む。ステップD5では、有効でないスピーカをミュート設定にする。すなわち、ステップD2、ステップD3、ステップD7、またはステップD8で有効にされなかったスピーカは、音を出力しないように設定する。ステップD6では、対応モニタに設定を送出して、終了する。すなわち、各スピーカの設定を、それぞれのスピーカを有するモニタに送信して、終了する。
ステップD7では、左配置のモニタから、「SP2+1」のモニタのLのみを有効とし、Lch出力を設定する。すなわち、横方向に配置されたモニタの左側から「SP2+1」番目のモニタのL−SPK22を有効とし、Lchつまり左チャネルの音を出力するように設定する。ステップD8では、右配置のモニタから、「SP2+1」のモニタのRのみを有効とし、Rch出力を設定し、ステップD5に進む。すなわち、横方向に配置されたモニタの右側から「SP2+1」番目のモニタのR−SPK23を有効とし、Rchつまり右チャネルの音を出力するように設定し、ステップD5に進む。
このスピーカ設定送出処理によって、横方向の左端からスピーカ本数SP分のスピーカから左チャネルの音を出力し、横方向の右端からスピーカ本数SP分のスピーカから右チャネルの音を出力するように設定される。
図22に示した例では、ステップD5で、有効にされなかったスピーカをミュート設定すなわち、音を出力しないように設定したが、有効にされなかったスピーカを低音出力用サブウーハの代わりとして用いて、より臨場感を高めてもよい。具体的には、たとえば、左右のチャネルの音の低音部だけをそれぞれ取り出して増幅し、左チャネルの低音部は、ミュート設定されたスピーカのうち、左側に配置されているスピーカから出力し、右チャネルの低音部は、ミュート設定されたスピーカのうち、右側に配置されているスピーカから出力するように制御する。
図23は、図1に示したクライアント20が処理するスピーカパターンおよび音量制御処理のフローチャートである。サーバ10から、構成情報を受信するとステップE1に移る。
ステップE1では、クライアントの位置情報、すなわち全体構成と各クライアントの配置位置とを表す構成情報を取得する。ステップE2では、画像分割/等倍設定を受信する。すなわち、画像分割/等倍設定、つまりコンテンツの画像を分割し拡大して表示するのか、受信したコンテンツの画像をそのまま表示するのかを指示する情報をサーバ10から受信する。ステップE3では、マルチ再生か否かを判定する。マルチ再生であると、つまりサーバ10から受信した情報が画像分割設定であると、ステップE4に進み、マルチ再生でないと、ステップE12に進む。
ステップE4では、画面分割/拡大を設定する。すなわち、コンテンツの画像を分割した分割画像のうち、そのクライアントの配置位置に対応する分割画像を拡大するように設定する。ステップE5では、スピーカ設定を行う。すなわち、図22に示したサーバ10のスピーカ設定送出処理で送信されたスピーカ設定を受信し、受信したスピーカ設定を自クライアントのスピーカに対して設定する。ステップE6では、コンテンツ取得ポートを設定する。すなわち、図18に示したサーバ10のスピーカパターンおよび音量制御処理で送信されたポート番号を受信して、設定する。ステップE7では、設定完了通知を行う。すなわち、設定が完了したことを示す応答をサーバ10に送信する。
ステップE8では、再生コンテンツを受信・再生する。すなわち、サーバ10から送信されたコンテンツを受信し、受信したコンテンツを再生して、表示画面部25に表示する。ステップE9では、スピーカ変更割り込みがあったか否かを判定する。すなわち、入力部27たとえばリモコンによって、スピーカの構成変更が割り込みで要求されると、スピーカ変更割り込みがあったと判定する。スピーカ変更割り込みがあると、ステップE13に進み、スピーカ変更割り込みがないと、ステップE10に進む。ステップE10では、スピーカ変更を受信したか否かを判定する。すなわち、サーバ10から変更後の構成のスピーカ設定を受信すると、スピーカ変更を受信したと判定する。スピーカ変更を受信すると、ステップE14に進み、スピーカ変更を受信しないと、ステップE11に進む。ステップE11では、コンテンツが終了したが否かを判定する。コンテンツが終了すると、処理を終了し、コンテンツが終了していないと、ステップE8に戻る。
ステップE12では、画面等倍を設定し、ステップE5に進む。すなわち、画面の分割/拡大を行わない等倍で表示するように設定し、ステップE5に進む。ステップE13では、サーバに変更要求を送信して、ステップE10に進む。すなわち、リモコンからスピーカの構成変更の要求を受け取り、たとえばスピーカを増やす要求もしくはスピーカを減らす要求、またはスピーカ音量制御要求を受け取り、受け取った構成変更の要求をサーバに送信して、ステップE10に進む。ステップE14では、スピーカ設定を行い、ステップE11に進む。すなわち、サーバ10から送信されたスピーカ設定を受信し、受信したスピーカ設定を行い、ステップE11に進む。
図24は、図1に示したサーバ10が処理する位置設定処理のフローチャートである。位置設定処理は、配置位置を設定する場合の処理を行い、図18に示したステップA1の処理の中、または図20に示したステップC1の処理の中で呼び出されると、ステップF1に移る。
ステップF1では、前回の設定を使用するか否かを判定する。すなわち、たとえば、図示しない入力装置によって、記憶部11に記憶されている前回用いたクライアントの構成の設定を使用することが指示されると、前回の設定を使用すると判定する。前回の設定を使用する場合は、ステップF5に進み、前回の設定を使用しない場合は、ステップF2に進む。ステップF2では、自動設定を行うか否かを判定する。すなわち、たとえば、図示しない入力装置によって、クライアントの構成を自動で設定する指示があると、自動設定を行うと判定する。自動設定を行なう場合は、ステップF7に進み、自動設定を行わない場合は、ステップF3に進む。
ステップF3では、手動で構成を設定する。たとえば、図11に示した構成設定画面40によってクライアントの構成の設定を行う。ステップF4では、現在の設定を保存して、終了する。すなわち、ステップF3で新たに設定されたクライアントの構成の設定を記憶部11に記憶して、終了する。ステップF5では、設定値があるか否かを判定する。すなわち、記憶部11にクライアントの構成の設定が記憶されていると、設定値があると判定する。設定値があると、ステップF6に進み、設定値がないと、ステップF2に進む。ステップF6では、前回の保存された設定値を使用し、終了する。すなわち、クライアントの構成の設定を、記憶部11に記憶されている設定値そのままに設定し、終了する。
ステップF7では、モニタの構成を自動で設定する後述する自動設定処理を呼び出す。ステップF8では、コンテンツを表示させるモニタのかたまりを選択する後述する有効ブロック選択処理を呼び出す。有効ブロックは、隣接するクライアントによって構成されるブロックのうちコンテンツを表示させるブロックである。ステップF9では、現在の設定を保存して、終了する。すなわち、ステップF7およびステップF8で新たに設定されたクライアントの構成の設定を記憶部11に記憶して、終了する。
図25は、図1に示したサーバ10が用いる受信配列およびpiece配列の例を示す。図では、「piece」を「Piece」とも記す。図25(a)は、モニタ状態とそのモニタ状態に対応する受信配列を示す。モニタ状態は、モニタの実際の構成を示す。受信配列は、サーバ10が各モニタから受信した隣接情報を、たとえばモニタから応答があった順序で配列したものであり、サーバ10の記憶部11に記憶される。受信配列は、各モニタのクライアントIDを示す「自ID」の項目、ならびに各モニタの上側、左側、下側、および右側に隣接するモニタのクライアントIDをそれぞれ示す「上」、「左」、「下」、および「右」の項目がある。以下、「上」、「左」、「下」、および「右」の項目欄に示されるクライアントIDを隣接モニタIDという。
図25(a)に示したモニタは、縦3段横3列の9台のモニタによって構成される。上段には、左側からクライアントIDが「B」、「D」、および「F」の3台のモニタが配置され、中段には、左側からクライアントIDが「C」、「E」、および「G」の3台のモニタが配置され、下段には、左側からクライアントIDが「A」、「H」、および「I」の3台のモニタが配置されている。
これに対応する受信配列には、たとえば自IDが「C」のモニタについては、「上」の隣接モニタIDが「B」であり、「左」の隣接モニタIDが「NULL]であり、「下」の隣接モニタIDが「A」であり、「右」の隣接モニタIDが「E」である。「NULL]は、隣接するモニタが存在しないことを示す。同様に、自IDが「E」については、「D」、「C」、「H」、および「G」であり、自IDが「I」については、「G」、「H」、「NULL]、および「NULL]であり、自IDが「D」については、「NULL]、「B」、「E」、および「F」であり、自IDが「G」については、「F」、「E」、「I」、および「NULL]であり、自IDが「A」については、「C」、「NULL]、「NULL]、および「H」であり、自IDが「F」については、「NULL]、「D」、「G」、および「NULL]であり、自IDが「B」については、「NULL]、「NULL]、「C」、および「D」であり、ならびに自IDが「H」については、「E」、「A」、「NULL]、および「I」である。
図25(b)は、piece配列を示す。piece配列は、応答を受信した順序を表すpiece番号順に、受信した隣接情報の項目と配置の確認の状態を表す「チェック」の項目を2次元に配列したものである。piece配列は、piece番号毎に、「自ID」、「上ID」、「左ID」、「下ID」、「右ID」、および「チェック」の6つの項目がある。これらの6つの項目のうち、「チェック」を除く項目は、図25(a)に示した受信配列の5つの項目に対応する。「チェック」の項目は、配置の確認の状態を表し、「0」〜「2」の値が入る。「0」は、配置の確認が完了した状態であることを示し、「1」は、初期値つまり確認が行われていない状態であることを示し、「2」は、配置の確認が完了しているモニタに隣接しており、かつまだ確認が行われていない状態であることを示す。
piece配列の各要素は、piece[m][n]で表す。[m]は、piece番号である。[n]は、「自ID」、「上ID」、「左ID」、「下ID」、「右ID」、および「チェック」の6つの項目に対応する番号であり、この順序で「0」からの整数を割り当てた番号である。つまり、「自ID」が[0]、「上ID」が[1]、「左ID」が[2]、「下ID」が[3]、「右ID」が[4]、および「チェック」が[5]である。piece[0][0]〜piece[8][4]には、図25(a)に示した受信配列の内容がそのまま入る。
図26は、図1に示したサーバ10が用いる確認済ID格納配列の例を示す。確認済ID格納配列sumi[]は、配置の確認が完了したモニタのクライアントIDを登録する配列であり、記憶部11に記憶される。図では、「sumi」を「Sumi」とも記す。確認済ID格納配列に登録されるモニタは、piece配列のチェック欄が「0」のモニタであり、そのモニタのクライアントIDつまり「自ID」が確認済ID格納配列に登録される。図26に示した確認済ID格納配列は、初期化されて、すべて空欄つまり「NULL」の状態を示している。
図27は、図1に示したサーバ10が用いる端ID格納配列の例を示す。端ID格納配列haji[]は、左側および上側に隣接するモニタのないモニタのクライアントIDを登録する配列であり、記憶部11に記憶される。図では、「haji」を「Haji」とも記す。図27(a)に示した端ID格納配列は、初期化されて、すべて空欄つまり「NULL」の状態を示している。図27(b)に示した端ID格納配列は、後述する端ID検索処理が行われた後の状態を示しており、クライアントID「B」のモニタが登録されている。「haji_count」は、左側および上側に隣接するモニタのないモニタの数、すなわち端ID格納配列に登録されているモニタの数を示し、haji[0]〜haji[haji_count−1]に登録される。
図28は、図24に示した位置設定処理から呼び出される自動設定処理のフローチャートである。自動設定処理は、モニタの構成を自動で設定する。図24に示したステップF7で呼び出されると、ステップG1に移る。
ステップG1では、各クライアントから受信した隣接情報をpiece配列に格納する後述する構成取得・格納処理を呼び出す。ステップG2では、確認済ID格納配列を初期化する後述する確認済ID格納配列確保処理を呼び出す。ステップG3では、端ID格納配列を初期化する後述する端ID格納配列確保処理を呼び出す。ステップG4では、左側および上側に隣接するモニタのないモニタを検索する後述する端ID検索処理を呼び出す。
ステップG5では、「block=0」、「chk_total=0」、および「BB=0」とする。すなわち、隣接するクライアントによって構成されるブロックの数をカウントするためのカウンタblock、確認済みのモニタの数chk_total、および端IDの確認用カウンタBBを「0」にクリアする。図では、「block」を「Block]、および「chk_total」を「Chk_total」とも記す。ステップG6では、haji[BB]のIDを持つpiece配列でpiece[][5]≠0か否かを判定する。すなわち端ID格納配列haji[]のBB番目のモニタのクライアントIDのpiece配列のチェック項目piece[][5]の値が「0」つまり確認済か否かを判定する。piece[][5]≠0であると、つまり確認済でないと、ステップG7に進み、piece[][5]≠0でないと、つまりpiece[][5]=0であると、既にそのモニタは設定済であるので、ステップG11に進む。
ステップG7では、隣接するクライアントによって構成されるブロックの確定と、各ブロックを構成するモニタのマップの作成を行う後述するマップ格納処理を呼び出す。ステップG8では、「chk_total=chk_total+count+1」とする。すなわち、確認済みのモニタの数chk_totalに、ステップG7のマップ格納処理でカウントされたcountの値と「1」とを加算する。ステップG9では、chk_total<totalか否かを判定する。確認済みのモニタの数chk_totalが、モニタの数totalよりも小さいと、ステップG10に進み、確認済みのモニタの数chk_totalが、モニタの数totalよりも小さくないと、終了する。ステップG10では、「block=block+1」とする。すなわち、ブロックに「1」を加算し、別ブロックを確認する。ステップG11では、「BB=BB+1」とし、ステップG6に戻る。すなわち、端IDの確認用カウンタBBに「1」を加算し、ステップG6に戻り、次の左側および上側に隣接しないモニタを確認する。
図29は、図28に示した自動設定処理から呼び出される構成取得・格納処理のフローチャートである。構成取得・格納処理は、piece配列を作成し、モニタ台数totalを確定する。図では、「total」を「Total」とも記す。図28に示したステップG1で呼び出されると、ステップH1に移る。
ステップH1では、「total=0」とし、piece[]の確保/クリアを行う。すなわち、最初、モニタの数totalを「0」にクリアし、piece配列を記憶するための記憶エリアを記憶部11に確保し、その記憶エリアをNULLにクリアする。ステップH2では、制御ポートでクライアントに対してID要求を送信する。すなわち、ネットワークの制御用ポートたとえば図3(a)に示した「IP=xx.xx.xx.xx:Port=xx」の制御用チャネル33を介して、各クライアントに対して、各クライアントのクライアントIDおよび検出した隣接クライアントを含む隣接情報の送信要求を送信する。
ステップH3では、クライアントから応答つまり隣接情報の応答があるか否かを判定する。クライアントから応答があると、ステップH4に進み、クライアントから応答がないと、ステップH6に進む。ステップH4では、「piece[total][0]=受信ID」とし、「piece[total][0]からpiece[total][4]に受信隣接情報を格納」し、「piece[total][5]=1」とする。すなわち、total番目のpiece配列の「自ID」に、隣接情報に含まれる隣接情報を送信したクライアントのクライアントIDを登録し、total番目のpiece配列の「上ID」、「左ID」、「下ID」、および「右ID」に、それぞれ隣接情報に含まれる上側に隣接するクライアントのクライアントID、左側に隣接するクライアントのクライアントID、下側に隣接するクライアントのクライアントID、右側に隣接するクライアントのクライアントIDを登録する。隣接するクライアントがない場合は、隣接するクライアントがないことを示す「NULL]が登録される。total番目のpiece配列の「チェック」には、初期値「1」が登録される。
ステップH5では、「total=total+1」とし、totalに応答のあったモニタ数を「1」増やす。すなわちモニタの数totalに「1」を加算する。ステップH6では、タイムアウト内か否かを判定する。すなわち、ステップH2で送信したID要求に対する応答を監視する監視時間、たとえば10秒が経過していないか否かを判定する。タイムアウト内つまり監視時間内であると、ステップH3に戻り、タイムアウト内つまり監視時間内でないと、終了する。
図30は、図28に示した自動設定処理から呼び出される確認済ID格納配列確保処理のフローチャートである。図28に示したステップG2で呼び出されると、ステップJ1に移る。ステップJ1では、sumi[]の確保/クリアを行い、終了する。すなわち、確認済ID格納配列sumi[]を記憶するための記憶エリアを記憶部11に確保し、その記憶エリアをNULLにクリアし、終了する。
図31は、図28に示した自動設定処理から呼び出される端ID格納配列確保処理のフローチャートである。図28に示したステップG3で呼び出されると、ステップK1に移る。ステップK1では、haji[]の確保/クリアを行い、終了する。すなわち、端ID格納配列haji[]を記憶するための記憶エリアを記憶部11に確保し、その記憶エリアをNULLにクリアし、終了する。
図32は、図28に示した自動設定処理から呼び出される端ID検索処理のフローチャートである。図28に示したステップG4で呼び出されると、ステップL1に移る。ステップL1では、「haji_count=0」とする。すなわち、最初、左側および上側に隣接するモニタのないモニタの数haji_countを「0」にクリアする。ステップL2では、「c=0」とする。すなわち、piece配列のうちでチェック対象の配列のpiece番号「c」を「0」にクリアする。図では、「c」を「C」とも記す。
ステップL3では、piece[c][1]=NULL&piece[c][2]=NULLか否かを判定する。すなわち、チェック対象の配列のモニタが、左側および上側に隣接するモニタのないモニタであるか否かを判定する。piece[c][1]=NULL&piece[c][2]=NULLであると、つまりチェック対象の配列のモニタが左側および上側に隣接するモニタのないモニタであると、ステップL6に進み、piece[c][1]=0&piece[c][2]=0でないと、つまりチェック対象の配列のモニタが左側または上側に隣接するモニタのあるモニタであると、ステップL4に進む。ステップL4では、「c=c+1」とする。すなわち、piece配列のうちでチェック対象の配列のpiece番号「c」に「1」を加算する。ステップL5では、c<totalか否かを判定する。すなわち、piece配列のうちでチェック対象の配列のpiece番号「c」の値が、モニタの数totalよりも小さいか否かを判定する。c<totalであると、つまりpiece配列のうちでチェック対象の配列のpiece番号「c」の値が、モニタの数totalよりも小さいと、ステップL3に戻り、c<totalでないと、つまりpiece配列のうちでチェック対象の配列のpiece番号「c」の値が、モニタの数totalよりも小さくないと、終了する。
ステップL6では、「haji[haji_count]=piece[c][0]」とする。すなわち、端ID格納配列のhaji_count番目に、左側および上側に隣接するモニタのないモニタのクライアントIDを登録する。ステップL6では、「haji_count=haji_count+1」として、ステップL4に進む。すなわち、左側および上側に隣接するモニタのないモニタの数haji_countに「1」を加算して、ステップL4に進む。
図33は、図28に示した自動設定処理から呼び出されるマップ格納処理の前半部分のフローチャートである。マップ格納処理は、隣接するクライアントによって構成されるブロックの確定と、各ブロックを構成するモニタのマップの作成を行う。図28に示したステップG7で呼び出されると、ステップM1に移る。
ステップM1では、「count=0、MM=100、NN=100、cc=0」とする。ブロック内のモニタの数をカウントするためのカウンタcountを「0」にクリアし、ブロックの縦方向のモニタの最大数および横方向のモニタの最大数を設定する。この例では、いずれも最大数を「100」としたが、この値に限定されるものではない。さらに、最初のモニタまで戻ったか否かを確認するためのカウンタccを「0」にクリアする。
ステップM2では、「mat[block][0][0]〜mat[block][254][254]=NULL、temp=0」とする。すなわちブロック毎のマップを表す3次元配列Matの各要素を「NULL」に初期化し、tempを「0」にクリアする。図では、matのことを「Mat」、「temp」のことを「Temp」とも記す。blockは、ブロックの数をカウントするためのカウンタで、初期値は「0」である。ストリーミングでは、同じセグメント内で流せるIDは、「0」〜「254」であるので、この例では、mat配列の2番目および3番目の要素の範囲を、「0」〜「254」としたが、これに限定されるものではない。
ステップM3では、「次の確認ID=haji[block]」とする。すなわち、次に確認するモニタのクライアントIDを、端ID格納配列haji[]のうち、「block」の値が示す配列位置に登録されている確認済IDとする。つまり左側および上側に隣接するモニタがないモニタとして端ID格納配列に登録されたモニタのうち、「block」の値が示す配列位置に登録されているクライアントIDとする。
ステップM4では、「現ID=次の確認ID、次の確認ID=NULL」とする。すなわち、現IDつまりこれから隣接するモニタがあるか否かを確認するモニタのクライアントIDを、「次の確認ID」が示すクライアントIDとした後、「次の確認ID」を「NULL」に初期化する。ステップM5では、「sumi[count]」=現ID、現IDのpiece[][5]=0」とする。すなわち、確認済ID格納配列sumi[]に現IDが示すクライアントIDを登録し、現IDが示すクライアントIDのpiece配列のチェック項目を「0」つまり確認済とする。
ステップM6では、「M=MM、N=NN」とする。すなわち、マップの縦方向の位置を示すポインタMの値をMMの値とし、マップの横方向の位置を示すポインタNの値をNNの値とする。ステップM7では、piece[0][0]〜piece[total−1][0]の中から、現IDを含む配列を取り出す。ステップM8では、「mat[block][M][N]=現IDのpiece[][0]」とする。すなわち、マップの縦M番目および横N番目の位置を、現IDが示すクライアントIDとする。
ステップM9では、上側に隣接するモニタがあるか否かを確認する後述する上の隣接処理を呼び出す。ステップM10では、左側に隣接するモニタがあるか否かを確認する後述する左の隣接処理を呼び出す。ステップM11では、下側に隣接するモニタがあるか否かを確認する後述する下の隣接処理を呼び出す。ステップM12では、右側に隣接するモニタがあるか否かを確認する後述する右の隣接処理を呼び出す。ステップM13では、「次の確認ID」=NULLであるか否かを判定する。「次の確認ID」がNULLであると、つまり次に確認すべきモニタが隣接するモニタの中にないと、図34に示すステップM20に進み、「次の確認ID」がNULLでないと、つまり次に確認すべきモニタが隣接するモニタの中にあると、ステップM14に進む。ステップM14では、「count=count+1」として、ステップM4に戻る。すなわち、ブロック内のモニタの数をカウントするためのカウンタcountに「1」を加算して、ステップM4に戻る。
図34は、図28に示した自動設定処理から呼び出されるマップ格納処理の後半部分のフローチャートである。図33に示したステップM13で、「次の確認ID」がNULLであると判定されたとき、ステップM20に移る。
ステップM20は、「cc=count」とする。すなわち、最初のモニタまで戻ったか否かを確認するためのカウンタccをブロック内のモニタの数をカウントするためのカウンタcountの値とする。ステップM21は、「cc=cc−1」とする。すなわち、最初のモニタまで戻ったか否かを確認するためのカウンタccから「1」減算する。ステップM22は、cc<0であるか否かを判定する。cc<0であると、つまり最初のモニタまで戻ると、終了し、cc<0でないと、つまり最初のモニタまで戻っていないと、ステップM23に進む。
ステップM23では、sumi[cc]のIDのpiece[][1]=NULLであるか否かを判定する。すなわち、確認済ID格納配列sumi[]に登録されているクライアントIDのうち、sumi[cc]に登録されているクライアントIDのpiece配列の上IDがNULLか否かを判定する。sumi[cc]のIDのpiece[][1]=NULLでないとき、つまり上側に隣接するモニタがある場合、ステップM27に進み、sumi[cc]のIDのpiece[][1]=NULLであるとき、つまり上側に隣接するモニタがない場合、ステップM24に進む。
ステップM24では、sumi[cc]のIDのpiece[][2]=NULLであるか否かを判定する。すなわち、確認済ID格納配列sumi[]に登録されているクライアントIDのうち、sumi[cc]に登録されているクライアントIDのpiece配列の左IDがNULLか否かを判定する。sumi[cc]のIDのpiece[][2]=NULLでないとき、つまり左側に隣接するモニタがある場合、ステップM28に進み、sumi[cc]のIDのpiece[][2]=NULLであるとき、つまり左側に隣接するモニタがない場合、ステップM25に進む。
ステップM25では、sumi[cc]のIDのpiece[][3]=NULLであるか否かを判定する。すなわち、確認済ID格納配列sumi[]に登録されているクライアントIDのうち、sumi[cc]に登録されているクライアントIDのpiece配列の下IDがNULLか否かを判定する。sumi[cc]のIDのpiece[][3]=NULLでないとき、つまり下側に隣接するモニタがある場合、ステップM29に進み、sumi[cc]のIDのpiece[][3]=NULLであるとき、つまり下側に隣接するモニタがない場合、ステップM26に進む。
ステップM26では、sumi[cc]のIDのpiece[][4]=NULLであるか否かを判定する。すなわち、確認済ID格納配列sumi[]に登録されているクライアントIDのうち、sumi[cc]に登録されているクライアントIDのpiece配列の右IDがNULLか否かを判定する。sumi[cc]のIDのpiece[][4]=NULLでないとき、つまり右側に隣接するモニタがある場合、ステップM30に進み、sumi[cc]のIDのpiece[][4]=NULLであるとき、つまり右側に隣接するモニタがない場合、ステップM21に戻る。
ステップM27では、「次の確認ID=sumi[cc]のIDを持つpiece[][1]」として、ステップM31に進む。すなわち、「次の確認ID」を、sumi[cc]に登録されているクライアントIDのpiece配列の上IDのクライアントIDとして、ステップM31に進む。ステップM28では、「次の確認ID=sumi[cc]のIDを持つpiece[][2]」として、ステップM31に進む。すなわち、「次の確認ID」を、sumi[cc]に登録されているクライアントIDのpiece配列の左IDのクライアントIDとして、ステップM31に進む。ステップM29では、「次の確認ID=sumi[cc]のIDを持つpiece[][3]」として、ステップM31に進む。すなわち、「次の確認ID」を、sumi[cc]に登録されているクライアントIDのpiece配列の下IDのクライアントIDとして、ステップM31に進む。ステップM30では、「次の確認ID=sumi[cc]のIDを持つpiece[][4]」として、ステップM31に進む。すなわち、「次の確認ID」を、sumi[cc]に登録されているクライアントIDのpiece配列の右IDのクライアントIDとして、ステップM31に進む。
ステップM31では、「次の確認ID」があるmat[block]のmat[block][M][]とmat[block][][N]とを探す。すなわち、「次の確認ID」が示すクライアントIDを含むブロックの中から、「次の確認ID」が位置する縦方向の位置Mと横方向の位置Nとを探す。ステップM32では、「MM=M、NN=N」として、図33に示したステップM14に戻る。すなわち、MMの値をMの値とし、NNの値をNの値とする。すなわち、MMおよびNNを次に確認するモニタのマップ内の位置を表す値、つまりステップM31で探したMおよびNの値にして、図33に示したステップM14に戻る。
図35は、図33に示したマップ格納処理から呼び出される上の隣接処理のフローチャートである。上の隣接処理は、上側に隣接するモニタがあるか否かを確認する。図33に示したステップM9で呼び出されると、ステップN1に移る。
ステップN1では、現IDのpiece[][1]がNULLでないか否かを判定する。現IDのpiece[][1]がNULLでないと、つまり現IDのpiece配列の上IDにクライアントIDがあると、ステップN2に進み、現IDのpiece[][1]がNULLであると、つまり現IDのpiece配列の上IDがNULLであると終了する。
ステップN2では、現IDのpiece[][1]のクライアントIDが、piece[0][0]〜piece[total−1][0]にあるか否かを判定する。すなわち、現IDのpiece配列の上IDが示すクライアントIDが、piece配列の自IDの中にあるか否かを判定する。現IDのpiece[][1]のクライアントIDがpiece[0][0]〜piece[total−1][0]にあると、つまり現IDのpiece配列の上IDが示すクライアントIDが、piece配列の自IDの中にあると、ステップN3に進み、現IDのpiece[][1]のクライアントIDがpiece[0][0]〜piece[total−1][0]にないと、つまり現IDのpiece配列の上IDが示すクライアントIDが、piece配列の自IDの中にないと、終了する。
ステップN3では、対象のpiece[][5]が「0」でないか否かを判定する。すなわち、上IDが示すクライアントIDのpiece配列のチェック項目が「0」でないか否かを判定する。対象のpiece[][5]が「0」でないと、つまり上IDが示すクライアントIDのpiece配列のチェック項目が確認済みでないと、ステップN4に進み、対象のpiece[][5]が「0」であると、つまり上IDが示すクライアントIDのpiece配列のチェック項目が確認済みであると、終了する。
ステップN4では、mat[block][M−1][N]がNULLでないか否かを判定する。すなわち、マップ上で1つ上の位置にクライアントIDが設定されているか否かを判定する。mat[block][M−1][N]がNULLでないと、つまりマップ上で1つ上の位置にクライアントIDが設定されていると、ステップN7に進み、mat[block][M−1][N]がNULLであると、つまりマップ上で1つ上の位置にクライアントIDが設定されていないと、ステップN5に進む。ステップN5では、「対象のpiece[][5]=2」とする。すなわち、上IDが示すクライアントIDのpiece配列のチェック項目を「2」にする。「2」は、配置の確認が完了しているモニタに隣接しており、かつまだ確認が行われていない状態であることを示す。ステップN6では、mat[block][M−1][N]に現IDのpiece[][1]を設定する。すなわち、マップ上で1つ上の位置に、現IDのpiece配列の上IDのクライアントIDを設定する。
ステップN7では、「次の確認ID=現IDのpiece[][1]」とする。すなわち、「次の確認ID」を現IDのpiece配列の上IDのクライアントIDとする。ステップN8では、現IDを持つpiece[][1]をNULLにする。すなわち現IDのpiece配列の上IDをNULLにし、検索済とする。ステップN9では、対象のIDを持つpiece[][3]をNULLにする。すなわち、「次の確認ID」のpiece配列の下IDをNULLにし、検索済とする。ステップN10では、「MM=M−1、NN=N」として、終了する。すなわち、MMおよびNNを次に確認するモニタのマップ内の位置、つまり1つ上の位置を表す値にして、終了する。
図36は、図33に示したマップ格納処理から呼び出される左の隣接処理のフローチャートである。左の隣接処理は、左側に隣接するモニタがあるか否かを確認する。図33に示したステップM10で呼び出されると、ステップP1に移る。
ステップP1では、現IDのpiece[][2]がNULLでないか否かを判定する。現IDのpiece[][2]がNULLでないと、つまり現IDのpiece配列の左IDにクライアントIDがあると、ステップP2に進み、現IDのpiece[][2]がNULLであると、つまり現IDのpiece配列の左IDがNULLであると終了する。
ステップP2では、現IDのpiece[][2]のクライアントIDが、piece[0][0]〜piece[total−1][0]にあるか否かを判定する。すなわち、現IDのpiece配列の左IDが示すクライアントIDが、piece配列の自IDの中にあるか否かを判定する。現IDのpiece[][2]のクライアントIDがpiece[0][0]〜piece[total−1][0]にあると、つまり現IDのpiece配列の左IDが示すクライアントIDが、piece配列の自IDの中にあると、ステップP3に進み、現IDのpiece[][2]のクライアントIDがpiece[0][0]〜piece[total−1][0]にないと、つまり現IDのpiece配列の左IDが示すクライアントIDが、piece配列の自IDの中にないと、終了する。
ステップP3では、対象のpiece[][5]が「0」でないか否かを判定する。すなわち、左IDが示すクライアントIDのpiece配列のチェック項目が「0」でないか否かを判定する。対象のpiece[][5]が「0」でないと、つまり左IDが示すクライアントIDのpiece配列のチェック項目が確認済みでないと、ステップP4に進み、対象のpiece[][5]が「0」であると、つまり左IDが示すクライアントIDのpiece配列のチェック項目が確認済みであると、終了する。
ステップP4では、mat[block][M][N−1]がNULLでないか否かを判定する。すなわち、マップ上で1つ左の位置にクライアントIDが設定されているか否かを判定する。mat[block][M][N−1]がNULLでないと、つまりマップ上で1つ左の位置にクライアントIDが設定されていると、ステップP7に進み、mat[block][M][N−1]がNULLであると、つまりマップ上で1つ左の位置にクライアントIDが設定されていないと、ステップP5に進む。ステップP5では、「対象のpiece[][5]=2」とする。すなわち、左IDが示すクライアントIDのpiece配列のチェック項目を「2」にする。「2」は、配置の確認が完了しているモニタに隣接しており、かつまだ確認が行われていない状態であることを示す。ステップP6では、mat[block][M][N−1]に現IDのpiece[][2]を設定する。すなわち、マップ上で1つ左の位置に、現IDのpiece配列の左IDのクライアントIDを設定する。
ステップP7では、「次の確認ID」が設定されているか否かを判定する。「次の確認ID」が設定されていると、終了し、「次の確認ID」が設定されていないと、ステップP8に進む。すなわち、図33に示した上の隣接処理で、すでに「次の確認ID」が設定されている場合は、「次の確認ID」の更新をスキップする。
ステップP8では、「次の確認ID=現IDのpiece[][2]」とする。すなわち、「次の確認ID」を現IDのpiece配列の左IDのクライアントIDとする。ステップP9では、現IDを持つpiece[][2]をNULLにする。すなわち現IDのpiece配列の左IDをNULLにし、検索済とする。ステップP10では、対象のIDを持つpiece[][4]をNULLにする。すなわち、「次の確認ID」のpiece配列の右IDをNULLにし、検索済とする。ステップP11では、「MM=M、NN=N−1」として、終了する。すなわち、MMおよびNNを次に確認するモニタのマップ内の位置、つまり1つ左の位置を表す値にして、終了する。
図37は、図33に示したマップ格納処理から呼び出される下の隣接処理のフローチャートである。下の隣接処理は、下側に隣接するモニタがあるか否かを確認する。図33に示したステップM11で呼び出されると、ステップQ1に移る。
ステップQ1では、現IDのpiece[][3]がNULLでないか否かを判定する。現IDのpiece[][3]がNULLでないと、つまり現IDのpiece配列の下IDにクライアントIDがあると、ステップQ2に進み、現IDのpiece[][3]がNULLであると、つまり現IDのpiece配列の下IDがNULLであると終了する。
ステップQ2では、現IDのpiece[][3]のクライアントIDが、piece[0][0]〜piece[total−1][0]にあるか否かを判定する。すなわち、現IDのpiece配列の下IDが示すクライアントIDが、piece配列の自IDの中にあるか否かを判定する。現IDのpiece[][3]のクライアントIDがpiece[0][0]〜piece[total−1][0]にあると、つまり現IDのpiece配列の下IDが示すクライアントIDが、piece配列の自IDの中にあると、ステップQ3に進み、現IDのpiece[][3]のクライアントIDがpiece[0][0]〜piece[total−1][0]にないと、つまり現IDのpiece配列の下IDが示すクライアントIDが、piece配列の自IDの中にないと、終了する。
ステップQ3では、対象のpiece[][5]が「0」でないか否かを判定する。すなわち、下IDが示すクライアントIDのpiece配列のチェック項目が「0」でないか否かを判定する。対象のpiece[][5]が「0」でないと、つまり下IDが示すクライアントIDのpiece配列のチェック項目が確認済みでないと、ステップQ4に進み、対象のpiece[][5]が「0」であると、つまり下IDが示すクライアントIDのpiece配列のチェック項目が確認済みであると、終了する。
ステップQ4では、mat[block][M+1][N]がNULLでないか否かを判定する。すなわち、マップ上で1つ下の位置にクライアントIDが設定されているか否かを判定する。mat[block][M+1][N]がNULLでないと、つまりマップ上で1つ下の位置にクライアントIDが設定されていると、ステップQ7に進み、mat[block][M+1][N]がNULLであると、つまりマップ上で1つ下の位置にクライアントIDが設定されていないと、ステップQ5に進む。ステップQ5では、「対象のpiece[][5]=2」とする。すなわち、下IDが示すクライアントIDのpiece配列のチェック項目を「2」にする。「2」は、配置の確認が完了しているモニタに隣接しており、かつまだ確認が行われていない状態であることを示す。ステップQ6では、mat[block][M+1][N]に現IDのpiece[][3]を設定する。すなわち、マップ上で1つ下の位置に、現IDのpiece配列の下IDのクライアントIDを設定する。
ステップQ7では、「次の確認ID」が設定されているか否かを判定する。「次の確認ID」が設定されていると、終了し、「次の確認ID」が設定されていないと、ステップQ8に進む。すなわち、図35に示した上の隣接処理または図36に示した左の隣接処理で、すでに「次の確認ID」が設定されている場合は、「次の確認ID」の更新をスキップする。
ステップQ8では、「次の確認ID=現IDのpiece[][3]」とする。すなわち、「次の確認ID」を現IDのpiece配列の下IDのクライアントIDとする。ステップQ9では、現IDを持つpiece[][3]をNULLにする。すなわち現IDのpiece配列の下IDをNULLにし、検索済とする。ステップQ10では、対象のIDを持つpiece[][1]をNULLにする。すなわち、「次の確認ID」のpiece配列の上IDをNULLにし、検索済とする。ステップQ11では、「MM=M+1、NN=N」として、終了する。すなわち、MMおよびNNを次に確認するモニタのマップ内の位置、つまり1つ下の位置を表す値にして、終了する。
図38は、図33に示したマップ格納処理から呼び出される右の隣接処理のフローチャートである。右の隣接処理は、右側に隣接するモニタがあるか否かを確認する。図33に示したステップM12で呼び出されると、ステップR1に移る。
ステップR1では、現IDのpiece[][4]がNULLでないか否かを判定する。現IDのpiece[][4]がNULLでないと、つまり現IDのpiece配列の右IDにクライアントIDがあると、ステップR2に進み、現IDのpiece[][4]がNULLであると、つまり現IDのpiece配列の右IDがNULLであると終了する。
ステップR2では、現IDのpiece[][4]のクライアントIDが、piece[0][0]〜piece[total−1][0]にあるか否かを判定する。すなわち、現IDのpiece配列の右IDが示すクライアントIDが、piece配列の自IDの中にあるか否かを判定する。現IDのpiece[][4]のクライアントIDがpiece[0][0]〜piece[total−1][0]にあると、つまり現IDのpiece配列の右IDが示すクライアントIDが、piece配列の自IDの中にあると、ステップR3に進み、現IDのpiece[][4]のクライアントIDがpiece[0][0]〜piece[total−1][0]にないと、つまり現IDのpiece配列の右IDが示すクライアントIDが、piece配列の自IDの中にないと、終了する。
ステップR3では、対象のpiece[][5]が「0」でないか否かを判定する。すなわち、右IDが示すクライアントIDのpiece配列のチェック項目が「0」でないか否かを判定する。対象のpiece[][5]が「0」でないと、つまり右IDが示すクライアントIDのpiece配列のチェック項目が確認済みでないと、ステップR4に進み、対象のpiece[][5]が「0」であると、つまり右IDが示すクライアントIDのpiece配列のチェック項目が確認済みであると、終了する。
ステップR4では、mat[block][M][N+1]がNULLでないか否かを判定する。すなわち、マップ上で1つ右の位置にクライアントIDが設定されているか否かを判定する。mat[block][M][N+1]がNULLでないと、つまりマップ上で1つ右の位置にクライアントIDが設定されていると、ステップQ7に進み、mat[block][M][N+1]がNULLであると、つまりマップ上で1つ右の位置にクライアントIDが設定されていないと、ステップQ5に進む。ステップQ5では、「対象のpiece[][5]=2」とする。すなわち、右IDが示すクライアントIDのpiece配列のチェック項目を「2」にする。「2」は、配置の確認が完了しているモニタに隣接しており、かつまだ確認が行われていない状態であることを示す。ステップR6では、mat[block][M][N+1]に現IDのpiece[][4]を設定する。すなわち、マップ上で1つ右の位置に、現IDのpiece配列の右IDのクライアントIDを設定する。
ステップR7では、「次の確認ID」が設定されているか否かを判定する。「次の確認ID」が設定されていると、終了し、「次の確認ID」が設定されていないと、ステップR8に進む。すなわち、図35に示した上の隣接処理、図36に示した左の隣接処理、または図37に示した下の隣接処理で、すでに「次の確認ID」が設定されている場合は、「次の確認ID」の更新をスキップする。
ステップR8では、「次の確認ID=現IDのpiece[][4]」とする。すなわち、「次の確認ID」を現IDのpiece配列の右IDのクライアントIDとする。ステップR9では、現IDを持つpiece[][4]をNULLにする。すなわち現IDのpiece配列の右IDをNULLにし、検索済とする。ステップR10では、対象のIDを持つpiece[][2]をNULLにする。すなわち、「次の確認ID」のpiece配列の左IDをNULLにし、検索済とする。ステップR11では、「MM=M、NN=N+1」として、終了する。すなわち、MMおよびNNを次に確認するモニタのマップ内の位置、つまり1つ右の位置を表す値にして、終了する。
図39は、図24に示した位置設定処理から呼び出される有効ブロック選択処理のフローチャートである。有効ブロック選択処理は、コンテンツを表示させるブロックを選択する。図24に示したステップF8で呼び出されると、ステップS1に移る。
ステップS1では、Block>0であるか否かを判定する。すなわち、ブロックの数が「0」よりも大きいか否かを判定する。Block>0であると、つまりブロックの数が「0」よりも大きいと、2つ以上のブロックに分かれているので、ステップS4に進み、Block>0でないと、つまりブロックの数が「0」よりも大きくないと、ステップS2に進む。ステップS2では、block=0を有効とする。すなわち、block=0として、ブロックがないことを示す。ステップS3では、選択ブロックが、四角として構成されるか否かを判定する。すなわち、選択されて有効とされたブロックの形状つまりブロックを構成するモニタの画面が形成する形状が、四角形であるか否かを判定する。選択ブロックが四角として構成されると、つまり選択ブロックの形状が四角形であると、終了し、選択ブロックが四角として構成されていないと、つまり選択ブロックの形状が四角形でないと、ステップS6に進む。選択されたブロックの形状が四角形である場合は、そのブロックに含まれるモニタのクライアントIDが記憶部11に記憶される。
ステップS4では、ブロックの選択を行う。すなわち、複数のブロックの中から、コンテンツを表示するブロックを1つ選択する。ブロックの選択は、たとえば図24に示したステップF7の自動設定処理で、自動で設定されたモニタの構成の中の複数のブロックを、ブロック番号を付して、サーバ10の図示しない出力装置に表示し、サーバ10の図示しない入力装置によって、ブロック番号を指定することによって選択する。ステップS5では、選択したブロックを有効とし、ステップS3に進む。ステップS6では、有効域の選択を行って終了する。たとえば選択されたモニタの画面からなる形状が四角形を形成するようにモニタを選択して、終了する。モニタ選択は、たとえばサーバ10の図示しない入力装置によって、クライアントIDを指定することによって選択してもよいし、構成設定画面40で設定されているモニタを指示することによって選択してもよい。選択されたブロック番号および選択されたモニタのクライアントIDは、記憶部11に記憶される。サーバ10は、記憶部11に記憶されたブロック番号が示すブロックを構成するモニタのうち、選択されたモニタに対して、コンテンツを送信する。
このように、画像を画面に表示し、音情報であるたとえば音信号を音に変換して出力する音出力部であるたとえばスピーカをそれぞれ有する複数の表示部であるたとえばクライアント20を、予め定める配置位置にそれぞれ配置し、複数の表示部の各音出力部によって出力させる音情報を、予め定める複数の音情報の中から各表示部の配置位置に応じて選択し、選択した音情報を各表示部の音出力部によって出力するので、複数の表示部によって構成される大画面の中に占める各表示部の画面の位置に応じた音を各表示部から出力することができる。したがって、大画面で1つコンテンツの映像を表示する際、複数の表示部全体で音声多重の音響効果を得ることができる。
さらに、複数の表示部であるたとえばクライアント20は、1つの画像を分割して得られる複数の分割画像のうちの1つの分割画像をそれぞれ画面の大きさに拡大して表示し、各表示部が表示する分割画像によって構成される1つの画像が、分割される前の前記1つの画像を拡大した画像に一致するように表示するので、マルチスクリーン構成の複数の表示部によって大画面に表示される1つの画像の中に占める各表示部が表示する画像の位置に応じた音を各表示部から出力することができる。したがって、臨場感のある音を出力することができる。
さらにまた、音出力部であるたとえばスピーカは、その音出力部を有する表示部であるたとえばクライアント20の部分のうち、画面に向かって左側の部分に設けられる左側音出力部であるたとえばL−SPK22と画面に向かって右側の部分に設けられる右側音出力部であるたとえばR−SPK23とを含み、選択された音情報を各表示部の左側音出力部および右側音出力部によって出力するので、ステレオ用に左右の音出力部を有する表示部であっても、配置位置に応じた同じ音を左右の音出力部から出力することができる。したがって、各表示部が左側の音出力部から左チャネルの音を出力し、かつ右側の音出力部から右チャネルの音を出力して、左チャネルの音と右チャネルの音とを聞き分けることができなくなることを防止することができる。
さらに、複数の表示部であるたとえばクライアント20のうち隣接するいずれの2つの表示部についても、前記複数の表示部の各画面によって形成される配置の中心に近い方の表示部の音出力部であるたとえばスピーカの音量を、その中心から遠い方の表示部の音出力部の音量よりも小さい音量で出力するので、真中から遠ざかる位置に配置された表示部ほど大きな音量で出力することができる。したがって、より臨場感のある音を出力することができる。
さらにまた、予め定める複数の音情報は、ステレオの左チャネルの音情報であるたとえば音信号と右チャネルの音情報とを含み、前記複数の表示部であるたとえばクライアント20の各画面によって形成される配置の中心に対して、画面に向かって左側に配置される表示部のうちの少なくとも1つの表示部の音出力部によって左チャネルの音情報を出力し、画面に向かって右側に配置される表示部のうちの少なくとも1つの表示部の音出力部によって右チャネルの音情報を出力するので、音出力部をそれぞれ有する複数の表示部において、ステレオ効果を発揮することができる。したがって、より臨場感のある音を出力することができる。
さらに、表示装置である表示システム1の音出力方法についても、画像を画面に表示し、音情報であるたとえば音信号を音に変換して出力する音出力部であるたとえばスピーカをそれぞれ有する複数の表示部であるたとえばクライアント20を、予め定める配置位置にそれぞれ配置し、複数の表示部の各音出力部によって出力させる音情報を、予め定める複数の音情報の中から各表示部の配置位置に応じて選択し、選択した音情報を各表示部の音出力部によって出力するので、複数の表示部によって構成される大画面の中に占める各表示部の画面の位置に応じた音を各表示部から出力することができる。したがって、大画面で1つコンテンツの映像を表示する際、複数の表示部全体で音声多重の音響効果を得ることができる。