C中的wav文件处理

时间:2011-05-17 17:42:54

标签: c turbo-c

我想阅读一个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();
}

请帮忙。

1 个答案:

答案 0 :(得分:3)

fgetc会返回int,而不是char。您绝对需要将其返回值保存到int,否则文件中的普通0EOF之间不会有任何区别。

参见相关问题: fgetc does not identify EOF