※作りかけです
16bitの波形データが収められたバイナリファイルにWAV形式のヘッダをつけてWAVファイルにするためのツールです。
現在44100Hz 16bit モノラルのみ対応ですが近いうちにステレオくらいまでは対応しようと思っています。
コンパイルは以下のような感じで。
gcc -o write16wav write16wav.c
write16wav.c
#include <stdio.h> #include <stdlib.h> /*prottype*/ void disperr(void); int main(int argc, char *argv[]){ FILE *fp,*fpo; unsigned long binsize = 0; long i; char d; unsigned char header[] = { 'R','I','F','F',0,0,0,0, 'W','A','V','E','f','m','t',' ', 0x10,0,0,0, 1,0, 1,0, 0x44,0xAC,0,0, 0x88,0x58,1,0, 2,0, 0x10,0, 'd','a','t','a',0,0,0,0 }; if( argc < 3 ){ disperr(); return 0; } if( argc == 4 ){ } fp = fopen(argv[1],"rb"); fseek(fp,0,SEEK_END); binsize = ftell(fp); fseek(fp,0,SEEK_SET); header[4] =(char) (binsize+36) & 0xff; header[5] =(char) ((binsize+36) & 0xff00) >> 8; header[6] =(char) ((binsize+36) & 0xff0000) >> 16; header[7] =(char) ((binsize+36) & 0xff000000) >> 24; header[40] =(char) binsize & 0xff; header[41] =(char) ((binsize) & 0xff00) >> 8; header[42] =(char) ((binsize) & 0xff0000) >> 16; header[43] =(char) ((binsize) & 0xff000000) >> 24; fpo = fopen(argv[2],"wb"); for( i = 0 ; i < 44 ; i ++ ){ fputc(header[i],fpo); } for( i = 0 ; i < binsize ; i ++ ){ d=fgetc(fp); fputc(d,fpo); } fclose(fpo); fclose(fp); } void disperr(void){ printf("usage\n"); printf("write16wav inputfilename outputfilename [channel 1or2]\n\n"); }