用python生成一边录音一边显示FFT的程序
时间: 2024-05-05 12:15:05 浏览: 120
以下是使用Python生成一边录音一边显示FFT的程序:
```python
import pyaudio
import numpy as np
import matplotlib.pyplot as plt
# 设置参数
CHUNK = 1024 # 每个缓存块大小
FORMAT = pyaudio.paInt16 # 采样位数
CHANNELS = 1 # 声道数
RATE = 44100 # 采样频率
RECORD_SECONDS = 10 # 录制时间
# 初始化PyAudio
p = pyaudio.PyAudio()
# 打开音频流
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
# 创建FFT图形窗口
fig, ax = plt.subplots(1, figsize=(15, 7))
# 创建一个数组用于存储FFT数据
fft_array = np.zeros(int(CHUNK/2))
# 音频流开始录制
for i in range(0, int(RATE/CHUNK*RECORD_SECONDS)):
# 读取音频流缓存
data = stream.read(CHUNK)
# 将缓存转换为数组
data_array = np.frombuffer(data, dtype=np.int16)
# 计算FFT
fft_data = np.abs(np.fft.fft(data_array))[0:int(CHUNK/2)] / (256 * CHUNK)
# 更新FFT数据
fft_array = np.concatenate((fft_array[len(fft_data):], fft_data))
# 清除图形
ax.clear()
# 绘制FFT图形
ax.plot(fft_array)
# 设置坐标轴范围
ax.set_xlim([0, CHUNK/2])
# 显示图形
plt.pause(0.001)
# 音频流结束录制
stream.stop_stream()
stream.close()
p.terminate()
```
运行该程序后,它将打开一个窗口,显示正在录制的音频流的FFT数据。通过音频流的`read()`方法和numpy库中的FFT函数,我们可以轻松地计算出FFT数据,并使用matplotlib库中的`plot()`方法绘制FFT图形。由于我们要一边录音一边显示FFT数据,所以我们需要在每个循环中清除图形,并使用`pause()`方法暂停一段时间,以便我们能够看到正在录制的音频流的FFT数据。
阅读全文