⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavfile.h

📁 LInux下Wave文件的读写、播放的类。还在wave文件头中写入了自定义信息。Linux平台下使用
💻 H
字号:
/*File Name: WavFile.h
*
* WAVE-form> ->
* 	RIFF( 'WAVE'
*	<ver_ck>			// Version
*	<desc_ck>			// User defined
*	<fmt-ck>     		// Format
*	<fact-ck>   		// Fact chunk
*	<wave-data>   ) 	// Wave data
*
*/

#ifndef __WAVFILE_H
#define __WAVFILE_H 1

#include "SoundDesc.h"

/************************************/
#define ID_SIZE 4
//RIFF Header
#define RIFF_ID "RIFF"
typedef struct{
	char id[4];		// always "RIFF"
	int  len;		// remaining length after this header
}Riff_Header;

#define WAV_ID "WAVE"

//Format chunk
#define FMT_ID "fmt "
typedef struct{
	Riff_Header riff;				// id="fmt " len =0x14
	short format_tag;				// 0x0011 for IMA-ADPCM
	short channels;					// 1
	unsigned long sample_rate;      // 8000
	/*
		framesperblock(505) = 2 * (blockalign - 4 * channels) / channels + 1 
		bytespersec(4055)	= (samplerate * blockalign) / framesperblock ;
	*/
	unsigned long wav_byte_per_sec; 
	
	/*	
		ret = sample_rate * channels
		if (ret < 12000) block_align = 256 ;
		if (ret < 23000) block_align = 512 ;
		if (ret < 44000) block_align = 1024 ;
		else  block_align = 2048 ;
	*/
	short block_align;

	short bits_per_sample;			// 4
	
	/*
		framesperblock=2 * (block_align - 4*channels)/channels + 1 
	*/
	char extra_data[4];				// 0x02, 0x00, 0xf9, 0x01
}S_FormatChunk;

//Fact chunk is necessary if compression sample
#define FACT_ID "fact"
typedef struct{
	Riff_Header riff;
	/*
		sample_number = S_FormatChunk.sample_rate * sample_time
	*/
	unsigned long sample_number;
}S_FactChunk;

//Data chunk
#define DATA_ID "data"
typedef struct{
	/* 
		id = "data" 
		len = S_FactChunk.sample_number / 2
		len += S_FormatChunk.block_align - len % 256
	*/
	Riff_Header riff;    
}S_DataChunk;

//Version chunk
#define VERSION_ID "ver "
typedef struct{
	Riff_Header riff;		// id is always "ver " and len is always 4
	char ver[4];			// 0,1 is the major version and 2,3 is the minor version
}S_VersionChunk;

//User defined chunk
#define USER_ID "desc"
typedef struct{
	Riff_Header riff;		// id is always "desc" and 
	S_SndDesc desc;
}S_DescChunk;

/* 
 * 1. 同一个wav文件所要包含的ADPCM录音在一个目录下面
 * 2. 录音文件命名从00001到99999,按照录音时间顺序递增
*/
int  wavf_convert(const char *pSndName, const char *pWavName);
/******************************/
#endif /*{__WAVFILE_H}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -