波面進捗
このようなうすぎたない事務所で諸君らのおかずが錬成されている。
さて、最小構成くらいの規模にはなった。
非常に面白いのはスピーカーから音が出ている感じが希薄で、まるでスピーカーの前に人が居て喋っているかのような感じで聞こえてくる。もちろん動かしたりもできる。
…が、まだまだ有効範囲が1^2mくらいの範囲でしかない。
したがってもう3倍くらいはスピーカーを用意する必要がある。
まだまだお披露目はできないが、一応は出来ているといった具合。
そんなわけでたくさんの入力を十把一絡げにしてたくさんの出力デバイスへとパッチ
そしてたくさんスピーカーを鳴らすために小さくて軽いコンピュータにAES67サービスをインストールする。
AES67についてはググれば理解できると思う。たぶん。
AES67 <-> USB Audio
こんな手のひらサイズシングルボードコンピュータを購入。
https://github.com/radxa-build/rockpi-4b/releases
このへんからお好きなイメージを落として焼いて遊ばせ。
なお今回はArmbian_22.08.0-trunk_Rockpi-4b_focal_current_5.15.58_xfce_desktop。
わ ぁ い
んでもってPipewireのインストール
sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
sudo apt update
sudo apt install libfdk-aac2 libldacbt-{abr,enc}2 libopenaptx0
sudo apt install gstreamer1.0-pipewire libpipewire-0.3-{0,dev,modules} libspa-0.2-{bluetooth,dev,jack,modules} pipewire{,-{audio-client-libraries,pulse,bin,locales,tests}}
そのへんに転がっているppaから。
・様々な設定例とGUIルーティングアプリ
sudo apt install qpwgraph pipewire-doc
・Pulse Audio の無効化
systemctl --user --now disable pulseaudio.{socket,service}
systemctl --user mask pulseaudio
・pipewire-media-sessionのALSA用コンフィグ
sudo touch /usr/share/pipewire/media-session.d/with-alsa
sudo cp /usr/share/doc/pipewire/examples/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/
・Pipewire開始
systemctl --user --now enable pipewire
んで、ターミナルにpactl info とか打って
Pipewireで動いてる旨表示されたら成功。
なに?動いてない?再起動してもだめだったらエラーメッセージでググれ。
AES67−Linux-Daemonのビルド
まずはこのへんをgit cloneする。んでもって必要なパッケージがまとまったシェルスクリプトを実行。
git clone https://github.com/bondagit/aes67-linux-daemon.git
cd aes67-linux-daemon
./ubuntu-packages.sh
すると
E: パッケージ linux-headers-5.15.58-rockchip64 が見つかりません
ときたもんだ。
ムカつくことになぜかRockPi公式リポジトリには5.15.58のカーネルヘッダが無いため自分で新しくビルドするか手っ取り早くこのへんのリポジトリから引っ張ってくること。
https://imola.armbian.com/beta/pool/main/l/
・MergingのRavenna-ALSA-LKMのビルド
公式のドライバは新しいカーネルで動かないのでこの辺から落とす
cd 3rdparty
git clone -b aes67-daemon https://github.com/bondagit/ravenna-alsa-lkm.git
cd ravenna-alsa-lkm/driver
make
んで、
sudo su
cp MergingRavennaALSA.ko /lib/modules/$(uname -r)/kernel/drivers
depmod
・カーネルにロード
sudo insmod MergingRavennaALSA.ko
・ついでに起動時にドライバ読み込み
echo -e \MergingRavennaALSA >>/etc/modules-load.d/modules.conf
こんどはこのドライバを動かすデーモンのビルド
これは一発でどうにかなるスクリプトが付属しているので、aes67-linux-daemonのルートディレクトリにあるbuild.shを実行すれば良い。
./build.sh
出来上がったらdaemonディレクトリに移動。
そして適当なエディタで
cd daemon
nano daemon.conf
"interface_name": "lo",
この箇所を自分のメカに搭載されたNICの名前に変更。
eth0とかenp2s0とかそんなやつ。ここをいじれば最低限は動く。
あとは "custom_node_id": "付けたい名前",
とかも追記しておくとANEMANなどのマネージャから名前がわかるようになる。
・ほいでもって然るべき場所にポイ。
sudo cp daemon.conf /etc
・アホな権限をくれてやる
sudo chmod 777 /etc/daemon.conf
・動くか確認
./aes67-daemon
バババババと様々なメッセージが出るが PTPがLockされた旨表示されたらとりあえずは動いている。CTRL+Cで停止。
んでもって実行ファイルを/usr/binに投げ込むなりln -sするなり
.bashrcにエイリアス貼るなりして実行すればよい。
あとはそのNICのアドレスのポート8080をブラウザで開けば綾波レイの部屋のようなコンフィグ画面が出てくるので
アウトプット→Source
インプット→Sink
を設定
するとANEMANなどのルーティングユーティリティにAESの盾アイコンのソースが出現するので適当にルートしてやれば良い。
でもなんかこれ、挙動不審なんだよ。
出ないときは一旦aes67-daemonをCTRL+Cで終了して再び立ち上げるとうまくいく。
あとはドライバのプロファイルをProAudioに書き換えて
pw-link "${USB-no-nanika:capture_AUX0}" "${aes67no_driver:playback_AUX0}"とかやるなり、GUIユーティリティのqpwgraphで繋いでやれば良い。
AES67で受け取ったストリームをUSBオーディオインターフェースに。
あるいはUSBオーディオインターフェースにつないだマイクの入力を別のコンピュータのDAWで受け取れるようになった。やったね。
まとめ
Qiitaでやれ。
あと、RockPiシングルボードの他にもRyzen 1605Bが乗った手のひらPCを2万円の激安中古で買ってあるのでそっちを使おうかと思う。ぶっちゃけ、こっちのが遥かに速い。
結構スコアも回る模様。
Appendix
あとAES67−Linux-DaemonじゃなくてMergingのRavenna_ALSA_LKMを新しいカーネルで使いたい人は
git clone -b aes67-daemon https://github.com/bondagit/ravenna-alsa-lkm.git
してビルドするところまでは一緒で
XenialやらBionicあたりのリポジトリからlibcurl3とlibssl1.0.0を落としてきて
sudo cp /usr/lib/x86_64-linux-gnu/libcurl.so.4.5.0 /usr/lib/x86_64-linux-gnu/libcurl3.so.4.5.0
こんなふうにlibcurl3のバックアップアップを作って
sudo apt install libcurl
とか再度libcurl4をインストールして
あとは
alias swcurl3='sudo ln -sf /usr/lib/x86_64-linux-gnu/libcurl3.so.4.5.0 /usr/lib/x86_64-linux-gnu/libcurl.so.4'
alias swcurl4='sudo ln -sf /usr/lib/x86_64-linux-gnu/libcurl.so.4.7.0 /usr/lib/x86_64-linux-gnu/libcurl.so.4'
とかエイリアス作ってRavenna動かすときだけlibcurl3を参照するとか、LD_LIBRARYなんかを編集しとくとかで動かせる。あんまり動かす必要もないのだが。
参考にしたところ
・Andrea Bondavalli
https://github.com/bondagit
・Debian wiki pipewire
https://wiki.debian.org/PipeWire
・UbuntuにPipewireを入れてみる
https://zenn.dev/moru3_48/articles/e50c4ef9b0a5c8
・AES67ーEurorack
https://github.com/elektrofon/eurorack-to-aes67