Ubuntu Weekly Recipe

第299回UbuntuでOpen Sound Systemアプリケーションを簡単に使う方法

はじめに

Open Sound Systemに関しては、本連載の第137回第144回において、Ubuntuで使う方法を扱いました。その内容を大まかに分類すると、サウンドドライバをAdvanced Linux Sound Architecture(ALSA)からOpen Sound Systemに切り替える方法(第144回)と、サウンドドライバを切り替えずにOpen Sound Systemアプリケーションを使う方法(第137回)になります。前者に関しては、より多くのデバイスをサポートするALSAがLinux標準のサウンドサブシステムである現在、有用ではありません。しかし後者に関しては、ALSAとPulseAudioの組み合わせをサウンド環境としているUbuntuでOpen Sound Systemアプリケーションを使えるという点において、現在でも有用です。

Ubuntu 13.04以降、Open Sound Systemアプリケーションを使う新しい方法が追加されました。今回はこの新しい方法をご紹介します。

Open Sound Systemアプリケーションの問題

新しい方法を紹介する前に、Ubuntu(と言うかLinux)においてOpen Sound Systemアプリケーションが抱えている問題をまとめます。

Ubuntuがカーネルとして用いているLinuxにおいて、サウンドドライバとしてのOpen Sound Systemは10年以上前にdeprecatedであり、過去のものです。そのため、過去に開発されたLinux向けOpen Sound Systemアプリケーションは、ALSAあるいはGstreamer、PulseAudioのインターフェースを使って書き直されるべきです。しかし、過去に開発が終了しているOpen Sound Systemアプリケーションを今さら修正するのはモチベーションが上がりません。

またOpen Sound System自体の開発は継続しており、UNIXライクなシステムで使用することができます。そのため、他のUNIXライクなシステムで開発されたOpen Sound SystemアプリケーションをLinuxで動かしたい人がいるかもしれません。この場合も、アプリケーションの移植の過程で、ALSAあるいはGstreamer、PulseAudioのインターフェースを用いるコードを追加するべきです。しかし、APIの学習やメンテナンス、クロスビルドのコストを考えると、こちらもモチベーションが上がりません。

このような事情により、アプリケーションをOpen Sound Systemのインターフェースのまま動作させるという要求が発生します。

しかし現在のLinuxは、サウンドサブシステムとしてALSAを使います。Open Sound Systemはインストールされません[1]⁠。システムにOpen Sound Systemのインターフェースがないため、そのままではOpen Sound Systemアプリケーションを使うことができません。使用可能とするには、Open Sound Systemインターフェースをエミュレートする仕組みを、Linuxに用意する必要があります。

なお、使用しているソフトウェアがOpen Sound Systemアプリケーションであることを判断する目安として、アプリケーションの設定に「/dev/dsp」に関するものがあるかどうかを見るという手法が使えます。この「/dev/dsp」はOpen Sound Systemのキャラクタデバイスの1つです。アプリケーションはこのキャラクタデバイスに対して音声データの入出力を行うことで、サウンドデバイスと入出力を行います[2]⁠。

Open Sound System Proxy Daemon(osspd)

Open Sound Systemインターフェースをエミュレートする仕組みとして、これまでaossやpadspが使われてきました。Ubuntu 13.04以降では、新しい簡便な方法が追加されました。その新しい方法とは、osspdというソフトウェアを利用することです。細かな解説は後で行うとして、まずはインストールして試してみましょう。Ubuntu 13.04以降では、パッケージ「osspd」が提供されています。Ubuntuソフトウェアセンターなどを使い、このパッケージをインストールしてください。

図1 Ubuntuソフトウェアセンターにおけるosspdの検索結果
図1 Ubuntuソフトウェアセンターにおけるosspdの検索結果

パッケージをインストールすると、osspdがデーモンとしてシステムに常駐するようになります。

$ service --status-all
 [ ? ]  LCDd
 [ + ]  acpid
(省略)
 [ + ]  osspd
(省略)
 [ + ]  winbind
 [ - ]  x11-common

