01 用Python讀取和寫入wav聲音文件
01 用python讀取wav聲音文件(使用wave模塊)
import numpy as np #載入numpy庫
import matplotlib.pyplot as plt #載入matplotlib庫的pyplot模塊
import wave #載入wave模塊
f=wave.open(r'E:\abearing\rotor.wav','rb') #打開wav文件
nchannels,sampwidth,framerate,nframes=f.getparams()[:4] #獲取wav文件的聲道數,量化位數,采樣率,總采樣點
f.setpos(10*framerate) #定位采樣點的開始位置,第10秒
s_data=f.readframes(20*framerate) #讀取開始位置以后的采樣點,后20秒
f.close()
w_data=np.fromstring(s_data,dtype=np.short) #將字符串轉化為數值
w_data.shape=(-1,nchannels) #將一維數組轉化為兩列數組
time=np.arange(10*framerate,30*framerate)/framerate #定義時間點
plt.subplot(211) #子圖1
plt.plot(time,w_data[:,0],c='blue')
plt.subplot(212) #子圖2
plt.plot(time,w_data[:,1],c='green')
plt.xlabel('time(second)') #X軸的標簽

02 用python寫入wav聲音文件
import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as sig #載入scipy庫的signal模塊
framerate=44100 #采樣率為44100
time=10 #wav聲音時長為10秒
t=np.arange(0,time,1/framerate) #定義時間點
w_data=sig.chirp(t,100,time,1000,method='linear')*1000 #生成線性掃頻信號,從100Hz到1000Hz
w_data=w_data.astype(np.short) #浮點型數組轉換為整型數組
f=wave.open(r'E:\abearing\sweep.wav','wb') #打開wav聲音文件
f.setnchannels(1) #定義聲道數為1
f.setsampwidth(3) #定義量化位數 3*8=24
f.setframerate(framerate) #定義采樣率
f.writeframes(w_data.tostring()) #寫入wav聲音文件
f.close()
03 用python讀取wav聲音文件(使用scipy庫)
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as wav #載入scipy庫的io.wavfile模塊
framerate,w_data=wav.read(r'E:\abearing\rotor.wav')
time=np.arange(10*framerate,30*framerate)/framerate
plt.subplot(211)
plt.plot(time,w_data[10*framerate:30*framerate,0],c='blue')
plt.subplot(212)
plt.plot(time,w_data[10*framerate:30*framerate,1],c='blue')
plt.xlabel('time(second)')

04 用python寫入wav聲音文件(使用scipy庫)
wav.write('name.wav',rate,data[])
讀者可以自行嘗試
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















