обработка wav-файлов в C

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