Music TO GO!

2009年12月20日

Foobar 2000とプレーヤーソフトの周辺知識

最近はProtonやhiFaceなどPCオーディオ系のデバイスを紹介していますが、ハードのほかに重要なのはソフトウエアです。
USBデバイスは単に音を出すのはむずかしくありませんが、より良い音で聞くのはまた別に工夫が必要になります。
そこで実際にどうやってそれらのデバイスを使うかという点を中心に、PCのミュージックプレーヤーソフトでは代表的なfoobar2000を例にとって少し書いてみたいと思います。
Foobar2000自体は語りつくされているとは思いますが、他の記事とか後の記事とのつながりのため、ここであわせてfoobar 2000の簡単な解説とカーネルミキサーのバイパスのような基本的な項目や周辺の知識も交えていきます。
ちなみにここでは主にWindows XPについて書いていきます。

0. Foobar2000とは

もともとWindowsの音楽プレーヤーソフトではWinampというソフトが定番だったのですが、人気を得ていく上で肥大化したWinampに反発した内部のエンジニアがスピンアウトして製作したのがこのFoobar2000ということです。そのため、プログラムの基本部分はシンプルでそれに好みでカスタマイズをしていくという構造になっています。
最近1.0がベータ版として登場しました。

ちなみにfoobarというのはプログラマでよく使われる業界言葉みたいなもので、名前はなんでもいいときの代名詞です。fooだけとかbarだけでも使いますが、foobarと続けても使います。たとえばプログラムAを実行すると、と似たように、プログラムfoobarを実行すると、という感じですね。日本ではhoge(ほげ)と言うのもよく使います。
ですからfoobar 2000を日本語訳するなら、hoge 2000という風になるでしょうか(笑)。

1. インストール

こちらのサイトから最新版をダウンロードします。
http://www.foobar2000.org/download
他にもダウンロードできるサイトはありますが、信用できるサイトであるかを確認してください。(McAfeeのサイトアドバイザリーをお勧めします)

現在のところ安定している正式版と、開発途中のベータ版があります。
正式版は0.9.6.9です。1.0はベータ版のみです。ベータ版でもいくつかバージョンがあります。この記事の時点では最新はBeta5です。

なおベータ版にはbit torrentという転送プロトコルをサポートしたダウンロードツールが必要です。
それ以外でダウンロードするときはミラーサイトか他の配布サイトを探す必要があります。

2. 簡単な使い方

インストールするときはどこにインストールするかを確認しておいてください。そこのcomponentというフォルダに追加コンポーネント(プラグイン)をコピーすることでインストールします。

使い方は一例ですが、まずlibraly->configureでライブラリのルートを指定します。次に画面の基本レイアウトを指定します。Layout->Quick SetupでAlbum List+Propertiesを選択すると左側にアルバムのリスト、上は情報(properties)欄になり、右下はプレイリストになります。ここでAlubum listを開いていくと楽曲が出てきますので、曲単位、あるいしアルバム単位でプレイリストにドラッグして聴く曲を決定して、プレイリスト欄からダブルクリックや曲の選択して再生ボタンなどで再生します。

またはLayout->Quick SetupでSimple Playlistを選び、デフォルトのプレイリストを選択しておいてそこにFileからAdd Folderでライブラリのルートを指定しても簡単に再生できます。

うまく音が出ないときはFile->Preference->outputのタブから目的のデバイスが選択されているかを確認してみてください。
とりあえず音が出ることを確認したら基本的なところは終了です。

この状態ですぐに使えますが、さらに拡張できるのがPCプレーヤーのよいところです。

3. コンポーネントの追加

Foobar2000ではコンポーネントと呼ばれるモジュールで追加機能をインストールできます。
さきのcomponentフォルダーにダウンロードしたfoo_xxx.dllというファイルをコピーしてプレーヤーの再起動をします。

コンポーネントにはそれぞれ目的と役割があります。役割はファイル名を見ても分かります。
たとえば次のようなものです。

目的*対応CODEC(再生フォーマット)を増やす
ALAC - foo_input_alac.dll
iPodでApple Lossless(ALAC)でたくさんのライブラリを使用している人には、Foobar2000で標準で対応していないALACを対応させる必要があります。

ちなみにCODECはCOmpress DECompressの略で圧縮と伸張の形式のことです。正確に言うとCODECとファイルフォーマットは異なるので注意が必要なこともあります。例えるとファイルフォーマットは入れ物のカタチのことで、CODECはどうぎっちりと詰めるかという詰め方のことです。
これはデジタルカメラなんかの画像でも同じです。たとえば有名なJPEGはCODECのことでファイル形式のことではありませんので、JPEGファイルというのはほんとは正しくない言い方です。

目的*アップサンプリングに対応させる
DSPと呼ばれるコンポーネントでは音そのものを変えることができます。ここではアップサンプリング(リサンプリングとも呼ばれます)を可能にするコンポーネントをいくつか紹介します。このほかにもクロスフィードを可能にするものやサラウンド対応、イコライザーなどもあります。

