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 相关文章推荐
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
python中单下划线_的常见用法总结
Jul 10 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
Pyqt5自适应布局实例
Dec 13 Python
基于Python和PyYAML读取yaml配置文件数据
Jan 13 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
Python为何不支持switch语句原理详解
Oct 21 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 Python
python cv2图像质量压缩的算法示例
Jun 04 Python
详解Flask开发技巧之异常处理
Jun 15 Python
Pygame如何使用精灵和碰撞检测
Nov 17 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 在线翻译函数代码
2009/05/07 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
javascript下function声明一些小结
2007/12/28 Javascript
Javascript 刷新全集常用代码
2009/11/22 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python list转dict示例分享
2014/01/28 Python
Python3写入文件常用方法实例分析
2015/05/22 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
房产转让协议书
2014/04/11 职场文书
初中生期末评语大全
2014/04/24 职场文书
倡议书范文格式
2014/05/12 职场文书
庆七一活动简报
2015/07/20 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python
Java移除无效括号的方法实现
2021/08/07 Java/Android