|
|
第22行: |
第22行: |
| | | |
| [[MuseLive_Documents_Alpha_2.5.5_Project|MuseLive Documents Alpha 2.5.5 文档:工程文件格式]] | | [[MuseLive_Documents_Alpha_2.5.5_Project|MuseLive Documents Alpha 2.5.5 文档:工程文件格式]] |
− |
| |
− | ==== 概念解释 ====
| |
− |
| |
− | ===== 工程 =====
| |
− |
| |
− | 默认是指程序所在目录下的<code>project.mlp</code>文件,目前支持这一个指定名称。
| |
− |
| |
− | 这是一个包含了一堆存放描述和指令的文件。
| |
− |
| |
− | ===== 路径 =====
| |
− |
| |
− | 这里的路径可以是相对路径也可以是绝对路径。
| |
− |
| |
− | 相对路径目前是指依程序所在路径为参考的,而不是工程所在路径。
| |
− |
| |
− | ===== 基本命令原理 =====
| |
− |
| |
− | ====== 命令是如何在程序内部分割的 ======
| |
− |
| |
− | 所有命令以'''行'''为基础,换行代表一个新的'''命令'''。
| |
− |
| |
− | 每一行中用空格或者水平制表符分隔开来形成许多'''部分''',但是等号会是一个'''例外''',无论它两边有多少空格(制表符)都会将两边的部分连成一个整体,仍为一个'''部分'''。
| |
− |
| |
− | 当然等号也有'''例外''',一个每一对双引号中的第二个会结束一个'''部分''',所以譬如<code>"a"=b</code>的语句中的等号不会连接左侧,此语法不对。(实则懒得合并左侧)
| |
− |
| |
− | '''注意:请不要使用<code>Annoy+数字</code>形式的键名,如<code>Annoy001</code>,这些都是保留键名!'''
| |
− |
| |
− | '''对于某些键的值是多个的,一般会用逗号隔开,请尽量不要在这些值之间插入不必要的空格,避免发生程序对这个值不可识别。'''
| |
− |
| |
− | ====== 匿名值与键/值 ======
| |
− |
| |
− | <code>value1 key1=value2 #comment</code>
| |
− |
| |
− | <code>value1</code>代表的是一个'''匿名值''',一般是有程序按照既定顺序判定它的意义。
| |
− |
| |
− | <code>key1</code>代表一个'''键''',它位于等号左边,用于描述右边的值的意义。
| |
− |
| |
− | <code>value2</code>代表一个'''值''',它位于等号右边,被左边的键名赋予意义。
| |
− |
| |
− | <code>comment</code>是一个'''注释''',它不会被程序加载,不对程序运行产生影响。
| |
− |
| |
− | 我们称一个类似<code>value1</code>或者<code>key1=value2</code>的部分为'''记录'''或'''参数'''。
| |
− |
| |
− | ====== 块 ======
| |
− |
| |
− | <code>
| |
− | blockHeader {
| |
− |
| |
− | key1=value1
| |
− |
| |
− | key2=value2
| |
− |
| |
− | }
| |
− | </code>
| |
− |
| |
− | <code>blockHeader</code>代表'''块的头部''',它的作用是省略在大括号内的头部定义,所以它等效于:
| |
− |
| |
− | <code>
| |
− | blockHeader key1=value1
| |
− |
| |
− | blockHeader key2=value2
| |
− | </code>
| |
− |
| |
− | '''注意:因为一对双引号两端只能为空格或者等号,所以譬如<code>"a" {</code>的块头部的双引号与大括号之间不可缺少空格。'''(实则懒得多检测一个字符)
| |
− |
| |
− | ==== 工程头部 ====
| |
− |
| |
− | '''第一行必须是<code>Project.Version = "2.0"</code>这是工程版本声明。'''暂时不支持版本向下兼容,这个也许我会做的。(嗯,也许)
| |
− |
| |
− | ==== 基本格式 ====
| |
− |
| |
− | <code>页码 (+ 按键) + 一堆值...</code>
| |
− |
| |
− | ==== 参数列表 ====
| |
− |
| |
− | ===== 键名可选参数 =====
| |
− |
| |
− | '''键名可选参数'''是指键名可以省略的参数,但是它们必须在一行代码中按照'''顺序'''书写。
| |
− |
| |
− | 目前支持的键名可选参数有:<code>Page</code>和<code>Key</code>
| |
− |
| |
− | 完整的一行记录应该是类似这样的代码:<code>Page="*" Key="A" ...</code>
| |
− |
| |
− | 因为<code>Page</code>和<code>Key</code>是键名可选参数,所以:上述代码可以等效于:
| |
− |
| |
− | <code>"*" Key="A" ...</code>
| |
− |
| |
− | 或
| |
− |
| |
− | <code>Page="*" "A" ...</code>
| |
− |
| |
− | 或
| |
− |
| |
− | <code>"*" "A" ...</code>
| |
− |
| |
− | 其中第三种的会按照'''默认顺序:<code>Page, Key</code>'''自动解析为<code>Page="*" Key="A" ...</code>
| |
− |
| |
− | 当然当<code>Page</code>或<code>Key</code>如果没有省略键名,它的位置是可以随意的:
| |
− |
| |
− | <code>"A" Page="*" ...</code>
| |
− |
| |
− | 它会先搜索到<code>Page</code>键然后搜索下一个键名可选参数<code>Key</code>,而<code>Key</code>的键名不存在,所以它会读取第一个匿名值作为<code>Key</code>的值。
| |
− |
| |
− | ====== Page ======
| |
− |
| |
− | 命令格式:<code>Page=<page number></code>
| |
− |
| |
− | : <code>page number</code>是指当这行命令需要记录到的页码。
| |
− |
| |
− | : 其的值可以为<code>*</code>、<code>@</code>或者一个<code>1到32的数字</code>。
| |
− |
| |
− | :: <code>@</code>是一个特殊的页码,它代表初'''始化页''',所有加入到初始化页的命令将会在程序加载工程时被执行,执行完毕后就会被释放。'''当这行命令将写入初始化页后面的<code>Key</code>应当省略,否则会报错'''。
| |
− |
| |
− | :: <code>*</code>代表全部页码即1到32,包含它在的命令将存到全部页面。
| |
− |
| |
− | : 未来可能会支持范围页面以及混合页面,敬请期待。
| |
− |
| |
− | ====== Key ======
| |
− |
| |
− | 命令格式:<code>Key=<key></code>
| |
− |
| |
− | : <code>key</code>是指当这行命令将会被哪个按键触发。目前允许同页面中有同样<code>Key</code>值的多个命令。未来可能还会支持混合按键值,敬请期待。
| |
− |
| |
− | : 其的值为Winforms中<code>Keys</code>的枚举值的名称或者数值,具体可参阅[https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.keys?view=netcore-3.1#fields Keys Enum (System.Windows.Forms) | Microsoft Docs]。
| |
− |
| |
− | ===== 一般原生参数 =====
| |
− |
| |
− | ====== Audio ======
| |
− |
| |
− | 命令格式:<code>Audio=<audio path></code>
| |
− |
| |
− | : <code>audio path</code>:音频文件路径。
| |
− |
| |
− | : 举例:<code>Audio="sample.wav" #播放音频sample.wav</code>
| |
− |
| |
− | ====== Background ======
| |
− |
| |
− | 命令格式:<code>Background=<type>,<argument></code>
| |
− |
| |
− | : 初始化时的默认值是<code>Background=SolidColor,0,32,64</code>。
| |
− |
| |
− | : <code>type</code>:背景类型,包含<code>Image</code>、<code>SolidColor</code>。
| |
− |
| |
− | :: <code>Image</code>:表示背景为图片。
| |
− |
| |
− | :: <code>SolidColor</code>:表示背景为纯色。
| |
− |
| |
− | : <code>argument</code>:
| |
− |
| |
− | :: 当<code>type</code>为<code>Image</code>时:<code><argument></code>为<code><image path>,<image layout>,<buffer></code>。
| |
− |
| |
− | ::: <code>image path</code>:图片路径,'''暂不支持透明图片'''。
| |
− |
| |
− | ::: <code>image layout</code>:表示图片的布局方式,包含<code>None</code>、<code>Tile</code>、<code>Center</code>、<code>Stretch</code>、<code>Zoom</code>。
| |
− |
| |
− | :::: <code>None</code>或<code>0</code>:保持原大小,与舞台左上角对齐。
| |
− |
| |
− | :::: <code>Tile</code>或<code>1</code>:平铺。
| |
− |
| |
− | :::: <code>Center</code>或<code>2</code>:居中。
| |
− |
| |
− | :::: <code>Stretch</code>或<code>3</code>:拉伸。
| |
− |
| |
− | :::: <code>Zoom</code>或<code>4</code>:自适应(保持比例放大到最大(保证图片不超出舞台边界))。
| |
− |
| |
− | :::: 其的值为Winforms中<code>ImageLayout</code>的枚举值的名称或者数值,具体可参阅[https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.imagelayout?view=netcore-3.1#fields ImageLayout Enum (System.Windows.Forms) | Microsoft Docs]。
| |
− |
| |
− | ::: <code>buffer</code>:是否缓存,可填入一个bool值,即<code>true</code>或<code>false</code>,如果开启缓存则会在加载时写入内存,如果关闭则会在调用到该命令时才会读取文件。如果图片较大,开启可以减少延迟,但是关闭的话可以优化内存用量。
| |
− |
| |
− | :: 当<code>type</code>为<code>SolidColor</code>时:<code><argument></code>为<code><red>,<blue>,<green></code>。
| |
− |
| |
− | ::: <code>red</code>:RBG值中的红色值,该值应当为是0~255。
| |
− |
| |
− | ::: <code>blue</code>:RBG值中的蓝色值,该值应当为是0~255。
| |
− |
| |
− | ::: <code>green</code>:RBG值中的绿色值,该值应当为是0~255。
| |
− |
| |
− | : 举例:<code>"Background=sample.png,Zoom"</code> 或 <code>"Background=sample.png,4"</code> 把背景图片设置为<code>sample.png</code>,并自适应大小。
| |
− |
| |
− | : <code>"Background=SolidColor,255,255,255"</code> 则是设置背景为纯白色。
| |
− |
| |
− | : 未来可能会支持多个背景重叠(不过这功能应该是通过一个单独的多图层渲染器实现,而不是调用多个参数),敬请期待。
| |
− |
| |
− | ====== ChangePage ======
| |
− |
| |
− | 命令格式:<code>ChangePage=<page number></code>
| |
− |
| |
− | : <code>page number</code>:目标页码(只允许为1~32)。
| |
− |
| |
− | : 举例:<code>ChangePage=12 #设置绑定的跳转页面为第12页</code>
| |
− |
| |
− | ====== SetStage ======
| |
− |
| |
− | 命令格式:<code>SetStage=<column>,<row></code>
| |
− |
| |
− | : <code>column</code>:列数,即是舞台的宽度(能竖着放几排视频位置),'''该值是必须至少为1的整数'''。
| |
− |
| |
− | : <code>row</code>:行数,即是舞台的高度(能横着放几排视频位置),'''该值是必须至少为1的整数'''。
| |
− |
| |
− | ====== StagePosition ======
| |
− |
| |
− | 命令格式:<code>StagePosition=<x>,<y></code>
| |
− |
| |
− | : 该参数仅对<code>Video</code>有效,'''默认值为<code>0,0</code>'''。
| |
− |
| |
− | : '''请记得将该参数放在<code>Video</code>前,否侧会因为顺序性而失效'''。
| |
− |
| |
− | : 舞台的坐标系是向右为x轴为正,向下为y轴正方向。
| |
− |
| |
− | : <code>x</code>:舞台上的x坐标位置,'''这个值从0开始'''。
| |
− |
| |
− | : <code>y</code>:舞台上的y坐标位置,'''这个值从0开始'''。
| |
− |
| |
− | : 举例:<code>StageSeat="0,1" #设置video的显示坐标为0,1</code>
| |
− |
| |
− | ====== Stage_FullScreen ======
| |
− |
| |
− | 命令格式:<code>Stage_FullScreen=<value></code>
| |
− |
| |
− | : <code>value</code>:可填入一个bool值,即<code>true</code>或<code>false</code>,<code>true</code>表示使舞台全屏化,<code>false</code>表示使舞台恢复。
| |
− |
| |
− | : 举例:<code>Stage_FullScreen="true" #使舞台全屏化</code>
| |
− |
| |
− | ====== Video ======
| |
− |
| |
− | 命令格式:<code>Video=<video path></code>
| |
− |
| |
− | : <code>video path</code>:视频文件路径。
| |
− |
| |
− | : 举例:<code>Video="sample.mp4" #播放视频sample.mp4</code>
| |
− |
| |
− | ===== 仅用于初始化参数 =====
| |
− |
| |
− | ===== Alias =====
| |
− |
| |
− | 命令格式:<code>Alias=<command>,<alias></code>
| |
− |
| |
− | : 给命令取一个别名。不可以取已有参数的名称,别名不是宏定义,仅可用于替代参数名。
| |
− |
| |
− | : <code>command</code>:原命令名称或者其别名。
| |
− |
| |
− | : <code>alias</code>:期望的别名。
| |
− |
| |
− | : 举例:<code>Alias="Audio,a" #设置Audio的别名为a,之后可以用a代替Audio,像这样:a="example.wav"</code>
| |
− |
| |
− | ==== 更多的完整例子 ====
| |
− |
| |
− | # 例一:
| |
− |
| |
− | : <code>"@" ChangePage=1</code>
| |
− |
| |
− | : 这个表示在初始化时跳转到页面1。
| |
− |
| |
− | : '''注意:由于页码<code>@</code>和<code>*</code>是符号,为了不被识别为操作符,所以应该用双引号括起来。'''
| |
− |
| |
− | # 例二:
| |
− |
| |
− | : <code>"*" 56 Audio="./sample.wav"</code>
| |
− |
| |
− | : 这个表示在所有页面记录:当按下<code>A</code>时播放当前目录下的<code>sample.wav</code>。
| |
− |
| |
− | : 也就是说,当当前页码为1时,按下<code>A</code>就播放<code>sample.wav</code>。
| |
− |
| |
− | : '''注意:<code>56</code>并不是A的ASCII值,而是WinForms中<code>Keys.A</code>的枚举值。'''
| |
− |
| |
− | # 例三:
| |
− |
| |
− | : <code>3 "D1" Video="sample.mp4" Stage="2,1"</code>
| |
− |
| |
− | : 这个表示在页面3记录:当按下数字键1时在第3列第2行播放当前目录下的<code>sample.mp4</code>。
| |
− |
| |
− | : '''如果有空格为了表示为一个部分要加双引号,没有空格也可以加双引号。'''
| |
− |
| |
− | ==== 字符串 ====
| |
− |
| |
− | '''注意:双引号只允许两种使用形式:<code>"Key=Value"</code>(即<code>"string"</code>)或<code>Key="Value"</code>。'''
| |
− |
| |
− | ==== 注释 ====
| |
− |
| |
− | ===== 整行注释 =====
| |
− |
| |
− | <code>#comment</code>
| |
− |
| |
− | 第一个字符为井号的行会被注释掉。
| |
− |
| |
− | ===== 尾部注释 =====
| |
− |
| |
− | <code>abc #comment</code>
| |
− |
| |
− | 以井号为开头的部分为注释,'''这种注释生效需要保证前面为空格'''。
| |
− |
| |
− | 所以上面的内容等效为<code>abc</code>。
| |
− |
| |
− | 以下内容不算尾部注释:
| |
− |
| |
− | <code>abc#comment</code>
| |
− |
| |
− | 因为井号前面缺少空格所以它会被完整识别为<code>abc#comment</code>。
| |
| | | |
| === 提问与解答 === | | === 提问与解答 === |