スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

WAVフォーマットを理解しておく

12/02/05初稿

 本稿は、14/08/26別稿から独立させたものです。
 同時に、本entry-15の元々の内容(リッピングイヂワル実験)はentry-14に統合しましたのでよろしくお願いします。


■WAVファイルフォーマット詳説

 本来は違うのですが、WAV形式は一般的に「リニアPCM」のことで定着していますので、リニアPCMかつ特殊拡張がないファイル形式として事実上限定できると思います。
 その前提で、WAVファイルのフォーマット…つまり“中身”を解説してみたいと思います。

・WAVバイナリの読み方
 その前に予備知識をひとつ。
 WaveCompareでの差異部分表記やWAVファイルをバイナリで覗いた時に見える16進数って、そのまま波形レベルを表していますが、0000h周辺に0100hとかFFFFhとかFEFFhとか出現しているのが観察できるファイルがあります。0000h=ゼロ=無音なのにいきなりFEFFhってなんぢゃい、と思いますよね。

 例えばこんなの↓
FFFF以外

 これについては、まず「バイトの並び規格」について知っておく必要があります。通常WAVフォーマットのバイトオーダはIntel形式なので上位と下位の8bitをひっくり返して16bitとして読む必要があるのです(AIFFはその必要ありません)。なので、FEh・FFhという並びはデータの値としてはFFFEhを示しています。
 で、何でゼロ近傍のハズなのにFFFEhかと言うと、これって補数表記(MSBが0だとプラス、1だとマイナス)だかららしいです。
 0000h(0)~7FFFh(+32767)までがプラスで、FFFFh(-1)~8000h(-32768)まではマイナス。よって、FFFEhは-2となります。

・WAVデータの読み方
 以下は、とあるWAVファイルのヘッダ部分です。最後に4Byte分「00」が見えますが、ここから波形データが始まっています。基本的にそこまでの44Byteがヘッダになっており、それ以降は波形データというシンプルな作りになっています。

WAVヘッダ

 上記を例に。

・0000~0003H:4Byte
 そのまんまアスキーコードで“RIFF”と入っています。本来のファイル形式の名前ですね。

・0004~0007H:4Byte
 0008H以降のファイルサイズです。
 この例だと「743EC002」ですが、Intel形式ですので、Byte単位でひっくり返し、「02C03E74」がファイルサイズとなります。
 0007Hまでを含みませんので、通常、ファイルサイズから8Byte少ない数になります。

・0008~000BH:4Byte
 そのまんまアスキーコードで“WAVE”と入っています。RIFFの種類がWAVEだという意味です。

・000C~000FH:4Byte
 そのまんまアスキーコードで“fmt ”と入っています。これからフォーマットを記すぞという意味ですね。

・0010~0013H:4Byte
 0014H以降のフォーマット記述バイト数です。通常16Byteなので、「100000」と入っています。
 Byte単位でひっくり返して「000010」になります。

・0014~0015H:2Byte 
 別途定義されているフォーマットIDです。リニアPCMは1なので、「0100」と入っています。
 Byte単位でひっくり返して「0001」、つまり1です。

・0016~0017H:2Byte 
 チャンネル数です。stereoなら「0200」と入っています。ひっくり返して、つまり2ですね。

・0018~001BH:4Byte
 サンプリングレート[Hz単位]です。
 44.1kHzなら10進数の44100を表す16進数の「0000AC44」がByte単位でひっくり返して「44AC0000」となって入っています。

・001C~001FH:4Byte
 意味的にはビットレートですが数字としては“バイトレート”です。上記の例で言うと「10B10200」ですので、Byte単位でひっくり返しで「0002B110」となりますから、それを10進数に直すと「176400」ですね。44.1kHzの2chの2Byte(16bit)データのかけ算結果になっています。

・0020~0021H:2Byte
 同時再生するデータブロックサイズです。16bitサンプル=2Byteのstereoなら 2x2=4 なので「0400」となっています。

・0022~0023H:2Byte
 サンプルビット数です。16bitなら「1000」ですね。

・この間に「拡張部分」が定義されていますが、一般的には存在しないようです。マルチにはあるみたい。

