用于在场景合成系统内计分多个基于时间的资产和事件的说明性置标的制作方法

文档序号:6436861阅读:177来源:国知局
专利名称:用于在场景合成系统内计分多个基于时间的资产和事件的说明性置标的制作方法
技术领域
本发明总体上涉及3D图形的模型化语言,并且尤其涉及媒体资产的时间操作。
背景技术
实时3D场景再现的常规模型化语言传统上集中在场景结构、几何结构、外部特征以及(在某种程度上)集中在动画和交互性方面。所集中的上述方面受到以下两个因素的影响。第一,已经使3D计算机图形应用适于用户驱动体验,从而其易于在对事件的再现响应的周围被构造。第二,这些应用的大多数采取“尽可能快地来再现它”的方式来进行场景更新,而较少注意时基的保真度。常规的模型化语言无法提供两个媒体资产之间的时间关系的准确性。例如,如果视频资产和音频资产将同时开始,那么这可以通过独立于其它资产为每个资产规定开始时间来实现。这允许开始时间稍有不同。希望由相同的字段来控制每个资产的开始时间,借此达到所述资产的准确同步。媒体资产包括音频媒体、视频媒体、动画、视听媒体、图像或事件。
由于把全部运动视频和高保真音频并入到混合再现场景中,所以希望递送像高质量电视的观看体验,同时支持观众交互性。希望提供被动的观看体验,它是一种更像电视而不是像网页的观看体验。
在说明性的置标语言中,要求达到所想要的输出的语义被隐含在所述输出的描述中。不必提供独立的过程(即,写入一脚本)来获得所想要的输出。说明性语言的一个例子是超级文本标记语言(HTML)。
在其它基于计算机的媒体中先前已经开发的用于计分动画和播放的各种方法,包括Macromedia Director和W3C的同步多媒体集成语言(SMIL)。然而,这些现有的计分系统不允许说明性的合成实时场景,其中动态地合成独立的分数并分级地分解,采用类似空间场景图表的方式来构造时间。例如构造彼此接近的时间块,或构造互相并行(同步)的时间块。常规的计分系统不允许说明性地对变化速率和方向进行分数求值,并且它们也不允许根据标准化“片断完成”输出来说明性地实现模计算策略,其适于迅速汇编并重新使用特性动画。

发明内容
给出了一种用于说明性置标的系统和方法,其允许对媒体资产进行时间操作。所述媒体资产可以是音频媒体、视频媒体、动画、视听媒体、图像或事件。使用本发明,可以通过采用按顺序、并行或任何其它时间组合播放一个以上媒体来形成媒体序列,其中把媒体插入到另一媒体。使用本发明所创建的媒体序列可以变为新的媒体序列的一部分,并且可以通过与所述新的媒体序列相关联的字段来控制播放所述媒体序列的速率。此外,使用本发明,可以插入媒体序列以便在第一媒体序列结束之前的固定时间开始播放,并且在这种情况下,可以改变第一媒体序列的长度,同时仍然保持距所述第一媒体序列结束的固定时间。


