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让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
python连接数据库的方法
Oct 19 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
Python中查看变量的类型内存地址所占字节的大小
Jun 26 Python
wxPython实现列表增删改查功能
Nov 19 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
Django框架中模型的用法
Jun 10 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
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
php 模拟get_headers函数的代码示例
2013/04/27 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
php对称加密算法示例
2014/05/07 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
PHP 错误处理机制
2015/07/06 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
python中的一些类型转换函数小结
2013/02/10 Python
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
python基于phantomjs实现导入图片
2016/05/13 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python解惑之整数比较详解
2017/04/24 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
博士研究生自我鉴定范文
2013/12/04 职场文书
奥利奥广告词
2014/03/20 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
投标服务承诺书
2014/05/28 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js