訳あって、OBS Studioを最近使用していました。
ハードウェアとしてのオーディオミキサーという製品があるが、OBS Studioを使ってソフトウェアなオーディオミキサー(音声ミキサー)がいけるのではと思いました。
Youtube配信などで利用しているソフトウェアだし、「映像なし+音声のみ」でも行けるのかなと。
手持ちのUSBサウンドカードを使用して検証してみましたが、なんかいけそうと思ったので、アナログのUSBサウンドカードをまとめ買いしてオーディオミキサーを作ってみた。
結果的に行けそうということがわかったので、アナログではなくデジタルのオーディオミキサーにしてみようと思った。
その行動記録が下記に記載されている。
★1回目
★2回目
今回は3回目。
出力は下記が届いたら恒久設定予定ですが、今回のアイテムを使用して先行で環境を作成していきます。
前回までの課題。
・若干ディレイが発生する。
・デジタルとアナログが混在するため、GNDループノイズなどが混ざりこむ。
44.1KHz 16/24bit、48KHz 16/24bit 出力のみ対応
公式サイト
https://www.cubilux.com/products/usb-to-s-pdif-transmitter
下記、和訳。
- [USBポートからSPDIFオーディオを出力] - Cubilux USB SPDIFアダプターは、コンピューターのUSBポートを高音質光オーディオ信号送信機へと変換します。注:本製品はオーディオ信号の送信専用であり、オーディオ信号の受信/入力には対応していません。
- [ステレオ サウンドのみ、7.1/5.1 サラウンド サウンドには対応していません] - このバージョンは 7.1/5.1 サラウンド サウンド システムをサポートしておらず、ステレオ光オーディオ信号のみを送信できます。
- [48KHz/24ビットDAC] - このバージョンでは、ほとんどのタブレットやスマートフォンでプラグアンドプレイの互換性を確保するため、サンプルレートを48KHz、16/24ビット(44.1KHz、16/24ビットにも対応)に制限しています。48KHz/24ビットを超えるサンプルレートでオーディオ信号を送信すると、歪みや音切れが発生することにご注意ください。
- [耐久性のある設計] - 高級アルミ合金ケースと丈夫な編み込みコードにより、この USB A - SPDIF 光信号アダプターは、スタイリッシュでありながら耐久性に優れたステレオ オーディオ体験を実現します。
- [コンピューター専用] - コンピューター専用に設計されたこのオーディオコンバーターは、コンピューターでクリアなステレオサウンドを楽しめる頼れるパートナーです。(テレビ、車、その他のデバイスには適していません)
ノイズの無い音が出る
$ lsusb
Bus 002 Device 002: ID 0bda:4e27 Realtek Semiconductor Corp. USB SPDIF Adapter
$ lsusb -tv
/: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/11p, 480M
ID 1d6b:0002 Linux Foundation 2.0 root hub
|__ Port 002: Dev 002, If 0, Class=Audio, Driver=snd-usb-audio, 480M
ID 0bda:4e27 Realtek Semiconductor Corp.
|__ Port 002: Dev 002, If 1, Class=Audio, Driver=snd-usb-audio, 480M
ID 0bda:4e27 Realtek Semiconductor Corp.
|__ Port 002: Dev 002, If 2, Class=Human Interface Device, Driver=usbhid, 480M
ID 0bda:4e27 Realtek Semiconductor Corp.
入力デバイスは12Mで認識していたけれど、この出力デバイスは480Mで認識するのね。ちょっと不思議。
pactlというPulseAudioサウンドサーバーをコマンドラインから制御するツールで各種情報を調査する。
現在の認識状況(PipeWire にて 2chステレオ 48KHz/16bit で接続中)
$ pactl list short sinks
47 alsa_output.usb-Generic_USB_SPDIF_Adapter_202110200032-00.iec958-stereo PipeWire s16le 2ch 48000Hz SUSPENDED
カードの認識状態
$ pactl list cards short
42 alsa_card.usb-Generic_USB_SPDIF_Adapter_202110200032-00 alsa
カードの詳細情報
$ pactl list cards
カード #46
名前: alsa_card.usb-Generic_USB_SPDIF_Adapter_202110200032-00
ドライバー: alsa
モジュール: n/a
プロパティ:
api.acp.auto-port = "false"
api.acp.auto-profile = "false"
api.alsa.card = "1"
api.alsa.card.longname = "Generic USB SPDIF Adapter at usb-0000:00:14.0-2, high speed"
api.alsa.card.name = "USB SPDIF Adapter"
api.alsa.path = "hw:1"
api.alsa.use-acp = "true"
api.dbus.ReserveDevice1 = "Audio1"
device.api = "alsa"
device.bus = "usb"
device.bus-id = "usb-Generic_USB_SPDIF_Adapter_202110200032-00"
device.bus_path = "pci-0000:00:14.0-usb-0:2:1.0"
device.description = "USB SPDIF Adapter"
device.enum.api = "udev"
device.icon_name = "audio-card-analog-usb"
device.name = "alsa_card.usb-Generic_USB_SPDIF_Adapter_202110200032-00"
device.nick = "USB SPDIF Adapter"
device.plugged.usec = "4706089"
device.product.id = "0x4e27"
device.product.name = "USB SPDIF Adapter"
device.serial = "Generic_USB_SPDIF_Adapter_202110200032"
device.subsystem = "sound"
sysfs.path = "/devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2:1.0/sound/card1"
device.vendor.id = "0x0bda"
device.vendor.name = "Realtek Semiconductor Corp."
media.class = "Audio/Device"
factory.id = "14"
client.id = "37"
object.id = "45"
object.serial = "46"
object.path = "alsa:pcm:1"
alsa.card = "1"
alsa.card_name = "USB SPDIF Adapter"
alsa.long_card_name = "Generic USB SPDIF Adapter at usb-0000:00:14.0-2, high speed"
alsa.driver_name = "snd_usb_audio"
alsa.mixer_name = "USB Mixer"
alsa.components = "USB0bda:4e27"
alsa.id = "Adapter"
device.string = "1"
プロフィール:
off: オフ (sinks: 0, sources: 0, priority: 0, available: はい)
output:analog-stereo: アナログステレオ 出力 (sinks: 1, sources: 0, priority: 6500, available: はい)
output:iec958-stereo: デジタルステレオ (IEC958) 出力 (sinks: 1, sources: 0, priority: 5500, available: はい)
output:iec958-ac3-surround-51: デジタルサラウンド 5.1 (IEC958/AC3) 出力 (sinks: 1, sources: 0, priority: 300, available: はい)
pro-audio: Pro Audio (sinks: 2, sources: 0, priority: 1, available: はい)
有効なプロフィール: output:iec958-stereo
ポート:
analog-output: アナログ出力 (type: Analog, priority: 9900, latency offset: 0 usec, availability unknown)
プロパティ:
port.type = "analog"
card.profile.port = "0"
プロファイルの一部: output:analog-stereo
iec958-stereo-output: デジタル出力 (S/PDIF) (type: SPDIF, priority: 0, latency offset: 0 usec, availability unknown)
プロパティ:
port.type = "spdif"
card.profile.port = "1"
プロファイルの一部: output:iec958-stereo
下記のプロフィールを選ぶことが出来るらしい。
output:analog-stereo: アナログステレオ 出力
output:iec958-stereo: デジタルステレオ (IEC958) 出力
output:iec958-ac3-surround-51: デジタルサラウンド 5.1 (IEC958/AC3) 出力
デフォルトはアナログステレオが選択されたので、iec958-stereo: デジタルステレオ (IEC958) 出力の設定として固定化する。
下記の設定をファイル末尾に追加する。
$ vi ~/.config/pulse/default.pa
# Generic_USB_SPDIFのプロファイル優先度永続化
set-card-profile-overrides alsa_card.usb-Generic_USB_SPDIF_Adapter_202110200032-00 output:iec958-stereo
udevルール方式(念のための対応)
下記の設定をファイル末尾に追加する。
$ sudo vi /etc/udev/rules.d/90-pulseaudio-cubilux.rules
# Realtek Semiconductor Corp. USB SPDIF Adapter - IEC958優先
SUBSYSTEM=="sound", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="4e27", ENV{PULSE_PROFILE_SET}="output:iec958-stereo"
udevルール方式の方が優先度が高いため、「~/.config/pulse/default.pa」の設定は外してよいかもしれない。
今回のデバイスは出力のため、OBS Studio としての設定は不要。(事前に入力デバイスの設定が必要)
OS設定で、どの出力デバイスに音声を出力するかを選択させる必要がある。
本来は全ての出力デバイスを統合した combined_out を選択したいが、なぜか統合出来なかったので、今回は「デジタル出力(S/PDIF)-USB SPDIF Adapter」を選択することで、出力することが出来た。

