我是靠谱客的博主 妩媚糖豆,最近开发中收集的这篇文章主要介绍wave header,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/*wave 文件一共有四个Chunk组成,其中第三个Chunk可以省略,每个Chunk有标示(ID),大小(size,就是本Chunk的内容部分长度),内容三部分组成*/
/*------------------------------------------------
|
RIFF WAVE Chunk
|
|
ID = 'RIFF'
|
|
RiffType = 'WAVE'
|
------------------------------------------------
|
Format Chunk
|
|
ID = 'fmt '
|
------------------------------------------------
|
Fact Chunk(optional)
|
|
ID = 'fact'
|
------------------------------------------------
|
Data Chunk
|
|
ID = 'data'
|
------------------------------------------------*/
typedef struct waveheader
{
/****RIFF WAVE CHUNK*/
unsigned char a[4];//四个字节存放'R','I','F','F'
long int b;
//整个文件的长度-8;每个Chunk的size字段,都是表示除了本Chunk的ID和SIZE字段外的长度;
unsigned char c[4];//四个字节存放'W','A','V','E'
/****Format CHUNK*/
unsigned char d[4];//四个字节存放'f','m','t',''
long int e;
//16后没有附加消息,18后有附加消息;一般为16,其他格式转来的话为18
short int f;
//编码方式,一般为0x0001;
short int g;
//声道数目,1单声道,2双声道;
long int h;
//采样频率;
long int i;
//每秒所需字节数;
short int j;
//每个采样需要多少字节,若声道是双,则两个一起考虑;
short int k;
//即量化位数
/***Data Chunk**/
unsigned char p[4];//四个字节存放'd','a','t','a'
long int q;
//语音数据部分长度,不包括文件头的任何部分
} waveheader;//定义WAVE文件的文件头结构体
waveheader *get_waveheader(int bits, int rates, int channels, unsigned long size)
{
waveheader *header = malloc(sizeof(*header));
header->a[0] = 'R';
header->a[1] = 'I';
header->a[2] = 'F';
header->a[3] = 'F';
header->b = size - 8;
header->c[0] = 'W';
header->c[1] = 'A';
header->c[2] = 'V';
header->c[3] = 'E';
header->d[0] = 'f';
header->d[1] = 'm';
header->d[2] = 't';
header->d[3] = ' ';
header->e = 16;
header->f = 1;
header->g = channels;
header->h = rates;
header->i = size / (rates * channels * bits / 8);
header->j = channels * bits / 8;
header->k = bits;
header->p[0] = 'd';
header->p[1] = 'a';
header->p[2] = 't';
header->p[3] = 'a';
header->q = size;
return header;
}

最后

以上就是妩媚糖豆为你收集整理的wave header的全部内容,希望文章能够帮你解决wave header所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部