#music-notation #midi #notation #language #music #midi-file

bin+lib melo

音乐记谱语言和MIDI编译器

1个不稳定版本

使用旧的Rust 2015

0.1.0 2018年2月3日

#525音频

MIT 许可证

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获得语法高亮和文件类型检测。

待办事项

未来功能

  1. 小节/部分的重复
  2. 调号
  3. 动态
  4. 支持音高弯曲/声像/其他MIDI功能
  5. 显式的切分音
  6. 在曲子中改变属性(速度、音量等)

未来的修复

  1. 关于缺失的小节/乐谱的警告/错误

依赖关系

~7.5MB
~147K SLoC