The Little MIDI

Staff

制谱这块我们用LilyPond,虽然用的是LaTeX那样的语法(还混入了LISP),但除此之外也没什么好的选择了,能在终端里使用还兼顾着这么完美的质量...

% test.ly
\version "2.24.3"
\language "english"

\score {
    \midi   {} 

    \relative {
        c d e f g a b
    }
}

然后轻轻地编译一下: lilypond test.ly

Player

FluidSynthTermux上不知道为啥没声音,所以只能用MPV来播放,绕了个小圈子.

虽然TiMidity++也可以播放MIDI,但他本身指定字体的方式过于繁琐(只能通过配置文件来指定),所以这里就选择了FluidSynth.

midi-play() {
    # https://archive.org/details/500-soundfonts-full-gm-sets
    _NAME="Arachno.sf2"
    _FONT="$HOME/soundfonts/$_NAME"
    _FORMAT=s16le
    _RATIO=44100

    fluidsynth -nli -o synth.cpu-cores=8 \
        -r $_RATIO -g 2 -T raw -F - \
        -i $_FONT $1 \
        | mpv \
        --demuxer=rawaudio \
        --demuxer-rawaudio-format=$_FORMAT \
        --demuxer-rawaudio-rate=$_RATIO \
        -
}

DONE: midi-play test.midi