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 音频

Download history 11/week @ 2024-07-01 245/week @ 2024-07-08 255/week @ 2024-07-15 128/week @ 2024-07-22 170/week @ 2024-07-29

每月 798次下载

自定义许可

290KB
7K SLoC

sakuramml-rust

"sakruamml" 是一个 MML/ABC 到 MIDI 编译器。

这个编译器可以将 "cde" 文本转换为 MIDI 文件。这是一个允许您轻松创建音乐的工具。它用 Rust 编写,并可在多个平台上(macOS/Windows/Linux/WebAssembly)运行。

仓库

Web 版本 (WASM)

安装

二进制 - 命令行

编译

请安装 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)
}

参考

依赖项

~0.7–1.4MB
~29K SLoC