#include "Wave.h"// WaveHeader.c
void main(int argc, char **argv)
{
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
",fpWav);
if (fp)
{
fread(&hwav, sizeof(wav_pcm_header44), 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:
");
printf("Channel number: %d
", hwav.NumChannels);
printf("SampleRate: %dHz
", hwav.SampleRate);
printf("BitsPerSample: %dbits
", hwav.BitsPerSample);
printf("Audio data size:%d
", hwav.SubChun2Size);
// }
//printf("hwav.SubChun2Size:%d
", hwav.SubChun2Size);
/*
* 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);
}
fclose(fp);
fp = NULL;
}
else
{
printf("Open wave file %s failed!
", argv[1]);
}
}
头文件 #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
{
unsigned char ChunkID[4]; // "RIFF"; The "RIFF" the mainchunk;
unsigned long ChunkSize; // FileSize - 8; The size following this data
unsigned char Format[4]; // "WAVE"; The "WAVE" format consists of two subchunks: "fmt " and "data"unsigned char SubChunk1ID[4]; // "fmt "
unsigned long SubChunk1Size; // 16 for PCM. This is the size of the rest of the subchunk which follows this data.
unsigned short AudioFormat; // 1 for PCM. Linear quantization
unsigned short NumChannels; // 1->Mono, 2->stereo, etc..
unsigned long SampleRate; // 8000, 11025, 16000, 44100, 48000, etc..
unsigned long ByteRate; // = SampleRate * NumChannels * BitsPerSample/8
unsigned short BlockAlign; // = NumChannels * BitsPerSample / 8
unsigned short BitsPerSample; // 8->8bits, 16->16bits, etc..unsigned char SubChunk2ID[4]; // "data"
unsigned long SubChun2Size; // = NumSamples * NumChannels * BitsPerSample / 8. The size of data
} wav_pcm_header44;void wave_generator(FILE *fp, wav_pcm_header44 *phwav); 编译已经能够通过 就是运行的时候读错了数据 文件头就读错了
此帖出自小平头技术问答
一周热门 更多>