GUIが軽量と言われる Lubuntu を使用して、OBS Studio を活用しながらソフトウェアミキサーの環境を作成していく試みです。
Lubuntuとは、Ubuntuから派生したディストリビューションで、デスクトップ環境はLXQtです。
今回は Lubuntu 24.04.3 (Noble Numbat) を使用しました。
先に25.10 (Questing Quokka)を試していますが、ドライバの問題で前バージョンに落とすことになりました。
25.10でのスクリーンショット画面が残ってますが、やることは変わりないのでそのままとしました。
事前にやってきたこと
Lubuntuを導入する前に、Ubuntu環境にOBS Studioを入れてソフトウェアミキサーの環境を作成済みです。
初回の1回目の構築はアナログオーディオを中心としてものでした。
2回目の構築からアナログではなくデジタルオーディオ(SPDIF)を中心で作成開始しています。
取っ掛かりはINPUT(入力)デバイスの導入です。
3回目の構築はOUTPUT(出力)デバイスの導入です。
4回目の構築はINPUT(入力)とOUTPUT(出力)を併せ持ったデバイスの導入です。
5回目の構築あたりからLubuntuを試しに入れて試行錯誤を行いました。
使用するデバイス
上記でも出していますが、一覧ベースで列挙します。
■Lubuntu側で使用するもの
・Cubilux SPDIF - USB A 入力アダプター 2つ
・Cubilux UCSTR-B3 USB - SPDIF 入力出力アダプター 1つ
・オーディオミキサーが稼働するPC(HP ProDesk 400 G2 Mini PC) 1つ
■Windows PCなどクライアント側で使用するもの
・Cubilux USB A – SPDIF 光 オーディオ変換アダプタ 2つ(それぞれの環境で1つずつ使用)
音声出力は3デバイスあります。
・WindowsPC1 → 上記のSPDIF変換アダプタを使用
・WindowsPC2 → 上記のSPDIF変換アダプタを使用
・[PS4 / Nintendo Switch] HDMI切り替え+HDMI → SPDIF変換
上記の出力を受け止める入力デバイス(INPUT)がCubiluxの3つ。
最終的にCubilux UCSTR-B3 USB - SPDIF 入力出力アダプターのOUTからワイヤレスヘッドホンに送ります。
それと同時に「オーディオミキサーが稼働するPC」のミニジャックへ出力します。
ミニジャックの出力先は下記です。
初期設定
Teraterm(コンソール)から色々と導入したいので、初期設定を行う。
Lubuntuのターミナルを起動し、下記のコマンドを実行する。
$ sudo apt update;sudo apt -y install openssh-server
$ sudo systemctl enable ssh
ip aなどのコマンドを使用して、現在のIPアドレスを確認しておく。
以降はTeratermから上記で確認したIPアドレスに接続する。
OBS Studioの導入
今回初めて導入するにあたり、手探りでやっていきました。
メニュー>システム・ツール>Discoverを起動します。
パッケージ導入のアプリだと思いますので、OBSで検索すると出てきます。
この時の最新バージョンは32です。
Ubuntu環境でも非公式ビルドの32バージョンを使用していました。
Lubuntu環境で色々と試しましたが依存関係地獄で大変なことになったため、結局は下記に落ち着きました。
$ sudo apt install flatpak
$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
$ flatpak install flathub com.obsproject.Studio
Flatpakについて下記に説明がそれなりにありました。簡単に説明するなら、「環境を汚すこと無く仮想環境内でGUIアプリを実行させる」ためのものでしょうか。 Dockerが近いですが、それより緩いです。
https://qiita.com/_masa_u/items/07ddbacd3ff90bdc1b52
導入が出来たらOSの再起動を行う。
メニューの「サウンドとビデオ」の「OBS Studio」を右クリックして「デスクトップに追加する」を選択。この操作でデスクトップにショートカットを作成します。
OBS Studioを起動すると下記のウィザードが表示されます。
今回は音声のみの対応なので、「仮想カメラのみ使用する」でよいと思いました。
OBS Studio も「音声のみ」の利用だなんて想定しないでしょうwww
初期画面です。デフォルトは映像プレビューが有効になっていますが、使わないので無効化します。
PulseWire と サウンドカード の設定
デフォルトは下記のように PipeWire がインストールされています。
$ pactl info
サーバー名: PulseAudio (on PipeWire 1.4.7)
PipeWire はPulseAudio互換として動作しますが、PulseAudioの導入は不要です。
PulseAudioをあえて入れようとするとPipeWire が削除されてしまいます。
必要なパッケージの導入を行います。
$ sudo apt update && sudo apt install \
pipewire \
pipewire-pulse \
pipewire-audio-client-libraries \
pulseaudio-utils \
wireplumber
PipeWire の設定を施す。
$ mkdir ~/.config/pipewire
$ cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/pipewire.conf
$ vi ~/.config/pipewire/pipewire.conf
context.properties = {
default.clock.rate = 48000
default.clock.allowed-rates = [ 48000 ]
default.clock.quantum = 256
default.clock.min-quantum = 256
default.clock.max-quantum = 512
default.clock.quantum-limit = 1024
default.clock.quantum-floor = 256
}
$ mkdir -p ~/.config/wireplumber/main.lua.d/
$ wget https://raw.githubusercontent.com/k0d4/pipewire96/refs/heads/main/50-alsa-config.lua -O ~/.config/wireplumber/main.lua.d/50-alsa-config.lua
$ vi ~/.config/wireplumber/main.lua.d/50-alsa-config.lua
alsa_monitor.rules = {
{
matches = {
{
-- Matches all sources.
{ "node.name", "matches", "alsa_input.*" },
},
{
-- Matches all sinks.
{ "node.name", "matches", "alsa_output.*" },
},
},
apply_properties = {
--["node.nick"] = "My Node",
--["node.description"] = "My Node Description",
--["priority.driver"] = 100,
--["priority.session"] = 100,
--["node.pause-on-idle"] = false,
--["monitor.channel-volumes"] = false
["resample.quality"] = 15,
["resample.disable"] = false,
--["channelmix.normalize"] = false,
--["channelmix.mix-lfe"] = false,
["channelmix.upmix"] = true,
["channelmix.upmix-method"] = "psd", -- "none" or "simple"
--["channelmix.lfe-cutoff"] = 150,
--["channelmix.fc-cutoff"] = 12000,
--["channelmix.rear-delay"] = 12.0,
--["channelmix.stereo-widen"] = 0.0,
--["channelmix.hilbert-taps"] = 0,
--["channelmix.disable"] = false,
--["dither.noise"] = 0,
--["dither.method"] = "none", -- "rectangular", "triangular" or "shaped5"
["audio.channels"] = 2,
["audio.format"] = "S16LE",
["audio.rate"] = 48000,
["audio.allowed-rates"] = "48000",
["audio.position"] = "FL,FR",
["api.alsa.period-size"] = 256,
["api.alsa.period-num"] = 3,
["api.alsa.headroom"] = 256,
["api.alsa.start-delay"] = 0,
--["api.alsa.disable-mmap"] = false,
--["api.alsa.disable-batch"] = false,
--["api.alsa.use-chmap"] = false,
--["api.alsa.multirate"] = true,
["latency.internal.rate"] = 256,
["latency.internal.ns"] = 0,
--["clock.name"] = "api.alsa.0"
["session.suspend-timeout-seconds"] = 0, -- 0 disables suspend
},
},
}
$ systemctl --user restart pipewire pipewire-pulse wireplumber
デバイスを16bitに強制する。
$ mkdir ~/.config/wireplumber/wireplumber.conf.d/
$ cat > ~/.config/wireplumber/wireplumber.conf.d/50-alsa-format.conf << 'EOF'
wireplumber.profiles = {
["alsa_card.*"] = {
audio.format = "S16LE"
}
}
EOF
$ systemctl --user restart pipewire pipewire-pulse wireplumber
OSを再起動する。
Loopbackデバイスの追加を行う。
$ sudo apt install pulseaudio-utils
# Loopbackデバイスを追加
$ sudo sh -c 'echo snd-aloop > /etc/modules-load.d/snd-aloop.conf'
# 即時反映
$ sudo modprobe snd-aloop
# プロファイルをpro-audioに変更
$ pactl set-card-profile alsa_card.platform-snd_aloop.0 pro-audio
# snd_aloop の source を確認する
$ pactl list short sources | grep input | grep snd_aloop
62 alsa_input.platform-snd_aloop.0.pro-input-0 PipeWire s16le 2ch 48000Hz SUSPENDED
63 alsa_input.platform-snd_aloop.0.pro-input-1 PipeWire s16le 2ch 48000Hz SUSPENDED
# デフォルト source に設定
$ pactl set-default-source alsa_input.platform-snd_aloop.0.pro-input-0
一旦下記のようにソース(入力)がsnd_aloopデバイスとして設定されることを確認する。
$ pactl info
デフォルトソース: alsa_input.platform-snd_aloop.0.pro-input-0
プロファイルの固定化を行う。
まず手動でpro-audioプロファイルに即時切り替え(一時的)する。
当初、調査を行っていたときは iec958 プロファイルを使用していたが、pro-audioだと制限がなくなると思い、こちらを使用するようにした。
$ pactl set-card-profile alsa_card.usb-0c76_Cubilux_SPDIF_ReceiverSolid-00 pro-audio
$ pactl set-card-profile alsa_card.usb-0c76_Cubilux_SPDIF_ReceiverSolid-00.2 pro-audio
$ pactl set-card-profile alsa_card.usb-SAVIAUDIO_USB_SPDIF_TX_RX_Adapter-01 pro-audio
設定ファイルを作成する。
$ vi ~/.config/pulse/default.pa
.include /etc/pulse/default.pa
# Cubilux SPDIFのプロファイル優先度永続化
set-card-profile-overrides alsa_card.usb-0c76_Cubilux_SPDIF_ReceiverSolid-00 pro-audio
set-card-profile-overrides alsa_card.usb-0c76_Cubilux_SPDIF_ReceiverSolid-00.2 pro-audio
# SAVIAUDIO USB SPDIF TX/RX Adapterのプロファイル優先度永続化
set-card-profile-overrides alsa_card.usb-SAVIAUDIO_USB_SPDIF_TX_RX_Adapter-01 pro-audio
# PCのサウンドデバイスのプロファイル優先度永続化
set-card-profile-overrides alsa_card.pci-0000_00_1f.3 pro-audio
# snd_aloopのプロファイル優先度永続化
set-card-profile-overrides alsa_card.platform-snd_aloop.0 pro-audio
サービスを再起動する。失敗するのであればOSを再起動する。
$ systemctl --user restart pipewire pipewire-pulse wireplumber
proになっていることを確認する。
$ pactl list short sinks
51 alsa_output.usb-SAVIAUDIO_USB_SPDIF_TX_RX_Adapter-01.pro-output-0 PipeWire s16le 2ch 48000Hz RUNNING
55 alsa_output.pci-0000_00_1f.3.pro-output-0 PipeWire s16le 2ch 48000Hz RUNNING
56 alsa_output.pci-0000_00_1f.3.pro-output-3 PipeWire s16le 2ch 48000Hz RUNNING
57 alsa_output.pci-0000_00_1f.3.pro-output-7 PipeWire s16le 2ch 48000Hz RUNNING
58 alsa_output.pci-0000_00_1f.3.pro-output-8 PipeWire s16le 2ch 48000Hz RUNNING
60 alsa_output.platform-snd_aloop.0.pro-output-0 PipeWire s16le 2ch 48000Hz SUSPENDED
61 alsa_output.platform-snd_aloop.0.pro-output-1 PipeWire s16le 2ch 48000Hz SUSPENDED
109 combined_out PipeWire float32le 2ch 48000Hz RUNNING
$ pactl list short sources | grep input
52 alsa_input.usb-SAVIAUDIO_USB_SPDIF_TX_RX_Adapter-01.pro-input-0 PipeWire s16le 2ch 48000Hz RUNNING
53 alsa_input.usb-0c76_Cubilux_SPDIF_ReceiverSolid-00.pro-input-0 PipeWire s16le 2ch 48000Hz RUNNING
54 alsa_input.usb-0c76_Cubilux_SPDIF_ReceiverSolid-00.2.pro-input-0 PipeWire s16le 2ch 48000Hz RUNNING
59 alsa_input.pci-0000_00_1f.3.pro-input-0 PipeWire s16le 2ch 48000Hz SUSPENDED
62 alsa_input.platform-snd_aloop.0.pro-input-0 PipeWire s16le 2ch 48000Hz SUSPENDED
63 alsa_input.platform-snd_aloop.0.pro-input-1 PipeWire s16le 2ch 48000Hz SUSPENDED
下記のシェルを実行するとサンプルレート等の情報がわかるようになる。
pcm0cが入力、pcm0pが出力を意味する。
# 初回のシェル作成
$ cat > ~/asound_card_info.sh << 'EOF'
#/bin/bash
echo "--------------------"
for item in `find /proc/asound -name card[0-9] | sed -e "s/.*\///g"`; do
for dev in `find /proc/asound/${item} -type d | grep sub`; do
echo "${dev}"
grep "^name:" ${dev}/info
cat ${dev}/hw_params
echo "--------------------"
done;
done;
EOF
# 実行権の付与
$ chmod +x asound_card_info.sh
# 以降は下記のみ実行
$ ./asound_card_info.sh
--------------------
/proc/asound/card0/pcm0c/sub0
name: Loopback PCM
closed
--------------------
/proc/asound/card0/pcm0p/sub0
name: Loopback PCM
closed
--------------------
/proc/asound/card0/pcm1c/sub0
name: Loopback PCM
closed
--------------------
/proc/asound/card0/pcm1p/sub0
name: Loopback PCM
closed
--------------------
/proc/asound/card1/pcm0c/sub0
name: USB Audio
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 256
buffer_size: 768
--------------------
/proc/asound/card1/pcm0p/sub0
name: USB Audio
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 256
buffer_size: 768
--------------------
/proc/asound/card2/pcm0c/sub0
name: USB Audio
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 128
buffer_size: 384
--------------------
/proc/asound/card3/pcm0c/sub0
name: USB Audio
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 128
buffer_size: 384
--------------------
/proc/asound/card4/pcm0c/sub0
name: ALC221 Analog
closed
--------------------
/proc/asound/card4/pcm0p/sub0
name: ALC221 Analog
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 256
buffer_size: 768
--------------------
/proc/asound/card4/pcm3p/sub0
name: HDMI 0
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 256
buffer_size: 768
--------------------
/proc/asound/card4/pcm7p/sub0
name: HDMI 1
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 256
buffer_size: 768
--------------------
/proc/asound/card4/pcm8p/sub0
name: HDMI 2
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 256
buffer_size: 768
--------------------
出力情報をAIに渡す場合、hw_paramsの情報としてあげたほうがよいかもしれない。
ここでメモとして残しておく。
Lubuntu 25.10を使用した際に下記の状態になっていた。
$ pactl list short sinks
60 alsa_output.usb-SAVIAUDIO_USB_SPDIF_TX_RX_Adapter-01.iec958-stereo PipeWire s24le 2ch 48000Hz SUSPENDED
62 alsa_output.usb-0d8c_USB_Sound_Device-00.iec958-stereo PipeWire s16le 2ch 48000Hz SUSPENDED
66 alsa_output.pci-0000_00_1f.3.analog-stereo PipeWire s32le 2ch 48000Hz SUSPENDED
68 alsa_output.platform-snd_aloop.0.analog-stereo PipeWire s32le 2ch 48000Hz SUSPENDED
設定情報として16bit強制しているのに、24bit設定となっている。
また、レイテンシ(遅延)設定も1024で強制されていた。
恐らくこれは読み込まれたドライバによってハードウェア強制させてしまっているためだと思われる。
AIの回答としては強制される値に全て統一することだった。
別の方法としてドライバを古いバージョンにすればよいかもしれないが、調査時点でのやり方が不明のため、単純にOSバージョンを落とせばよいと考えた。
このため、Lubuntu 24.10 を使用する流れとなった。(根本解決になっていないので問題を先送りにした)
combined_out の設定と OBS Studio の自動起動の設定
combined_out の設定と OBS Studio の自動起動の設定を行う。
combined_outは現在出力される対象から動的に組み込む。
$ cat > startApp.sh << 'EOF'
#!/bin/sh
# combined_out 追加
DEV_LIST=`pactl list short sinks | grep alsa_output | grep -v snd_aloop | awk '{print $2}'`
DEV="pactl load-module module-combine-sink sink_name=combined_out slaves="
for item in ${DEV_LIST}; do DEV=${DEV}${item},; done;
echo "${DEV}"
${DEV}
pactl set-default-sink combined_out
sleep 1
# run OBS Studio
/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=obs com.obsproject.Studio
EOF
$ chmod +x startApp.sh
メニューの「LXQt設定」の「セッション設定」を起動する。
①自動起動を選択する。
②「追加」をクリックする。
③名称に「Startup」など適当な文言を入れる。コマンドに上記で作成したシェルのパスを指定する。「システムトレイの起動を待つ」にチェックする。「OK」ボタンをクリックする。
(下記は25.10でのスクリーンショットです)
Lubuntuを起動したときに自動ログインを設定しておく。
OSインストール時に設定し忘れた場合に下記設定が必要となる。
$ sudo vi /etc/sddm.conf
[Autologin]
User=<自動ログインするユーザー名>
Session=Lubuntu
これらの設定が完了していれば、OS起動時に OBS Studio が起動状態となり、スタンバイ完了の状態となる。
VNCによるコンソール表示
PC上のGUIコンソール画面をVNCに表示出来たら、物理的なディスプレイに接続しなくてもよくなります。
x11vncと必要なパッケージをインストールする。
$ sudo apt update;sudo apt install -y x11vnc net-tools
VNCパスワードを設定する。
$ x11vnc -storepasswd
下記コマンドを実行後、別PCからVNC接続可能かを確認する。確認が終わったらCtrl+Cなどで抜ける。
$ x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -rfbport 5900 -shared
ログイン時のシェルに組み込む
$ vi startApp.sh
#!/bin/sh
# x11vnc
x11vnc -display :0 -auth guess -forever -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -o %HOME/.x11vnc.log &
# combined_out 追加
DEV_LIST=`pactl list short sinks | grep alsa_output | grep -v snd_aloop | awk '{print $2}'`
DEV="pactl load-module module-combine-sink sink_name=combined_out slaves="
for item in ${DEV_LIST}; do DEV=${DEV}${item},; done;
echo "${DEV}"
${DEV}
pactl set-default-sink combined_out
sleep 1
# run OBS Studio
/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=obs com.obsproject.Studio
OSを再起動させて、VNCからログインする。
問題なく表示出来ることを確認した。
以降はVNCから音量調整が可能となった。
-
購入金額
0円
-
購入日
2026年01月10日
-
購入場所
Lubuntu公式サイト









ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。