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 Django连接MySQL数据库做增删改查
Nov 07 Python
跟老齐学Python之有容乃大的list(3)
Sep 15 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
Python简单的制作图片验证码实例
May 31 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
python对象与json相互转换的方法
May 07 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
Python基础之进程详解
May 21 Python
关于python爬虫应用urllib库作用分析
Sep 04 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
深入解析php模板技术原理【一】
2008/01/10 PHP
关于php fread()使用技巧
2010/01/22 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
php验证码生成代码
2015/11/11 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
layui文件上传实现代码
2017/05/20 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
电气专业应届生求职信
2013/11/01 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
餐厅经理岗位职责范本
2014/02/17 职场文书
开学典礼演讲稿
2014/05/23 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
2014年化验室工作总结
2014/11/21 职场文书
暑期实践个人总结
2015/03/06 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
nginx rewrite功能使用场景分析
2022/05/30 Servers