wav是微软开发的一种音频文件格式,注意,wav文件格式是无损音频文件格式,相对于其他音频格式文件数据是没有经过压缩的,通常文件也相对比较大些。

文件格式如图所示:

解析代码如下:

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>struct WAV_Format {uint32_t ChunkID;   /* "RIFF" */uint32_t ChunkSize;   /* 36 + Subchunk2Size */uint32_t Format;   /* "WAVE" *//* sub-chunk "fmt" */uint32_t Subchunk1ID;  /* "fmt " */uint32_t Subchunk1Size;   /* 16 for PCM */uint16_t AudioFormat;   /* PCM = 1*/uint16_t NumChannels;  /* Mono = 1, Stereo = 2, etc. */uint32_t SampleRate;  /* 8000, 44100, etc. */uint32_t ByteRate;   /* = SampleRate * NumChannels * BitsPerSample/8 */uint16_t BlockAlign; /* = NumChannels * BitsPerSample/8 */  uint16_t BitsPerSample; /* 8bits, 16bits, etc. *//* sub-chunk "data" */uint32_t Subchunk2ID;  /* "data" */uint32_t Subchunk2Size;   /* data size */
}; int main(void)
{FILE *fp = NULL;struct WAV_Format wav;fp = fopen("test.wav", "rb");if (!fp) {printf("can't open audio file\n");exit(1);}fread(&wav, 1, sizeof(struct WAV_Format), fp);printf("ChunkID \t%x\n", wav.ChunkID);printf("ChunkSize \t%d\n", wav.ChunkSize);printf("Format \t\t%x\n", wav.Format);printf("Subchunk1ID \t%x\n", wav.Subchunk1ID);printf("Subchunk1Size \t%d\n", wav.Subchunk1Size);printf("AudioFormat \t%d\n", wav.AudioFormat);printf("NumChannels \t%d\n", wav.NumChannels);printf("SampleRate \t%d\n", wav.SampleRate);printf("ByteRate \t%d\n", wav.ByteRate);printf("BlockAlign \t%d\n", wav.BlockAlign);printf("BitsPerSample \t%d\n", wav.BitsPerSample);printf("Subchunk2ID \t%x\n", wav.Subchunk2ID);printf("Subchunk2Size \t%d\n", wav.Subchunk2Size);fclose(fp);return 0;
}

// 2016-09-22 add
ByteRate计算方法是SampleRate * NumChannels * BitsPerSample/8,那么这个公式计算出来的是1秒钟音频数据大小,单位为Byte,以44100、16bit、2通道为例,那么计算出来值为176400,根据总音频数据大小,可以得出播放时间的计算公式为Subchunk2Size / ByteRate。

参考:http://soundfile.sapp.org/doc/WaveFormat/

wav音频文件格式解析相关推荐

  1. java 中wav文件格式,Wav音频文件格式详解

    Wav是RIFF的一种音频格式,所以开始的4个字节一定是RIFF这4个char,接下来4个字节是接下来的文件的总长度,加上之前的RIFF占了8字节,所以文件目测总长度应该是这个字节的数值+8,在Wav ...

  2. WAV音频格式解析C代码

    1)文件头的结构体 typedef struct _wavFormatInfo{ unsigned short AudioFormat; // 1 for PCM. Linear quantizati ...

  3. c语言程序设计wav,WAV音频格式解析C代码

    1)文件头的结构体 typedef struct _wavFormatInfo{ unsigned short AudioFormat; // 1 for PCM. Linear quantizati ...

  4. 绘制 wav 音频的波形图

    摘要 想要根据 wav 格式的音频文件,绘制出如软件「GoldWave」所绘制的音频数据的图像.探索波形图绘制的一些数据处理. 本文记录了初探时可能会遇到的一些问题. 预热 了解 wav 的文件格式. ...

  5. 音频文件的结构与规范——RIFF和WAVE音频文件格式

    RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...

  6. java wav音频文件播放器demo

    java 简易wav音频文件播放器 测试文件 源码 相关资料 测试文件 csdn下载 : https://download.csdn.net/download/qq_41054313/18704149 ...

  7. 音频之WAV格式编码解析

    学习目标: 音频之WAV格式编码解析 学习内容: 介绍 WAV是最常见的声音文件格式之一,wav文件分为两个部分,第一个部分是wav头文件,第二个部分是PCM编码的音频数据部分.是微软公司专门为Win ...

  8. C语言解析WAV音频文件

    转载:http://www.cnblogs.com/LexMoon/p/wave-c.html 1.C语言解析WAV音频文件 代码地址: Github : https://github.com/Cas ...

  9. WAV文件格式解析及处理

    RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...

最新文章

  1. python unicode编码转换中文_python unicode转中文及转换默认编码
  2. 胖爷的vim实用手册 - 基础篇(打开、关闭、移动、搜索)
  3. 20145324 20145325 《信息安全系统设计基础》实验三
  4. js判断fck编辑器内容是否为空并获得焦点
  5. oracle expdp自动导出数据,Oracle expdp数据泵远程导出
  6. SpringBoot指定服务项目名
  7. iview选择月份 月初月末 时间戳格式
  8. dd命令测试linux磁盘io情况,dd命令:做硬盘IO性能测试
  9. 在.NET Core中使用MongoDB明细教程(3):Skip, Sort, Limit, Projections
  10. 微信墙服务器地址,一面微信墙的诞生(3) 用户端界面的创建
  11. 【新书速递】你想知道的通信“灵魂三问”都在这里……(福利再现)
  12. 为什么php打开网页空白的_PHP页面出现空白页面该怎么办
  13. QDateTimeEdit使用
  14. oracle中 initcpa,oracle  11g rman备份
  15. 软件著作权算法软件设计说明书_急求app软件著作权说明书模板
  16. 13家电脑品牌来源大揭底
  17. 【超详细教程】告别证书,图文并茂教你免签名XX,三种方法任你选!超简单...
  18. 基于HTML/CSS/JS的动态元素周期表
  19. UnicodeEncodeError: ‘charmap‘ codec can‘t encode characters in position 0-1: character maps to <unde
  20. 使用tesserocr二值化识别知网登录验证码

热门文章

  1. 技术状态管理(六)-技术状态审核
  2. 怎样获得python证书_如何从python中的x509证书中提取公钥?
  3. 5.2SVM2--python机器学习
  4. 用word打开摄像头
  5. 达内培训 Android糯米,一种用于糯米烧卖(麦)成型的内馅供料组件的制作方法...
  6. c语言程序数列问题,数列 (C语言代码)
  7. 忘记服务器root用户密码
  8. 微积分(一)一般概念以及从圆的面积怎么来?
  9. KT148A语音芯片SOP8封装直驱扬声器内置420秒语音空间,一线控制,可重复烧录。用户可以自己更换声音
  10. Linux指令-唐战伟