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 文件操作技巧(File operation) 实例代码分析
Aug 11 Python
python中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
python遍历文件夹下所有excel文件
Jan 03 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
python实现简单日志记录库glog的使用
Dec 13 Python
python numpy数组复制使用实例解析
Jan 10 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
python代码区分大小写吗
Jun 17 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
Python基础学习之奇异的GUI对话框
May 27 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 socke 向指定页面提交数据
2008/07/23 PHP
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
php二维码生成以及下载实现
2017/09/28 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
js简单抽奖代码
2015/01/16 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
业务员岗位职责范本
2013/12/15 职场文书
个人合伙协议书范本
2014/10/14 职场文书
财务经理岗位职责
2015/01/31 职场文书
法律服务所工作总结
2015/08/10 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server