#-*- 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绘制音频的更多相关文章

  1. C# NAudio录音和播放音频文件-实时绘制音频波形图(从音频流数据获取,而非设备获取)

    NAudio的录音和播放录音都有对应的类,我在使用Wav格式进行录音和播放录音时使用的类时WaveIn和WaveOut,这两个类是对功能的回调和一些事件触发. 在WaveIn和WaveOut之外还有对 ...

  2. 应用wavesurfer.js绘制音频波形图小白极速上手总结

    一.简介 1.1  引   人生中第一份工作公司有语音识别业务,需要做一个web网页来整合语音引擎的标注结果和错误率等参数,并提供人工比对的语音标注功能(功能类似于TranscriberAG等),(博 ...

  3. C# NAudio录音和播放音频文件及实时绘制音频波形图(从音频流数据获取,而非设备获取)

    下午写了一篇关于NAudio的录音.播放和波形图的博客,不太满意,感觉写的太乱,又总结了下 NAudio是个相对成熟.开源的C#音频开发工具,它包含录音.播放录音.格式转换.混音调整等功能.本次介绍主 ...

  4. wxpython绘制折线图

    environment:win10 + eclipse + pydev + python2.7.11 + wxpython3.0.2 code sample: #!/usr/bin/env pytho ...

  5. wxpython多线程通信的应用-实现边录音边绘制音谱图

    #!bin/bash/python # -*- coding=utf-8 -*- from __future__ import division import threading import wx ...

  6. 使用libzplay库封装一个音频类

    装载请说明原地址,谢谢~~      前两天我已经封装好一个duilib中使用的webkit内核的浏览器控件和一个基于vlc的用于播放视频的视频控件,这两个控件可以分别用在放酷狗播放器的乐库功能和MV ...

  7. HTML5音频可视化频谱跳动代码

    今天学习到用canvas来写  HTML5音频可视化频谱跳动代码  将代码在此做一总结: <!DOCTYPE html> <html lang="en"> ...

  8. ffplay常用命令

    一.ffplay 常用参数 ffplay不仅仅是播放器,同时也是测试ffmpeg的codec引擎,format引擎,以及filter引擎的工具,并且也可以做可视化的媒体参数分析,可以通过ffplay ...

  9. FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay

    一.简述 ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器. 在使用ffplay之前必须要安装到系统中,MAC的安装教程为:http://www.cnblog ...

随机推荐

  1. 【XSY2707】snow 线段树 并查集

    题目描述 有\(n\)个人和一条长度为\(t\)的线段,每个人还有一个工作范围(是一个区间).最开始整条线段都是白的.定义每个人的工作长度是这个人的工作范围中白色部分的长度(会随着线段改变而改变).每 ...

  2. 【BZOJ2333】【SCOI2011】棘手的操作 treap合并

    题目大意 有\(n\)个节点,标号从1到\(n\),这\(n\)个节点一开始相互不连通.第\(i\)个节点的初始权值为\(a_i\),接下来有如下一些操作: \(U~x~y\):加一条边,连接第\(x ...

  3. pytorch kaggle 泰坦尼克生存预测

    也不知道对不对,就凭着自己的思路写了一个 数据集:https://www.kaggle.com/c/titanic/data import torch import torch.nn as nn im ...

  4. CISCO运维记录之3650堆叠设备升级IOS(Version 16.3.6版本存在bug)

    CISCO运维记录之3650堆叠设备升级IOS(Version 16.3.6版本存在bug) 思科3000系列交换机使用cat3k_caa-universalk9.16.3.6版本存在bug,设备运行 ...

  5. [模板] 动态dp

    用途 对于某些树形dp(目前只会树上最大权独立集或者类似的),动态地修改点权,并询问修改后的dp值 做法(树剖版) 以最大权独立集为例 设$f[x][0/1]$表示x选不选,这棵子树的最大权独立集大小 ...

  6. day15-集合

    快捷键: 先定义name,age再利用快捷键生成,Alt+shift+s +c:空参 Alt+shift+s +o:有参 Alt+shift+s +r:set&get方法Ctrl+shift+ ...

  7. [HEOI2014]平衡(整数划分数)

    下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”. 这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子 ...

  8. 【算法】php计算出丑数

    丑数描述 把只包含因子2,3,5的正整数被称作丑数,比如4,10,12都是丑数,而7,23,111则不是丑数. 判断方法    首先除2,直到不能整除为止,然后除5到不能整除为止,然后除3直到不能整除 ...

  9. poj2524(并查集水题)

    题目链接:http://poj.org/problem?id=2524 题目大意:学校共有n个同学,告诉你m对同学信仰同一宗教,问这个学校学生信仰宗教的数目最多为多少. 例: Sample Input ...

  10. A1124. Raffle for Weibo Followers

    John got a full mark on PAT. He was so happy that he decided to hold a raffle(抽奖) for his followers ...