最近のPCオーディオ界では、bit perfect再生が重要視されています。 Bit perfectとは何か、なぜ必要か、bit perfectならば音がよいのかについては、長い話になるのでここでは述べません。 いつか時間があったら私の意見を書きます。 その日がくるまでは、Wikipediaなどの記述を参考にしてください。
最新のLinuxを使用すると、PCIカードやUSB DACにアクセスするサウンドドライバとしてALSAが採用されています。 このALSAを使用すると、bit perfect再生を行うこともできます。 しかし使い方によっては、bit perfectでなくなったりもします。 その辺の事情をここで簡単に書きます。
このページでbit perfectと記述しているのは、アプリケーションからデバイスドライバにデータを渡すまでの範囲を考えています。 デバイスドライバ内やハードウェア内でフォーマット変換が行われるかどうかについては、出力音質を考える上では重要ですが別の議論になります。 インターネットでサウンドデバイスを有償配布されている ElectrArtさんのサイトでもbit perfectの測定をされています。 ElctrArtさんはS/PDIFから出てくる出力を測定しているので、デバイスドライバ内やハードウェア内の変換まで視野に入れていらっしゃいます。
今後の記述でカンマを表示するとき、当サイトの事情によって全角キャラクタを使用しています。 適宜半角のカンマに置き換えて読んでください。
Windowsの世界でASIOやwasapiと言った場合、そのサウンドインタフェースに出力するとbit perfectが保証されます。 ALSAはそれらの技術とは違い、もっと広い範囲を含みます。 デバイスに直接出力するbit perfect出力もありますが、mixer経由の出力方式もあります。
ALSAのmixer経由と従来のアプリケーションの組み合わせでも、設定を正しく行えばbit perfect出力できます。 オーディオ評論家御田さんのサイトにUbuntu Studioを設定する方法等が詳しく載っています。 なにも設定しないでALSAのmixerを通すと、出力フォーマットは特定のフォーマットに固定されます。 そのためALSAで出力しているからといって、常にbit perfectが保証されるとは限らないのです。
ALSAは、全オーディオデバイスをカバーしているわけではありません。 FireWire(i-Link)接続のデバイスは、ALSAの守備範囲外です。 ここでは、ALSAを経由して一般のUSB DACなどにbit perfect出力する一方法を記述します。
ALSAには、再生試験を行うためのコマンドaplayがあります。 一般的なLinuxを使用している場合、alsa-utilsという名前のパッケージをインストールすると使えるようになります。 GUIではなく、端末からキーボード入力で使用するコマンドになりますが、aplayを使用してbit perfectで再生をすることができます。 以下、aplayの使用方法を書きます。
まず自分のPCにつながっていて、 Linuxが認識しているサウンドデバイスをリストアップします。
hostname:~> aplay -l **** ハードウェアデバイス PLAYBACK のリスト **** カード 0: PCI [ESS Maestro3 PCI], デバイス 0: Maestro3 [Maestro3] サブデバイス: 1/2 サブデバイス #0: subdevice #0 サブデバイス #1: subdevice #1 カード 1: ICH5 [Intel ICH5], デバイス 0: Intel ICH [Intel ICH5] サブデバイス: 1/1 サブデバイス #0: subdevice #0 カード 1: ICH5 [Intel ICH5], デバイス 4: Intel ICH - IEC958 [Intel ICH5 - IEC958] サブデバイス: 1/1 サブデバイス #0: subdevice #0
これが私のPCで実行した結果です。 サウンドボードSE-80PCIが、"ESS Maestro3 PCI"として認識されていて、カード0 デバイス0です。 オンボードのサウンドは、"Intel ICH5"の方で、カード1 デバイス0とカード1 デバイス4になります。
aplayで再生する時は、hw:#,#形式でハードウェアを指定します。 カンマの前にはカード番号、カンマの後にはデバイス番号を記述します。 先の例ではSE-80PCIが hw:0,0 オンボードが hw:1,0 hw:1,4になります。
カード番号は、Linuxを再起動すると入れ替わることがあります。 Linux起動直後最初の再生前には、必ず確認してください。
後は再生コマンドを入力するだけです。 私のPCでSE-80PCIを使って、sample.wavを再生してみましょう。
hostname:~> aplay -D hw:0,0 sample.wav
aplayを使用してわざわざ非bit perfect再生することもないと思いますが、念のために書いておきます。 サウンドカードが対応していないサンプリング周波数やビット長のデータを、無理やり再生することができます。 Bit perfect再生する時のhwパラメータをplughwに置き換えます。
hostname:~> aplay -D plughw:0,0 sample.wav
aplayは、試験用に作られたプログラムのようで,制限があります。 特に,オーディオ再生として使用する場合の一番の制限は、再生ファイルのデータフォーマットと、デバイスのデータフォーマットが一致していなければならないことです。 デバイスが24bit linear PCM little endianだった場合、再生するファイルも24bti linear PCM little endianでなければなりません。 ファイルが16bit だったり、big endianだったりすると、この例ではbit perfect再生してくれません。 ここは注意してください。
Ubuntu 10.10には、VLCというアプリケーションが用意されています。 このアプリケーションでも、bit perfect再生できそうです。
我が家以外の環境で試したところ、bit perfect再生になりませんでした。 環境によって動作が変わってくるようです。 時間を作ってソースコードを確認してみようと思います。 残念ながらbit perfect再生を保証してくれるわけではありませんが、使いやすいツールなので以下の記述は残しておきます。
Ubuntu Linux 20.04でインストールできるVLCでは、サウンドデバイスにALSAのビットパーフェクトデバイスやミキサー経由のデバイスを選択できるようになっています。
まず上部バーの『システム』メニュー『管理ツール』から 『Synapticパッケージ・マネージャー』を起動して、 『vlc』をインストールしてください。
『アプリケーション』メニュー『サウンドとビデオ』から 『vlc』を起動します。
Vlcメニューバーの『ツール』から『設定』を選択し、 出てきたダイアログの左側にある『オーディオ』アイコンをクリックします。 『出力モジュール』に『ALSAオーディオ出力』を選択し、 『デバイス』に出力したいデバイス名を選択します。 終わったら、『保存』ボタンで保存します。
WAVやらFLAC、ALAC、AACといったサウンドファイルを、 ファイル・ブラウザ画面からドラッグ&ドロップするだけです。
根拠は二つあります。 デバイスに hw:#,# 形式のデバイス名がかかれていることが一つ。 もう一つは、様々なフォーマットのファイルを再生した時に、 USB DACのサンプリング周波数表示が再生ファイルのサンプリング周波数と一致していたことです。
Ubuntu 22.04上で、apt-get したVLCを使うと不具合が発生します。 音声ファイルを再生してスクロールバー上をクリックして再生位置を調整すると、出力音声がとぎれとぎれになります。
Ubuntu 20.04を使っていて、音声デバイスを排他オープンできないことがあります。 Webmasterの環境で多いのは、FireFoxを立ち上げるとFireFoxがデフォルトの音声デバイスを掴んで離しません。 Linuxマシン起動後にUSB DACを接続すると、大抵システムのデフォルト音声デバイスがUSB DACになってしまい、FireFoxが掴んで離さなくなります。
こんなときは、『設定』アプリを使用してシステムのデフォルト音声デバイスをマザーボードの音声デバイスに強制的に変えてやれば、USB DACを排他オープンできるようになります。
2010年1月10日 初出
2022年11月29日 追記