カテゴリー

Wave File Playerについて

Wave File Player とは、WAVE形式のファイルを再生することに特化したWindows用のソフトウェア(無償提供品)です。

2003年に開発スタートした Wave File Player (Version 0.9xx) は、バージョンアップを重ねて2010年1月に、ようやくVersion 1.00になりました。 この時点で Wave File Player for Reference に改名しました。

オーディオの仲間が、少しづつPCオーディオを始め Wave File Player を使うようになる一方、プロの分野では、レコーディング&マスタリングスタジオでの検聴にも使われております。
Wave File Player (for Reference)の狙いは、「質の高い再生ができること」と「安定かつ、いつ聴いても同じ音であること」であり、オーディオにおける音質評価の「ものさし」として使いたいことでした。 したがって、音源のWAVEファイルを一切の加工をせず、そのまま再生します。
その狙いは達成できたと思いますので、Wave File Player for Reference の完成と位置づけ、今後は軽微な改良のみに留めます。 (理由は音質を変えると「ものさし」として使えないためです)

今後は、Reference とは違った意味合いで、オーディオ的に更なる高音質再生を目指すため、Wave File Player for Experimental での研究・開発を続けます。
Reference と大きく異なる点は、低水準のAPIのみでドライブすること、時間軸に対して正確に再生させたい為、Wave Fileを1曲ごとに全部メモリーに転送してから再生することです。
さらにメモリー上のWave File全体を、連続且つ滑らかに繋ぐ独自のアルゴリズムでアップ&リサンプリングして出力することに挑戦しています。 またビットデップスも 16bitや24bitに指定することができるようになりました。(2010年12月27日 現在)

高音質で一般に広く使っていただける Wave File Player for Reference、高音質再生を極め、実験・研究していく Wave File Player for Experimental の2つのプログラムを用意しております。

皆様に Wave File Player をお聴きいただき、ご愛用いただければ幸いです。

和田芳道

 

***************************************************

       Wave File Player について (技術情報)

***************************************************

 1.二種類の32ビットウィンドウズの変遷

 Wave File Player は32ビットウィンドウズアプリケーションなので、先ずはOSの変遷について述べます。

NT系:16ビットウィンドウズに決別し、OS2バージョン3からスタートしたこの系列は、WindowsNT3.1 → WindowsNT3.5 → WindowsNT3.51 → WindowsNT4.0 → Windows2000(5.0) → WindowsXP(5.1) → WindowsSvr2003(5.2) → WindowsVista/Svr2008(6.0) → Windows7(6.1) と、バージョン3.1から現行の6.1に至っています。

Windows系:16ビットウィンドウズからの発展系としてのこの系列は、Windows95(4.0) → Windows98(4.1) → WindowsMe(4.9) となり、その役割を終えると共に、先のNT系に吸収(統一)されました。
二つの Wave File Player は、バージョン4.0以降の両系列で動作可能なように開発されました。
ついでに、x64タイプの64ビットウィンドウズもOKなので記します。WindowsXP(5.1) → WindowsSvr2003(5.2) → WindowsVista/Svr2008(6.0) → Windows7/Svr2008R2(6.1)

2.デバイスドライバについて

実際に音を出すには、サウンドデバイスとそのドライバが必要です。
通常のウィンドウズアプリケーションは、対象のデータを特定のデバイスで表現する場合、そのデバイスの表現能力を調べ、能力が充分な場合はそのまま、不足している場合は、できる限り近い表現能力形式にフォーマット変換して出力します。 つまり、表現できること(再生すること)を優先します。
しかし、PCオーディオにとって、この方式は好ましくありません。 簡単に言えば「だましてまで再生して欲しくは無い」と言うことです。 Wave File Player の仕事は、再生ファイルをそのままのフォーマットでAPIに渡すことです。 もしデバイス側(ドライバ)が対応できなければエラー扱いします。 しかしながら、OSやデバイスドライバも、通常は上記のウィンドウズの原則でできています。 これを排除する為に、WASAPIの排他モードが導入されたことも事実です。

3.for Reference について

このプログラムは、MCIをウェーブファイル再生に特化して使用しています。 「何を今更MCI?」と驚かれた方もあると思います。 このインターフェースには期待していたわけではなく、「これ以下なら失敗」の基準プログラムつもりでしたが、実際に試してみると、「かなり良いんです!」

このインターフェースをウェーブファイル再生に特化してチューニングしたのが、このプログラムです。 したがって、お使いになるPCのMCIで再生可能なウェーブフォーマット以外は再生できません。
また、再生デバイスは、ウェーブマッパに従いますので、再生デバイスの指定をすることができません。 Server2003(5.2)以前のNT系OSを使うのであれば、再生デバイスを指定する裏技機能を用意しています。

他の弱点としては、MCIの設計が古いためか、フルパス名で使用できる文字の条件がきついことです。 但し、Used Buffer をONにすれば、ある程度は緩和することができます。

4.for Experimental について

for Referenceの音質にかかわる部分は変更できないので、オーディオ的高音質を達成するために、現在も発展途上中のプログラムです。
for Reference が予想以上に良かったので、結構苦戦しています。 試行錯誤の結果、APIは低レベル標準の waveOut系を用い、再生ファイルを丸ごとメインメモリに読み込んで、再生前に必要なことをすべて終えてから、再生に専念することにしました。
現在、アップサンプリング機能はチェックボックスが封印されていますが、このアップサンプリングもこの前処理に属します。 (ブログで封印の外し方を公開しています)

このプログラム開発で得た教訓は、「レーテンシーと音質は両立しない」と言うことでした。レーテンシーを小さくするには、アプリ側から頻繁にデバイス側を呼び出さなければなりません。このことが音質低下に繋がるようです。

弱点1:ウェーブファイルサイズに相当する実メモリの空き領域が必要。 (CDフォーマットをアップサンプリングする場合は4倍必要) 物理メモリがあっても、実際にアロケートできるサイズがOSによってかなり制約されるので注意を要します。

弱点2:前処理の待ち時間が必要
複数ファイルを連続再生するためには、再生中に次の曲を準備して、シームレスに繋いでおく必要があります。 これは、「再生中に他の作業はさせたくない」のと「二曲分のメモリが必要になる」ので中止しました。

5.WASAPIの排他モード利用について

MS筋の資料によれば、WASAPIでは「レーテンシーと音質は両立する」らしい…?
そこで、for Experimental がそれなりの完成を見た時点で、新たなプロジェクトを起こそうかと思っています。 真の狙いが、新しいアップサンプリング(アップサンプリングについてで解説した式を更に進化させたもの)の実用化なので、WASAPIの排他モード専用で、64ビットユニコードアプリケーションとして構築する予定です。 64ビットにするのは、再生ファイル先読み用の大きな実メモリアロケーションを確保する為ですが、本当に、「レーテンシーと音質が両立する」のであれば、先読みを止めて32ビットアプリとすることもあります。 また、ユニコードアプリケーションにするのは、ファイルパスに関する文字コードの制限をOSに合わせたいためです。

福村光治