wxpython绘制音频效果
本文实例为大家分享了wxpython绘制音频的具体代码,供大家参考,具体内容如下
#-*-coding:utf-8-*-
################################################################################
##使用wxPython的绘图模块wxPyPlot,需要数据可视化的时候,无需再借用其他的库或模块了
################################################################################
importnumpyasnp
importwx
importwx.lib.plotaswxPyPlot#导入绘图模块,并命名为wxPyPlot
importwave
importpylabaspl
#需要把数据封装进入MyDataObject中
defMyDataObject():
#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='GreenMarkers',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='RedLine',colour='red')
GraphTitle="PlotData(SinandCos)"
returnwxPyPlot.PlotGraphics([markers,lines],GraphTitle,"XAxis","YAxis")
#解析wav数据
defMyWavData(wav_filename=""):
print('working')
#打开wav文档
file=wave.open("mic4.wav","r")
#读取格式信息
#(nchannels,sampwidth,framerate,nframes,comptype,compname)
params=file.getparams()
nchannels,sampwidth,framerate,nframes=params[:4]
print(nchannels,sampwidth,framerate,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:lenoftimeandwav:",len(time_and_wav))
print("debug:timeandwav:",time_and_wav.shape)
lines=wxPyPlot.PolySpline(time_and_wav,legend='BlueLine',colour='blue')
GraphTitle="thefreqofwavfile"
returnwxPyPlot.PlotGraphics([lines,],GraphTitle,"time/s","fre/Hz")
classTestFrame1(wx.Frame):
def__init__(self,parent=None,id=wx.ID_ANY,title="UsingwxPyPlot"):
wx.Frame.__init__(self,parent,id,title,size=(800,600))
#创建菜单栏
self.mainmenu=wx.MenuBar()
#创建菜单
menu=wx.Menu()
menu.Append(100,'Draw1','Drawplots1')
self.Bind(wx.EVT_MENU,self.OnPlotDraw1,id=100)
menu.Append(200,'Draw_wav','Drawwav')
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)#此处导入绘图面板
defOnPlotDraw1(self,event):#绘图函数
self.pc.Draw(MyDataObject())
defOnPlotDraw_wav(self,event):
self.pc.Draw(MyWavData())
defmain():
app=wx.App()
#MyWavData()
tf=TestFrame1()
tf.Show()
app.MainLoop()
#测试wxPyPlot的代码
if__name__=='__main__':
main()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。