C言語製の自由なDAW Zrythmをビルドしてみる
あらまし
最近GitHubを眺めていたらオープンソースなDAW (Degital Audio Workstation; つまり作曲ソフト)を発見しました。
そんなDAWの名はZrythm。
そのDAWは、
- ほとんどC言語で書かれており、
- 開発を開始したのが2018年7月からのようであり(2年目くらい)、
- AGPLでライセンスされており、
- 何故か作者が日本語ローカライズをしており、
- なぜか名前がZrhythmではなくZrythmであり、
- Windows、GNU/Linuxで動く
というものでした。新興のDAWでありながら公式のスクリーンショットとかを見るかぎりよくできていそうで、1年ちょっとでこのレベルのものが生えてくるのねとヴィックリ。
この記事ではそんなZrythmをビルドして動かしてみました。
ビルド環境
Zrythmではビルドツールとしてninja、Ninjaのビルドファイル生成ツール(つまりCMake的なツール)としてMesonを利用しています。Ninjaはmakeよりも小さくて速いビルドツールとして開発されているもので、かつNinjaのビルドファイルは自動生成される想定で書かれているため別途Mesonが必要という感じらしいです。ちなみにちょっと前にFUSEのコードをみたらMesonとNinjaを使っていたので、最近のC界隈のトレンドのようです。
Ninjaはコードをクローンしてきて./configure.py --bootstrap
で、MesonはPython製なのでpython3 -m venv venv ; . venv/bin/activate; pip install meson
とかでセットアップしてください。
手元のビルド環境を晒しておくとこんなかんじです。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS" $ uname -a Linux hogehoge 4.15.0-76-generic #86-Ubuntu SMP Fri Jan 17 17:24:28 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux $ meson --version 0.53.1 $ $HOME/tmp/ninja/ninja --version 1.10.0
依存ライブラリのインストール
まずは依存ライブラリを入れていきます。以下のライブラリのヘッダが必要なので入れていってください。
- libsndfile (音声ファイルの読み書きライブラリ)
- librubberband (音声データのリピッチ・ストレッチライブラリ)
- libsamplerate (音声データのサンプリングレート変換ライブラリ)
- libyaml (YAMLライブラリ)
- libfftw3 (高速フーリエ変換ライブラリ)
- libgtk-3 (GTK3)
それにしてもsndfileは知ってたんですが(cl-sndfileとかある)、リピッチとかサンプリングレート変換とかFFTもライブラリがあるんですね。
Zrythmのビルド
依存ライブラリを入れおわったら、Zrythm本体のコードをもってきます。GitHubに公式でミラーされているのでこちらを持ってきましょう。公式サイトに書いてあるGitリポジトリはなんだかモジュールごとにリポジトリが切ってありサクッとビルドしたい方にはオススメしません。
Mesonが使える状態の元、このようにするとビルドできます(ninjaをシステムにインストールしたくなかったため、直接パスごと指定してます)。
$ git clone https://github.com/zrythm/zrythm $ cd zrythm # mesonを叩くときにはninjaにパスが通っている必要がある $ PATH=$PATH:$HOME/tmp/ninja/ meson build $ PATH=$PATH:$HOME/tmp/ninja/ ninja -C build # インストール $ sudo $HOME/tmp/ninja/ninja -C build install
これでzrythmが/usr/local/binあたりに置かれ、起動できるようになります。
使用感
さて、使ってみるタイムです。
ちなみにデフォルトのビルド設定ではサウンドドライバがJackのみでしたが起動時に再生中の音楽が止まるのがいやだったのでPortAudioオプションを有効にしてビルドしています。
…なんですが。
まず、サウンドドライバ設定でPortAudio選べないのね! しかたがないのでjack_control start
でJackを起動しました。すると、上のスクショにも出てますがXRUN occured
とでたまま固まってしまいました。どうもJackを起動した状態で繋ぐと死ぬっぽい。バージョン合ってない系かしら(いやしかしjack_lsp
でポート一覧にはでてくる)…。
コードはかなり素直で読みやすい(あとCでOOPっぽさのあるコードになっている)ので、ちょっと調べてみるといろいろ楽しそうですねえ。