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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
用Python中的字典来处理索引统计的方法
May 05 Python
Python3.2中Print函数用法实例详解
May 19 Python
Python实现的Excel文件读写类
Jul 30 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
详解Python中使用base64模块来处理base64编码的方法
Jul 01 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
python 实现UTC时间加减的方法
Dec 31 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
Jun 04 Python
Python list和str互转的实现示例
Nov 16 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破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP使用MPDF类生成PDF的方法
2015/12/08 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
浅谈Python traceback的优雅处理
2018/08/31 Python
Python数据可视化之画图
2019/01/15 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
2014年中班元旦活动方案
2014/02/14 职场文书
大学军训感言800字
2014/02/27 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
成都人事代理协议书
2014/10/25 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python