Oracle Solaris のオーディオデバイスの場合は、USB 2.0、1.1、および 1.0 のみがサポートされ、USB 3.0 はサポートされません。また、再生専用、録音専用、または録音と再生用のデバイスがサポートされます。
Oracle Solaris USB オーディオのサポートは、ドライバのペアによって実装されます。
オーディオ制御ドライバ (usb_ac) - ユーザーアプリケーションの制御インタフェースを提供します。詳細は、usb_ac(7D) のマニュアルページを参照してください。
オーディオストリーミングドライバ (usb_as) - 再生中および録音中にオーディオデータメッセージを処理します。また、サンプル周波数と精度を設定し、usb_ac ドライバからの要求をエンコードします。詳細は、usb_as(7D) のマニュアルページを参照してください。
一部のオーディオデバイスでは、ソフトウェアが制御している音量を設定できます。この機能を管理するために、STREAMS モジュールの usb_ah がヒューマンインタフェースデバイス (HID) ドライバの先頭に置かれます。詳細は、usb_ah(7M) のマニュアルページを参照してください。
プライマリオーディオデバイスは、/dev/audio です。/dev/audio が USB オーディオを指していることを確認するには、mixerctl コマンドを使用します。例:
%$ mixerctl Device /dev/audioctl: Name = USB Audio Version = 1.0 Config = external Audio mixer for /dev/audioctl is enabled
接続された USB オーディオデバイスには、audioplay コマンドおよび audiorecord コマンドを使用して、/dev/sound/N デバイスリンクを介してアクセスします。
/dev/audio および /dev/sound/N デバイスは、スピーカー、マイク、またはコンボデバイスを参照できます。不正なデバイスタイプを参照すると、そのコマンドは失敗します。たとえば、マイクに対して audioplay を使用しようとすると、そのコマンドは失敗します。
ほとんどの Oracle Solaris オーディオアプリケーションでは、特定のデフォルトオーディオデバイスを選択できます。たとえば、audioplay や audiorecord の場合には、AUDIODEV シェル変数を設定するか、これらのコマンドに –d オプションを指定します。ただし、/dev/audio をオーディオファイルとしてハードコードしているサードパーティー製のアプリケーションでは AUDIODEV は動作しません。
USB に接続されたオーディオデバイスは、/dev/audio が使用されていない場合、自動的にプライマリオーディオデバイス /dev/audio となります。そのデバイスは、システムをリブートした後でも、プライマリオーディオデバイスのままです。USB オーディオデバイスが追加で差し込まれた場合、最後に差し込まれたデバイスがプライマリオーディオデバイスになります。
オンボードのオーディオと USB オーディオの間で /dev/audio を切り替える方法については、オンボードのオーディオデバイスに戻すときの問題および usb_ac(7D) を参照してください。
システムのプライマリオーディオデバイスをリストするには、/dev/audio デバイスリンクに対して ls -l コマンドを使用します。追加の USB デバイスを接続すると、コマンド出力に /dev/audio が接続されているデバイスが示されます。このデバイスは、自動的にプライマリオーディオデバイスになります。
たとえば、デフォルトでは、システムのオーディオはオンボードのオーディオです。
$ ls -l /dev/audio lrwxrwxrwx 1 root root 7 Feb 13 08:47 /dev/audio -> sound/0
システムに USB スピーカーを接続するとします。コマンド出力は次のようになります。
$ ls-l /dev/audio lrwxrwxrwx 1 root root 10 Feb 13 08:46 /dev/audio -> usb/audio0
別のオーディオデバイス (USB マイクロフォンなど) を追加すると、コマンド出力も変わります。
$ ls -l /dev/audio lrwxrwxrwx 1 root root 10 Feb 13 08:54 /dev/audio -> usb/audio1
システムに接続されているすべての USB オーディオデバイスをリストするには、すべてのオーディオデバイスのリンクに対して同じ ls コマンドを使用します。
$ ls -lt /dev/audio* lrwxrwxrwx 1 root root 7 Jul 23 15:46 /dev/audio -> usb/audio0 lrwxrwxrwx 1 root root 10 Jul 23 15:46 /dev/audioctl -> usb/audioctl0/ % ls -lt /dev/sound/* lrwxrwxrwx 1 root root 74 Jul 23 15:46 /dev/sound/1 -> ../../devices/pci@1f,4000/usb@5/hub@1/device@3/sound-control@0:... lrwxrwxrwx 1 root root 77 Jul 23 15:46 /dev/sound/1ctl -> ../../devices/pci@1f,4000/usb@5/hub@1/device@3/sound-control@0:... lrwxrwxrwx 1 root other 66 Jul 23 14:21 /dev/sound/0 -> ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audio lrwxrwxrwx 1 root other 69 Jul 23 14:21 /dev/sound/0ctl -> ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audioctl
複数のオーディオデバイスがありますが、/dev/usb/audio0 がプライマリオーディオデバイスになっています。
prtconf コマンドを使用して USB デバイス情報を表示することもできます。
$ prtconf . usb, instance #0 hub, instance #0 mouse, instance #0 keyboard, instance #1 device, instance #0 sound-control, instance #0 sound, instance #0 input, instance #0 .
USB オーディオデバイスのプライマリオーディオデバイスを変更するには、システムに USB デバイスを接続します。/dev/audio リンクは、そのデバイスを自動的に指します。オンボードのオーディオデバイスを使用するように戻すには、単純にその USB デバイスを取り外します。
ドライバを適用し、音量も上げているのに、USB スピーカから音が出ないことがあります。デバイスをホットプラグしても、この動作が変わらない場合があります。
サウンドを復元するには、USB スピーカーの電源を再投入します。
USB オーディオデバイスを差し込む時にコンソールにログインしていると、コンソールが /dev/* エントリの所有者になります。このため、ログインしたままであれば、そのオーディオデバイスを使用できます。ログインしていない場合は、root がデバイスの所有者となります。ただし、その後にコンソールにログインして USB オーディオデバイスにアクセスしようとすると、デバイスの所有権はコンソールに変更されます。詳細は、logindevperm(4) のマニュアルページを参照してください。
リモートログインでは、この動作は異なります。リモートからデバイスにアクセスを試みた場合、所有権は変更されないため、デバイスはセキュアです。たとえば、権限のないユーザーが、ほかの人の所有するマイクを通して行われる会話をリモートで聞くことはできません。
USB デバイスを取り外したあとに、/dev/audio が /dev/sound/0 を指していない場合があります。このエラーは、オンボードのオーディオデバイスをプライマリオーディオデバイスとして使用するようにシステムが戻っていないことを示しています。次のいずれかの回避方法を実行します。
システムをシャットダウンして、boot -r コマンドを使用します。
root として devfsadm –i コマンドを発行します。