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

fgetcintchar ではなく を返します。その戻り値を絶対に保存する必要があります。intそうしないと0、ファイル内のプレーンとEOF.

関連する質問を参照してください: fgetc は EOF を識別しません

于 2011-05-17T17:46:50.917 に答える