1个不稳定版本
使用旧的Rust 2015
0.1.0 | 2018年2月3日 |
---|
#525 在 音频
135KB
4K SLoC
梅洛
梅洛是一种音乐记谱语言,也是一个MIDI编译器。目标是使其简单、可读和富有表现力。该语言处于非常初级的阶段,目前只有一些基本功能。
title: Simple Chords and Drums
tempo: 144
voice Piano { program: 4 }
voice Drums { drums }
play Piano
{
:| G a | a b | c |
:| E E | F G | G |
:| C C | C D | E |
}
play Drums
{
c#: | - | - | x |
F#: | xx xx xx xx | xx xx xx xx | - |
D: | -- x- -- x- | -- x- -- x- | x |
C: | x- -- x- -- | x- -- x- -- | x |
}
安装
目前,此项目需要 cargo
cargo安装 melo
您也可以克隆存储库并构建它。(在Rust 1.23.0上测试过。)
还值得注意,我目前只在macOS上测试过它。
用法
开始的最简单方法是播放其中一个 示例。如果您已克隆了存储库,可以运行
melo mid pieces/rondo_alla_turca.melo--output rondo_alla_turca.mid
这将从这个 示例 生成一个MIDI文件。
如果您已安装 timidity
或将环境变量 MELO_MIDI_PLAYER
设置为可以播放MIDI文件的命令,则可以简单地运行
melo play pieces/rondo_alla_turca.melo
语言
顶级属性
有几个顶级属性适用于整个作品。您可以按以下方式设置它们。
// Lines beginning with `//` are comments.
title: The Title of the Piece // Spaces are allowed.
composer: Your Name // Same as above.
beats: 3 // The number of beats per bar.
tempo: 120 // The tempo of the piece in beats-per-minute.
当在多行上拆分属性时,逗号是可选的,但您也可以这样做
title: A, composer: B, beats: 3
声部
在您开始播放任何音符之前,您需要乐器来播放它们。声部的声明如下
voice Piano // An identifier for the voice.
{
program: 4 // The MIDI program number for the instrument.
// Run `melo ref instruments` to see them all.
channel: 1 // The MIDI channel this voice should play on. Defaults to `1`.
octave: -1 // This can be used to offset notes by a number of octaves.
volume: 127 // The volume of the voice, between 0 and 127.
}
还有一个特殊的 drums
属性,它为打击乐声部设置了一些合理的默认值
voice Drums { drums } // This is equivalent to the following voice:
voice Drums2 { program: 0, channel: 10, octave: -2 }
演奏音符
为了用给定的声部演奏音符,您需要为该乐器编写一个 play
块。如果您为不同的乐器编写了多个播放块,它们将同时播放。
play Piano
{
// The two staves below will play simultaneously.
:| C D E F G a b c | // There are 8 notes in this bar, so the notes are half as long...
:| C,, E,, G,, C, | // As the 4 notes in this bar.
// You can leave a blank line to continue on from the previous staves.
:| b a G F E D C . | . |
:| G,, E,, C,, . | . | // A `.` extends the length of the previous note.
}
上面使用的两个乐谱开始时使用的是 :
,这意味着它们没有 prefix
。但是,如果您正在编写打击乐部分,则前缀确定该乐谱上要演奏的音符。
play Drums
{
// The `x` means hit the note, the `-` is a rest.
F#: | xxx xxx xxx xxx | // F# = Hi-hat
D: | --- x-- --- x-- | // D = Snare drum
C: | x-x --x x-x --- | // C = Kick drum, see `melo ref notes` for more information.
}
将来可能会添加其他乐谱类型以支持音乐的其他属性。例如,音符速度、重音等。
音符
音符C
是中C,根据MIDI标准定义。比它低一个八度的音符是B
,而比它高一个八度(大小调)的音符是D
。
比它高一个八度的音符是c
,再高一个八度的音符是c'
,然后是c''
等等。
比它低一个八度的音符是C,
然后是C,,
等等。
你可以使用C#
和C_
分别来升高和降低一个音符。然而,请注意,与传统音乐记谱法和ABC记谱法不同,这些变音记号不会在整个小节中持续。如果你写下::| C# C |
,那么第一个音符是C升音,第二个是C自然音。
如果你习惯于ABC记谱法,另一个潜在的陷阱是八度界限在A
音符上。
Melo: A B C D E F G a b c
ABC: A, B, C D E F G A B c
与vim一起使用
如果你将此目录中的文件复制到你的.vim
目录或vim运行时目录中,你可以为melo获得语法高亮和文件类型检测。
待办事项
未来功能
- 小节/部分的重复
- 调号
- 动态
- 支持音高弯曲/声像/其他MIDI功能
- 显式的切分音
- 在曲子中改变属性(速度、音量等)
未来的修复
- 关于缺失的小节/乐谱的警告/错误
依赖关系
~7.5MB
~147K SLoC