图1A示出了Blendo的基本体系结构。
图1B是举例说明了通过Blendo引擎的内容流的流程图。
图2A示出了在分数中媒体序列之间的时间关系。
图2B举例说明了要求预加载的图2的媒体序列的同步。
图3示出了在交互呈现的各个组成媒体之间的时间关系。
具体实施例方式
Blendo是本发明的示例性实施例,其允许对媒体资产进行时间操作,包括控制动画和可见的成像,并且向正在播放的媒体资产中插入音频媒体、视频媒体、动画和事件数据。图1A示出了基本的Blendo体系结构。在附录A中可以找到Blendo的全面描述。在Blendo体系结构的核心是核心运行时间(Core Runtime)模块10(以下称为核心),其向存在于系统11中的一组对象提供各种应用程序接口(以下为API)元件和对象模型。在正常操作期间,由分析器14把文件解析为原始场景图表16并将其传递到核心10,其中给出其对象的实例并且构建运行时间场景图表。所述对象可以是内置对象18、作者定义的对象20、本地对象24等等。所述对象使用一组可利用的管理器26来获得平台服务32。这些平台服务32包括事件处理、资产加载、媒体播放等等。所述对象使用再现层28来组成用于显示的中间或最终图像。使用页面集成组件30来把Blendo连接到外部环境,所述页面诸如HTML或XML页面。
Blendo根据该组管理器26来包含系统对象。每个管理器26提供了API集来控制系统11的某些方面。事件管理器26D提供对由用户输入发起的输入系统事件或环境事件的访问。加载管理器26C使加载Blendo文件和本地节点的实现便于进行。媒体管理器26E提供加载、控制并播放音频、图像和视频媒体资产的能力。再现管理器26G允许创建并管理用于再现场景的对象。场景管理器26A控制场景图表。表面管理器26F允许创建并管理表面,在所述表面上可以合成场景元素及其它资产。线程管理器26B赋予作者产生并控制线程以及在它们之间通信的能力。
图1B在流程图中举例说明了通过Blendo引擎的内容流的概念描述。在块50中,呈现从源开始,所述源包括被带进分析器14(图1A)的内容的文件或流34(图1A)。所述源可以采用像本地VRML的电文格式、本地二进制格式、基于XML的格式等等。不管所述源的格式如何,在块55中,把所述源转换为原始场景图表16(图1A)。所述原始场景图表16可以表示节点、字段及在所述内容中的其它对象,以及字段初始值。在所述流34中还可以包含对象原型的描述、外部原型索引以及路由声明。
原始场景图表16的顶层包括节点、顶层字段与函数、原型和包含在所述文件中的路由。除传统的元件之外,Blendo还允许在顶层包括其他字段和函数。使用这些来提供与外部环境的接口,诸如HTML页面。当把流34用作外部原型的内容时,它们还提供对象接口。
每个原始节点包括在其环境内初始化的字段的列表。每个原始字段条目包括该字段的名称、类型(如果给出的话)和数据值。每个数据值包括数字、字符串、原始节点和/或原始字段,其可以表示明确类型的字段值。
在块60中,从原始场景图表16(图1A)的顶层中提取所述原型,并且用于填充可由该场景访问的对象原型的数据库。
然后通过构建遍历来发送原始场景图表16。在该遍历期间,使用对象原型的数据库来构建每个对象(块65)。
在块70中,在流34中建立所述路由。随后在块75中,初始化在所述场景中的每个字段。这是通过把初始事件发送到对象的非默认字段来完成的。由于通过使用节点字段来实现场景图表结构,所以块75还构造了所述场景层级体系。使用按次序的遍历来激发事件。遇到的第一节点对所述节点中的字段进行计数。如果字段是节点,那么首先遍历该节点。
结果,初始化在树的特定分支上的节点。然后,把事件发送到具有所述节点字段初始值的节点字段。
在给定节点的字段已经被初始化之后,允许作者向原型对象增加初始化逻辑(块80)以便确保在调用时完全初始化该结点。上述块生成根场景。在块85中,把所述场景递送给为所述场景而创建的场景管理器26A(图1A)。在块90中,使用所述场景管理器26A来隐含地或在作者的控制下再现并执行特性处理。
由所述场景管理器26A再现的场景可以使用来自所述Blendo对象层级体系的对象来构造。附录B示出了对象层级体系并且提供了对Blendo中所述对象的详细说明。对象可以根据它们的双亲对象来导出某些它们的函数性,并且随后扩展或修改它们的函数性。在所述层级体系的基部是对象(Object)。根据所述对象导出的对象的两个主类是节点和字段。其中节点包含再现方法、其作为再现遍历的一部分而被调用。节点的数据属性被称作字段。在Blendo对象层级体系之间是称作定时对象(Timing Object)的对象类,下面将详细描述。如下代码部分是用于示例性的目的。应当注意,在每个代码部分中的行号仅仅表示该特定代码部分的行号,而不表示在原始源编码中的行号。
定时对象
定时对象包括TimeBase节点。其作为定时节点的字段被包括并且向所述媒体提供了定时语义的共同集。通过节点实例,所述TimeBase节点可以用于许多相关的媒体节点,以便确保时间同步。Blendo还提供了一组包括Score的节点,利用所述Score来排序媒体事件。所述Score是定时节点并且根据TimeBase来导出其定时。所述Score包括一列插入(Cue)节点,其在指定的时候发出事件。下面描述包括Score在内的各种定时对象。
TimedNode
如下代码部分举例说明了TimeNode节点。此后描述了在所述节点中的函数。
1)TimedNodeChildNode
2)field TimeBaseNode timeBase NULL
3)function Time getDuration()
4)function void updateStartTime(Time now,Time mediaTime,Float rate)
5)function void updateStopTime(Time now,Time mediaTime,Float rate)
6)function void updateMediaTime(Time now,Time mediaTime,Float rate)
}
该对象是由TimeBaseNode控制的所有节点的双亲节点。
在所述代码部分的行2中,TimeBase字段包含控制TimeBaseNode,当所述时基开始、停止或前进时,所述控制TimeBaseNode进行下列适当的函数调用。
在行3中,getDuration函数返回所述TimedNode的持续时间。如果不可利用的话,那么返回值-1。该函数一般会由导出的对象重写。
行4列出了updateStartTime函数。当调用时,该函数开始推进其事件或所控制的媒体,具有由mediaTime变量指定的开始偏移。所述updateStartTime函数一般会由导出的对象重写。
行5列出了updateStopTime函数,当其被调用时,停止推进其事件或所控制的媒体。该函数一般会由导出的对象重写。
在行6中,每当由TimeBaseNode更新mediaTime时,调用所述updateMediaTime函数。由导出的对象使用updateMediaTime函数来进一步的控制它们的媒体或发送额外的事件。
IntervalSensor
如下代码部分举例说明了IntervalSensor节点。此后描述了在所述节点中的字段。
1)IntervalSensorTimedNode
2)field Time cycleInterval 1
3)field Float fraction 0
4)field Float time 0
}
随着时间流逝,所述IntervalSensor节点产生事件。
可以为以下许多目的使用IntervalSensor节点,所述目的包括但不局限于
·驱动连续的仿真和动画;
·控制周期活动(例如,每分钟一次);
·开始诸如警报钟之类的单个出现的事件。
当调用IntervalSensor节点的updateStartTime()函数时,所述IntervalSensor节点发送最初片断和时间事件。每次调用updateMediaTime()时,该节点还发送一片断和时间事件。最后,当调用updateStopTime()函数时,发送最终片断和时间事件。
在代码部分的行2中,由作者设置cycleInterval字段以便确定按秒计量的时间长度,其使该片断从0前进到1。当调用所述getDuration()函数时返回该值。
行3列出了所述片断字段,其每当TimeBaseNode使用下列方程式(1)来运行时产生事件,所述公式为
fraction=max(min(mediaTime/cycleInterval,1),0) 等式(1)
行4列出了时间字段,其每当TimeBaseNode运行时产生事件。所述时间字段的值是当前挂钟时间。
计分(Score)
如下代码部分举例说明了Score节点。此后描述了在所述节点中的字段。
1)ScoreTimedNode
2)field MF CueNode cue[]
}
该对象为每个接收的updateStartTime()、updateMediaTime()、updateStopTime()调用来调用所述插入字段中的每个条目。对每个插入条目的调用返回当前累积的相对时间。向随后的插入条目传送该值以便允许计算插入条目之间的相对偏移。
在代码部分的行2中,所述插入字段保存将要随mediaTime的传递来调用的CueNode条目的列表。
TimeBaseNode
如下代码部分举例说明了TimeBaseNode节点。此后描述了在所述节点中的字段与函数。
1)TimeBaseNodeNode
2)rield Time mediaTime 0
3)function void evaluate(Time time)
4)function void addClient(TimedNode node)
5)function void removeClient(TimedNode node)
6)function Int32 getNumClients()
7)function TimedNode getClient(Int32 index)
}
所述对象是产生media Time的所有节点的双亲节点。
代码部分的行2列出了mediaTime字段,其每当mediaTime推进时产生事件。一般由导出的对象来控制MediaTime字段。
行3列出了求值函数,如果该TimeBaseNode登记了对接收时间事件感兴趣,那么当时间推进时、由所述场景管理器调用所述求值函数。
行4列出了addClient函数,当在其timeBase字段中设置该TimeBaseNode时,由每个TimedNode来调用所述addClient函数。当mediaTime开始、推进或停止时,调用在所述列表中的每个客户端。如果所传送的节点已经是客户端,那么该函数不执行任何操作。
行5列出了removeClient函数,当在其timeBase字段中不再设置该TimeBaseNode时,由每个TimedNode来调用所述removeClient函数。如果所传送的节点不在所述客户端列表中,那么该函数不执行任何操作。
行6列出了getNumClients函数,其返回当前在所述客户端列表中客户端的数目。
行7列出了getClient函数,其返回在所传送的索引的客户端。如果所述索引超出了范围,那么返回NULL值。
TimeBase
如下代码部分举例说明了TimeBase节点。此后描述了在所述节点中的字段。
  1)TimeBaseTimeBaseNode  2)field Bool loop false  3)field Time startTime 0  4)field Time playTime 0  5)field Time stopTime 0  6)field Time mediaStartTime 0  7)field Time mediaStopTime 0  8)field Float rate 1  9)field Time duration 0  10)field Bool enabled true  11)field Bool isActive false  }
