以下、図面を用いて本発明の実施の形態を説明する。
図1は、本発明に係るオーディオネットワークシステムを適用したノードの接続例及びそれらのノード間の伝送例を示す図である。図1(a)は、マスタノードA101及びスレーブノードB102、C103、D104、E105、をリング状に接続した例である。111〜115はそれぞれ各ノード間を接続する物理的な接続線を示している。本ネットワークシステムでは、接続されている複数のノードのうちの1つだけがマスタノードとなる。ここではノードA101がマスタであり、他のノードはスレーブである。矢印121〜125は、パケットの各ビットデータが伝送されていく方向を示している。なお、ノードは、例えば、アナログ入力、アナログ出力、ディジタル入力、ディジタル出力、ミキシング、エフェクト付与、録音再生、及びリモート制御などの機能や、それらの任意の組み合わせの機能を実現する音響機器やPCであり、それら各ノードの機器は、それぞれ処理装置(CPU)や記憶装置や通信I/Fなどのハードウェア構成を備えるものである。
マスタノードA101は、サンプリング周期(当該ネットワークシステムにおける音響信号のサンプリングクロックの周期)毎に規則的に1パケットずつ送信する。すなわち、各ノード101〜105では、それぞれ、1サンプリング周期の間に1パケットのビットデータが上流のノードから入力し下流のノードへと出力されていく。マスタノードA101において、サンプリング周期に対する同期が取られる。すなわち、1サンプリング周期の開始のタイミングでマスタノードA101は1パケットのビットデータの下流のノードB102への送信を開始し、その1パケットの送信が終了した後、マスタノードA101は、その1サンプリング周期が終わるまで待機し、次の1サンプリング周期の開始のタイミングで次の1パケットのビットデータの下流のノードB102への送信を開始する。
なお、本実施形態のネットワークシステムにおける「パケット」は、従来のイーサネット規格で用いられるパケットと同じものである。ただし、通常のイーサネットではパケット単位で伝送を行い、そのノード間の伝送が終わるまでにパケット内のデータが書き換えられることはない。これに対し、本実施形態での「パケット」は、詳しくは後述するが、マスタノードからスレーブノードをループしてマスタノードに戻る間にデータが書き換えられていく。本実施形態では、オーディオデータを1サンプリング周期毎に送るための入れ物を「パケット」と呼んでいる。なお、本願発明は、イーサネット規格の「パケット」に限定されるものではなく、他の任意の形式の「パケット」を用いることもできる。
ここで、OSI基本参照モデルでは、レイヤ3で取り扱うデータの単位を「パケット」と呼び、レイヤ2で取り扱うデータの単位を「フレーム」と呼ぶが、本願では上述したようにオーディオデータを1サンプリング周期毎に送るための入れ物を「パケット」と呼び、該パケットを実現する実際のデータ列を「フレーム」と呼ぶものとする。従って、本願における「パケット」と「フレーム」は同じものを指す語である。
1つのパケットの中には、複数チャンネルのオーディオデータと制御データ(コマンド、コマンドに対する応答、メータ表示用のレベルデータなど)が入る領域が用意されている。各ノードでは、複数チャンネルのうちのそのノードが送信すべきチャンネル(送信ch)及び/又はそのノードが受信すべきチャンネル(受信ch)が指定されている。従って、各ノードにおいては、1サンプリング周期の間に上流のノードから入力し下流のノードへと出力される1パケットのビットデータが当該ノードを通り過ぎるときに、そのパケットの当該ノードの送信chの領域のビットデータは当該ノードが送信すべきオーディオデータのサンプルを上書きし、そのパケットの当該ノードの受信chの領域のビットデータは当該ノードが受信すべきオーディオデータであるのでそのサンプルを取り込む。各ノードでは、1パケットのビットデータが通り過ぎる途中で、このような送信chのデータ書き込みと受信chのデータ取り込みの処理が行われ、その後、当該パケットのビットデータは直ちに下流のノードに送信される。マスタノードA101でも同様の処理が行われる。すなわち、マスタノードA101では、最下流のノードE105が送信したパケットを受信し、そのパケットの当該マスタノードA101に割り当てられた送信chに当該マスタノードA101が送信すべきオーディオデータのサンプルを上書きし、そのパケットの当該マスタノードA101に割り当てられた受信chから当該マスタノードA101が受信すべきオーディオデータを取得する。その処理の結果のパケットデータが、次のサンプリング周期に送信すべきパケットとなる。
パケット(フレーム)の具体的な構成については図3で後述するが、パケットには、上述の各chのオーディオデータを設定する領域の他、制御データを格納する領域も設けられており、該領域を用いて、任意のノード間で各種の制御データの送受信を行うことができる。
コンソール106は、ノードB102に接続されているコンソールである。例えば、ノードB102で受信した制御データのうちコンソール106を宛先とするデータがあった場合は、矢印116のようにノードB102からコンソール106に当該制御データが送信される。また、コンソール106からいずれかのノードに送信したい制御データがあった場合は、矢印117に示すようにコンソール106からノードB102に当該制御データを送り、ノードB102は、ネットワークを循環しているパケットの制御データを設定すべき領域に当該制御データを設定して当該宛先のノード宛てに送信する。制御データの具体的な送受信方法については図3で後述する。
図1(b)は、各ノードを2重の接続線でカスケード接続し、往路の方向にパケットを流す線と復路の方向にパケットを流す線として、パケットをループさせる例である。141はマスタノードA、142〜144はスレーブノードB,C,Dを示す。マスタノードA141とスレーブノードB142は、往路の信号線151と復路の信号線156で接続されている。同様にノードB142とノードC143は、接続線152,155で、ノードC143とノードD144は接続線153,154で、それぞれ接続されている。パケットの流れの方向は、矢印161〜166に示すようなものである。基本的に、マスタノードA141から出力されるパケットのビットデータが矢印161〜166に示すように各ノードを回ってノードA141に戻る点では図1(a)と同様である。ただし図1(b)では、末端のスレーブノードD144に到ってからマスタノードAに戻るまでの経路中にノードC,Bを経由して戻るようにしている。各ノードA〜Dでのオーディオデータ及び制御データの書き込みと読み出しは往路において行う。各ノードA〜Dにおける戻りの経路中では、データの取り込みや書き込みは行わずデータをそのまま通して(スルー)いる。図1(b)では末端のノードAがマスタであるとしたが、中間のノードであるノードBやCがマスタノードになる場合でも、矢印161,162,163の経路を往路と呼び、矢印164,165,166の経路を復路と呼び、往路(この図中では右方向に進む経路)の途中でデータの取り込みや書き込みを行うものとする。この場合、図で中間の位置にあるマスタノードの左側のスレーブノードでは最初に復路側でパケットを受信しその後に往路側でパケットを受信することになるが、往路側でデータの取り込みや書き込みを行うものとして説明する。なお、復路でデータをスルーするのでなく、復路側でデータの取り込みや書き込みを行うようにしてもよい。
リング状の接続の場合、複数のノードを順次接続した後に、さらに端と端のノードを接続しなければならないが、カスケード接続では、複数のノードを2重の接続線で順次していくだけでよい。従って、カスケード接続の設置のほうが簡単な場合もある。
図2は、本実施形態のオーディオネットワークシステムにおける1パケット内のビットデータの流れを示す図である。ここでは、マスタノードAとスレーブノードB,Cが、図1(b)に示したような往路と復路で接続された例で説明する。
マスタノードAは、1サンプリング周期の開始のタイミングで、1パケットのビットデータの送信を開始する。図2(a)は、パケットの先頭ビットB0を矢印201に示すように下流のノードBに送信している様子を示す。この後、マスタノードAは、自身の出力するネットワーククロックに同期してパケットの先頭ビットB0に続くデータを1ビットずつ順次送信する。図2(b)は、50ビット分の時間が経過したタイミングで、マスタノードAが51番目のビットB1を矢印203の示すようにノードBに送信している図であり、このとき、ノードBは受信した先頭ビットB0を矢印202が示すように次のノードCへ送信している。この図では、50番ごとのビットに注目しているが、途中のビットも勿論送信されている。同様にして、マスタノードからは101番目のビットB2、151番目のビットB3、201番目のビットB4で代表されるビットデータが図2(c)〜図2(e)に示すように次々と出力され、それらのビットデータは各ノードを経由してマスタノードAに戻ってくる。図2(e)は、当該パケットの先頭ビットB0がマスタノードAに戻り、211に示すように所定のバッファに格納された様子を示す。図2(f)は、さらに引き続くビットデータがマスタノードAに戻り、216に示すように500ビット余りのデータB0〜B10が所定のバッファに格納された様子を示す。以上のようにして、1パケットの全ビットがマスタノードAから送信された後、マスタノードAは、当該サンプリング周期の終了を待って、再び次のサンプリング周期のパケットの送信を図2(a)のように開始する。ただし、そのタイミングでは、マスタノードAは、当該サンプリング周期のパケットの末尾のビットまでの受信を未だ完了していない。
以上のように1パケットのビットデータが1サンプリング周期で1回循環していく際に、各ノードでは、そのノードで取り込むべき受信chのビットデータを取り込み、そのノードで書き込むべき送信chのビットデータを書き込む。例えば、ノードBでは、受信したビットデータが、当該ノードBで取り込むように指定されている受信chのサンプルのデータであれば、当該ビットデータをノードBの所定のバッファに取り込む。また、受信したビットデータが、当該ノードBから送信すると指定されている送信chのサンプルのデータであれば、当該ビットデータを、書き込むべきデータで上書きする。このような処理の後、当該ビットデータを次のノードCへ送信する。他のノードでも同様である。また、制御データの取り込みと書き込みも同様である。なお、上述したように、本実施形態の各ノードでのデータの取り込みあるいは書き込みは往路(図2ではノードA→B→C)において実行され、復路(ノードC→B→A)ではデータをスルーするだけである。
図3は、本実施形態のオーディオネットワークシステムにおいて、1サンプリング周期で、接続されている全ノードを循環する1パケットのフレームデータの構成を示す。全体で例えば1282バイトある。
301は、プリアンブル、宛先のMACアドレス、送信元のMACアドレス、及びデータレングスを格納する領域である。プリアンブルは、このフレームデータを送信する際に、各ノードにおける同期を確立するためのデータである。各ノードでは、上流のノードから流れてくるデータからこのプリアンブルを検出し、これにより1パケットのフレームデータが開始されたことを検出する。宛先のMACアドレスはブロードキャスト(Broadcast)通信であることを示す16進のFF…FF(パケットの流れに沿った次に受信するノードのMACアドレスでもよい)をセットし、送信元のMACアドレスはマスタノードのMACアドレス(そのパケットを送信するノードのMACアドレスでもよい)をセットする。なお、本オーディオネットワークシステムにおけるノード(図1(a)や(b)のコンソール106,145も含む)は、それぞれ、MACアドレスを有している。レングスは、このフレームデータの全体の長さ(この例では1282バイト)を示す。
302は、パケットの通し番号TN、各サンプリング周期内のパケット番号PN、サンプル遅れ値SD、及びオーディオチャンネル数ACNを格納する8バイトの領域である。パケットの通し番号TNは、マスタノードがパケットの送信を開始する毎にカウントアップしながら当該パケットに付ける通し番号である。各サンプリング周期内のパケット番号PNは、1サンプリング周期で複数パケットを巡回させる際に(変形例として後述する)、その1サンプリング周期内で何番目のパケットかを示す通し番号である。いま説明している実施形態では、1サンプリング周期で1つのパケットを巡回させるので、各サンプリング周期内のパケット番号PNは使用しない。オーディオチャンネル数ACNは、次に説明するオーディオデータの格納領域303のch数を示す。
303は、オーディオデータの格納領域である。ここでは、サンプリング周波数Fs=96kHzとし、1サンプルが32ビットのデータを256ch分格納できるブロックに分けられている。従って、上記ACNには256が設定されている。各chのブロックは、先頭から順に、第1ch、第2ch、…、第256chのサンプルデータを設定する領域となる。ここで、安定したオーディオの伝送のため、ノード間伝送に使われていないchについても常時帯域が確保されている。例えば、あるchのブロックに対してネットワークシステム内に書き込みを行うノードが無くても、マスタノードはそのchのブロックを削除することはない。従って、オーディオチャンネル数ACNは一定値となり、最大伝送可能ch数に対応する。なお、使用されていないchのブロックについては、マスタノードが無音のオーディオ信号を書き込むようにしてもよい。
304は、制御データを格納する224バイト分の領域である。制御データには、コマンド、リプライ、及びレベルデータなどの様々なデータが入る。例えば、あるノードが送信ノードとなって、ある受信ノードに何らかのデータを送信したい場合は以下のようにする。まず、制御データ格納領域304の所定位置にはデータ送信権を表すトークンが設定されているので、制御データを送りたいノードは、サンプリング周期毎に各ノードを循環しているパケット中の当該トークンを取得する。あるノードがトークンを取得すると、そのノードが送信権を取得したことになり、そのノードがトークンを開放するまで他のノードはトークンを取得できない。トークンを取得して送信権を得たノードは、送信したいデータを含む通常のイーサネット規格の送信データパケット(宛先のMACアドレスには、受信先ノードのMACアドレスを設定する)を作成し、その送信データパケットを分割し、制御データ格納領域304に挿入し、幾つかのパケット(図3のフォーマットのパケット)に分けて送信する。そのパケットを受信した各ノードでは、当該パケットの制御データ格納領域304のデータを取り込み、それが上述したイーサネット規格の送信データパケットを分割したデータであった場合、何回かに分けて送られてくるデータを結合して上記イーサネット規格の送信データパケットを再現し、その宛先のMACアドレスが自ノードのアドレスであるかを判定する。自ノード宛てであるときは、該送信データパケットを取り込む。宛先が自ノード宛てでないときは、当該送信データパケットを破棄する。以上により、上記巡回する図3のパケットに乗せて、各ノード間での制御データの送受信を行うことができる。
なお、トークンは常に巡回させておかなくてもよい。例えば、リング状に接続された各ノードをパケットが所定回数回る毎に1回トークンを巡回させる、というようにしてもよい。また、本オーディオネットワークシステムでは、立ち上げ時の初期化処理で、本ネットワークに接続されている各ノード(図1(a)や(b)のコンソール106,145なども含む)のMACアドレスや接続位置については全ノードに知らせるようにしているので、各ノード間の制御データの通信については通常のLANと同様に行うことができる。あるいは、システム全体の制御を行っているコンソールが、トークンの管理を行うようにしてもよい。例えば、パケットの制御データの領域に、各ノードに対応してトークンをリクエストするフラグを記憶する領域を設け、そのフラグを立てることでコンソールにトークンを要求し、それに応じてコンソールがその要求を行った何れかのノードに対してトークンを割り当てて与えるようにすればよい。その場合、パケットの送信が終わったノードは、トークンをコンソールに返却する。
305は、誤り検出のためのFCSフィールドである。本実施形態では、図3のパケットは図1(a)や(b)で説明したように各ノードを巡回する間に書き換えられていくので、FCS305は1対の送信ノードと受信ノード間でのみ意味を持つ。例えば、図1(a)の場合、ノードAでは送信するフレームデータのFCSを領域305に設定してノードBに送信し、ノードBでは、受信したフレームデータのFCSをチェックして当該フレームデータが正常に受信されたかを確認し、正常に受信されていた場合は、該フレームデータから読み出したオーディオサンプルを再生したり、読み出した制御データに基づく制御を行うとともに、当該ノードで書き換えるべきオーディオサンプルや制御データを書き込み済みのフレームデータに基づいてFCSを生成し、領域305に設定してノードBに送信する。正常に受信されていなかった場合は、該フレームデータから読み出したオーディオサンプルや制御データを破棄し、オーディオサンプルの再生をミュートするとともに、当該ノードの受信でエラーが生じたことを示す情報を領域305ないしその直前の領域に設定してノードBに送信する。
図4は、各ノードが備えるフレームデータ送受信部の構成を示す。フレームデータ送受信部は、フレーム受信部401、フレーム再構築部402、フレーム送信部403、音声サンプル抽出部404、チャンネルレジスタ405、音声出力バッファ406、音声入力バッファ407、チャンネルレジスタ408、フレーム受信部409、及びフレーム送信部410を備える。
フレーム受信部401からフレーム再構築部402を経てフレーム送信部403に到る経路は、このノードの往路の経路であり、フレーム受信部409からフレーム送信部410に到る経路はこのノードにおける復路の経路を示している。なお、フレーム送信部410の出力先ノードかつフレーム受信部401の入力元ノードとなるノードが接続されていないとき(図1(b)のノードA)には、フレーム送信部410からフレーム受信部401にデータを直接渡すように自動的に結線され、フレーム送信部403の出力先ノードかつフレーム受信部409の入力元ノードとなるノードが接続されていないとき(図1(b)のノードD)には、フレーム送信部403からフレーム受信部409にデータを直接渡すように自動的に結線されるようになっている。
図4において、上流のノードから送信されたビットデータは、フレーム受信部401で順次受信される。フレーム受信部401は受信したビットデータからネットワーククロックを抽出するとともに、図3で説明したプリアンブル部分を検出し、そのプリアンブル部分の終わりを基準としてオーディオデータ303の範囲のデータを検出する。音声サンプル抽出部404は、そのオーディオデータ303の各chのタイムスロットのサンプルデータを抽出し、そのchがCHレジスタ405で指定されているchであるときには、そのサンプルデータを音声出力バッファ406にコピーする。CHレジスタ405は、当該ノードで取り込むべき受信ch(複数あっても良い)が格納されたレジスタである。
一方、フレーム受信部401で順次受信されるビットデータはフレーム再構築部402に送られる。フレーム再構築部402は、所定ビット数のバッファ(例えば、数十ビット〜数百ビットのシフトレジスタ)を備えており、受信されたビットデータが該バッファを流れていく間に、プリアンブル部の終わりを基準として各chのタイムスロット(ブロック)のデータを検出し、そのタイムスロットのchがCHレジスタ408で指定されているchであるときには、音声入力バッファ407に格納されている当該chに書き込むべきサンプルデータを、当該タイムスロットに上書きする。このバッファは、上述したデータの上書きを行うために設けられているが、同時に、当該ノードが受信するビットデータのネットワーククロックと送信するビットデータのネットワーククロックとのずれを吸収する働きもしている。ただし、バッファのサイズは当該ノードでの伝送遅延に対応するので、余り大きくすることはできない。CHレジスタ408は、このノードで書き換えを行う送信ch(複数あっても良い)が格納されたレジスタである。フレーム再構築部402で再構築されたフレームデータは、フレーム送信部403を介して下流のノードに送信される。
復路では、上流のノードのフレーム送信部から送信されフレーム受信部409で受信されたデータは、そのままフレーム送信部410に渡されて、下流のノードのフレーム受信部へ送信される。
上流のノードのフレーム送信部からフレーム受信部401へのデータ伝送は当該上流のノードのフレーム送信部で発生したネットワーククロックに基づいて行われ、フレーム送信部403から下流のノードへのデータ伝送はフレーム送信部403で発生したネットワーククロックに基づいて行われる。従って、フレーム受信部401の受信動作とフレーム送信部403の送信動作は全く非同期に行われている。復路側も同様である。
以上のようにして、このノードにおいて、指定されたchのサンプルを音声出力バッファ406に取り込むことができる。また、このノードで入力したオーディオデータのサンプルを音声入力バッファ407にセットし、フレームデータ中の指定されたchのタイムスロットに乗せて、他のノードに送信することができる。
ここで、本システムで使用するサンプリングクロックCs(ワードクロック)について説明する。本システムでは、上述した各ノードは各種の音響機器であり、各音響機器は、自身の発生するサンプリングクロックCsに同期してオーディオデータの処理を行っている。ある音響機器から別の音響機器へオーディオデータを伝送する場合、送信側の音響機器と受信側の音響機器とでサンプリングクロックCsの周波数が異なっていると、受信側の音響機器はそのオーディオデータをそのまま受け取ることができずサンプリング周波数変換を行なわなければならないが、その場合、オーディオデータの品質が劣化してしまう。そこで、本システムでは、各音響機器の発生するサンプリングクロックCsを、マスタノードからサンプリング周期(マスタノードのサンプリングクロックの発生タイミング)で送られてくるパケットのタイミングに位相同期させることにより、複数の機器でサンプリングクロックを略一致させ、音響機器間でのオーディオデータ伝送をサンプリング周波数変換無しに行えるようにしている。具体的に説明すると、マスタノードは、自身のサンプリングクロックCsが発生するタイミングでパケットの送信を開始し、そのパケットを受信する各スレーブでは、フレーム受信部401で該パケットのプリアンブル部を検出し、そのプリアンブル部の終わりのタイミングを基準として位相ロックループ(PLL)発振器で自身のサンプリングクロックCsを発生する。図3のパケットは、サンプリング周期ごとにシステムの全ノードを巡回するので、各ノードでは同期したサンプリングクロックを発生することができる。なお、各ノード内の処理による遅延やノード間ケーブルでの遅延があるが、これらの遅延は現実的には無視できる程度である。また、これらの遅延を考慮して各ノードでタイミングを補正し、より正確に同期したクロックを発生するようにしてもよい。
図5は、各伝送ラインにおけるパケットのタイミング図を示す。例えば、図1(a)のマスタノードA101から下流のノードB102に到る伝送ライン111におけるパケットのタイミング図と考えてよい。ここでは、サンプリング周波数Fs=96kHzとする。1サンプリング周期の時間長は10.4μsecとなる。501,502,503はサンプリング周期の開始タイミングを示す。各ノード間の伝送ラインにおけるプロトコルは、上述したように伝送媒体や物理層のレイヤでイーサネットの方式を用いている。ここでは、1000BASE−Tのイーサネット規格の1Gbpsの速度でノード間のデータ転送を行うものとする。この速度だと1ビットを伝送するのに1nsecかかるから、図3で説明した1パケットのフレームデータの時間長は、パケット時間長=1nsec×8ビット×1282バイト=10.26μsecとなる。従って、1サンプリング周期の時間区間に1パケットが入ることが保証される。これにより、図5に示すように、サンプリング周期の開始タイミング501からパケットiのビットデータの転送が開始され、次のサンプリング周期の開始タイミング502に到る前にパケットiの伝送は終了する。パケットi+1,i+2なども同様である。
図6は、本実施形態におけるオーディオサンプル伝送の流れを示すイメージ図である。この図では、1つのパケットが各ノードから隣のノードに順番に渡されていく様子が示されているが、実際のパケットは、図2で示したように複数のノードに跨っている点を注意されたい。ここで、ノードA601がマスタノード、ノードB602,C603がスレーブノードとし、各ノード間は図1(b)で説明したように往路と復路で接続されているものとする。まず、ある時刻(t)にマスタノードが送信すべきパケットとして用意したフレーム614には、サンプルCh1(s−2),Ch2(s−2),Ch3(s−2)が格納されているとする。ここで、時刻(t)の時間分解能はサンプリング周期であり、Ch*の現在時刻(t)におけるサンプルデータをCh*(s)で表す。よって、Ch*(s−3)は、Ch*の現在時刻より3サンプル前のデータを示している。611に、ノードAに戻ってきたCh1,2,3の2サンプル前のデータ(s−2)を示す。
時刻(t)において、各ノード601,602,603に、それぞれCh1,Ch2,Ch3のサンプルデータCh1(s),Ch2(s),Ch3(s)が入力されたとする。612,622,632は、それぞれノードA,B,Cに入力する各chのサンプルデータを格納したバッファである。613,623,633は、それぞれ、各ノードA,B,C内にあるバッファ(図4の音声入力バッファ407に相当する)である。これらのバッファ613,623,633は、それぞれ2サンプルずつ格納できる容量を持っているものとし、いま入力したサンプルデータCh1(s),Ch2(s),Ch3(s)が書き込まれている。
マスタノードAは、直前のサンプリング周期(時刻(t−1))において、巡回して戻ってきたフレーム611(その時点では、サンプルデータCh1(s−1)、Ch2(s−1)、Ch3(s−1)を格納していた)に基づいて現在の時刻(t)のフレーム614を生成する。マスタノードは、その生成したフレーム614に格納されているサンプルデータCh1(s−2),Ch2(s−2),Ch3(s−2)のうち、このノードAで書き込みを指定されているCh1のサンプルデータCh1(s−2)を、バッファ613に積まれている次のサンプルCh1(s−1)で、上書きする(618)。その他のChについては戻ってきたフレーム611に格納されていたサンプルをそのままセットしておく。そのようにして生成したパケットのフレームデータを、現在時刻(t)のサンプリング周期の開始タイミングで、ノードBに送信する。また、ノードAでは、巡回しているパケットからCh1,2,3の各サンプルデータを取り込むことが指定されているとする。そこで、ノードAでは、戻ってきたフレーム614のサンプルデータCh1(s−2),Ch2(s−2),Ch3(s−2)を各chのバッファ615,616,617に取り込んでいる。このバッファ615,616,617は、図4の音声出力バッファ406に相当するものである。ここでは、各Chについて、その時刻(t)における受信パケットから取り込んだ最新のサンプルデータを格納する領域と1つ前のサイクルのサンプルデータを格納する領域の2段の構成とした。この図では、あるノードがパケットに書き込んだChのサンプルデータを、同じノードが取り込むようになっているが、複数Chのサンプルデータを取り込む例を示したかっただけであり、リソースの無駄であるので、実際には同じノードが取り込むことはない。
ノードBは、ノードAから送られたフレーム624に格納されているサンプルデータCh1(s−1),Ch2(s−2),Ch3(s−2)のうち、このノードBで書き込みを指定されているCh2のサンプルデータCh2(s−2)を、バッファ623に積まれている次のサンプルCh2(s−1)で、上書きする(628)。その他のchのサンプルはそのままとする。そのように生成したパケットのフレームデータを、ノードCに送信する。また、ノードBでは、巡回しているパケットからCh1,2,3の各サンプルデータを取り込むことが指定されているとする。そこで、ノードBでは、フレーム624のサンプルデータCh1(s−1),Ch2(s−2),Ch3(s−2)を各chのバッファ625,626,627に取り込んでいる。バッファ625,626,627の構成はノードAと同様のものである。
ノードCは、ノードBから送られたフレーム634に格納されているサンプルデータCh1(s−1),Ch2(s−1),Ch3(s−2)のうち、このノードCで書き込みを指定されているCh3のサンプルデータCh3(s−2)を、バッファ633に積まれている次のサンプルCh3(s−1)で、上書きする(638)。その他のchのサンプルはそのままとする。そのように生成したパケットのフレームデータを、復路に折り返す。また、ノードCでは、巡回しているパケットからCh1,2,3の各サンプルデータを取り込むことが指定されているとする。そこで、ノードCでは、フレーム634のサンプルデータCh1(s−1),Ch2(s−1),Ch3(s−2)を各chのバッファ635,636,637に取り込んでいる。バッファ635,636,637の構成はノードAと同様のものである。復路に折り返されたパケットは、631,621,611に示すように各ノードをスルーして、マスタノードAに戻る。マスタノードは、同様にして次のサンプリング周期で送信するパケットを生成し、次のサンプリング周期の開始タイミングで送出する。
上記各ノードのサンプル取り込み用バッファの状態から分かるように、本実施形態では、マスタノードAだけがサンプルずれの無い状態で各ノードからの音声サンプルデータを取得できる。これに対し、ノードBやCでは、パケットからサンプルデータを取り込む際にサンプルずれが発生している。上流のノードで次のサンプルに書き換えられるchがあるからである。このようなサンプルずれを補正するため、各ノードが、ネットワーク全体の配線状態、及び各chがどのノードによって格納されたか、についての情報を持ち、各ノードから見て、自分より前段にて格納されたサンプルデータは、出力する際に1サンプル分だけ遅延するようにしてもよい。
図7(a)は、スレーブノードのフレーム受信部401(図4)においてプリアンブルが検出され、それにより「パケット受信ありイベント」が発生したときのハードウェア処理を示す。図7〜図9の処理は、フローチャートで表現されているので一見ソフトウェア処理のように見えるが、実際には、ロジック回路ないし信号処理プロセッサ(DSP)が行うハードウェア処理である。ステップ701で、上流のノードから送られてきたパケットのビットデータを受信し、それらを1バイト分集めて図7(b)の受信イベント処理を起動する処理(受信処理)と、フレーム再構築部402のバッファに所定量のデータが格納されたタイミングで、バッファのデータの下流のノードへの送信を開始する処理(送信処理)とを有効にするとともに、プリアンブル部の終わりのタイミングで、タイミング信号をサンプリングクロックCsを発生しているPLL発振器(Fs発生器)に対して供給し、そのサンプリングクロックの周波数を制御する。
図7(b)は、スレーブノードのフレームデータ送受信部において、その受信処理を開始した後、1バイト分のビットデータを受信したときに実行されるハードウェア処理を示す。ここでは、受信したデータをバイト単位で処理するようになっているが、ビット単位やワード単位で処理するようにしてもよい。ステップ702で、受信した1バイトを取り込む。ステップ703では、受信した1バイトがどのタイムスロットのデータかを判別する。ヘッダデータ(図3の301及び302)であるときは、ステップ704で、該1バイトデータをフレーム再構築部402のバッファに書き込むとともに、その受信したヘッダデータに応じた処理を行う。ここで、受信イベント処理によりフレーム再構築部402のバッファに格納されたデータは、上述した送信処理により、当該バッファに所定量(数十ビット〜数百ビット)のデータが溜まったタイミングで、フレーム送信部403を介して次のノードへと自動的に送信される。従って、この受信イベント処理における「送信する」処理は、送信すべきデータを該バッファに書き込む処理のことである。なお、フレーム送信部403からの送信は、フレームデータ送受信部の動作クロックに基づいて生成されたネットワーククロックにより行われ、その送信用のネットワーククロックは、フレーム受信部401が抽出した受信用のネットワーククロックとは同期していない。
受信した1バイトが当該ノードにおける送信ch(図4のCH408)に相当するオーディオデータであった場合は、ステップ705で、オーディオ送信バッファ(図4の音声入力バッファ407)に積まれている1バイトを取り出して、フレーム再構築部402のバッファの、受信した1バイトデータに対応する位置に上書きし、フレーム送信部403から次のノードへと送信する。受信した1バイトが当該ノードにおける受信ch(図4のCH405)のオーディオデータであったときは、ステップ706で、該1バイトデータをフレーム再構築部402のバッファの対応する位置に書き込み、フレーム送信部403から次のノードへと送信するとともに、オーディオ受信バッファ(図4の音声出力バッファ406)に取り込む。受信した1バイトデータが、例えば、送信も受信もしないChのオーディオデータ等の、その他のデータであったときは、ステップS707で、該1バイトデータをそのままフレーム再構築部402のバッファに書き込み、次のノードへと送信する。
受信した1バイトデータが制御データ格納領域(図3の304)のデータであるときは、ステップ708で、当該ノードで送信権を取得しているか判別する。送信権を取得していないときは、ステップ709で、該1バイトデータをそのままフレーム再構築部402のバッファに書き込み、次のノードへ送信するとともに、部分データとして取り込み、該部分データに応じた処理を行う。例えば、該部分データがトークンを分割したデータであり、自ノードで送信権を取得したいときは、何回かに分けて送られてくるデータを結合して該トークンを再現して送信権を取得し、バッファ内に書き込まれたトークンを次のノードに送信されないよう削除する。また、該部分データが、制御データの伝送のための送信データパケット(図3で説明済)を分割したデータであるときは、何回かに分けて送られてくるデータを結合して送信データパケットを再現し、その宛先のMACアドレスが自ノードのアドレスであるときは、該送信データパケットを取り込み、該送信データパケットに含まれる該制御データを取り出して、その制御データに応じた処理を実行する。ステップ708で送信権を取得しているときは、ステップ710で、送信すべきデータが格納されているD送信バッファの1バイトの部分データを、フレーム再構築部402のバッファの、前記受信した1バイトデータに対応する位置に上書きして、次のノードへと送信する。D送信バッファに格納されているデータを全部送信し終わったら、トークンを生成して、バッファの制御データ格納領域の対応する位置に書き込み、次のノードに送信することで送信権を開放する。なお、D送信バッファに格納されているデータが、制御データ格納領域のサイズである224バイトより大きい場合、1つのパケットの制御データ格納領域には入りきらないので、224バイトより小さい複数のパーツデータに分けて、連続する複数サンプリング周期の各パケットの制御データ格納領域に入れて送信する。
ステップ704〜707,709,710の後、ステップ711で受信した1バイトデータが最終バイトであるか判定し、そうであるときはステップ712で送受信終了処理を行う。送受信終了処理は、上述したFCSのチェックに関連する一連の処理と、最後のバイトデータの送信完了時に送信を停止する処理である。
図8(a)は、マスタノードのフレーム受信部401(図4)においてプリアンブルが検出され、それにより「パケット受信ありイベント」が発生したときのハードウェア処理を示す。ステップ801で、当該マスタノードにおける受信開始処理が行われ、当該システムの複数のスレーブノードから送られてきたパケットのビットデータを受信し、それらを1バイト分集めて図8(b)の受信イベント処理を起動する処理(受信処理)を起動する。これにより、そのパケットのフレームデータの受信処理が開始する。なお、マスタノードで発生するサンプリングクロックが基準となって他のノードのサンプリングクロックが生成されるので、ステップ801ではサンプリングクロックCsの周波数制御は不要である。
図8(b)は、マスタノードのフレームデータ送受信部において、その受信処理を開始した後、1バイト分のデータを受信したときに実行されるハードウェア処理を示す。ステップ802で、受信した1バイトを取り込む。ステップ803で、受信した1バイトデータがどのタイムスロットのデータかを判別する。ステップ804〜810は、それぞれ図7(b)のステップ704〜710と同様の処理である。ただし、スレーブノードでのステップ704〜707,709,710ではバッファに所定量のデータが溜まったタイミングで自動的に次ノードへの送信を開始しているが、マスタノードでは、バッファのデータ量に応じて自動的には送信を開始せず、1サンプリング周期の終了のタイミング(すなわち次のサンプリング周期の開始タイミング)まで待ってから送信を開始するため、ステップ804〜807,809,810では1バイトデータのフレーム再構築部402のバッファへの書き込みを、「保存」と表現している。また、受信したフレームデータは現サンプリング周期のフレームデータであるが、マスタノードが次に送信するのは次のサンプリング周期のフレームデータであるので、バッファへの書き込み時には、受信したフレームデータを次のサンプリング周期のフレームデータに変換しつつ書き込みを行っている。ステップ811及び812は、図7(b)のステップ711及び712と同様の処理である。ただし、送信は未だ開始しないので、ステップ812では受信終了処理のみを行う。
図8(c)は、マスタノードのフレーム再構築部402が備えるバッファ(フレームデータの待ちバッファ)の使い方を示す図である。822と823は、後述する変形例の場合に使用するバッファであるので、ここでは待ちバッファA821のみに着目する。待ちバッファA821は、図3のフレームデータを1つ格納できる長さを持っている。あるサンプリング周期に各ノードを巡回してマスタノードに戻ってきたフレームデータが、その次のサンプリング周期のフレームデータに変換されて待ちバッファA821に保存されており、このフレームデータは図8(b)の処理により既に上書きすべきサンプルや制御データは上書きしてあるから、次のサンプリング周期の開始タイミングに至ったときは、待ちバッファA821の先頭から取出用ポインタ825を用いてフレームデータのビット列を取り出していき、次のノードへと順次送信していけばよい。データの取り出しに応じて、取出用ポインタ825は矢印824のように進められ、全フレームデータを取り出したら、取出用ポインタ825は待ちバッファA821の先頭を指すように初期化される。
一方、あるサンプリング周期に各ノードを巡回してマスタノードに戻ってきたフレームデータのビット列は、次のサンプリング周期のフレームデータに変換されて、順次、待ちバッファA821に保存される。この保存は、図8(b)の処理により行われるものであり、保存用ポインタ826で示す位置にデータを書き込み、該保存用ポインタ826を矢印824のように進めていく処理を繰り返すことにより、行われる。戻ってきたフレームデータの全ビット列が待ちバッファA821へ保存されたら、保存用ポインタ826は待ちバッファA821の先頭を指すように初期化される。
なお、1サンプリング周期ごとに、1パケットを送信して複数ノードを巡回させる場合、マスタノードにおいて待ちバッファA821からフレームデータを取り出して次のノードへの送信を開始した後、そのフレームデータの先頭部分がマスタノードに戻ってくるタイミングは、そのフレームデータの送信が終了するよりも前になる(これは、ノード数がそれ程多くなく、各ノードでの処理が早く終わって、マスタノードに戻ってくる場合である。ノード数が多い場合は、マスタノードがフレームの送信を開始し、そのフレームを送信し終えた後に、そのフレームの先頭部分が戻ってくる場合もあり得る。)。その場合、取出用ポインタ825が保存用ポインタ826より見かけ上で先行しているように見える。また、戻ってきつつあるフレームデータの待ちバッファA821への保存が完了する前に、次のサンプリング周期の開始タイミングに至って、待ちバッファA821からのデータ取り出しと送信が開始される場合もあるので、その場合は、保存用ポインタ826が取出用ポインタ825より見かけ上で先行しているように見える。
図9(a)は、マスタノードにおけるサンプリングクロック割り込み処理を示す。サンプリング周期毎に発生する割り込みに応じて実行される処理である。ステップ901で、パケット通し番号TNの値をインクリメントする。ステップ902で、パケット通し番号が(TN−1)のパケットのフレームデータを図8(c)の待ちバッファA821から取り出し、そのパケット通し番号をTNに書き換えて次のノードへの送信を開始する。
図9(b)は、マスタノードにおける1バイト送信イベントの処理である。この処理は、ステップ902で送信開始した後、待ちバッファA821のフレームデータの送信が終了するまで、繰り返し実行される。まずステップ911で、待ちバッファA821の取り出しポインタ825の位置から1バイトデータを取り出し、ポインタ825を進める。ステップ912で、その1バイトデータを次のノードに送信する。ステップ913で、その1バイトデータが最終バイトであるか判定し、そうであるときは、ステップ914で送信終了処理を行う。
なお、上記実施形態では、図7(b)や図8(b)に示したように、1バイト受信イベントがあったときに、サンプルデータや制御データの上書きを行っているが、送信イベントで上書きを行ってもよい。
上記実施形態では、図5に示したように1サンプリング周期で1つのパケットが巡回する例で説明したが、その変形例として1サンプリング周期で複数パケットを巡回させるようにしてもよい。例えば、ノード間の通信を1000BASE−Tでなく10Gビットイーサネット規格で行うものとすると、1サンプリング周期で8個程度のパケットを巡回させることができる。この場合は、以下のようにする必要がある。
(1)図8(c)で説明した待ちバッファは、巡回させる8個のパケットのフレームデータをそれぞれ格納できるように8個の待ちバッファA821〜H828を用意して順番に使用する。1サンプリング周期の開始タイミングから8個のパケットを連続的にマスタノードから送信して巡回させ、該8個のパケットの送信が終了した後、次の1サンプリング周期の開始タイミングまで待ち、そのタイミングが来たら次の8個のパケットの送信を開始する。1サンプリング周期内の何番目のパケットかは、図3の302で説明した各サンプリング周期内のパケット番号PNで指定する。すなわち、この例ではPN=1〜8の値をとる。
(2)各スレーブノードにおけるサンプリングクロックは、PN=1のパケット(すなわち、1サンプリング周期内の先頭パケット)の開始タイミングに同期させて生成するようにする。
(3)図9(a)の割り込み処理のステップ902では、パケット通し番号が(TN−8)のパケット、すなわち8つ前のパケットのフレームデータから、パケット通し番号TNのパケットを作成する。
なお、上記実施形態のカスケード接続において、マスタノードはそのカスケード接続の端ではなく、途中のノードであってもよい。例えば、図1(b)のノードBがマスタノードである場合、ノードBは、まず、各サンプリング周期ごとにノードCに向けて図3のパケットを送信し、ノードB→ノードC→ノードD→ノードC→ノードBと順次伝播され戻ってきたパケットをそのままノードAに送信し、ノードB→ノードA→ノードBと伝播され戻ってきたパケットに基づいて、次のサンプリング周期のパケットを形成するようにすればよい。
また、上記実施形態では、イーサネット規格に従うパケット形式を用いているが、イーサネット以外の規格に従うパケット形式を用いてもよい。制御信号の伝送のため、各ノードにIPアドレスを与えるようにしてもよい。
さらに、カスケード接続の場合、スレーブノードは、一連の処理(ヘッダ処理、オーディオ送受信、制御データの送受信、など)を上流のノードから送られてきたパケットに対して行う代わりに、下流のノードから戻ってきたパケットに対して行うようにしてもよい。
なお、上記実施形態では、マスタノードは、各サンプリング周期毎に、新たなフレームデータを、1サンプリング周期前に生成しネットワークに送出したフレームデータであって、その時点で巡回して戻ってきている(受信中の)フレームデータに基づいて、生成するようになっていた。しかしながら、新規フレームデータの作成のベースとするフレームデータは、2サンプリング周期ないしそれ以上前に生成され、マスタノードに戻ってきたフレームデータとしてもよい。2サンプリング周期以上前のフレームデータであれば、新規フレームデータの作成時には、その末尾まで受信が完了しているので、その受信したフレームデータのFCSに基づいてフレームのエラー検出を行うことができる。そして、エラーが検出されなかった場合のみ、そのフレームデータに基づいて新規フレームデータを生成するようにすればよい。これにより、フレーム伝送エラーによる悪影響を防止ないし軽減できる。
401…フレーム受信部、402…フレーム再構築部、403…フレーム送信部、404…音声サンプル抽出部、405…チャンネルレジスタ、406…音声出力バッファ、407…音声入力バッファ、408…チャンネルレジスタ、409…フレーム受信部、410…フレーム送信部。