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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值