ReClock

公式サイト:http://forum.slysoft.com/showthread.php?t=19931
バイナリを一致させる方法:WASAPI排他モード,Kernel Streaming

概要

ReClockは,AVIファイルやmpegファイルの再生時のぎこちなさを確実に取り除くことを目的として,Windowsがデフォルトで採用するDirectSound Audioレンダラーの代わりに動作するDirectShowフィルターです。

ReClockはスムーズに動画を再生させるための機能として二つの機能を持っています。
一つ目は,ビデオカードのハードウェア上にあるクロックに同期させる(垂直同期=vsync)機能によって得られる正確なタイミングで,確実に画面の切り 替えを行う機能です。二つ目は,ビデオカードのリフレッシュレートに合致しないフレームレートである動画ファイルであっても,ソフトウェア的な処理でフ レームレートをリフレッシュレートに合わせる機能です。
そして,これに合わせて,リアルタイムにオーディオの再生レートを合わせるフィルター機能をもち,この3つで動画再生のスムーズさを追求しているわけですね。なお,このフィルター機能はカーネルストリーミングまたはWASAPI排他モードでも動作させることができます。

以上みてきたように,ソフトウェア名はReClock ですが,オーディオ的な機能だけに焦点を絞ると,実際はカーネルストリーミングまたはWASAPI排他モードが使えるリサンプラーアプリです。

繰り返しになりますが,そもそもの使い方は,ハードウェアのクロックに合わせて動画再生スピードを調整し,それにあわせて音声をリサンプリングしてスピードを調整し,リップシンクを行うソフトです。
さらに,現在リリースされているバージョンでは,オーディオのクロックを基準として動画の再生スピードを変更するという機能があり,オーディオ界隈では,どちらかといえばこちらの機能が注目された,といったところでしょうか。音声再生に使えるのではという発想はHead-Fiあたりから派生したもののようで,それをささきさんが紹介されて,日本でも知られるようになりました。

特徴

  • DirectShowに対応するメディアプレーヤーであれば,どれでも利用可能(言うなれば,音声出力部分を乗っ取ることが可能)
  • Windows XP以降Vista以前であればKernel Streaming,Vista SP1以降であればWASAPI排他モードによるビットパーフェクト再生が可能
  • 音楽再生時だけでなく,動画再生時でもビットパーフェクトな再生が可能

動画再生時の利点

まず,ReClockは動画再生時に使う場合には二つの使い方が考えられます。ひとつは,上述したようなリップシンク(映像と音声のタイミングをそ ろえること)であり,もうひとつがKernel StreamingまたはWASAPI排他モードを使ったbit Exactな音声再生です。一つ目は既に述べましたので,二つ目の点について見ていきましょう。
これまで,Windows7であっても,WindowsMediaPlayer(以下WMP)にせよMediaPlayerClassic HomeCinema(以下MPC-HC)にせよ,WASAPIの共有モードを使用して動作していました。つまりカーネルミキサー経由だったわけです。 まぁ,実用上はその方が何かと便利なのは確かですが,気持ち悪い部分はありました。
これに対して,ReClockは,WASAPI排他モードを利用したうえで,さらに音声のクロックをMasterとし映像のクロックをSlaveにすることで,ビットパーフェクトな音声再生が可能になっています(ただしデバッグ用モードなので設定がかなりシビア)。

音声再生時の利点

Kernel StreamingまたはWASAPI排他モードを使ったbit Exactな音声再生が可能という点は動画再生時と共通です。

設定

ReClockの設定

Audio Interfaces to use for

これはハードウェアのジャンル名としての「オーディオインターフェース」を選択するのではなく,Windowsで音を出す機能を持つ各種の方法のうち,どれを選びますか?という項目です。
WindowsMediaPlayerはDirectSound経由で音を出しますし,多くのマルチメディアプレーヤーソフトも同様だと思います。
Windows7の場合,ここで「WASAPI Exclusive」を選択するのが肝心です。この設定をミスっているとReClockの恩恵は高精度なリサンプリングということに尽きることになりま す。WindowsXP等の場合には,Kernel Streamingを選択することがBit Exactの条件となります。

Devices to use with

これはDefault Deviceのままでも構いませんが,Default Multimedia Deviceに変更すると音が変化して聞こえます。個人的には後者の方が良いと感じます。
ただし,レイテンシがらみか若干音が途切れやすい印象もありますので,調整が必要かもしれません。ノイズは音の途切れが頻発する場合にはプリバッファーとレイテンシを調整しましょう。

Sound pre-buffer

ここの数値は動画再生時にはかなり影響します。最大値はお手持ちのオーディオデバイスが持っているバッファ量に依存するようです。ノイズが入るようなら適宜調整してみて下さい。大きければ大きいほどよい,というわけでもないようです。

Max latency

Latencyとは遅延という意味ですが,バッファとして貯めているデータのうちどの程度の割合の遅延なら許すか,という設定項目です。あまり遅延するとリップシンクがずれてきてしまうと思います。

PCM Output

▼Sampling rate
ReClock側でリサンプリング機能を使い,特定のサンプリング周波数で出力することができます。ただし,一般的には使う必要がないでしょう。Same as inputで良いでしょう。

▼Quality
この項目はInterpolation(補間)の設定です。Sampling rateを44.1kHzから176.4kHz等にアップコンバートする場合のSinc関数の演算精度を決める項目のようです。Sync(同期)ではないことに注意が必要でしょう。基本的に動画再生で動的に音声をリサンプリングをしない限りは,Bit Perfectな音声再生には関係のない項目です。

