“MuseLive Documents Alpha 2.5.3”的版本间的差异
(未显示同一用户的25个中间版本) | |||
第7行: | 第7行: | ||
版本:Alpha 2.5.3 | 版本:Alpha 2.5.3 | ||
− | ''' | + | '''目前只支持加载固定文件:<code>project.mlp</code>(与主程序在同一目录)。''' |
− | + | 示例工程的演奏方式记录在<code>sample.txt</code>里。 | |
− | === | + | === 软件基本操作 === |
− | |||
− | |||
− | |||
− | + | 制作工程,打开程序,然后'''保证选中程序窗口''',按键即可触发音频。 | |
− | |||
− | |||
− | + | === 工程文件格式 === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ==== 概念解释 ==== | |
− | |||
− | + | ===== 工程 ===== | |
− | |||
− | |||
− | |||
− | |||
− | + | 默认是指程序所在目录下的<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> | ||
+ | |||
+ | ====== ChangePage ====== | ||
+ | |||
+ | 命令格式:<code>ChangePage=<page number></code> | ||
+ | |||
+ | : <code>page number</code>:目标页码(只允许为1~32)。 | ||
+ | |||
+ | : 举例:<code>ChangePage=12 #设置绑定的跳转页面为第12页</code> | ||
+ | |||
+ | ====== 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> | ||
+ | |||
+ | ====== Video ====== | ||
+ | |||
+ | 命令格式:<code>Video=<video path></code> | ||
+ | |||
+ | : <code>video path</code>:视频文件路径。 | ||
+ | |||
+ | : 举例:<code>Video="sample.mp4" #播放视频sample.mp4</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>Key="Value"</code>。''' | ||
+ | |||
+ | ==== 注释 ==== | ||
+ | |||
+ | ===== 整行注释 ===== | ||
+ | |||
+ | <code>#comment</code> | ||
+ | |||
+ | 第一个字符为井号的行会被注释掉。 | ||
+ | |||
+ | ===== 尾部注释 ===== | ||
+ | |||
+ | <code>abc #comment</code> | ||
+ | |||
+ | 以井号为开头的部分为注释,'''这种注释生效需要保证前面为空格'''。 | ||
+ | |||
+ | 所以上面的内容等效为<code>abc</code>。 | ||
+ | |||
+ | 以下内容不算尾部注释: | ||
+ | |||
+ | <code>abc#comment</code> | ||
+ | |||
+ | 因为井号前面缺少空格所以它会被完整识别为<code>abc#comment</code>。 | ||
=== 提问与解答 === | === 提问与解答 === | ||
− | # | + | # 问答一 |
+ | |||
#* Q:如何在工程未打开的情况下打开程序? | #* Q:如何在工程未打开的情况下打开程序? | ||
− | #* | + | |
+ | #* A:备份当前文件(修改文件名称,或移动到其他目录),然后写一个只有一行 ''Project.Version = "2.0"'' 的project.mlp。 |
2020年8月18日 (二) 19:38的最新版本
目录
MuseLive 文档
基本信息
版本:Alpha 2.5.3
目前只支持加载固定文件:project.mlp
(与主程序在同一目录)。
示例工程的演奏方式记录在sample.txt
里。
软件基本操作
制作工程,打开程序,然后保证选中程序窗口,按键即可触发音频。
工程文件格式
概念解释
工程
默认是指程序所在目录下的project.mlp
文件,目前支持这一个指定名称。
这是一个包含了一堆存放描述和指令的文件。
路径
这里的路径可以是相对路径也可以是绝对路径。
相对路径目前是指依程序所在路径为参考的,而不是工程所在路径。
基本命令原理
命令是如何在程序内部分割的
所有命令以行为基础,换行代表一个新的命令。
每一行中用空格或者水平制表符分隔开来形成许多部分,但是等号会是一个例外,无论它两边有多少空格(制表符)都会将两边的部分连成一个整体,仍为一个部分。
当然等号也有例外,一个每一对双引号中的第二个会结束一个部分,所以譬如"a"=b
的语句中的等号不会连接左侧,此语法不对。(实则懒得合并左侧)
注意:请不要使用Annoy+数字
形式的键名,如Annoy001
,这些都是保留键名!
匿名值与键/值
value1 key1=value2 #comment
value1
代表的是一个匿名值,一般是有程序按照既定顺序判定它的意义。
key1
代表一个键,它位于等号左边,用于描述右边的值的意义。
value2
代表一个值,它位于等号右边,被左边的键名赋予意义。
comment
是一个注释,它不会被程序加载,不对程序运行产生影响。
我们称一个类似value1
或者key1=value2
的部分为记录或参数。
块
blockHeader {
key1=value1
key2=value2
}
blockHeader
代表块的头部,它的作用是省略在大括号内的头部定义,所以它等效于:
blockHeader key1=value1
blockHeader key2=value2
注意:因为一对双引号两端只能为空格或者等号,所以譬如"a" {
的块头部的双引号与大括号之间不可缺少空格。(实则懒得多检测一个字符)
工程头部
第一行必须是Project.Version = "2.0"
这是工程版本声明。暂时不支持版本向下兼容,这个也许我会做的。(嗯,也许)
基本格式
页码 (+ 按键) + 一堆值...
参数列表
键名可选参数
键名可选参数是指键名可以省略的参数,但是它们必须在一行代码中按照顺序书写。
目前支持的键名可选参数有:Page
和Key
完整的一行记录应该是类似这样的代码:Page="*" Key="A" ...
因为Page
和Key
是键名可选参数,所以:上述代码可以等效于:
"*" Key="A" ...
或
Page="*" "A" ...
或
"*" "A" ...
其中第三种的会按照默认顺序:Page, Key
自动解析为Page="*" Key="A" ...
当然当Page
或Key
如果没有省略键名,它的位置是可以随意的:
"A" Page="*" ...
它会先搜索到Page
键然后搜索下一个键名可选参数Key
,而Key
的键名不存在,所以它会读取第一个匿名值作为Key
的值。
Page
命令格式:Page=<page number>
page number
是指当这行命令需要记录到的页码。
- 其的值可以为
*
、@
或者一个1到32的数字
。
@
是一个特殊的页码,它代表初始化页,所有加入到初始化页的命令将会在程序加载工程时被执行,执行完毕后就会被释放。当这行命令将写入初始化页后面的Key
应当省略,否则会报错。
*
代表全部页码即1到32,包含它在的命令将存到全部页面。
- 未来可能会支持范围页面以及混合页面,敬请期待。
Key
命令格式:Key=<key>
key
是指当这行命令将会被哪个按键触发。目前允许同页面中有同样Key
值的多个命令。未来可能还会支持混合按键值,敬请期待。
- 其的值为Winforms中
Keys
的枚举值的名称或者数值,具体可参阅Keys Enum (System.Windows.Forms) | Microsoft Docs。
一般原生参数
Audio
命令格式:Audio=<audio path>
audio path
:音频文件路径。
- 举例:
Audio="sample.wav" #播放音频sample.wav
ChangePage
命令格式:ChangePage=<page number>
page number
:目标页码(只允许为1~32)。
- 举例:
ChangePage=12 #设置绑定的跳转页面为第12页
StagePosition
命令格式:StagePosition=<x>,<y>
- 该参数仅对
Video
有效,默认值为0,0
。
- 请记得将该参数放在
Video
前,否侧会因为顺序性而失效。
- 舞台的坐标系是向右为x轴为正,向下为y轴正方向。
x
:舞台上的x坐标位置,这个值从0开始。
y
:舞台上的y坐标位置,这个值从0开始。
- 举例:
StageSeat="0,1" #设置video的显示坐标为0,1
Video
命令格式:Video=<video path>
video path
:视频文件路径。
- 举例:
Video="sample.mp4" #播放视频sample.mp4
更多的完整例子
- 例一:
"@" ChangePage=1
- 这个表示在初始化时跳转到页面1。
- 注意:由于页码
@
和*
是符号,为了不被识别为操作符,所以应该用双引号括起来。
- 例二:
"*" 56 Audio="./sample.wav"
- 这个表示在所有页面记录:当按下
A
时播放当前目录下的sample.wav
。
- 也就是说,当当前页码为1时,按下
A
就播放sample.wav
。
- 注意:
56
并不是A的ASCII值,而是WinForms中Keys.A
的枚举值。
- 例三:
3 "D1" Video="sample.mp4" Stage="2,1"
- 这个表示在页面3记录:当按下数字键1时在第3列第2行播放当前目录下的
sample.mp4
。
- 如果有空格为了表示为一个部分要加双引号,没有空格也可以加双引号。
字符串
注意:双引号只允许两种使用形式:"Key=Value"
或Key="Value"
。
注释
整行注释
#comment
第一个字符为井号的行会被注释掉。
尾部注释
abc #comment
以井号为开头的部分为注释,这种注释生效需要保证前面为空格。
所以上面的内容等效为abc
。
以下内容不算尾部注释:
abc#comment
因为井号前面缺少空格所以它会被完整识别为abc#comment
。
提问与解答
- 问答一
- Q:如何在工程未打开的情况下打开程序?
- A:备份当前文件(修改文件名称,或移动到其他目录),然后写一个只有一行 Project.Version = "2.0" 的project.mlp。