【问题标题】:wav file handling in CC中的wav文件处理
【发布时间】:2011-08-27 10:50:24
【问题描述】:

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

请帮忙。

【问题讨论】:

    标签: c turbo-c


    【解决方案1】:

    fgetc 返回一个int,而不是一个字符。您绝对需要将其返回值保存到 int 中,否则文件中的普通 0EOF 之间没有区别。

    查看相关问题: fgetc does not identify EOF

    【讨论】:

    • @saurabh,更新您的问题以显示您如何更改它,并且在您说“不工作”时更准确 - 请发布生成输出的确切大小,并确保您的代码格式是可读的,缩进很糟糕。
    猜你喜欢
    • 2013-04-11
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多