Python0019 音频处理(二).wav文件

上一篇文章中写到使用python 提供的wave模块对.wav文件进行读写,感觉借用别人写的代码读.wav文件不够牛B。自然而然对.wav文件产生了浓厚的兴趣。经过昨天的努力,对该格式的文件已经略有了解,并且用java实现了对.wav读取。这篇文章打算换成认识这篇文章的过程。而不是一开始介绍一堆概念,然后摆上代码。按照认识过程来写读起来比较容易理解。

1.什么是.wav文件

这是一种音频文件,取一个.wav文件,然后读取文件二进制数据,并输出。再用python的wave模块读取音频数据,输出来。然后对比文件的属性,发现一些规律。

(1)找一个.wav文件,用下面代码处理:

import wave
f="./sound11.wav"
w=wave.open(f, "r")
dt=w.readframes(20)
print(dt)
w.close()b=open(f,'rb')
for _ in range(10):print(b.read(40))
b.close()

下面是输出:

b"\x9b\xfd\x0e\xfcu\xffe\xfc+\xff\n\xfd\xec\xffG\xfe\xe7\x00\xb6\xfe\xe7\x00\xfd\xfd\x14\x01A\xfe\x8c\xff\xe3\xfe\xc4\xfe\x8d\xffP\xff\xea\xff\xcd\xfe\x0e\x00F\xff\xcb\x00$\xff)\xff\xcf\xfdk\xfd\xa2\xfe\r\xfd\xff\xfe\xe0\xfc{\xfe'\xfd\x18\xff\xdb\xfd:\xff\x1f\xfeq\xfe\xe0\xfc"
b'RIFFF\xe2\x04\x00WAVEfmt \x10\x00\x00\x00\x01\x00\x02\x00@\x1f\x00\x00\x00}\x00\x00\x04\x00\x10\x00LIST'
b'\x1a\x00\x00\x00INFOISFT\x0e\x00\x00\x00Lavf58.10.100\x00data\x00\xe2\x04\x00\x9b\xfd'
b'\x0e\xfcu\xffe\xfc+\xff\n\xfd\xec\xffG\xfe\xe7\x00\xb6\xfe\xe7\x00\xfd\xfd\x14\x01A\xfe\x8c\xff\xe3\xfe\xc4\xfe\x8d\xffP\xff\xea\xff\xcd\xfe'
b"\x0e\x00F\xff\xcb\x00$\xff)\xff\xcf\xfdk\xfd\xa2\xfe\r\xfd\xff\xfe\xe0\xfc{\xfe'\xfd\x18\xff\xdb\xfd:\xff\x1f\xfeq\xfe\xe0\xfc\xc1\xfe"
b'\xe0\xfb\x85\xfe\xf3\xfc\x80\xfeg\xfd\xb8\xfd\xd2\xfb\x04\xfd\xd3\xfb\xc6\xfd_\xfc\x07\xfe\xeb\xfb\xc2\xfd\x11\xfc\x94\xfe\xaf\xfc\xde\xfe\x14\xfd6\xff'
b'N\xfdu\x00\x9f\xfd\xbb\x00\xef\xfdY\x01\xa5\xfeH\x00\x02\xfea\xfe\xe9\xfd\xcb\xfd\x9a\xfd\xfa\xfd\x12\xfd\xe0\xfe\xc6\xfdr\xff\xe0\xfe\xef\xfe'
b'\xab\xff6\xfe\xfc\xfe\x15\xff\xb2\xfe^\xff\xd8\xfea\x00\x03\x00\xbe\x00\xb5\x00\x94\x00\xe0\x01\x14\x01\xbc\x01\xc1\x01\x03\x01q\x01\xd1\x01;\x02'
b'\x97\x03$\x02\xb1\x03\xa1\x01\x16\x02\xf6\x01S\x02\xa2\x00\xee\x01j\x00a\x01\x8c\x00\x06\x01\xbe\x00\xbe\x00\xf2\x01p\x01C\x02\x00\x01\t\x02'
b'\xd1\x00\xdd\x01\xf6\x00e\x01m\x01-\x00\xb9\x00\xfd\xff\x10\x01\xbf\xff\xc1\x01\xa7\xfeJ\x00\\\xfe\x06\x00\t\xff\xd7\xff\xfe\xfe\xe0\xfe\r\x00'
b'\xe0\xfeQ\x01\x14\x00\x8c\x00\n\x00\xf8\xff\x08\xffV\x00\xcb\xff\xd9\xff\xa6\x00|\xff\x10\x02\xce\xff\xb9\x02A\xff\xd9\x01\x8a\xffz\x00\xf1\xff'

