python通過wave模塊處理wav格式的音頻
發(fā)布日期:2022/10/13 11:48:26 瀏覽量:
wave用于處理wav格式的音頻數(shù)據(jù),支持單聲道/立體聲。
先看一個簡單的示例
import wave
wavRead = wave.open(’test.wav’,’rb’) #讀取音頻
params = wavRead.getparams() #獲取音頻信息
print(params)
# 其值如下,分別表示通道數(shù)為2, 采樣位寬為2, 幀率48k,幀數(shù)16291840,無壓縮
# _wave_params(nchannels=2, sampwidth=2, framerate=48000,
# nframes=16291840, comptype=’NONE’, compname=’not compressed’)
wavWrite = wave.open(’new.wav’,’wb’) #新建一個wav文件
wavWrite.setparams(params) #設(shè)置音頻參數(shù)
segment = wavRead.readframes(1629184) #從test.wav中讀取1629184幀
wavWrite.writeframes(segment) #將音頻片段寫入new.wav
wavRead.close() #關(guān)閉文件
wavWrite.close()
在運行完上面的代碼后,可以看到工作路徑下多出一個new.wav,大小差不多是test.wav的十分之一左右,即成功對test.wav進行了分割。
其中wave.open用于打開音頻文件,當(dāng)模式為rb時,表示只讀;wb為只寫。只讀模式下,返回一個Wave_read對象;只寫模式下,返回Wave_write的實例。
讀:Wave_read
除了用于關(guān)閉音頻文件的close()之外,只讀模式返回的Wave_read對象中封裝了許多無參函數(shù),用以獲取音頻數(shù)據(jù)的信息。
getnchannels() 返回聲道數(shù)量,1為單聲道,2為立體聲
getsampwidth() 返回字節(jié)長度
getframerate() 返回采樣頻率
getnframes() 返回音頻總幀數(shù)
getcomptype()
getcompname() 返回壓縮類型,然鵝只能是None
getparams() 返回一個元組,內(nèi)容包括上面五項
接下來,是Wave_read的核心功能——readframes(n)。通過該方法,可以讀取并返回以bytes對象表示的最多n幀音頻。
在讀取n幀之后,數(shù)據(jù)流的指針也會跳到n處,通過tell()函數(shù)可以返回當(dāng)前指針位置。若想讓指針重新回到文件開始,可實用rewind();通過setpos(n),可以讓指針跳到n處。
寫:Wave_write
與Wave_read中的get相對應(yīng),Wave_write中除了也提供get方法之外,也提供一些set方法,用于設(shè)置相關(guān)的信息
get set set功能
getnchannels() setnchannels(n) 設(shè)置聲道數(shù)量
getsampwidth() setsampwidth(n) 設(shè)置字節(jié)長度為n
getframerate() setframerate(n) 設(shè)置采樣頻率為n
getnframes() setnframes(n) 設(shè)置音頻總幀數(shù)為n
getcompname()
getcomptype() setcomptype(type,name) 設(shè)置壓縮格式,然鵝只能是None
getparams() setparams(tuple) 設(shè)置上面的那些內(nèi)容
接下來,與Wave_read.readframes()針鋒相對的函數(shù)為writeframes(data),用于寫入音頻數(shù)據(jù),其中data為bytes格式的二進制數(shù)據(jù)。
馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 聯(lián)系人:石先生/雷先生