25
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

うぇーい、バクダンくんですよ。初めましまし。

友人が使っているのを見て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.cfgtimidity.cfg.oldにバックアップしてから新しいtimidity.cfg

timidity.cfg
dir /Library/Audio/Sounds/Banks
soundfont /Library/Audio/Sounds/Banks/FluidR3_GM.SF2

とだけ書いて保存した、ような痕跡があります。あんまり覚えておらずこれだけで大丈夫か不安なのでダメだったらどうにかして調べてくださいな。

テキスト音楽「サクラ」のダウンロード

こちらからテキスト音楽「サクラ」のコンソール版をダウンロードし、解凍して適当な場所に配置します。Macの場合はベータ版ですがこちらがあります。Linuxの場合は試していませんがC言語版(β)のソースコードが公開されているのでなんとかなる気がします。

Vimの設定

~/.vimrcに以下を書いておきます。/path/to/...の部分は各自サクラを置いた場所に読み替えてください。

.vimrc
if !exists('g:quickrun_config')
	let g:quickrun_config = {}
endif
if has('win32')	" Windows用の設定
	autocmd BufRead,BufNewFile *.mml set filetype=mml fileencoding=cp932
	let g: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用の設定
	autocmd BufRead,BufNewFile *.mml set filetype=mml fileencoding=utf-8
	let g: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とします。その状態で以下のように書いてみましょ。

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を自力でインストールする必要が無くなっていたので修正しました。

25
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?