代碼如下
控制臺不報錯,也不顯示圖形
import wave
import numpy as np
import pylab as plt
#打開wav檔案 ,open回傳一個的是一個Wave_read類的實體,通過呼叫它的方法讀取WAV檔案的格式和資料。
f = wave.open(r"D:\\img\\hello.wav", "rb")
#讀取格式資訊
#一次性回傳所有的WAV檔案的格式資訊,它回傳的是一個組元(tuple):聲道數, 量化位數(byte單位), 采樣頻率, 采樣點數, 壓縮型別, 壓縮型別的描述。wave模塊只支持非壓縮的資料,因此可以忽略最后兩個資訊
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
#讀取波形資料
#讀取聲音資料,傳遞一個引數指定需要讀取的長度(以取樣點為單位)
str_data = f.readframes(nframes)
f.close()
#將波形資料轉換成陣列
#需要根據聲道數和量化單位,將讀取的二進制資料轉換為一個可以計算的陣列
wave_data = np.frombuffer(str_data,dtype = np.short)
wave_data = wave_data*1.0/(max(abs(wave_data)))#wave幅值歸一化
print("wave",len(wave_data))
print("nframes",nframes)
print("framerate",framerate)
#通過取樣點數和取樣頻率計算出每個取樣的時間。
time=np.arange(0,nframes)/framerate
len_time = 14239
am = time[0:len_time]
#time 也是一個陣列,與wave_data[0]或wave_data[1]配對形成系列點坐標
plt.figure()
plt.subplot(5,1,1)
plt.plot(am,wave_data)
plt.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/133207.html
上一篇:模糊聚類演算法,準確率判斷?
下一篇:大佬們來救救小白
