pyaudio 麦克风录音与FuncAnimation动态可视化

pyaudio 可以将麦克风录音转换为编码,而 FuncAnimation 的工作就是将编码转为整数类型,然后动态的画出来:

import pyaudio
import wave
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 1024 * 10

audio = pyaudio.PyAudio() # 

fig, ax = plt.subplots() # 

x = np.arange(0, CHUNK, ) # 横坐标间隔

line, = ax.plot(x, np.random.rand(CHUNK)) # 生成随机数 plot 并取列表的第一个元素

stream = audio.open(format=FORMAT, channels=CHANNELS,
                    rate=RATE, input=True, frames_per_buffer=CHUNK) # 开始录音

# 相当于绘图前做一些初始化工作
def init():
    ax.set_ylim(-2**9, 2**9)
    fig.set_size_inches(10, 5) # 设置画布宽度

# 每次更新图像
def update(frame):
    data = stream.read(CHUNK) # 录一个chunk
    data_int = np.frombuffer(data, dtype=np.int16) # 把 bytes 数据 转为 int
    line.set_ydata(data_int) # 设置新的数据
    
ani = FuncAnimation(fig=fig, func=update, init_func=init) 
plt.show()

stream.stop_stream()
stream.close()
audio.terminate()

其中 blit=True 表示使用图像优化,如果开启,那么初始化函数和更新函数 需要返回一个可迭代对象,我这里似乎每次的plot 都是不同的,因此没有开启,图像大致如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值