wav音频文件格式解析
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音频文件格式解析相关推荐
- java 中wav文件格式,Wav音频文件格式详解
Wav是RIFF的一种音频格式,所以开始的4个字节一定是RIFF这4个char,接下来4个字节是接下来的文件的总长度,加上之前的RIFF占了8字节,所以文件目测总长度应该是这个字节的数值+8,在Wav ...
- WAV音频格式解析C代码
1)文件头的结构体 typedef struct _wavFormatInfo{ unsigned short AudioFormat; // 1 for PCM. Linear quantizati ...
- c语言程序设计wav,WAV音频格式解析C代码
1)文件头的结构体 typedef struct _wavFormatInfo{ unsigned short AudioFormat; // 1 for PCM. Linear quantizati ...
- 绘制 wav 音频的波形图
摘要 想要根据 wav 格式的音频文件,绘制出如软件「GoldWave」所绘制的音频数据的图像.探索波形图绘制的一些数据处理. 本文记录了初探时可能会遇到的一些问题. 预热 了解 wav 的文件格式. ...
- 音频文件的结构与规范——RIFF和WAVE音频文件格式
RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...
- java wav音频文件播放器demo
java 简易wav音频文件播放器 测试文件 源码 相关资料 测试文件 csdn下载 : https://download.csdn.net/download/qq_41054313/18704149 ...
- 音频之WAV格式编码解析
学习目标: 音频之WAV格式编码解析 学习内容: 介绍 WAV是最常见的声音文件格式之一,wav文件分为两个部分,第一个部分是wav头文件,第二个部分是PCM编码的音频数据部分.是微软公司专门为Win ...
- C语言解析WAV音频文件
转载:http://www.cnblogs.com/LexMoon/p/wave-c.html 1.C语言解析WAV音频文件 代码地址: Github : https://github.com/Cas ...
- WAV文件格式解析及处理
RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...
最新文章
- python unicode编码转换中文_python unicode转中文及转换默认编码
- 胖爷的vim实用手册 - 基础篇(打开、关闭、移动、搜索)
- 20145324 20145325 《信息安全系统设计基础》实验三
- js判断fck编辑器内容是否为空并获得焦点
- oracle expdp自动导出数据,Oracle expdp数据泵远程导出
- SpringBoot指定服务项目名
- iview选择月份 月初月末 时间戳格式
- dd命令测试linux磁盘io情况,dd命令:做硬盘IO性能测试
- 在.NET Core中使用MongoDB明细教程(3):Skip, Sort, Limit, Projections
- 微信墙服务器地址,一面微信墙的诞生(3) 用户端界面的创建
- 【新书速递】你想知道的通信“灵魂三问”都在这里……(福利再现)
- 为什么php打开网页空白的_PHP页面出现空白页面该怎么办
- QDateTimeEdit使用
- oracle中 initcpa,oracle 11g rman备份
- 软件著作权算法软件设计说明书_急求app软件著作权说明书模板
- 13家电脑品牌来源大揭底
- 【超详细教程】告别证书,图文并茂教你免签名XX,三种方法任你选!超简单...
- 基于HTML/CSS/JS的动态元素周期表
- UnicodeEncodeError: ‘charmap‘ codec can‘t encode characters in position 0-1: character maps to <unde
- 使用tesserocr二值化识别知网登录验证码