wxpython繪製音訊效果
阿新 • • 發佈:2020-01-09
本文例項為大家分享了wxpython繪製音訊的具體程式碼,供大家參考,具體內容如下
#-*- coding: utf-8 -*- ################################################################################ ## 使用wxPython的繪圖模組wxPyPlot,需要資料視覺化的時候,無需再借用其他的庫或模組了 ################################################################################ import numpy as np import wx import wx.lib.plot as wxPyPlot # 匯入繪圖模組,並命名為wxPyPlot import wave import pylab as pl # 需要把資料封裝進入MyDataObject中 def MyDataObject(): # 50 個點的sin函式,用藍色圓點表示 data1 = 2.*np.pi*np.arange(100)/100. data1.shape = (50,2) data1[:,1] = np.sin(data1[:,0]) print ("debug:",data1.shape) markers = wxPyPlot.PolyMarker(data1,legend='Green Markers',colour='blue',marker='circle',size=1) # 50個點的cos函式,用紅色表示 data2 = 2.*np.pi*np.arange(100)/100. data2.shape = (50,2) print ("debug: data2",len(data2)) data2[:,1] = np.cos(data2[:,0]) lines = wxPyPlot.PolySpline(data2,legend='Red Line',colour='red') GraphTitle = "Plot Data(Sin and Cos)" return wxPyPlot.PlotGraphics([markers,lines],GraphTitle,"X Axis","Y Axis") # 解析wav資料 def MyWavData(wav_filename=""): print('working') # 開啟wav文件 file = wave.open("mic4.wav","r") # 讀取格式資訊 # (nchannels,sampwidth,framerate,nframes,comptype,compname) params = file.getparams() nchannels,nframes = params[:4] print (nchannels,nframes) # 讀取波形資料 str_data = file.readframes(nframes) # 檔案使用完畢,關閉檔案 file.close() # 將波形資料裝換成陣列 wave_data = np.fromstring(str_data,dtype=np.short) wave_data.shape = (-1,2) wave_data = wave_data.T # 矩陣轉置 time = np.arange(0,nframes) * (1.0 / framerate) # print ("debug: time:",len(time)) # print ("debug: wave_data:",len(wave_data[0][0:len(time)])) # print ("debug: time:",time) # print ("debug: wave:",wave_data) time_and_wav = np.asarray([time,wave_data[0][0:len(time)]]).T print ("debug: len of time and wav: ",len(time_and_wav)) print ("debug: time and wav: ",time_and_wav.shape) lines = wxPyPlot.PolySpline(time_and_wav,legend='Blue Line',colour='blue') GraphTitle = "the freq of wav file" return wxPyPlot.PlotGraphics([lines,],"time/s","fre/Hz") class TestFrame1(wx.Frame): def __init__(self,parent=None,id=wx.ID_ANY,title="Using wxPyPlot"): wx.Frame.__init__(self,parent,id,title,size=(800,600)) # 建立選單欄 self.mainmenu = wx.MenuBar() # 建立選單 menu = wx.Menu() menu.Append(100,'Draw1','Draw plots1') self.Bind(wx.EVT_MENU,self.OnPlotDraw1,id=100) menu.Append(200,'Draw_wav','Draw wav') self.Bind(wx.EVT_MENU,self.OnPlotDraw_wav,id=200) # 新增選單到選單欄 self.mainmenu.Append(menu,'&Plot') # 設定選單Bar self.SetMenuBar(self.mainmenu) # 建立狀態列,顯示資訊 self.CreateStatusBar(2) self.pc = wxPyPlot.PlotCanvas(self) # 此處匯入繪圖面板 def OnPlotDraw1(self,event): # 繪圖函式 self.pc.Draw(MyDataObject()) def OnPlotDraw_wav(self,event): self.pc.Draw(MyWavData()) def main(): app = wx.App() # MyWavData() tf = TestFrame1() tf.Show() app.MainLoop() # 測試wxPyPlot的程式碼 if __name__ == '__main__': main()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。