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中的yield浅析
Jun 16 Python
Python脚本实现虾米网签到功能
Apr 12 Python
Python序列操作之进阶篇
Dec 08 Python
Python操作SQLite数据库的方法详解
Jun 16 Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
Django 多环境配置详解
May 14 Python
Python文件操作方法详解
Feb 09 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
Python常用模块函数代码汇总解析
Aug 31 Python
详解python中的异常捕获
Dec 15 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程序--记数器
2006/10/09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
深入解析nodejs HTTP服务
2017/07/25 NodeJs
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
python中assert用法实例分析
2015/04/30 Python
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
python地震数据可视化详解
2019/06/18 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
Django-imagekit的使用详解
2020/07/06 Python
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
高一自我鉴定
2013/12/17 职场文书
销售辞职报告范文
2014/01/12 职场文书
MySQL中varchar和char类型的区别
2021/11/17 MySQL
vue3不同环境下实现配置代理
2022/05/25 Vue.js