[求助] 用fread读wav文件出错了请教大神

蓝逸   2012-5-24 13:01 楼主

主程序:

 

#include "Wave.h"

// WaveHeader.c


//void main(int argc, char **argv)
void main()
{
    FILE *fp=NULL;
 unsigned long size; 
 wav_pcm_header44 hwav;
 short *data;
 int i;
 
 
 /*
 *  Get wave header information
 */
 //fpWav = fopen(argv[1], "rb");
 //fp = fopen("music_source.wav", "rb+");
 //fpWav = fopen("abc.txt","r+");
 // printf("Channel number: %d\n",fpWav);
 
 if ((fp = fopen("News Item 1.wav","rb"))!=NULL)
 {
  fread(&hwav,sizeof(wav_pcm_header44),1,fp);
 // fread(&hwav, 44,1,fp);
  
  /* Check wave header */
  if ( (0==memcmp(hwav.ChunkID, "RIFF", 4)) &&(0==memcmp(hwav.Format, "WAVE", 4)) &&
  (0==memcmp(hwav.SubChunk1ID, "fmt ", 4)) &&(0==memcmp(hwav.SubChunk2ID, "data", 4)) &&(1==hwav.AudioFormat))
 {
   printf("Wave audio data format:\n");
   printf("Channel number: %d\n", hwav.NumChannels);
   printf("SampleRate: %dHz\n", hwav.SampleRate);
   printf("BitsPerSample: %dbits\n", hwav.BitsPerSample);
   printf("Audio data size:%d\n", hwav.SubChun2Size);
 } 
         //printf("hwav.SubChun2Size:%d\n",hwav.ChunkID);
  /*
  *  Get wave data
  */
  data=(short*)malloc(sizeof(short)*hwav.SubChun2Size);
  for (i=0;i<hwav.SubChun2Size;i++)
  {
   fread(&data,sizeof(wav_pcm_header44),1,fp);

  }
  // printf("DATA:%d\n", (&data); 
  fclose(fp);
  fp = NULL;
 }
 else
 {
  //printf("Open wave file %s failed!\n", argv[1]);
  printf("Open wave file %s failed!\n");
 }
 
 
}

 

头文件:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

// Microsoft wav pcm sound file format. Normal 44 bytes header
typedef struct _tagMsWavPcmHeader44{
signed char ChunkID[4]; // "RIFF"; The "RIFF" the mainchunk;
signed long ChunkSize; // FileSize - 8; The size following this data
signed char Format[4]; // "WAVE"; The "WAVE" format consists of two subchunks: "fmt " and "data"
signed char SubChunk1ID[4]; // "fmt "
signed long SubChunk1Size; // 16 for PCM. This is the size of the rest of the subchunk which follows this data.
signed short AudioFormat; // 1 for PCM. Linear quantization
signed short NumChannels; // 1->Mono, 2->stereo, etc..
signed long SampleRate; // 8000, 11025, 16000, 44100, 48000, etc..
signed long ByteRate; // = SampleRate * NumChannels * BitsPerSample/8
signed short BlockAlign; // = NumChannels * BitsPerSample / 8
signed short BitsPerSample; // 8->8bits, 16->16bits, etc..
signed char SubChunk2ID[4]; // "data"
signed long SubChun2Size; // = NumSamples * NumChannels * BitsPerSample / 8. The size of data
} wav_pcm_header44;

//void wave_generator(FILE *fp, wav_pcm_header44 *phwav);

 

文件头就没办法通过额 大家给看看什么问题

 

回复评论 (4)

回复 楼主 蓝逸 的帖子

编译可以可以通过 就是运行的时候 文件头就读错了
点赞  2012-5-24 13:02
从这儿挖到10新币 哈哈。但是我没看出程序有什么错误,祝早日解决。这是什么上的程序呢
点赞  2012-5-24 21:50
把News Item 1.wav去掉空格,改成NewsItem1.wav试试
点赞  2012-5-25 10:07
本人也遇到了这个问题,不知道楼主解决了没有?怎么解决的???
点赞  2012-7-26 11:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复