アップサンプリングを行うコンポーネントはひとつではなく、複数あります。これは元になるリサンプリングのためのライブラリーが違うので異なる方式でアップサンプリングをしているというわけです。これらはfoobarだけではなく、同じライブラリを使用して他のプレーヤーで使われるものもあります。
たとえば下記のようなものがあります。標準でもPPHSというのが付いてきますが、これらの方が良いと思います。

SoX - foo_dsp_resampler.dll
SoXはSound eXchangeというクロスプラットホーム(OS非依存)のサウンド関係のライブラリです。
SoX自体はバンドパスフィルターやイコライザー、リサンプリングなどの機能を提供します。基本的にはコマンドラインかAPIを使いますが、foobar2k用のものはSoXの中でもめずらしくGUIを持つものです。

Secret Rabbit Code - foo_dsp_src9.dll
Secret Rabbit Codeはリサンプリングに特化した同様なライブラリです。こちらもfoobarだけではありません。(あとでまた出てきます)。
わたしはSecret Rabbit Codeが一番良いと思いますが,一番CPUパワーを食います。また残念ながら試したところ1.0 beta2ではSecret Rabbit Codeは使えませんでした。

SSRC - foo_dsp_ssrc.dll
日本でよく使われているもので海外でもOtachanの名でよく使われます
。使われているライブラリはShibachi Sample rate converterというものです。


目的*カーネルミキサーをバイパスできる出力方式を追加する
Windows標準のDirectSoundではカーネルミキサーをバイパスできないので、それを可能にする追加コンポーネントをインストールして対応します。
これらについて次の章でまた解説します。
Kernel Streaming - foo_out_ks.dll
ASIO driver - foo_out_asio.dll



4.出力とドライバの指定

最後に重要なのは出力とドライバの設定ですが、ここでのポイントはカーネルミキサーのバイパス(迂回)を念頭に設定することです。
よくWindowsで音質を向上させるためにはカーネルミキサーのバイパスが必要であるということを聞くでしょう。その理由は音楽データがWindowsのカーネルミキサーというモジュールを通ることで意図せず手が加えられてしまうからです。そのため音が劣化してしまいます。

4-1 カーネルミキサーの功罪

カーネルミキサーというモジュールはOSの一部で、OS上で扱われる音を一元管理するためのものです。
たとえばWindowsの起動音は22kHzで、CDからリッピングした楽曲ファイルは44.1kHzです。その他さまざまなサンプリング周波数の音源を一元管理してボリュームの調整などを行うためにはどれか統一したサンプリング周波数が必要です。その標準は44.1kHzではなく、Windowsの場合は48kHzです。つまりそれ以外のデータは48kHzに再サンプリング(つまり再計算)されてしまいます。
しかしたとえ48kHzだったとしてもカーネルミキサーでは再計算されるようです。これは計算のために他と型をそろえるためです。

よくデジタルは0と1の数値だから音は変わらないと言われますが、仮にジッターの問題を置いてもデジタルが0と1の数値のデータだからこそ音が変わる理由があります。
それは計算精度と桁落ちの問題です。1/3x3が1になるためには十分な小数点精度が必要です。カーネルミキサーではインとアウトが等しくなるほど計算精度という点で十分ではないということです。それゆえビットパーフェクト(バイナリ一致)ではないと言われるゆえんです。
デジタルは数値の処理ですので、足しても混ぜてもテープのダビングをするようなアナログ的な意味での劣化はしませんが、数値ならではの問題があるわけです。
最近32bit処理とか64bit処理なんていう言葉も出ていますが、これを情報処理的に言うと32bitは単精度形式で64bitは倍精度形式になります。写真分野のHDR(high dynamic range)なんかもそうですが、32bitで扱うというのは単に24bitに8bit増えただけではなく、大方の場合は浮動小数点形式で扱うということも意味しています。16bitも24bitも整数型です。(32bitは整数型もあります)

もっとも後述するASIOに求められたのは音質というよりはレイテンシー(遅延)の問題のようですし、また実際のカーネルミキサーの問題はもっと複雑のようです。ただビットパーフェクトという言葉はよくカーネルミキサーのバイパスと組に出てくるので、それを端的に解説するとこんな感じでしょうか。
カーネルミキサーの問題はカーネルミキサー自体の演算精度というよりも、余分な処理が加わるということ自体が問題です。ですので簡単な解決策はそれをバイパス(迂回)することです。

こうしたソフトウエアで「ビットパーフェクト出力」というと、暗にカーネルミキサーをバイパスするという意味になります。
http://www.mp3car.com/vbulletin/faq-emporium/88852-faq-what-bit-perfect.html

4-2 カーネルミキサーをバイパスする方法