第一行是读取音频文件的前20帧的二进制数据,后面的若干行是该文件的二进制数据。看到这个数据后,我的第一反应是重叠部分。经过细心的比对,终于发现输出的第三行末尾最后两个字节是和第一行音频帧数据是重复的。第4行也是重复的。

初步结论:.wave是一种没有经过压缩的音频文件。 .wave 文件的前78字节记录了音频的相关信息。

(2)接下来就是对文件头部前78B进行研究了。

头部数据:

RIFFF\xe2\x04\x00WAVEfmt \x10\x00\x00\x00\x01\x00\x02\x00@\x1f\x00\x00\x00}\x00\x00\x04\x00\x10\x00LIST

\x1a\x00\x00\x00INFOISFT\x0e\x00\x00\x00Lavf58.10.100\x00data\x00\xe2\x04\x00\

可以看到存在一些可以看懂的疑似固定字母的数据,这些应该是该文件头部固定的信息。例如RIFF,WACE,fmt_,[LIST],[INFOISFT],data。然后去网上找了一些关于.wava头部信息,如下:

[4B]固定字符串'RIFF'   [4B]整数,代表剩余文件长度   [4B]固定字符串'WAVE'   [4B]固定字符串'fmt '(后面有一个空格)

[4B]整数,代表接下来几个音频文件参数的长度   [2B]整数,audio_format_tag   [2B]整数,声道个数   [4B]整数,采样率

[4B]整数,音频数据传送速率AvgBytesPerSec   [2B]整数,BlockAlign 数据块调整数   [2B]整数,采样大小bitsPerSample

#下面这部分可能有,也可能没有,记录一些没有用的信息。

[4B]固定字符串'LIST'  [4B]整数,代表剩余的这些没用信息的总长度s  [sB]没什么卵用的信息,可能有作者,公司等信息,直接跳过即可。

[4B]固定字符串'data'  [4B]整数,代表接下来音频数据的总长度n   [nB]音频数据

(3)按照上面的头信息来解析刚才那个头部 

注意:部分二进制数据以字符形式显示,可以对照这里 http://ascii.911cha.com/查找对应的16进制

注意:里面整数是无符号整数,数据方向是由后向前比如F\xe2\x04\x00 代表整数0x0004e266

RIFF F\xe2\x04\x00剩余文件长度是:0x4e266 320102B   WAVE

fmt_  \x10\x00\x00\x00接下的数据长度是:0x10 16B    \x01\x00audio_famat_tag:0x1    \x02\x00声道数0x2 2个声道

@\x1f\x00\x00采样率0x1f40 8000fps      \x00}\x00\x00音频数据传送率0x7d00 32000Bps  \x04\x00数据块调整0x4 4Bpf

\x10\x00采样大小0x10 16b=2B

LIST  \x1a\x00\x00\x00接下的数据长度是:0x1a 26BINFOISFT \x0e\x00\x00\x00接下的数据长度是:0xe 14B

Lavf 58.10.100 \x00截止

data  \x00\xe2\x04\x00\接下的数据长度是:0x4e200 320000B

2.有了上面的知识写一个wave文件的读写类并不困难。

