Python用sndhdr模块识别音频格式详解


Posted in Python onJanuary 11, 2018

本文主要介绍了Python编程中,用sndhdr模块识别音频格式的相关内容,具体如下。

sndhdr模块

功能描述:sndhdr模块提供检测音频类型的接口。

唯一一个API

sndhdr模块提供了sndhdr.what(filename)和sndhdr.whathdr(filename)两个函数。但实际上它们的功能是一样的。(不知道多写一个的意义何在,what函数在内部调用了whathdr函数并把数据完完整整地返回)

在之前的版本,whathdr函数返回元组类型的数据,在Python3.5版本之后改为返回一个namedtuple。返回的元组包括5个属性:filetype、framerate、nchannels、nframes和sampwidth。

1.filetype代表音频格式。值为:'aifc', ‘aiff', ‘au', ‘hcom', ‘sndr', ‘sndt', ‘voc', ‘wav', ‘8svx', ‘sb', ‘ub', ‘ul'或者None中之一。常见的几个格式反倒不支持。
2.framerate代表音频文件的帧率。如果音频文件难以解码或者未知,该值会返回0。
3.nchannels代表通道数。如果音频文件难以解码或者未知,该值会返回0。
4.nframes代表帧数。如果无法确定则返回-1。
5.sampwidth代表返回样本的长度(比特),值为8的倍数,或者返回A(A-LAW格式)、u(u-LAW格式)。

>>> import sndhdr
>>> sndhdr.what('test.mp3') # 无法检测,返回None
>>> sndhdr.what('test.wav')
SndHeaders(filetype='wav', framerate=44100, nchannels=2, nframes=12630240, sampwidth=16)

注:模块在检测AIFC和AIFF时使用了aifc模块。检测wav时使用了wave模块。这两个都是Python标准库里面的模块

自定义检测流程

和imghdr模块一样,sndhdr内部也使用了一个tests列表维护检测函数。如果想要自行定义检测流程,可以通过修改tests列表达到目的。

>>> import sndhdr
>>> sndhdr.tests
[<function test_aifc at 0x000001A99B527BF8>, <function test_au at 0x000001A99B527C80>, <
function test_hcom at 0x000001A99B527D08>, <function test_voc at 0x000001A99B527D90>, <f
unction test_wav at 0x000001A99B527E18>, <function test_8svx at 0x000001A99B527EA0>, <fu
nction test_sndt at 0x000001A99B527F28>, <function test_sndr at 0x000001A99B521048>]
>>> def final(h, f): # 自定义检测函数
... print("Maybe mp3 or aac?")
...
>>> sndhdr.what("test.mp3")
>>> sndhdr.tests.append(final) # 添加自定义检测函数到检测列表中
>>> sndhdr.what("test.mp3")
Maybe mp3 or aac?

自行添加检测函数需要接收两个参数h和f,h是用来检测的字节串,f是file对象。

命令行启动sndhdr模块

sndhdr用-m模式启动的格式也跟imghdr一样,终端中调用python -m sndhdr [-r] file1 file2...就可以了。file可以是文件或者文件夹,-r参数代表递归检测。

Desktop\test>python -m sndhdr test.mp3 test.wav
test.mp3: None
test.wav: SndHeaders(filetype='wav', framerate=44100, nchannels=2, nframes=12630240, sampwidth=16)

总结:sndhdr模块内部的结构总体和imghdr非常相似,设计缺陷也很相似…模块的源码不多,也不是很难读懂,建议有兴趣的读者可以试着读下源码。

以上就是本文关于Python用sndhdr模块识别音频格式详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

Python用imghdr模块识别图片格式实例解析》、Python使用base64模块进行二进制数据编码详解》、hmac模块生成加入了密钥的消息摘要详解

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python操作CouchDB的方法
Oct 08 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
python开发中module模块用法实例分析
Nov 12 Python
Python作用域用法实例详解
Mar 15 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
python和JavaScript哪个容易上手
Jun 23 Python
python matplotlib绘制三维图的示例
Sep 24 Python
浅析Python requests 模块
Oct 09 Python
SpringBoot首页设置解析(推荐)
Feb 11 Python
用Python将库打包发布到pypi
Apr 13 Python
python基础详解之if循环语句
Apr 24 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 #Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 #Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 #Python
python实现员工管理系统
Jan 11 #Python
Python使用base64模块进行二进制数据编码详解
Jan 11 #Python
Python实现备份MySQL数据库的方法示例
Jan 11 #Python
教你用Python写安卓游戏外挂
Jan 11 #Python
You might like
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
vue-axios使用详解
2017/05/10 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python做反被爬保护的方法
2019/07/01 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
2013年大学生的自我鉴定
2013/10/24 职场文书
信息管理专业推荐信
2013/10/29 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
五五普法心得体会
2014/09/04 职场文书
优秀团支部申报材料
2014/12/26 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang