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群发邮件实例代码
Jan 03 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
python正则中最短匹配实现代码
Jan 16 Python
浅谈python常用程序算法
Mar 22 Python
详解python中sort排序使用
Mar 23 Python
python单例模式的多种实现方法
Jul 26 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
pytorch+lstm实现的pos示例
Jan 14 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
python入门学习关于for else的特殊特性讲解
Nov 20 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对mongodb的扩展(初出茅庐)
2012/11/11 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
php中hashtable实现示例分享
2014/02/13 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
PHP count()函数讲解
2019/02/03 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
python Django批量导入不重复数据
2016/03/25 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
运动会入场解说词
2014/02/07 职场文书
代办委托书怎么写
2014/08/01 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
2014年安全员工作总结
2014/11/13 职场文书
计算机专业自荐信范文
2015/03/26 职场文书