我正在通过麦克风接收音频流,使用pyaudio读取数据,对该数据执行FFT计算,并希望将FFT幅度数据显示在Y轴上,将FFT频率数据显示在X轴上,并且每秒更新20次(以20fps为例),基本上要像这样(https://www.youtube.com/watch?v=Tu8p2pywJAs&t=93s),但是低频率在左边,高频率在右边。 我的代码只完成到以下步骤。我是新手,连Python都不熟悉,希望得到帮助。请尽量用易懂的术语,如果需要详细解释,请尊重地提出。非常感谢您的时间!
import pyaudio
import numpy as np
import time
import matplotlib.animation as animation
import matplotlib.pyplot as plt
from matplotlib import style
pa = pyaudio.PyAudio()
callback_output = []
def callback(in_data, frame_count, time_info, flag):
audio_data = np.fromstring(in_data, dtype=np.int16)
callback_output.append(audio_data)
return None,pyaudio.paContinue
stream = pa.open(format=pyaudio.paInt16,
channels=1,
rate=44100,
output=False,
input=True,
stream_callback=callback)
stream.start_stream()
fig = plt.gcf()
fig.show()
fig.canvas.draw()
while stream.is_active():
fft_data = np.fft.fft(callback_output)
fft_freq = np.fft.fftfreq(len(fft_data))
plt.plot(fft_freq,fft_data)
plt.xlim(min(fft_freq),max(fft_freq))
fig.canvas.draw()
plt.pause(0.05)
fig.canvas.flush_events()
fig.clear()
stream.close()
pa.terminate()