とまぁ、オーディオ出力まではここまでの設定でよいが、 ここから先は遅延(ディレイ)との調整が必要不可欠。
OS理解度が必要になってくる
音声遅延を解消するうえで、OS理解度が必要になってくる。
生成AIによって問題解消は出来なくはない。
しかし、利用する本人が設定内容について理解していないと、不要な設定が多くなり不具合などを発生しかねない。
音を出力後、下記のコマンドを実行するとサンプルレート等の情報がわかるようになる。
$ cat /proc/asound/card0/pcm0c/sub0/hw_params
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 1024
buffer_size: 32768
そのなかで、 period_sizeとbuffer_sizeの数値が非常に重要ということがわかった。
これらの値が高ければ、音が途切れることは無い。しかし遅延(ディレイ)も大きくなる。
逆に値が小さければ、音が途切れる可能性が発生する。そのかわり遅延(ディレイ)の発生も少なくなる。
入力と出力の経路があるが、そのうちの片側のみの遅延は下記の計算式で出せる模様。
遅延 (ms)=period_size×1000 ÷rate
上記のサンプルレート等のperiod_sizeを当てはめると・・・
遅延 (ms)=1024×1000 ÷48000
遅延 (ms)=21.3ms
往復遅延(roundtrip): period基準で42.6ms(入力+出力)
この程度の遅延だが、体感的には100ms~200msだと思っていた。(ワイヤレスヘッドホンを使っているので若干遅延が増えている可能性有り)
特にゲームなどを行っていると違和感が半端ない。
とりあえず生成AIに聞きながら試行錯誤で暫定的に下記の設定を行った。
$ vi ~/.config/pipewire/pipewire.conf
context.properties = {
default.clock.rate = 48000
default.clock.allowed-rates = [ 48000 96000 ]
default.clock.quantum = 32
default.clock.min-quantum = 32
default.clock.max-quantum = 32
default.clock.quantum-limit = 128
default.clock.quantum-floor = 2
}
$ vi ~/.config/wireplumber/main.lua.d/50-alsa-config.lua
apply_properties = {
["audio.channels"] = 2,
["audio.format"] = "S16LE",
["audio.rate"] = 48000,
["audio.allowed-rates"] = "48000,96000",
["api.alsa.period-size"] = 32,
["api.alsa.period-num"] = 2,
["api.alsa.headroom"] = 0,
["api.alsa.start-delay"] = 0,
["latency.internal.rate"] = 0,
["latency.internal.ns"] = 0,
["session.suspend-timeout-seconds"] = 0, -- 0 disables suspend
},
$ systemctl --user restart pipewire pipewire-pulse wireplumber
正直 audio.allowed-rates の 96000 の設定は不要かなと思いつつ、後に使うかもしれないので入れ込んだ。
再出力すると下記にように変更された。
$ cat /proc/asound/card0/pcm0c/sub0/hw_params
access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 32
buffer_size: 64
遅延 (ms)=32×1000 ÷48000
遅延 (ms)=0.67ms
往復遅延(roundtrip): period基準で1.33ms(入力+出力)
ひとまず現在の暫定設定値をAIに評価してもらった。(遅延7~9ms設定)
やんわりとゲーミング/モニタリング向きの設定と言われた。
確かに稀にプチっと音がするので、処理が追いついていないことがあるのだと思われる。
下記は OBS Studio と関係は無いのですが、入力と出力のディレイについては共通知識ですし、やろうとしていることは一緒なので、それなりに参考になりました。
上記の動画の情報を参考に、AIにPipeWireはASIO-Guardと同等な設定方法を聞きつつ、最終的に低遅延寄りとして下記を設定することにした。(AIは安定寄りの推奨値を提案してきますが、採用することもあれば非採用もある)
$ vi ~/.config/pipewire/pipewire.conf
context.properties = {
default.clock.rate = 48000
default.clock.allowed-rates = [ 48000 96000 ]
default.clock.quantum = 128
default.clock.min-quantum = 64
default.clock.max-quantum = 256
default.clock.quantum-limit = 1024
default.clock.quantum-floor = 64
}
$ vi ~/.config/wireplumber/main.lua.d/50-alsa-config.lua
apply_properties = {
["audio.channels"] = 2,
["audio.format"] = "S16LE",
["audio.rate"] = 48000,
["audio.allowed-rates"] = "48000,96000",
["api.alsa.period-size"] = 128,
["api.alsa.period-num"] = 3,
["api.alsa.headroom"] = 128,
["api.alsa.start-delay"] = 0,
["latency.internal.rate"] = 128,
["latency.internal.ns"] = 0,
["session.suspend-timeout-seconds"] = 0, -- 0 disables suspend
},
$ systemctl --user restart pipewire pipewire-pulse wireplumber
修正した結果を何度もAIに確認してもらった。
そしてその最終結果の内容が下記。
結論として、一旦お墨付きを貰えた。(遅延12~15ms設定)
これが本当ならAI先生すげぇよ。現在は無料枠の利用なんですけど・・・。
とりあえず20分くらい視聴した感じ、一つ前の暫定設定と比べると音が鮮明になった!(解像度が上がった?)
暫定設定は低遅延重視のため、一部の音が捨てられていたようだ。そんな感じがする。
プチっと音は現段階で発生していない。
この設定状態で暫く様子を見てみようと思います。
問題がなければ、これで一旦完成かな。
次回は下記のアイテムを導入します。
最終的に光オーディオは入力デバイス3つ、出力デバイス1つとする予定です。
このレビューしたアイテムは他のPC側に接続します。
-
購入金額
2,490円
-
購入日
2025年12月28日
-
購入場所
Amazon.co.jp


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