读取 wav文件 头信息, Read wav file information
来源:互联网 发布:c语言编程大赛 编辑:程序博客网 时间:2024/06/04 01:03
#include <stdio.h>
typedef signed char INT8;
typedef signed short INT16;
typedef signed int INT32;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned int UINT32;
#define SWAP32(val) (UINT32)((((UINT32)(val)) & 0x000000FF)<<24| /
(((UINT32)(val)) & 0x0000FF00)<<8 | /
(((UINT32)(val)) & 0x00FF0000)>>8 | /
(((UINT32)(val)) & 0xFF000000)>>24)
typedef struct tagRIFFCHUNK
{
UINT32 fcc;
UINT32 cb;
} RIFFCHUNK, *LPRIFFCHUNK;
typedef struct tagRIFFLIST
{
UINT32 fcc;
UINT32 cb;
UINT32 fccListType;
}RIFFLIST, *LPRIFFLIST;
typedef struct
{
UINT32 fcc;
UINT32 cb;
UINT16 wFormatTag;
UINT16 nChannels;
UINT32 nSamplesPerSec;
UINT32 nAvgBytesPerSec;
UINT16 nBlockAlign;
UINT16 wBitsPerSample;
}WAVEFORM;
static void ReadWaveForm(FILE *fp, WAVEFORM *pWave)
{
fread(&(pWave->fcc), 1, 4, fp);
fread(&(pWave->cb), 1, 4, fp);
fread(&(pWave->wFormatTag), 1, 2, fp);
fread(&(pWave->nChannels), 1, 2, fp);
fread(&(pWave->nSamplesPerSec), 1, 4, fp);
fread(&(pWave->nAvgBytesPerSec), 1, 4, fp);
fread(&(pWave->nBlockAlign), 1, 2, fp);
fread(&(pWave->wBitsPerSample), 1, 2, fp);
}
UINT32 GetWaveChunk(FILE* hFile,WAVEFORM *pWave)
{
RIFFCHUNK ch;
RIFFLIST riff;
WAVEFORM wave;
int cb=0;
if(pWave==NULL)
pWave=&wave;
if(fseek(hFile,0,SEEK_SET)==-1)
return 0;
fread(&riff, 1, sizeof(RIFFLIST), hFile);
if( riff.fcc!=SWAP32(0x52494646)|| riff.fccListType!=SWAP32(0x57415645))//RIFF, WAVE
return 0;
ReadWaveForm(hFile, pWave);
if(pWave->fcc!=SWAP32(0x666d7420))//fmt
return 0;
cb=pWave->cb + sizeof(RIFFCHUNK)-sizeof(WAVEFORM);
if((cb>0) && (fseek(hFile,cb,SEEK_CUR)==-1) )
{
return 0;
}
fread(&ch, 1, sizeof(RIFFCHUNK), hFile);
while(ch.fcc!=SWAP32(0x64617461))//data
{
if(fseek(hFile,ch.cb,SEEK_CUR)!=-1)
fread(&ch, 1, sizeof(RIFFCHUNK), hFile);
else
return 0;
}
return ch.cb;
}
int main(int argc,char *argv[])
{
FILE *fp = NULL;
WAVEFORM wavChunk = {0};
if(argc<1)
return 0;
fp = fopen(argv[1], "rb");
if(fp == NULL)
return 0;
GetWaveChunk(fp, &wavChunk);
printf("fcc = %d/n", wavChunk.fcc);
printf("cb = %d/n", wavChunk.cb);
printf("nChannels = %d/n", wavChunk.nChannels);
printf("nSamplesPerSec = %d/n", wavChunk.nSamplesPerSec);
printf("nAvgBytesPerSec = %d/n", wavChunk.nAvgBytesPerSec);
printf("nBlockAlign = %d/n", wavChunk.nBlockAlign);
printf("wBitsPerSample = %d/n", wavChunk.wBitsPerSample);
fclose(fp);
return 1;
}
- 读取 wav文件 头信息, Read wav file information
- 读取wav文件头
- WAV文件头信息
- WAV文件头信息
- 读取wav文件头,获取文件详细信息
- 用VC读取WAV文件的信息
- wav 文件头解析
- .wav文件头分析
- wav 文件头解析
- WAV文件的头信息(文件头格式)
- wav文件的读取
- matlab 读取WAV文件
- MATLAB读取wav文件
- wav文件读取参考
- wav文件的文件头
- wav文件的文件头
- C++和C读取WAV文件头的疑惑
- Linux下查看wav文件的头信息-sox
- 使用 directfb绘制图像(draw image with directfb)
- 强烈推荐准备生小宝宝或已经家有小宝宝的人看看这本书。
- java中IO之Flie类
- Linux 下录制和播放 声音, record & play audio in linux
- 读取 bmp 文件头信息, read bmp infomation
- 读取 wav文件 头信息, Read wav file information
- ubuntu搭建subversion服务器, build svn server in ubuntu
- int java.util.Random.nextInt(int n)
- test video frame rate & bitrate code in linux
- encode RGB24 to jpeg, using libjpeg
- UML建模复习笔记(一UML概述)
- decoder jpeg to rgb 24, using libjpeg
- linux上获得本地IP地址和MAC地址(get local ip address and mac address)
- Android Camera系统