Python0019 音频处理(二).wav文件相关推荐

  1. PCM音频数据封装为WAV文件

    ------------------------------------全系列文章目录------------------------------------ PCM(Pulse Code Modul ...

  2. matlab 音频fft,在wav文件和FFT的matlab中的Audioread

    那是因为你没有绘制幅度.您正在绘制的是系数,但这些是复杂的.因此,水平轴是实部,垂直轴是虚部.此外,当您单独使用 sound时,默认采样频率为8 kHz(准确地说是8192 Hz),这可以解释为什么您 ...

  3. mp3转换wav文件_如何将WAV文件转换为MP3

    mp3转换wav文件 WAV audio files are a great way to preserve the complete and accurate quality of a record ...

  4. 【音频驱动】Linux之ALSA声卡、WAV文件相关概念

    Linux之ALSA音频相关概念 Linux之ALSA音频相关概念 一.ALSA简介 二.音频相关概念 1.采样频率 2.量化位数(ADC精度) 3.声道数 4.交错模式 三.WAV文件 1.编码格式 ...

  5. wav文件降噪c语言,音频降噪算法 附完整C代码

    降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言之,美化. 图像算法和音频算法 都有其共通点. 图像是偏向 空间 处理,例如图片中的某个区域. 图像很多时候是以二维数据 ...

  6. VC++初步实现保存数据为音频WAV文件

    先行基本知识见此 https://blog.csdn.net/bcbobo21cn/article/details/109087252 win7, vc6:新建一个对话框工程:添加一个文本框:为文本框 ...

  7. Android音频开发(4):如何存储和解析wav文件

    2019独角兽企业重金招聘Python工程师标准>>> 无论是文字.图像还是声音,都必须以一定的格式来组织和存储起来,这样播放器才知道以怎样的方式去解析这一段数据,例如,对于原始的图 ...

  8. 睡眠音频分割及识别问题(十)--Java读取wav文件

    简介 Waveform Audio File Format(WAVE,又或者是因为扩展名而被大众所知的 wav),是微软与 IBM公司所开发在个人电脑存储音频流的编码格式. 由于项目需要从 wav 文 ...

  9. Android音频开发(五)如何存储和解析最简单的音频wav文件

    我们大家都知道,无论是文字.图像还是声音,都必须以一定的格式来组织和存储起来,然后其它的软件再以相同的协议规则,相应的格式才能去打开解析这一段数据,例如,对于原始的图像数据,我们常见的格式有 YUV. ...

最新文章

  1. 集成学习需要理解的一些内容
  2. Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
  3. 50个运维必会的常识和操作
  4. Ribbon_窗体_实现Ribbon风格的窗体
  5. Source Insight经典教程
  6. tornado异步请求响应速度的实例测试
  7. 东方财富代码选股_东方证券APP评测:智能选股方面优秀 投顾服务缺失
  8. 按照ISO26262标准检验建模规范:基于模型的软件开发质量工具
  9. H5案例分析和场景应用
  10. Lomboz插件的介绍 下载 安装 问题
  11. 时间与时间戳之间的转换
  12. 计算机基础——网卡(网络适配器network adaptor)
  13. Golang可能会踩的58个坑之中级篇
  14. 服务器大线程有什么作用,全面剖析超线程技术优点与缺点
  15. 什么是交换机?跟服务器之间有什么联系吗?
  16. GBASE 8s UDR内存管理_03_mi_realloc
  17. It Is Not the Journey But the Destination: Endpoint Conditioned Trajectory Prediction
  18. Verilog的结构化、数据流、行为级描述方式
  19. 如何采集苏宁易购买家订单?
  20. 江苏东方四通科技股份有限公司参观学习有感

热门文章

  1. Java生成二维码带LOGO底部标题竖版字体
  2. bzoj2563阿狸和桃子的游戏
  3. 免费内网穿透远程访问家里的监控
  4. mikrotik桥接TP-link教程
  5. 桌面云服务器联想,联想Livc桌面云解决方案产品介绍
  6. think php5 离线手册,thinkphp5.0离线手册下载
  7. OneNET麒麟座应用开发之三:获取温湿度数据
  8. 大一下学期第十一周及以前学习总结
  9. 技法(但请少用):为非活动窗口绘制活动的标题栏
  10. ctfshow 网络迷踪-给你拷上