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 相关文章推荐
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
Sanic框架Cookies操作示例
Jul 17 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
May 11 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
python3排序的实例方法
Oct 20 Python
Python自动化测试基础必备知识点总结
Feb 07 Python
用python批量解压带密码的压缩包
May 31 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
网站当前的在线人数
2006/10/09 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
Python中使用item()方法遍历字典的例子
2014/08/26 Python
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
银行求职信个人范文
2013/12/16 职场文书
致铅球运动员广播稿精选
2014/01/12 职场文书
优秀班组长事迹
2014/05/31 职场文书
植物生产学专业求职信
2014/08/08 职场文书
生物工程专业求职信
2014/09/03 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
个人事迹材料范文
2014/12/29 职场文书
山楂树之恋观后感
2015/06/11 职场文书
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python