winc1.png

トップ
WIN システムについて
ダウンロード
インストール
オンラインマニュアル
メーリングリスト
開発者のための情報

はじめに

WIN_pkg-3.0.0 からはWINフォーマットの中のサンプルサイズの情報の所に新たな値(5及び13)を追加した。

WINフォーマットでは隣り合うサンプル同士の差分を取り、その差分値が表現出来るだけ小さなサンプルサイズ(ただし、4, 8, 16, 24 または 32 ビット長から選択)で格納することにより圧縮効果を期待しているが、差分値が大きくなり32ビット(4バイト)長になった場合は圧縮効果が無いばかりでなく、4バイト長整数値で表現出来る値をオーバーフローしてしまう恐れがある。そこで、差分値が3バイト長以下で表現出来ない場合は、差分値をとらずに値そのものを4バイトビッグエンディアン整数値で格納する事とし、その場合のサンプルサイズの情報の値は5で表現する事とした。なお、高サンプリンレートの場合はこれまで通り+8とし、13で表現する。

サンプルサイズ情報 (高サンプリングレート *1 ) サンプルサイズ [Byte] 差分値か?
0 (8) 0.5 Yes
1 (9) 1 Yes
2 (10) 2 Yes
3 (11) 3 Yes
4 (12) 4 Yes
5 (13) 4 No

今後はサンプルサイズ情報4(12)のデータは作成しない事が望ましい。

尚、既存のサンプルサイズ4のデータについての後方互換性は確保しているので、読み込みに対してはこれまで通り問題無く認識する。

当然であるが、WIN_pkg-2.X.X 以前のバージョンではサンプルサイズ情報5(13)のデータを認識しない。

変更点

configure.in

--disable-ssize5 の追加

デフォルトでは、WINデータを生成するプログラムはサンプルサイズ4バイトの時は差分を取らない、つまり、サンプルサイズ情報5でWINデータを出力するが、このオプションを指定すると4バイトの時も差分値が入る、つまり、Ver2までの動作と同様、がデフォルトとなる。

src/winlib.c

mk_windata()

WIN_bs
                    mk_windata(int32_w *inbuf, uint8_w *outbuf, WIN_sr sr, WIN_ch sys_ch, int mode, int fix_flag)
                    /* int32_w  *inbuf;   : input data array for one sec */
                    /* uint8_w  *outbuf;  : output data array for one sec */
                    /* WIN_sr   sr;       : n of data (i.e. sampling rate) */
                    /* WIN_ch   sys_ch;   : 16 bit long channel ID number */
                    /* int      mode      : 0 : use winform(). 1 : use winform5() */
                    /* int      fix_flag  : 1 : always fixed length data (Only affect mode=1.). */

win 形式へのデータ変換のために導入された新規関数。今後ユーザがライブラリで呼び出す場合はwinform(1W)の代わりにこの関数を使用すべき。

mode で 0 を指定すると内部で winform(1W) 呼び出すので、これまで通りサンプルサイズ4バイトの時も差分値を取ります。mode で 1 を指定すると winform5(内部関数のため外からは見えない)を呼び出し、サンプルサイズ4バイトの時は差分を取らずに値そのものを格納します。

mode=1 の時(winform5の場合)は、fix_flag=1 にすると、差分値によらずサンプルサイズ情報を5でデータを出力するモード、つまり、4バイトビッグエンディアン表現の固定長モードで出力します。mode=0 の時は意味を持ちません。詳しくは、mk_windata (1W) のオンラインマニュアルを参考の事。

win2fix()

サンプルサイズ情報5に対応。

win_chheader_info()

サンプルサイズ情報5に対応。

winform5() 内部関数

内部関数。winform(1W)のサンプルサイズ情報5を出力するバージョン。因みに、winform(1W)も内部関数にすべきだが、外部ブログラムでリンクしているものがあり、後方互換性のためそのまま残す。

src/cormeisei.c

winform() --> mk_windata()

src/ecore.c, src/ecore2.c

winform() --> mk_windata()

src/lily.c

-b [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/ls8tel16_raw.c, src/ls8tel16_win.c

winform() --> mk_windata()

src/raw_100.c

-s [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/raw_shift.c

-s [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/raw_time.c

-s [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/recvnmx.c

-s [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/vanpro2.c

-s [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/wck.c

サンプルサイズ情報5に対応。

src/wform.c

-s [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/win.c

サンプルサイズ情報5に対応。

src/winrandsimu6.c

-s [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/wintowin.c

-b [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/wshift.c

-s [4|5|5f] オプションの追加。

winform() --> mk_windata()

src/wtime.c

-b [4|5|5f] オプションの追加。

winform() --> mk_windata()

Last-modified: 2020-06-23 (火) 17:23:52