我想阅读一个wav文件&改变每采样率的比特(从16到32)。但我的程序不是复制整个文件。源文件是175KB,目标文件只有2KB。 每个样本的比特从开始就是34个字节。
我的代码是: -
#include<stdio.h>
void main()
{
FILE *fp,*fo;
char ch,ch1;
int j=0,s=0,arr[4],k=0;
long int i=0;
fp=fopen("msoft.wav","rb");
fo=fopen("dest.wav","wb");
while(1)
{
i=i+1;
ch=fgetc(fp);
if(ch==EOF)break;
else
{
if(i==34)
{
while(i<=35)
{
ch=fgetc(fp);
arr[j]=ch;
i++;
j++;
}
for(k=0;k<2;k++)
printf("\n%d",arr[k]);
s=arr[1];
s=(s<<8)+arr[0];
printf("\n\nS=%d",s);
s=s*2;
printf("\n new s=%d",s);
ch1=s & 255;
fputc(ch1,fo);
ch1=s & (255<<8);
fputc(ch1,fo);
}
else
fputc(ch,fo);
}
}
printf("\nOk");
getch();
}
请帮忙。
答案 0 :(得分:3)
fgetc
会返回int
,而不是char。您绝对需要将其返回值保存到int
,否则文件中的普通0
与EOF
之间不会有任何区别。
参见相关问题: fgetc does not identify EOF