Waveデータをこんな感じ↓でプロットするプログラム。

    WPP
考え方はこうだ。

まず、16bitのステレオ(2ch)で録った5MB(5242880byte)のデータを、以下のサイズの表に描くことを例に考えよう。

WPP

y軸(振幅方向)について

16bitのサンプリングは-32768〜32767の範囲で振幅値が表現されている。
よって表のy軸の真ん中が振幅0値となり、その上下に正負のデータをそれぞれ100pxに表すことになる。

そこで、正のデータ(最大値32767)の振幅値を100px以内に収めるために、2の9乗に縮小する計算をした。

32767÷2の9乗=63.998046875
こうすれば、振幅値の32767を約64pxで図に表現できる。

ちなみに2の8乗だと  32767÷2の8乗=127.99609375  なので表からはみだしてしまう。
なので、100pxの場合は2の9乗が良いだろう。

x軸(時間方向)について

x軸1000pxの範囲に全てのデータを表現するのだから、1つのピクセルにいくつのデータを表現するかを計算する。
これは全体のデータ数を、x軸のピクセル数で割のだから、

5242880byte ÷ 2ch ÷ 2byte(16bit) ÷ 1000px = 1310.72
となる。  (この例のデータは、ステレオ(2ch)で1サンプルが16bitであることの考慮を忘れずに)

そして、約1311個のデータを1pxに表現するため、この範囲の振幅値の最大値最小値を求め1本の線を引く
これを最後のデータまで繰り返し行えば波形が描ける。

この考えで(細かいことは抜きにして)プログラムにすると、こんな感じWaveCreate.cppになる。
これはそのリソースresource.hresource.rcだ。


ここに掲載しているソフトウエアは、オープンソース・ソフトウェアですが、著作権は著作者に帰属します。
本ソフトウェアによる損害が生じても、いかなる保証は出来きません。あらかじめ承知ください。
戻る