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中使用item()方法遍历字典的例子
Aug 26 Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
Python实现学校管理系统
Jan 11 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
python爬虫超时的处理的实例
Dec 19 Python
在python中实现强制关闭线程的示例
Jan 22 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
Django组件cookie与session的具体使用
Jun 05 Python
Python实现序列化及csv文件读取
Jan 19 Python
python 多线程共享全局变量的优劣
Sep 24 Python
Python random模块的使用示例
Oct 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中创建并处理图象
2006/10/09 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
php简单中奖算法(实例)
2017/08/15 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[20:30]职业巡回赛回顾
2018/08/09 DOTA
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python 多进程和数据传递的理解
2017/10/09 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
python 字典的打印实现
2019/09/26 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
满月酒答谢词
2014/01/14 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
信访维稳承诺书
2015/05/04 职场文书
感恩教师主题班会
2015/08/12 职场文书
公司与个人合作协议书
2016/03/19 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL