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在Console下显示文本进度条的方法
Feb 14 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
对python 自定义协议的方法详解
Feb 13 Python
numpy求平均值的维度设定的例子
Aug 24 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
浅析Python 条件控制语句
Jul 15 Python
容易被忽略的Python内置类型
Sep 03 Python
Python collections.deque双边队列原理详解
Oct 05 Python
Python ellipsis 的用法详解
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
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
php批量修改表结构实例
2017/05/24 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
基于jquery的一个图片hover的插件
2010/04/24 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
nodeJS微信分享
2017/12/20 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
美国Max仓库:Max Warehouse
2020/05/31 全球购物
经典而简洁的婚礼主持词
2014/03/13 职场文书
关于爱国的标语
2014/06/24 职场文书
超市促销活动总结
2014/07/01 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
作风建设整改方案
2014/10/27 职场文书
2015团员个人年度总结
2015/11/24 职场文书
Win11更新失败并提示0xc1900101
2022/04/19 数码科技
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android