LinuxのサウンドサブシステムはALSAが有名ですが、ひと昔前まではOpen Sound Systemも使われていました。Ubuntu日本語フォーラムでもいくつか投稿があったため、今回は、UbuntuでOpen Sound Systemを使う方法を解説していきます。
Open Sound Systemとは
Open Sound SystemはUNIXベースのプラットフォームで使うことができるサウンドサブシステムで、現在はフィンランドの4 Front Technologiesが開発をしています。Open Sound Systemは一時期、ライセンスを制限したプロプライエタリなコードとしてリリースされていたため[1] 、これを嫌ったLinuxコミュニティはALSAの開発を進めました。そのため、現在のLinuxではALSAが主流となっています。いずれもハードウェアを直接制御するドライバ(カーネルモジュール)を含むため、「 2種類の異なるドライバが存在する」と考えると良いでしょう。
Open Sound Systemの最新はバージョン4です。4 Front Technologies社のウェブサイトで、2009年10月25日付けの対応デバイスの一覧表 を確認できます。ALSAも対応しているサウンドデバイスがほとんどですが、プロプライエタリ時代の名残りか、Open Sound Systemでしか使うことのできないデバイスもあります。また注意点として、Open Sound Systemのバージョン4はMIDI機能[2] をまだ実装していないため、MIDI機能を使いたい場合はバージョン3を使う必要があります。
なお、Open Sound Systemの略称はOpen Source Softwareと同じ「OSS」なので、本稿では混同を防ぐために、少々長いですがOpen Sound Systemと記述していきます。
[2] MIDIとは、どの音を、どういうタイミングで、どれぐらいの音量で出すのかという演奏情報とその規格です。この情報をやりとりすることで、遠隔地にある電子楽器を演奏させたり、複数の電子楽器で演奏を同期させたり、楽器のパラメータをコントロールしたりすることができます。
UbuntuとOpen Sound System
Lucidまでのリリースでは、カーネルイメージにOpen Sound Systemのバージョン3が含まれています。デフォルトではALSAが利用されるよう、Open Sound Systemに関連するモジュールはブラックリスト(読み込まないカーネルモジュールのリスト)に列挙されており、あくまで「含まれているだけ」の状態で、一切読み込まれないように設定されています。
ALSAのカーネルモジュールを無効にしてOpen Sound Systemのカーネルモジュールを有効にするには、端末で以下を実行し、デフォルトのサウンドシステムとしてOSSを選択します。
sudo dpkg-reconfigure linux-sound-base
図1 dpkg-reconfigureによるlinux-sound-baseの設定変更画面
これにより、カーネルモジュールのブラックリストからOpen Sound Systemが除外されます。その代わりにALSAが登録され[3] 、オペレーティングシステムのブート時にロードされなくなります。
Lucid以降のリリースでは、パッケージ「oss4-dkms」と「oss4-base」でOpen Sound Systemのバージョン4をインストールすることができます。DKMSは、ドライバのソースパッケージから、自動的にドライバのバイナリ(カーネルモジュール)をインストールするための仕組みです。このパッケージをインストールすると、DKMSによってカーネルモジュールが自動で作成されるほか、ALSAやOpen Sound Systemのバージョン3をブラックリストに登録する設定が行われます[4] 。そのため、dpkg-reconfigureを実行する必要はありません。
図2 Synapticでのoss4関係パッケージの一覧
しかしLucidのパッケージ「oss4-dkms」には、既知のバグ があり、そのままではインストールに失敗します。幸いなことにこのバグ報告にはパッチが登録されており、インストール可能なパッケージを作ることができます。
dpkg-reconfigureやパッケージ「oss4-dkms」をインストールするなどして設定を完了したら、システムを再起動します。そうすると、Open Sound Systemが使えるようになります。Open Sound Systemのサンプル音声を出力する場合はコマンド「osstest」を、トラブルシュートにはコマンド「ossinfo」を実行して情報を取得してください。
[3] /etc/modprobe.d/blacklist-alsa.confが作成され、/lib/linux-sound-base/noALSA.modprobe.confに対してリンクが張られます。ALSAをサブシステムに選択した場合は、/etc/modprobe.d/blacklist-oss.confが作成され、/lib/linux-sound-base/noOSS.modprobe.confに対してリンクが張られます。
PulseAudioの出力をOpen Sound System経由にする
Ubuntuのデフォルトの状態では、PulseAudioの音声入出力はALSAのカーネルモジュールを経由し、サウンドカードやUSBオーディオデバイスなどのサウンドデバイスに送られます[5] 。Open Sound Systemを利用する場合、ALSAの代わりにOpen Sound Systemを利用するようにPulseAudioの状態を変更する必要があります。
PulseAudioは「モジュール」と呼ばれる単位で機能を拡張でき、Open Sound System用のモジュールが準備されています。端末で以下を実行して、モジュールを追加してください[6] 。
/usr/bin/pactl load-module module-oss
筆者が試した環境(サウンドデバイスにALi Corporation M5451を使用)でこのまま実行すると、サウンドが間延びしたり、おかしなノイズまじりとなってしまって使いものになりませんでした。そこで、PulseAudioのWikiのLoadable Modules でmodules-ossを参照しながら試行錯誤した結果、以下に落ち着きました。オプション「format」で16ビットビックエンディアンを指定し、オプション「rate」でサンプリング周波数を48,000kHzに指定しています。
/usr/bin/pactl load-module module-oss format=s16be rate=48000
なお、PulseAudioにモジュールをロードすることで、GNOMEのサウンドアプレットにサウンドデバイスが表示されるようになります。
図3 サウンドの設定の入力タブ。今回使ったサウンドデバイス(ALi Corporation M5451)が表示されている
図4 サウンドの設定の出力タブ
Open Sound Systemモジュールを無事ロードできたら、「 ログイン時に自動起動するアプリ」に登録します。メニューのシステム、設定、自動起動するアプリと進み、「 自動起動するアプリの設定」ウィンドウ (gnome-session-properties) を開いてください。「 追加」ボタンをクリックして自動起動するプログラムの追加をします。テキストボックス「コマンド」に先のコマンドを入力して、項目に追加します。
図5 自動起動するアプリの設定ウィンドウ
ログアウト/ログインしてみて、ログインの音声が鳴ったら設定は完了です。
[6] なお、module-ossをロードするとログに「Warning, deprecated: Please use module-alsa-card instead of module-oss!」が出力されるため、ちょっとした背徳感が得られます。
アプリケーションとOpen Sound System
一部のアプリケーションでは、サウンド再生のためのバックエンドを指定できます。こうしたアプリケーションでは、バックエンドとしてOpen Sound Systemを指定することで問題なく使えます。また、PulseAudioの設定が完了していれば、PulseAudioをバックエンドとするGstreamerアプリケーション(RhythmboxやTotem動画プレイヤー、PiTiViなど)やSkypeなども使うことができます。
図6 Audaciousの設定画面。さまざまなバックエンドに切り替えられ、Open Sound Systemも利用可能
ALSAの利用が前提となるアプリケーションは使えるのか、と不安になるかと思いますが、こうしたものも利用が可能です。本連載の第137回 で少し解説しましたが、ALSAサブシステムは標準入出力先としてサウンドデバイスではなくPulseAudioを指定しており、事実上PulseAudioに対応した状態となっています[7] 。
図7 サウンドの設定のアプリケーションタブ
ここではTotem動画プレイヤーとRhythmbox、ALSA pluginによるALSAの音声がPulseAudioに出力されています。本連載の第137回 ではnpviewer.binをAdobe Flash Pluginのラッパーとして使うと説明しましたがこれはamd64版Ubuntuの場合で、i686版ではラッパーを使わずにplugin-containerがALSAへ出力します。
[7] 例外として、アプリケーションでALSAサブシステムの出力先を「default」や「pulse」とできず、「 hw:0.0」といったALSAカーネルモジュールの構成するデバイスノードを直接指定してアクセスするものは使うことができません。
Open Sound Systemのミキサー ossxmix
パッケージ「oss4-gtk」をインストールすると、Open Sound Systemバージョン4のサウンドミキサを使うことができます。端末でコマンド「ossxmix」を実行するとミキサーGUIが起動するほか、パネルにアプレットが表示されます。
図8 ossxmixの画面。この場合は、AudaciousとGTickとPulseAudioの出力がミックスされている
図8では、Open Sound System用アプリケーションであるGTickとミュージックプレーヤーAudacious、そしてPulseAudioからの入力が表示されています。vmix0フィールドでそれぞれのストリームの音量を調整できるほか、volやpcmで全体のボリュームを調整できます。
Open Sound SystemはUbuntuにおいてはもはや主流ではありませんが、昔一世を風靡したLynx Studioのサウンドデバイスをフルサポートするなど[8] 、ALSAにはない特色があります。本連載の第137回 で紹介したALSAやPulseAudioのOpen Sound Systemエミュレーションモジュールも合わせ、UbuntuでOpen Sound Systemを使いたい冒険者の手助けとなれば幸いです。
[8] ところが、Ubuntuのリポジトリからインストールできるパッケージには、カーネルモジュール「lynxone」と「lynxtwo」が含まれていないため、公式ウェブサイトからソースをダウンロードしてくる必要があります。プロプライエタリ時代に開発されたモジュールだからと思われます。