▼Format
ReClockがデバイスにデータを渡す時のフォーマットを決めるものです。32bitも選ぶことが出来ますが,32bitでS/PDIFやAES/EBUが出力されるわけではありません。
デバイスによっては16bit Int/24bit Intに設定しなければ動作しないものもあるそうです。USB-DACはそういったものが多いようですね。WASAPI用のドライバの出来にもよります が,オーディオインターフェースであればSame as inputでよいでしょう。
24bit等にチェックを入れた際に16bit Integer for 16bit sourcesにチェックを入れると,16bitの音源は16bitで出力されます。24bit Intで固定にしたい場合にはチェックを外して下さい。

ReClockのプロパティ

Renderers infosの部分のAudioに「WASAPI exd. (bit exact)」と表示されていればOKです。
なお,ReClockはDirectShowという仕組みに対応するあらゆるプレーヤーにおいてフィルターとして使う事が出来ますから,これらのプレー ヤーでもReClockの設定をそのまま生かすことができます。たとえば,WMPやMPC-HCでも,ReClockを使ってカーネルミキサーバイパスに よって音質劣化を防ぐことが可能なわけです。

ポイントは,bit exact設定は音を良くするためのものではなくて,データを改変させないため,つまり音を悪くしてしまわないようにするため,に使うということです。 bit exactはデータの「正しい」再生に必要不可欠な要素であることに留意する必要があります(この理解は次回音声データ再生の時に必要な部分です)。

なお,WAVファイル等を再生する場合には勝手にAudioがクロックのMasterになって選択不可になりますので,動画再生時の設定 でVideoをマスターにしていても問題ありません。

音質傾向

MPC-HC+ReClockで聴く限りはXMPlayより帯域バランス重視に感じますが,反面他の アプリと比較して音像が平面的に鳴るのが気になります。KMPlayerでは改善されるのでしょうか。今後の検討課題です。

※ この項目は ビットパーフェクト(バイナリ一致)環境での試聴ですので,音質が変化する主要因としてはソフトウェア処理によるジッターとGND経由のノイズ流入が一応考えられます。ただし,私個人の感想ですので,客観的な音質評価とは言い難く,この点でソフトウェア作者様に問い合わせをされないようお願いいたします。

頂いたご質問

[Q] ReClockが特殊なのは,いわゆるアップコンバート的なリサンプリングではなく,本来サンプリング周波数が44.1kHzのデータが44.1112kHz等に乱れてしまっている状態を正しく44.1kHzに戻してくれるのでしょうか?

違います。本来の使い方ですと,映像切り替えのタイミングに合わせて44.1kHzのデータを44.1112kHz等にリサンプリングしてくれます。この微妙なリサンプリングが肝のようです。
また,音声のみの再生の場合には,リサンプリングする余地は一切ありません。元々44.1kHzのデータがソフトウェアによって違う周波数に乱れるという ことはありません。WAVファイルの場合,ファイルの先頭に44.1kHzであると記録されていて,プレーヤーはそれを読み取って44.1kHzで再生し ろとハードに伝えます。
つまり,ReClockが表示するBit Exact.というのは,まさに元のデータの通りに何も加工をしていないという意味です。

たとえば,あるWAVファイルのヘッダにはこのように情報が記録されています。ヘッダ情報はWave Header Viewerというソフトで確認することができます。

RIFF
51791076Byte
WAVE
fmt
16Byte
1(format id)
2(channel suu)
44100(samplingrate) ←ここに注目!
176400(speed)
4Byte
16bit/sample
data
51791040Byte(data size)
51791084Byte(FileSize)
36 data loc
44Byte (header size)
0Byte (matsubi size)
0H 4M 53S 26460
filesize – headerikou8 ? OK
filesize-headersize = data ? OK

なお,PC 用ソフトなどでのリサンプリングというのはデジタルフィルターの課題の一つである高域の折り返し雑音と呼ばれる現象を回避するためのものであって,クロッ クとは本来的に無関係のものです。つまり,プレーヤー側でアップサンプリングしようが何をしようが,ジッター対策にならないのが原則論です。むし ろ,PCMの場合,サンプリング周波数が上がるとジッターに対して弱くなってしまいます。
S/PDIFにせよAES/EBUにせよ,クロックを生成するのはあくまでサウンドデバイスであって,サウンドデバイスはデータのヘッダに記録されている サンプルレートに従い出力周波数を決めます。ですから,44.1kのデータをソフトウェア的に48kに変換してもジッター値が減少することはありません。
なぜなら,音声再生におけるジッターの問題とは,クロック信号を参照しながらデジタル信号を復調する際に問題となるクロック信号の揺らぎのことであるところ,デジタル信号を改変することはジッター発生以前の段階で行われるからです。

[Q] ReClockは他のWASAPIの排他モードに対応しているプレーヤーと違う音に聞こえるのですが,何故ですか?

簡単にいえば,ReClockは音声再生の時にWASAPI排他モードで再生してくれるだけです。DirectSoundと WASAPI排他モードではそれだけ音が違うということでもありますし,その驚きはXP時代からASIOを使っていた人が通った道でもあります。
WASAPI排他モードでもレンダースレッドタスクとデータ供給モードは選択的なので,同じWASAPI対応のプレーヤーソフトでも,その辺りの設定で変 わることは考えられます。PCオーディオのエンスーな人達はOSの設定で音を調整していきますから,別段音が異なっても不思議ではありません(それが検知 限以上か以下かは別問題です)。