コードでコードを奏でる! alda を試してみた。

こんにちは k-jun です。今回は何とも異色な音を出す cli ツール。alda を試してみようと思います。

https://github.com/alda-lang/alda

さらっと見た感じ、楽譜のようなものを入力するとそれに応じて演奏してくれるみたいです。どんな有能便利なコマンドよりもワクワクするのはなぜでしょうか...!

Install

直接ダウンロードする形式なので、多少めんどくさいですがインストールしていきます。

$ wget -o /tmp/alda https://alda-releases.nyc3.digitaloceanspaces.com/2.0.5/client/darwin-amd64/alda
$ wget -o /tmp/alda-player https://alda-releases.nyc3.digitaloceanspaces.com/2.0.5/player/non-windows/alda-player

$ chmod +x /tmp/{alda,alda-player}
$ mv /tmp/{alda,alda-player} /usr/loca/bin

Run

おおお!確かに音がなりました!

alda play -c "(tempo! 160) trumpet: (quant 60) f12 b- > d f6 d12 f1"

もっと色々とやってみたいのでチュートリアルに進みます。

https://alda.io/tutorial/

alda repl と入力することで repl モードに入ります。ここに種々の文法で定義された "コード" を打ち込むことで音を鳴らします。

$ alda repl
nREPL server started on port 60519 on host localhost - nrepl://localhost:60519
 █████╗ ██╗     ██████╗  █████╗
██╔══██╗██║     ██╔══██╗██╔══██╗
███████║██║     ██║  ██║███████║
██╔══██║██║     ██║  ██║██╔══██║
██║  ██║███████╗██████╔╝██║  ██║
╚═╝  ╚═╝╚══════╝╚═════╝ ╚═╝  ╚═╝

    Client version: 2.0.5
    Server version: 2.0.5

Type :help for a list of available commands.

piano で演奏する場合は piano と prefix をつけます。以降 piano が デフォルトの楽器になります。

alda> piano: c d e f

ド〜レ〜ミ〜ファ〜 というわけです。まさにコードでコードを奏でている状態ですね ♪

alda> g a b > c

オクターブ上げる場合には > を追加。

alda> o4 c < b- a g f+
alda> o4 c++++-+-+-+

半音の上げ下げもできます。+ と - の合計値が参照されるところはプログラムっぽいですね 笑。

alda> o4 c4 c8 c c16 c c c c32 c c c c c c c | c1
alda> r2 c | r4 c r8 c r4

4分音符、8分音符などもできますできます。休符は r で表現し、| は2つのコードのまとまりを意味的に区切ります。

alda> trombone: o2 c4.. d16 e-8 r c r
alda> o4 c1/e-/g/b

突然のトロンボーン。そして和音。

ということで、一通り機能することがわかりました。repl だけでなくテキストファイルを渡すことで音を出すことも可能なので、最後にリポジトリに存在する楽譜を一通りやってみて終わろうと思います。

$ alda play --file examples/across_the_sea.alda
$ alda play --file examples/alternate-endings.alda
$ alda play --file examples/awobmolg.alda
$ alda play --file examples/bach_cello_suite_no_1.alda
$ alda play --file examples/debussy_quartet.alda
$ alda play --file examples/dot_accessor.alda
$ alda play --file examples/dynamics.alda
$ alda play --file examples/gau.alda
$ alda play --file examples/hello_world.alda
$ alda play --file examples/jimenez-divertimento.alda
$ alda play --file examples/key_signature.alda
$ alda play --file examples/modes.alda
$ alda play --file examples/multi-poly.alda
$ alda play --file examples/nesting.alda
$ alda play --file examples/nicechord-alda-demo.alda
$ alda play --file examples/nicechord-transposed-variable.alda
$ alda play --file examples/overriding-a-global-attribute.alda
$ alda play --file examples/panning.alda
$ alda play --file examples/percussion.alda
$ alda play --file examples/phase.alda
$ alda play --file examples/poly.alda
$ alda play --file examples/rachmaninoff_piano_concerto_2_mvmt_2.alda
$ alda play --file examples/seconds_and_milliseconds.alda
$ alda play --file examples/track-volume.alda
$ alda play --file examples/variables-2.alda
$ alda play --file examples/variables.alda

癒やされますね...。

試しながら気づきましたが、これ同時発火もできますね笑。1個1個やっていけばオーケストラも再現できそうな 笑。誰か UnderTale の楽譜作ってくれええええ。それでは今回はこのへんで。