図1aは、一実施形態による装置を示す。
装置は、データモデル110を含み、データモデル110は3つ以上のノードを含み、データモデル110の3つ以上のノードの1つまたは複数は、それに割り当てられているIDを有し、上記1つまたは複数のノードの各々は、そのIDによってデータモデル110の他のノードから一義的に区別可能であり、データモデル110のノードのうちの少なくとも2つは各々、1つまたは複数の属性を含み、上記属性の各々が、データモデル110内に記憶されている値を利用することが可能であり、上記少なくとも2つのノードの各ノードは、それに割り当てられているパス指示を有し、パス指示は、当該パス指示が割り当てられているそれぞれのノード、および、データモデル110の3つ以上のノードのうちの少なくとももう1つのノードを含み、上記少なくとも2つのノードの各ノードのパス指示は、それぞれのノードのIDとは異なる。
一実施形態において、データモデル110のノードの各々は、それに割り当てられているIDを有し、たとえば、データモデルのノードの各々は、そのIDによってデータモデル110の他のノードから一義的に区別可能である。
言い換えれば、それゆえ、データモデルの多数のノードが、2つ以上のノードを含むパス指示を含む。たとえば、ツリー階層において、たとえば、ノード「Renderer」がノード「root」に直に後続する場合、パス指示はたとえば、「root.Renderer」として参照することができ、したがって、当該パス指示は、データモデルのノードのうちの2つ、すなわち、「root」および「Renderer」を含む。パス指示「root.Renderer」にとどまらず、ノード「Renderer」はまた、データモデル内で一義的である、それに割り当てられているID、たとえば、数字「2」を有する(たとえば、図3のデータモデル310を参照されたい)。しかしながら、いずれにせよ、ノードのIDとパス指示は常に互い に異なる。このように、パス指示に加えて、ノードに割り当てられているIDが存在する。IDが短い識別子によってノードをアドレス指定する役割を果たす一方で、パス指示の目的は、中でも、データモデルのノードを、パス構造を介して直観的にアドレス指定可能にすることである。
さらに、装置は、属性を有するデータモデルの3つ以上のノードの各々の各属性のための書き込み関数を含むコントローラ120を含み、属性の値は、書き込み関数によって変更可能である。
加えて、装置はシンクロナイザ130を含む。シンクロナイザ130は、データモデル110のノードのうちの1つを指定する更新通知を受信するように構成されており、上記更新通知は、上記ノードの属性をさらに指定し、更新通知は、この属性の値がどのように更新されるべきかを示し、更新通知は、ノードのIDによってノードを指定する。
コントローラ120は、この属性の書き込み関数によって、更新通知に応じてこのノードのこの属性の値を更新するように構成されている。
この文脈において、データモデル110は、グラフ状構造を含み得る。たとえば、ノード「root」がノード「Renderer」に先行することが指定され得る。この関係は、「root」から「Renderer」へのグラフとして定義および/または指示され得る。さらに、たとえば、ノード「Renderer」がノード「Scene」に先行することが指定され得る。この関係もまた、「Renderer」から「Scene」へのグラフとして規定されるか、または、そのように考えられ得る。このとき、そのような関係のすべてが結果として、データモデル110のグラフ状構造をもたらす。
データモデル110は、グラフ状構造の特別な事例と考えることができる、ツリー状階層構造を含み得る。ツリー状階層構造では、一般的に、データモデルのさらなるノードのすべてが間接的または直接的にそれに後続するルートノードが存在する。そのようなツリー状階層構造が図1bに示されている。
たとえば、パス指示「root.Renderer.Scene.src0」は、図1bのツリー状階層のようなツリー状階層内の対応するノードsrc0を一義的に指定することができる。そのようなパス指示は、ノード「src0」ならびにデータモデルの3つのさらなるノード、すなわち、「root」、「Renderer」および「Scene」を含む。対応するノードを一義的に指定するための名前として「src0」のみを使用することは、「src0」が、データモデル内の名前として数回現れる可能性があるため、十分ではない可能性がある。
それによってノードが簡潔にかつ一義的にアドレス指定されるIDは、たとえば、数字であってもよい。たとえば、ノード「src0」は、ID「7」によって指定されてもよい。
用語IDとパス指示とを区別するために、以下の説明が与えられ得る。単純なIDの要件はただ1つである。すなわち、IDは、システム全体を通じて1つだけのノードを一義的にアドレス指定しなければならない。それゆえ、ここでは、たとえば、すべてのノードを単純に番号付けすれば十分である。
通例、パス指示は、IDにとどまらないさらなる特性を呈する。すなわち、パス指示は、グラフのルートから、中間ノードを介して、アドレス指定されるべきノードまでの経路を記載するローカルノード名を含む。グローバルIDとは対照的に、ローカルノード名は、当該ノードおよびその兄弟ノードに対してのみ一義的であればよい。ノードのローカルノード名を、ノードの親要素および/または先行する要素のローカルノード名と組み合わせることによって、結果として、同じくシステム全体を通じて一義的であるパス指示がもたらされる。
一実施形態において、データモデルの3つ以上のノードの各々のIDは、たとえば、数字または文字列またはハッシュ値であってもよい。
一実施形態において、コントローラ120は、属性を含むデータモデルの3つ以上のノードの各々の各属性について読み出し関数を含み、属性の値は、読み出し関数によって読み出し可能である。
たとえば、特定の実施形態において、シンクロナイザ140は、更新通知を受信し、更新通知内に含まれているIDを用いて、このノードに対処する、コントローラ120の該当するコントローラサブユニットを判定し(この目的のために、シンクロナイザ140は、たとえば、各IDに対するコントローラサブユニットに対する参照を記憶している辞書/マップを保持する)、その後、これに、変更されるべき属性の名前および値を含む情報片を伝達する。コントローラ120のコントローラサブユニットは、その後、書き込み関数を用いてデータモデル110を変更する。
一実施形態によれば、シンクロナイザは、データモデルの上記ノードを指定する更新通知を受信するように構成されており、更新通知は、このノードの上記属性をさらに指定し、更新通知は、この属性の値がどのように更新されるべきかを示し、更新通知は、ノードのパス指示を指定し、コントローラは、更新通知に応じてこのノードのこの属性の値を更新するように構成されている。
一実施形態において、データモデルの3つ以上のノードがグラフ状の、たとえば、ツリー状の階層を形成し、それによって、データモデルの各ノードには、グラフ状階層内のデータモデルのノードのうちの少なくとも1つが直に後続し、かつ/または、グラフ状階層内のデータモデルのノードのうちの少なくとも1つが直に先行し、データモデルのノードのうちの少なくとも1つには、ツリー状階層内のデータモデルの2つのノードが直に後続する。
図1bは、一実施形態によるデータモデルのツリー状階層データ構造の例を使用することによって、そのようなグラフ状データ構造を示す。データモデルのツリー状階層において、ノード「DHD(R)」および「Renderer」は、ノード「root」に直に後続する。逆に、ノード「root」は、ノード「DHD(R)」および「Renderer」に直に先行する。ノード「Renderer」には、ノード「LSSetups」、「Scene」、「Spatial Sound Wave」、および「WavPI」が直に後続する。逆に、ノード「Renderer」は、ノード「LSSetups」、「Scene」、「Spatial Sound Wave」、および「WavPI」などに直に先行する。
一実施形態によれば、装置は、データモデルのノードのうちの1つに1つまたは複数の属性を追加する、データモデルの変更に関する情報を受信するように構成されているインターフェースをさらに備え、装置は、上記追加される1つまたは複数の属性の各々についての読み出し関数および書き込み関数を自動的に生成するように構成されており、上記属性の値は、読み出し関数によって読み出し可能であり、属性の値は、書き込み関数によって変更可能である。
実施形態において、生成される書き込み関数はローカルデータモデルの値を変更するだけでなく、たとえば、同時に、シンクロナイザが変更に関して報告されること、変更イベントがシステム内で伝搬されること、ならびに/または、接続されているオブザーバが変更に対応することができること、および/もしくは、自動化データの記録、取り消し/やり直しなどのようなさらなる物事が行われるようにされることを保証もする。
一実施形態において、装置は、ウェブアプリケーションによって、属性を含むデータモデルのノードの各々の属性の各々についての読み出し関数および書き込み関数を与えるように構成されており、それによって、上記読み出し関数および上記書き込み関数は、ウェブアプリケーションによって使用することができる。一実施形態において、ウェブアプリケーションは、たとえば、JavaScriptおよび/またはHTMLにおいて実装されてもよい。
一実施形態によれば、装置は、ユーザ入力を受けてデータモデルのノードのうちの1つの属性のうちの1つに対する変化モニタリングを導入するように構成されている。
たとえば、上記変化モニタリングは、「イベント」を送信またはトリガするように構成されてもよい。
たとえば、装置は、変化モニタリングが導入されている1つの属性の値が変化するときに警告を出力するように構成されてもよい。
たとえば、警告を示すために、イベントにオブザーバを登録することができる。上記オブザーバは、イベントを受信し、その後、警告を出力する。しかしながら、対応は、警告の出力とは異なる任意の対応であり得る。
一実施形態によれば、サーバが提供される。サーバは、上述したような装置である。さらに、サーバは、1つまたは複数のクライアントからの登録を受信するように構成されている。加えて、サーバは、1つまたは複数のクライアントに、当該クライアントの登録を受けて、データモデルに関する情報を転送するように構成されており、データモデルに関する上記情報は、属性を有するデータモデルのすべてのノードまたは2つ以上のノードの属性の値を含み、データモデルに関する情報は、データモデルの各ノードまたはデータモデルの少なくとも2つのノードについて、データモデルのいずれのノードが当該ノードに直に後続するか、および/または、データモデルのいずれのノードが当該ノードに直に先行するかをさらに示す。データモデルはまた、たとえば、ノードIDをも含む。
一実施形態において、サーバは、2つ以上のクライアントからの登録を受信するように構成されており、サーバのシンクロナイザは、データモデルのノードの属性の値が変化していることを示す、クライアントのうちの1つからのメッセージを受信するように構成されており、サーバのシンクロナイザは、上記クライアントのメッセージを受けて、データモデルのノードの属性の値が変化しているということを、サーバに登録している他の2つ以上のクライアントに報告するように構成されている。
逆に、サーバはまた、クライアントからデータモデルおよび更新を受信し得る。これは、たとえば、クライアントがたとえば、相対的に長い期間にわたってサーバに一切接続することなく作業しているとき、たとえば、オフラインで作業しているときに有用であり得る。
一実施形態によれば、サーバは、無線または有線でデバイスにメッセージを送信するように構成されており、上記メッセージは、データモデルのノードのうちの1つの属性が変化していることをデバイスに知らせる。
一実施形態において、装置は、たとえば、WLANによって、GPRSによって、または、UMTSもしくはLTEによって、無線でデバイスにメッセージを送信するように構成されている。
一実施形態によれば、デバイスは、1つまたは複数のスピーカ信号を生成するためのレンダラである。一実施形態において、デバイスはまた、DHD(登録商標)オーディオマトリックスであってもよい。たとえば、接続されているクライアントは、(3D)オーディオワークステーション、オーディオプラグイン(VST/RTAS/AudioUnitsなど)および/またはIPad(登録商標)アプリであってもよい。
一実施形態において、サーバは、クライアントからクライアントのデータモデルに関する情報を受信するように構成されており、クライアントのデータモデルに関する上記情報は、属性を有するクライアントのデータモデルのすべてのノードまたは2つ以上のノードの属性の値を含み、クライアントのデータモデルに関する情報は、クライアントのデータモデルの各ノードまたはクライアントのデータモデルの少なくとも2つのノードについて、クライアントのデータモデルのいずれのノードが当該ノードに直に後続するか、および/または、クライアントのデータモデルのいずれのノードが当該ノードに直に先行するかをさらに示す。
さらなる実施形態によれば、クライアントが提供される。サーバは、上述したような装置である。さらに、クライアントは、上述したサーバに登録するように構成されている。クライアントは、サーバに登録されると、サーバのデータモデルに関する情報を受信するように構成されており、サーバのデータモデルに関する上記情報は、属性を有するサーバのデータモデルのすべてのノードまたは2つ以上のノードの属性の値を含み、サーバのデータモデルに関する情報は、サーバのデータモデルの各ノードまたはサーバのデータモデルの2つ以上のノードについて、サーバのデータモデルのいずれのノードが当該ノードに直に後続するか、および/または、サーバのデータモデルのいずれのノードが当該ノードに直に先行するかをさらに示す。さらに、クライアントは、サーバのデータモデルに関する情報に応じてそのデータモデルを更新するように構成されている。
一実施形態において、クライアントは、クライアントのデータモデルに関する情報をサーバに転送するように構成されており、クライアントのデータモデルに関する上記情報は、属性を有するクライアントのデータモデルのすべてのノードまたは2つ以上のノードの属性の値を含み、クライアントのデータモデルに関する情報は、クライアントのデータモデルの各ノードまたはクライアントのデータモデルの少なくとも2つのノードについて、クライアントのデータモデルのいずれのノードが当該ノードに直に後続するか、および/または、クライアントのデータモデルのいずれのノードが当該ノードに直に先行するかをさらに示す。
一実施形態によれば、クライアントは、オブジェクト指向オーディオシーンを生成するように構成されてもよい。
図1cは、一実施形態によるシステムを示す。
システムは、上述したサーバ170および上述したクライアント160を含む。クライアント160は、サーバ170に更新通知を送信するように構成されている。サーバ170のシンクロナイザは、更新通知を受信するように構成されており、更新通知は、サーバ170のデータモデルのノードのうちの1つを指定し、さらに、上記ノードの属性を指定し、上記属性の値がどのように更新されるべきかを示す。サーバ170のコントローラは、更新通知がノードのIDを指定する場合に、更新通知に応じて上記ノードの上記属性の値を更新するように構成されている。
以下において、最初に実施形態の基本概念を説明する。その後、好ましい実施形態およびそれらの概念を詳細に説明する。
実施形態は、キー値ベースのデータベースの利点を、ドキュメント指向型手法と組み合わせる全般的なメカニズムを提供する。その目的は、グラフの形状に構造化されているデータ構造を互いに、リアルタイムでかつ/または少ない待ち時間および/もしくは低い遅延で同期させることである。
実施形態によれば、アプリケーションの開発におけるこの手法は、以下の様なものである。
アプリケーションのデータを表すグラフ状データ構造が定義される。データ構造は、JSONまたはXMLデータセットであってもよい(JSON=JavaScriptオブジェクト表記法、XML=拡張可能マークアップ言語)。
コード生成器、実行可能コントローラおよびデータモデルによって、グラフ状データ構造からコードが生成される。これは、サーバ側またはクライアント側のいずれで行われてもよい。このように生成されたコードは、たとえば、データをグラフモデルに読み出しおよび書き込むためのルーチン、変化に関心のあるオブザーバに通知するためのルーチン、ならびに、中央サーバおよび/もしくはそれに接続されているクライアントにデータモデルの変化を送信するためのルーチンを含む。
図2aは、グラフの形状を有する、元のデータモデルに基づいて自動的に生成される3つの構造、すなわち、データモデル(モデル)201、オブザーバ構造(ビュー)203およびコントローラ構造(コントローラ)202を示す。
生成されるコントローラ構造202は、ツリー階層をサーバと、したがって同じく他のクライアントとも同期させるためのコードをすでに含んでいる。同期は、クライアントからサーバへ、および/または、サーバからクライアントへと実行されてもよい。
図2bは、クライアント210とサーバ220との間の同期の可能性のある過程を示す。図2bにおいて、クライアント210は、データモデル211と、コントローラ212と、ビュー213と、シンクロナイザ214とを含む。図2bのサーバ220は、データモデル221と、コントローラ222と、シンクロナイザ224とを含む。
たとえば、ユーザ(Anna)205が、何かを変更した場合、クライアント210のコントローラ212がこれを通知される。クライアント210のコントローラ212は、ツリー状データ構造(モデル)211を変更し、同時にまた、更新通知を用いてクライアント210のシンクロナイザ214に報告する。これはすべて、たとえば、自動的に生成される書き込み関数を用いて実行される。
クライアント210のシンクロナイザ214は、更新通知において、サーバ220に、たとえば、サーバ220のシンクロナイザ224に、変更を送信する。サーバ220は、更新通知を受けて、たとえば、サーバ220のコントローラ222によって、そのローカルデータモデル221に変更を入力する。加えて、サーバ220は同時にまた、すべてのクライアント(図2bには示されていない)に変更を送信する。
サーバまたはクライアントアプリケーションが始動すると、それらは最初に、グラフ状データ構造の定義をロードし、上述したコード生成器を用いてアプリケーションコードを生成する。
コード生成器は、たとえば、ハードディスクからロードされてもよく、または、たとえば、登録中にサーバからクライアントに送信されてもよい。
さらに、たとえば、グラフ状データ構造のノードの各々は、クライアントにとって一義的である、それに関連付けられているIDを有する。
IDは、たとえば、以下のように生成することができる。各クライアントは最初に、システム全体を通じて一義的であるクライアントIDを与えられる。クライアントが新たなノードを生成する場合、システム全体を通じて一義的であるノードIDを形成するために、ローカルに一義的なノード指定子が、クライアントIDと組み合わされる。結果として、クライアントIDが送信されると、中央のID生成はもはや必要なくなる。利点は特に、クライアントにおける新たなノードの生成のためにサーバクエリが必要とされなくなることに存する。したがって、クライアントは、上記クライアントがオフラインであるときでさえ、システム全体を通じて一義的であるIDを生成することが可能になる。しかしながら、このための必要条件は、クライアントが少なくとも1度上記サーバに接続されていることである。クライアント内でローカルに生成されたノードは、(後の時点において)たとえば、サーバおよび残りのクライアントに送信されることになり、そこでローカルデータ構造に添付されることになる。しかしながら、IDの名前を変えることはもはや必要なくなる。
たとえば、IDは、動作時間中にのみ有効なままである。このIDによって、後に、ツリーの各ノードを直にアドレス指定することが可能になる。「/trunk/branch/twig/leaf/cell」のような長いパスアドレスの代わりにツリーのノードはこのとき、短いハッシュ、たとえば、「0d4」を表すIDを介してアドレス指定することができる。これは、特に高レベルのデータトラフィックを有する用途にとって重要で
ある。
クライアントおよびサーバが始動されると、データ構造は初期相互マッチングを受けなければならない。クライアントがしばらくオフラインで作業した場合、たとえばサーバが、たとえばクライアントの現在のデータ構造を適合させることができるように、クライアントがそのデータ構造に関してサーバに報告するという点において、クライアントからサーバへとデータ構造をマッチングすることは有用であることが多い。しかしながら、クライアントが後の時点においてサーバから既存のアプリケーションをダウンロードすることを所望する場合、データ構造は、たとえば、クライアントがサーバからサーバのデータ構造を得るという点において、たとえば、サーバからクライアントへとマッチングされなければならない。
たとえば、データがサーバからクライアントへとマッチングされるべきであると仮定すると、これは、たとえば、以下のように実行することができる。
第1のステップにおいて、クライアントとサーバとの間のノードIDがマッチングされなければならない。すなわち、クライアント側およびサーバ側の関連ノードが、同じアドレスを有しなければならない。この目的のために、サーバは、たとえば、データツリーと同じ構造を有するが、最初はIDのみを含むIDツリーを生成する。代替的に、サーバおよび/またはクライアントはまた、たとえば、パスをIDと関連付けるテーブルを送信してもよい。このIDツリーは、クライアントに送信される。後者は、既存のIDを、サーバのものに置き換える。ツリーのオブザーバ(ビュー)はまた、IDの名前の変更に関しても報告される。
このステップの後、実際のツリーデータが、サーバからクライアントに送信されなければならない。ここで、たとえば、これがどのように機能し得るかについて2つの可能性がある。
例1:第1の可能性は、クライアントにツリーデータを、ツリー状データ構造として送信し、これを対応するノードへと解析(入力)することである。
例2:第2の可能性は、サーバからクライアントにツリーデータを個々に、ノードごとに送信することである。この目的のために、たとえば、それぞれのノードのデータがノード指定子またはノード名とともにデータパケットにパケット化され、クライアントに送信される。クライアントは、ノード指定子を用いて関連ノードを判定することができ、対応するデータを上記関連ノードに書き込むことができる。
第1の可能性は、最初に、サーバからクライアントにおよび/またはその逆に、相対的に大きいデータ構造を送信するために使用される。第2の可能性は、小さいが頻繁に発生する任意の変化をクライアントとサーバとの間で効率的に交換するために使用される。
いくつかのクライアントを互いに接続するためには、このコンテキストにおいては、サーバが、当該サーバが得るデータパケットをクライアントから他のクライアントに単純に転送すれば十分である。ここで提案されているシステムによって、すべてのクライアントは同じツリー構造および同じIDを有する。したがって、クライアントの各々は、他のクライアントの変化の任意のメッセージを把握することが可能である。
実施形態は、キー値アドレス指定(キー値データベース)の性能優位性を、ドキュメント指向型手法(たとえば、XML、JSONデータ)および自動コード生成の可能性と組み合わせる。
データのキー値アドレス指定は、データに対する高速の機械的アクセスを可能にする。このように、ソフトウェアアプリケーションの高頻度、低待ち時間の同期が保証される。
ドキュメント指向型手法は、複雑に構造化されている大きいデータセットの管理を単純化する。結果として、たとえば、アプリケーション開発者にとってデータへのアクセスが非常に単純になる。その結果として、アプリケーションを高速かつ効率的に開発することができる。
自動コード生成は、コントローラ、パブリッシャ、パーサ、シリアライザ、シンクロナイザ、読み出し関数および書き込み関数のような回帰コード構成要素の生成が、グラフ状データ構造から自動的に生成されることを可能にする。これによって、配布ソフトウェアアプリケーションの開発期間をさらに低減することが可能である。
同様に、グラフ状データ構造からの自動コード生成はまた、配布ソフトウェアアプリケーションを開発する時間および費用も節約する。グラフ状データ構造が拡張されることは、自動的にまた、プロトコルの拡張、パーサ、シリアライザなど、シンクロナイザなども拡張されることを示す。
グラフ状データ構造間の同期は、アプリケーション開発者に対して絶対的にトランスペアレントであるように実行される。アプリケーション開発者は、単純にそのデータ構造を定義し、残りはコード生成器によって行われる。
各クライアントとサーバの両方がデータモデル全体(または、実施形態によれば、データモデルの少なくとも一部分)を保持するということに起因して、クライアントがオフラインで作業するようにし、後にそれらのクライアントを同期させることが可能である。同時に、システムの安定性が明らかに増大する。したがって、各クライアントが、サーバのバックアップとして同時に動作することができる。
実施形態の重要な使用分野は、ウェブ開発の分野である。コードは一般的に、機械コードの形態ではなく、JavaScript、Rubyなどとしてオープンに送信される。
適用技術分野は、たとえば、機械の制御およびモニタリング、オーディオシステム、一般的な分散ソフトウェアアプリケーション、およびウェブアプリケーションの制御およびモニタリングのような、協働分散リアルタイム適用である。
実施形態は、たとえば、ウェブベースであってもよく、分散アプリケーションの開発を明らかによりユーザフレンドリかつよりコスト効率的にし、それらをクロスプラットフォームに設計する、ユーザインターフェースフレームワーク(UI.FM)として実装されている。
いくつかの実施形態は、たとえば、3Dオーディオシステムを、たとえば、スタジアム内でいくつかの聴取位置から同時に音響的に導入するために使用されてもよい。
図2cは、UI.FMを使用しない例を示す。図2cは、Bregenzのレイクステージを表す。正面に、ステージ230が図示されている。多数のスピーカ231、232、233、23Nがステージ230上に設置されている。聴衆の領域に、調整可能制御パラメータに従ってスピーカ231、232、233、23Nを駆動するFoH240(「Front of House」:ステージ建物の正面中央の空間、音声モニタリングオペレータが音声を調整する場所)が見える。FoHは、調整卓241、方向ミキサ(dm)242、設定ツール(config)243などを含む。たとえば、広い聴衆領域250、7,000が人のための座席を提供する。
目的は、すべての聴衆メンバが最適な音声を聴くことである。この目的のために、たとえば、本発明の実施形態が利用可能でない場合、以下の手法を採用することになる。すなわち、第1の座席、たとえば、右手側の位置251に行く。この第1の位置251において音声を聴き、その後、携帯電話を介してFoH240に任意の変更要求を送信する。FoH240において、それに従ってパラメータが変更される。その後、音声を聞き、音声に満足した場合、第2の位置252、たとえば、さらに左のある位置に移動する。そこで、再びそれに従って音声を聴き、再び、FoH240に任意の変更要求を、無線によって送信する。FoHにおいて、それに従って再びパラメータが変更され、第2の位置252において、それに従って変更された音声を再び聴き、その後再び、それに従ってFoHによるマッチングを実施する。その後、次の位置に移動し、それに従ってこのプロセスを継続する。そのようなプロセスは非常に費用および労力がかかる。
以下において、実施形態を詳細に説明する。UI.FMの機能を説明する。UI.FMは、新規のユーザインターフェースフレームワークである。
図2dは、この新規のソリューションが実装される実施形態を示す。ここでも、ステージ260、FoH270および聴衆領域280が図示されている。しかしながら、図2dの例では、UI.FMサーバ275が1つだけ設置されている。UI.FMサーバ275は、システム内の構成要素に接続されている。3つの異なる端末デバイス、すなわち、2つのiPad(登録商標)282、283およびiPhone(登録商標)281が見える。端末デバイスはまた、任意の他の適切な端末デバイスであってもよい。
たとえば、3人の音響技師284、285、286が、スタンド内の異なる位置に同時に移動することができ、ここで、音響技師284、285、286の各々が、音声を位置付け、構成および/または設定することが可能である。変更は、各事例においてそれぞれの携帯端末デバイス281、282、283を介して行われる。携帯端末デバイス281、282、283は、たとえば、WLANを介してUI.FMサーバ275に接続されている。端部情報がUI.FMサーバ275内で設定され、それに従ってスタジオ室内の構成要素を制御する(図2dには示されていない)。たとえば、Config、Rimおよび調整卓が、制御される構成要素であってもよい。
端末デバイス283に対して音響技師286によって実行される任意の変更は、他の端末デバイス281、282に直ちに転送される。すなわち、他の端末デバイス281、282がそれに従って更新される。これは、他の参加者(たとえば、図2dにおいては他の音響技師)284、285が、参加者の1人286が変更したものが何かを直ちに知ることができ、それに従って変化を聞くことができ、それに直ちに対応することができることを意味する。言い換えれば、位置Cに位置する音響技師の1人が位置Cにおいて非常に良好に聞こえるが、位置Bにおいてはそうでない何かを変更した場合、位置Bに位置する人285は、それに即座に対応することができ、異なる設定を実施し、したがって、再び変更を行うことができる。これによって、位置A、BおよびCに位置する3人284、285、286がパラメータを最適にネゴシエート、たとえば、制御することができる。したがって、図2dの実施形態は、図2cを参照して上記で説明したものと比較して明らかな単純化および改善を表す。
異なる適用シナリオ、すなわち、音響システムの車内への設置が、図2eに示されている。たとえば、内部に4つの座席261、262、263、264を有する車両、ここでは、自動車255が見られる。多数のスピーカ265を備える音波処理システムが、それに従って車両内に設置されている。各座席261、262、263、264にとって最適な音声が生成されることが所望される。
これを実施することを可能にするために、4つのiPad(登録商標)266、267、268、269を、自動車255内で使用することができる。4人の音響技師256、257、258、259が、ここで、自動車255内で4つのiPad(登録商標)266、267、268、269を利用することができる。たとえば、自動車255内の4人の音響技師256、257、258、259は、iPad(登録商標)266、267、268、269を用いて音声を同時に設定することができる。たとえば、自動車255内の4人の音響技師256、257、258、259が、Bregenzのレイクステージの事例において図2dの例ですでに説明したように、iPad(登録商標)266、267、268、269によって、音声を直ちに聞き、最適な(全体的な)音声を互いにネゴシエートすることができる。この目的のために、Wifiを介してiPad(登録商標)266、267、268、269が接続されているUI.FMサーバ276が利用される。ユーザ256がデバイス266に対して実施する任意の変更がデバイス266からUI.FMサーバ276に送信され、UI.FMサーバ276は、変更を他のデバイス267、268、269に転送する。このすべてが、低レベルの遅延で実施される。
図2fは、IlmenauのFraunhofer Institut fuer Digitale Medientechnologieの音響研究所が提示されている一実施態様によるさらなる実施形態を示す。ここには、互いに協働すべきである大量のサーバ技術がある。中でも、図2fは、レンダラ291、加えて照明コントローラ292、さらに増幅器293、およびオーディオマトリックス294を示している。図2fの左手側には、いくつかの端末デバイス、たとえば、PCワークプレイス295、第1のiPad(登録商標)(iPad(登録商標)1)296、第2のiPad(登録商標)(iPad(登録商標)2)297、および、たとえば、ゲストの端末デバイス298が提示されている。たとえば、ゲストもまた、他のデバイス291、292、293、294、295、296、297と協働すべきである自身の携帯電話298を携行することができる。
たとえば、図2fの右手側のハードウェア291、292、293、294を、図2fの左手側のデバイス295、296、297、298によって制御することができることが望ましい場合がある。たとえば、すべてのパラメータが、図2fの左手側のデバイス295、296、297、298によって設定されることを可能にすることが意図されている。
図2fの左手側のデバイス295、296、297、298と、図2fの右手側のハードウェア291、292、293、294との相互接続は、UI.FMサーバ290によって実施される。UI.FMサーバ290は、一方では、図2fの右手側のハードウェア291、292、293、294に接続されている。たとえば、レベルデータおよび制御データが、UI.FMサーバ290とレンダラ291との間で交換される。したがって、図2fの右手側のさらなるハードウェア292、293、294も、UI.FMサーバ290に接続されている。したがって、図2fの左手側の端末デバイス295、296、297、298も、UI.FMサーバ290に接続されている。ユーザが、iPad(登録商標)296、297のうちの1つを介して、たとえば、「iPad(登録商標)1」296を介して入力を行うと、たとえば、制御情報を入力すると、上記入力は、それに従ってUI.FMサーバ290に送信される。その後、UI.FMサーバ290は、上記情報を、それに従って図2fの右手側の周辺ハードウェア291、292、293、294に渡す。
UI.FMは多数の利点を備える。たとえば、UI.FMサーバは、たとえば、図2gに示すように、ウェブサーバ215として実装することができ、クライアント、たとえば、iPad(登録商標)216、217が、ウェブクライアント226、227を実装することができる。したがって、クライアント216、217にソフトウェアをインストールする必要はなく、クライアント216、217の登録を受けて、ウェブサーバ215がクライアント216、217にソフトウェアを配信する。ウェブサーバ215および/またはウェブクライアント226、227として実装することに起因して、大量の支出が節約される。
UI.FMのさらなる利点は、システムが低遅延で動作することである。たとえば、ウェブクライアント226として実装されているクライアント216の1つに置かれる制御パラメータは、UI.FMサーバ215に即座に送信される。UI.FMサーバ215はその後、1つまたは複数のさらなるクライアント、たとえば、さらなるiPad(登録商標)217に、制御データを即座に送信する。このとき、(1つまたは複数の)さらなるクライアント(複数可)217もまた、その上に位置する1つのウェブクライアント227を有する。対応するさらなる端末デバイス217上のそれぞれのさらなるウェブクライアント227はその後、問題になっているパラメータを直ちに更新する。同時に、UI.FMサーバ215は、接続されている周辺機器、たとえば、レンダラ229に、パラメータ更新に関して報告する。
一実施形態によれば、クライアントは、ウェブブラウザにおいて動作するように構成されてもよい。その利点は、プログラムがクライアント側のウェブブラウザにおいて動作することに起因して、アプリケーション開発者がその中に開発者がコマンドを直に入力することができるコマンドライン(図2gの参照符号228)を開くことができることである。たとえば、図2gの実施形態において、コマンド「scene.source0.pos = ...」を入力することができ、それによって、たとえば、「source0」の位置を変更することができる。したがって、システムはスクリプト可能性が高い。
一実施形態において、クライアントは、たとえば、サーバに、クライアントのデータモデルの2つ以上のノードのIDを送信するように構成されてもよい。
以下において、図3に示す例示的な設定によって、システムおよびその構成要素を説明する。図3の各単一の構成要素は単独で実装されてもよく、したがって、単独で一実施形態を表すことが理解される。さらに、図3の1つまたは複数の構成要素に関連して説明されている一般的な方法および一般的な実施態様がまた、一般的に実施されてもよく、したがってまた、一般的な方法および/または一般的な実施態様として、本発明の一実施形態をも表すことが理解される。
一例を上げると、図3は、ワークプレイスPC350を表す。加えて、図3は、モバイルiPad(登録商標)360を示す。さらに、図3は、レンダラ380、および、オーディオマトリックスユニット390、たとえば、DHD(登録商標)オーディオマトリックスユニットを示す。さらに、図3は、UI.FMサーバ300を示す。
レンダラ380は、サブモジュール、たとえば、立体音響波サブモジュール381を含んでもよい。さらに、レンダラ380は、シーン、たとえば、シーンユニット382を保持してもよい。さらに、レンダラ380は、たとえば、スピーカ設定を構成するためのスピーカ設定ユニット383を含んでもよい。さらなるサブモジュールが存在してもよい。たとえば、Wavプレーヤ384が、さらに存在してもよい。同様に、オーディオマトリックスユニット390がサブモジュールを備えてもよい。たとえば、DHD(登録商標)オーディオマトリックスユニット390は、たとえば、クロスポイントマトリックスサブモジュール391内にクロスポイントマトリックスを含んでもよい。
UI.FMサーバ300は、たとえば、レンダラ380および/またはDHD(登録商標)オーディオマトリックスによって、図示されているような実世界を、グラフ状、たとえば、ツリー状のデータモデル310にマッピングするように構成されている。たとえば、図3の右手側のUI.FMサーバ300の表現は、データモデル310を示す。データモデル310内の最上部には、ルートノード(「Root」)が図示されている。ルートノードの下部には、DHD(登録商標)オーディオマトリックス(「DHD(R)」)およびレンダラが図示されている。DHD(R)オーディオマトリックス390を表す、データモデル310内のノードDHD(R)は、その下部に位置する「crosspoint matrix」ノードを有する。クロスポイントマトリックス391の上記表現は、翻って、接点、たとえば、x0、x1およびx2を含む。データモデル310内のレンダラ380の表現は、翻って、レンダラ380の現実のサブモジュールを表す後続のノードとして、その下部に位置するノード「speaker setup」、「Wav Player」および「Scene」を有する。シーンは、翻って、ソース、たとえば、src0、src1およびsrc2を有する。ソースsrc0、src1およびsrc2は、それらに関する限りでは、特性、たとえば、位置pos、回転rot、on/off、消音などをも有する。これらのサブモジュール、属性および関係のすべてを、データモデル310によってマッピングすることができる。したがって、データモデル310は、特に有利に構成されているメモリを表す。
UI.FMサーバ300および周辺ハードウェア380、390の相互作用を下記に説明する。
たとえば、実施されるべきことが、たとえば、データモデル内のソースsrc0、src1、src2が変更されるとき、たとえば、レンダラ380が上記情報を得、また、それに従って、対応するソース、たとえば、src0、src1またはsrc2の位置の変更の形態でそれを実施することであるとき、特定の問題が生じる。
これに対する解決策を実施するために、コントローラ(制御ユニット)320が、UI.FMサーバ300内に導入される。たとえば、データモデルのsrc0に関連して、UI.FMサーバ300のコントローラ320内にも、ノードsrc0がある。ソースsrc0の各特性について、たとえば、特性「pos」、「rot」、「on/off」および「mute」について、コントローラ320は、特性の値を設定するための対応する関数、および、特性の値を読み出すための対応する関数を備える。たとえば、コントローラ320は、特性posの値を設定するためのsetPos(...)関数、および、特性posの値を読み出すためのPos(...)関数を提供する。たとえば、データモデル内の位置を変更するよう所望する場合、setPos(...)関数を呼び出す。setPos(...)関数において、その位置が設定されるべき設定先である現在の位置、たとえば、(1, 2, 3)が示される。コントローラ320内の関数setPos(...)を呼び出すことによって、データモデル内の位置posが変更される。属性が値を有すると記載されているとき、「値」という用語は、広い意味において理解されるべきであり、たとえば、数値、文字列値、すなわち、単語または文を表す値、(1, 2, 3)のような数値のタプル、または、たとえば、文字列値のタプル、たとえば、(“Hallo Welt”)(“hello world”)、「コード」および任意の他の種類の値型を含む。
属性(特性)の値を指定および変更するだけの可能性に加えて、setPos(...)関数は、接続されているビューに報告する可能性をさらに提供する。
一実施形態において、デバイス、たとえば、レンダラ380またはDHD(登録商標)オーディオマトリックス390は、無線または有線でそれに送信されているメッセージを有し、上記メッセージは、デバイスに、データモデル310のノードのうちの1つの属性が変化していることを報告する。
そのようなメッセージによって、たとえば、レンダラを制御するために、たとえば、ビュー、すなわち、データモデル310および/もしくはその属性に対するビュー、ならびに/または、コントローラ構造320に対するビューを表すレンダラドライバ330がプログラムされるべきである。そのようなビューによって、周辺機器、たとえば、レンダラを、それに従って制御することができる。
たとえば、UI.FMサーバ300のレンダラドライバ330は、ビューとして、UI.FMサーバ300のコントローラ320のノードsrc0に登録することができる。それによって、レンダラドライバは、コントローラ320のsrc0ノードのビューになる。UI.FMサーバ300のコントローラ320のsrc0.setPos(...)関数を呼び出すことによってデータモデル内の位置が設定されると、ビュー330(すなわち、レンダラドライバ330)は同時に、それに従って通知される。
そのような通知を受けて、レンダラドライバ330はその後、データモデル310から、更新されているsrc0の特性pos(すなわち、ソースsrc0の位置)をロードする。しかしながら、特性はまた、通知のフレームワーク内でレンダラドライバ330に通信されてもよい。結果として、データモデルに対するアクセスが省かれる。
加えて、レンダラドライバ330は、プロトコルメッセージを生成し、上記プロトコルメッセージをレンダラ380に送信する。たとえば、プロトコルメッセージは、OSC制御メッセージであってもよい(OSC=オープンサウンドコントロール)。
レンダラドライバ330に加えて、または、レンダラドライバ330に対する代替形態として、UI.FMサーバ300は、同じくたとえばコントローラ320のソースsrc0に登録されるさらなるドライバを含んでもよいが、上記さらなるまたは代替的なビューは、異なる挙動を呈する。ここでも、たとえば、src0の特性pos(すなわち、src0の位置)が変化すると、データモデルが変更され、接続されているドライバのすべて(すなわち、それに従って登録されているドライバ)が通知される。接続されているドライバは、対応する周辺ハードウェアに送信される対応するプロトコルメッセージを生成する。対応する変更が、その後、周辺ハードウェアにおいて実施される。
逆のデータ送信および更新様式も可能であり、たとえば、プロセスは、たとえば、レンダラ380内で、たとえば、src0の位置を変更してもよい。この事例において、レンダラ380は、対応するレンダラドライバ330にプロトコルメッセージを送信することになる。そのようなメッセージによって、レンダラドライバ330は、対応する位置が変化しているということを通知され、コントローラ320のsrc0のsetPos(...)関数を呼び出し、データモデル310内のsrc0の特性posの値がその後、変更される。
レンダラドライバ330が、レンダラドライバ自体が引き起こしたsrc0の位置の変化に関して通知されることを回避するために(必ずしもそうとは限らないが、無限ループの危険の可能性がある)、UI.FMサーバ300のレンダラドライバ330は、src0の位置の変化、たとえば、レンダラドライバ自体が引き起こした変化に関して通知されることを所望しないことを指定することができる。
それと同様に、たとえば、DHD(登録商標)オーディオマトリックスユニット390のさらなるドライバ、たとえば、レンダラドライバが、UI.FMサーバ300内に実装されてもよい。
UI.FMサーバ300のコントローラ320のさらなる特性を下記に説明する。
ソースsrc0だけでなく、さらなるソースsrc1およびsrc2ならびにシーンも、コントローラ320内に含まれることが留意されるべきである。言い換えれば、データモデル310内の各ノードに対してコントローラサブユニットがある。
これは、UI.FMサーバ300の重要な特性である。最終的に、ツリー構造を有するデータモデル階層310に加えて、それと同様にこれもツリー構造を有するコントローラ階層320が結果としてもたらされる。コントローラ320の上記ツリー構造はこのとき、ちょうどデータモデル階層310のツリー構造と同様のものと考えられる。
実施形態によれば、UI.FMサーバ300のデータモデル階層310は、ユーザによって定義されてもよい。たとえば、UI.FMサーバ300のデータモデル階層310は、完全にユーザによって定義されてもよい。たとえば、コントローラ階層320がデータモデル階層310から生成されるか、または逆に、データモデル階層310がコントローラ階層320から生成され得るかのいずれかの可能性がある。好ましい実施形態において、コントローラ階層320が定義され、データモデル階層310がそこから導出される。
したがって、UI.FMサーバ300の1つの特定の特性は、2つの並列階層、すなわち、コントローラ階層320およびデータモデル階層310が共存し、互いに関連していることに存する。したがって、コントローラ階層320内の各ノードは、データモデル階層310内の対応するノードに対する対応する参照(reference)を有する。たとえば、コントローラ階層320のルートノードとデータモデル階層310のルートノードとの間に参照があり得る。したがって、コントローラおよびデータモデル階層310ならびに接続されている周辺ハードウェアの間に接続が存在する。
制御デバイスとUI.FMサーバ300との間ならびに/または制御デバイスとUI.FMサーバ300のコントローラ階層320および/もしくはデータモデル階層310との間の接続は下記において説明される。
従来技術において、データモデル310はデータベース内で編成される。従来技術において、クライアントはさらに、データベースに問い合わせを送信し、データベースから返ってくる応答を受信し、その後、得られたデータを用いて作業することが可能になる。
さらに、従来技術によれば、クライアントは、データモデル310のノードに登録することができ、データモデルのノードが変化するときにメッセージを受信する。データモデル自体は、たとえば、データベース内に記憶されてもよい。しかしながら、データモデル310の編成およびデータモデル310が更新されるべき様式は、従来技術においては、たとえば、完全にアプリケーション開発者に委ねられたままである。
一実施形態によれば、ユーザを大量の作業から解放するメカニズムが提供される。このメカニズムを、以下において説明する。
クライアント、たとえば、ワークプレイスPC350が始動すると、クライアントはUI.FMサーバ300に登録する(図3のワークプレイスPC350とUI.FMサーバ300との間の項目(1)を参照されたい)。したがって、クライアントは最初に、UI.FMサーバ300に登録する。
その後、UI.FMサーバ300は、コントローラ階層320をクライアントに送信する(図3のワークプレイスPC350とUI.FMサーバ300との間の項目(2)を参照されたい)。コントローラ階層320とともに、データモデル階層310も送信される。これは、クライアントが、たとえば、コントローラ階層320からデータモデル階層310を導出するという点において、または、データモデル階層310は、コントローラ階層320に加えて明示的に送信されるという点において黙示的に実行されてもよい。
コントローラ階層320の(および、可能性としてまたデータモデル階層310に加えての)送信に起因して、クライアントとUI.FMサーバ300の両方に同じ階層が存在する。すなわち、コントローラ階層352およびデータモデル351が、クライアント、たとえば、ワークプレイスPC350に存在する。
コントローラ階層320およびデータモデル階層310の送信はまた、たとえば、ワークプレイスPC350に加えて、たとえば、iPad(登録商標)360がUI.FMサーバ300に登録する場合は、同じく当該iPad(登録商標)についてのように、さらなるクライアントについても実施されてもよい。したがって、図3のiPad(登録商標)360は、ちょうど図3のワークプレイスPCのように、コントローラ階層362およびデータモデル361を備える。
ワークプレイスPC350のコントローラ階層352は、「root」、および、加えて、UI.FMサーバ300のコントローラ階層と同様に、「root」から下流に接続されているノード、たとえば、中でも、src0およびその下流ノードを備える。同じことが、クライアント内のデータモデル、たとえば、ワークプレイスPC350のデータモデルおよびiPad(登録商標)360のデータモデルに当てはまる。たとえば、ソースsrc0が、それらのコントローラ階層352、362にも見出される。
UI.FMサーバ300に登録する各クライアント内で、UI.FMサーバ内に導入されているものと同じデータモデル構造351、361が最初に導入される。これは、たとえば、iPad(登録商標)360のコントローラ階層362およびデータモデル361に適用される。したがって、クライアント350、360のコントローラ階層352、362およびデータモデル351、361のすべてがUI.FMサーバ300のデータモデル310およびコントローラ階層320とマッチングされている。
加えて、実際のデータ送信は、サーバからクライアントへと行われる(図3のワークプレイスPC350とUI.FMサーバ300との間の項目(3)を参照されたい)。したがって、実際には、コントローラ階層320およびデータモデル310の階層構造をサーバ300からクライアント350に送信するだけでなく、正確には実際のデータ、すなわち、たとえば、データモデル内の属性が各事例において有する値に関するデータ(すなわち、それぞれソースsrc0、src1、src2の位置posがいずれの値(複数可)を有するか、など)も送信する必要がある。
実施形態によれば、UI.FMサーバ300のコントローラ階層320の各ノードは、それと関連付けられているIDを有する。IDは、ノードを迅速にアドレス指定する役割を果たす。したがって、通常は、コントローラ階層320およびデータモデル310がグラフ状構造であることに起因して、データモデル内および/またはコントローラ階層内の特定の要素をアドレス指定するように、完全な経路、たとえば、「root/Renderer/Scene/src0」が示されなければならない。ここでは、各ノードがそれに割り当てられているIDを有するということに起因して、ノードの各々に対する短い識別子があり、したがって、それぞれのノードをその識別子によってアドレス指定することが可能である。比喩的に言えば、各ノードについて短い「電話番号」があり、長いパスを示す代わりに、この電話番号を使用することができる。たとえば、UI.FMサーバ300のコントローラ階層320において、ノード「root」はID0を有し、ノード「DHD(R)」はID1を有し、ノード「Renderer」はID2を有し、ノード「LSSetups」はID3を有し、ノード「WavPI.」(Wavプレーヤ)はID4を有し、ノード「coupling point matrix」はID5を有し、ノード「Scene」はID6を有し、ノード「src0」はID7を有し、ノード「src1」はID8を有する、などである。
したがって、IDはUI.FMサーバ300からクライアント350に送信され(図3のワークプレイスPC350とUI.FMサーバ300との間の項目(4)を参照されたい)、クライアント350のデータモデル351およびコントローラ階層352、たとえば、ワークプレイスPCクライアント350のデータモデル351およびコントローラ階層352に書き込まれる。
このように、データ送信に後続してIDが送信される。すなわち、コントローラ階層と同じ構造を有するIDツリーが生成される。その差は、個々のノードがその中に位置するIDを有することである。その後、IDは対応するノードに書き込まれる。
上記の説明において、項目(2)、(3)および(4)は、UI.FMサーバ300におけるクライアント350の初期化において所望される任意の順序で実施されてもよいことが理解されるべきである。
以下において、ソース(音源)がワークプレイスPC350によって位置決めし直される、一実施形態による一実施例を説明することとする。言い換えれば、たとえば、ワークプレイスPC350上で動作しているウェブアプリケーションが、たとえば、仮想ソース(音源)の空間位置を位置決めし直すために使用される。たとえば、例として3つの音源のそれぞれの音声が3つの別個のオーディオ信号において収集されるシナリオがあり得る。
上記3つのオーディオ信号が後の時点において1つの全体的な信号に混合されるとき、3つのオーディオ信号は、音源の仮想位置に従って混合されることになる。たとえば、第1の音源の仮想位置が聴き手の想定される位置から遠く離れて位置する場合、全体的な信号に関するそのオーディオ信号の部分は一般的に、その仮想位置が想定される聴き手の位置の近くに位置する第2の音源のオーディオ信号の部分よりも小さい。
しかしながら、たとえば、3つのソースの3つのオーディオ信号から複数のスピーカ信号を生成することも可能である。たとえば、第1の音源の仮想位置が、各事例において考慮されるスピーカの(想定される)位置から遠く離れて位置する場合、スピーカ信号に関するそのオーディオ信号の部分は一般的に、その仮想位置が(想定される)スピーカ位置の近くに位置する第2の音源のオーディオ信号の部分よりも小さい。
ワークプレイスPC350上の上述したウェブアプリケーションによって、ソース(音源)の(仮想)位置をこのように設定することができ、それによって、ワークプレイスPC350から、レンダラ380がソースの個々のオーディオ信号を全体的な信号または複数の個々のスピーカ信号にどのように混合するかを制御することができる。
それぞれのソースを動かすことを可能にするために、ビュー353がクライアント(たとえば、ワークプレイスPC350)に導入される。この目的のために、ワークプレイスPC350は、このビュー353を含む。
ソース358が、図3のワークプレイスPC350のビュー353内に表現されている。ソース358は、たとえば、タッチスクリーンによって示され、指で触れて、たとえば、引っ張られることによって動かすことができる。この移動が行われると、たとえば、イベントがトリガされる。
ユーザの側のこのソースの移動の結果として、たとえば、ソースは新たな位置、たとえば、位置(x, y, z) = (8, 9, 10)に移動されることになる。この位置は、それに従って、コントローラ階層の一部分である関数setPos(...)を介して、ソースsrc0に設定される。クライアント350のコントローラ352は同時に、UI.FMサーバ300に関連してすでに説明したような更新メカニズムを、変更すべきところは変更して、含む。ちょうどUI.FMサーバ300のように、ワークプレイスPC350はまた、ビュー353をも有する。ソースが移動されるときに呼び出されるsetPos(...)関数は、ワークプレイスPCのデータモデル内での位置を設定する。
ワークプレイスPC350のデータモデル351内でのソースの位置の変化はその後、UI.FMサーバ300に送信される。実施形態によれば、上述したIDがデータ送信に使用される。この文脈において、たとえば、src0に対処する、PC350のコントローラのあるユニットが、ワークプレイスPC350のシンクロナイザ354に報告する。
シンクロナイザ354は、データが変化したときに報告されるある種のビューであると想定され得る。たとえば、シンクロナイザ354は、対応するIDを使用し、たとえば、ID7を有するノード内で位置が変化したこと、および、対応する位置の値が何であるか(たとえば、(8, 9, 10))を記述するメッセージを生成する。シンクロナイザ354によって生成される上記更新通知、たとえば、「7: Pos: (8, 9, 10)」は、UI.FMサーバ300に送信される。
したがって、UI.FMサーバ300上にも同様に、更新通知によって送信されるsrc0の新たな位置を受信するシンクロナイザ340がある。UI.FMサーバ300のシンクロナイザ340は、受信した位置を、対応するIDを有するノード、すなわち、この事例においてはたとえば、ID7を有するノードに送信する。
UI.FMサーバ300のシンクロナイザ340はその後、IDによって、コントローラ320の対応するノードを判定する。たとえば、シンクロナイザ340は、ID7を有するノードがノードsrc0であると判定し、src0コントローラノードのsetPos(...)関数を呼び出す。
setPos(...)関数は、UI.FMサーバ300のデータモデル310に位置を入力し、加えて、レンダラドライバ330に新たな位置を通知する。レンダラドライバ330は、それに関する限りでは、レンダラド330に新たな位置を渡す。
UI.FMサーバ300のシンクロナイザ300に関する限り、ワークプレイスPC350に関するメッセージは、最小限の時間遅延で、シンクロナイザ340からすべてのさらなるクライアント、たとえば、iPad(登録商標)360に渡される。iPad(登録商標)360は、UI.FMサーバ300と同じコントローラ階層362、および、同じIDを有するデータ構造361を有する。さらに、iPad(登録商標)360は加えて、シンクロナイザ364を含む。iPad(登録商標)360のシンクロナイザ364は同様に、上記IDをそのデータモデル361に入力する。iPad(登録商標)がビュー(たとえば、図3のビュー363)を備える場合、コントローラ362は、シンクロナイザ364からの、変化した位置に関する情報を、iPad(登録商標)360のデータモデル361にだけでなく、加えて、iPad(登録商標)360のビュー363にも送信する。このように、iPad(登録商標)360のビュー363は更新される。
ワークプレイスPC350を使用する代わりに、ユーザは、上記の説明と同様に、iPad(登録商標)360上でもソースを動かしてもよい。この情報は、同様に、iPad(登録商標)360のコントローラ362のsetPos(...)関数を介して書き込まれる。iPad(登録商標)360のコントローラ362は、iPad(登録商標)360のデータモデル361を更新する。さらに、iPad(登録商標)360のコントローラ362は、iPad(登録商標)360のシンクロナイザ364に報告する。iPad(登録商標)360のシンクロナイザ364は、更新通知において、UI.FMサーバ360のシンクロナイザ340に、上記情報を送信する。UI.FMサーバ360のシンクロナイザ364は、更新通知内に含まれる情報を、他のクライアントのシンクロナイザに、たとえば、ワークプレイスPC350のシンクロナイザ354に直接渡す。さらに、UI.FMサーバ300のシンクロナイザ340は、上記情報を、サーバ300のコントローラ320内でも設定する。UI.FMサーバ300のコントローラ320は、サーバ300のデータモデル310内でsrc0の位置を更新する。さらに、サーバ300のコントローラ320は、サーバの対応するドライバに、位置の変化を通知する。したがってここではレンダラドライバ330である、上記ドライバは、それに従ってレンダラ380に報告する。
提供される概念の特別な利点を、下記に実施形態に従って提示する。
実施形態によれば、上述した機能を実施するコードは、ウェブブラウザにおいて動作するのに適している。一実施形態において、たとえば、ブラウザ、たとえば、URLを介して、サーバ側を呼び出すことが可能である。ワークプレイスPC350のためのコードがライブで送信され、その後、ワークプレイスPC350上で即座に実行される。このように、複雑な導入プロセスが省かれる。
さらなる大きな利点は、ドキュメンテーションに関する。データモデル階層全体がクライアントに、たとえば、ワークプレイスPC350に送信されるため、そこでは、意味的に直観的に、非常に容易に理解できるシステム記述が存在することになる。上記システム記述は、クライアント350上で容易にアクセスすることができる。さらに、システム記述はこのときまた、その階層構造化ツリー構造に起因して理解できる形式で存在することになる。結果として、ドキュメンテーションの支出が省かれる。
実施形態は、動的コード生成、たとえば、実行可能コードの動的生成のための手段を提供する。システムはウェブベースであり、他の関数を生成するための関数を使用することが可能である。生成された上記他の関数は、その後実行することができる。これは、ユーザがコントローラ階層を、最小限の範囲でのみ定義すればよいこと、および、ID等を割り当てるために同期させるための任意の他のコードを自動的に生成することができることを意味する。
たとえば、ユーザは、ソースsrc0が特性、たとえば、標準値(x, y, z) = (0, 0, 0)を有する位置(x, y, z)を有すると単純に定義することができる。実施形態において、システムは、上記情報から2つの関数、たとえば、src0の属性posの値を読み出す、すなわち、ソースsrc0の位置の値がシステムに返されるようにするための関数「Pos()」、および、ソースsrc0の属性posの新たな値を設定するための関数setPos(...)、たとえば、それによって属性posの値を(x, y, z) = (8, 9, 10)であるように設定することができる「setPos(8, 9, 10)」を自動的に生成するように構成されている。
アプリケーション開発者が、たとえば、属性posが標準値(0, 0, 0)を有するという情報を1度記憶するという点において、実施形態において、特に、たとえばワークプレイスPC350内のクライアントの各々について、クライアントがコントローラ階層を引き継ぐという点において、上記関数の両方が自動的に生成される。言い換えれば、そのようなコントローラ、たとえば、ノードsrc0のそのようなコントローラユニットを定義するために必要とされる情報量は極端に少ない。
さらなる利点は、本発明の実施形態が、一方では直観的なアクセスを可能にし、他方では、同時に非常に高速であるデータ構造のノードへのアクセスを可能にするということである。したがって、従来のシステムが通常は直観的であるかまたは高速であるかのいずれかであり、両方ではないのに対して、実施形態は、直観性の特性と速度の特性の両方を組み合わせる。
データ構造の直観性は、アプリケーション開発者にとって特に重要である。アプリケーション開発者がデータモデル内で情報を設定することを所望するとき、上記アプリケーション開発者は、自身がソースsrc0の情報をどのように得るかについての相対的に単純なパスを、自身にとって利用可能にしなければならない。
一実施形態によれば、システムは、それによって個々のノードがブラウザ内で容易にアドレス指定可能である、この目的のための命令セットを生成する。たとえば、ブラウザ内でコマンドラインを開くことができる。ユーザまたはアプリケーション開発者は、以下を上記コマンドラインに入力することができる:「root.Renderer.Scene.src0.setXyz(8, 9, 10)」。そのような行は、グラフ状データ構造の対応する構造を知るときに、直観性が高い。したがって、データ構造の情報に非常に容易に、すなわち、直観的にアクセスし、情報をロードし、情報を更新することができる。このすべてにおいて、データ構造はその階層ツリー状アーキテクチャからすでに明らかであるため、ドキュメンテーションの支出は非常に低くなる。
実施形態によれば、ツリー構造が定義されると、たとえば、JavaScriptにおいて、ノード間のドット演算子をイネーブルするコマンドが自動的に生成される。たとえば、実施形態において、ブラウザおよび/またはサーバコマンドラインが、上記ドット演算子を生成する。この文脈において、コントローラ構造は、上記演算子を単純に使用することができるように構成される。
実施形態において、たとえば、ルートノードから開始して、または、その後続のノードのうちの1つから開始して、所望のノードまでの連続するノードが1つずつ示され、連続するノードは各事例においてドットによって分離されているということによって、所望のノードに至るパスも示される。たとえば、例としてパス「root.Renderer.Scene.src0」を示すことによって、または、例として「Renderer.Scene.src0」(たとえば、ルートノード「root」が常に最初のノードであることが明らかであるとき)を示すことによって、ノードsrc0にアクセスすることができる。ノード名が一義的でない場合、たとえば、データ構造内に「src0」の名前を有する複数のノードがある可能性があるため、アクセスのために単純に「src0」を示すだけでは十分ではない。加えて、結果としてデータ構造の直観性も失われる。
説明されているパスはアプリケーション開発者にとっては直観的であるが、そのようなノードアクセスが非常に頻繁に実施さ荒れるときは、それらのパスは非効率的である。
たとえば、一実施形態において、レンダラ380は、それに従ってOSCメッセージを介してUI.FMサーバ300のレンダラドライバ330に送信されるレベルデータを生成するように構成され得る。レンダラドライバ330はその後、それに従って、コントローラ階層320内で、したがって、データモデル310内でレベルデータを設定する。64個のソースについて、これらは、たとえば、例として毎秒50回更新される64項目の情報であり、すなわち、この例において毎秒3,200回の更新が必要である。システムの他の部分において、処理されなければならないさらなる高頻度の情報が定期的に発生し得る。位置更新について、このとき、「root.Renderer.Scene.src0.posXyz(8, 9, 10)」の形態のパスが毎回アドレス指定されなければならない。そのようなコマンドは、毎回メッセージ内で、クライアント、たとえば、ワークプレイスPC350からUI.FMサーバ300に送信される。しかしながら、これは非効率的である。
より効率的な実施のために、上記ですでに紹介されているIDが使用される。各ノードはある種のハッシュ値を表すID、すなわち、短いアドレスとして作用するIDを保持するため、IDはまた、人間の開発者にとって良好である長いパスに対する代替形態として使用することもできる。一例が、コマンド「node[7].setXyz(8, 9, 10)」である。このように、ID7を有するノードの関数「setXyz(...)」、すなわち、ノードsrc0のsetXyz(...)関数が呼び出される。
したがって、ここで使用されているIDは、非常に短い様式で要素をアドレス指定する可能性をもたらし、これによって、同期がより効率的になり得る。情報の特定の項目が頻繁に変化する場合、たとえば、非常に多数の更新を伴ってソースが動かされるとき、クライアント350からUI.FMサーバ300に送信されることになるものは、上述した長いパスではなく、対応するIDである。これはまた、たとえば、 ID7を有するノード(すなわち、src0)の属性「pos」の値が(x, y, z) = (8, 9, 10)を読み出すために変更されるべきであることを記述している、「7: pos: [8, 9, 10]」の形態の短い命令によっても実行することができる。
非常に短い様式で要素をアドレス指定することが可能であることは、情報の特定の項目が頻繁に変化するときに有利であり得、たとえば、同期に有用である。たとえば、ソース358を動かすことは、非常に多数の位置更新を伴う。この事例において、クライアントからサーバに送信されるものは長いパスではなくIDである。たとえば、「7: pos: [8, 9, 10]」の形態のデータメッセージを使用することによって、データメッセージが非常に短くなるこれらはその後、UI.FMサーバ300およびすべてのクライアント、たとえば、iPad(登録商標)360に、非常に効率的に送信することができる。したがって、長いパスには、特に人間の開発者にとって直観的であるという利点があり、一方で、短いパス、すなわち、たとえば、「7: pos: [8, 9, 10]」には、システムにとって非常に良好に処理可能であるという利点がある。IDによるデータ送信は非常に高速である。実施形態は、長いパスと短いIDの両方のアドレス指定を提供することによって、両方の利点を組み合わせる。
実施形態において、コントローラ階層および/またはデータ構造が定義されるときに、両方のアドレス指定の可能性がシステムによって自動的に生成される。
システムの必須の特性を下記に説明する。
実施形態は、マルチクライアント機能を呈する。マルチクライアント機能は、まったく同一のアプリケーションが、複数のクライアント上で始動することを意味する。たとえば、同じアプリケーションが、ワークプレイスPC350、iPad(登録商標)360、および、たとえば、さらなるデバイス上で始動することができる。クライアント、たとえば、ワークプレイスPC350上で行われる各変更が、他のクライアント360のすべてに送信される。たとえば、アプリケーションは、複数のスクリーン上に同時に存在し、また同時に見ることができる。
アプリケーションのさらなる例において、アプリケーションの一部分が第1のクライアント、たとえば、ワークプレイスPC350に上で提示され得、一方で、アプリケーションの他の部分が、たとえば、第2のクライアント、たとえば、iPad(登録商標)360上で提示され得る。たとえば、ソースは、左手でiPad(登録商標)360上で消音するように切り替えることができ、一方で、音源は、右手でワークプレイスPC350上に位置付けられる。そのような機能は、マルチデバイス機能と称され得る。
加えて、実施形態によるウェブベースの実施態様が有利である。
実施形態のさらなる必須の特徴は、それらが低遅延で問い合わせを実施することが可能であることである。たとえば、ソース358がクライアント、たとえば、ワークプレイスPC350のブラウザ内で動かされる場合、上記ソース移動は、ほぼ一切の時間遅延なしで他のクライアント、たとえば、iPad(登録商標)360に送信され、そこで、ほぼ一切の時間遅延なしに見ることができる。同じことが、たとえば、レンダラ380から到来するレベルデータに当てはまる。したがって、これは、システムが、非常に高頻度のパラメータ変化でさえ処理することが可能であるのに十分に高速であることを示す。
すでに言及したように、コントローラ320は、複数の異なるタスクを有し、1つのタスクは、データモデル310の変更に存し、さらなるタスクは、付加的に、シンクロナイザ340によって実施される同期をトリガするために、ドライバ、たとえば、レンダラドライバ330に報告することに存する。
その上、UI.FM300内でも実装されるコントローラ320は、さらなる機能、すなわち、経時的にデータ変化を記録する機能を備える。すなわち、ソース358が動かされると、当該変化を、コントローラ320によって記録することができ、後の時点において復元することができる。これは、たとえば、ソース移動を記録するために使用することができる。したがって、上記記録されたソース移動は、後の時点において、復元または再生することができる。これは、自動化機能と称される場合がある。
コントローラ階層およびデータモデル、すなわち、ツリー状構造とはどのようなものであるかを、下記に具体的に説明する。
実施形態は、自動コード生成、すなわち、ノード属性に対する対応するアクセスのための読み出し関数および書き込み関数の自動生成の特性を有する。これは、動的コード生成と称される。
実施形態において、シンクロナイザコードも、自動的に生成され得る。アクセス手順(acces routines)、すなわち、読み出し関数および書き込み関数だけでなく、同期関数も自動的に生成することが可能である。
さらに、実施形態は、ビュー363に通知するコードを、コントローラ定義および/またはデータ構造の定義から自動的に生成することができるという特性を有する。
以下において、実施形態の機能を説明する。例示的な適用事例において、スタジアムの音波処理技術が導入される。
たとえば、4人の人間、すなわち、たとえば、4人の音響技師が、音波処理技術の導入に関係することができるとする。音響技師の各々は、たとえば、スタジアムの一翼を担当することができ、たとえば、1人が北翼、1人が南翼、1人が東翼、1人が西翼を担当することができるとする。音響技師の各々は加えて、iPad(登録商標)を携行する。中央調整卓および中央音響システムが、このとき、このiPad(登録商標)によって制御され得る。第1の人はこのとき、自身の位置について音声の最適な調整を開始する。その後、第2の人が音声の調整を開始する。第2の人も、iPad(登録商標)を使用する。その後、第3の人、またその後、第4の人もそれに従って開始する。音声はまた、同時に調整されてもよい。このように、音響技師の各々が、他の音響技師が行う調整がどのような効果を有するかを同時に聞くことができる。同時に、変化を知覚したそれぞれの音響技師が、当該変化を取り消すか、または、他の様態で干渉することもできる。すなわち、この例において、4人の音響技師は、すべて同時に最適な音波処理状況を達成することができる。これは、4つの異なるモバイルデバイスを用いて中央アプリケーションを制御することによって達成される。そのようなアプリケーションを実施するために、たとえば、ソフトウェアフレームワークとして実装されてもよいUI.FMが提供される。UI.FMとは、いわゆるユーザインターフェースフレームワークを指す。このフレームワークは、そのようなアプリケーションを、これまで可能であったよりもはるかに高速かつ容易に実装することを可能にする。
UI.FMによって開発される任意のアプリケーションは、自らマルチクライアント機能を呈する。たとえば、図4aは、iPad(登録商標)410上にロードされているアプリケーションを示す。クライアント側で、アプリケーションはワークプレイスPC420上にもロードされている。さらに、アプリケーションは、さらなるクライアント、さらなるワークプレイスPC430上にもロードされている。合計で、ここでは3つの異なるクライアント410、420、430上にアプリケーションが存在する。
図4bを考えると、iPad(登録商標)上でたとえば、8つのソース411、412、413、414、415、416、417、418のうちの1つに触れ、それらを動かすことができる。たとえば、指419でそれらのソースの1つに触れ、それらを動かすことが、たとえば、図4cに示されている。クライアント410内でソースが動かされると同時に、ソースはまた、他のクライアント420、430のすべての中でも動く。
したがって、クライアント410上で指419を用いてソース416を制御すると、ソース416のソース位置の当該変化は、他のクライアント420、430の他のアプリケーションのすべてに直に送信される。指419によってではなく、ソース416はまた、マウス、またはそのポインタによって動かされてもよい。したがって、ソースが、たとえば、マウスによってPC上で動かされ得、他のクライアント、たとえば、異なるiPad(登録商標)上の対応するソースがそれに従って移動することになる。すなわち、複数の人が、1つのアプリケーションを用いて同時に作業し、そこでパラメータを変更することができ、上記変更されたパラメータは、他の端末デバイスに送信される。
実施形態は、ワークプレイスが拡張されるように、複数の端末デバイスにアプリケーションを配布することが可能である。たとえば、図4dは、一方において、8つの異なるソース411、412、413、414、415、416、417、418がその上に提示されている、背景にあるワークプレイスPC420を示す。
同時に、ワークプレイスは、前景にあるiPad(登録商標)410によって拡張されている。両方のデバイス410、420は、互いから分離している。デバイス410、420上では、異なるクライアントアプリケーションが動作している。PCワークプレイス420は、ソース位置決めキャンバスをインストールされており、それによって、ソース411、412、413、414、415、416、417、418を動かすことができる。iPad(登録商標)410は消音マトリックスをインストールされており、それによって、個々のまたはすべてのソース411、412、413、414、415、416、417、418を消音することができる。
したがって、位置決めキャンバスおよび消音マトリックスは、両手で同時に制御することができる。したがって、たとえば、図4eに見られるように、1つまたは複数のソースを左手で消音することができ、一方で、右手を使用してソースを制御および位置決めすることができる。したがって、携帯端末デバイス410上で動作している第2のアプリケーションによってPCワークプレイス420が拡張されており、それら両方が、個々のユーザのために完璧に協働する。
実施形態によれば、UI.FMはウェブベースである。図5aは、一実施形態によるUI.FMのサーバ側を示す。「Apps」上でクリックすると、図5bに提示されているアプリサイトに入れる。たとえば、UI.FMサーバ上で動作しているアプリケーション「ProductionApp」上でクリックすることができ、その結果として、図5cに示すように、「ProductionApp」が開かれる。この時点で、このアプリケーションを用いて作業することができる(「App」=アプリケーション)。
UI.FMは低遅延で動作する。クライアント上のアプリケーション内で行われる任意のことが、可能な限り高速で他のクライアント上の対応するアプリケーションに送信される。したがって、ウェブブラウザ内でリアルタイムのデータを示すことができる。たとえば、図6aにおいて、最大32個のソースを表示および制御することができる。上記最大32個のソースのレベルが、毎秒25枚の画像で更新される。同じように、すなわち、非常に短い期間内で、最大32個のソースの位置も更新される。
一実施形態において、データモデルのノードのうちの1つの属性の変化を記録することができる。したがって、UI.FMにおいて、すべてのパラメータが基本的に自動化可能である。たとえば、以前に実施されたソース移動が現時点で再生されるように、記録を開始し、ソースを動かし、記録を停止し、その後、記録を開始することができるシナリオが、図6bに示されている。このように、実施形態は、パラメータの記録を可能にする。
UI.FMの実施形態において、アプリケーション開発者は、たとえば、図7aに示すように、グラフ状、たとえば、ツリー状のデータモデルを定義することができる。
図7aは、例示的なアプリケーションの例示的なデータモデルを示す。ルートノードは図7aにおいては「root」ではなく「ssc」として参照されるが、ルートノードとしてのその重要性に関しては何ら変化がない。「clock」、「demoPlayer」および「audio」のような、種々のサブノードが存在する。「audio」にあるノードは、その下に存在する様々なサブノード、たとえば、「scenes」を有する。ノード「scenes」は、サブノード「scene0」を含む。サブノード「scene0」は翻って、サブノード「soloManager」、「manage3d」および「sources」を含む。ソース「src0」はノード「sources」の下に位置する。さらに、ノード「audio」は、その下に位置するサブノード「micSetups」、「IsSetups」および「virtualLsSetups」を有する。
総じて、システム内で発生するデータは、グラフ状に、たとえば、ツリー状に構造化される。
図7bおよび図7cは、データモデルがどのように定式化されるかの一例を非常に具体的に示している。特に、これはソースの定義に関する。ここで、最初に、ソース内のオブジェクトの属性、たとえば、位置、回転、使用されるか否か(isUsed)、ソースが選択されるか否か(isSelected)、ソースがロックされているか否か(isLocked)、ソースが消音されているか否か(isMuted)、または、たとえば、ソースが3Dソースであるか否かなどを定義する。
上記属性の各々は、それに関連付けられている標準値を有する。標準値は同時に、属性のデータ型の決定に使用される。加えて、上記属性のいずれが自動化されるべきであるか(「automate all attributes except」)を指定する様々な選択肢がある。
さらに、自動化のための時系列はどのようなものであるべきか(時系列構成)、および、どの程度近く隣接する表示点、すなわち、キーフレームが意図されるべきであるかの定義が与えられる。さらに、たとえば、空間的隣接および方向の変化を示すことが可能であるべきである。上述したデータ記録/自動化の最適化が達成される。さらに、それら属性のすべてではなく、特定の属性のみがファイルに直に記憶されることも言える。したがって、非常に多様な組み合わせ選択肢がある。
データモデル内のNewControllerClassをよびだすことによって、新たなノードの新たなコントローラサブユニットを生成することができる。名前、属性、childCreationFunctionおよび選択肢が、この呼び出しに引き渡される。このように、新たなノードが定義される。
加えて、個々のノードはグラフ状、たとえば、ツリー状の階層になるべきである。ツリー状階層は、図7aにおいてすでに図で示した。したがって、「source0」ソースは「sources」コンテナ内に位置し、「sources」コンテナは「scene0」コンテナ内に位置し、「scene0」コンテナは「scenes」コンテナ内に位置する。
図7aに概説されているデータモデルを指定するための、図7d、図7e、図7fに示されている様々なプログラミングコマンドが存在する。一方では、ノードが定義されることになり、加えて、ノードの属性が定義されることになり、ノードは所定のコマンドを介して親ノードに割り当てられることになる。このように、対応する階層を確立することができる。
実施形態によれば、UI.FMは、たとえば、グラフ状、たとえば、ツリー状のデータ構造から一連の有用なツールを導出し、自動的に生成することが可能である。上記ソフトウェアツール、たとえば、ソフトウェア開発ツールを以下に説明する。
第1のツールは、データモデル内のノードに達するためのプログラミングコマンドの自動生成を実施する。したがって、UI.FMは、以前に定義したツリー階層からプログラミングコマンドを自動的に生成する。図8aはその一例を示しており、JavaScriptコンソール810が開かれている。JavaScriptコンソール810は、たとえば、Chrome(登録商標)およびFirefox(登録商標)のようなブラウザ内に位置する。このコンソールを介して、ブラウザ内にロードされているデータモデルにアクセスすることができる。
図8bに示すように、たとえば、「ssc.globalController.audio」と呼ばれるノード列がJavaScriptコンソール810に入力されると、以前に生成された「audio」ノードがアドレス指定される。「audio」ノードは、その下に存在する「scenes」サブノードを有する。上記「scenes」サブノードには、「audio」の後に名前「scenes」を追加することによってアクセスすることができる。「scenes」のうち最初の2文字だけが入力されればよい。「sc」はその後自動的に補完されて、「scenes」が読み出される。これは、以前に定義した、たとえば、ツリー状の階層から、正確なプログラミングコマンドがライブで自動的に付加されたことに起因する。次に、ノード名「scene0」が追加され、その後、「sources」サブノード、最後に「src0」ソースがアドレス指定される。ノード名のそれぞれの最初の文字を入力すると、システムには、問題になる対応するサブノードがすでに分かっているため、システムは各事例において、可能性のある補完を提供する。図8cにおいて、「src0」への完全なパスが示されている。
加えて、図8dは、そこで関数呼び出し「setXyz」によって、ソースのいずれの特性が変更されるべきであるかを指定する。コマンド「setXyz」は自動的に生成されたものである。しかしながら、データ定義においては、図8dに示すように、「xyz: [0,0,0]」しか入力されていない。したがって、定義されているのは、xyzと呼ばれ、標準値[0,0,0]を有する属性が存在すべきであることだけである。このラインから、UI.FMはコマンド「setXyz()」を自動的に生成している。
図8eは、ソースを位置[−100, −100, 0]にシフトするためのコマンドを示す。Enterを押下することによってコマンドが送信されると、図8fに示すように、ソースが自動的にシフトされる。これは、たとえば、イベント(メッセージ)が、自動的に生成されたsetXyz関数内で生成されていることに起因する。ソース表現はこのメッセージにサブスクライブされており、その後、その位置を変更することが可能になっている。
したがって、アプリケーション開発者は、データモデルの一体部分、すなわち、ノードに単純に直観的にアクセスすることができる。setXyz()関数に加えて、自動的に静止される、読み出しのための関数も、自動的に存在する。この関数は図8fに示されており、「xyz()」によって指定されている。対応するコマンド「xyz()」が送信されると、現在位置「[−100, −100, 0]」が出力される。図8gに示すように位置をシフトし、現在位置を表示するための関数を再び呼び出すと、ソースの現在位置が出力される。
実施形態によれば、UI.FMは、クライアント1上のソースAからクライアント2上の同じソースAに属性または特性を送信するための同期コードを自動的に生成することが可能である。図9aは、2つのアプリケーション910、920として2回始動されているプログラムを示す。
新たな属性を高速かつ容易に追加することができる。たとえば、図9bは、さらなるウィンドウにおいて、ソースのデータモデルを示しており、上記データモデルについてはすでに上記で説明している。図9cに示すように、ここでさらなる属性を容易に追加することができる。
図9cにおいて、値「uifm」を有する属性「uifm」が追加されている。したがって、この属性はその値として文字列を有する。「attributes」の下にラインを挿入するだけで、新たな属性が挿入されている。
実施されているそのような新たな定義が効果を有するようにするために、たとえば、図9dに示すようにサーバ300を再始動する必要があり得る。したがって、UI.FMサーバ300は、サーバコマンドラインによって再始動することができる。サーバ300の再始動後、両方のアプリケーション910、920も再始動される。
図9eは、この新たに挿入された「uifm」属性が、両方のアプリケーション910、920において自動的に生成された「uifm()」コマンドを介して問い合わせることができ、戻り値として「uifm」データ文字列を与えることを示す。これは、クライアントおよびサーバの両方の中で機能する。
自動的に生成された「setUifm()」関数によってuifm属性の値を変更することも可能である。これは、図9fおよび図9gに示されている。第1のアプリケーション910において実施されたuifm属性の更新は、図9gの右手側にある第2のアプリケーション920に自動的に送信される。自動的に生成されたuifm()関数によってuifm属性を問い合わせることによって、図9gの右側アプリケーション920においても、更新された文字列「Gabriel Gatzsche」が与えられる。
同様に、uifm属性の値は逆に、図9hに示すように、右手側アプリケーションにおいて、たとえば、「Base camp」にリセットすることもできる。そのような更新は、図9hの左手側アプリケーション910に対して直接的かつ即時の効果を有する。したがって、UI.FMは、データモデルの高速かつ容易な拡張を可能にし、同期コードの高速かつ容易な生成を可能にする。
UI.FMは、それによって、接続されているオブザーバが自身を、データモデルの値が変化したときに報告されるようにすることができるコードを自動的に生成する(たとえば、パブリッシャ−オブザーバ、設計パターンを参照されたい)。参照されているオブザーバは人間のオブザーバではなく、変更メッセージにサブスクライブし、データモデルが変化するとすぐに変更メッセージを自動的に受信するプログラムモジュールである。
一実施形態によれば、たとえば、ユーザ入力を受けてのデータモデルのノードのうちの1つの属性のうちの1つに対しての、変化モニタリングが導入され得る。たとえば、変化モニタリングが導入されている1つの属性の値が変化するときに警告が出力される。警告の出力は一例に過ぎない。別の可能性は、たとえば、ブラウザのタイトルバーが更新されるようにすることなどである。
これは、変化モニタリングが導入されている図10aを参照して説明される。コンソールに入力されたコマンド「on(‘change[uifm]’, function()」によって、システムは、uifmの値が変化するときにその後定義される関数を呼び出すようにされる。図10aのfunction()定義は、この事例においては、警告が特性uifmの値を示す出力であるべきであることを定義する。コンソールにおいてEnterを押下すると、このように定義されたオブザーバが登録される。
図10bにおいて、「production app」におけるuifmの値が変更される。図10cに示すように、その後、uifmの新たな値、すなわち「production app」を出力する警告が現れる。これはまた、第2のクライアントが開いている場合にも機能する。
図10dは、第2のクライアントが開いているところを示す。uifmの値は、コンソール内の「setUifm」関数によって変更される。図10eに見られるように、たとえuifmの値が第2のクライアント内で変更されているとしても、uifmの値が「overhead」に変化していることを記述する警告は、第1のクライアントにおいても出力される。
詳細には、uifmの新たな値が第2のクライアントからサーバに送信されており、サーバからこの値が第1のクライアントに送信されており、そこで、uifmの値がそれに応じて更新されており、オブザーバが報告を受けており、図10eに示すように、その結果として警告が出力されている。
UI.FMによって、時系列データを記録することも非常に容易である。上述したように、属性uifmがデータモデルに追加されている。一実施形態において、この属性のために、時系列データを記録するように、コードが自動的に生成される。たとえば、値uifmの様々な変化を経時的に記録することができる。たとえば、再生キーを押下することによって、時間が流れ始めることを保証することができる。uifmの値が最初に「Friday」に設定され、その後「Saturday」に、その後「Sunday」に設定される場合、当該データ変化は、その波形内にそれらの時系列順における挙動を記録される。
たとえば、読み出しモード/復元モードが起動されると、以前に記録されたデータが、書き込み関数を介して時系列からデータモデルへと再び書き込まれる。接続されているオブザーバ(ビュー)は報告を受け、たとえば、各事例において、特に、収集モードの間にも値が変更されている復元時点において、警告を自動的に出力する。たとえば、図11において、値「Sunday」が記録の再実行においても変更される時点において、警告「Sunday」が出力される。したがって、実施形態は、入力が復元されるときに、システムによって、時間的に正確に復元され、たとえば、収集に従って時間的に正確に警告を出力する、入力の収集を可能にする。
いくつかの態様が装置の文脈内で説明されているが、上記態様は、対応する方法の説明をも表し、それによって、装置のブロックまたは構造構成要素はまた、対応する方法ステップまたは方法ステップの特徴としても理解されるべきであることが理解される。それと同様に、方法ステップに関連して、または、方法ステップとして説明されている態様はまた、対応する装置の対応するブロックまたは詳細または特徴の説明をも表す。方法ステップのいくつかまたはすべては、プロセッサ、プログラム可能コンピュータまたは電子回路のようなハードウェア装置によって(またはハードウェア装置を使用している間に)実施されてもよい。いくつかの実施形態において、もっとも重要な方法ステップのいくつかまたは一部は、そのような装置によって実施されてもよい。
特定の実施要件に応じて、本発明の実施形態は、ハードウェアまたはソフトウェアにおいて実施されてもよい。実施は、それぞれの方法が実施されるようにプログラム可能コンピュータシステムと協働することができる、または、協働する電子可読制御信号を記憶されているデジタル記憶媒体、たとえば、フロッピーディスク、DVD、Blu−rayディスク、CD、ROM、PROM、EPROM、EEPROMまたはフラッシュメモリ、ハードディスクまたは任意の他の磁気もしくは光学メモリを使用しながら実行されてもよい。このため、デジタル記憶媒体はコンピュータ可読であり得る。
したがって、本発明によるいくつかの実施形態は、本明細書に記載されている方法のいずれかが実施されるようにプログラム可能コンピュータシステムと協働することが可能である電子可読制御信号を含むデータキャリアを含む。
一般的に、本発明の実施形態は、プログラムコードを有するコンピュータプログラム製品として実装することができ、プログラムコードは、コンピュータプログラム製品がコンピュータ上で動作するときにいずれかの方法を実施するように実行可能である。
プログラムコードはまた、たとえば、機械可読キャリア上に記憶されてもよい。
他の実施形態は、本明細書に記載されている方法のいずれかを実施するためのコンピュータプログラムを含み、上記コンピュータプログラムは、機械可読キャリア上に記憶されている。言い換えれば、したがって、本発明の方法の一実施形態は、コンピュータプログラムがコンピュータ上で動作するときに、本明細書に記載されている方法のいずれかを実施するためのプログラムコードを有するコンピュータプログラムである。
したがって、本発明の方法のさらなる実施形態は、本明細書に記載されている方法のいずれかを実施するためのコンピュータプログラムが記録されているデータキャリア(またはデジタル記憶媒体もしくはコンピュータ可読媒体)である。
したがって、本発明の方法のさらなる実施形態は、本明細書に記載されている方法のいずれかを実施するためのコンピュータプログラムを表すデータストリームまたは信号系列である。データストリームまたは信号系列は、たとえば、データ通信リンク、たとえば、インターネットを介して転送されるように構成され得る。
さらなる実施形態は、本明細書に記載されている方法のいずれかを実施するように構成または適合されている処理手段、たとえば、コンピュータまたはプログラム可能論理デバイスを含む。
さらなる実施形態は、本明細書に記載されている方法のいずれかを実施するためのコンピュータプログラムがインストールされているコンピュータを含む。
本発明によるさらなる実施形態は、本明細書に記載されている方法の少なくとも1つを実施するためのコンピュータプログラムを受信機に送信するように構成されている装置またはシステムを含む。送信は、たとえば、電子的または光学的であってもよい。受信機は、たとえば、コンピュータ、モバイルデバイス、メモリ装置または同様の装置であってもよい。装置またはシステムは、たとえば、コンピュータプログラムを受信機に送信するためのファイルサーバを含んでもよい。
いくつかの実施形態において、プログラム可能論理デバイス(たとえば、フィールドプログラマブルゲートアレイ、FPGA)が、本明細書に記載されている方法の機能のいくつかまたはすべてを実施するために使用され得る。いくつかの実施形態において、フィールドプログラマブルゲートアレイは、本明細書に記載されている方法のいずれかを実施するために、マイクロプロセッサと協働することができる。一般的に、方法は、いくつかの実施形態において任意のハードウェア装置によって実施される。上記ハードウェア装置は、コンピュータプロセッサ(CPU)のような任意の普遍的に適用可能なハードウェアであってもよく、または、ASICのような、本方法に特異的なハードウェアであってもよい。
上述した実施形態は、本発明の原理の例示を表すに過ぎない。当業者には、本明細書に記載されている構成および詳細の任意の修正および変形が諒解されることが理解される。このため、本発明は、実施形態の記述および説明によって本明細書において提示されている特定の詳細によってではなく、添付の特許請求の範囲のみによって限定されるように意図されている。