第十四章:Command Sequence的使用
对于Spruce科技公司而言,我们尽最大可能满足用户的需求,简化众多复杂的DVD视频规范的难度。因此,你可以用Spruce创作软件快速容易的创作出具有好莱坞风格的节目,而不需是个设计专家。
如果你是个高级用户,可以通过DVDMaestro里的Command Sequence功能获得更强大的性能。这些功能允许在你的节目里插入某些代码或“Command Sequence”,那样就可以直接与本地的DVD播放机上的机器码相互通信-从而创建有创意的高级复杂和强大交互性的作品。
Command Sequences概述
Command Sequences是可以合并到工程里的专用的脚本或代码。当用户播放创作的成品节目时,它可以访问本地DVD播放机上的机器码,从而增加新的功能,这样就可以实现DVD规范中的全部交互和娱乐功能。
Command Sequences 在工程管理器中以一个分离的图标形式出现,类似于DVD Movies或DVD Menus。你可以选择包括专用的Command Sequences在内的,Spruce创作软件界面上没有直接提供的功能。
Command Sequences 被作为对象出现在Connections(关系)窗口中,利用Connections窗口,你可以为Command Sequence关联任何一个源(First Play、Remote Key Action、Button Action等等) ,这时,Command Sequence将会执行写入的任何指令和事件。当该Command Sequence执行完成时,播放的节目将返回到DVD Movie、DVD Menu或其它的Command Sequence。
Command Sequence:实例1:
这个例子让我们假设制作一张售货员赠给顾客的推荐其产品的演示光盘(节目)。我们还同样假设已经创建了一个工程:包括三个DVD Movies的(含声道1、声道2、声道3),通过一个独立的DVD Menus来选择。如图:
一般来讲,我们设想DVD播放机是由售货员来控制的,但在售货员不在的那些时间里,我们希望DVD播放机自动地从头到尾循环播放这三个DVD Movies,以便在循环过程中使周围潜在的消费者可以看见产品的信息。
为了实现这个功能,我们可以为DVD Menu设置循环时间,如“1分钟”。这样,如果售货员在1分钟内不操作DVD播放机,则DVD播放机将执行一个循环时间(timeout)跳转,即将被链接到一个Command Sequence。
这里的Command Sequence,就是一个使DVD Movies自动按顺序轮回播放的脚本。(在下面的章节我们将评述如何加入和查看这些命令)。如前所述,这个Command Sequence以一个图标出现在工程管理器里的Command Sequence文件夹里,被标记为“ROTATEMOVIES”,还同样出现在关系窗口中作为对象被标记为“MAINMENU TIMEOUT”源。
如两个截图所显示,这个Command Sequence使用一个被称为GPRM0的存储单元。“GPRM”是每台DVD播放机里一个可写入的“暂存”存储单元,可以通过Command Sequence来使用它。(我们将在后面的章节看到许多类似的GPRMs)。当一个Command Sequence被保存进GPRM里时,就可以在稍后通过任何其它的Command Sequence 来读取。
在本例上方的图片,你可以看出每次DVD播放机调入这个脚本时,暂存存储器GPRM0就会增量,然后GPRM0的新值被重新检测,如果等于或大于“3”,它就“归零”。这样,GPRM0的动作如同一个简单计数器那样,间隔为“0, 1, 2, 0, 1, 2, 0, 1, 2”的循环。
其次的三条命令对三个可用到的DVD Movies之一的GPRM0和jump(跳转)值进行测试。因而每次Command Sequence 都会被执行,选取三个DVD Movies里的一个(声轨#1, 声轨#2,声轨 #3) 。当每个DVD Movies完成时,将返回到DVD Menu(MAINMENU)。 如果没有在DVD Menu高亮按钮区开启循环时间周期(限制),那么DVD播放机将向后跳转进Command Sequence中,这将开始播放下一个DVD Movie等等。
要看到这个动作,打开Navigation Simulator(导航模拟器)并观察高级区里的GRPM0增量,是否与前页的显示一致。
虽然这是个简单的例子,但它展示了如何方便的在DVD播放机的本地机器码中写入脚本,从而创建出具有非常先进的功能和交互性的节目。
创建&管理Command Sequences
创建&管理Command Sequences
下面我们将介绍在Spruce创作环境里创建和编辑Command Sequences 的界面。接着依据DVD视频规范制作一个技术方面的命令和可编程模式列表。最后,我们再举出另一个应用实例,用来分析实现一个更多细微高级选择模式的代码。
首先我们要先打开Command Sequence编辑器。
要创建一个新的Command Sequence并打开Command Sequence编辑器
1、默认情况下,在Project Manager里的每个工程都有一个Command Sequence文件夹。右键点击该文件夹图标,在出现的关联菜单中选择“ADD NEW COMMAND SEQUENCE”选项。
2、一个被标记为“SEQUENCE1”的默认Command Sequence出现在该文件夹里。
3、双击新建的“SEQUENCE1”,Command Sequence编辑器将被打开。
Command Sequence编辑,在任何命令开始前已经被添加。
DVDMaestro是创建和管理Command Sequence的全部环境。
要把一个命令添加到Command Sequence里并选择它的类型:
1、打开Command Sequence 编辑器,点击“Add”(添加)按钮(或使用键盘上的“Insert”键)。
2、一个命令将出现在命令列表的首行,最初它会被读作 NOP,或代表无操作。要完成任何有意义的工作,必需至少要有一个除了NOP以外的命令。
3、命令被选择后(它将以蓝色的高亮显示),在屏幕顶部再选择一个命令类型按钮(NOP, Set GPRM等等选其一),这会为当前命令设置命令类型。
DVD机器命令是通过一个一般命令类型、一个在类型里对命令的特别选择和一组参数来被定义的。
当你选择八个不同命令类型中的任何一个的时候,你会注意到Command Sequence 编辑器里的其它设置多数也将随之变化。我们将在后面的章节里解释命令类型和与它们相关的设置。
在Command Sequence里修改一个命令
创建命令后,我们可用很容易地修改、删除它,甚至可以改变它在Command Sequence里的顺序。
要对任何命令进行修改、删除或重排序:
1、打开Command Sequence 编辑器,在要变动的命令(在命令列表里)上单击,它将以蓝色高亮显示。
2、要修改命令,可以使用Command Sequence 编辑器创建任何更改,并且更改会立即直观反映出来。
-或-
要删除命令,点击“DELETE”按钮,或直接按压键盘上的“Delete”键。
-或-
要在Command Sequence内部对命令重排序,点击MOVE TO TOP、MOVE UP、MOVE DOWN或MOVE TO BOTTOM。
编辑一个现有的Command Sequence
每当你创建了一个Command Sequence,并点击了“OK”,就会在当前的工程里保存它,并可以在以后的时间里容易的对它进行编辑。
要编辑一个现有的Command Sequence:
1、双击它的图标(在Project Manager中的Command Sequence文件夹里),或右键单击它的图标在弹出的关联菜单里选择“EDIT COMMAND SEQUENCE ”选项。
2、Command Sequence 编辑器被打开,在这里你可以进行任何需要的更改。
Command Sequence的“Library(库)”功能
Command Sequence创建后,你想在另一个工程里使用相同的(类似的)Command Sequence。这使用Command Sequence编辑器里的保存和加载(Save and Load)“library”管理项可以很容易的实现。
要保存一个为其它工程使用的Command Sequence:
1、打开Command Sequence 编辑器,点击“SAVE(保存)”。
2、在打开的对话框中选择希望保存的路径。
3、点击“SAVE(保存)”,返回Command Sequence 编辑器。
要加载一个为其它工程使用的先前被保存的Command Sequence:
1、打开Command Sequence 编辑器,点击“LOAD(加载)”。
注意:要确认一个在Project Manager中的新的Command Sequence已被Command Sequence 编辑器打开。
2、在打开的对话框中查找希望加载的Command Sequence的库文件路径。
3、点击“OPEN”,返回Command Sequence 编辑器。
4、如果你要保存新加载的这个Command Sequence,并没有更多的修改时,点击Command Sequence 编辑器“OK”按钮。
5、如果你要在当前工程保存前编辑Command Sequence,首先变更你需要的任何改动,再点击Command Sequence 编辑器里的“OK”按钮。
你可以方便的重命名、删除和复制任一的Command Sequence。
要重命名、删除和复制一个Command Sequence:
1、在Command Sequence图标上右击。
2、从弹出的关联菜单中选择想要的操作(RENAME COMMAND SEQUENCE、DELETE COMMAND SEQUENCE或DUPLICATE COMMAND SEQUENCE)。
当创建Command Sequence的时候,一个有远见的规划是,命令类型和相关的Command Sequence 编辑设置要接近我们所使用的语言。
DVD命令集:Command Sequence的语言
DVD命令集:Command Sequence的语言
每台DVD播放机都包含一个微型控制器,它依据DVD规范来执行被定义的命令集。这个命令集是在Command Sequence里使用的,它同样也被所有的DVD播放设备所支持。
被定义的命令就是微处理器机器码的数值,用非常简单的命令就可以创建出我们需要的功能。如果你以前使用过微控制器或用汇编语言编过程,将会对命令和操作很熟悉。另外,将会出现一些新的概念和术语。因为用Command Sequence创作节目时很容易出错,因此在学习Command Sequence的时候,要谨慎小心。当然,对于完成的节目,你应该使用导航模拟器和利用DVD播放机对编辑的工程进行验证和测试,看是否达到预先计划的要求。
导入模式&输出语句
导入模式&输出语句
用Command Sequence工作包括:用不同种类的“input models(导入模式-触发一个Command Sequence运行的事件)”和“output statements(输出语句-一个用Command Sequence可以触发的事件)”来工作。
可向Command Sequence导入的三种类型:
□ 首先是“implicit input(绝对导入)”,它是以一个已建立好的Command Sequence导航关系为基础的。
□ 另一种是“memory model(内存模式)”,当一个已存储的值通过读取一个先前写入的一般用途寄存器(GPRM) 地址被恢复时发生。
□ 第三个是“system parameter model(系统参数模式)”,当一个系统参数寄存器 (SPRM) 读取到要求确定设备或DVD播放机当前状态的时候使用。
第一种方式明确绝对,并且以connections(关系)的标准协议为基础,详细说明参见第九章。让我们来看另外两种导入模式。
内存模式(Memory Model):GPRMs
DVD播放机有一组可写入的空间受限的内存寄存器(GPRMs),它通过Command Sequence进行多用途存取。那是8个可写的16位寄存器,被指定为GPRM 0到GPRM 7。每个寄存器可以像一个存储单元或一个计时器一样使用。
依据DVD视频规范的定义,每当插入光盘播放时,GPRMs都将被清除,它将不提供永久保存。
系统参数模式(System Parameter Model):SPRMs
每台DVD播放机通过一组系统参数寄存器(SPRMs)在内部操作。播放机的运行状态(所用的DVD Movies、何种语言等)可以通过机器命令访问寄存器SPRM状态来读出。
下面的列表描述了可以通过Command Sequence读出的系统参数:
SPRM 0 DVD Menu 语言参数;通过用户设置DVD播放机。
SPRM 1 当前音频流;通过用户或工程设置。
SPRM 2 当前覆盖(子图)流;通过用户或工程设置。
SPRM 3 当前角度;通过用户或工程设置。
SPRM 4 对当前的DVD Movie (Title)进行播放;通过play设置。
SPRM 5 对当前的DVD Movie (VTS)进行播放;通过play设置。
SPRM 6 当前PGC;通过play设置。
SPRM 7 当前DVD Movie 章节;通过play设置。
SPRM 8 当前选中的按钮;通过play上的“ viewer”设置。
SPRM 9 导航时间;通过工程设置,当时的时间长度。
SPRM 10 时间目标;当SPRM 9 满足时间长度时,DVD Movie 就播放。
SPRM 11 音频Karaoke混合;通过工程或通过播放设备来设置。
SPRM 12 当前的父母分级管理。
SPRM 13 父母分级管理结果。
SPRM 14 视频输出模式 (制式-PAL/NTSC, 宽高比-Aspect Ratio, 信箱模式-Letterbox Mode)
SPRM 15 可用的音频重放模式。
SPRM 16 初始音频语言。
SPRM 17 扩展语言码。
SPRM 18 初始字幕语言。
SPRM 19 扩展字幕码。
这些系统控制寄存器为Command Sequences提供了所有的状态信息和控制能力。
输出语句
Command Sequences可以用两种方法里的任一种影响光盘的播放:
● 播放可以跳转到一个新的位置上(DVD Movie或 DVD Menu任一一个)。
● 可以选中不同的音频流、字幕流或视频(摄像角度)。
这些是可用的唯一输出语句。
执行条件指令:
所有命令-除NOP命令外,都受执行条件指令限制。
执行条件指令是DVD播放机处理器在测试GPRM期间(比较“EQUAL-等于”、不等于等等),或在GPRM和 SPRM两者之间,或在存储单元和一个直接值之间的一种条件、制约。
结果决定了命令是否运行。
例如,在上面的图示中,我们选中了“EQUAL”,这意味着假如询问的命令被执行,也仅仅是假设,那么经过比较的被定义的条件就是正确的。在这种情况下,被假定的命令将一直执行,就象等于GPRM0的永远是它自己一样。
可用的执行条件比较操作是:
● Bitwise AND
● 等于
● 不等于
● 大于或等于 (>=)
● 大于(>)
● 小于或等于(<=)
● 小于(<)
GPRMs、SPRMs和直接值的目录来自同一个命令源域。
命令类型:
命令类型:
通过选择命令类型,你可用设置一个特殊命令来决定是否读写存储器、跳转到一个新的播放位置、读取播放状态、设置音频/字幕/视频(角度)流,并控制Command Sequences来执行。
有八种命令类型:
● NOP:不操作。
● Set GPRM:确定一个值并加载进存储器(更详细的见后面)。
● Jump(跳转):退出sequence并播放DVD Movie或其它对象(更详细的见后面)。
● Resume(恢复):继续播放当前的DVD Movie。
● Goto(转到):转到一个特殊的命令行(更详细的见后面)。
● Set GPRM Mode(设置GPRM模式):设置存储器或时间模式(更详细的见后面)。
● Set System Stream(设置系统流):设置音频、字幕和视频(角度)流(更详细的见后面)。
● Karaoke Mix Mode(Karaoke混合模式):为karaoke用户设置音频混合。
这些命令类型中的某些仅由一个单独的命令函数组成,虽然有些已经运行和实施。
让我们来看更多的关于复杂命令类型的细节。
set GPRM
set GPRM,确定一个值并加载它进存储器(而且用set GPRM模式将不会引起混乱),这个命令类型使用最广泛,当你选择了set GPRM时,下列附加命令函数就可用使用。
这个类型可选择1至11个不同的命令函数来操作。
每次操作会获得1到2个自变量并且操作结果总是被存储进1到8个可写的GPRM寄存器里。
要控制时常移动和无规则变化这样的单一自变量,自变量也许必需要由一个GPRM寄存器、一个SPRM播放控制寄存器、一个由程序员给定的直接值来提供。
要控制所需的两个自变量,除上述以外,另一个自变量可用通同一过GPRM已存储的结果来提供。
GPRM寄存器是16位宽的。所谓直接值(immediate),就是一个可键入的介于0到65535的数值。
□ Move (移动)— 源于GPRM, SPRM的值或直接值被移动进目标GPRM寄存器里。
□ Swap(交换) — 源于GPRM的值与目标GPRM寄存器里的内容相交换。这是向两个单元写入一次的唯一命令。
□ Add (相加) — 源于GPRM的值或直接值被增加并替换掉目标SPRM里的内容。
□ Subtract(相减) — 源于GPRM的值或直接值被来自目标SPRM里的内容减去并替换。
□ Multiply (相乘)— 源于GPRM的值或直接值被目标SPRM里的内容相乘并替换。
□ Divide(相除) — 源于GPRM的值或直接值被目标SPRM里的内容相除并替换。
□ Random(随机) — 依据一个源于GPRM或直接值并被确定了范围而产生的随机数字。这个值将替换目标GPRM里的内容。
□ Bitwise AND(逻辑“与”比较) — 源于GPRM, SPRM或直接值的16个单独比特与目标GPRM里相应的比特相比较,比特成组(值是1)则按有剩余的设置。比特不成组,不是1以上的就是另一个寄存器将被恢复(值为零)。
□ Bitwise OR(逻辑“或”比较) — 源于GPRM, SPRM或直接值的16个单独比特与目标GPRM里相应的比特相比较,比特成组(值是1),则按源与目标任一一方寄存器里有剩余的那个设置。
□ Exclusive OR(高级“与”) — 源于GPRM, SPRM或直接值的16个单独比特与目标GPRM里相应的比特相比较,比特成组(值是1),则源与目标寄存器双方不是1以内的就是另一个(但不是两者)被设置。比特成组,则源与目标寄存器双方要么全恢复,要么全不恢复(值是零)。
Jump(跳转)
Command Sequences一般通过(jump)跳转或(Resume)恢复命令来结束。跳转命令可以让光盘从一个指定的地方开始播放。
跳转命令的目标可以是一个DVD Movie、一个DVD Movie里的章节、一个DVD Menu (不论有没有设置高亮按钮)或一个Command Sequence。
一种针对DVD Movie的情况是,可以通过GPRM寄存器来随意控制选择章节。同样的选项可用于DVD Menu 按钮目标的选择。
Goto(转到)
Goto通过完成从当前行跳转到被定义行的号码来控制程序的执行。通常,Goto命令与执行条件测试相结合可以为sequence提供结果(决策)。
目标行的号码可以在命令中直接键入。
对执行条件的任选测试是被当做其它命令类型来定义的。
Set GPRM模式
这个命令类型-Set GPRM,不再是引起混乱的命令类型。如前面已介绍的,可以设置存储器或时间模式。
每个GPRM都可以在两个模式之一中操作:
□ 在寄存器模式下,寄存器控制一个记忆,一个写入到GPRM单元里的值可以在读取后不改变。
□ 在计数器模式下,每次加载进寄存器里的值自动减少1秒,直到数值为“零”为止。计数器模式是在(presentation)引导介绍(如第一播放-大金里称First PGC和菜单循环单元:译者注)里实现多时间定时功能的好方法。
设置系统流(Set System Stream)
这个命令类型让你通过转换音频、字幕、角度(视频)流,创建可以影响光盘播放的命令。
一个单一命令可以一次设置所有三个类型的流。单选框可以为流类型或按照命令设置的类型提供选择。
进行音频、字幕、角度(视频)流的设置。
对于其它的命令类型,可以执行一个可选择的执行条件测试。如果并且仅当如果,对被定义的条件感到满意,在这种情况下,设置系统流命令才会被执行。
Command Sequences:实例2
现在让我们更详细描述实例中的变化,对工程的描述参见本章的开始部分。
在这个例子里,我们已经用一个带有三个交替音频轨道的DVD Movies 代替了原先的三个DVD Movies,其中任何一个声道都可以被选择为活动音频流。这样安排为达到如下目的:
● 程序以主DVD菜单(MAINMENU)开始,允许直接选择音频流。
● 如果DVD菜单超过循环时间周期,在1秒钟间隔过后,观众将会在转场中依次看到高亮按钮区。
● 在任意一个高亮按钮完成翻转步骤以后,运动将会停止并且执行DVD Movies的播放。任意选中三个音频中的一个即是活动的音频流。
我们想要它达到的行为可以通过两个不同的Command Sequences来实现。第一个Command Sequences我们称作“SETLOOP”,它是每当我们希望跳转到菜单时(不管是第一播放、DVD Movie的结束、Menu Key 动作和其它任何情况),对第二次使用前所设定的初始值和称谓。
SetLoop Command Sequence 按下列各解释来理解:
命令列表中首位的两个命令向GPRM0和 GRPM1里插入一个为“0”的值,这两个存储单元将像两个循环计数器一样服务在被定义为“short loop”的三个高亮按钮区周围,并且计算出耗时超长的选择随机退出。
命令列表中的第三个命令将产生一个随机号码,被限定为10以内,这样,一个1-10之间的数将被存储进GPRM2中,这将会用来测试是否已经增加了足够的时间。
Sequence里的最后那个命令,跳转到MAINMENU(主菜单)。
在MAINMENU的播放控制标签里,我们已经设置了20秒的循环时间。如果在循环时间内,DVD Menu 的高亮区没有按钮被激活,循环时间将被关联到另一个被称为“ANIMATEMENU”的Command Sequence,并执行。那个Command Sequence 的简介如下:
如上图所示,在这个Command Sequence 里的第一个命令增加GPRM0,为“short loop”提供一个像计数器一样的服务。下一个,命令测试值。如果它已被延伸到如“4”一样高,值“1”则被放置在寄存器里。这样,一个小于“1”的值将不能被程序的其它部分看到。
第三个命令增加PGRM1,当我们增量完成并且准备播放DVD Movie时候,将随机计算出服务的决定。
第四个命令测试GPRM1是否达到GRPM2通过SetLoop储存的随机数值。如果是,那么程序就执行跳转到第6行来播放DVD Movie 的sequence。
如果条件“GPRM1等于GPRM2”不成立,那么程序立即跳转到AnimateMenu和由GPRM0里的值所确定的高亮按钮区。除了它在循环时间设置上以20秒替换1秒外,AnimateMenu就是mainmenu的一个精确副本。AnimateMenu的循环时间也连接到AnimateMenu,所以当循环开始的时候,DVD播放机将回返到从前的每一时刻,直到这个sequence满足“GPRM1等于GPRM2”条件为止。
当GPRM1的增量值增加到GPRM2里的随机值时,命令就在第6行依据GPRM0里的数值来设置音频流。其次的两个命令对循环计数器进行初始化(多余的,如同SetLoop所做的一样),并且最后一个命令跳跃出所选的DVD Movie音频轨的播放。
Command Sequences小结
Command Sequences提供一个强大的方法,把交互性和其它功能添加到你的DVD节目中。在这章里,我们已经学习了如何创建一个基本Command Sequences,如何键入命令和设置某些参数,并且我们已经通过两个例子分析了如何在DVD工程里使用Command Sequences。
以上所介绍的这些,仅是Command Sequences功能的粗浅体现,并且你会发现,深入的钻研它们,会使你的DVD创作能力大幅提高。
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=4862489