该对象控制mediaTime的推进。TimeBase可以开始、停止并恢复该值,并且使mediaTime连续地循环。TimeBase允许mediaTime在其范围的子集内播放。
在代码部分的行2中,所述循环字段控制当mediaTime到达其行程的末尾时mediaTime是否重复其推进。
在行3中,所述startTime字段控制mediaTime何时开始推进。当到达采用挂钟时间的单位的startTime时,所述TimeBase开始运行。只要stopTime小于startTime,那么就为真。当这种情况出现时,如果速率大于或等于0,那么把mediaTime设置为mediaStartTime的值。如果mediaStartTime在范围之外(参见对于mediaStartTime有效范围的描述),那么把mediaTime设置为0。如果所述速率小于0,那么把mediaTime设置为mediaStopTime。如果mediaStopTime在范围之外,那么把mediaTime设置为持续时间。TimeBase继续运行直到到达stopTime,或到达mediaStopTime(mediaStartTime,如果速率小于0的话)为止。如果当TimeBase运行时接收了startTime事件,那么将其忽略。
在行4和5中,playTime字段与startTime同样运作,除了当激活时不复位mediaTime之外。所述playTime字段允许mediaTime在用stopTime停止TimeBase之后继续推进。如果playTime和startTime具有相同的值,那么startTime占主导地位。如果当TimeBase运行时接收了playTime事件,那么将该事件忽略。所述stopTime字段控制所述TimeBase何时停止。
在行6中,所述mediaStartTime字段设置mediaTime所要运行的媒体持续时间的子范围的开始。mediaStartTime的范围是从零到持续时间的结束(0..持续时间)。如果mediaStartTime字段的值在范围之外,那么在其位置用0代替。
在行7中,所述mediaStopTime字段设置mediaTime将要运行的媒体持续时间的子范围的结束。mediaStopTime的范围是从零到持续时间的结束(0..持续时间)。如果mediaStopTime的值在范围之外,那么在其位置用持续时间代替。
在行8中,速率字段允许mediaTime以不同于挂钟时间的每秒二分之一的速率运行。在所述速率字段中提供的速率被用作瞬时速率。当调用求值时,自从最后一次调用以来所消逝的时间乘以速率,并且把结果加到当前的mediaTime上。
在行9中,当该TimeBase的所有客户端的持续时间确定它们的持续时间时,所述持续时间字段产生事件。所述持续时间字段的值与具有最长持续时间的客户端相同。
在行10中,所述使能字段允许TimeBase操作。当使能字段变为假时,如果isActive原本为真那么现在变为假,并且mediaTime停止推进。当为假时,忽略startTime和playTime。当使能字段变为真时,求值startTime和playTime以便确定所述TimeBase是否应该开始运行。如果是的话,那么执行如在startTime或playTime中描述的行为。
行11列出了所述isActive字段,当TimeBase变为有效时其产生真事件,并且当timeBase变为无效时其产生假事件。
CueNode
如下代码片断举例说明了CueNode节点。此后描述了在所述节点中的字段。
  1)CueNodeNode  2)field Float offset-1  3)field Float delay 0  4)field Bool enabled true  5)field Int32 direction 0  6)function void updateStartTime(Time now,TimemediaTime,Float rate)  7)function void updateStopTime(Time now,TimemediaTime,Float rate)  8)function Time evaluate(Time accumulated,Time now,TimemediaTime,Float rate)  9)function Time getAccumulatedTime(Time accumulated)  10)function void fire(Time now,TimemediaTime)  }
此对象是在Score的插入列表中的所有对象的双亲对象。
在代码部分的行2中,偏移字段建立相对于序列开始的0相对偏移。例如,当输入mediaTime到达值5时,值5将激发CueNode。
在行3中,在CueNode激发之前,所述延迟字段建立相对延迟。如果偏移是不同于-1(默认)的值,那么根据偏移来测量该延迟。否则,根据先前CueNode的结束或如果这是第一个CueNode时根据0来测量延迟。例如,如果偏移具有值5并且延迟具有值2,那么当mediaTime到达7时该节点将激发。如果偏移具有值-1并且延迟具有值2,那么在先前CueNode结束之后,该节点将激发2秒。
在行4中,如果所述使能字段为假,那么禁止所述CueNode。所述CueNode就好象偏移和延迟是它们的默认值一样运作,并且不激发事件。如果其为真,那么所述CueNode正常运作。
在行5中,所述方向字段控制该节点如何相对于mediaTime的行程方向来激发。如果该字段是0,那么当到达该节点的偏移和/或延迟时,该节点激发,无论mediaTime是增加(速率大于零)还是降低(速率小于零)。如果方向字段小于零,那么只有当mediaTime降低,到达所述节点的偏移和/或延迟时,该节点才激发。如果方向字段大于零,那么只有当mediaTime增加,并且到达所述节点的偏移和/或延迟时,所述节点才激发。
行6列出了updateStartTime函数,当双亲Score接收updateStartTime()函数调用时,调用所述updateStartTime函数。顺次调用每个CueNode。
行7列出了updateStopTime函数,当双亲Score接收updateStopTime()函数调用时,调用所述updateStopTime函数。顺次调用每个CueNode。
行8列出了求值函数,当双亲Score接收updateMediaTime()函数调用时,调用所述求值函数。顺次调用每个CueNode并且所述CueNode必须返回其累积时间。例如,如果偏移是5并且延迟是2,那么所述CueNode往往返回值7。如果偏移是-1并且延迟是2,那么所述CueNode往往返回输入的累积时间加上2的值。这是默认的行为。某些CueNode(诸如IntervalCue)具有明确定义的持续时间以及激发时间。
在行9中,getAccumulatedTime函数使用与在evaluate()函数中相同的计算来返回累积时间。
行10列出了激发函数,当所述CueNode到达其激发时间时根据默认evaluate()函数来调用所述激发函数。所述激发函数预定被具体的导出对象重写以便执行适当的动作。
MediaCue
如下代码部分举例说明了MediaCue节点。此后描述了在所述节点中的字段。
1)MediaCueCueNode TimeBaseNode{
2)field Time mediaStartTime 0
3)field Time mediaStopTime 0
4)field Time duration 0
5)field Bool is Active false
}
当该CueNode有效时,所述对象控制推进mediaTime。MediaCue允许mediaTime在其范围的子集内播放。MediaCue在从由偏移和/或延迟字段确定的时间开始并且在由mediaStopTime减去mediaStartTime确定的时间长度内有效。MediaCue从getAccumulatedTime()返回的值是通过把默认函数添加到mediaStopTime并且减去mediaStartTime来计算的值。当有效时该节点产生mediaTime,这是通过减去已加上来自输入的mediaTime的mediaStartTime的激发时间来计算的。因此MediaCue以与所输入的mediaTime相同的速率推进mediaTime。
在代码部分的行2中,所述mediaStartTime字段设置mediaTime将要运行的媒体持续时间的子范围的开始。mediaStartTime的范围是从零到持续时间的结束(0..持续时间)。如果mediaStartTime字段的值在范围之外,那么在其位置利用0代替。
在行3中,所述mediaStopTime字段设置mediaTime运行的媒体持续时间的子范围的结束。mediaStopTime的范围是从零到持续时间的结束(0..持续时间)。如果mediaStopTime字段的值在范围之外,那么在其位置利用持续时间来代替。
在行4中,当该TimeBaseNode的所有客户端的持续时间确定它们的持续时间时,所述持续时间字段产生事件。所述持续时间字段的值与具有最长持续时间的客户端相同。
行5列出了isActive字段,当该节点变为有效时其产生真事件,并且当该节点变为无效时其产生假事件。
IntervalCue
如下代码部分举例说明了IntervalCue节点。此后描述了在所述节点中的字段。
1)IntervalCueCueNode
2)field Float period 1
3)field Bool rampUp true
4)field Float fraction 0
5)field Bool isActive false
}
随着时间推进,该对象从0到1(或者如果rampUp为假的话从1到0)发送片断事件。
代码片断的行2列出了周期字段,其在很短的时间内确定时间,在所述时间内片断有斜面地推进。
在行3中,如果rampUp字段为真(默认),那么所述片断在所述IntervalCue的持续时间内从0到1上升。如果为假,那么所述片断从1到0下降。如果mediaTime向后运行(当所述速率小于零时),那么当rampUp字段为真时,所述片断从1到0下降,而当所述rampUp字段为假时,所述片断从0到1上升。
在行4中,片断字段向evaluate()发送具有每个调用的事件,同时该节点有效。如果mediaTime前进,那么当该节点激发时片断开始输出,并且当该节点到达其加上周期的激发时间时停止输出。把片断值描述为
fraction=(mediaTime-firing time)*period等式(2)
行5列出了所述节点isActive字段,当所述节点变为有效时,其发送真事件,并且当所述节点变为无效时其发送假事件。如果mediaTime前进,那么当mediaTime变为大于或等于激发时间时所述节点变为有效。当mediaTime变为大于或等于加上周期的激发时间时,该节点变为无效。如果mediaTime后退,那么当mediaTime变为小于或等于加上周期的激发时间时,所述节点变为有效,而当mediaTime变为小于或等于激发时间时,所述节点变为无效。这些事件的激发受方向字段的影响。
FieldCue
如下代码部分举例说明了FieldCue节点。此后描述了在所述节点中的字段。
1)FieldCueCueNode
2)field Field cueValue NULL
3)field Field cueOut NULL
}
当FieldCue激发时,该对象把cueValue作为事件发送到cueOut。FieldCue允许设置并发出任何字段类型。可以把cueOut值路由至任意类型的字段。如果cueValue的当前类型与所述目的地字段不一致,那么可能出现未定义的结果。
在代码部分的行2中,所述cueValue字段是编辑的值,当该节点激发时发出所述值。
行3列出了cueOut字段,当该节点激发时,所述cueOut字段发送具有cueValue值的事件。
TimeCue
如列代码部分举例说明了TimeCue节点。此后描述了在所述节点中的字段。
1)TimeCueCueNode
2)field Time cueTime 0
}
当TimeCue激发时,该对象把当前挂钟时间作为事件发送到cueTime。
代码部分的行2列出了cueTime字段,当该节点激发时,所述cueTime字段发送具有当前挂钟时间的事件。
在实时场景合成的环境内计分结构使作者能够说明性地描述对于大多数的呈现和播放技术所进行的时间控制,包括图像动画书和图像合成动画(例如,动画的GIF);视频和音频剪辑和流;几何动画剪辑和流,诸如连锁转化、几何形态和结构坐标;再现参数的动画,诸如亮度、模糊度和透明度;调制用于行为、仿真或再生系统的参数;以及动态控制资产加载、事件路由和逻辑函数。例如,下列例子发出字符串以便预加载图像资产,然后使用该图像执行动画,接下来运行电影。还可以反向(即,首先所述电影向后播放,然后所述动画反向播放继而所述图像消失)运行在下面例子中的字符串。
  1)Score {  2) timeBase DEF TB TimeBase {}  3) cue [  4)Fieldcue {  5) cueValue String“ ”  6) cueOut TO ISURF.URL  7) direction -1  8)}  9)FieldCue{  10) cueValue String“imagel.png”  11) cueOut TO ISURF.url  12) direction -10<!-- SIPO <DP n="14"> --><dp n="d14"/>  13)}  14)IntervalCue{  15) delay 0.5  16) period 2.5#2.5 second animation  17) fraction TO PI.fraction  18)}  19)DEF MC MediaCue {  20) offset 2  21)}  22)Fieldcue {  23) cueValue String“ ”  24) cueOut TO ISURF.URL  25) direction 1  26) delay -0.5  27)}  28)Fieldcue {  29) cueValue String“imagel.png”  30) cueOut TO ISURF.URL  31) direction -1  32) delay -0.5  33)}  34) ]  35)}  36)#Slide out image  37)DEF T Transform {  38) children Shape {  39)appearance Appearance {  40) texture Texture {  41)surface DEF ISURF ImageSurface { }  42) }  43)}  44)geometry IndexedFaceSet {…}  45) }  46)}  47)DEF PI PositionInterpolator {  48) key ...  49) keyValue ...  50) value TO T.translation  51)}  52)#Movie  53)Shape {  54) appearance Appearance{  55)texture Texture{  56) surface MovieSurface {  57)url“myMovie.mpg”<!-- SIPO <DP n="15"> --><dp n="d15"/>  58)timeBase USE MC  59) }  60)}  61) }  62) geometry IndexedFaceSet {…}  63)}