では、osspdの効果を確認してみます。本連載の第137回にならい、今回もGNU Gtickを使います。gtickをOpen Sound Systemインターフェースを使うように設定してサウンド機能を開始すると、とくに何もしなくてもシステムから音声が出力されます[3]⁠。

ここで、デスクトップ右上から起動できる「サウンドの設定」の、⁠アプリケーション」タブを確認してみます。gtickの音声出力がPulseAudioに渡っていることが確認できます。

図2 gtickが表示されることから、PulseAudioに音声出力できていることがわかる
図2 gtickが表示されることから、PulseAudioに音声出力できていることがわかる

これまでのOpen Sound Systemエミュレート方法

それでは、osspdがどのようにしてOpen Sound Systemアプリケーションの音声入出力を可能としているかを見ていきましょう。その前に、既存のエミュレート方法とその欠点をまとめます。

これまで、Open Sound Systemのエミュレート方法がいくつか開発され、使われてきました。たとえばALSAのカーネルランドの場合、ALSAのドライバがOpen Sound Systemのドライバのふりをすることで、Open Sound Systemアプリケーションの音声データ入出力をサウンドデバイスに入出力する機能を持ちます[4]⁠。

またaossやpadspはLinuxのローダの機能を使い、自分のライブラリをプリローディングします。このライブラリには入出力関数をエミュレートするコードが含まれており、Open Sound Systemアプリケーションの入出力を、ALSAやPulseAudioの入出力にします[5]⁠。

これらのエミュレート手法にはそれぞれ欠点があります。ALSAドライバがOpen Sound Systemドライバのふりをする方法の欠点は以下です。

  • 一度に1つのOpen Sound Systemアプリケーションしか「/dev/dsp」を使えないこと
  • そのOpen Sound Systemアプリケーションが実際のサウンドデバイスを占有すること

システム全体として1つのサウンドアプリケーションしか使うことができず、その結果、PulseAudioのようなALSAアプリケーションを同時に使用することができません。

また、aossやpadspを使う方法にも以下の欠点があります。

  • インターフェースの完全なエミュレートが難しいこと
  • 起動のためのコマンドを端末で実行、あるいはランチャーに登録する手間が必要なこと

これらの欠点を踏まえ、osspdは異なるアプローチでOpen Sound Systemエミュレートを行います。その際に利用されているのが、LinuxのCUSEという機能です。次では、このCUSEを簡単に見ていきます。

LinuxのFUSE拡張機能CUSE

Linuxのfsサブシステムには、FUSEという機能があります。FUSEは、ファイルシステムをユーザランドで実現するためのものです。この機能を利用しているユーザランド実装として、NTFSファイルシステムをLinuxで使用可能にするntfs-3gや、SSHでリモートのファイルシステムをローカルにマウントするsshfsがあります。

このFUSEの拡張機能にCUSEがあります。CUSEを利用すると、キャラクタデバイスへの入出力をユーザランドに実装することができます。この機能がOpen Sound Systemインターフェースのエミュレートにどう役立つかというと、⁠/dev/dsp」への入出力をユーザランドで処理できる点です。もう少し見ていきましょう。

通常、Open Sound Systemアプリケーションが「/dev/dsp」へ入出力を行うと、それに対応するカーネルランドのドライバのコードを実行します。CUSEを利用すると、このドライバの代わりになるものをユーザランドに実装できます。つまり、この「ドライバの代わりになるもの」を、ALSAやPulseAudioのアプリケーションとして書くことができます。その結果、Open Sound Systemアプリケーションの音声入出力を、ALSAやPulseAudioに渡すことができます。

まとめ

Ubuntu 13.04以降、Open Sound Systemアプリケーションをストレスなく使うために役立つOpen Sound System Proxy Daemonを利用することができます。Open Sound System Proxy DaemonはLinuxのfsサブシステムのCUSEを利用し、キャラクタデバイスのドライバ機能をユーザランドに実装します。このドライバはALSAやPulseAudioのアプリケーションとしての機能を持つため、Open Sound Systemアプリケーションの音声入出力をALSAやPulseAudioに渡すことができます。

おすすめ記事

記事・ニュース一覧