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-基础-入门 简介
Aug 09 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
python 列表删除所有指定元素的方法
Apr 19 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 Python
python实现黑客字幕雨效果
Jun 21 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
Python连接字符串过程详解
Jan 06 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
python用opencv 图像傅里叶变换
Jan 04 Python
Python实现曲线拟合的最小二乘法
Feb 19 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 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
javascript 闭包疑问
2010/12/30 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
python元组操作实例解析
2014/09/23 Python
Django 路由控制的实现代码
2018/11/08 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
解决margin 外边距合并问题
2019/07/03 HTML / CSS
HTML5有哪些新特征
2015/12/01 HTML / CSS
耐克中国官方商城:Nike中国
2018/10/18 全球购物
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
函授自我鉴定
2013/11/06 职场文书
教师队伍管理制度
2014/01/14 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
基石观后感
2015/06/12 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js