家の開発環境にUbuntuPCを追加しました。
表題の通りですが、ライブコーディングや開発ができる環境として、
Ubuntu入れたPCを追加で用意しました。
以下にその構成や簡単な準備方法を備忘録として記載します。
簡単な構成図
何がしたかったか
以下作業がしたかったのです。
- Linux環境でのプログラム開発を行いたい
- オーディオ周りのプログラム開発を行いたい
- ライブコーディングを行いたい(Linuxのほうが環境が整ってる)
- ついでにゲーム開発の展示用PCが欲しい
今まで、以下のことを行ってました。
- Windows環境でLinuxのソフトを動かすためにソースコード移植
- MSYSやMinGWでビルドできるようにする
- Windows Subsystem for LinuxでLinux環境を動かす
しかし、いずれも満足いくものができずに終わってしまいました。
特にLinux側で動くプログラムの挙動を知らずにWindowsで動かすなんてのは動作確認が難しく、
いつも「機能は最低限あればいいや」とばかりに機能削ったりしてたので、
割と動作がバギーな状態が続いてました。
また、自分の使ってみたい(開発したい)プログラムがだいたいLinux環境を想定しているため、
それだったらもうLinux環境を用意したほうが早くね?と思いました。
ちなみにWindows Subsystem for Linuxももう少しするとオーディオ対応がされるみたいですけど、ちょっと待てませんでした(汗
あとはせっかくPCを用意するので他用途(主にゲーム開発)でも使えたほうがいいだろう、と考え、
展示を想定してノートPCにしました。
合わせて、ゲーム開発はWindowsで行うので、Windowsも起動できる状態にすることを考えました。
PCは日立のCF-SZ6。
中古でも割と高めだし一部キーがブッ壊れてましたが常用には問題ないくらいなので、
これでよし!として購入しちゃいました。
環境構築
以下、こんな設定したよーってのを簡単に書いていきます。
事前準備
パーティションを分割、全体で256GBなのを半分くらいに分割。
Windows側でパーティションを切って、Linux側で余剰の領域をフォーマットして対応。
Windows/Linuxで共用のスペースを切っても良かったんですが、ややこしいことしたくないので、
完全にOSごとにディスク領域を分断してます。
インストールOS
Ubuntuにしました。
Ubuntu 20.04.1LTS
今のインストーラは勝手にデュアルブートしてくれますし、対応OSも広く、
以前インストールしたときよりだいぶ楽に環境を用意することができました。
おかげですぐ作業に移ることができました。
USBにインストーラを書き込んで、標準的なソフトウェアインストールで対応。
最小構成にするとGUIが出てこないので準備に時間がかかることもあり、断念。
操作・映像出力
さて、プログラム開発ですが、いちいち開発するためにノートPC引っ張ってくるのも面倒なので、
常時起動+母艦PCからコントロールできるようにしました。
常時起動の設定は以下。
- フタを閉じてもスリープ(サスペンド)しないようにした
参考資料
https://nisshingeppo.com/ai/ubuntu-nonsleep/ - 放置からスリープする設定を解除
参考資料
画面がロックされるのが早すぎます – Ubuntu 18.04 LTS デスクトップガイド改 (sicklylife.jp)
次は母艦PCからコントロールする方法です。
参考資料
RDP、VNC、SSH、Web管理……リモートコンソールをまとめると「Terminals」に:ITプロ必携の超便利システム管理ツール集(10) – @IT (atmarkit.co.jp)
ただ、実質VNC一択です。
SSHでも問題はないんですが、デスクトップ環境を使うほうが楽ですし、
そもそもソフトでGUIを使うことになったらデスクトップを使うことになるので、
それであれば初めからデスクトップ環境で接続を確認するほうがいいです。
ということで、Ubuntu側でVNCサーバプロセスを起動させて、固定のURIにアクセスできるようにしました。
(一応キーを設けて簡単には接続できないようにしてます)
スクショ;
VNCクライアントソフトは、UltraVNCを利用。
機能としては申し分ありません。
機能の構成上レスポンスがとっても遅くなりますが、画像転送(デスクトップの画面を母艦PC側に転送してくる)の品質を思いっきり下げることで対応。
JPGのレート変更が限界と思料(256色とかも検証したが色調の関係で断念)。
ということで、リモートコントロールとデスクトップ画面出力ができるようになってます。
(少しレスポンスは遅いですが、キーボード入力には問題なさそうです)
音声
さて、あとは音声です。
ライブコーディングで音声出力が関わってくるので、ここは外せません。
常套手段なのは、専用アプリでデーモンを起動してアプリ同士でコネクションを行う方法。
この方法だと音声の劣化もなく、ネットワークが接続できれば音声通信が可能になります。
ただ、以下の点を理由に断念してます。
- ネットワーク環境に負荷かかり速度低下の懸念
(家の中で無線利用しているデバイスが多すぎる) - サウンドデーモンのWindows対応が不完全なケースがあり、原因の切り分けに時間がかかる
- 録音環境の画一化
1.については、環境の問題ですね。
デーモン同士で通信する場合、ネットワーク環境が関わってくるのですが、
負荷がかかった場合発音が途切れる可能性があります。
また、デーモンの疎通もバッファ単位で転送するため、どうしても遅延が発生します。
以上の点から家の環境においてデーモンを利用するのはあまりメリットがないなと判断してます。
(これが完全に別の場所とか音楽再生するだけとかであればアリだと思うんですが)
2.は母艦PCの構成が絡んできます。
母艦PCはWindows10なので、LinuxのソフトとWindows用ソフトで通信を行う形になります。
環境特有の不具合が発生した場合、どちらの環境が悪いのか切り分けを行うのに時間がかかります。
(実際別のソフトをいじっていた時Windows版特有の不具合に遭遇し、解決に時間がかかってました)
ということでトラブル回避のためにポーティングしたソフトを使うのを避けました。
3.は環境の問題+ソフトウェアの仕様等に関わります。
今の所録音・録画についてはソフトを決め打ちして使っているのですが、
一部ソフトではPC内部での録音についてルーティングがうまくいかないケースがあります。
2.において内部ルーティング(内部の音を録音できるようにループバック機能を使う)を行った上で出力の形になるのですが、その場合スペクトラムアナライザーや録音のルーティングについてやり直しになる可能性を考慮し、意図的に避けました。
また、自分の環境ではRoland Integra-7というデバイスを利用しており、
このデバイスを利用してハードシンセやその他の音を録音して母艦PCに流してます。
ライン入力にすれば上記のハードシンセと同様のルーティングで録音ができるため、既存環境をそのまま利用できる形になります。
以上の環境を利用するため、ノートPCにUSB-DACを接続し、そこからライン入力を行っております。
これ買いましたが、Ubuntu上でも認識されており問題なさそうです。
Amazon | Signstek Audio USB-DAC ヘッドフォンアンプ/コンパクトでUSBケーブル付き | Signstek | ヘッドホンアンプ
音声出力については上記対応のおかげで遅延もなく劣化も割と少ないので安心です。
まとめ
- ubuntuPCを用意した
- 母艦PCからコントロールできるようにした
- 音声出力も遅延なくできるようにした
現在常時起動してライブコーディングしたりしてます。