(57)【要約】【課題】コンピュータグラフィックスディスプレイ上に表示される複数のエレメントおよび／またはメディアのアニメーションをストーリーボードオブジェクトが調整する方法およびシステムを提供する。【解決手段】ストーリーボードは、エレメントツリー内のエレメントのプロパティをタイムラインに関連付け、これによって、ストーリーボードに関連付けられたプロパティは、そのストーリーボードを開始、停止、検索、または一時停止することによって、１つのグループとしていっせいに動画化／再生される。トリガは、ユーザと表示された情報との対話などによって制御され、状態の変化に応答して値を変更するプロパティトリガと、イベントを始動するイベントトリガとを含み、これによってトリガはストーリーボードに、開始、停止、一時停止、および検索を行わせることができる。【選択図】図７
2006146924.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境において、
タイミングデータのセットを１つのエレメントのプロパティおよび別のエレメントのプロパティに関連付ける命令を処理することと、
時間の経過と共に前記エレメントの表示が変化するように、前記プロパティの値に対応するデータをタイミングデータの前記セットに基づいて変更することとを含むことを特徴とする方法。
【請求項２】
前記命令を処理することは、拡張可能アプリケーションマークアップ言語を解析することを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記命令を処理することは、エレメントに関連付けられているスタイルから前記タイミングデータを得ることを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記エレメントはエレメントツリー内にあり、前記エレメントツリーを行き来して、レンダリング命令を提供することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記データを変更することは、タイムライン情報を保持するクロックオブジェクトをインスタンス化することを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記データを変更することは、トリガに応答して前記タイミングデータに対応するストーリーボードを開始することを含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記トリガはプロパティトリガに相当し、前記ストーリーボードを開始することは、前記プロパティトリガの状態を評価することを含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記トリガはイベントトリガに相当し、前記ストーリーボードを開始することは、前記イベントトリガによって始動されたイベントを検出することを含むことを特徴とする請求項６に記載の方法。
【請求項９】
前記トリガは入力／終了トリガに相当し、前記ストーリーボードを開始することは、入力イベント用の前記プロパティトリガの状態を評価することを含むことを特徴とする請求項６に記載の方法。
【請求項１０】
前記データを変更することは、ターゲットエレメントの複合プロパティパス内のサブプロパティを修正することを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記サブプロパティを修正することは、前記ターゲットエレメント用のプロパティ値を確立することと、次いで前記サブプロパティ値を修正することとを含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記データを変更することは、プロパティ用の値を確立することを含むことを特徴とする請求項１に記載の方法。
【請求項１３】
プロパティ用の値を確立することは、競合解消の順序付けに基づいて前記値を検索することを含むことを特徴とする請求項１に記載の方法。
【請求項１４】
値に対応する前記データを変更することは、変更するエレメントのプロパティと、前記プロパティを変更する元となる基本値とを確定することを含むことを特徴とする請求項１に記載の方法。
【請求項１５】
実行されると、請求項１に記載の方法を実行するコンピュータ実行可能命令を有することを特徴とする少なくとも１つのコンピュータ可読媒体。
【請求項１６】
コンピューティング環境において、
ストーリーボードを含むデータ構造であって、前記ストーリーボードは、タイミング情報をエレメントのプロパティに関連付ける関連付けメカニズムを含むデータ構造と、
前記データ構造を処理して、エレメントおよび前記エレメントに関連付けられたタイミングデータのツリーへと変換する処理コンポーネントと、
出力データを対応する表示用のグラフィックスサブシステムに提供するレンダリングメカニズムであって、時間の経過と共に前記エレメントの表示が変化するように、前記ツリー内のエレメントの少なくとも１つのエレメントプロパティの値を前記タイミングデータに基づいて変更するレンダリングメカニズムとを含むことを特徴とするシステム。
【請求項１７】
前記関連付けメカニズムは、セッタータイムラインを含むことを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記関連付けメカニズムは、ストーリーボードオブジェクトプロパティを含むことを特徴とする請求項１６に記載のシステム。
【請求項１９】
前記処理コンポーネントは、拡張可能アプリケーションマークアップ言語パーサを含むことを特徴とする請求項１６に記載のシステム。
【請求項２０】
前記処理コンポーネントは、エレメントに関連付けられているスタイルから前記タイミングデータを得ることによって、前記データ構造を処理することを特徴とする請求項１６に記載のシステム。
【請求項２１】
前記レンダリングメカニズムは、タイムライン情報を保持するクロックオブジェクトをインスタンス化することによって、前記データを変更することを特徴とする請求項１６に記載のシステム。
【請求項２２】
トリガに応答して前記タイミングデータに対応するストーリーボードを開始するための手段をさらに含むことを特徴とする請求項１６に記載のシステム。
【請求項２３】
前記トリガは、プロパティトリガに相当することを特徴とする請求項２２に記載のシステム。
【請求項２４】
前記トリガは、イベントトリガに相当することを特徴とする請求項２２に記載のシステム。
【請求項２５】
前記トリガは、入力／終了トリガに相当することを特徴とする請求項２２に記載のシステム。
【請求項２６】
コンピューティング環境において、
レンダリングされるデータに対応するエレメントツリーと、
１つまたは複数のタイムラインのコレクションであって、それぞれのタイムライン
は、前記エレメントツリー内のエレメント、サブツリー、または他のオブジェクトに適用可能で、かつ独立して開始できるアニメーションテンプレートに対応するコレクションと、
時間の経過と共に前記エレメントツリーの表示が変化するように、前記エレメントツリー内のエレメント、サブツリー、または他のオブジェクトの前記プロパティの値に対応するデータをタイムラインの前記コレクションに基づいて変更するアニメーションメカニズムとを含むことを特徴とするシステム。
【請求項２７】
１つまたは複数のタイムラインの前記コレクションは、マークアップ言語で指定されることを特徴とする請求項２６に記載のシステム。
【請求項２８】
前記アニメーションメカニズムは、タイムラインを開始して、時間の経過と共に前記データを変更することを特徴とする請求項２６に記載のシステム。
【請求項２９】
前記アニメーションメカニズムは、プロパティトリガの状態に基づいてタイムラインを開始することを特徴とする請求項２８に記載のシステム。
【請求項３０】
前記アニメーションメカニズムは、入力トリガの状態に基づいてタイムラインを開始することを特徴とする請求項２８に記載のシステム。
【請求項３１】
前記アニメーションメカニズムは、イベントに基づいてタイムラインを開始することを特徴とする請求項２８に記載のシステム。
【請求項３２】
前記アニメーションメカニズムは、別のタイムラインの終了に基づいてタイムラインを開始することを特徴とする請求項２８に記載のシステム。
【請求項３３】
前記アニメーションメカニズムは、ターゲットエレメントの複合プロパティパス内のサブプロパティを修正して、前記データを変更することを特徴とする請求項２８に記載のシステム。
【請求項３４】
前記アニメーションメカニズムは、前記ターゲットエレメント用のプロパティ値を確立した後に前記サブプロパティを修正することを特徴とする請求項３３に記載のシステム。
【請求項３５】
前記タイムラインは、関連付けメカニズムを介してエレメント、サブツリー、または他のオブジェクトに適用されることを特徴とする請求項２６に記載のシステム。
【請求項３６】
前記関連付けメカニズムは、セッタータイムラインを含むことを特徴とする請求項３５に記載のシステム。
【請求項３７】
前記関連付けメカニズムは、ストーリーボードプロパティを含むことを特徴とする請求項３５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータシステムに関し、より詳細には、コンピュータシステム上に表示するためにグラフィカルな情報および他のオーディオビジュアル情報を処理することに関する。
【背景技術】
【０００２】
現代のコンピューティングシステムでは、マークアップ言語技術の発展の結果、プログラム作成者が貴重な情報をユーザに提供し、ユーザと表示された情報との対話に応答して要求などを受け取るための簡単な方法が生まれた。一般に、マークアップが処理されて、エレメントツリーが構築され、次いでエレメントツリーが処理されて、対応する出力データがディスプレイ上にレンダリングされる。
【０００３】
とりわけ、一般にプログラムの作成を単純化するように構成されている１つのマークアップ言語、すなわちＸＡＭＬ（拡張可能アプリケーションマークアップ言語：ｅＸｔｅｎｓｉｂｌｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）について記載している（本発明の譲受人に譲渡された）複数の特許出願の中に（特許文献１）および（特許文献２）がある。一般にプログラム作成者は、ＸＡＭＬの命令をアプリケーションプログラミングインターフェース（ＡＰＩ）に対する呼び出しと共に使用して、オブジェクトをシーングラフデータ構造内に配置する。例えばユーザインターフェースを構築するために、ＸＡＭＬベースのプログラムは通常、子ビジュアルオブジェクトを他のビジュアルオブジェクトに追加して、階層型のシーングラフを構築し、出力用のジオメトリデータ、イメージデータ、および他のデータなどの命令リストを作成し、ビジュアルオブジェクト上の変形プロパティ、クリッピングプロパティ(clipping property)、および不透明度プロパティを指定することができる。
【０００４】
前述の特許出願に記載されているＸＡＭＬの機能の１つは、プログラムがアニメーションパラメータおよび／またはメディア関連データを指定できるようにし、対応するアニメーションおよび／またはメディアを含む対応するディスプレイデータを効率よく出力する機能である。例えばプログラム作成者は、表示されるオブジェクトの何らかのプロパティが時間の経過と共にどれぐらい変化すべきかなどのパラメータの点から所望のアニメーション効果について記述することができ、例えば長方形の不透明度プロパティは、一定の時間にわたって不透明から透明へと徐々に薄まり、そして戻るように設定することができる。典型的な状況では、このシステムは、効果を達成するために時間の経過と共に変更されたイメージを定期的に描き直すことをプログラムコード自体に要求するのではなく、プログラムコードが最初にアニメーションパラメータを指定するだけですむようにアニメーションを管理する。
【０００５】
この目的のために、一実装形態では、オペレーティングシステムが、時間の経過に伴うアニメーションの展開を定義するタイムラインオブジェクト(timeline object)の使用を可能にし、必要に応じて、そのアニメーション用のタイムラインを表すためにクロックオブジェクトがインスタンス化される。動画化されたイメージをその更新された特性によって描き直すためにアプリケーションプログラムを定期的に（例えば、フレームごとに１回）コールバックする代わりに、より低いレベルのグラフィックスコンポーネントがクロックを使用して、動画化されて表示されているオブジェクト用の１つまたは複数の更新された、時間と共に変化するプロパティパラメータを確定し、その更新されたプロパティデータに基づいてイメージを描き直す。一般に、メディアも同様に処理される。
【０００６】
【特許文献１】米国特許出願第１０／６９３，６３０号明細書
【特許文献２】米国特許出願第１０／６９３，８２２号明細書
【特許文献３】米国特許出願第１０／４０１，７１７号明細書
【特許文献４】米国特許出願第１０／６９３，４３８号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００７】
こうした簡単なプログラミングは、このようにアニメーションおよびメディアをユーザインターフェースの一部として実装するための改良された簡易な方法をプログラム作成者に提供するが、これまではタイミング情報をそれぞれのアニメーションまたはメディアエレメントに個々に適用しなければならなかった。結果として、これまでプログラム作成者は、別々のタイムライン上で発生する可能性のある様々なアクション（例えば、アニメーションおよびメディアの開始時刻および停止時刻、ならびに／または受け取られるイベントがどのように処理されるか）を手動で同期させる必要があった。これは、プログラム作成者が、１つの動画化されたプロパティと別の動画化されたプロパティの双方を同期させたいにもかかわらず、一方が他方に（少なくとも一時的に）先行するなど、整合しない状態につながる場合がある。これはまた、複雑さが増すことにもつながり、例えばイベントを再開する際に、そのイベントに関連する個々のアニメーションをそれぞれ見つけて再開する必要がある。
【課題を解決するための手段】
【０００８】
簡潔に言えば、本発明は、ストーリーボードと呼ばれる名前付きのタイムラインオブジェクト内でアニメーションのセットをグループ化することによって、それらのセットを作成者がスケジュールできるようにする方法およびシステムを提供する。一実装形態では、ストーリーボードＡＰＩセットは、様々なオブジェクトおよびプロパティに影響を与えるタイムラインを単一のタイムラインツリーに統合して、プログラム作成者がタイミングイベントの複雑なセットを簡単な方法で整理および制御できるようにする方法を提供する。ストーリーボードは、アニメーション／ビデオ／オーディオの特定のインスタンス上で、または特定のスタイルのアニメーションに対して使用することができる。
【０００９】
一実装形態では、ストーリーボードは、タイムラインツリーをエレメントツリー内のエレメント用に指定できるようにするオブジェクトを含む。ツリー内のそれぞれのタイムラインは、エレメントのプロパティ値を設定し、エレメントおよびそのサブツリー用のアニメーションを制御する。ストーリーボードは基本的に、開始すること、停止または一時停止すること、あるいは検索するために使用することが可能な特定のタイプのタイムラインオブジェクトに対応し、これによって、動画化されたエレメントの外観、および／またはそのストーリーボードに関連付けられているメディアの動作を制御する。
【００１０】
ストーリーボードは、トップレベルのタイムラインのコレクションを含むこともでき、これは、１つのエレメントに関連付けることができ、かつ独立して開始することができる。例えば作成者は、２つの異なるアニメーションを同一のストーリーボードコレクション内の１つのエレメントに関連付けることができ、それらのアニメーションは、独立してトリガできるが、１つのユニットとして含まれている。したがってストーリーボードは、タイミングツリーと、ストーリーボード内のアニメーションが、そのストーリーボードが添付されているエレメントに関連してそれらのターゲットを分解(resolve)できるようにするエレメントツリーとの接続ポイントを提供する。
【００１１】
ストーリーボードはまた、状態の変化、イベント、または他のアクションによってアクティブ化できるトリガのコレクションを含むこともでき、そのトリガがアクティブ化されたときに実行される拡張可能なアクションのセット（例えば、タイムラインの開始または停止）を含むこともできる。ストーリーボードは、ユーザがストーリーボード内のタイムラインをコードから対話式に開始および停止できるようにする、基礎をなすオブジェクトモデルの一部である。
【００１２】
一般にストーリーボード内のタイムラインは、様々なサブツリー、エレメント、および他のオブジェクトに適用できるアニメーションテンプレートを表している。ストーリーボードは、ツリー内のフレームワークエレメント上に直接設定するか、またはスタイル（ボタンの色、サイズ、および他のプロパティなど、エレメントに適用できる１つまたは複数のデータ値を含むリソース）を介してフレームワークエレメントに適用することができる。オリジナルの情報を複製する、チェンジャブル(changeable)などのクローニングと、それに続く複製された情報上での動作とをサポートするオブジェクトにアニメーションを適用するためにストーリーボードを使用することもでき、これによってオリジナルの情報を復元することができる。
【００１３】
したがってストーリーボードは、様々なオブジェクトおよびプロパティに影響を与える、その他の点では独立したタイムラインを単一のタイムラインツリーに統合して、プログラム作成者がタイミングイベントの複雑なセットを簡単な方法で整理および制御できるようにする方法を提供する。例えばタイミングツリーとエレメントツリーを分離すると、作成者が、アニメーションのセットを順番に実行することや、複雑なタイミング構造をループすることなど、時間における操作を行うためにタイミングツリーを使用することが可能になる。ストーリーボードは、アニメーション／ビデオ／オーディオの特定のインスタンス上で、または特定のスタイルのアニメーションに対して使用することができる。
【００１４】
ストーリーボードは、動画化するオブジェクトおよびプロパティと、動画化する元となる基本値とを作成者が指定できるようにするプロパティに関連付けられている。ストーリーボードは、作成者が、時間の経過に伴うそれぞれのアニメーションの変更を個々に定義する代わりに、アニメーションのセットをグループとして整理および制御することを可能にし、これによって、並列アニメーション(parallel animation)およびアニメーションのシーケンス（後述する）など、複雑な方法で相互に同期するアニメーションを簡単に作成することを可能にする。
【００１５】
ストーリーボードは、プロパティトリガおよびイベントトリガを使用して、それらのオペレーション（例えば開始、一時停止、検索、および停止のアクション）を制御することを可能にする。一般にプロパティトリガは、真や偽などの何らかの状態／値に対応し、その一方でイベントが始動する。例えばプロパティトリガは、マウスがエレメント上に存在していた場合は真の値を、エレメント上に存在していなかった場合は偽の値を有することができ、イベントは、マウスがエレメント上でクリックされた場合に始動することができる。それぞれの真または偽の状態および／またはイベントは、（１つまたは複数の）ストーリーボード内で別々に開始、停止、一時停止、および／または検索を行うために使用することができる。このようにして、アニメーションは、ユーザと表示されたエレメントツリーの表示との対話を介して制御することができる。イベントトリガに加えて、プロパティ入力／終了トリガ(property enter/exit trigger)も、タイムラインをトリガする際に使用することができる。
【００１６】
ストーリーボードおよびトリガは、スタイル付けすることができ、スタイルは作成者が、１つまたは複数のプロパティを表すデータをグループとしてまとめ、次いでこれを、エレメントの対応するプロパティに１つのセットとして適用することを可能にする。スタイル内のこれらのプロパティは、動画化するか、および／またはトリガに対応することができる。
【００１７】
他の利点および有利性は、以降の詳細な説明を図面と併せて理解すれば、明らかになるであろう。
【発明を実施するための最良の形態】
【００１８】
（典型的な動作環境）
図１は、本発明を実装できる適切なコンピューティングシステム環境１００の一例を示している。このコンピューティングシステム環境１００は適切なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲に対して何らかの限定を提示することを意図するものではない。またコンピューティングシステム環境１００が、この典型的な動作環境１００内に示されたコンポーネントの任意の１つまたは組合せに関して何らかの依存性または必要性を有すると解釈すべきでもない。
【００１９】
本発明は、他の多くの汎用または専用のコンピューティングシステム環境または構成と共に使用することができる。本発明と共に使用するのに適する可能性のあるよく知られたコンピューティングシステム、環境、および／または構成の例は、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、タブレットデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などを含むが、これらには限定されない。
【００２０】
本発明については、コンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的なコンテキストにおいて説明することができる。一般にプログラムモジュールは、特定のタスクを実行したり特定の抽象データ型を実装したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明は、通信ネットワークを介してリンクされるリモート処理デバイスによってタスクが実行される分散コンピューティング環境において実施することもできる。分散コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを含むローカルコンピュータストレージメディアおよびリモートコンピュータストレージメディアの双方に配置することができる。
【００２１】
図１を参照すると、本発明を実装するための典型的なシステムは、汎用コンピューティングデバイスをコンピュータ１１０の形態で含む。コンピュータ１１０のコンポーネントは、処理装置１２０と、システムメモリ１３０と、システムメモリを含む様々なシステムコンポーネントを処理装置１２０に結合するシステムバス１２１とを含むことができるが、これらには限定されない。システムバス１２１は、メモリバスまたはメモリコントローラと、ペリフェラルバスと、様々なバスアーキテクチャのいずれかを使用するローカルバスとを含む複数のタイプのバス構造のいずれにすることもできる。例えばこのようなアーキテクチャは、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）バス、およびメザニンバスとしても知られているＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスを含むが、これらには限定されない。
【００２２】
コンピュータ１１０は通常、様々なコンピュータ可読メディアを含む。コンピュータ可読メディアは、コンピュータ１１０によってアクセスできる利用可能な任意のメディアとすることができ、揮発性メディアおよび不揮発性メディア、ならびに取り外し可能メディアおよび固定式メディアの双方を含む。例えばコンピュータ可読メディアは、コンピュータストレージメディアおよび通信メディアを含むことができるが、これらには限定されない。コンピュータストレージメディアは、コンピュータ可読命令、データ構造、プログラムモジュール、他のデータなどの情報を記憶するための任意の方法または技術において実装される揮発性メディアおよび不揮発性メディア、ならびに取り外し可能メディアおよび固定式メディアを含む。コンピュータストレージメディアは、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは希望の情報を保存するために使用可能で、コンピュータ１１０によってアクセス可能な他の任意のメディアを含むが、これらには限定されない。通信メディアは通常、搬送波や他の伝送メカニズムなどの変調されたデータ信号内のコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを具体化し、任意の情報伝達メディアを含む。「変調されたデータ信号」という用語は、その特性のうちの１つまたは複数が、情報を信号に符号化するような方法で設定または変更された信号を意味する。例えば通信メディアは、有線ネットワークや直接有線接続などの有線メディアと、音波メディア、ＲＦメディア、赤外線メディア、他の無線メディアなどの無線メディアとを含むが、これらには限定されない。また上記のいずれの組合せも、コンピュータ可読メディアの範囲内に含まれるものである。
【００２３】
システムメモリ１３０はコンピュータストレージメディアを読み取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２などの揮発性メモリおよび／または不揮発性メモリの形態で含む。基本入出力システム１３３（ＢＩＯＳ）は、起動中などにコンピュータ１１０内の要素間における情報伝達を補助する基本ルーチンを含み、通常はＲＯＭ１３１内に格納されている。ＲＡＭ１３２は通常、処理装置１２０にすぐにアクセスできるか、および／または処理装置１２０によってその時点で操作されているデータモジュールおよび／またはプログラムモジュールを含む。図１は、例としてオペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示しているが、これらには限定されない。
【００２４】
またコンピュータ１１０は、他の取り外し可能／固定式、揮発性／不揮発性コンピュータストレージメディアを含むこともできる。図１は、例示のみを目的として、固定式の不揮発性の磁気メディアとの間で読み取りや書き込みを行うハードディスクドライブ１４１と、着脱式不揮発性の磁気ディスク１５２との間で読み取りや書き込みを行う磁気ディスクドライブ１５１と、ＣＤ−ＲＯＭや他の光メディアなどの着脱式不揮発性の光ディスク１５６との間で読み取りや書き込みを行う光ディスクドライブ１５５とを示している。典型的な動作環境において使用できる他の取り外し可能／固定式、揮発性／不揮発性コンピュータストレージメディアとしては、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどがあるが、これらには限定されない。ハードディスクドライブ１４１は通常、インターフェース１４０などの固定式のメモリインターフェースを介してシステムバス１２１に接続されており、磁気ディスクドライブ１５１および光ディスクドライブ１５５は通常、インターフェース１５０などの着脱式メモリインターフェースによってシステムバス１２１に接続されている。
【００２５】
図１に示した上述のドライブおよびそれらに関連するコンピュータストレージメディアは、コンピュータ１１０用のコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの記憶を提供する。例えば図１において、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶するものとして図示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同一とするか、または異なっていてもよいという点に留意されたい。ここでは、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７が最低限異なるコピーであることを示すために、異なる番号を割り当てている。ユーザは、タブレット（電子デジタイザ）１６４、マイクロフォン１６３、キーボード１６２、および通常はマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス１６１などの入力デバイスを介してコンピュータ１１０にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）は、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどを含むことができる。これらの入力デバイスおよび他の入力デバイスは、システムバスに結合されているユーザ入力インターフェース１６０を介して処理装置１２０に接続される場合が多いが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースおよびバス構造によって接続することもできる。またモニタ１９１や他のタイプのディスプレイデバイスも、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。モニタ１９１は、タッチスクリーンインターフェース１９２などのインターフェースを介してコンピュータシステム１１０に手書きなどのデジタル化された入力を入力できるタッチスクリーンパネル１９３などと一体化することもできる。モニタおよび／またはタッチスクリーンパネルは、タブレットタイプのパーソナルコンピュータにおけるように、コンピューティングデバイス１１０が内蔵されている筐体に物理的に結合することができ、タッチスクリーンパネル１９３は基本的にタブレット１６４として機能するという点に留意されたい。さらに、コンピューティングデバイス１１０などのコンピュータは、スピーカ１９５およびプリンタ１９６などの他の周辺出力デバイスを含むこともでき、これは周辺出力インターフェース１９４などを介して接続することができる。
【００２６】
コンピュータ１１０は、リモートコンピュータ１８０などの１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境内で動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードとすることができ、図１にはメモリストレージデバイス１８１しか示されていないが、通常はコンピュータ１１０に関連する上述の要素の多くまたはすべてを含む。図１に示されている論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含むこともできる。こうしたネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいてよく見受けられる。
【００２７】
ＬＡＮネットワーキング環境において使用する場合、コンピュータ１１０は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境において使用する場合、コンピュータ１１０は通常、モデム１７２、またはインターネットなどのＷＡＮ１７３上で通信を確立するための他の手段を含む。モデム１７２は内蔵型または外付け型とすることができ、ユーザ入力インターフェース１６０または他の適切なメカニズムを介してシステムバス１２１に接続することができる。ネットワーク化された環境では、コンピュータ１１０に関連して示されているプログラムモジュール、またはその一部をリモートメモリストレージデバイス内に格納することができる。図１は、例としてリモートアプリケーションプログラム１８５をメモリデバイス１８１上に常駐するものとして示しているが、この形態には限定されない。示されているネットワーク接続は代表的なものであり、コンピュータ間に通信リンクを確立する他の手段も使用できることが理解できるであろう。
【００２８】
（階層化アーキテクチャの例）
本発明の一態様は、一般にスムーズで複雑なアニメーションおよび／またはメディアをコンピュータシステム上に提供することを対象としている。この目的のために、図２に全般的に示されているように、メディア統合レイヤアーキテクチャ２００を提供する。アプリケーションプログラム、制御、または他の類似のより高いレベルのプログラムコード（例えば、オペレーティングシステムコンポーネントのユーザインターフェース）２０２は、アプリケーションプログラミングインターフェース（ＡＰＩ）２０４のセットなどを介してメディア統合レイヤアーキテクチャ２００にアクセスして、グラフィカルな情報へのアクセス（書き込みまたは読み取り）を行う。本明細書に記載する例の多くは、ＡＰＩとインターフェースで接続されているアプリケーションプログラムに言及するが、他のより高いレベルのプログラムコードおよびコンポーネント（例えば、オペレーティングシステムのユーザインターフェース）は、本明細書に記載されているより低いレベルのコンポーネントとインターフェースで接続することもできることを理解できるという点に留意されたい。そのようなものとして、アプリケーションプログラムやユーザインターフェースなど、その呼称を問わず、このようなより高いレベルのプログラムコードに対するいかなる言及も同義とみなすべきである。
【００２９】
一実装形態では、メディア統合レイヤアーキテクチャ２００は、高いレベルの合成およびアニメーションエンジン２０６、タイミングおよびアニメーションコンポーネント２０８、ならびに低いレベルの合成およびアニメーションエンジン２１０を含む。本明細書で使用される「高いレベル」および「低いレベル」という用語は、他のコンピューティングシナリオで使用される場合と同義であり、一般にソフトウェアコンポーネントが、より高位のコンポーネントと比較して低位にあればあるほど、そのコンポーネントはハードウェアに近くなる。したがって、例えば高いレベルの合成およびアニメーションエンジン２０６から送信されるグラフィックス情報は、低いレベルの合成およびアニメーションエンジン２１０で受信することができ、この情報を使用して、ハードウェアを含むグラフィックスサブシステムにグラフィックスデータを送信する。
【００３０】
一般に、高いレベルの合成およびアニメーションエンジン（本明細書では高いレベルのコンポジタ(compositor)およびアニメータ(animator)、あるいは高いレベルのエンジンまたはコンポーネントとも呼ばれる）２０６は、アプリケーションプログラム２０２によって提供されるグラフィックスシーンを表すディスプレイエレメントツリーを構築し、その一方でタイミングおよびアニメーションコンポーネントは、宣言型の（または他の）アニメーションおよびタイミングの制御を提供する。低いレベルの合成およびアニメーションエンジン（本明細書では低いレベルのコンポジタおよびアニメータあるいは低いレベルのエンジンまたはコンポーネントとも呼ばれる）２１０は、複数のアプリケーションのシーン用のレンダリングを合成し、レンダリングコンポーネントによって、画面に対するグラフィックスの実際のレンダリングを実施する。時間のかかるまたはアプリケーションに特有なレンダリングをより高いレベルで行うこと、およびビットマップなどへの参照をより低位のレイヤに渡すことも依然として可能であるという点に留意されたい。
【００３１】
高いレベルの合成およびアニメーションエンジン２０６は、エレメントツリー構造を構築して、その構造を行き来し、レンダリング命令および単純なアニメーションインターバルを作成して、低いレベルの合成およびアニメーションエンジン２１０に渡す。高いレベルのコンポジタによって作成されるレンダリング命令は、タイミングおよびアニメーションの情報を含むことができる。低いレベルの合成およびアニメーションエンジン２１０は、レンダリング命令およびアニメーションインターバルを受け取り、次いでグラフィックスサブシステム（例えば、グラフィックスソフトウェアおよびハードウェア）２１２に提供されるシーンの動画化、レンダリング、および合成を管理する。ローカルに表示された出力の代替として、または追加として、高いレベルの合成およびアニメーションエンジン２０６（またはこれに類似したもの）は、固定されたイメージデータをプリンタ２２２などへ送信するためのより低いレベルの印刷コード２２０にレンダリングおよびアニメーション命令を適切なフォーマットで提供することができ、および／またはリモートマシン２２８への送信用のより低いレベルのターミナルトランスポートサーバ２２６にレンダリング命令および単純なアニメーションインターバルを適切なフォーマットで提供することができる。より豊かな情報をネットワーク全体に渡すこともできるという点に留意されたい。例えば何のネットワークトラフィックも伴わずにリモートマシンにマウスロールオーバー効果(mouse rollover effect)をローカルに処理させることが望ましい場合もある。
【００３２】
この実装形態では、メディア統合レイヤアーキテクチャ２００は、このようにグラフィックス処理を複数のレベルに分割し、これらのレベルのそれぞれが、何らかのインテリジェントなグラフィックス処理を実行し、これらが合わさることは、アプリケーションのユーザインターフェースなど２０２が、スムーズなアニメーションでグラフィックスを出力し、そのグラフィックスを他のアプリケーションのグラフィックスと合成し、ビデオフレームと連動することを可能にする。アニメーションおよび／または合成は、オーディオ出力と同期することもできる。例えば低いレベルのコンポーネントでオーディオとフレーム率を同期させることによって、オーディオのタイミングは、ビデオまたはグラフィックスのタイミングと基本的に一致することができ、リフレッシュ速度についていくためのタスクとしてスケジュールされた複雑な事前処理の能力に依存することはない。
【００３３】
図３は、ＸＡＭＬベースのコードなどのマークアップコード３０２をパーサ／トランスレータ３０４によって解読できる一実装形態を表している。一般にパーサ／トランスレータ３０４は、エレメントツリー／プロパティシステム３１４にエレメントを追加し、これらのエレメントは、自分自身のレイアウトを行うビジュアルオブジェクトである。さらにマークアップコードのいくつかまたはすべては、オンデマンドで解釈するのではなく、コンパイルすることができ、これによって効率が高まるという点に留意されたい。
【００３４】
一般にエレメントは、プロパティシステム、トリガリングおよびレイアウト／プレゼンテーションシステムに参画するエレメントレイヤ内のオブジェクトである。パーサ３０４はタグを見つけて、それらのタグがエレメントまたはリソースオブジェクトを定義するのに役立つかどうかを判断する。ＶｉｓｕａｌＢｒｕｓｈの特別なケースでは、（特許文献３）に記載されているように、例えば同じタグを、それらのタグが現れるコンテキストに応じて、例えば複合プロパティシンタックス内に現れるかどうかに応じて、エレメントとして解釈したり、あるいはリソースオブジェクトとして解釈したりすることもできる。
【００３５】
マークアップ内でインラインで存在することに加えて、リソースインスタンスは、別の場所に（例えばローカルに配置できるか、またはリモートネットワーク上に配置して適切にダウンロードできるマークアップ内またはファイル内に）配置し、名前によって（例えばテキスト名、参照、または他の適切な識別子によって）参照することができる。このようにして、シーンの設計者は、複合プロパティシンタックスによって記述されたエレメントを含む、エレメントツリー内の１つのエレメントを１つのシーンを通じて再利用することができる。
【００３６】
パーサ３０４は、必要に応じてタイプコンバータ３０８にアクセスすることによって、また指定されたパラメータをオブジェクトプロパティにマッチさせることによって、複合プロパティシンタックス内のマークアップを処理し、これによってシーンの設計者にとっての複雑さに対処する。したがってパーサ３０４は、オブジェクトをセットアップするだけでなく、オブジェクト上のプロパティも設定する。同じレンダリングモデルがエレメントレベルとＡＰＩレベルの間で共有されるため、オブジェクトの多くは基本的に同じである。これは、解析／翻訳をきわめて効率的にし、また様々なタイプのプログラミング言語（例えば、Ｃ＃のような言語）に、マークアップからそれ自身のシンタックスへ、およびその逆へ容易に変換できる機能を与える。図３に示されているように、（コンパイルされたマークアップを含むことができる）このような別のプログラミング言語３１０は、エレメントをエレメントツリー２０８に追加するか、またはビジュアルＡＰＩレイヤ３１６と直接インターフェースで接続できるという点に留意されたい。
【００３７】
図３にも示されているように、同じマークアップ３０２を使用して、エレメントレベルおよびリソースレベルでプログラムを作成することができる。一般にエレメントレベルは、十分なプログラム可能性と、継承（例えばスタイルシートのような機能）を提供するプロパティシステムの使用と、トリガ（例えば、これによってエレメントがユーザの入力したイベントまたはアクションに応答してその外観や位置などを変更するコードを添付した可能性がある）とをシーンの設計者に与える。しかし本発明は、リソースレベルのメカニズムも提供し、これによってシーンの設計者は、基本的にエレメントツリーおよびプログラムを直接ビジュアルＡＰＩレイヤへショートカットすることができる。エレメントレベルの機能を必要としない多くのタイプの静的な形状やイメージなどにとって、これは、適切なオブジェクトを出力するためのより効率的で軽快な方法を提供する。
【００３８】
アニメーションおよびメディアの出力を制御する目的で、図４および５を参照して後述するように、クロックを含むタイミングツリーも保持される。一般に高いレベルのコンポジタおよびアニメータエンジン２０６は、（コンパイルと呼ばれる場合もある）複雑な処理を実行し、処理量を著しく簡素化し、正しい出力をレンダリングするためにより低いレベルで処理する必要のあるデータ量を大幅に削減する。しかし、より高いレベルによって実行される処理の量およびタイプは、より低いレベルの負荷、構成、および性能にかなりの程度依存する場合があるという点に留意されたい。例えば高性能のグラフィックスハードウェアがある場合、より高いレベルで行う処理の量はより少なくすることができ、逆もまた同様である。高いレベルのレイヤおよび低いレベルのレイヤは、これらの要因に適応することができる。
【００３９】
一般にアニメーションは、高いレベルのコンポジタおよびアニメーションエンジン２０６と低いレベルのコンポジタおよびアニメーションエンジン２１０の双方によって達成される。一実装形態では、高いレベルのエンジン２０６は、シーンを行き来し、その後の補間用のインターバルによってアニメーションパラメータを更新し、これらの簡素化されたデータ構造を命令にパッケージして、より低いレベルのエンジン２１０へ渡す。これは、同期的なおよび／または非同期的な方法で行うことができる。インターバルデータは、タイミングエンドポイント（開始および終了のタイミングのデータ）、ならびにレンダリング命令用のパラメータ化された値を含むものとみなすことができる。高いレベルのエンジン２０４は、要求された補間のいくつかまたはすべてを実行できるという点に留意されたい。例えば補間または他のモーション機能が複雑すぎて、より低いレベルのエンジン２１０が処理できない場合、またはより低いレベルが、その上に課された処理要求についていけない場合、より高いレベルのエンジンは、その計算のいくつかまたはすべてを実行することができ、簡素化されたデータ、命令、テッセレーション(tessellation)などをより低いレベルに提供して、所望の結果を達成する。
【００４０】
典型的なケースでは、より低いレベルが、アニメーションのそれぞれのフレームごとに実際に補間を実行する際、低いレベルのエンジン２１０は、パラメータインターバルを補間して瞬時値を得て、命令をレンダリングコマンドへと復号し、このレンダリングコマンドは、グラフィックスデバイスによって実行される。グラフィックスデバイスは、最終シーン内に現れる可能性のあるすべてのビデオフレームを追加して、最終シーンを合成する。デジタル権利管理によって保護されているコンテンツなど、他のデータを追加することもできる。
【００４１】
したがって高いレベルのエンジン２０６は、シーンデータ構造を行き来し、一定の時間にわたるそれぞれの動画化されたパラメータを記述するインターバルを計算し、これらのインターバルおよび簡素化されパラメータ化された描画命令を低いレベルのエンジン２１０に渡す。パラメータデータは、開始時刻、終了時刻、インターポレータ(interpolator)、および補間データを含む。例えば、イメージが動いて見えるようにそのイメージを消去して描き直すのではなく、高いレベルのコンポジタおよびアニメーションエンジン２０６は、そのイメージが時間の経過と共にどのように変化すべきかについて、例えば開始座標、終了座標、イメージが座標間で移動すべきである時間の量（インターバル）、および線形などのモーション機能について、低いレベルのコンポジタおよびアニメーションエンジン２１０に指示することができる（例えば静止オブジェクトは、その色プロパティを変更することによって動画化できるため、モーションはアニメーションにとって必要とされないという点に留意されたい）。低いレベルのコンポジタおよびアニメーションエンジン２１０は、補間を行って、フレーム間の新たな位置を確定し、これらをグラフィックスデバイスの理解できる描画命令に変換し、そのコマンドをグラフィックスデバイスに渡すことになる。高いレベルのエンジン２０６が渡すたびに、低いレベルのエンジン２１０が複数のフレームにわたってスムーズなアニメーションを実行するのに十分なデータが提供されることが好ましい。
【００４２】
低いレベルの（例えばファーストチック(first-tick)）エンジン２１０は、高いレベルのエンジン２０６から分離されたタスクである。低いレベルのエンジン２１０は、シーンについて記述する簡素化されパラメータ化された描画命令およびパラメータインターバルを高いレベルのエンジン２０６から受け取る。低いレベルのエンジンは、高いレベルのエンジン２０６によって新たなデータ構造が提供されるまで、これらのデータ構造を保持して行き来する。低いレベルのエンジンは、複数の高いレベルのエンジン２０６にサービスを提供することができ、それぞれごとに別々のデータ構造を保持する。低いレベルのエンジン２１０と高いレベルのエンジン２０６の間におけるこの一対多の関係は、システムが同時に複数のシーンをスムーズに動画化することを可能にする。
【００４３】
低いレベルのエンジン２１０は、高いレベルのエンジンの提供されたインターバルに基づいて基本的に瞬時のアニメーションパラメータを補間し、描画命令を更新し、あらゆるフレーム用のシーンをレンダリングする。低いレベルのエンジン２１０のタスクは、システム上において高い優先順位で実行され、フレームをグラフィックスハードウェアの画面のリフレッシュ速度などで提示できる状態にしておく。したがって低いレベルのエンジン２１０によって実行される補間は通常、線形、区分線形、三次スプライン、および類似の速度の関数などの高速な単関数に限定される。
【００４４】
アニメーションおよびメディアに関しては、図４および５に全般的に示されているように、アプリケーションプログラム２０２などのプログラムは、高いレベルのコンポーネント２０６に対して、クロックまたはクロックプロパティと呼ばれる、タイミング情報を伴うアニメーションプロパティ値を指定する。後述のように、基本的にすべての独立したアニメーションまたはメディア（例えば、ビデオおよびオーディオなどの線形メディア）、ならびに指定されたアニメーションを調整するストーリーボードは、そのために保持されるクロックを高いレベルのコンポーネントにおいて有することになる。一般に作成者は、クロックへとインスタンス化されるタイムラインデータを必要に応じて指定して、それらの同期を維持する。
【００４５】
クロックプロパティは、所与のクロックとタイミング構造の残りとの間における最初の同期関係を定義するタイミングプロパティを含む。図５に示されているように、高いレベルのコンポーネント２０６は、アニメーションのプロパティのその時点での値を確定するために、高いレベルのアニメーション関数５２０H（例えばマネージドのコードで書かれており、これは、情報をメタデータの形態で提供するコードであり、共通言語ランタイムを可能にし、この上で動作して、そのオペレーションを制御する）を呼び出すことができる。高速のフレーム率の計算中に、低いレベルのコンポーネント２１０は、アニメーションのその時点でのプロパティ値を確定するために、エンジン４１４によって計算された増加を有する類似の（または同じ）アニメーション関数５２０Lを呼び出す。代替実装形態では、例えばアニメーション関数をより低いレベルのコンポーネントに組み込むことができるという点に留意されたい。
【００４６】
一般にアニメーションおよび線形メディアは、クロックのセットに関連付けられ、これらのクロックは、同期化プリミティブ(synchronization primitive)およびルールによって相互に関連付けられている。クロックは階層的に構成することができ、例えばアプリケーションプログラムは親クロックを有し、アプリケーションプログラムの動画化されたオブジェクトは子であり、これも同様に他の子を有することができる。１つのクロックのプロパティが定義または修正されると、そのクロックのすべての子が影響を受ける。例えば親クロックを一時停止すると、その子クロックもすべて一時停止し、親クロックの速度を倍増させると、そのすべての子クロックの速度も倍増する。
【００４７】
これらのクロックプロパティは、ランタイムにアプリケーションによって開始された対話式の制御イベントを含むソースイベントによって修正することができる。したがってクロックは対話式であり、それぞれのクロックは、アプリケーションによって任意の時点で、例えばユーザの入力に応答して、個々に開始、一時停止、再開、および停止することができる。その上、新たなクロックをタイミング構造に追加することができ、また既存のクロックを除去することもできる。
【００４８】
前述の（特許文献２）に記載されているように、高いレベルのタイミングコンポーネントは、保存されているイベント（開始や一時停止など）のリストおよび関連付けられている同期化プリミティブに基づいて、それぞれのクロックごとにインターバルリストを作成することができる。アクティブ化インターバルは、現実の時間における様々な時点で所与のクロックによって表される時間について記述する単純で重ならないセグメントである。
【００４９】
図４に示されているように、クロックプロパティの少なくとも一部は、クロックのタイミングツリー４０２内で階層的に関連付けることができる。このような３つのクロックとそのプロパティ、すなわちクロックプロパティ４０４1〜４０４3が図４に示されているが、与えられた状況によっては、より多くのクロックおよび代わりのタイミングツリーが存在してもよいことを理解することができる。例えば表示される動画化されたオブジェクト（またはストーリーボードによって調整されたオブジェクトのセット）に対応できるそれぞれのクロックごとに、高いレベルのコンポーネント２０６は、イベントリストジェネレータ４０８と呼ばれる状態マシン(state machine)を含み、これは、クロックプロパティからイベントリスト（例えば４０６1）を作成する。一般にイベントリストジェネレータ４０８は、指定されたクロックプロパティによって最初にスケジュールされたイベントを、アニメーションに関して受信される一時停止要求および再開要求など、何らかの明示的な対話型のイベントと共に１つのイベントリストにまとめる。クロックは、それぞれのアニメーション（または後述のようなストーリーボードを介したアニメーションのグループ）ごとに保持され、したがって、それぞれの独立したアニメーション／アニメーションセットに対応するイベントリスト、ならびにそれぞれの独立した線形メディア用のイベントリストがある。
【００５０】
高いレベルのコンポーネントは、インターバルジェネレータ４１０を含み、これは、それぞれのアニメーションまたはメディア用のイベントリスト（例えば４０６3）を使用して、対応するインターバルリスト（例えば４１２3）を計算し、これを低いレベルのコンポーネント２１０に渡す。次いで、低いレベルのコンポーネント２１０は、低いレベルの計算エンジン４１４を含み、これは、そのオブジェクト用のインターバルデータおよび現在の時刻に基づく増加値を、動画化されたオブジェクトの変わりゆくプロパティに関する現在の値を確定する低いレベルのアニメーション関数サブシステム５２０Lに提供することなどによって、インターバルデータに関して現在の時刻に基づいて出力を制御する。例えば任意の所与のフレームに関して、低いレベルの計算エンジン４１４は、動画化されたオブジェクトの位置をインターバルデータおよび現在の時刻（これは、システム時間または相対的時間とすることができる）に基づいて補間する。図４および５に示されているように、高いレベルのタイミングコンポーネントは、タイミングツリー４０２およびイベントリスト４０６1〜４０６3を含み、その一方で低いレベルのタイミングコンポーネント２１０は、インターバルリスト４１２1〜４１２3を含むが、これらのデータ構造は、基本的にストレージ内のいずれの場所に保持することもでき、通常は高速のランダムアクセスメモリ内に保持できるという点に留意されたい。
【００５１】
要約すると、高いレベルのタイミングコンポーネント２０６は、同期化ルールおよびプリミティブによって（例えば階層的に）関連付けられているクロックのツリー４０２を参照する。本発明は、高いレベルのタイミングコンポーネント２０６内のクロックを使用して、低いレベルのタイミングエンジンによって消費されるアクティブ化インターバルのリスト４１２をコンパイルする。低いレベルのタイミングエンジンは、インターバルリスト４１２を参照し、これは、（例えば動画化されたオブジェクトごとに、または線形メディアごとに）独立したクロックを表す。図５に示されているように、システムクロック５２４など、双方にとって整合性のある時間を提供するクロックがあり、これによって複数のレベルが同期を維持する。
【００５２】
アプリケーション２０２（または何らかの他のソース）から受け取った対話型の変更に応答して、高いレベルのタイミングコンポーネントは、その変更に直接関与しているクロックの状態、さらには間接的に関与しているすべてのクロックの状態を、同期化プリミティブによって指定されるように更新する必要がある。単一のクロックに対する変更が、タイミング構造内の他のクロックにも影響を与える場合がありうるという点に留意されたい。例えばスライドショーの発表者は、ディスプレイ全体を一時停止する場合があり、これによって、その時点で表示されているすべてのアニメーションおよび線形メディアは、一時停止する必要がある。後述するように、本発明の一態様によれば、ストーリーボードは、アニメーションおよび／またはメディアをグループにまとめて、そのような望ましい方法で調整することを可能にする。
【００５３】
一般にオブジェクトに関して対話が発生するときは常に、イベントリストが必要に応じて再作成され、インターバルリストが再計算されて、より低いレベルのタイミングコンポーネントへ送信される。より高いレベルのコンポーネントは、これらのオペレーションを（例えば毎秒６回から１０回程度の頻度で）実行し、これによって、（例えば毎秒６０回動作する）より低いレベルのコンポーネントは、それぞれの動画化されたオブジェクトごとにその時点のインターバルリストを処理するだけでよい。
【００５４】
このインターバル情報ならびにオブジェクト用の開始値および終了値に加えて、さらなるパラメータをより高いレベルのコンポーネントへ送信することができ、その結果としてインターバルリストが変更される。例えばアプリケーションは、イベントに対応する、時間における期間への検索を行うことができる。アプリケーションは、その検索がいつ、どの程度の分量で発生するかを指定する。巻き戻し中または早送り中のメディアのように、アニメーション上の検索によって、アプリケーションは、時間における特定のポイントまで前または後ろにジャンプすることができる。リバースイベント(reverse event)は、アプリケーションが指定できる別のタイプのスケジュールされたまたは対話型のイベントである。リバースイベントがリスト内にある場合、増加は、例えば１００パーセントから０パーセントへ自動的に逆転されることになる。速度の変更もサポートされ、例えば特定のクロックを下回るものはすべて、実際の時間よりも速くまたは遅く実行されるように設定することができる。特定のクロックに関して、再開が認められるかどうか、および／またはその時点で実行されていない場合、再び開始するかどうか、例えば１秒で開始し、１０秒で再び開始し、１００秒で再び開始するなど、ただしその時点で実行されている場合は、任意選択で再開するかしないかを示すことなど、他の属性を指定することもできる。
【００５５】
（アニメーションおよびメディアを調整するためのストーリーボード）
本発明は、とりわけストーリーボードを対象としており、これは、タイムラインツリーをエレメント（例えば、ウィンドウ等のＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ、パネル、ボタン等の制御など）用に指定できるようにするオブジェクトを含む。タイムラインは、エレメントのプロパティ値を設定し、エレメントおよびそのサブツリー用のアニメーションを制御する。ストーリーボードは基本的に、開始すること、停止または一時停止すること、あるいは検索するために使用することが可能な特定のタイプのタイムラインオブジェクトに対応し、これによって、動画化されたエレメントの外観、および／またはそのストーリーボードに関連付けられているメディアの動作を制御する。
【００５６】
理解できることであろうが、本発明の一態様では、ストーリーボードは、トップレベルのタイムラインのコレクションを含み、これは、１つのエレメントに関連付けることができ、かつ独立して開始することができる。例えば後述するように、このモデルは作成者が、ｍｏｕｓｅＯｖｅｒアニメーションおよびｍｏｕｓｅＣｌｉｃｋアニメーションを、同一のストーリーボードコレクション内にある１つのエレメント上に有することを可能にする。このｍｏｕｓｅＯｖｅｒアニメーションタイムラインとｍｏｕｓｅＣｌｉｃｋアニメーションタイムラインは、独立してトリガできるが、同じユニット内に含まれている。ストーリーボードは、タイミングツリーと、ストーリーボード内のアニメーションが、そのストーリーボードが添付されているエレメントに関連してそれらのターゲットを分解できるようにするエレメントツリーとの接続ポイントも提供する。ストーリーボードはまた、状態の変化、イベント、または他のアクションによってアクティブ化できるトリガのコレクションを含むこともでき、そのトリガがアクティブ化されたときに実行される拡張可能なアクションのセット（例えば、タイムラインの開始または停止）を含むこともできる。ストーリーボードは、作成者がストーリーボード内のタイムラインをコードから対話式に開始および停止できるようにする、基礎をなすオブジェクトモデルの一部である。
【００５７】
一般にストーリーボード内のタイムラインは、様々なサブツリー、エレメント、および他のオブジェクト（例えば、テキストの文字、単語、行、パラグラフなど）に適用できるアニメーションテンプレートを表している。ストーリーボードは、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ上に直接設定するか、またはＳｔｙｌｅ（後述のように、ボタンの色、サイズ、および他のプロパティなど、エレメントに適用できる１つまたは複数のデータ値を含むリソース）を介してＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔに適用することができる。ストーリーボードを使用して、チェンジャブル（例えばブラシ(brush)、変形、ジオメトリなど。（特許文献４）に記載されているように、チェンジャブルを使用して、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔｓのプロパティを設定することができる）などのクローニングをサポートするオブジェクトにアニメーションを適用することもできる。例えばブラシは、オリジナルの情報を復元できるように、オリジナルのバックグラウンド情報を複製して、複製された情報上で動作することによって、ボタンまたはパネルのバックグラウンドを設定するチェンジャブルである。したがってストーリーボードを使用して、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔのプロパティを設定するチェンジャブルを動画化することができる。言い換えれば、ストーリーボードに関連する２種類のオブジェクト、すなわちストーリーボードと共に参画するエレメント（ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔなど）、およびストーリーボードと共に参画しないエレメント（例えば、前述のようなチェンジャブル）がある。ストーリーボードのアルゴリズム／データ構造は、参加するものは指定されたように作業するが、クローニングをサポートする限り、参加しないものすら指定されたように作業するようなものである。
【００５８】
本発明の一態様によれば、ストーリーボード（例えば、ＡＰＩを介してアクセスされるオブジェクト）は、プログラム作成者が、タイムライン内でアニメーションを（エレメントプロパティへ）グループ化することによって、調整されたアニメーションのセットをスケジュールすることを可能にする。すなわちストーリーボードは、タイミングツリーをエレメントツリーと統合し、同じタイムラインを介して調整された方法で様々なアニメーションの様々なプロパティ用のタイミングを操作する機能を提供する。したがってストーリーボードは、様々なオブジェクトおよびプロパティに影響を与える、その他の点では独立したタイムラインを単一のタイムラインツリーに統合して、プログラム作成者がタイミングイベントの複雑なセットを簡単な方法で整理および制御できるようにする方法を提供する。例えば個々のアニメーションを見つけて再開しなければならない代わりに、アニメーションをストーリーボードの一部としてタイムラインの下でグループ化することは、ストーリーボードを再開するだけですべてのアニメーションを同時に再開することを可能にする。さらに、タイミングツリーとエレメントツリーを分離することは、ユーザが、アニメーションのセットを順番に実行することや、複雑なタイミング構造をループすることなど、時間における操作を行うためにタイミングツリーを使用することを可能にする。
【００５９】
ストーリーボードは、アニメーション／ビデオ／オーディオの特定のインスタンス上で、または特定のスタイルのアニメーションに対して使用することができる。
【００６０】
対比の目的で、ストーリーボードなしで書かれた以下のコード例について考察すると、これは、対話式の応答を追加するためのコードビハインド(code-behind)を必要としている（この例では、マウスをクリックした後に２つの別々のボタンを希望どおりに同時に動画化すること）。このコードの作成者は、それぞれのボタンのアニメーション用に必ず同じ開始時刻を設定する必要がある。これは、これらの時刻をそれぞれのボタンのタイムライン上で別々に宣言する必要があるためである。このコードは、２つのボタンを同時に動画化することを目的としているが、第１のボタンのアニメーションおよび第２のボタンのアニメーションは、２つの別々の（Ｂｅｇｉｎ）コールによって開始されるため、実際には第１のボタンのアニメーションと第２のボタンのアニメーションの間に何らかのラグが生じるという点に留意されたい。
【００６１】
【表１】
2006146924.tif 000003
【００６２】
本発明の様々な態様によれば、一実装形態では、アニメーション用にストーリーボードを使用するために、プログラム作成者は、Ｔｉｍｅｌｉｎｅ、関連付けメカニズム(association mechanism)（例えば、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅまたは添付されているＳｔｏｒｙｂｏａｒｄプロパティ）、およびＡｎｉｍａｔｉｏｎオブジェクトをＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔのＳｔｏｒｙｂｏａｒｄｓプロパティに追加する。ストーリーボードは、特定のエレメントに直接適用するか、または（後述するように）スタイル内で定義することができる。この実装形態では、ストーリーボードは、少なくとも１つのＳｅｔｔｅｒＴｉｍｅｌｉｎｅを有し、これを使用して、１つまたは複数のタイムラインを指定されたオブジェクトの指定されたプロパティにリンクする。上述したタイムラインの基本的なタイミングプロパティに加えて、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅは、３つの独特なプロパティを有し、これによって作成者は、動画化するオブジェクトおよびプロパティ、ならびに動画化する元となる基本値、すなわちオブジェクトの動画化をターゲットとするＴａｒｇｅｔＩＤ、動画化するプロパティをターゲットとするＰｒｏｐｅｒｔｙＰａｔｈ（本明細書では「Ｐｒｏｐｅｒｔｙ」または「Ｐａｔｈ」と同義である）、およびターゲットとするプロパティ用の基本値が存在する場合にその基本値を指定する任意選択のプロパティであるＶａｌｕｅを指定することができる。作成者は、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅによってオブジェクトおよびプロパティをターゲットとした後に、タイムラインおよびアニメーションをその子として追加して、ターゲットとするプロパティにそれらを適用するという点に留意されたい。
【００６３】
以下のコード例は、前のコード例との比較から、ストーリーボードがどのようにコーディングを簡素化し、機能性を高めるかを示している（この例は、ストーリーボードクラス上の添付プロパティを介して動作する後述のような代替実装形態ではなく、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅの実装形態例を使用しているという点に留意されたい）。
【００６４】
【表２】
2006146924.tif 000004
【００６５】
別法として、このＸＡＭＬコード例の第２のセットは、ストーリーボードを使用して、１つのクリックイベントによって２つのボタン上で同時にアニメーションを開始する。この目的のために、キャンバス(canvas)の単一のストーリーボードタイムライン内には、１つのエレメントプロパティ（ｍｙＢｕｔｔｏｎエレメントの不透明度プロパティ）をそのストーリーボードタイムラインに結び付ける１つのＳｅｔｔｅｒＴｉｍｅｌｉｎｅと、別のエレメントプロパティ（ｍｙＢｕｔｔｏｎ２エレメントの位置プロパティ）をその同じストーリーボードタイムラインに結び付ける別のＳｅｔｔｅｒＴｉｍｅｌｉｎｅとがある。単一のイベント（ｍｙＢｕｔｔｏｎをクリックすること）は、ストーリーボードをトリガし、調整されたアニメーションを開始し、時間の経過と共にｍｙＢｕｔｔｏｎの不透明度およびｍｙＢｕｔｔｏｎ２の位置を変える。
【００６６】
対照的なコード例から分かるように、ストーリーボードを使用することは、コードの複雑さを緩和し、アニメーションの開始時刻間において純粋な調整を行う。この例では、双方のアニメーションは、純粋に同じ時刻に開始される。これは、Ｂｅｇｉｎに対して別々のコールがないためである。さらに、双方向性を実現する上でＸＡＭＬを補助するコードは不要であり、したがって作成者は、ＸＡＭＬだけでコードを書くことができる。その上、ストーリーボードでは、作成者は、調整された開始時刻を１つの場所に、すなわちストーリーボードのタイムライン上に設定するだけでよい。
【００６７】
したがってストーリーボードは、作成者が、時間の経過に伴うそれぞれのアニメーションの変更を個々に定義する代わりに、アニメーションのセットをグループとして整理および制御することを可能にし、これによって、相互に同期するアニメーション、およびアニメーションのシーケンス（後述する）を簡単に作成することができる。以下の例について考察すると、これは、異なる幅および色を有する３本の長方形の針、すなわち黒色の時針、緑色の分針、および赤色の秒針を備えたクロックに相当し、角度を設定する回転の変形を使用することによって、その時点でのシステム時間を自動的に表示する。この例では、単一のストーリーボードタイムラインを使用して、３本の針のアニメーションを調整する。
【００６８】
【表３】
2006146924.tif 000005
【００６９】
レンダリング変形プロパティ(render transform property)および回転変形角度サブプロパティ(rotate transform angle sub-property)を介して、上記のコードを実行すると、タイムマネージャーは、（これらの針が０度の角度にあることが分かっていたＡＤ０年の００：００：００以降の）その時点の時刻と、レンダリングの際に使用された更新された角度とに基づいて、それぞれの針の回転量を自動的に計算する。それぞれの新たなアニメーションの計算は、例えばフレームごとに１回、または他の何らかの割合で、これらの針の角度位置を更新する。３本の針は、すべていっせいに始動し、例えば（上記のコード例には示されていない）何らかのイベントがクロックを停止した場合、３本ともいっせいに停止する。
【００７０】
容易に理解できることだが、例えば複数のＳｅｔｔｅｒＴｉｍｅｌｉｎｅｓは、単一のストーリーボードタイムラインの下でグループ化することができ、それぞれのＳｅｔｔｅｒＴｉｍｅｌｉｎｅｓは、様々なターゲットエレメントおよびそれらのエレメントのプロパティを参照するため、エレメントプロパティのアニメーションの複雑度は著しくなる場合がある。ストーリーボードは、組み合わせることができる。例えば１つのストーリーボードは、１つの変形を１つのエレメントに関連付けることができ、別のストーリーボードは、その変形用の値を設定することができる（ただし、その値が設定される前にその変形が存続しているように、コード内の順序を正しくする必要がある）。いずれにしても、ストーリーボードを使用することは、作成者が、所望のエレメント、プロパティ、およびアニメーションの動作をレイアウトすることを容易にする。
【００７１】
図６は、そうしたコードをどのように構成できるかを一般的に示したものであり、ストーリーボードのセット（例えばＳｔｏｒｙｂｏａｒｄl〜Ｓｔｏｒｙｂｏａｒｄn）を有するキャンバスがあり、そのセットのそれぞれのストーリーボード（例えばＳｔｏｒｙｂｏａｒｄl）は、場合によっては複数のＳｅｔｔｅｒＴｉｍｅｌｉｎｅｓ、例えばＳｅｔｔｅｒＴｉｍｅｌｉｎｅｓl〜ＳｅｔｔｅｒＴｉｍｅｌｉｎｅｓm（または後述のような、プロパティを有するＰａｒａｌｌｅｌＴｉｍｅｌｉｎｅなど、同等のエレメントツリー関連付けメカニズム）を有するタイムラインを含む。このキャンバスはまた、以降にも記載するイベントトリガ情報、ならびに動画化されたプロパティを有するターゲットとしてストーリーボードに関連付けられた（スタイル識別子およびファイル識別子などの）エレメントおよびリソースに関する情報を含むこともできる。
【００７２】
容易に理解できることだが、本発明の様々な態様を実施するための代替方法が実行可能である。例えばＳｅｔｔｅｒＴｉｍｅｌｉｎｅを使用する代わりに、代替の関連付けメカニズムは、Ｓｔｏｒｙｂｏａｒｄクラス上の添付プロパティを介して、同様の関連付け情報を指定する。これによって、メディアをストーリーボードに組み込むことが容易になるという点に留意されたい。この代替方法用のＸＡＭＬの例を以下に示す。
【００７３】
【表４】
2006146924.tif 000006
【００７４】
上記の例では、何らかのメディアファイル（ｍｙ．ｗｍｖ）をストーリーボードに関連付けるためのＭｅｄｉａＴｉｍｅｌｉｎｅ、およびストーリーボードプロパティが設定されるＰａｒａｌｌｅｌＴｉｍｅｌｉｎｅがある（説明を簡単にするために、いくつかの省略記号が示されている）という点に留意されたい。「ＰａｒａｌｌｅｌＴｉｍｅｌｉｎｅ」は、前に理解したように、基本的にストーリーボードタイムラインであって、他のタイプのタイムラインと区別するために、変更された名前を有し、（上記の）ＭｅｄｉａＴｉｍｅｌｉｎｅおよび（後述する）ＳｅｑｕｅｎｔｉａｌＴｉｍｅｌｉｎｅを含むという点に留意されたい。しかしＰａｒａｌｌｅｌＴｉｍｅｌｉｎｅはまた、ストーリーボード用のプロパティ、例えば（ＴａｒｇｅｔＩＤ、ＰｒｏｐｅｒｔｙＰａｔｈ、およびＶａｌｕｅ  ｏｆ  ａ  ＳｅｔｔｅｒＴｉｍｅｌｉｎｅの代わりに）Ｓｔｏｒｙｂｏａｒｄ．Ｐｒｏｐｅｒｔｙ、Ｓｔｏｒｙｂｏａｒｄ．Ｖａｌｕｅ、およびＳｔｏｒｙｂｏａｒｄ．Ｔａｒｇｅｔを使用することによって、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅの必要性を解消するが、これによって、添付プロパティが長くなり、見つかりにくくなる傾向がある。一般にストーリーボードプロパティは、それぞれのストーリーボードに関して、何らかのターゲットプロパティ（例えばＴａｒｇｅｔＩＤ）があり、他のストーリーボードプロパティがそのＴａｒｇｅｔＩＤと同じタイムライン上にあり、ネスト化されたＴａｒｇｅｔｓがない限り、いかなるタイムラインにも添付することができる。ＴａｒｇｅｔＩＤがまったく指定されていない場合、そのターゲットは、ストーリーボードをホストするエレメント、例えば前の例ではＣａｎｖａｓであるとみなされるという点に留意されたい。メディアに関しては、ＭｅｄｉａＴｉｍｅｌｉｎｅｓは、Ｓｔｏｒｙｂｏａｒｄ．ＰｒｏｐｅｒｔｙまたはＳｔｏｒｙｂｏａｒｄ．Ｖａｌｕｅを指定しない。
【００７５】
次のテーブルは、Ｓｔｏｒｙｂｏａｒｄクラスならびにそのオブジェクトプロパティおよびメソッドの一例について記述している。
【００７６】
【表５】
2006146924.tif 000007
【００７７】
エレメントツリーをストーリーボードのタイムラインツリーに関連付けるための他の代替方法が、以下のＸＡＭＬの例に示されている。
【００７８】
【表６】
2006146924.tif 000008
【００７９】
この上記の代替方法では、ＭｅｄｉａＴｉｍｅｌｉｎｅは、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅの子ではないが、タイムライン上の値ではなく、タイムラインツリーの一部であるためには、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅの子となるべきであるという点に留意されたい。したがってこれは、一般にあまり望ましくないシンタックスである。
【００８０】
【表７】
2006146924.tif 000009
【００８１】
上記の代替方法では、ＭｅｄｉａＳｅｔｔｅｒＴｉｍｅｌｉｎｅという別のクラスが追加されているという点に留意されたい。
【００８２】
【表８】
2006146924.tif 000010
【００８３】
この上記の代替方法は、アニメーションパターンに従っているが、値および子が同じプロパティの値になりたがるため、またそれによって、ＭｅｄｉａＴｉｍｅｌｉｎｅを幅上に置くことが認められるため、混乱が生じる傾向がある。
【００８４】
多数の代替方法が可能ではあるが、説明上の目的から、一般に本明細書における他の例については、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅの使用を介して説明する。
【００８５】
一実装形態では、ストーリーボードは、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ上のタイムラインコレクションプロパティとすることができ、このタイムラインコレクションは、最初にエレメントに適用されたときに、そのエレメント上でクロックへとインスタンス化される。Ｓｔｏｒｙｂｏａｒｄｓプロパティ内の値は、例えばそれぞれのタイムライン階層の葉(leaves)が（一実装形態では、プロパティの基本値を設定するために使用される）ＳｅｔｔｅｒＴｉｍｅｌｉｎｅであるＩＬｉｓｔ＜Ｔｉｍｅｌｉｎｅ＞などのタイムラインインスタンスか、またはこの実装形態ではＳｅｔｔｅｒＴｉｍｅｌｉｎｅの下にアニメーションを有する（基本値を修正するために使用される）アニメーションインスタンスである。ＳｅｔｔｅｒＴｉｍｅｌｉｎｅはＴｉｍｅｌｉｎｅであり、したがって子を有することができるが、一実装形態では、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅの唯一の正当な子はＡｎｉｍａｔｉｏｎである。
【００８６】
Ｓｔｏｒｙｂｏａｒｄｓプロパティは依存プロパティ(dependency property)ではないという点に留意されたい。ストーリーボードプロパティ内のタイムラインインスタンスのそれぞれは、潜在的に階層を表している。これらのタイムライン階層は、ＴｉｍｅｌｉｎｅＣｌｏｃｋ階層へとインスタンス化され、ホストのＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ内に保存される。次いでこれらの個々のクロックインスタンスは、（ストーリーボードからのタイムラインの１つであることが必要とされる）Ｔｉｍｅｌｉｎｅを入力として受け取るＦｉｎｄＳｔｏｒｙｂｏａｒｄＣｌｏｃｋ  ＡＰＩを使用して得ることができ、このＡＰＩを使用して、関連付けられているクロックを見つけ出す。
【００８７】
最新の実装形態では、ストーリーボードは、ホストのフレームワークエレメント上でＩＳｕｐｐｏｒｔＩｎｉｔｉａｌｉｚｅ．ＥｎｄＩｎｉｔがコールされたときに処理される。いったんストーリーボードが処理されると、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ．Ｓｔｏｒｙｂｏａｒｄｓは読み取り専用にすることができ、変更が処理されないという事実を反映する上で役に立つ。
【００８８】
前述のように、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅは、ホストのＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔにとって、または指定された場合はターゲットのＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔにとって暗黙のうちにターゲットとすることができるプロパティ、および任意選択で値を指定するためのタイムラインである。指定された場合、ＴａｒｇｅｔＩＤは、ホストのＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔの子孫(descendency)におけるＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ  ＩＤへの参照である。ＳｅｔｔｅｒＴｉｍｅｌｉｎｅ上のＰａｔｈ（本明細書ではＰｒｏｐｅｒｔｙＰａｔｈと同義である）プロパティは、どのプロパティがストーリーボードを介して動画化されているか、また必要とされているかを記述する。
【００８９】
ＳｅｔｔｅｒＴｉｍｅｌｉｎｅのＶａｌｕｅプロパティも、任意選択である。指定されている場合、これは、Ｔｉｍｅｌｉｎｅがアクティブなときにプロパティがとるべき基本値を示す。この基本値は、まったくアニメーションがない場合か、またはアニメーションが暗黙の値(implied value)を必要とする場合に使用される。この基本値は、（エレメント上に直接設定される）ローカルな値から、継承から、スタイリングなどから、同等に由来することができる。例えば以下の例は、１０〜２０の値からのプロパティを動画化する。
【００９０】
【表９】
2006146924.tif 000011
【００９１】
上記のＬｅｎｇｔｈＡｎｉｍａｔｉｏｎがＦｒｏｍとＴｏの双方の値を指定するならば、基本値（ＳｅｔｔｅｒＴｉｍｅｌｉｎｅ．Ｖａｌｕｅ）は無視されるであろうという点に留意されたい。
【００９２】
一実装形態では、ターゲットは、ＳｔｏｒｙｂｏａｒｄｓプロパティのホストのＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔと同じツリー内で、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔへの参照である必要がある。ＰｒｏｐｅｒｔｙＰａｔｈの第１のコンポーネントは、依存プロパティに裏付けられたプロパティ(dependency property-backed property)である必要がある。例えばＷｉｎｄｏｗ．ＷｉｎｄｏｗＡｕｔｏＬｏｃａｔｉｏｎは、依存プロパティではないため、ストーリーボードには対応(storyboard-able)しない。
【００９３】
プロパティは、インデックス付きのコレクション内のアイテムとすることができる。ＳｅｔｔｅｒＴｉｍｅｌｉｎｅ上のＰｒｏｐｅｒｔｙＰａｔｈ（またはＰａｔｈ）属性は、オブジェクト内に「簡単に書き留める」ことができ、プロパティを添付した特別なケースは、丸かっこ内に挿入される。例えば「ブラシ」がＢｒｕｓｈである場合、次のプロパティパスは、線形階調ブラシ(linear gradient brush)のストップの色上のアルファにアクセスする。
【００９４】
brush.Stops[1].Color.A
【００９５】
その一方で、次のパスは、エレメント上のドッキングしている添付プロパティ(docking attached property)にアクセスする。
【００９６】
button.(DockPanel.Dock)
【００９７】
上記のプロパティパスは、添付されているプロパティのシンタックス内にあるが、実際には添付されているプロパティではないという点に留意されたい。すなわちＢａｃｋｇｒｏｕｎｄＰｒｏｐｅｒｔｙはＢｕｔｔｏｎ自体の上に定義され、共通言語ランタイムプロパティアクセッサはボタン上にあるが、これは、静的なＳｅｔ／Ｇｅｔメソッドアクセッサ(static set/get method accessor)を有する従来の添付されているプロパティとは対照的である。コンパイル時には、ＴａｒｇｅｔＩＤは特定のタイプに分解することができず、したがって「Ｂａｃｋｇｒｏｕｎｄ」プロパティがどのクラスに分解されるかが分からないため、これが必要となる。ＰｒｏｐｅｒｔｙＰａｔｈは、次のように定義される。
【００９８】
【表１０】
2006146924.tif 000012
【００９９】
複合プロパティパス、すなわち指定された複数のコンポーネントを有するパスについて、以降で説明する。
【０１００】
本発明の一態様によれば、タイミングツリーをエレメントツリーと統合することに加えて、ストーリーボードは、プロパティトリガおよびイベントトリガを使用して、それらのオペレーション（例えば開始、一時停止、検索、および停止のアクション）を制御することを可能にする。一般にプロパティトリガは、真や偽などの何らかの状態／値に対応し、その一方でイベントが始動する（したがって、偽の値を有さない）。例えばプロパティトリガは、マウスがエレメント上に存在していた場合は真の値を、エレメント上に存在していなかった場合は偽の値を有することができる。それぞれの真または偽の状態は、（１つまたは複数の）ストーリーボード内で別々に開始、停止、一時停止、および／または検索を行うために使用することができる。エレメントでのマウスのクリックなどのイベントは、始動し、したがって可変の状態を有さないが、同様にストーリーボードのオペレーションを制御することができる。このようにして、アニメーションは、ユーザと表示されたエレメントツリーの表示との対話を介して制御することができる。
【０１０１】
Ｔｒｉｇｇｅｒｓは、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ上のコレクションプロパティである。トリガは、ＳｅｔＡｃｔｉｏｎおよびＴｉｍｅｌｉｎｅＡｃｔｉｏｎを含むアクションを指定することができる。ＳｅｔＡｃｔｉｏｎは、プロパティの値を指定する。ＴｉｍｅｌｉｎｅＡｃｔｉｏｎは、Ｓｔｏｒｙｂｏａｒｄｓプロパティ内のタイムラインを操作する。
【０１０２】
例えば次の例は、ボタンにマウスオーバー上の特別なバックグラウンドを与える。
【０１０３】
【表１１】
2006146924.tif 000013
【０１０４】
ＴｒｉｇｇｅｒＡｃｔｉｏｎおよびＳｅｔＡｃｔｉｏｎは、次のように定義される。
【０１０５】
【表１２】
2006146924.tif 000014
【０１０６】
ＳｅｔＡｃｔｉｏｎは、ＳｅｔｔｅｒＴｉｍｅｌｉｎｅのパターンに従うが、Ｔｉｍｅｌｉｎｅではないという点に留意されたい。
【０１０７】
ＴｉｍｅｌｉｎｅＡｃｔｉｏｎは抽象型クラスであり、動詞メソッド(verb method)のそれぞれ用のサブクラスをＴｉｍｅｌｉｎｅＣｌｏｃｋ上に有する。
【０１０８】
【表１３】
2006146924.tif 000015
【０１０９】
ＴｉｍｅｌｉｎｅＡｃｔｉｏｎのＴａｒｇｅｔＩＤは文字列であり、この文字列はその時点の範囲内で分解され、タイムラインへと分解される。
【０１１０】
前述のように、プロパティトリガに加えてイベントトリガがあり、イベントトリガは、ホストエレメント上でそのイベントが始動したときにアクションを起こさせるイベントをそのソースとして受け取る。プロパティトリガとは異なり、イベントトリガは範囲が設定されておらず、オペレーションを実行し、そのオペレーションが自身のライフタイムを決定するという点に留意されたい。例えば１つのイベントは１つのタイムラインを開始することができ、そのタイムラインは、その存続期間が終了するまで、または別のイベントトリガなどによって停止されるまで、継続することができる。
【０１１１】
次の例は、トリガについて一般的に説明している。
【０１１２】
【表１４】
2006146924.tif 000016
【０１１３】
次のコード例は、関連付けられているタイムラインと共にイベントトリガを使用して、「オン」ボタンおよび「オフ」ボタンによって操作される、タイムラインによって制御されるコンテンツを示している。
【０１１４】
【表１５】
2006146924.tif 000017
【０１１５】
【表１６】
2006146924.tif 000018
【０１１６】
上記のコードは、独立したタイムラインではなく、シーケンシャルタイムラインを使用しているという点に留意されたい。シーケンシャルタイムラインは、その子タイムラインを順番にトリガさせる。例えば「ｂａｒ」（図示せず）に対応するいずれかのストーリーボードは、「ｆｏｏ」の完了によってトリガされ、いずれのプログラムによって指定された時間データによってもトリガされない。
【０１１７】
イベントトリガに加えて、プロパティ入力／終了トリガも、タイムラインをトリガする際に使用することができ、これについては、次の例に一般的に示されている。
【０１１８】
【表１７】
2006146924.tif 000019
【０１１９】
本発明の別の態様によれば、ストーリーボードおよびトリガは、スタイル付けすることができる（ただし、Ｓｔｏｒｙｂｏａｒｄｓそのものは依存プロパティではないため、完全に依存プロパティと同様にはならない）。すなわち前述のように、Ｓｔｙｌｅは作成者が、１つまたは複数のプロパティを表すデータをグループとしてまとめることを可能にし、次いでこれは、エレメントの対応するプロパティに１つのセットとして適用することができる。Ｓｔｙｌｅ内のこれらのプロパティは、動画化するか、および／またはトリガに対応することができる。例えば次のＳｔｙｌｅを適用すると、ページ上のボタンは、赤色と青色の間で順次切り替わるようにスタイル付けされる。
【０１２０】
【表１８】
2006146924.tif 000020
【０１２１】
理解できることだが、トリガ、タイムライン、ストーリーボード、マークアップ内でローカルに設定された値、およびその他を含む様々なメカニズムからエレメントプロパティの値を制御する機能によって、プロパティ値間の競合解消(conflict resolution)に対処して、何をプロパティ値とすべきかを決定する必要がある。例えばＳｔｏｒｙｂｏａｒｄｓプロパティの一部として設定された値は、エレメント上にローカルに設定された値に優先する。したがって、特定のＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ上のプロパティ値の優先順位があり、これは、最も優先順位が高いものとしてＴｒｉｇｇｅｒｓプロパティから開始する。複数のトリガが同じプロパティを設定しようと試みる場合、「最後に書かれたものが優先する」(last writer-wins rule)ルールが適用され、例えばマークアップのケースでは、マークアップ内で最後に発生したトリガがその値を適用されるという点に留意されたい。
【０１２２】
Ｓｔｏｒｙｂｏａｒｄｓプロパティは、もしも複数のストーリーボードセッターが同じプロパティを設定しようと試みた場合、やはり「最後に書かれたものが優先する」解決策を用いて、次に高い優先順位を有する。最後に書かれたものは、タイムラインツリーのデプスファーストウォーク(depth-first walk)を使用して解釈される。
【０１２３】
エレメント上にローカルに設定された値（例えば、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ．ＳｅｔＶａｌｕｅ）が次に来る。一般に、１つのスタイル内で同じ優先順位付けを有するＳｔｙｌｅｓが次に続き、すなわちＳｔｙｌｅが（同じレベルで競合が発生する場合は、やはり「最後に書かれたものが優先する」ルールを適用して）トリガされ、次いでＳｔｙｌｅ  Ｓｔｏｒｙｂｏａｒｄｓ、そしてＳｔｙｌｅのターゲットタイプ値と続く。
【０１２４】
複合プロパティパスの説明に移ると、セッターにとっては、ターゲット上のプロパティだけでなく、状況によってはターゲットのサブプロパティの１つを修正することも可能である。一般に複合プロパティは、まずエレメントにとってのプロパティ値が何であるかを確立し、次いでそのプロパティをアニメーション用に簡単に書き留めることによって処理される。例えば次のコードは、不透明度を動画化することによって、繰り返し徐々にフェードインおよびフェードアウトする赤色の長方形を例示している。
【０１２５】
【表１９】
2006146924.tif 000021
【０１２６】
一実装形態では、プロパティの第１のコンポーネントは、依存プロパティであることが必要とされる（例えば、上記の例で満たされているＢａｃｋｇｒｏｕｎｄ）。またこの依存プロパティのタイプは、Ｃｈａｎｇｅａｂｌｅであることが必要とされる。これは、コピーを複製する必要があるためであり、これによって、複製されたコピーを修正することができる（別法としては、ディープクローニングソリューション、またはテンプレートとして保持することが含まれる）。これは、スタイルおよびＳｔｏｒｙｂｏａｒｄｓ／Ｔｒｉｇｇｅｒｓが、やはり基本的に依存プロパティベースであるために機能するという点に留意されたい。Ｂｕｔｔｏｎ．Ｂａｃｋｇｒｏｕｎｄに関連するいかなるものが変化しても、すべてのバックグラウンド値が再計算される。
【０１２７】
したがって上記の例では、まずソリッドカラーブラシ(solid color brush)のコピーが作成され、長方形のインスタンス上に保存される。内部では、ローカルな値は、トリガが非アクティブ化した場合のために保存する必要があるため、実際には置換されない。次いでトリガが、あたかもスクリプトを再生するかのように、そのコピー上へと実行される。
【０１２８】
したがってプロパティ無効化アルゴリズムは、２つのパスで発生する。すなわち、まさにあたかも複合プロパティパスがないかのようにプロパティの無効化をトリガする第１のパスと、複合プロパティパスを有する（すなわち、その中のドットを有する）トリガが基本の依存プロパティのみを無効化する第２のパスとで発生する。
【０１２９】
動画化を行うために、プロパティ値計算アルゴリズムは、標準的な検索アルゴリズムを使用して基本プロパティ値を見つけ出し、その一方で、その上に複合プロパティパスを有するすべての値を無視する。次いでこのアルゴリズムは、複合プロパティパスを有する適用可能なトリガおよびセッターを見つけ出し、それらを上記の基本値に適用する。これによって、Ｃｈａｎｇｅａｂｌｅのコピーを作成することが必要となる場合があるが、これは、可能な場合は常に値を共有することによって最適化することができ、コピーは、必要な場合に作成されるだけである。
【０１３０】
複合プロパティパスを使用すると、プロパティ再構築の全体にわたって一貫したクロックを維持することが必要となる。例えば次のマークアップコードは、線形階調ブラシのバックグラウンドをストーリーボードから得るボタンを示しており、第１のストップは、１つのプロパティトリガ（マウスがボタン上に存在する場合）によって修正され、第２のストップは、第２のトリガ（ボタンが押された場合）によって修正される。
【０１３１】
【表２０】
2006146924.tif 000022
【０１３２】
この例では、最初のうちは、ボタンのバックグラウンドは、赤からグリーンへの線形階調である。マウスがボタン上へ移動すると、ブラシは、ピンクからグリーンへの線形階調へ変化する。マウスボタンを押すと、色は、マウスボタンが戻るときまで、ピンクからライトグリーンへ線形に変化し、マウスボタンが戻った時点で、バックグラウンドは、ピンクからグリーンへの線形階調ブラシへ戻る。マウスがボタンから離れると、バックグラウンドは、赤からグリーンへの線形階調へ戻る。ＳｅｔＡｃｔｉｏｎオブジェクト内に複合プロパティパスを有することが可能であるという点に留意されたい。
【０１３３】
このシナリオを適合させることへの第１のステップは、スタイルが適用される際に（すなわちＯｎＳｔｙｌｅＩｎｖａｌｉｄａｔｅｄの間に）スタイル付けされる親エレメント上にクロックを保存することである。これによって、プロパティが再構築される際に、同じクロックを再利用することができる。第２のステップは、プロパティパスのエラーを無視することである。すなわち最初のわずかな時間が過ぎて、タイムラインが非アクティブになると、ボタンはもはや線形階調ブラシを持たなくなる。この時点では、ストップを修正するトリガはもはや意味をなさなくなり、（データバインディングとの整合性から）暗黙のうちに無視される。
【０１３４】
Ｓｔｏｒｙｂｏａｒｄｓプロパティから、それぞれのＴｉｍｅｌｉｎｅツリーがＴｉｍｅｌｉｎｅＣｌｏｃｋツリーへとインスタンス化され、そのＳｔｏｒｙｂｏａｒｄｓをホストする同じＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ内に保存される。それぞれのセッタークロックおよびアニメーションクロックごとに、ターゲットとされているエレメントも、そのクロックへの参照を与えられる。それぞれのセッタークロックごとに、ターゲットとされているエレメントは、そのクロック上のアクティブ／非アクティブなイベントをリッスン(listen)し、それらのイベントのそれぞれは、プロパティの無効化をトリガする。それぞれのアニメーションクロックごとに、そのクロックは、そのプロパティ用のターゲットエレメントのアニメーションクロックリストへと組み込まれる。
【０１３５】
図７は、ストーリーボードがエレメント上に設定され処理される際のステップおよびデータ構造の更新の一例を提供する。一般に図７は、次の簡単なＳｅｔｔｅｒＴｉｍｅｌｉｎｅの例のためのオブジェクトおよび参照を示している。
【０１３６】
【表２１】
2006146924.tif 000023
【０１３７】
はじめに１つまたは複数のＴｉｍｅｌｉｎｅインスタンスが、例えばＤｏｃｋＰａｎｅｌ．Ｓｔｏｒｙｂｏａｒｄｓ．Ａｄｄ（  ｎｅｗ  ＳｅｔｔｅｒＴｉｍｅｌｉｎｅ（．．．）  ）をコールすることによって、ＤｏｃｋＰａｎｅｌのＳｔｏｒｙｂｏａｒｄｓプロパティに追加される。
【０１３８】
ＤｏｃｋＰａｎｅｌのＩＳｕｐｐｏｒｔＩｎｉｔｉａｌｉｚｅ．ＥｎｄＩｎｉｔがコールされると、（例えば、図７のＤｏｃｋＰａｎｅｌ７０２のＳｅｔｔｅｒＴｉｍｅｌｉｎｅ７００に対応する）ストーリーボードが処理され、これによって、Ｓｔｏｒｙｂｏａｒｄｓ内のタイムラインのそれぞれが、ＴｉｍｅｌｉｎｅＣｌｏｃｋ．ＣｒｅａｔｅＦｒｏｍＴｉｍｅｌｉｎｅを介して（例えば、図７で７０４という番号を付けられている）クロックへとインスタンス化され、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ（例えば、図７の長方形７０６）上に非公式(privately)に保存される。
【０１３９】
それぞれのセッターのターゲットは、影響を受ける依存プロパティに関連付けられているクロックへの参照を与えられる。このターゲットはまた、（Ｂｅｇｕｎ  ａｎｄ  Ｅｎｄｅｄ）などのクロック境界イベント(clock boundary event)上にリスナ(listener)を設定する。セッターの下のすべてのアニメーションが、（ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ．ＧｅｔＡｎｉｍａｔｉｏｎＣｌｏｃｋｓを介して）ターゲットのアニメーションリストに追加される。
【０１４０】
スタイルが、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ（それぞれのＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔ）上に設定されると、クロックは、Ｓｔｙｌｅ．Ｓｔｏｒｙｂｏａｒｄｓコレクション内のＴｉｍｅｌｉｎｅ階層からインスタンス化される。スタイル付けされた親をターゲットとするセッターのために、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔは、（関連する依存プロパティに関連付けられている）クロックへの参照を保持し、スタイル付けされた親は、そのクロック用のＢｅｇｕｎ／Ｅｎｄｅｄイベント上にリスナを設定する。Ｓｔｙｌｅ．ＶｉｓｕａｌＴｒｅｅ内のエレメントをターゲットとするセッターのために、ＦｒａｍｅｗｏｒｋＥｌｅｍｅｎｔがそのエレメントをインスタンス化すると、同様の参照／リスナが設定される。
【０１４１】
タイムラインが処理される際には、単一プロパティパス（ただ１つのコンポーネント）を有するセッタータイムラインが、複合パスを有するセッタータイムラインとは別個に維持されるという点に留意されたい。これによって、前述のように、プロパティ値に関する２つのパスの検索が可能となる。
【０１４２】
（結論）
上述の詳細な説明から分かるように、他の利点の中でもとりわけ、作成者が、アニメーション中に発生する様々なオペレーション（例えば、開始および停止の時期や、イベントに対する応答）を様々なタイムライン上において手動で同期させる必要性を解消するメカニズムがストーリーボードの形態で提供される。さらに、スタイリングシステム(styling system)を介してストーリーボードを利用できることは、それぞれのアニメーションまたはメディアエレメントに個々に適用しなければならないタイミング情報に対する必要性を解消する。
【０１４３】
本発明は、様々な修正および代替構成を受け入れることができるが、その特定の例示的な実施形態について図示し、詳細に前述した。しかし開示された特定の形態に本発明を限定する意図はなく、むしろ本発明の趣旨および範囲内に収まるすべての修正、代替構成、および均等物を含むことを意図していることが理解できるはずである。
【図面の簡単な説明】
【０１４４】
【図１】本発明を組み込むことができる典型的なコンピュータシステムを示すブロック図である。
【図２】本発明の一態様によるメディア統合レイヤアーキテクチャを示すブロック図である。
【図３】本発明の一態様による、ビジュアルＡＰＩレイヤとのインターフェースをとるためにマークアップ言語コードを解読するためのコンポーネントを示す図である。
【図４】本発明の一態様による、クロックプロパティデータを、進展データを測定する際に使用するためのインターバルに変換するためのタイミングコンポーネントを有する２つのレベルのアーキテクチャを全般的に示すブロック図である。
【図５】本発明の一態様による、クロックプロパティデータを、進展データを測定する際に使用するためのインターバルに変換するためのタイミングコンポーネントを有する２つのレベルのアーキテクチャを全般的に示すブロック図である。
【図６】本発明の一態様による、タイムラインをエレメントツリーのエレメントに関連付けるためにコード内でストーリーボードをどのように構成できるかを示す図である。
【図７】本発明の一態様による、ストーリーボードのタイムラインを表すためにインスタンス化されたクロックを含むデータ構造間の関係を示す図である。
【符号の説明】
【０１４５】
２００  メディア統合レイヤ
２０２  アプリケーション／制御／ＵＩコンポーネント
２０４  メディアＡＰＩ
２０６  高いレベルの合成およびアニメーションエンジン
２０８  タイミングおよびアニメーション
２１０  低いレベルの合成およびアニメーションエンジン
２１２  グラフィックスサブシステム（ソフトウェアおよびハードウェア）
２２０  印刷レベル
２２２  プリンタ
２２６  ターミナルサーバトランスポートレベル
２２８  １つまたは複数のリモートマシン
３０２  マークアップ
３０４  パーサ／トランスレータ
３０８  タイプコンバータ
３１０  他のプログラミング言語
３１２  リソースレベルデータ
３１４  エレメントツリー／プロパティシステム
３１６  ビジュアルＡＰＩ
４０２  タイミングツリー
４０４1  クロック1のプロパティ
４０４2  クロック2のプロパティ
４０４3  クロック3のプロパティ
４０６1  イベントリスト1
４０６2  イベントリスト2
４０６3  イベントリスト3
４０８  イベントリストジェネレータ（状態マシン）
４１０  インターバルジェネレータ
４１２1  インターバルリスト1
４１２2  インターバルリスト2
４１２3  インターバルリスト3
４１４  低いレベルの計算エンジン
５２０H  アニメーション関数サブシステム
５２０L  アニメーション関数サブシステム
５２４  クロック
【図１】
2006146924.tif 000024
【図２】
2006146924.tif 000025
【図３】
2006146924.tif 000026
【図４】
2006146924.tif 000027
【図５】
2006146924.tif 000028
【図６】
2006146924.tif 000029
【図７】
2006146924.tif 000030