Python用sndhdr模組識別音頻格式詳解,pythonsndhdr

來源:互聯網
上載者:User

Python用sndhdr模組識別音頻格式詳解,pythonsndhdr

本文主要介紹了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模組產生加入了密鑰的訊息摘要詳解

如有不足之處,歡迎留言指出。感謝朋友們對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.