这是可以使用我们的多个免费在线工作站之一(例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器)在 OnWorks 免费托管服务提供商中运行的命令蠓
程序:
您的姓名
midge - 从音乐的文本描述生成midi文件
概要
蠓 [选项] [文件名]
商品描述
蠓 从音乐的文本描述生成类型 1 的 MIDI 文件。 蠓 需要它的
来自标准输入的输入,除非 文件名 已指定。
配置
-h or - 帮帮我
显示帮助文本。
- 版 or - 保修单 或者 - 关于
显示版本和许可证信息。
-v or --详细
将详细输出打印到标准输出。
-d or -调试
将调试输出打印到标准输出(自动设置详细模式)。
-q or - 安静的
安静的。 没有标准输出。
-o 文件 or --输出文件 文件
MIDI输出到 文件. 否则到 a.out.mid
-c or - 查看
只检查输入; 没有midi输出。
-u or --展开循环
在解析之前展开所有重复块并将展开的源代码保存到
新文件 (*.long.mg)。 如果需要,应自动设置。
-U or --不展开保存
不要将展开的源保存到文件中。
-R or --无重置
不要在曲目开头插入“重置所有控制器”事件。
-t BPM or - 速度 BPM
将速度设置为 BPM 每分钟节拍次数,覆盖输入文件中设置的值。
-b 步骤 or --弯曲步骤 步骤
为简单的弯音语法设置每四分音符的步数。
--不安全
不要使用 Safe.pm 来运行 Perl 代码 %评估 块。
-s 数 or - 种子 数
使用 数 作为随机数生成器的种子。
-S [规模 [根]] or --显示比例 [规模 [根]]
列出笔记 规模 启动 根。 如果 根 省略 c4 使用。 如果 规模 is
省略,显示支持的规模列表。
-I 径 or - 包括 径
地址 径 包括路径。 可以指定多次或 径 可以是一个列表
用冒号或逗号分隔。
INPUT 语言
播放 E 音阶的示例源文件。
================开始文件======================
# 这一行是注释
@头 { # 必须正好有 1 个@head 部分
# 设置时间签名
$time_sig 4/4
# 在 BPM 中设置节奏
$节奏 120
} #@head部分结束
@身体 { # 必须正好有 1 个@body 部分
# 在频道 1 上开始音乐曲目
# 多个音轨可以使用同一个频道
@渠道 1{
# 将补丁设置为电贝司
$补丁 34
# 笔记。 请参阅下面的说明。
/l4/e3 # 第三个八度的四分音符 e
f+ # f 尖相同的八度音程相同的长度
# 使用`-' 用于平面
g+ ab # 剩余的音符
c+4 d+ e # c 处的八度变化
} # 曲目结束
} #@body部分结束
========================结束文件====================
更多示例包含在存档的 examples/ 目录中。
在下面的, 是必需参数,[name] 是可选参数。
笔记。
注释的格式为:[/选项/]<姓名>[+|-][八度]
/选项/ 部分可以包含以下内容:
l[分子:]
将音符的长度设置为 (分子 或一)除以 分母. IE。 l4 = 四分之一
音符,l1 = 全音符,l3:4 = 3/4 音符(并列 3 个四分音符)。 一个大写的`L' 也许
用于将其与“1”区分开来。
r
设置重复音符的次数。 例如
/l8r16 /
使音符持续时间为 1/8 并重复音符 16 次。
a
设置音符的力度(起音)
d
设置音符的音符关闭速度(衰减)
z[+|-] [%]
将音符偏移 数 midi 点击。 正值演奏晚音符和负值
价值观发挥它早。 如果 数 后跟一个`%´ 字符它被视为一个百分比
当前音符长度。 偏移值是 不能 由后续笔记继承。
Z[+|-] [%]
如上`z´ 选项,但使用随机值。 如果 数 是消极的还是积极的
(加号 必须),一个介于零和 数 用来。 如果没有标志,一个
正负之间的值 数 用来。
偏移选项不适用于 r重复音符选项,但同样的效果可以
使用一个 %重复 块。
除非前面有休止符,否则音符不能向后偏移(即提前弹奏)。 到
解决这个问题我已经添加了 $缩短 关键字,如下所述。 也可以看看 $取消量化.
姓名 是笔记的名称,即。 [ag] 必须.
+ 尖锐。
- 平面。
八度 是midi 八度,即。 [1-11]。 虽然大多数midi软件使用0表示最低
八度,我使用了 1 来与 MIDI 通道和乐器名称保持一致
两者都从 1 开始计数。
如果没有指定,长度、八度、起音和衰减都继承自之前的
注意。
在鼓轨道中,可以使用别名代替音符名称。 例如,要获得一个
打开嗨帽,而不是`f+3'你可以使用`呵呵'。 有关完整列表,请参阅 README.drums
别名。
休息。
休息写成注释`r', 和 /选项/ 与笔记相同,但只有
使用的长度和重复选项。 长度值从音符继承到休止符,反之亦然
反之亦然。
酒吧。
管道符号 (`|') 可用于表示条形。 不检查条的长度-
这只是为了允许更多可读的源文件。 条可以通过附加一个编号
数字到管道符号。 它们可以用下划线分隔,但不能用空格分隔。
简单的条形示例: | cdef | 加布
编号条形示例:|1 cdef |2 gabc
|_1 cdef |_2 gabc
可以使用以下命令检查条形的一致性 $bar_strict 中的关键字 @头
部分。 这会给出错误或警告,除非所有轨道都具有相同的条数和
编号条同时出现在每个轨道中:
$bar_strict 警告 # 打印不一致条的警告消息。
$bar_strict 错误 # 以不一致的柱线的错误消息退出。
顶级关键字。
@头 { 内容 }
必须只有一个 @头 部分。 见下面的描述 内容.
@身体 { 内容 }
必须只有一个 @身体 部分。 见下面的描述 内容.
中的关键字 @头 部分。
$time_sig
b 值必须是 4、8、16、32、64 之一。
$节奏
t 是 BPM 中的节奏。
以上皆是 $time_sig 和 $节奏 也允许在 @channel 块中(如下所述)。
$ 标题
将歌曲的标题设置为 标题。 如果 标题 包含空格,它必须在 double 内
引号。
$分辨率
将每四分音符的 MIDI 点击次数设置为 n. 默认值为 96。
中的关键字 @身体 部分。
%定义 {笔记}
定义一个序列 笔记,将其分配给 姓名 在音乐曲目中被召回。 已定义
使用序列包括:
~[/转置/]
在轨道内包含序列 姓名, 转置 转 半音。 之前
定义的序列可用于后续 %定义 块。 例如:
%定义 a_riff { a3 a c4 d }
%定义 d_riff { d4 dfg }
%定义 主重复段{ ~一个_riff ~d_riff }
虽然我们可以通过调换第一个即兴演奏来获得相同的结果
第二:
%定义 a_riff { a3 a c4 d }
%定义 主重复段{ ~一个_riff ~一个_riff/ 5 / }
定义 块也可能包含重复块、弯曲块和 $volume/patch/reverb 等。
@渠道 [名称] { 内容 }
在频道上开始一个 MIDI 曲目 数, 可选择将仪器名称设置为 姓名。 如果
姓名 包含空格,它必须在双引号内。
内容 可以包括音符、休止符、先前定义的序列以及以下内容
关键字:
$time_sig
更改歌曲的拍号(影响所有曲目)。 这 b 值必须是其中之一
4 8,16,32,64。
$节奏
更改歌曲速度(影响所有曲目)。 t 在 BPM 中。
$补丁 [[bank_LSB,]bank_MSB,]
将此通道的补丁编号设置为 数 or 姓名。 哪里 数 是从 1 到 128 和
姓名 是 README.patches 中定义的别名。 可选地选择银行号码 银行_MSB.
可选地选择银行 LSB 编号 银行_LSB (用于外接MIDI键盘)。 每个值
必须在 1-128 的范围内。
$银行 [最低标准,]
选择银行号码 MSB. 可选择设置 LSB 值(用于外部 MIDI
键盘)到 LSB. 这两个值都必须在 1-128 的范围内。
$长度 [n:]
设置默认音符长度。 该值的指定格式与注释选项中的格式相同。
$缩短
将每个音符缩短 数 midi 咔哒声,以允许音符向后偏移的空间。
$取消量化 [+|-] [%]
对每个音符应用随机偏移量。 数 具有相同的含义 Z 注意选项
以上。
$八度
将默认八度设置为 数
$体积
将曲目音量设置为 数
$攻击
将音符的起音设置为 数
$衰减
将音符的衰减设置为 数
$混响
将混响深度设置为 数 在当前频道。
$合唱团
将合唱深度设置为 数 在当前频道。
$盘
将平移值设置为 数. 0 是左边 127 是右边。
音量、起音、衰减、混响、合唱和声相值必须是 0 到 127 之间的整数。
它们也可以指定为一个范围(例如`8-64'),在这种情况下,随机值在
范围被使用。
%pan_all { 注意值 ... }
为每个后续实例设置平移值 注意 在当前曲目中。 这是
主要用于平移架子鼓,但也可用于其他轨道。 折扣值 可
一个整数或一个范围(例如`8-64')。 多种的 注意 折扣值 允许配对。 如果两个音符
使用不同的 pan_all 值同时播放任何事情都可能发生。
要使用范围影响通道中的每个音符,请使用 `*' 或`任何' 为了 注意。 该
/r4/重复音符的方法不适用于此选项,但效果相同
可以使用重复块来实现。
$ marker
添加一个标记事件 文本 因为它的内容。 如果 文本 包含必须用引号引起来的空格
使用双引号字符。
%重复 {笔记}
重复新密码 笔记 数 倍。 笔记 可以包括音符、休止符、预定义的序列和其他
%重复 块。
%弯曲 { 事件 ... }
播放 注意 并以multiple描述的方式移动音轮 活动s,其中有
以下格式:
[n:] <+|->
哪里 n 和 d 指定从音符开始或从前一个事件开始的时间,在
与音符长度相同的格式,以及 折扣值 是将音符弯曲的量(加号
或减号是必需的)。 默认的音轮范围为 +/- 2 个半音一个值
32 等于一个半音。 请注意,弯曲量是相对的。 最大值
累积的 弯曲量正负64。
例如以下内容:
%弯曲 a3 { 4+32 4-32 2+0 }
弹奏 3/1 音符的 a4 音符,向上弯曲 1/4 的整个音调,然后返回到 a3 并
保持 1/2 音符。
$弯曲范围
将音轮范围更改为 +/- 数. 这设置了最大的上下弯曲,所以如果
它设置为 4,弯曲值 64 将向上弯曲 4 个半音,-64 将向下弯曲 4
半音。 大多数 MIDI 设备的默认范围是 2 个半音。
$间距
将音轮值设置为 VAL. 这可以与单独的注释结合使用
并记下事件(参见下面的“同时注释”)以创建复杂的弯曲
效果。 不像 %弯曲 上面的语法,这确实 不能 将音轮重置为空档
位置 (64)
可以使用以下语法创建更简单的弯音:
/l8/e4=>g4=>e4
这在一个持续时间内以线性步长从 e4 向上弯曲到 g4 并返回到 e4
八分音符。 默认情况下,每个四分音符持续时间有 16 个步骤(这里有 8 个步骤)
例如),但可以使用“-b”命令行开关设置不同的值。 任何数字
可以使用的音符,但第一个必须有一个长度值,每个必须
有一个八度值。
%选择 [时间] { 加权项 ... }
其中 time 是格式 [n:] 的长度值与长度选项中使用的相同,
省略了“l”。
If 次 未指定:
选一个 项目 从列表中,其中每个 项目 可以是音符、休止符或预定义的即兴演奏,并且
每个项目都有一个 权重 这定义了它被选择的可能性。 例如:
%选择 { 2 a3 4 c5 3 e4 1 g3 }
给 a3 20% 的机会,c5 - 40% ; e4 - 30% 和 g3 - 10% 每项 必须 有一个权重。
另请参阅下面的比例。
if 次 指定:
选择多个 项目s 从列表到长度 次。 如果所有 项目s 太长了
结束即兴演奏 次,余数充满了休止符。 使用时选择
这样,每个音符或休止符都必须有一个长度值,并且使用的任何预定义的即兴演奏都必须
有一个固定的长度(即第一个音符必须有一个长度值),以及
整个 riff 必须以与音符相同的格式在选择块中指定。 为了
例:
%define riff_1 { /l2/a3 /l4/b c4 } # riff 是 1 小节长
%选择 4:1 { # 选择 4 个小节
1 /l8/d4 3 /l8/e4 2 /l4/g4 1 /l1/~riff_1
}
If 次 is 0 or - 然后midge 寻找如下形式的块:
韵律 { n[:d] ... }
它被视为一系列音符长度值,其音高是从
列表。 其他标记通过,因此您可以插入特定的音符,预定义的即兴演奏
或休息。 块中以下划线开头的任何标记都将通过
删除了下划线。 有关示例,请参见 examples/tutorial/choose_scale.mg。
指定音符/权重列表的另一种方法是使用 规模 关键词:
规模 次要 /l8/g4-6 [重量...]
这将选择从第 4 到第 6 个八度(即 g4 到 g6)的 G 小调音阶。 长度值
如果您使用的是节奏块,则没有必要。 如果 -6 省略了一个八度音程
用过的。
权重块按顺序指定音符权重。 如果省略所有权重
平等的。 要输入一个音符,使用 0 的权重,但有 必须 成为每个音符的权重
如果块存在。
-S 开关可用于在音阶或支持的音阶列表中显示音符。
%链 {
开始
注1 [重量注...]
...
节奏[重量长度...] or 节奏 { 长度 ... } }
定义一个“链”结构,其中每个音符都有一个加权的音符列表,可以
跟着它。 从所有使用的音符中随机挑选一个起点,或指定
此 开始 关键字,然后从适当的列表中选择后续的音符,直到
总长度 次.
韵律 关键字有两种形式: 使用方括号`[]',一个带权重的笔记列表
可以定义长度,将随机选择。 使用大括号“{}”,一个列表
可以定义将按顺序使用的长度值(必要时重复)。 到
只播放一次节奏块,设置 次 至 0 or -. 在这种情况下,节奏
块的解析方式与上述相同 %选择 时间设置为零。 这
关键词 时 可以用作同义词 韵律.
开始 关键字指定使用链时开始的音符。 如果 开始 is
省略,开始音符是随机选择的。
另一种定义注释的方法 链 block 是使用内置比例尺之一。 然后
权重以矩阵的形式指定,每个“来自”注释都有一行(一个
对于音阶的每个音符)和每个“到”音符的列。 这种形式的一个例子可以
在文件 examples/tutorial/chain_scale.mg 中找到
要使用选择或链块,必须使用 unroll-loops 选项编译文件
(当找到一个选择块或链块时它会自动设置)。 此选项保存
在一个新文件中展开源代码,所以如果它产生特别好的输出,你有一个
您可以对其进行其他更改而不会丢失生成的曲目的精确副本。
请注意,选择和链块不能在 %define 内或在另一个选择或
链块。
%评估 { Perl 代码}
运行 Perl 代码块并用 Perl 返回的值替换 %eval 块
码。
%评估 - { Perl 代码}
运行一段 Perl 代码而不读取返回值。
Perl 代码使用 Safe 模块(如果存在)运行,包括 :base_core、:base_math 和
:base_mem 允许。 如果 Safe.pm 不可用或需要更多权限,则 --unsafe
选项导致蠓在它自己的 perl 进程中运行 %eval 块。
在源中的任何点都允许使用关键字。
%包括
包括以下内容 文件 就好像它们是在源代码中的那个时候写的一样
文件中。 必须 在源文件中独占一行。
同时注。
同时演奏音符的最灵活方式是使用单独的音轨(您可以使用
相同的通道/补丁),或使用单独的音符打开和音符关闭事件(见下文)。
但是,有一种更简单的方法,但有一些限制。 例如: ( c e g ) 会玩
c、e 和 g 同时发出 C 和弦。 所有同时的长度
注释与第一个相同(由它自己的长度值或
从前一个音符、休止符或 $length 声明继承而来。
使用它来制作和弦的一种方法如下:
%定义 未成年人 { ( c e- g ) } # 将小调定义为 c-小调
%定义 主要 { ( c e g ) } # 将专业定义为 c 专业
%定义 7日 { ( c e g b- ) } # 将 7th 定义为 c-7th
然后您可以在您的音乐曲目中使用:
$length 4 $octave 4 # 设置默认长度和八度
~主要 # 演奏 c 大调
~次要/9/ # 演奏一个小调
~7日/5/ # 播放 f-7
为了使和弦听起来被弹奏, 弹 可以使用关键字:
$弹奏 5
这会将后续和弦中每个音符之间的间隔设置为 5 次 midi 咔嗒声。
要在一个轨道上创建复杂的同步音符模式,请将音符和音符分开
可以使用关闭事件。 这些以与普通音符相同的方式指定,但带有 +
预先为注意和一个 - 预先准备好笔记。 长度和重复选项不能
使用。 以这种方式输入的音符长度由放置休止符或其他
音符开和音符关事件之间的音符。 例如:
+c4/l4/r +呃 +克/升/升 -c -e -g
弹奏并保持 c4,在 1/4 个音符弹奏并保持 e4 之后,在另一个 1/4 个音符弹奏之后
并保持 g4,在进一步的 1/2 音符后释放所有三个。
连音。
虽然可以通过选择合适的音符长度来创建连音,但它们也可以
使用更传统的方式编写 %连音 关键词:
%连音 n:d { 注释... }
扮演 n 空间中的注释 d. 笔记 可以包含@channel 块中允许的任何内容。
然后音符值会自动更改以创建连音。 例如:
%tuplet 5:3 { /l8/e4 fgfe }
在三个空间中演奏五个八分音符。 连音可以嵌套到任何深度。 看
examples/tutorial/tuplet.mg 示例。 蠓 不能 检查音乐的长度
连音块内部是正确的。
按键
如果您想将您的 MIDI 文件导入符号编辑器,您将需要设置密钥。
这是通过以下方式完成的:
$键 [+|-][米]
其中 姓名 是 ag,+|- 是尖锐和平坦的,而 m 是次要的。 如果整块留在
您可以在@head 部分中设置相同的键,否则它可以出现在
@channel 部分,并将影响所有曲目。
如果您习惯于常规的乐谱并希望音符自动变尖或变平
根据密钥,使用 $key_strict 关键字代替。 要获得自然的音符,请使用 =
符号,例如在 G 中, f= 发挥f自然。 这 $key_strict 关键字只能用于
@head 部分。 仍然可以使用常规更改密钥 $键 关键词。
$控制
设置控制器编号 NUM 至 VAL.
$rpn [数字-msb,] [,val-lsb]
设置rpn控制器 NUM 至 VAL
$nrpn [数字-msb,] [,val-lsb]
设置 nrpn 控制器 NUM 至 VAL
%逐字 {字节值...}
将一串字节插入到 MIDI 文件中。 每个 字节值 可以是十进制 (0-255)
或十六进制 (0x00-0xFF)。 关键字 字节 可以代替 逐字.
$打印
打印 文本 到标准输出。 如果 文本 包含空格,必须使用双引号 (").
使用 onworks.net 服务在线使用 midge