★スマイルデコーダのサウンドオプションにIMA ADPCMを使ってみた |
★IMA ADPCMとは |
★IMA ADPCMへの変換 |
★バイナリファイルからテキストファイルへ |
#------------------------------------------------------------------------------- # sdbin2h.pl #------------------------------------------------------------------------------- $op0 = $ARGV[0]; $op1 = $ARGV[1]; $op2 = $ARGV[2]; $inf=$op0; $outf=$op1; print "IN=$inf\n"; print "OUT=$outf\n"; $size = -s $inf; # ファイルのサイズを得る open(IN, $inf); # ファイルを開く open(OUT, ">$outf"); # ファイルを開く binmode(IN); # バイナリモードにする print OUT " // $inf const signed char $op2 _data[] PROGMEM ={ "; for(;;) { read(IN, $buf, 20); # データを読み込む last if(eof IN); @c = unpack("C*",$buf); print OUT " "; foreach $data (@c) { $data = sprintf"0x%02x",$data; #16進数で出力 print OUT "$data"; print OUT ","; } print OUT "\n"; } print OUT " }; "; close(IN); # クローズする close(OUT); # クローズする #-------------------------------------------------------------------------------Windowsで実行する場合は、ActivePerlが必要です。
C:\Perl\foo> C:\Perl\foo>perl sdbin2h.pl E233_Alert1_imaADPCM.wav E233_Alert1_imaADPCM.h E233_Alert1 IN=E233_Alert1_imaADPCM.wav OUT=E233_Alert1_imaADPCM.h C:\Perl\foo>perl sdbin2h.pl E233_Alert3_imaADPCM.wav E233_Alert3_imaADPCM.h E233_Alert3 IN=E233_Alert3_imaADPCM.wav OUT=E233_Alert3_imaADPCM.h C:\Perl\foo>perl sdbin2h.pl E233_break1_imaADPCM.wav E233_break1_imaADPCM.h E233_break1 IN=E233_break1_imaADPCM.wav OUT=E233_break1_imaADPCM.h C:\Perl\foo>
// 1khz.wav const signed char 1kh_data[] PROGMEM ={ 0x52,0x49,0x46,0x46,0x34,0x20,0x00,0x00,0x57,0x41,0x56,0x45,0x66,0x6d,0x74,0x20,0x14,0x00,0x00,0x00, 0x11,0x00,0x01,0x00,0x40,0x1f,0x00,0x00,0xd7,0x0f,0x00,0x00,0x00,0x01,0x04,0x00,0x02,0x00,0xf9,0x01, 0x66,0x61,0x63,0x74,0x04,0x00,0x00,0x00,0x20,0x3f,0x00,0x00,0x64,0x61,0x74,0x61,0x00,0x20,0x00,0x00, 0xbe,0x06,0x00,0x00,0x77,0xf7,0xff,0x1f,0x77,0xf4,0x9c,0x41,0x13,0xba,0x9d,0x41,0x13,0xba,0x9d,0x41, 0x13,0xba,0x9d,0x41,0x13,0xba,0x9d,0x41,0x13,0xba,0x9d,0x32,0x14,0xc9,0x9b,0x41,0x23,0xca,0x9c,0x41, ・ ・ ・ 0x80,0x08,0x80,0x80,0x08,0x80,0x08,0x80,0x08,0x08,0x08,0x08,0x08,0x80,0x80,0x80,0x80,0x80,0x90,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };
★PCMとIMA-ADPCM(4bit DVA-ADPCM)のRIFFヘッダファイルの比較 |
Offset | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 |
DATA | 0x52 | 0x49 | 0x46 | 0x46 | 0x8e | 0x22 | 0x00 | 0x00 | 0x57 | 0x41 |
内容 | R | I | F | F | ファイルサイズ:0x228e(8846byte) | W | A | |||
Offset | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
DATA | 0x56 | 0x45 | 0x66 | 0x6d | 0x74 | 0x20 | 0x10 | 0x00 | 0x00 | 0x00 |
内容 | V | E | f | m | t | _ | format定義サイズ:0x10(16d) | |||
Offset | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
DATA | 0x01 | 0x00 | 0x01 | 0x00 | 0x40 | 0x1f | 0x00 | 0x00 | 0x40 | 0x1f |
内容 | formatID:0x0001 | channel数:0x0001 | sampl rate:0x1f40:8000Hz | data転送速度:0x1f40 | ||||||
Offset | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
DATA | 0x00 | 0x00 | 0x01 | 0x00 | 0x08 | 0x00 | 0x64 | 0x61 | 0x74 | 0x61 |
内容 | . | ブロックサイズ | 量子化ビット数:8bit | d | a | t | a | |||
Offset | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
DATA | 0x6a | 0x22 | 0x00 | 0x00 | 0x84 | 0x87 | 0x87 | 0x87 | 0x86 | 0x87 |
内容 | バイト数:0x226a(8810d) | . | . | . | . | . | . |
Offset | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 |
DATA | 0x52 | 0x49 | 0x46 | 0x46 | 0x34 | 0x12 | 0x00 | 0x00 | 0x57 | 0x41 |
内容 | R | I | F | F | ファイルサイズ:0x1234(4660byte) | W | A | |||
Offset | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
DATA | 0x56 | 0x45 | 0x66 | 0x6d | 0x74 | 0x20 | 0x14 | 0x00 | 0x00 | 0x00 |
内容 | V | E | f | m | t | _ | format定義サイズ:0x14(20d) | |||
Offset | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
DATA | 0x11 | 0x00 | 0x01 | 0x00 | 0x40 | 0x1f | 0x00 | 0x00 | 0xd7 | 0x0f |
内容 | formatID:0x0011 | channel数:0x0001 | sampl rate:0x1f40:8000Hz | data転送速度:0x0fd7 | ||||||
Offset | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
DATA | 0x00 | 0x00 | 0x00 | 0x01 | 0x04 | 0x00 | 0x02 | 0x00 | 0xf9 | 0x01 |
内容 | . | バイトサンプル | 量子化ビット数:4bit | 拡張サイズ:2byte | . | . | ||||
Offset | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
DATA | 0x66 | 0x61 | 0x63 | 0x74 | 0x04 | 0x00 | 0x00 | 0x00 | 0x82 | 0x23 |
内容 | f | a | c | t | チャンクサイズ:0x0004(4byte) | サンプル数:0x2382 | ||||
Offset | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
DATA | 0x00 | 0x00 | 0x64 | 0x61 | 0x74 | 0x61 | 0x00 | 0x12 | 0x00 | 0x00 |
内容 | . | d | a | t | a | データサイズ:0x1200(4608byte) | ||||
Offset | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 |
DATA | 0x00 | 0x04 | 0x00 | 0x00 | 0x77 | 0x77 | 0x87 | 0x80 | 0xaf | 0x20 |
内容 | iSamp0(2byte) | bStepTableIndex | . | . | . | . | . | . |
アドレスオフセット | コード | 意味 | 詳細 |
(HEX) | (HEX) | . | . |
+00 | 52 | "RIFF" (ckID) | . |
+01 | 49 | . | |
+02 | 46 | . | |
+03 | 46 | . | |
+04 +05 +06 +07 | 34 12 00 00 | ckSize (4Byte) | . |
+08 | 57 | "WAVE" (formType) | . |
+09 | 41 | . | |
+0A | 56 | . | |
+0B | 45 | . | |
+0C | 66 | "fmt " | IMA ADPCM形式のフォーマット情報 (サイズは28Byte固定) |
+0D | 6d | ||
+0E | 74 | ||
+0F | 20 | ||
+10 +11 +12 +13 | 04 00 00 00 | ckSize:0x00000004 (4Byte) | . |
+14 +15 | 11 00 | wFormatTag:0x0011 (2Byte) | (0x0011:IMA ADPCM形式) |
+16 +17 | 01 00 | nChannels:0x0001 (2Byte) | (0x0001:モノラル) |
+18 +19 +1A +1B | 40 1F 00 00 | nSamplesPerSec:0x00001f40 (4Byte) | (0x1f40:8kHz) |
+1C +1D +1E +1F | D7 0F 00 00 | nAvgBytesPerSec:0x00000fd7 (4Byte) | (0x0FD7:8kHz,4bit モノラル) |
+20 +21 | 00 01 | nBlockAlign:0x0100 (2Byte) | (0x0100:256Byte) |
+22 +23 | 04 00 | wBitsPerSample:0x0004 (2Byte) | (0x0004:4bit) |
+24 +25 | 02 00 | cbSize:0x0002 (2Byte) | (0x0002:2byte) |
+26 +27 | F9 01 | extByte[cbSize]:0x01F9 (2Byte) | . |
+28 | 66 | "fact" | IMA ADPCM形式のフォーマット情報 (サイズは28Byte固定) |
+29 | 61 | ||
+2A | 63 | ||
+2B | 43 | ||
+2C +2D +2E +2F | 04 00 00 00 | (4Byte) | . |
+30〜 +33 | サンプル数:0x2382 (4Byte) | . | |
+34 | 64 | "data" | IMA ADPCM形式のフォーマット情報 (サイズは28Byte固定) |
+35 | 61 | . | |
+36 | 74 | . | |
+37 | 61 | . | |
+38〜 +3B | データサイズ:0x1200(4608byte) (4Byte) | . | |
+3C〜 +3D | iSamp0 (2Byte) | . | |
+3E〜 +3F | bStepTableIndex (2Byte) | . | |
+0C〜 +27 | fmt-ck (28Byte) | IMA ADPCM形式のフォーマット情報 (サイズは28Byte固定) | |
+28〜 +33 | fact-ck (12Byte) | チャンネル単位のブロックあたりの サンプル数 |
typedef struct dvi_adpcmblockheader_tag { int iSamp0; BYTE bStepTableIndex; BYTE bReserved; } DVI_ADPCMBLOCKHEADER;
Field | Description |
iSamp0 | The first sample value of the block. When decoding, this will be used as the previous sample to start decoding with. ブロックの最初のサンプル値。デコードするとき、これはとデコードを開始する前のサンプルとして使用されます。 |
bStepTableIndex | The current index into the step table array. (0 - 88) ステップ テーブル配列に現在のインデックス。 |
bReserved | This byte is reserved for future use. このバイトは、将来の使用のために予約されています。 |
アドレスオフセット(Data Word1) | コード | 意味 | 詳細 |
(HEX) | (HEX) | . | . |
+00 | 00 | iSamp0:0x0400 | LoByte |
+01 | 04 | HiByte | |
+02 | 00 | bStepTableIndex:0x00 (1Byte) | . |
+03 | 00 | bReserved:0x00 | . |
+04 | 77 | Byte0:0x77 | . |
+05 | 77 | Byte1:0x00 | . |
+ n | ** | Byten:0x** | . |
+FE | 9D | Byte251:0x9D | . |
+FF | 41 | Byte252:0x41 | . |
アドレスオフセット(Data Word2) | コード | 意味 | 詳細 |
+00 | 7A | iSamp0:0x3F7A | LoByte |
+01 | 3F | HiByte | |
+02 | 53 | bStepTableIndex:0x53 (1Byte) | . |
+03 | 00 | bReserved:0x00 | . |
+04 | 91 | Byte0:0x77 | . |
+05 | AC | Byte1:0x00 | . |
+ n | ** | Byten:0x** | . |
★ADPCMスケッチについて |
★プチ音調査1 |
★プチ音調査2 |