1. 程式人生 > 程式設計 >wxpython繪製音訊效果

wxpython繪製音訊效果

本文例項為大家分享了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()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。