これはカーネル/VM Advent Calendarに向けての記事です。
原題:カーネル/VM Advent Calendar 22日目:RTカーネルでDTMしてみたかった
@fadis_さんからの指摘で、これはレイテンシーの低いカーネルですがRealTimeとは違うらしいので改題しました。
みなさん*nixでプログラムの話をされたり、Windowsの深層の記事を書かれててアウェー感がありますがいきましょう。
UbuntuでDTM?
DTMというものをご存知でしょうか。デスクトップミュージックの略でMIDIという規格に沿い、PC上(と必要に応じてMIDIメッセージが送受信出来る外部音源と入力機器)で音楽を作ることです。
楽器を弾ける必要はありませんが必要に応じて楽器の知識は必要になります。
genericカーネルの弱点
Ubuntuをインストールすると、最初にインストールされるのがgenericカーネルというシロモノ。コイツが曲者で、/boot/config-2.6.38-13-generic-paeを確認したところ:
- 割り込み頻度が250Hz
- 最適化度合いがPen Pro(i686)
- メモリモデルはFlat Memory
- Voluntary Kernel Preemption(Desktop)
というなんともまぁカーネル性能を求める人にとってはちょいと微妙な設定となっとります。メモリモデルはVMを使う人には関係があります。
しかし僕がSparse Memoryに変更しているので一応取り上げました。
DTMするのに何が問題になる?
少なくとも割り込み頻度が250Hzなのは問題です。
MIDIは楽譜でしかないので(正確にはどの音程でどの音色でどれだけ鳴らすかといった情報しかMIDIファイルには記載されていない)、MIDIの発音タイミングがずれたら気持ち悪くなりますよね。MIDIシーケンサーで演奏するときにできるだけMIDIの情報を忠実に奏でて欲しいです。
カーネルの設定を変更
カーネルの設定を変更していきましょう。
割り込み頻度:250Hz→1000Hz
CPU種類別最適化:
- Core2以降なら Pen Pro→Core2/newer Xeon
- Atomなら Pen Pro→Intel Atom
- E-350/Phenom以降なら Pen Pro→K8
など。すいませんAMDマシン持っていないので最後は自信がないです。
としてみます。VMを使う人ならSparse Memoryとし、2.6.38以降辺りにはTranceparent Hugepages Supportという項目があるのでそれも有効にしておきましょう。
カーネルのPreemptionモデルも
- Voluntary Kernel Preemption(Desktop)→Preemptible Kernel(Low-Latency Desktop)
へ変更します。これがいわゆる低レイテンシカーネルです。
割り込み頻度が1000HzなのでCPUがアイドル状態にあったときにCPUが起きてしまって省電力性能が生かせない場合があります。genericカーネルの方が性能的に勝る分野も有るということです。
$make xconfig風景(適宜拡大してください)
Linux Kernel 2.6.38.8を元にして進めます。
Ubuntu11.04のgenericカーネルが現在2.6.38.13となっているのでgenericカーネルの設定の部分から不満点を改善するようにコンフィグを行います。
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/
から目当ての2.6.38.8カーネルを持ってきます。
$ cp /boot/config-2.6.38-13-generic-pae .config
とカーネルコンパイルするディレクトリにコピーします。
$make oldconfig
と設定を引き継いだ後、上に示したように変更していきます。
CPU別最適化

メモリモデル指定

カーネルの応答性

カーネルを再構築
詳細は過去の記事をご覧ください。Ubuntu向けです:
http://wp.me/p16r0I-at
いよいよDTMをする為のカーネル準備が整いました。
Core2向けの.configはこちら:
http://dl.dropbox.com/u/36753409/config-2.6.38ubuntu-custom-forcore2
——–直ぐにPreempt(低レイテンシ・高解像度)カーネルを使いたい人向け↓——–
genericカーネルを今回の設定(Core2向け)でカーネルコンパイルしたものはこちら(Ubuntu11.04向け/32bitカーネルです):
2.6.38.8カーネルのヘッダーdebファイル
http://dl.dropbox.com/u/36753409/linux-headers-2.6.38.8-custom-forcore2_1_i386.deb
2.6.38.8カーネルのイメージdebファイル
http://dl.dropbox.com/u/36753409/linux-image-2.6.38.8-custom-forcore2_1_i386.deb
また、適宜/lib/modules/`uname -r`/buildへシンボリックリンクを貼りましょう。
その作業を自動化したboost+C++のツールはこちら:
https://github.com/cosmo0920/KernelHeaderSymLink
コンパイルにはboostライブラリが必要です。(boost::filesystem
————————————————————————————-
LinuxでのDAWは?
MIDIからオーディオファイルまで扱えるDAW(Digital Audio Workstation)は無いと思います…。が、MIDIシーケンサーは存在します。
RosegardenというモノがUbuntuのリボジトリに登録されていました。いかにも検索しにくい名前がついてます。
それによりDTMをしてみました。
UbuntuでDTM
- 音源はEdirolのSD-90
- MIDIシーケンサーとしてRosegarden
- 録音と音量調整にはAndacity
- Audio I/FにはUA-1G
を使っています。
打ち込んでいる様子とか(上:プロジェクトの様子、下:ピアノロール):


Linuxを使っていながらちっともプロプライエタリを避けようとしてないのがなんとも…。
ちまちまつくっていた曲のmp3はこちら。
物部myth_〜神話探訪〜ver.KernelVMad
東方神霊廟から5面ボステーマ「大神神話伝」のアレンジ(の途中)です。気になるところがあってまだ未完成ですすいません…。
神霊廟の曲自体が普通とトランス状態の曲の2バージョンあり、これで2面性を表現していると思います(と勝手に解釈しました)。一つの曲の中で表と裏を表現しようとインストだけで表現しようとした結果、
調和のとれている部分と不協和音っぽくなっているパートがあります。決して調整不足なんかじゃ(ry
それに遠い昔の時代の事は正確には解りませんし。
もしかしたら栄華も歪められているかもしれない。「その歴史や神話を覗いてみようぜ!」なイメージを持ちつつ書いてみた曲です。我々には現存する証拠から飛鳥時代がどのような時代であったか想像するしかないですし。
最後に
LinuxでDTMするにあたって人気のあるディストリですら殆ど情報が無く、この音源は認識するのかという不安だった部分、Windows向けのソフト音源はWineを通じて使えるのかとかまだまだ分からなかった部分もあります。
ちなみにUbuntuのgenericカーネルでRosegardenを起動するとカーネルの解像度が足りませんと怒られます。今回それを解消するのが目的だったはずなのにどうしてこうなった…
また、ソフト音源を使う際のサウンドのルーティングなど調べないといけない事もあります。Qsynth、QjackCtlなるものでソフト的に制御出来るらしいのですが・・・。
一応Windows向けのSynth1は色々WineとVST周辺の環境をいじって起動はしました。
しかし音が出ているかの確認までには至りませんでした。
LinuxでDTMはまだまだ一般的ではないようで…
LinuxでのDTM情報の少なさによる取っ付きにくさの現状を憂いつつ記事を〆ます。
次の日の記事担当はまてぃーさん(@rkmathi)です。
> MIDIからオーディオファイルまで扱えるDAW(Digital Audio Workstation)は無いと思います…。
ARDOUR とか LMMS を知りませんか?
>c-yanさん
ARDOURは名前を聞いたことはありました。しかしMIDIまで扱えるかまでは確認していませんでした。
LMMSは初めて知りました。ありがとうございます。