WAV文件格式
2015-08-22 15:29
225 查看
起始地址 | 占用空间 | 本地址数字的含义 |
00H | 4byte | “RIFF”,资源交换文件标志。 |
04H | 4byte | 从下一个地址开始到文件尾的总字节数。高位字节在后面,加上之前的8byte刚好是文件大小。 |
08H | 4byte | “WAVE”,代表wav文件格式。 |
0CH | 4byte | “fmt” ,波形格式标志 |
10H | 4byte | PCMWAVEFORMAT的大小 |
14H | 2byte | 是否是PCMWAVEFORMAT |
16H | 2byte | 声道,1为单声道,2为双声道。 |
18H | 4byte | 采样频率 |
1CH | 4byte | Byte速率=采样频率*音频通道数*每次采样得到的样本位数/8 |
20H | 2byte | 块长度=通道数*每次采样得到的样本位数/8 |
22H | 2byte | PCM宽 |
24H | 4byte | “data”标志 |
28H | 4byte | 此后的data大小,再加上2CH就正好是整个文件的大小。 |
2CH | 不定 | 正主。 |
# -*- coding: cp936 -*- # 解析WAV格式的文件-Leo import os import binascii # 定义一个字典用来存储WAV文件的HEADER WAV_HEADER = { "flag_RIFF": 0, "length_File": 0, "flag_WAVE": 0, "flag_FMT": 0, "sizeof_PCMWAVEFORMAT": 0, "PCMWAVEFORMAT": 0, "Channel": 0, "Frequency": 0, "Rate": 0, "length_DATA": 0, "wide_PCM": 0, "flag_DATA": 0, "sizeof_DATA": 0 } file_path = raw_input("input WAV file path for analyse:") with open(file_path, 'rb') as input_file: flag_RIFF = input_file.read(4) input_file.seek(4,1) flag_WAVE = input_file.read(4) # 判断文件是否是wav文件 if cmp(flag_RIFF, 'RIFF') or cmp(flag_WAVE, 'WAVE'): print "input file is not a WAV file!" exit(0) input_file.seek(0,0) WAV_HEADER["flag_RIFF"] = input_file.read(4).decode() print "flag_RIFF:", WAV_HEADER["flag_RIFF"] WAV_HEADER["length_File"] = input_file.read(4) print "length_File:", binascii.hexlify(WAV_HEADER["length_File"]) WAV_HEADER["flag_WAVE"] = input_file.read(4).decode() print "flag_WAVE:", WAV_HEADER["flag_WAVE"] WAV_HEADER["flag_FMT"] = input_file.read(4).decode() print "flag_FMT:", WAV_HEADER["flag_FMT"] WAV_HEADER["sizeof_PCMWAVEFORMAT"] = input_file.read(4) print "sizeof_PCMWAVEFORMAT:", binascii.hexlify(WAV_HEADER["sizeof_PCMWAVEFORMAT"]) WAV_HEADER["PCMWAVEFORMAT"] = input_file.read(2) print "PCMWAVEFORMAT:", binascii.hexlify(WAV_HEADER["PCMWAVEFORMAT"]) WAV_HEADER["Channel"] = input_file.read(2) print "Channel:", binascii.hexlify(WAV_HEADER["Channel"]) WAV_HEADER["Frequency"] = input_file.read(4) print "Frequency:", binascii.hexlify(WAV_HEADER["Frequency"]) WAV_HEADER["Rate"] = input_file.read(4) print "Rate:", binascii.hexlify(WAV_HEADER["Rate"]) WAV_HEADER["length_DATA"] = input_file.read(2) print "length_DATA:", binascii.hexlify(WAV_HEADER["length_DATA"]) WAV_HEADER["wide_PCM"] = input_file.read(2) print "wide_PCM:", binascii.hexlify(WAV_HEADER["wide_PCM"]) WAV_HEADER["flag_DATA"] = input_file.read(4) print "flag_DATA:", binascii.hexlify(WAV_HEADER["flag_DATA"]) WAV_HEADER["sizeof_DATA"] = input_file.read(4) print "sizeof_DATA:", binascii.hexlify(WAV_HEADER["sizeof_DATA"]) os.system('pause')
相关文章推荐
- WAV文件格式
- WAV文件格式
- 混合时代的开发己经来临
- 黑马程序员-[OC]学习之旅-封装、继承
- Android中Bitmap,byte[],Drawable相互转化
- 读取xml
- Java注解Annotation详解
- linux下tmpfs文件系统简介
- 【C++/数据结构】顺序表的基本操作
- C#datatable实例
- 将一个数组中的值按逆序重新存放
- [Android] 输入系统(二)
- 安装JavaJDK,三步搞定。
- Maximum Value(Codeforces_484B)
- 机器学习&数据挖掘学习资料搜集
- pat-旧键盘
- project.pbxproj 文件的学习
- Android Studio 'The same input jar is specified twice'
- 从cpan上安装perl模块
- 对JAVA集合进行遍历删除时务必要用迭代器