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中的sort方法使用详解
Jul 25 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 Python
Flask框架实现给视图函数增加装饰器操作示例
Jul 16 Python
pytorch训练imagenet分类的方法
Jul 27 Python
10个Python小技巧你值得拥有
Sep 29 Python
python抓取京东小米8手机配置信息
Nov 13 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
基于python实现坦克大战游戏
Oct 27 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
js读取本地文件的实例
2017/12/22 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
Python中super关键字用法实例分析
2015/05/28 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
python使用tornado实现登录和登出
2018/07/28 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
Python面向对象封装操作案例详解
2019/12/31 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
药学专业大学生自荐信
2013/09/28 职场文书
求职推荐信
2013/10/28 职场文书
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
党员剖析材料范文
2014/09/30 职场文书
群众路线个人整改方案
2014/10/25 职场文书
班主任工作总结范文
2015/08/13 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
Redis实战高并发之扣减库存项目
2022/04/14 Redis
python游戏开发之pygame实现接球小游戏
2022/04/22 Python