资源简介
能够实时录音并显示波形,能够读取音频文件并实时显示波形,此程序基于动画刷新的思想,不断刷新图像,以达到实时显示的目的。通过测试和修改,代码运行正常。
代码片段和文件信息
# coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import pyaudio
import wave
import os
class SubplotAnimation(animation.TimedAnimation):
def __init__(self static=False):
“““
音频波形动态显示,实时显示波形,实时进行离散傅里叶变换分析频域
:param static: 是否为静态模式
:param path: wav 文件路径
“““
path=r‘C:\Users\xh941\Desktop\music1.wav‘
self.static = static
if static and os.path.isfile(path):
self.stream = wave.open(path)
self.rate = self.stream.getparams()[2]
self.chunk = self.rate/2
self.read = self.stream.readframes
else:
self.rate = 2 ** 16
self.chunk = 2 ** 12
p = pyaudio.PyAudio()
self.stream = p.open(format=pyaudio.paInt16 channels=1 rate=self.rate
input=True frames_per_buffer=self.chunk)
self.read = self.stream.read
fig = plt.figure()
ax1 = fig.add_subplot(2 1 1)
ax2 = fig.add_subplot(2 1 2)
self.t = np.linspace(0 int(self.chunk - 1) int(self.chunk))
ax1.set_xlabel(‘t‘)
ax1.set_ylabel(‘x‘)
self.line1 = ax1.plot([] [] lw=2)
ax1.set_xlim(0 self.chunk)
ax1.set_ylim(-15000 15000)
ax2.set_xlabel(‘hz‘)
ax2.set_ylabel(‘y‘)
self.line2 = ax2.plot([] [] lw=2)
ax2.set_xlim(0 self.chunk)
ax2.set_ylim(-50 100)
# 更新间隔/ms
interval = int(1000*self.chunk/self.rate)
animation.TimedAnimation.__init__(self fig interval=interval blit=True)
def _draw_frame(self framedata):
i = framedata
if self.static:
# 读取静态wav文件波形
y = np.fromstring(self.read(int(int(self.chunk)/2)+1) dtype=np.int16)[:-1]
else:
# 实时读取声频
y = np.fromstring(self.read(self.chunk) dtype=np.int16)
x = np.linspace(0 int(self.chunk) - 1 y.shape[0])
# 画波形图
self.line1.set_data(x y)
# 傅里叶变化
xf = np.fft.rfft(y) / self.chunk
xfp = 20 * np.log10(np.clip(np.abs(xf) 1e-20 1e100))
freqs = np.linspace(0 int(self.rate) xfp.shape[0])
self.line2.set_data(freqs xfp)
self._drawn_artists = [self.line1 self.line2]
def new_frame_seq(self):
return iter(range(self.t.size))
def _init_draw(self):
lines = [self.line1 self.line2]
for l in lines:
l.set_data([] [])
ani = SubplotAnimation()
plt.show()
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2709 2020-02-10 22:19 实时读取音频并显示波形\main.py
文件 100044 2019-05-10 12:43 实时读取音频并显示波形\music1.wav
目录 0 2020-02-10 22:15 实时读取音频并显示波形\
- 上一篇:源代码.rar
- 下一篇:数据建模层次分析法填志愿问题
相关资源
- 源代码.rar
- 电子密码锁verilog语言程序代码.zip
- 课程设计题十二:电子密码锁.zip
- 实验三 TCP Tahoe与Reno 运行机制对比分
- 空间分析的源代码
- 基于QT实现俄罗斯方块游戏。代码只有
- 基于51单片机水量检测c代码+proteus仿真
- 语义分析c源代码
- 等值线生成算法代码和
- memcached1.4.5源代码
- 课程设计——路由与交换
- 基于opencv的blob分析代码
- 100个VHDL
- 实验二 实现一门语言的词法分析器
- 音频信号分析仪(快速傅里叶变换)
- 《恶意代码分析实战》-实验文件
- 文本分析R代码
- 信号模态分析EMD相关代码
- 《ELF文件格式分析.pdf》与elf解析代码
- 电力系统分析 Hadi Saadat 光盘源代码
- 哈工大软件学院编译原理语法分析源
- 汇编语言课程设计实验报告——拼图
- 神级memcached源代码分析文档_1.4.0代码
- 自动售货机模拟操作系统代码
- VHDL语言100例详解 程序代码
- 智能加湿器完美运行程序代码带说明
- 汇编语言贪吃蛇、俄罗斯方块双任务
- 鲁棒主成分分析测试代码
- 物流配货网项目源代码
- 飞机订票系统delphi源代码
评论
共有 条评论