国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python用sndhdr模塊識別音頻格式詳解

2020-02-16 11:36:10
字體:
來源:轉載
供稿:網友

本文主要介紹了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)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永定县| 巴中市| 施甸县| 永清县| 北海市| 比如县| 突泉县| 泰来县| 遵化市| 漠河县| 宣武区| 南华县| 博湖县| 巧家县| 衡水市| 桐庐县| 双柏县| 平凉市| 东至县| 荔浦县| 共和县| 兖州市| 迁西县| 阿拉善左旗| 兴业县| 天等县| 郑州市| 肥东县| 漳州市| 肃宁县| 温泉县| 宜都市| 沭阳县| 虹口区| 岚皋县| 西峡县| 改则县| 黎平县| 金秀| 万全县| 加查县|