スポンサーサイト

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

WAVプログラミング #4

fmt チャンクのデータの中身を見てみよう

今回は、少し音の入ったWAVファイルをダンプしてみました。
白い線のところは、お決まりのヘッダ("RIFF"、ファイルサイズ、"WAVE")です。
今回は、音データが入っていますので、ファイルサイズは0x00013214 = 78356Byteです。

チャンク(赤、黄、青の線のところ)は今回、2組だけ登場です。
0x66 6D 74 20 が"fmt "タグで、0x64 61 74 61が"data"タグです。

"fmt "チャンクのデータサイズは、0x00000010 = 16Byteで、実際に青線の所を数えても16個であることがわかります。
さて、この16Byteについて深く見てゆきましょう。
(09_08_16) WAV
注)これまでと同じように数値はリトルエンディアンです。

1~2Byte目:フォーマットID
様々フォーマットが用意されていますが、今回のWAVプログラミングで扱うのは「リニアPCM」だけです。
PCMとはPulse Code Modulationで、アナログ信号をサンプリング・量子化し、得られた信号の大きさを二進の数値データとして表現するものです。
その中でリニアPCMは、一切データ圧縮をしないフォーマットです。CDのフォーマットがこれです。
他にADPCMというフォーマットもあります。これは、直前に数値化したデータとの差を数値化することにより、音質を損なうことなくデータ量を減らす方式です。
ごちゃごちゃ書きましたが、「リニアPCM」の場合は 0x0001であり、上の結果もそうなっているのがわかるかと思います。

3~4Byte目:チャンネル数
これは簡単です。モノラルかステレオかだけの情報です。
モノラルの場合は、0x0001
ステレオの場合は、0x0002
今回の結果は0x0002ステレオになっていることが分かります。

5~8Byte目:サンプリングレート[Hz]
ご存知、1秒あたりに、何回データを記録しているかの数値です。
今回の結果は、0x0000AC44 = 44100 = 44.1kHz となっているのが分かります。

9~12Byte目:データ速度[Byte/sec]
1秒間に何バイトのデータを記録しているのかを示す数値です。
データ速度は、他の情報を元に次の計算式でも求まります。
データ速度=サンプリングレート×サンプルあたりのビット数/8 ×チャンネル数
今回の結果は、0x0002B110 = 176400Byte/secです。
ちなみに、データ速度を8倍すると、[Bit/sec]となり、いわゆるビットレートになります。

13~14Byte目:ブロックサイズ[Byte/sample×ch]
データ1回に何バイト記録しているかを示す数値です。
ブロックサイズは、他の情報を元に次の計算式でも求まります。
ブロックサイズ=サンプルあたりのビット数/8 ×チャンネル数
今回の結果は、0x0004 = 4Byteです。

15~16Byte目:サンプルあたりのビット数[bit/sample]
WAVフォーマットでは8bitか16bitだけです。
今回の結果は、0x0010 = 16bit/sampleです。


以上、fmt チャンクには、音に関するフォーマット情報が入っています。


スポンサーサイト

comment

管理者にだけ表示を許可する

05 | 2017/06 | 07
Su Mo Tu We Th Fr Sa
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
プロフィール

エレクトリックバカ

Author:エレクトリックバカ

ポケコンでプログラミングに目覚め、PICマイコンで電子工作に希望を抱き、来たるべきUGDの時代を夢見て眠る。
そんな うだつが上がらないサラリーメン。
先生、電子工作はおやつに入りますか?




Electric Baka

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

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