WAV文件的读写

本文介绍了WAV文件的结构,并提供了读写WAV文件的代码示例,揭示了WAV文件与snd文件的区别,指出WAV文件去除头部即等同于snd文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

wav文件比snd文件多了个头=======》可以说,wav文件去掉头,就是snd文件了

以下便是wav文件的读写代码:(按着结构体顺序解析即可)

#ifndef _WAVREAD_H
#define _WAVREAD_H

#ifdef   __cplusplus  
extern "C" {  
#endif  

#include "stdafx.h"
#include <stdio.h>

	typedef unsigned char uint8;
	typedef unsigned short int uint16;
	typedef unsigned int uint32;

	typedef struct WaveHeader 
	{ 
		uint8  riff[4];             //资源交换文件标志;
		uint32 size;               //从下个地址开始到文件结尾的字节数; 
		uint8  wave_flag[4];        //wave文件标识; 
		uint8  fmt[4];              //波形格式标识 ;
		uint32 fmt_len;            //过滤字节(一般为00000010H) ;
		uint16 tag;                //格式种类,值为1时,表示PCM线性编码 ;
		uint16 channels;           //通道数,单声道为1,双声道为2 ;
		uint32 samp_freq;          //采样频率 ;
		uint32 byte_rate;          //数据传输率 (每秒字节=采样频率×每个样本字节数) ;
		uint16 block_align;        //块对齐字节数 = channles * bit_samp / 8 ;
		uint16 bit_samp;           //bits per sample (又称量化位数) ;
	} wave_header_t; 


	typedef struct WaveStruct 
	{ 
		FILE *fp;                  //file pointer ;
		wave_header_t* pHeader;      //header; 
		uint8 data_flag[4];        //数据标识符 ;
		uint32 length;             //采样数据总数 ;
		uint32 *pData;             //data ;
	} wave_t; 

void wavread(const char * filename, wave_t *pWave);


#ifdef   __cplusplus  
 }  
#endif   /* end of __cplusplus */ 

#endif

//读文件

void wavread(const char * filename, wave_t *pWave)
{

   unsigned char temp = 0;
   uint32 byts;
   uint32 i=0,w=0,iLength;
   uint32 j;
   char iHigh;

    pWave->fp = fopen(filename,"rb");

   if(pWave->fp==NULL)                              // open file 
   {  
        printf("file open failure!\n");   
		return;
   }  
   if(4 != fread(&pWave->pHeader->riff, sizeof(uint8), 4, pWave->fp))           // RIFF chunk 
   {  
        printf("read riff error!\n");  
        return;  
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值