2011-05-17 13 views
0

wavファイル&を読むには、ビットレートを16から32に変更してください。しかし、私のプログラムはファイル全体をコピーしていません。ソースファイルは175KBです。宛先ファイルは2KBのみです。 1サンプルあたりのビット数は、最初から34バイトです。wavファイルの処理C

私のコードは次のとおりです。 -

#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(); 
} 

助けてください。

答えて

3

fgetcは、文字ではなくintを返します。戻り値を絶対にintに保存する必要があります。そうでない場合は、ファイル内のプレーン0EOFの間に違いはありません。私はintにそれを変更したが、それはまだ動作していない fgetc does not identify EOF

+0

は、関連の質問を参照してください。 – saurabh

+0

@saurabh、あなたの質問を更新して、どのように変更したかを表示し、「うまくいきません」と言ったときにはもっと正確にしてください - 生成された出力の正確なサイズをポストしてください。それは悪いです。 – Mat