用python生成一边录音一边显示波形的程序
时间: 2024-05-12 22:20:58 浏览: 54
显示录音波形
以下是一个简单的用Python生成一边录音一边显示波形的程序:
```python
import pyaudio
import numpy as np
import matplotlib.pyplot as plt
# 设置音频参数
CHUNK = 1024 # 每次读取的音频数据大小
FORMAT = pyaudio.paInt16 # 音频格式
CHANNELS = 1 # 声道数
RATE = 44100 # 采样率
# 初始化PyAudio
p = pyaudio.PyAudio()
# 打开音频流
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
# 创建一个用于显示波形的图形对象
fig, ax = plt.subplots()
x = np.arange(0, 2 * CHUNK, 2)
line, = ax.plot(x, np.random.rand(CHUNK), '-', lw=2)
# 设置图形属性
ax.set_ylim(-32768, 32767)
ax.set_xlim(0, CHUNK)
plt.setp(ax, xticks=[0, CHUNK, 2 * CHUNK], yticks=[-32768, 0, 32767])
# 开始录音和显示波形
while True:
# 读取音频数据
data = stream.read(CHUNK, exception_on_overflow=False)
# 将二进制数据转换为numpy数组
data_np = np.frombuffer(data, dtype=np.int16)
# 更新波形数据
line.set_ydata(data_np)
# 更新图形
fig.canvas.draw()
fig.canvas.flush_events()
```
这个程序使用PyAudio库实现音频录制,使用matplotlib库实现波形的实时显示。程序中的while循环不断读取音频数据,将数据转换为numpy数组,更新波形数据,然后更新图形。注意,程序中的波形数据y轴范围为-32768到32767,这是16位音频数据的范围。如果要处理其他格式的音频数据,需要相应地调整波形数据的范围。
阅读全文