それではどうやってカーネルミキサーをバイパスするかということですが、大きく3つの方法があります。
ひとつはASIO対応ドライバを使う方法、ふたつめはASIO4ALLを使う方法、そしてカーネルストリーミングを使う方法です。これはドライバによって使い分けられます。
たとえばわたしのPCの3つのオーディオインターフェース機器について考えてみると、PCについているPCI内部バスのサウンドカードはDAL CardDeluxe、またUSB DACとしてWavelengthのProtonがあり、USBのSPDIFコンバーターとしてhiFaceがあります。
CardDeluxeはASIO対応とうたっていて、hiFaceはカーネルストリーミング対応とうたっています。しかし、Protonはなにも書かれていません。

まずドライバーがASIO対応しているCardDeluxeでは、それを使ってソフトウエアではASIO出力を指定します。ASIO対応にするため、ASIOコンポーネントのインストールが必要です。
Right/Leftのチャンネルをマップ(割り当て)しなおしする必要があることもあるので、音が出ないときは設定を開いて確認してください。

またASIOの対応のないProtonですが、こういう場合はASIO4ALLというソフトウエアをいったん途中にかませて、間接的にASIO対応にします。
まずASIO4ALLをダウンロードしてインストールします。次にASIOコンポーネントもインストールします。
設定はConfigureで行いますが、音がでないときは他のプレーヤー(iTunesも含む)を立ち上げてないかを確認し、次にASIO Virtual deviceタブを開いてチャンネルが空になっていないかを調べてください。空であればleftとrightを設定します。

ドライバーがカーネルストリーミングに対応しているhiFaceは、それを使ってソフトウエアではKernel Streaming出力を指定します。Kernel Streamingコンポーネントをインストールすると、ドライバーはASIO以外はDSとKSという二つのカテゴリーに分けられるようになります。
さて、hiFaceはカーネルストリーミングに対応していると書きましたが、本来はカーネルストリーミングについてはドライバーでなくプレーヤー側の対応で、ドライバー側の対応は不要なはずです。しかし、カーネルストリーミングについてはちょっとトリッキーなところがあり不安定だったりするのですが、hiFaceはfoobarでのKernel Streaming使用という点で、DirectSound用とKernel Streaming用のモードを分けてきっちりと開発しているようなので安定して動作します。
一般のドライバでも内蔵サウンドチップを含めてカーネルストリーミングでも動作できます。ただ動作すれば問題ありませんが、動作しない場合は海外のフォーラムにあったワークアラウンドですが、24bitまでのドライバだったとしても32bitとして出力指定すると動作することもあります。(CardDeluxeはそうでした)

まとめるとASIO対応ドライバーはASIO指定、それがなければASIO4ALLかKernel Streamingということになります。
またASIO4ALLも内部的にはカーネルストリーミングを使ってたと思います。つまりASIO4ALLはカーネルストリーミングにASIOの口をつけたものと言えるように思います。


なおVista以降ではWASAPIという方法もあります。FoobarではWASAPI用のコンポーネントもあります。


5. 詳細設定

このほか音に関係しそうなところとしては詳細設定のPlaybackからfull file bufferingを選ぶと曲データをすべてメモリーに展開することができます。
またThread Priorityで優先度を変更することができます。
これが効くのはメモリがたくさんあるデスクトップというよりもUMPCなど非力なPCで音飛びがするときに有効に思えます。


6. PCオーディオのソフトウエアと自由さ

追加機能はまだまだたくさんあるのですが、PCオーディオの利点としてそうした追加機能を自由に追加できるという拡張性があります。
またFoobarではDLNAで使われているuPnPプロトコルをサポートしたコンポーネントも用意されています。
http://www.hydrogenaudio.org/forums/index.php?showtopic=69664
これを使えばFoobar2kとLINN DSをリンクさせることが可能です。実際にFoobar2kにKinsky Desktopに似た機能を実装させるというプロジェクトもLINNのフォーラム内で進んでいます。こちらです。
http://forums.linn.co.uk/bb/showthread.php?tid=4456
uPnPコンポーネントはクライアントだけでなく、サーバー機能もサポートしていますが、こうなってくるとただのプレーヤーでさえなくなります。

Foobarの欠点としてはローカライズにあまり対応していないので英語前提であるということがあります。やはり日本語でなくては、という方にはWinampFrieve Audioなんかが良いのではないかと思います。
またこうしたソフトウエアの自由さは反面ではじめての人はなにをやっていいか分からないという点にもつながってしまうかもしれません。

いままでのCDプレーヤーと違い、PC上のプレーヤーはこうしたかたちのなさが利点でもあり、またとっつきにくさにもなり得ます。
新しいフォーマットが出たら自由に対応フォーマットを追加でき、アップサンプラーなどはさまざまな方式から選べます。こうした点はいままでのCDという決まったカタチに束縛されない自由さがあります。
foobarが定番なのは拡張性の高さがそのようにPCオーディオらしいから、という点にあるように思います。
posted by ささき at 22:54 | TrackBack(0) | __→ PCオーディオ・ソフト編 | このブログの読者になる | 更新情報をチェックする

この記事へのトラックバック