c言語での wavファイルの編集(音楽編集・フェード)
プログラミング初心者です。
現在Cでwavファイルの編集を行っています。
wavファイルにフェードをかけようと思うのですが、8bitの場合はうまくいったのですが、16ビットの場合がうまくいきません。
2バイト分読み込むだけでいいと思って、8ビットのときのf***(&data,1,***);のところの1を2にしただけです。
以下のようにプログラムを作成したのですがだめでした。
ヘッダの情報は決めうちでそのまま書き込むようにしてあります。
どのようにしたらうまくいきますか??
アドバイスよろしくお願いします。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define HEADER 44 // HEADER SIZE
#define F_LEVEL 0.9999999 // FADE LEVEL
double FADE(double f);
main(int argc, char *argv[])
{
FILE *f_in,*f_out;
unsigned char header[HEADER];
unsigned char data2[2];
int data;
double work,mul=1.0;
if((f_in = fopen(argv[1],"rb")) == NULL)
exit(0);
if((f_out = fopen(argv[2],"wb")) == NULL)
exit(0);
fread(header,1,HEADER,f_in); // HEADER READ
fwrite(header,1,HEADER,f_out); // HEADER WRITE
while(fread(data2,2,1,f_in) == 1)<-ここのwhile内の部分
{ をどうにかすればいいと思うのですが・・・
work = data2[0]+256U*data2[1];
mul = FADE(mul);
work = work * mul;
data = (int)(work);
fwrite(&data,2,1,f_out);
}
data = 0;
fwrite(&data,2,1,f_out);
data = 0;
fwrite(&data,2,1,f_out);
fclose(f_in);
fclose(f_out);
}
double FADE(double f)// FADE
{
f = f * F_LEVEL;
return (f);
}
よろしくお願いします。
参考URL:http://www.kk.iij4u.or.jp/~kondo/wave/
お礼
ご回答ありがとうございました。 参考にさせていただきます。