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之再深点,更懂list
Sep 20 Python
Python中模拟enum枚举类型的5种方法分享
Nov 22 Python
Windows下安装python2.7及科学计算套装
Mar 05 Python
python解析xml文件实例分析
May 27 Python
利用python实现xml与数据库读取转换的方法
Jun 17 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
Python实现二维曲线拟合的方法
Dec 29 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
基于Python实现全自动下载抖音视频
Nov 06 Python
scrapy实践之翻页爬取的实现
Jan 05 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
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
理解python正则表达式
2016/01/15 Python
Python计算字符宽度的方法
2016/06/14 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
Python之pymysql的使用小结
2019/07/01 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
什么是测试驱动开发(TDD)
2012/02/15 面试题
大学生个人求职信例文
2014/07/07 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL