работа с wav файл в C

Искам да прочета wav файл и да променя неговата скорост на дискретизация (от 16 на 32). Но програмата ми не копира целия файл. Изходният файл е 175 KB, докато целевият файл е само 2 KB. Битовете на проба са 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();
}

Моля помогнете.


person saurabh    schedule 17.05.2011    source източник


Отговори (1)


fgetc връща int, а не char. Абсолютно трябва да запазите върнатата му стойност в int, в противен случай няма да има разлика между обикновен 0 във файла и EOF.

Вижте свързан въпрос: fgetc не идентифицира EOF

person Mat    schedule 17.05.2011
comment
@saurabh, актуализирай въпроса си, за да покажеш как си го променил, и бъди по-точен, когато казваш, че не работи - моля, публикувай точния размер на генерирания изход и се увери, че форматирането на кода ти е четливо, отстъпът е доста лош, тъй като е. - person Mat; 17.05.2011