試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Ubuntu上でサウンドカードをALSAのドライバで使用する際にデバイスファイル/dev/dspが存在しない件に関して(10.10時点)

既にまとめドキュメントでは少し触れているが、Ubuntuでは、バージョン10.10の時点ではALSAサウンドシステムのドライバを使用した環境において、OSSサウンドシステムにおけるデバイスファイル/dev/dspは、ディストリ標準のカーネルには存在しない。また、OSSのミキサー/dev/mixerについても同様となる。

バイスファイルを提供するエミュレーションドライバについて

上記デバイスファイル群はALSAサウンドシステムのPCMとミキサーそれぞれのOSSサウンドシステム向けのエミュレーションドライバにより提供されるもので、それぞれ

というカーネルモジュールが機能を提供する。
ディストリ標準のカーネルではこれらの機能が無効化されている。

$ egrep "SND_(PCM|MIXER)_OSS[ =]" /boot/config-2.6.35-25-generic
# CONFIG_SND_MIXER_OSS is not set
# CONFIG_SND_PCM_OSS is not set

背景についての想像

PulseAudioが音声の出力先として常に使われるようにしたいというディストリ側の意向があるような気がする。
PCM音声のOSSエミュレーションはPulseAudioのようなサウンドデーモンや他のALSAアプリケーションが音を出しているときに同時に音を出すこともできない仕様だが、PulseAudioが動作していれば色々なアプリケーションからの出力を合成して同時に鳴らすことができる上、/dev/dspを用いたOSSアプリケーションもpadspを用いることでPulseAudioを出力先とすることもできるため、そもそも必要がないと考えられているような気がする。
ミキサーのエミュレーションについてもALSAサウンドシステム向けのミキサーがあれば不要と考えられているのかもしれない。

対処

OSSアプリケーションの音声出力先を変更する

PulseAudioが動いていれば

padsp [OSSアプリケーションのコマンド行]

としてpadspからOSSアプリケーションを起動し、動いていなければ

aoss [OSSアプリケーションのコマンド行]

としてaossALSAサウンドシステムへ出力することもできる。メニュー項目にあるアプリケーションに対して適用したい場合はデスクトップなどにランチャ項目を作ってからコマンド部分の先頭にコマンド名を追加することになる。

自分でカーネルをビルドする場合

何らかの事情で上記の方法を用いずに従来のOSSエミュレーションの機能が用いたい場合はカーネルソースのパッケージをインストールして自分でビルド設定を変更し、ビルドしたものをインストールするという方法もあるが、他の目的でカーネルを自分でビルドするのでなければ上の方法で充分なので、おすすめはしない。ビルドする場合の手順は「Debian/Ubuntuでカーネルソースパッケージからカーネルパッケージを作成する(前半)」と「Debian/Ubuntuでカーネルソースパッケージからカーネルパッケージを作成する(後半)」を参照。
下はミキサー,PCMに加え、SequencerのOSSエミュレーションも含めて有効にするビルド設定例。

Device Drivers  --->
 <M> Sound card support  --->                                [CONFIG_SOUND]
  <M> Advanced Linux Sound Architecture  --->                [CONFIG_SND]
   <M> Sequencer support                                     [CONFIG_SND_SEQUENCER]
   <M> OSS Mixer API                                         [CONFIG_SND_MIXER_OSS]
   <M> OSS PCM (digital audio) API                           [CONFIG_SND_PCM_OSS]
   [*]  OSS PCM (digital audio) API - Include plugin system  [CONFIG_SND_PCM_OSS_PLUGINS]
   [*] OSS Sequencer API                                     [CONFIG_SND_SEQUENCER_OSS]

関連記事:

まとめドキュメント:

使用したバージョン: