wxpython绘制音频效果


Posted in Python onNovember 18, 2019

本文实例为大家分享了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, 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: 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, ], GraphTitle, "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()

wxpython绘制音频效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
Nov 10 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
python导入坐标点的具体操作
May 10 Python
python 字典的打印实现
Sep 26 Python
python反转列表的三种方式解析
Nov 08 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
python游戏开发的五个案例分享
Mar 09 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 Python
python如何编写win程序
Jun 08 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
python导入不同目录下的自定义模块过程解析
Nov 18 #Python
解决django model修改添加字段报错的问题
Nov 18 #Python
python sorted方法和列表使用解析
Nov 18 #Python
在Django中实现添加user到group并查看
Nov 18 #Python
Django继承自带user表并重写的例子
Nov 18 #Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 #Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 #Python
You might like
基于文本的访客签到簿
2006/10/09 PHP
PHP SQLite类
2009/05/07 PHP
二招解决php乱码问题
2012/03/25 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
python3实现ftp服务功能(客户端)
2017/03/24 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
学习经验交流会主持词
2014/04/01 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python