17个版本
0.1.36 | 2024年7月27日 |
---|---|
0.1.32 | 2024年7月18日 |
0.1.26 | 2023年10月30日 |
0.1.25 | 2023年9月29日 |
0.1.18 | 2022年11月23日 |
#47 in 音频
每月 798次下载
290KB
7K SLoC
sakuramml-rust
"sakruamml" 是一个 MML/ABC 到 MIDI 编译器。
这个编译器可以将 "cde" 文本转换为 MIDI 文件。这是一个允许您轻松创建音乐的工具。它用 Rust 编写,并可在多个平台上(macOS/Windows/Linux/WebAssembly)运行。
仓库
- GitHub/sakuramml-rust
- crate.io/sakuramml
- npm/sakuramml
- 相关仓库
- GitHub/picosakura ... 网络播放器
- GitHub/picosakura-rust ... 本地播放器
Web 版本 (WASM)
- Pico-Sakura --- WebAssembly 版本
安装
二进制 - 命令行
编译
请安装 Rust 编译器。
$ git clone https://github.com/kujirahand/sakuramml-rust.git
$ cd sakuramml-rust
$ cargo build --release
target/release/sakuramml
是编译器。
樱花 MML
请创建文本文件 "test.mml"。 执行以下命令生成 MIDI 文件。
$ sakuramml test.mml
基础
o4 cdefgab>c<bagfedc
TR=1 CH=1 l1 ceg^
和弦
l4 `ceg` `dfa`8 `egb`8 `ceg`
设置 TIME 指针
// top
TIME(1:1:0) cdef
TIME(1:1:0) efga
// 2mes
TIME(2:1:0) cdef
SUB{...}
命令使时间指针回退。
SUB{ cdef c }
SUB{ efga e }
rrrr g
节奏宏
在节奏宏中,一个字符被当作一条指令处理,无论大小写。节奏宏定义如下 "$(char){definition}"。
// define macro
$b{n36,}
$h{n42,}
$o{n46,}
// new macro
$S{n37,}
CH(10)
// sample
Rhythm{
[4 l8
brSr bbsr r-1
hoho hoho
]
}
如何指定拍子
拍子写作 "Div{...}",但 "Div" 可以省略,写作 "{ceg}"。
l4 Div{cde} f Div{gab} >c<
l4 {cde} f {gab} >c<
l4 {cde}c {gfe}d {c^d} e {d^e} f
拍子可以嵌套。
l1 { c d {efe} d } c
力度
"(" 减少 8 个力度,")" 增加 8 个力度。
v127 c ( c ( c (( c )) c ) c ) c
和弦
`ceg` `dfa` `egb` `ceg`
保留符号
- v.onTime(low, high, len, ...) / 省略形 v.T(low,high,len,...)
- v.onNote(v1, v2, v3, ...) / 省略形 v.N(v1,v2,v3,...)
- t.onNote(v1, v2, v3, ...) / 省略形 t.N(v1,v2,v3,...)
- (ControllChange 或 PB 或 p).onTime(low, high, len, ...)
v.onTime(0,127,!1)l8cccccccc
BR(2) PB.onTime(-8192,0,!4) l4c PB(0) efg^
宏
它可以定义宏。
// define Macro
STR P1 = {cdefg}
#P1 = {cdefg}
// expand Macro
P1
#P1
该宏可以用参数替换。它替换为 #?1
#?2
#?3
...
// define macro
#Unison = { Key=#?2 Sub{ #?1 } Key=0 #?1 }
// expand macro with arguments
#Unison{cde},7
脚本
可以使用 IF/FOR/WHILE/FUNCTION 脚本。
// IF
INT A = 3
INT B = 5
IF (A == B) { PRINT({A == B}) } ELSE { PRINT({A != B}) }
// FOR
FOR (INT N=1; N < 5; N++) {
PRINT(N)
}
参考
- 命令列表(ja) --- command.md
- 语音列表 - voice.md
依赖项
~0.7–1.4MB
~29K SLoC