・0024~0027H:4Byte
 そのまんまアスキーコードで“data”です。この後は波形データ本体について記すぞ、という区切りですね。

・0028~002BH:4Byte
 dataのバイト数です。この後(002CH~)波形データが何Byte続くかを示しています。
 上記の例だと「503EC002」ですから、Byte単位でひっくり返して「02C03E50」Byteになります。
 通常、この波形データが終わったところでWAVファイルはオシマイです。

 波形データ本体のバイナリ一致か否かを調べる時の前提知識として。
 「“コンペアのレベル”によって一致不一致結果が異なる」なんて概念はPCの世界にはないことが解るかと思います。
 また、原則的に規格通りの記述しかできないことが解ると思いますので、そこから、通常なら(オプション記述をしないなら)どんなリッピングソフトでも上記ヘッダがオリジナルになる余地はないことも解ると思います。が、ヘッダではなく“波形データの後(フッタ?)”に独自の情報を付記するリッパーもあるようです。
 ちなみに、上記“とあるWAVファイル”はiTunesでリップしたものですが、同じトラックをEACでリップしたファイルのヘッダも全く同じでした。WAVデータの後に何も付いてないのも同じです。


■WAVE vs AIFF

 12/06/11追記:WAVEと並ぶ非圧縮PCMフォーマット、AIFFとWAVEを比較してみました。
 以下、BDR-S05Jパーフェクトモードにてあるトラックをリッピングした結果です。
 ヘッダ部とフッタ部はバイナリエディタで覗いた結果です。

1.iTunes10:WAVE形式:46,153,340 バイト
2.iTunes10:AIFF形式:46,155,518 バイト *フッタに情報付加あり
3.WMP(Win7付属):WAVE形式:46,153,550 バイト *ヘッダに情報付加あり
4.Power2Go6:WAVE形式:46,153,486 バイト *フッタに情報付加あり
5.1をfoobar2000のConvert機能でAIFF形式に変換:46,153,350 バイト
6.2をfoobar2000のConvert機能でWAVE形式に変換:46,153,340 バイト
7.3をfoobar2000のConvert機能でAIFF形式に変換:46,153,350 バイト
8.4をfoobar2000のConvert機能でAIFF形式に変換:46,153,350 バイト

 出自からしてかなり似ているフォーマットとのことですが、バイトオーダは決定的に違っていて、AIFFはビッグエンディアン、WAVEはリトルエンディアンです。バイナリエディタで覗く時は注意しましょう(笑)。

 1と6はヘッダ・フッタに何も付いていないプレーンなWAVEファイルです。ファイルコンペアしても一致します。AIFF形式はよく解りませんが、プレーンなWAVEを変換した5はおそらくプレーンAIFF形式ではないでしょうか。7も8も同じ容量になってますし。
 ということで5と6(1と同じ)をバイナリエディタで比べると、AIFFの方が波形データの開始までに10Byte多いようです。

 AIFF陣営?のiTunes、WAVE陣営?のWMPはそれぞれ自陣のフォーマットには利便性向上のための情報付加してプレーンな状態ではない(オプションデータ付き)ファイルを生成するようです。逆に、iTunesはWAVEはプレーンなものを出力しました。敵陣営?のフォーマットには利便性なんか考えてやらない、ということでしょうか(笑)。

 つまり、別に「WAVEは長年の積み重ねでフォーマットが肥大化している」なんてことはないのです。だって実際上記の通りWMPが作るWAVEよりiTunesが作るAIFFの方が圧倒的に肥大化してますし(プレーンな状態の差は10Byteです)。単純にリッパーに依存するってことですね。
 そういう意味でも、iTunesでWAVE形式リッピングはやっぱりオススメです。


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

ERIへようこそ

Author:らかせ
 「最新記事」または「メインメニュー」からどうぞ

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です
・一応、拍手にコメント(非公開)付けられるようにしてあります
・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください
・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください
・引用の考え方については「007:諸事」をご参照ください
・アフィリエイトはAmazonのみです
・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

最新記事
カテゴリ
検索フォーム
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。