WAVファイルを8bitに超高音質で変換するwav8bit.exe

16bit・サンプリング周波数任意(推奨:約32000Hz以上)のWAVファイルを、時間をかけて聴覚心理+ノイズシェーピング+ディザで8bit化するコマンドラインエンコーダ。
バージョン2.0.0からは、モノラルだけでなくステレオやサラウンド(8channelまで)のwavファイルにも対応しています。

wav8bit2.0.4による8bit化の試聴
sox v14.3.1による8bit化(-dither s オプション使用)の試聴
SoundEngine 4.00 Freeによる8bit化との音質比較。→試聴
A=SoundEngine,B=wav8bit 1.0.4としてABX比較の様子を録音したもの。ABABAB…ABAと切り替えた。Aはジュワジュワな感じ、Bはかすかにシャーッというノイズが聞こえる。

私の主観では、SoundEngine 4.00 Freeよりもsoxよりも自作wav8bitの方がずっと高音質になっていると感じる。
コンプをつかって潰してある一般的なPOPSでは、曲の最初最後の小音量部分を除くと、ABXテストで16bitとの区別にかなり苦労する。
主に組み込み・電子工作・レガシーデバイス・携帯電話向けにPCで高音質な8bit wavファイルを作りたい方や、学術的興味のある方向けに公開。

2.0.2のスクリーンショット

1.0.5のスクリーンショット

ダウンロード
wav8bit 3.0.0(アルファ版)(42KB, 2011/12/08)
wav8bit 2.0.4(41KB, 2011/10/05)
wav8bit 2.0.3(41KB, 2011/09/30)
wav8bit 2.0.2(40KB, 2011/09/29)
wav8bit 2.0.1(40KB, 2011/09/29)
wav8bit 2.0.0(40KB, 2011/09/28)
wav8bit 1.0.5(39KB, 2011/02/05)
wav8bit 1.0.4(39KB, 2011/01/16)
wav8bit 1.0.3(39KB, 2011/01/12)
wav8bit 1.0.2(39KB, 2011/01/07)
wav8bit 1.0.1(39KB, 2011/01/06)
wav8bit 1.0.0(39KB, 2011/01/03)

FAQ

入力可能なwavファイルは?
サンプリング周波数任意、16bit深度、リニア(非圧縮)PCM、8チャンネルまでです。 12345Hzとか77777Hzとかの変な周波数でも動作するはずです。 22050,32000,44100,96000Hzのモノラル/ステレオで動作確認していますが、 32000Hz以下の場合はこのエンコーダの利点をフルに発揮できないかもしれません。 ffmpegが96kHzとかで吐くWAVE_FORMAT_EXTENSIBLEのフォーマットにも対応していますが、 そのサラウンド拡張情報は出力ファイルには出てきません。
8bit化するとどんなアーティファクト(音の欠陥)が生じる?
特に低いサンプリング周波数(22050Hzとか)で小音量の音をエンコードすると、 ゴリュ音や音の途切れが発生したり、ブリージングノイズ(息がまとわりつくようなノイズ)が出たりします。 また、耳の良い方であれば、シーン、シャーーというような甲高くて小さい音が聞こえるかもしれません。 また、振幅いっぱいの最大音量の音をエンコードすると、極めてまれにピガッとかボーーとかいう音が ついたりするかもしれません。
なるべく高音質にしたい。
コンプやリミッターで音を大きくしてからwav8bitに入力してください。ただし最大音量(0dB)、振幅いっぱいまで 使った場合、アーティファクトが発生するかもしれませんので、-0.2dB、ほんの少し余裕があるといいと思います。
96kHz等の高サンプリング周波数を入力すると、出力音があからさまに荒れる。
おそらく再生環境側の問題です。96kHzをサウンドカードの対応する周波数(48kHzなど)に下げるとき、精度が低すぎて 折り返し雑音が発生しています。PCが省電力設定など、精度の低い設定になっていませんか。
どのバージョンがおすすめ?
特段の理由がない限り、最新の。 遅いマシンを使っている方は、3.0.0ではなく、2.0.4を。
動作環境は?
Pentium Pro以降なら動作するはずですが、1GHz以上のCPUを推奨します。Windows XPとWindows 7で動作確認されています。
アンインストールは?
フォルダごと削除してください。レジストリ等は使っていません。
重い。処理に実時間以上かかる。
仕様
出力の一番最後が、ほんの少し(64サンプル≒2ミリ秒以内)カットされている。
仕様
わざわざコマンドライン(コマンドプロンプト)を打つのが面倒。
バッチファイルを書くか、携帯動画変換君に組み込んで使ってください。
仕組みは?
実数精度の音を8bit(256振幅)に量子化すると、量子化誤差が発生します。何もしなければその誤差はホワイトノイズ(全周波数域で均一なノイズ)として聞こえるはず ですが、その誤差を次の量子化時にある程度フィードバックすると、そのノイズを整形(ノイズシェーピング)することができます。最小可聴値(ATH)や、同時マスキングにより生成される マスキングしきい値以下の音は聞こえませんので、フィードバック係数をいじることで、そのしきい値をはみ出さないように努力しながらノイズを整形します。 フィードバック係数の最適化は、64サンプル毎に最急降下法(直線探索+黄金分割法)で行います。 詳しくは、http://d.hatena.ne.jp/kamedo2/20100812/1281640220
改良の予定は?
上のリンクを見たことを前提に。量子化誤差は、ホワイトノイズ(平坦)になるはず、という仮定のもとにエンコーダの数学的な部分を作っているが、それは特に小音量の部分で現実からずれる。現実には、音量の小さい部分では低域が大きくなる。その部分を改善できるようなエンコーダを作りたい。現在は1サンプルごとに量子化しているが、例えば4サンプルまとめて最適化+FFTで評価することにより、特に小音量の部分を改善できるのでは? と思っています。