うぇーい、バクダンくんですよ。初めましまし。
友人が使っているのを見てVimを始めてからもう4年も経ったことだし、そろそろ僕も何かVimの魅力を語って周りに布教したいと思っていたのですが、うだうだしているうちにAdvent Calendarの季節になってしまったので、これを機に初投稿するのです。
そういうわけでこの記事はVim Advent Calendar 2015の10日目の記事になるのですよ。初めに言っておくと、タイトルで期待させてしまった方には申し訳ありませんが、そんなにすごいことやってるわけじゃないです。
なんでVimで作曲
僕は趣味でDTM(PCを使った音楽制作)をやっております。といってもまだ始めてから十数曲程度しか書いていないエンジョイ勢。
しかし、とりあえず曲を作るためにはひたすら重いDAW(音楽制作ソフト)を立ち上げ、テンポや拍子などプロジェクトの設定を済ませ、音源を沢山ある中から選び、なぜか音が鳴らないので環境設定やトラックの設定とにらめっこし……などなどしなければなりません。こんなことをしていてはせっかく天から降りてきた神フレーズもどっかへ行ってしまいます。
また、最近のDAWは基本的にMIDIキーボードが無いと非常に不便なものです。マウスとキーボードだけで打ち込むのは非常に煩わしく、電車の中で膝の上に乗せたノートPCでそんなことをする気にはなれません。
浮かんだメロディからラフを作るために使うのでMIDIが出力できれば十分。なんとかPCのキーボードだけでサクッと曲を書けるようなソフトは無いだろうか。色々試してみたのですがなかなか丁度いいものが見つかりません。そこで思います。
というか、Vimで作曲したい。
ざいりょう
- WindowsのパソコンまたはMac
試してないですがLinuxでも頑張ればできないことはないと思います。 - Vim
コマンドラインでも作曲できちゃうすごいソフト。 - quickrun
\r
で好きなコマンドを実行できる便利なプラグイン。 - テキスト音楽「サクラ」(コンソール版)
今回の肝。 - TiMidity++(Macの場合)
あらMacってMIDI再生できないのね。Homebrewを使ってインストールするのが一番楽でしょう。
テキスト音楽「サクラ」
テキスト音楽「サクラ」は、MML表記で書いた楽譜をMIDIに変換し演奏してくれるシーケンサーソフトです。それだけでなくMMLを独自に拡張して日本語(ストトン表記)に対応させ、例えばドレミファ
と書くとドレミファと鳴らしてくれます。その手軽さも相まって今でも愛用者は多いそうです。
サクラは本来エディタつきのソフトウェアで、それを使えばGUIの鍵盤をポチポチ押して入力したりもできるのですが、Vim以外のエディタを使うなんて考えられないので今回はコンソール版を利用させていただきます。
準備
Vimのインストール
パソコンを買ったら手が勝手にインストールしているはずなので省略。
quickrunのインストール
お好きな方法でquickrunをインストールします。僕はNeoBundleを使っていますが、他の方法でもきっと大丈夫でしょう。
なお、曲をバックグラウンドで再生するためにvimprocも必要ですが、KaoriYaさんのVimやMacVim-KaoriYaの場合は既に含まれているため自分でインストールする必要はありません。
(Macの場合)TiMidity++のインストール
まずはbrew install timidity
。しかしMacのTiMidity++の場合、初期設定では対応していない音色が多いようなので、別のサウンドフォントを導入しておきましょう。
ネットに転がっているサウンドフォントは色々ありますが、僕の場合こちらのサイトからFluidR3.zipをダウンロードし、解凍した中のFluidR3 GM.SF2
を/Library/Audio/Sounds/Banks/FluidR3_GM.SF2
に移動し、/usr/local/Cellar/timidity/2.14.0/share/timidity/
にあるtimidity.cfg
をtimidity.cfg.old
にバックアップしてから新しいtimidity.cfg
に
dir /Library/Audio/Sounds/Banks
soundfont /Library/Audio/Sounds/Banks/FluidR3_GM.SF2
とだけ書いて保存した、ような痕跡があります。あんまり覚えておらずこれだけで大丈夫か不安なのでダメだったらどうにかして調べてくださいな。
テキスト音楽「サクラ」のダウンロード
こちらからテキスト音楽「サクラ」のコンソール版をダウンロードし、解凍して適当な場所に配置します。Macの場合はベータ版ですがこちらがあります。Linuxの場合は試していませんがC言語版(β)のソースコードが公開されているのでなんとかなる気がします。
Vimの設定
~/.vimrc
に以下を書いておきます1。/path/to/...
の部分は各自サクラを置いた場所に読み替えてください。
""" quickrunの設定 """" Quickrun起動中に <C-c> で実行を強制終了させる" quickrun.vim が実行していない場合には <C-c> を呼び出すnnoremap<expr><silent><C-c> quickrun#is_running() ? quickrun#sweep_sessions() : "\<C-c>"if!exists('g:quickrun_config')letg:quickrun_config = {}
endifif has('win32')" Windows用の設定autocmdBufRead,BufNewFile *.mml setfiletype=mml fileencoding=cp932
letg:quickrun_config['mml'] = {
\ 'tempfile' : '%{tempname()}.mml',
\ 'command' : expand('/path/to/csakura-pack/cSakura.exe'),
\ 'runner' : 'vimproc',
\ 'exec' : ['%c %s %s:p:r.mid','start %s:p:r.mid'],
\ 'outputter' : 'null'
\ }
elseif has('mac')" Mac用の設定autocmdBufRead,BufNewFile *.mml setfiletype=mml fileencoding=utf-8letg:quickrun_config['mml'] = {
\ 'hook/cd/directory' : '/path/to/bin_sakura_osx',
\ 'tempfile' : '%{tempname()}.mml',
\ 'command' : expand('/path/to/bin_sakura_osx/sakura'),
\ 'runner' : 'vimproc',
\ 'exec' : ['%C %s || echo','timidity -OO %s:p:r.mid'],
\ 'outputter' : 'null'
\ }
endif
quickrunのマニュアルを読んだもののいまいちよくわからないので何かマズイところがありましたらお教えください。Mac版は仕様なのかわかりませんがsakura
を実行した作業ディレクトリの中でIncludeディレクトリを探そうとしてしまうのでhook/cd/directory
を設定してあります。
Vimで作曲
とりあえず書いてみる
ではVimを開き適当に:e hoge.mml
とします。その状態で以下のように書いてみましょ。
拍子6,8 テンポ60 音符8
ソ8.ラ16ソミーッ ソ8.ラ16ソミーッ
↑レーレ"シーッ ドード"ソーッ
↓【2 ラーラ`ド8.シ16ラ ソ8.ラ16ソミーッ】
↑レーレファ8.レ16"シ ドーッミーッ
↓`ドソミソ8.ファ16レ ド2.
ノーマルモードに戻って\r
(正確には<Leader>r
)を入力するとピアノの音できよしこの夜が流れてくるハズです。WindowsではWindows Media Player(または拡張子.mid
に関連付けされているプログラム)が開いて再生してくれるのでシークもできます。hoge.mmlを保存済みの場合は同じフォルダにhoge.midが作成されます。
おめでとうございます、これであなたが大好きなVimで作曲までできちゃう環境が整いました。
MML表記
サクラは普通のMML表記や、マクロを書いて複雑なMIDIを作ることもできます。詳しくはテキスト音楽「サクラ」のマニュアルで。じゃあためしにちょっと書いてみますか。
Tempo=110 Key=0
Track=1 Channel=1 V(100)
@BrassSection
l8 o6
eeee12f24gc`cb abag12f24e4r8a12b24
`cbab12a24g`ccd12e24 fedc'cd+,,80g+,,80'4'df,,80a+,,80'4
eeee12f24gc`cb agab12g24>c4de
fedc"gdcc12<b24 a`cba12b24`c4
Track=2 Channel=2 V(80)
@SynthBrass1
l8 o4
[2 cccc<bbbb aaaagggg ffffeeee: ddddg+4a+4> ]ddggc4
Track=10 Channel=10
@RoomSet
// リズムパートを入力するためのマクロを設定
$k{n(Kick1),} $s{n(Snare1),} $j{n(JingleBell),} $c{n(CrashCymbal1),}
Rythm{
l8
Sub{v60 [28 j ]jrjr}
Sub{v100 [7 kkrk ]krkr}
Sub{v100 [3 rrsr12s24 ]rrs12s24r [2 rrsr12s24 ] rrs12s24r12s24srsr}
v90 r1 r1 r1 r2crcr
Sub{v60 [29 j ]}
Sub{v100 [7 kkrk ]k}
Sub{v100 [3 rrsr12s24 ]rrs12s24r [2 rrsr12s24 ] rrs12s24r12s24s}
v90 r1 r1 r1 r2c
}
サクラMMLの言語仕様を調べながら書いたので5時間もかかっちゃいましたが、慣れればきっともっと速く書けるようになるでしょう。これでいつでも気軽に曲作りできちゃいます。
できないこと
今のところの課題は、
- 途中から再生できない
- Windows以外はシークもできない
- 音色の一覧やサクラMMLの仕様を確認できるhelpが欲しい
- シンタックスハイライトさせたい
- よく使うスニペットを簡単に入力できる機能が欲しい
- 音色や音階のプレビューが欲しい
あたりでしょうか。音色の一覧に関しては今はサクラを配置したディレクトリの中にあるInclude/stdmsg.h
を見て確認している現状です。もっとVim力があればプラグインを作ってquickrun要らずにもしたいところですが、今の僕にはこれが限界なので誰か作ってくださいお願いします。お願いしましたよ。ではおさらば。
2015/12/11追記: MacVim-KaoriYaでいつの間にかvimprocを自力でインストールする必要が無くなっていたので修正しました。