0

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

请帮忙。

4

1 回答 1

3

fgetc返回一个int,而不是一个字符。你绝对需要将它的返回值保存到一个文件中,int否则0文件中的普通文件和EOF.

请参阅相关问题: fgetc does not identify EOF

于 2011-05-17T17:46:50.917 回答