本日は2021年8月29日です。 8月も終わりが近いけれど、まだまだ暑いです。

Toshiba Dynabook R634/MにインストールしたNomadBSD(FreeBSD 13.0-RELEASE + Openbox)は相変わらずクールで絶好調です。 ハードドライブのバックアップ体制も構築して、ますますお気に入りです。
今回は、このFreeBSDでUSBスピーカーを使う方法を確認しました。 どうせすぐ忘れるのでブログに書いておきます。

なぜこんなことを始めたかというと、少なくともうちの組み合わせでは内蔵のスピーカーからの音量が物足りないのです。
Dynabook R634/Mは挙動も安定していてあまり発熱もひどくなく、FreeBSD環境に好適なのですが。(余談ですが、ヒノトリホンヤクの代表が開業して直後に青色申告の記帳用に仕方なく買った中古のDynabook RX3 + Windows 10は、俗に言う「爆熱」「クーリングファン常に爆音高速回転」です。 信じられないくらいに排熱用クーリングファンがうるさく回り続けます。)
では、Dynabook R634/Mで別売りのUSBスピーカーを使えないか、試します。

別にFreeBSDなラップトップPCを使ってWeb会議に出席しようとか、そんな大それたことを計画しているわけではないのですが……。

Bluetoothオーディオという選択肢もあるのですが、たぶんFreeBSD 13.0-RELEASEではまだBluetoothのサポートは弱く、イバラの道らしいので当面は回避します。 気力が充実してきたら、Bluetoothオーディオを試します。


最初にUSBオーディオのドライバをロードします。(釈迦に説法で恐縮ですが、suしてrootになってからですよ。)

# kldload snd_uaudio.ko

ドライバをロードしたら、スピーカーをつなぐ。 順番を逆にするとダメだそうです。 FreeBSDがハードウェアを認識できないんでしょうか。

スピーカーを繋ぐ前にサウンドデバイスのリストを取ると、↓ こんな感じです。

root@NomadBSD:/home/hinotori-honyaku # cat /dev/sndstat
Installed devices:
pcm0: <Intel Haswell (HDMI/DP 8ch)> (play)
pcm1: <Intel Haswell (HDMI/DP 8ch)> (play)
pcm2: <Realtek ALC283 (Analog)> (play/rec) default
pcm3: <Realtek ALC283 (Left Analog Headphones)> (play)
No devices installed from userspace.

まだUSBスピーカーはデバイスリストになく(物理的に接続していないのだから当然)、標準のオーディオ出力はpcm2の内蔵アナログオーディオ→内蔵スピーカーです。

では、ドライバをロードしたことだし、USBケーブルをつなぎましょう。

はい、つなぎました。

dmesgコマンドで、USBスピーカーを認識できているか確認。

root@NomadBSD:/home/hinotori-honyaku # dmesg
---<<BOOT>>---
Copyright (c) 1992-2021 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
    The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 13.0-RELEASE-p3 #0: Tue Jun 29 19:46:20 UTC 2021
    root@amd64-builder.daemonology.net:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64
FreeBSD clang version 11.0.1 (git@github.com:llvm/llvm-project.git llvmorg-11.0.1-0-g43ff75f2c3fe)
VT(vga): text 80x25
CPU: Intel(R) Core(TM) i3-4030U CPU @ 1.90GHz (1895.65-MHz K8-class CPU)
  Origin="GenuineIntel"  Id=0x40651  Family=0x6  Model=0x45  Stepping=1
 
(-----------------------中略---------------------)

ugen0.3: <C-Media INC. C-Media USB Audio> at usbus0
uaudio0 on uhub1
uaudio0: <C-Media INC. C-Media USB Audio, class 0/0, rev 1.10/0.10, addr 2> on usbus0
uaudio0: Play[0]: 48000 Hz, 2 ch, 16-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 44100 Hz, 2 ch, 16-bit S-LE PCM format, 2x8ms buffer.
uaudio0: No recording.
uaudio0: No MIDI sequencer.
pcm4: <USB audio> on uaudio0
uaudio0: No HID volume keys found.

 

認識できています。 USBスピーカーはpcm4になったようです。

root@NomadBSD:/home/hinotori-honyaku # cat /dev/sndstat
Installed devices:
pcm0: <Intel Haswell (HDMI/DP 8ch)> (play)
pcm1: <Intel Haswell (HDMI/DP 8ch)> (play)
pcm2: <Realtek ALC283 (Analog)> (play/rec) default
pcm3: <Realtek ALC283 (Left Analog Headphones)> (play)
pcm4: <USB audio> (play)
No devices installed from userspace.

 

ほらね。 pcm4で再生対応。

面倒なのですが、オーディオの標準出力デバイスをUSB audioにします。
pcm4なので、ユニットの番号は4です。
(面倒なのが嫌いな人は、FreeBSDで遊んだりしてはいけません。macOSだけを使いましょう。)

root@NomadBSD:/home/hinotori-honyaku # sysctl hw.snd.default_unit=4
hw.snd.default_unit: 2 -> 4
root@NomadBSD:/home/hinotori-honyaku # 

 

これで、ちゃんとUSBスピーカー(Elecomの安いサイコロ型USBスピーカー)から音が出ました。 Dynabook R634/Mの内蔵スピーカーよりも径が大きくて音量も大きくて音圧もあって良いです。

さて、恒例のドヤリングとエビデンス開帳と行きますか。スクリーンショットではわかりにくいですが、USBオーディオから音が出ています。 
FreeBSDでUSBスピーカーを動かしたので大成功(1)
FreeBSDでUSBスピーカーを動かしたので大成功(2)
FreeBSDでUSBスピーカーを動かしたので大成功(3)

別のUSBスピーカーがほしくなってしまいますね。また密林で…買ってしまいそう。

ところで、

外す時はまず

# kldunload snd_uaudio.ko

を実行してドライバをアンロードしてから外す。

というお作法があるのだそうです。
というお作法があるとどこかで読んだのですが、うちの環境では、上記の手順を踏んでもコマンドプロンプトが帰ってこなかったので失敗しました。

別に、そのままFreeBSDをシャットダウンすればいいのですが。

それでは、皆さん良きFreeBSDライフを。