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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
在Docker上部署Python的Flask框架的教程
Apr 08 Python
python字符串连接方法分析
Apr 12 Python
python使用正则表达式匹配字符串开头并打印示例
Jan 11 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
python实现朴素贝叶斯算法
Nov 19 Python
django框架防止XSS注入的方法分析
Jun 21 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
python requests模拟登陆github的实现方法
Dec 26 Python
python变量的作用域是什么
May 26 Python
python爬虫基础知识点整理
Jun 02 Python
用PYTHON去计算88键钢琴的琴键频率和音高
Apr 10 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调用MySQL的存储过程的实现代码
2008/08/12 PHP
PHP操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
浅谈JS运算符&amp;&amp;和|| 及其优先级
2016/08/10 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
python统计cpu利用率的方法
2015/06/02 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
幼儿园教研活动总结
2014/04/30 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS
python基础之类属性和实例属性
2021/10/24 Python