octahedron

LemとSKKとCommon Lispでたたかうプログラマのブログ

C言語製の自由なDAW Zrythmをビルドしてみる

あらまし

 最近GitHubを眺めていたらオープンソースDAW (Degital Audio Workstation; つまり作曲ソフト)を発見しました。
 そんなDAWの名はZrythm。

www.zrythm.org

 そのDAWは、

  • ほとんどC言語で書かれており、
  • 開発を開始したのが2018年7月からのようであり(2年目くらい)、
  • AGPLでライセンスされており、
  • 何故か作者が日本語ローカライズをしており、
  • なぜか名前がZrhythmではなくZrythmであり、
  • WindowsGNU/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リポジトリはなんだかモジュールごとにリポジトリが切ってありサクッとビルドしたい方にはオススメしません。

github.com

 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オプションを有効にしてビルドしています。

f:id:t-sin:20200201015841p:plain
Zrythm起動時の画面

 …なんですが。

 まず、サウンドドライバ設定でPortAudio選べないのね! しかたがないのでjack_control startでJackを起動しました。すると、上のスクショにも出てますがXRUN occuredとでたまま固まってしまいました。どうもJackを起動した状態で繋ぐと死ぬっぽい。バージョン合ってない系かしら(いやしかしjack_lspでポート一覧にはでてくる)…。

 コードはかなり素直で読みやすい(あとCでOOPっぽさのあるコードになっている)ので、ちょっと調べてみるといろいろ楽しそうですねえ。