Python用sndhdr模块识别音频格式详解
Python  /  管理员 发布于 7年前   558
本文主要介绍了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>, <function test_wav at 0x000001A99B527E18>, <function test_8svx at 0x000001A99B527EA0>, <function 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.wavtest.mp3: Nonetest.wav: SndHeaders(filetype='wav', framerate=44100, nchannels=2, nframes=12630240, sampwidth=16)
总结:sndhdr模块内部的结构总体和imghdr非常相似,设计缺陷也很相似…模块的源码不多,也不是很难读懂,建议有兴趣的读者可以试着读下源码。
以上就是本文关于Python用sndhdr模块识别音频格式详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
《Python用imghdr模块识别图片格式实例解析》、《Python使用base64模块进行二进制数据编码详解》、《hmac模块生成加入了密钥的消息摘要详解》
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号