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中degrees()方法的使用
May 18 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
Python模块文件结构代码详解
Feb 03 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
python线程池threadpool使用篇
Apr 27 Python
Django框架自定义session处理操作示例
May 27 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
Python request使用方法及问题总结
Apr 26 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 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
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
理解JavaScript原型链
2016/10/25 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
Python编程入门的一些基本知识
2015/05/13 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
通过实例解析Python调用json模块
2019/12/11 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
服务生自我鉴定
2014/01/22 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
岗位明星事迹材料
2014/05/18 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