在Score中所有Cue节点相对于所述TimeBase的媒体时间而激发,提供共同的索引并且借此产生在各个媒体资产的定时之间的准确关系。在上面的代码片断中,一旦TimeBase开始,那么FieldCue(行9)激发,这是因为该FieldCue具有默认偏移和延迟字段,借此使所述图像出现。代码部分的行35-45在表面上加载所述图像(200,图2A)。然后IntervalCue(行13)在0.5秒之后开始并且运行下一个2.5秒,从0到1增加其片断输出。IntervalCue的激发开始所述图像的动画(202,图2A)。行46-50控制所述动画。所述MediaCue(行18)在所述TimeBase开始之后2秒开始,或当IntervalCue是在其动画中的1.5秒时开始,借此开始所述电影。行51-62在所述表面上加载所述电影的第一帧(204,图2A)。当向后播放该字符串时,首先反向播放所述电影。然后在0.5秒之后所述图像出现,并且在所述图像出现0.5秒之后,所述动画开始。当动画停止并且在所述图像消失之后的0.5秒时,反向播放动画2.5秒。该例子示出了能够使Cue彼此偏离或与TimeBase偏离,并且示出了随后的Cue可以在上一个结束之前开始。
所述MediaCue为作者提供了同步工具。MediaCue是Cue的一种形式,其就像TimeBase一样运作。实际上,在可以使用TimeBase的地方都可以使用MediaCue,如上述例子所示。但是由于把MediaCue嵌入到事件的时间序列中,所以实现中有足够的信息来请求预加载资产。图2B举例说明了要求预加载的图2A的媒体序列的同步。例如,在上述例子中,如果所述实现方式得知电影用0.5秒来预加载并且立即播放,那么在TimeBase开始之后在等待(块210)1.5秒之后,在块215中,向MovieSurface发送“就绪”信号。一旦收到就绪信号,那么在块220中预加载所述电影。这往往给它所要求的0.5秒来预加载。在块225中,接收用于开始的请求,并且一旦收到该用于开始的请求,那么块230立即开始所述电影。
由于组合了TimeBase和Blendo中所允许的媒体排序能力,使创建具有复杂定时的呈现成为可能。图3示出了Blendo呈现的各个组件的时间关系。当观众选择新闻呈现时(360),所述观众看见其中他可以选择故事的屏幕(362)。当所述用户从五个故事S1、S2、S3、S4和S5的选择中选择故事S3时,显示具有广播员的欢迎屏幕(364)。在所述欢迎屏幕上,观众可以选择切换到另一故事(374),借此中止故事S3。在欢迎陈述之后,所述屏幕变换到故事位置(366)并且播放所选择的故事(368)。在此,所述观众可以转向下一故事、前一故事,回放当前故事或选择播放故事S3的扩展版本(370),或跳转到例如另一故事S5(372)。在播放所选择的故事之后,所述用户可以进行下一选择。
应当理解,本发明不依赖于Blendo,并且它可以是独立于Blendo的实施例的一部分。还应当理解本发明同样适用于2D场景再现和3D场景再现。
虽然已经描述了本发明的特定实施例,但是对那些本领域内技术人员来说显而易见的是在不脱离本发明的情况下可以在其更宽的方面进行改变和修改,并且因此,附加权利要求将属于本发明真正精神和范围内的所有这种改变和修改包含在其范围内。
权利要求
1.一种计算机可读介质包括计算机指令,用于
根据第一媒体序列、第二媒体序列来说明性地合成第一基于时间的媒体序列;其中所述第二媒体序列跟随所述第一媒体序列;并且
在相对于所述第一媒体序列的可变时间开始第二媒体序列。
2.如权利要求1所述的计算机可读介质,还包括用于说明性地控制动画的计算机指令。
3.如权利要求1所述的计算机可读介质,还包括用于合成所述第一基于时间的媒体序列的计算机指令,其中可以实时地把事件集成到第一基于时间序列中。
4.如权利要求1所述的计算机系统,还包括
用于接收第一速率值的计算机指令,所述第一速率值控制播放所述第一基于时间的媒体序列的速率,
其中依照第一速率值的变化来改变播放所述第一基于时间的媒体序列的速率。
5.如权利要求1所述的计算机系统,还包括
用于合成第二基于时间的媒体序列的计算机指令;以及
用于接收第二速率值的计算机指令,所述第二速率值控制播放所述第一基于时间的媒体序列的速率;其中
所述第一基于时间的媒体序列是所述第二基于时间的媒体序列的一部分,并且依照所述第二速率值的变化来改变播放所述第一基于时间的媒体序列的速率。
6.如权利要求1所述的计算机可读介质,还包括
用于接收第三速率值的计算机指令,所述第三速率值控制播放所述第二媒体序列的速率;
其中依照第三速率值的变化来改变播放所述第二媒体序列的速率。
7.如权利要求1所述的计算机可读介质,其中在第一媒体序列的持续时间的子集上播放所述第一媒体序列。
8.如权利要求1所述的计算机可读介质,其中根据播放第一媒体序列的结束来延迟第二媒体序列的播放。
9.如权利要求1所述的计算机可读介质,其中可以正向或反向播放所述基于时间的序列。
10.如权利要求1所述的计算机可读介质,还包括
用于说明性地接收指令以便在所述第二媒体序列的结束之前的时间开始第三媒体序列的计算机指令。
11.如权利要求10所述的计算机可读介质,其中第二媒体序列的长度不是由用户指定的。
12.如权利要求1所述的计算机可读介质,还包括
用于从在第一基于时间的媒体序列上的第一位置跳转到在所述第一基于时间的媒体序列上的第二位置的计算机指令。
13.如权利要求12所述的计算机可读介质,其中所述第一位置在所述第一媒体序列上并且所述第二位置在所述第二媒体序列上。
14.如权利要求1所述的计算机可读介质,其中所述计算机指令用于开始加载所述第二媒体序列。
15.如权利要求1所述的计算机可读介质,其中所述计算机指令用于开始播放所述第二媒体序列。
16.一种用于说明性地合成第一基于时间的序列的方法,所述方法包括
根据第一媒体序列和第二媒体序列来说明性地合成第一基于时间的序列;其中
把第二媒体序列说明性地插入所述第一媒体序列。
17.如权利要求16所述的方法,其中从由视频序列、音频序列、动画或视听序列组成的组中选择所述第一媒体序列和所述第二媒体序列。
18.如权利要求16所述的方法,其中预加载所述第一媒体序列和所述第二媒体序列以便每个预加载的媒体中可以立即开始。
19.如权利要求16所述的方法,其中在相对于所述第一媒体序列的可变时间插入第二媒体序列。
20.一种说明性地合成第一基于时间的媒体序列的方法,所述方法包括
播放第一媒体序列和第二媒体序列以便形成所述第一基于时间的媒体序列;
与所述第一基于时间序列并行地播放所述第三媒体。
21.如权利要求20所述的方法,还包括
说明性地控制可见图像,所述图像是从由第一媒体序列、第二媒体序列和第三媒体序列组成的组中选择的媒体序列的一部分。
22.如权利要求21所述的方法,还包括
提供第一速率值,所述第一速率值控制播放所述第一基于时间的媒体序列的速率;并且
依照第一速率值的变化来改变播放所述第一基于时间的媒体序列的速率。
23.如权利要求21所述的方法,还包括
提供与第二基于时间的媒体序列相关联的第二速率值,所述第二速率值控制播放所述第一基于时间的媒体序列的速率;并且
依照第二速率值的变化来改变播放所述第一基于时间的媒体序列的速率;其中
所述第一基于时间的媒体序列是所述第二基于时间的媒体序列的一部分。
24.如权利要求21所述的方法,还包括
提供第三速率值,所述第三速率值控制播放所述第二媒体序列的速率;并且
依照第三速率值的变化来改变播放所述第二媒体序列的速率。
25.如权利要求21所述的方法,还包括
在第一媒体序列的持续时间的子集中播放所述第一媒体序列。
26.如权利要求21所述的方法,还包括
根据播放第一媒体序列的结束来延迟播放第二媒体序列。
27.如权利要求21所述的方法,还包括
反向播放所述第一基于时间的媒体序列。
28.如权利要求21所述的方法,还包括
提供第四媒体序列;并且
在所述第三媒体序列结束之前加载所述第四媒体序列;其中
对于所述第三媒体序列的任何长度在所述第三媒体序列结束之前加载所述第四媒体序列。
29.如权利要求21所述的计算机系统,还包括
从在第一基于时间的媒体序列上的第一位置跳转到在所述第一基于时间的媒体序列上的第二位置。
30.如权利要求29所述的方法,其中所述第一位置在所述第一媒体序列上并且所述第二位置在所述第二媒体序列上。
31.一种合成媒体呈现的方法,所述方法包括
提供第一媒体序列和第二媒体序列;并且
提供至少一个用于定义定时关系的说明,所述说明定义了怎样在可变时间内使播放第一媒体序列和第二媒体序列中的每个相关。
32.如权利要求31所述的方法,其中从由视频序列、音频序列、动画或视听序列组成的组中选择所述第一媒体序列和所述第二媒体序列。
全文摘要
一种用于说明性置标的系统和方法,所述置标允许对媒体资产进行时间操作。所述媒体资产可以是音频媒体、视频媒体、动画、视听媒体、图像或事件。使用本发明,可以通过按顺序、并行或采用任何其它时间组合来播放一个以上媒体从而形成媒体序列,其中把媒体插入到另一媒体。使用本发明创建的媒体序列可以变为新的媒体序列的一部分,并且可以通过与所述新的媒体序列相关联的字段来控制播放所述媒体序列的速率(26E)。此外,使用本发明,可以插入媒体序列以便在第一媒体序列结束之前的固定时间开始播放,并且在这种情况下,可以改变第一媒体序列的长度,而仍然保持从所述第一媒体序列的末尾开始的所述固定时间。
文档编号G06F5/00GK1695111SQ0282984
公开日2005年11月9日 申请日期2002年11月1日 优先权日2002年11月1日
发明者C·F·马琳, R·K·梅亚斯, J·R·肯特, P·G·布劳维尔 申请人:索尼电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1