溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在Python中使用sndhdr模塊識(shí)別音頻的格式

發(fā)布時(shí)間:2021-03-17 16:20:27 來源:億速云 閱讀:233 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章給大家介紹怎么在Python中使用sndhdr模塊識(shí)別音頻的格式,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

sndhdr模塊

功能描述:sndhdr模塊提供檢測(cè)音頻類型的接口。

唯一一個(gè)API

sndhdr模塊提供了sndhdr.what(filename)和sndhdr.whathdr(filename)兩個(gè)函數(shù)。但實(shí)際上它們的功能是一樣的。(不知道多寫一個(gè)的意義何在,what函數(shù)在內(nèi)部調(diào)用了whathdr函數(shù)并把數(shù)據(jù)完完整整地返回)

在之前的版本,whathdr函數(shù)返回元組類型的數(shù)據(jù),在Python3.5版本之后改為返回一個(gè)namedtuple。返回的元組包括5個(gè)屬性:filetype、framerate、nchannels、nframes和sampwidth。

1.filetype代表音頻格式。值為:'aifc', ‘a(chǎn)iff', ‘a(chǎn)u', ‘hcom', ‘sndr', ‘sndt', ‘voc', ‘wav', ‘8svx', ‘sb', ‘ub', ‘ul'或者None中之一。常見的幾個(gè)格式反倒不支持。
2.framerate代表音頻文件的幀率。如果音頻文件難以解碼或者未知,該值會(huì)返回0。
3.nchannels代表通道數(shù)。如果音頻文件難以解碼或者未知,該值會(huì)返回0。
4.nframes代表幀數(shù)。如果無法確定則返回-1。
5.sampwidth代表返回樣本的長(zhǎng)度(比特),值為8的倍數(shù),或者返回A(A-LAW格式)、u(u-LAW格式)。

>>> import sndhdr
>>> sndhdr.what('test.mp3') # 無法檢測(cè),返回None
>>> sndhdr.what('test.wav')
SndHeaders(filetype='wav', framerate=44100, nchannels=2, nframes=12630240, sampwidth=16)

注:模塊在檢測(cè)AIFC和AIFF時(shí)使用了aifc模塊。檢測(cè)wav時(shí)使用了wave模塊。這兩個(gè)都是Python標(biāo)準(zhǔn)庫里面的模塊

自定義檢測(cè)流程

和imghdr模塊一樣,sndhdr內(nèi)部也使用了一個(gè)tests列表維護(hù)檢測(cè)函數(shù)。如果想要自行定義檢測(cè)流程,可以通過修改tests列表達(dá)到目的。

>>> 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): # 自定義檢測(cè)函數(shù)
... print("Maybe mp3 or aac?")
...
>>> sndhdr.what("test.mp3")
>>> sndhdr.tests.append(final) # 添加自定義檢測(cè)函數(shù)到檢測(cè)列表中
>>> sndhdr.what("test.mp3")
Maybe mp3 or aac?

自行添加檢測(cè)函數(shù)需要接收兩個(gè)參數(shù)h和f,h是用來檢測(cè)的字節(jié)串,f是file對(duì)象。

命令行啟動(dòng)sndhdr模塊

sndhdr用-m模式啟動(dòng)的格式也跟imghdr一樣,終端中調(diào)用python -m sndhdr [-r] file1 file2...就可以了。file可以是文件或者文件夾,-r參數(shù)代表遞歸檢測(cè)。

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)

關(guān)于怎么在Python中使用sndhdr模塊識(shí)別音頻的格式就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI